From 5f16213bd1c18ec092d9bcc569d81c900bdcb060 Mon Sep 17 00:00:00 2001 From: Rene Leonhardt <65483435+reneleonhardt@users.noreply.github.com> Date: Mon, 15 Apr 2024 10:42:42 +0200 Subject: [PATCH] fix: Use System Prompt from user configuration (#454) (#455) --- .../CompletionRequestProvider.java | 25 +++++++++-------- .../configuration/ConfigurationComponent.java | 2 +- .../configuration/ConfigurationSettings.java | 4 +++ .../chat/ui/textarea/TotalTokensDetails.java | 3 +-- .../CompletionRequestProviderTest.kt | 11 +++++--- .../DefaultCompletionRequestHandlerTest.kt | 10 ++++--- .../chat/ChatToolWindowTabPanelTest.kt | 27 +++++++++---------- 7 files changed, 44 insertions(+), 38 deletions(-) diff --git a/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java b/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java index fa26cfac..23562a49 100644 --- a/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java +++ b/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java @@ -1,5 +1,7 @@ package ee.carlrobert.codegpt.completions; +import static ee.carlrobert.codegpt.completions.ConversationType.DEFAULT; +import static ee.carlrobert.codegpt.completions.ConversationType.FIX_COMPILE_ERRORS; import static ee.carlrobert.codegpt.credentials.CredentialsStore.CredentialKey.CUSTOM_SERVICE_API_KEY; import static ee.carlrobert.codegpt.util.file.FileUtil.getResourceContent; import static java.lang.String.format; @@ -57,6 +59,7 @@ import java.util.List; import java.util.Map; import java.util.NoSuchElementException; import java.util.Objects; +import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -74,6 +77,8 @@ public class CompletionRequestProvider { public static final String FIX_COMPILE_ERRORS_SYSTEM_PROMPT = getResourceContent( "/prompts/fix-compile-errors.txt"); + private static final Set OPENAI_SYSTEM_CONVERSATION_TYPES = Set.of( + DEFAULT, FIX_COMPILE_ERRORS); private final EncodingManager encodingManager = EncodingManager.getInstance(); private final Conversation conversation; @@ -151,10 +156,8 @@ public class CompletionRequestProvider { promptTemplate = settings.getRemoteModelPromptTemplate(); } - var systemPrompt = COMPLETION_SYSTEM_PROMPT; - if (conversationType == ConversationType.FIX_COMPILE_ERRORS) { - systemPrompt = FIX_COMPILE_ERRORS_SYSTEM_PROMPT; - } + var systemPrompt = conversationType == FIX_COMPILE_ERRORS + ? FIX_COMPILE_ERRORS_SYSTEM_PROMPT : ConfigurationSettings.getSystemPrompt(); var prompt = promptTemplate.buildPrompt( systemPrompt, @@ -257,7 +260,7 @@ public class CompletionRequestProvider { request.setModel(settings.getModel()); request.setMaxTokens(configuration.getMaxTokens()); request.setStream(true); - request.setSystem(COMPLETION_SYSTEM_PROMPT); + request.setSystem(ConfigurationSettings.getSystemPrompt()); List messages = conversation.getMessages().stream() .filter(prevMessage -> prevMessage.getResponse() != null && !prevMessage.getResponse().isEmpty()) @@ -284,14 +287,10 @@ public class CompletionRequestProvider { private List buildMessages(CallParameters callParameters) { var message = callParameters.getMessage(); var messages = new ArrayList(); - if (callParameters.getConversationType() == ConversationType.DEFAULT) { - messages.add(new OpenAIChatCompletionStandardMessage( - "system", - ConfigurationSettings.getCurrentState().getSystemPrompt())); - } - if (callParameters.getConversationType() == ConversationType.FIX_COMPILE_ERRORS) { - messages.add( - new OpenAIChatCompletionStandardMessage("system", FIX_COMPILE_ERRORS_SYSTEM_PROMPT)); + if (OPENAI_SYSTEM_CONVERSATION_TYPES.contains(callParameters.getConversationType())) { + String content = DEFAULT == callParameters.getConversationType() + ? ConfigurationSettings.getSystemPrompt() : FIX_COMPILE_ERRORS_SYSTEM_PROMPT; + messages.add(new OpenAIChatCompletionStandardMessage("system", content)); } for (var prevMessage : conversation.getMessages()) { diff --git a/src/main/java/ee/carlrobert/codegpt/settings/configuration/ConfigurationComponent.java b/src/main/java/ee/carlrobert/codegpt/settings/configuration/ConfigurationComponent.java index 8c07cac7..24607c63 100644 --- a/src/main/java/ee/carlrobert/codegpt/settings/configuration/ConfigurationComponent.java +++ b/src/main/java/ee/carlrobert/codegpt/settings/configuration/ConfigurationComponent.java @@ -94,7 +94,7 @@ public class ConfigurationComponent { maxTokensField.setValue(configuration.getMaxTokens()); systemPromptTextArea = new JTextArea(); - if (configuration.getSystemPrompt().isEmpty()) { + if (configuration.getSystemPrompt().isBlank()) { // for backward compatibility systemPromptTextArea.setText(COMPLETION_SYSTEM_PROMPT); } else { diff --git a/src/main/java/ee/carlrobert/codegpt/settings/configuration/ConfigurationSettings.java b/src/main/java/ee/carlrobert/codegpt/settings/configuration/ConfigurationSettings.java index abcce780..3d2d7f1c 100644 --- a/src/main/java/ee/carlrobert/codegpt/settings/configuration/ConfigurationSettings.java +++ b/src/main/java/ee/carlrobert/codegpt/settings/configuration/ConfigurationSettings.java @@ -31,4 +31,8 @@ public class ConfigurationSettings implements PersistentStateComponent