Skip to content

Commit

Permalink
feat: add support for configuring code completions via settings
Browse files Browse the repository at this point in the history
  • Loading branch information
carlrobertoh committed Apr 2, 2024
1 parent 2b98b65 commit 9f3ca49
Show file tree
Hide file tree
Showing 16 changed files with 197 additions and 139 deletions.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,6 @@ public ConfigurationState getCurrentFormState() {
state.setCreateNewChatOnEachAction(openNewTabCheckBox.isSelected());
state.setMethodNameGenerationEnabled(methodNameGenerationCheckBox.isSelected());
state.setAutoFormattingEnabled(autoFormattingCheckBox.isSelected());
state.setCodeCompletionsEnabled(
ConfigurationSettings.getCurrentState().isCodeCompletionsEnabled());
return state;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ public class ConfigurationState {
private boolean methodNameGenerationEnabled = true;
private boolean captureCompileErrors = true;
private boolean autoFormattingEnabled = true;
private boolean codeCompletionsEnabled;
private Map<String, String> tableData = EditorActionsUtil.DEFAULT_ACTIONS;

public String getSystemPrompt() {
Expand Down Expand Up @@ -119,14 +118,6 @@ public void setAutoFormattingEnabled(boolean autoFormattingEnabled) {
this.autoFormattingEnabled = autoFormattingEnabled;
}

public boolean isCodeCompletionsEnabled() {
return codeCompletionsEnabled;
}

public void setCodeCompletionsEnabled(boolean codeCompletionsEnabled) {
this.codeCompletionsEnabled = codeCompletionsEnabled;
}

@Override
public boolean equals(Object o) {
if (this == o) {
Expand All @@ -144,7 +135,6 @@ public boolean equals(Object o) {
&& methodNameGenerationEnabled == that.methodNameGenerationEnabled
&& captureCompileErrors == that.captureCompileErrors
&& autoFormattingEnabled == that.autoFormattingEnabled
&& codeCompletionsEnabled == that.codeCompletionsEnabled
&& Objects.equals(systemPrompt, that.systemPrompt)
&& Objects.equals(commitMessagePrompt, that.commitMessagePrompt)
&& Objects.equals(tableData, that.tableData);
Expand All @@ -154,7 +144,6 @@ public boolean equals(Object o) {
public int hashCode() {
return Objects.hash(systemPrompt, commitMessagePrompt, maxTokens, temperature,
checkForPluginUpdates, createNewChatOnEachAction, ignoreGitCommitTokenLimit,
methodNameGenerationEnabled, captureCompileErrors, autoFormattingEnabled,
codeCompletionsEnabled, tableData);
methodNameGenerationEnabled, captureCompileErrors, autoFormattingEnabled, tableData);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ public class LlamaSettingsState {
private double topP = 0.9;
private double minP = 0.05;
private double repeatPenalty = 1.1;
private boolean codeCompletionsEnabled = true;
private int codeCompletionMaxTokens = 128;

public boolean isUseCustomModel() {
return useCustomModel;
Expand Down Expand Up @@ -168,6 +170,22 @@ public void setRepeatPenalty(double repeatPenalty) {
this.repeatPenalty = repeatPenalty;
}

public boolean isCodeCompletionsEnabled() {
return codeCompletionsEnabled;
}

public void setCodeCompletionsEnabled(boolean codeCompletionsEnabled) {
this.codeCompletionsEnabled = codeCompletionsEnabled;
}

public int getCodeCompletionMaxTokens() {
return codeCompletionMaxTokens;
}

public void setCodeCompletionMaxTokens(int codeCompletionMaxTokens) {
this.codeCompletionMaxTokens = codeCompletionMaxTokens;
}

private static Integer getRandomAvailablePortOrDefault() {
try (ServerSocket socket = new ServerSocket(0)) {
return socket.getLocalPort();
Expand Down Expand Up @@ -201,14 +219,17 @@ public boolean equals(Object o) {
&& remoteModelInfillPromptTemplate == that.remoteModelInfillPromptTemplate
&& Objects.equals(baseHost, that.baseHost)
&& Objects.equals(serverPort, that.serverPort)
&& Objects.equals(additionalParameters, that.additionalParameters);
&& Objects.equals(additionalParameters, that.additionalParameters)
&& codeCompletionsEnabled == that.codeCompletionsEnabled
&& codeCompletionMaxTokens == that.codeCompletionMaxTokens;
}

@Override
public int hashCode() {
return Objects.hash(runLocalServer, useCustomModel, customLlamaModelPath, huggingFaceModel,
localModelPromptTemplate, remoteModelPromptTemplate, localModelInfillPromptTemplate,
remoteModelInfillPromptTemplate, baseHost, serverPort, contextSize, threads,
additionalParameters, topK, topP, minP, repeatPenalty);
additionalParameters, topK, topP, minP, repeatPenalty, codeCompletionsEnabled,
codeCompletionMaxTokens);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.intellij.ui.TitledSeparator;
import com.intellij.util.ui.FormBuilder;
import ee.carlrobert.codegpt.CodeGPTBundle;
import ee.carlrobert.codegpt.settings.service.CodeCompletionConfigurationForm;
import ee.carlrobert.codegpt.settings.service.llama.LlamaSettings;
import ee.carlrobert.codegpt.settings.service.llama.LlamaSettingsState;
import java.awt.BorderLayout;
Expand All @@ -14,10 +15,14 @@ public class LlamaSettingsForm extends JPanel {

private final LlamaServerPreferencesForm llamaServerPreferencesForm;
private final LlamaRequestPreferencesForm llamaRequestPreferencesForm;
private final CodeCompletionConfigurationForm codeCompletionConfigurationForm;

public LlamaSettingsForm(LlamaSettingsState settings) {
llamaServerPreferencesForm = new LlamaServerPreferencesForm(settings);
llamaRequestPreferencesForm = new LlamaRequestPreferencesForm(settings);
codeCompletionConfigurationForm = new CodeCompletionConfigurationForm(
settings.isCodeCompletionsEnabled(),
settings.getCodeCompletionMaxTokens());
init();
}

Expand All @@ -44,13 +49,17 @@ public LlamaSettingsState getCurrentState() {
state.setLocalModelPromptTemplate(modelPreferencesForm.getPromptTemplate());
state.setLocalModelInfillPromptTemplate(modelPreferencesForm.getInfillPromptTemplate());

state.setCodeCompletionsEnabled(codeCompletionConfigurationForm.isCodeCompletionsEnabled());
state.setCodeCompletionMaxTokens(codeCompletionConfigurationForm.getMaxTokens());
return state;
}

public void resetForm() {
var state = LlamaSettings.getCurrentState();
llamaServerPreferencesForm.resetForm(state);
llamaRequestPreferencesForm.resetForm(state);
codeCompletionConfigurationForm.setCodeCompletionsEnabled(state.isCodeCompletionsEnabled());
codeCompletionConfigurationForm.setMaxTokens(state.getCodeCompletionMaxTokens());
}

public LlamaServerPreferencesForm getLlamaServerPreferencesForm() {
Expand All @@ -60,6 +69,8 @@ public LlamaServerPreferencesForm getLlamaServerPreferencesForm() {
private void init() {
setLayout(new BorderLayout());
add(FormBuilder.createFormBuilder()
.addComponent(new TitledSeparator("Code Completions"))
.addComponent(withEmptyLeftBorder(codeCompletionConfigurationForm.getForm()))
.addComponent(new TitledSeparator(
CodeGPTBundle.get("settingsConfigurable.service.llama.serverPreferences.title")))
.addComponent(llamaServerPreferencesForm.getForm())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import ee.carlrobert.codegpt.credentials.CredentialsStore;
import ee.carlrobert.codegpt.settings.configuration.ConfigurationSettings;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import com.intellij.util.ui.UI;
import ee.carlrobert.codegpt.CodeGPTBundle;
import ee.carlrobert.codegpt.credentials.CredentialsStore;
import ee.carlrobert.codegpt.settings.service.CodeCompletionConfigurationForm;
import ee.carlrobert.codegpt.ui.UIUtil;
import ee.carlrobert.llm.client.openai.completion.OpenAIChatCompletionModel;
import javax.swing.JPanel;
Expand All @@ -22,6 +23,7 @@ public class OpenAISettingsForm {
private final JBPasswordField apiKeyField;
private final JBTextField organizationField;
private final ComboBox<OpenAIChatCompletionModel> completionModelComboBox;
private final CodeCompletionConfigurationForm codeCompletionConfigurationForm;

public OpenAISettingsForm(OpenAISettingsState settings) {
apiKeyField = new JBPasswordField();
Expand All @@ -32,6 +34,9 @@ public OpenAISettingsForm(OpenAISettingsState settings) {
new EnumComboBoxModel<>(OpenAIChatCompletionModel.class));
completionModelComboBox.setSelectedItem(
OpenAIChatCompletionModel.findByCode(settings.getModel()));
codeCompletionConfigurationForm = new CodeCompletionConfigurationForm(
settings.isCodeCompletionsEnabled(),
settings.getCodeCompletionMaxTokens());
}

public JPanel getForm() {
Expand All @@ -52,6 +57,8 @@ public JPanel getForm() {
.createPanel();

return FormBuilder.createFormBuilder()
.addComponent(new TitledSeparator(CodeGPTBundle.get("shared.codeCompletions")))
.addComponent(withEmptyLeftBorder(codeCompletionConfigurationForm.getForm()))
.addComponent(new TitledSeparator(CodeGPTBundle.get("shared.configuration")))
.addComponent(withEmptyLeftBorder(configurationGrid))
.addComponentFillVertically(new JPanel(), 0)
Expand All @@ -73,6 +80,8 @@ public OpenAISettingsState getCurrentState() {
var state = new OpenAISettingsState();
state.setModel(getModel());
state.setOrganization(organizationField.getText());
state.setCodeCompletionsEnabled(codeCompletionConfigurationForm.isCodeCompletionsEnabled());
state.setCodeCompletionMaxTokens(codeCompletionConfigurationForm.getMaxTokens());
return state;
}

Expand All @@ -82,5 +91,7 @@ public void resetForm() {
completionModelComboBox.setSelectedItem(
OpenAIChatCompletionModel.findByCode(state.getModel()));
organizationField.setText(state.getOrganization());
codeCompletionConfigurationForm.setCodeCompletionsEnabled(state.isCodeCompletionsEnabled());
codeCompletionConfigurationForm.setMaxTokens(state.getCodeCompletionMaxTokens());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ public class OpenAISettingsState {

private String organization = "";
private String model = OpenAIChatCompletionModel.GPT_3_5_0125_16k.getCode();
private boolean codeCompletionsEnabled = true;
private int codeCompletionMaxTokens = 128;

public String getOrganization() {
return organization;
Expand All @@ -24,6 +26,22 @@ public void setModel(String model) {
this.model = model;
}

public boolean isCodeCompletionsEnabled() {
return codeCompletionsEnabled;
}

public void setCodeCompletionsEnabled(boolean codeCompletionsEnabled) {
this.codeCompletionsEnabled = codeCompletionsEnabled;
}

public int getCodeCompletionMaxTokens() {
return codeCompletionMaxTokens;
}

public void setCodeCompletionMaxTokens(int codeCompletionMaxTokens) {
this.codeCompletionMaxTokens = codeCompletionMaxTokens;
}

@Override
public boolean equals(Object o) {
if (this == o) {
Expand All @@ -33,11 +51,14 @@ public boolean equals(Object o) {
return false;
}
OpenAISettingsState that = (OpenAISettingsState) o;
return Objects.equals(organization, that.organization) && Objects.equals(model, that.model);
return Objects.equals(organization, that.organization)
&& Objects.equals(model, that.model)
&& codeCompletionsEnabled == that.codeCompletionsEnabled
&& codeCompletionMaxTokens == that.codeCompletionMaxTokens;
}

@Override
public int hashCode() {
return Objects.hash(organization, model);
return Objects.hash(organization, model, codeCompletionsEnabled, codeCompletionMaxTokens);
}
}
Loading

0 comments on commit 9f3ca49

Please sign in to comment.