fix: use personas only within current chat session context

This commit is contained in:
Carl-Robert Linnupuu 2024-08-19 12:39:55 +03:00
parent 43a1f8d8d7
commit e36e954276
7 changed files with 42 additions and 22 deletions

View file

@ -1,6 +1,7 @@
package ee.carlrobert.codegpt;
import com.intellij.openapi.util.Key;
import ee.carlrobert.codegpt.settings.persona.PersonaDetails;
import ee.carlrobert.codegpt.ui.DocumentationDetails;
import ee.carlrobert.llm.client.codegpt.CodeGPTUserDetails;
import java.util.List;
@ -17,4 +18,6 @@ public class CodeGPTKeys {
Key.create("codegpt.userDetails");
public static final Key<DocumentationDetails> ADDED_DOCUMENTATION =
Key.create("codegpt.addedDocumentation");
public static final Key<PersonaDetails> ADDED_PERSONA =
Key.create("codegpt.addedPersona");
}

View file

@ -410,8 +410,15 @@ public class CompletionRequestProvider {
var message = callParameters.getMessage();
var messages = new ArrayList<OpenAIChatCompletionMessage>();
if (callParameters.getConversationType() == ConversationType.DEFAULT) {
messages.add(
new OpenAIChatCompletionStandardMessage("system", PersonaSettings.getSystemPrompt()));
var sessionPersonaDetails = callParameters.getMessage().getPersonaDetails();
if (callParameters.getMessage().getPersonaDetails() == null) {
messages.add(
new OpenAIChatCompletionStandardMessage("system", PersonaSettings.getSystemPrompt()));
} else {
messages.add(new OpenAIChatCompletionStandardMessage(
"system",
sessionPersonaDetails.instructions()));
}
}
if (callParameters.getConversationType() == ConversationType.FIX_COMPILE_ERRORS) {
messages.add(

View file

@ -2,6 +2,7 @@ package ee.carlrobert.codegpt.conversations.message;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import ee.carlrobert.codegpt.settings.persona.PersonaDetails;
import ee.carlrobert.codegpt.ui.DocumentationDetails;
import ee.carlrobert.llm.client.you.completion.YouSerpResult;
import java.util.List;
@ -20,6 +21,7 @@ public class Message {
private @Nullable String imageFilePath;
private boolean webSearchIncluded;
private DocumentationDetails documentationDetails;
private PersonaDetails personaDetails;
public Message(String prompt, String response) {
this(prompt);
@ -100,6 +102,14 @@ public class Message {
this.documentationDetails = documentationDetails;
}
public PersonaDetails getPersonaDetails() {
return personaDetails;
}
public void setPersonaDetails(PersonaDetails personaDetails) {
this.personaDetails = personaDetails;
}
@Override
public boolean equals(Object obj) {
if (obj == this) {

View file

@ -31,6 +31,8 @@ import ee.carlrobert.codegpt.toolwindow.ui.ChatToolWindowLandingPanel;
import ee.carlrobert.codegpt.ui.OverlayUtil;
import ee.carlrobert.codegpt.ui.textarea.AppliedActionInlay;
import ee.carlrobert.codegpt.ui.textarea.UserInputPanel;
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.DocumentationActionItem;
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.PersonaActionItem;
import ee.carlrobert.codegpt.ui.textarea.suggestion.item.WebSearchActionItem;
import ee.carlrobert.codegpt.util.EditorUtil;
import ee.carlrobert.codegpt.util.file.FileUtil;
@ -260,10 +262,19 @@ public class ChatToolWindowTabPanel implements Disposable {
.anyMatch(it -> it.getSuggestion() instanceof WebSearchActionItem));
var addedDocumentation = CodeGPTKeys.ADDED_DOCUMENTATION.get(project);
if (addedDocumentation != null) {
var appliedInlayExists = appliedInlayActions.stream()
.anyMatch(it -> it.getSuggestion() instanceof DocumentationActionItem);
if (addedDocumentation != null && appliedInlayExists) {
message.setDocumentationDetails(addedDocumentation);
}
var addedPersona = CodeGPTKeys.ADDED_PERSONA.get(project);
var personaInlayExists = appliedInlayActions.stream()
.anyMatch(it -> it.getSuggestion() instanceof PersonaActionItem);
if (addedPersona != null && personaInlayExists) {
message.setPersonaDetails(addedPersona);
}
sendMessage(message, ConversationType.DEFAULT);
return Unit.INSTANCE;
}