Skip to content

Commit

Permalink
adds: configuration for the commit-message system prompt (#304)
Browse files Browse the repository at this point in the history
* adds: configuration for the commit-message system prompt

this will remove the default file and move it to the code to be overwritten if the user chooses to modify the prompt.

* fix: checkstyle

---------

Co-authored-by: Carl-Robert Linnupuu <[email protected]>
  • Loading branch information
rwese and carlrobertoh authored Dec 9, 2023
1 parent c36d4dd commit c214b59
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 5 deletions.
3 changes: 0 additions & 3 deletions codegpt-core/src/main/resources/prompts/git-message.txt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import static com.intellij.openapi.ui.Messages.OK;
import static com.intellij.util.ObjectUtils.tryCast;
import static ee.carlrobert.codegpt.util.file.FileUtil.getResourceContent;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;

Expand All @@ -26,6 +25,7 @@
import ee.carlrobert.codegpt.Icons;
import ee.carlrobert.codegpt.completions.CompletionClientProvider;
import ee.carlrobert.codegpt.credentials.OpenAICredentialsManager;
import ee.carlrobert.codegpt.settings.configuration.ConfigurationState;
import ee.carlrobert.codegpt.settings.state.OpenAISettingsState;
import ee.carlrobert.codegpt.util.OverlayUtil;
import ee.carlrobert.llm.client.openai.completion.ErrorDetails;
Expand Down Expand Up @@ -85,7 +85,7 @@ private void generateMessage(Project project, Editor editor, String gitDiff) {
CompletionClientProvider.getOpenAIClient().getChatCompletion(
new OpenAIChatCompletionRequest.Builder(List.of(
new OpenAIChatCompletionMessage("system",
getResourceContent("/prompts/git-message.txt")),
ConfigurationState.getInstance().getCommitMessagePrompt()),
new OpenAIChatCompletionMessage("user", gitDiff)))
.setModel(OpenAISettingsState.getInstance().getModel())
.build(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,11 @@ public class CompletionRequestProvider {
+ "the output of running the code as well as an integrated terminal.\n"
+ "You can only give one reply for each conversation turn.";

public static final String COMPLETION_COMMIT_MESSAGE_PROMPT =
"Write a short and descriptive git commit message for the following git diff.\n"
+ "Use imperative mood, present tense, active voice and verbs.\n"
+ "Your entire response will be passed directly into git commit.";

private final EncodingManager encodingManager = EncodingManager.getInstance();
private final EmbeddingsService embeddingsService;
private final Conversation conversation;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.intellij.ui.ToolbarDecorator;
import com.intellij.ui.components.JBCheckBox;
import com.intellij.ui.components.JBLabel;
import com.intellij.ui.components.JBTextArea;
import com.intellij.ui.components.JBTextField;
import com.intellij.ui.components.fields.IntegerField;
import com.intellij.ui.table.JBTable;
Expand Down Expand Up @@ -46,6 +47,7 @@ public class ConfigurationComponent {
private final JBCheckBox methodNameGenerationCheckBox;
private final JBCheckBox autoFormattingCheckBox;
private final JTextArea systemPromptTextArea;
private final JTextArea commitMessagePromptTextArea;
private final IntegerField maxTokensField;
private final JBTextField temperatureField;

Expand Down Expand Up @@ -100,6 +102,10 @@ public void changedUpdate(DocumentEvent e) {
systemPromptTextArea.setColumns(60);
systemPromptTextArea.setRows(3);

commitMessagePromptTextArea = new JBTextArea(configuration.getCommitMessagePrompt(), 3, 60);
commitMessagePromptTextArea.setLineWrap(true);
commitMessagePromptTextArea.setBorder(JBUI.Borders.empty(8, 4));

checkForPluginUpdatesCheckBox = new JBCheckBox(
CodeGPTBundle.get("configurationConfigurable.checkForPluginUpdates.label"),
configuration.isCheckForPluginUpdates());
Expand All @@ -125,6 +131,10 @@ public void changedUpdate(DocumentEvent e) {
CodeGPTBundle.get("configurationConfigurable.section.assistant.title")))
.addComponent(createAssistantConfigurationForm())
.addComponentFillVertically(new JPanel(), 0)
.addComponent(new TitledSeparator(
CodeGPTBundle.get("configurationConfigurable.section.commitMessage.title")))
.addComponent(createCommitMessageConfigurationForm())
.addComponentFillVertically(new JPanel(), 0)
.getPanel();
}

Expand Down Expand Up @@ -200,6 +210,23 @@ private JPanel createAssistantConfigurationForm() {
return form;
}

private JPanel createCommitMessageConfigurationForm() {
var formBuilder = FormBuilder.createFormBuilder();
addAssistantFormLabeledComponent(
formBuilder,
"configurationConfigurable.section.commitMessage.systemPromptField.label",
"configurationConfigurable.section.commitMessage.systemPromptField.comment",
JBUI.Panels
.simplePanel(commitMessagePromptTextArea)
.withBorder(JBUI.Borders.customLine(
JBUI.CurrentTheme.CustomFrameDecorations.separatorForeground())));
formBuilder.addVerticalGap(8);

var form = formBuilder.getPanel();
form.setBorder(JBUI.Borders.emptyLeft(16));
return form;
}

private ComponentValidator createInputValidator(
Disposable parentDisposable,
JBTextField component) {
Expand Down Expand Up @@ -245,6 +272,14 @@ public String getSystemPrompt() {
return systemPromptTextArea.getText();
}

public void setCommitMessagePrompt(String commitMessagePrompt) {
commitMessagePromptTextArea.setText(commitMessagePrompt);
}

public String getCommitMessagePrompt() {
return commitMessagePromptTextArea.getText();
}

public double getTemperature() {
return Double.parseDouble(temperatureField.getText());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public boolean isModified() {
|| configurationComponent.getMaxTokens() != configuration.getMaxTokens()
|| configurationComponent.getTemperature() != configuration.getTemperature()
|| !configurationComponent.getSystemPrompt().equals(configuration.getSystemPrompt())
|| !configurationComponent.getCommitMessagePrompt()
.equals(configuration.getCommitMessagePrompt())
|| configurationComponent.isCheckForPluginUpdates()
!= configuration.isCheckForPluginUpdates()
|| configurationComponent.isCreateNewChatOnEachAction()
Expand All @@ -54,6 +56,7 @@ public void apply() {
configuration.setMaxTokens(configurationComponent.getMaxTokens());
configuration.setTemperature(configurationComponent.getTemperature());
configuration.setSystemPrompt(configurationComponent.getSystemPrompt());
configuration.setCommitMessagePrompt(configurationComponent.getCommitMessagePrompt());
configuration.setCheckForPluginUpdates(configurationComponent.isCheckForPluginUpdates());
configuration.setCreateNewChatOnEachAction(
configurationComponent.isCreateNewChatOnEachAction());
Expand All @@ -70,6 +73,7 @@ public void reset() {
configurationComponent.setMaxTokens(configuration.getMaxTokens());
configurationComponent.setTemperature(configuration.getTemperature());
configurationComponent.setSystemPrompt(configuration.getSystemPrompt());
configurationComponent.setCommitMessagePrompt(configuration.getCommitMessagePrompt());
configurationComponent.setCheckForPluginUpdates(configuration.isCheckForPluginUpdates());
configurationComponent.setCreateNewChatOnEachAction(
configuration.isCreateNewChatOnEachAction());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ee.carlrobert.codegpt.settings.configuration;

import static ee.carlrobert.codegpt.completions.CompletionRequestProvider.COMPLETION_COMMIT_MESSAGE_PROMPT;
import static ee.carlrobert.codegpt.completions.CompletionRequestProvider.COMPLETION_SYSTEM_PROMPT;

import com.intellij.openapi.application.ApplicationManager;
Expand All @@ -18,6 +19,7 @@
public class ConfigurationState implements PersistentStateComponent<ConfigurationState> {

private String systemPrompt = COMPLETION_SYSTEM_PROMPT;
private String commitMessagePrompt = COMPLETION_COMMIT_MESSAGE_PROMPT;
private int maxTokens = 1000;
private double temperature = 0.1;
private boolean checkForPluginUpdates = true;
Expand Down Expand Up @@ -46,10 +48,18 @@ public String getSystemPrompt() {
return systemPrompt;
}

public String getCommitMessagePrompt() {
return commitMessagePrompt;
}

public void setSystemPrompt(String systemPrompt) {
this.systemPrompt = systemPrompt;
}

public void setCommitMessagePrompt(String commitMessagePrompt) {
this.commitMessagePrompt = commitMessagePrompt;
}

public int getMaxTokens() {
return maxTokens;
}
Expand Down
3 changes: 3 additions & 0 deletions src/main/resources/messages/codegpt.properties
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ configurationConfigurable.section.assistant.temperatureField.label=Temperature:
configurationConfigurable.section.assistant.temperatureField.comment=The value of randomness. Must be between 0 and 1
configurationConfigurable.section.assistant.maxTokensField.label=Max completion tokens:
configurationConfigurable.section.assistant.maxTokensField.comment=The maximum capacity for completion.
configurationConfigurable.section.commitMessage.title=Commit Message
configurationConfigurable.section.commitMessage.systemPromptField.label=Prompt:
configurationConfigurable.section.commitMessage.systemPromptField.comment=Custom system prompt used for commit message generation.
advancedSettingsConfigurable.displayName=CodeGPT: Advanced Settings
advancedSettingsConfigurable.proxy.title=HTTP/SOCKS Proxy
advancedSettingsConfigurable.proxy.typeComboBoxField.label=Proxy:
Expand Down

0 comments on commit c214b59

Please sign in to comment.