Inline Autocompletion Pt.2 (#333)

* Add first draft of inline code completion with mock text

* Adds InsertInlineTextAction for inserting autocomplete suggestion with tab

- Changed to disable suggestions when text is selected
- Adds and removes the insert action based on when it shows the inlay hint

* Request inline code completion

* Move inline completion prompt into txt file

* Add inline completion settings to ConfigurationState

* Fix code style

* Use EditorTrackerListener instead of EditorFactoryListener to enable inline completion

* Code completion requests synchronously without SSE

* Use LlamaClient.getInfill() for inline code completion

* support inlay block element rendering, clean up code

* Use only enclosed Method or Class contents for code completion if possible

* Refactor extracting PsiElement contents in code completion

* bump llm-client

* fix completion call from triggering on EDT, force method params to be nonnull by default

* refactor request building, decrease delay value

* Trigger code completion if cursor is not inside a word

* Improve inlay rendering

* Support cancellable infill requests

* add statusbar widget, disable completions by default

* Show error notification if code completion failed

* Truely disable/enable EditorInlayHandler when completion is turned off/on

* Add CodeCompletionEnabledListener Topic to control enabling/disabling code-completion

* Add progress indicator for code-completion with option to cancel

* Add CodeCompletionServiceTest + refactor inlay ElementRenderers

* several improvements

- replace timer implementation with call debouncing
- use OpenAI /v1/completions API for completions
- code refactoring

* trigger progress indicator only for llama completions

* fix tests

---------

Co-authored-by: James Higgins <james.isaac.higgins@gmail.com>
Co-authored-by: Carl-Robert Linnupuu <carlrobertoh@gmail.com>
This commit is contained in:
Phil 2024-01-31 00:05:31 +01:00 committed by GitHub
parent 390d8cdd5e
commit 7387cf4536
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
41 changed files with 1461 additions and 21 deletions

View file

@ -2,6 +2,7 @@ package ee.carlrobert.codegpt.settings.configuration;
import static ee.carlrobert.codegpt.completions.CompletionRequestProvider.COMPLETION_SYSTEM_PROMPT;
import static ee.carlrobert.codegpt.completions.CompletionRequestProvider.GENERATE_COMMIT_MESSAGE_SYSTEM_PROMPT;
import static ee.carlrobert.codegpt.completions.CompletionRequestProvider.INLINE_COMPLETION_PROMPT;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.PersistentStateComponent;
@ -20,14 +21,17 @@ public class ConfigurationState implements PersistentStateComponent<Configuratio
private String systemPrompt = COMPLETION_SYSTEM_PROMPT;
private String commitMessagePrompt = GENERATE_COMMIT_MESSAGE_SYSTEM_PROMPT;
private String inlineCompletionPrompt = INLINE_COMPLETION_PROMPT;
private int maxTokens = 1000;
private double temperature = 0.1;
private int inlineDelay = 500;
private boolean checkForPluginUpdates = true;
private boolean createNewChatOnEachAction;
private boolean ignoreGitCommitTokenLimit;
private boolean methodNameGenerationEnabled = true;
private boolean captureCompileErrors = true;
private boolean autoFormattingEnabled = true;
private boolean codeCompletionsEnabled;
private Map<String, String> tableData = EditorActionsUtil.DEFAULT_ACTIONS;
public static ConfigurationState getInstance() {
@ -61,6 +65,22 @@ public class ConfigurationState implements PersistentStateComponent<Configuratio
this.commitMessagePrompt = commitMessagePrompt;
}
public String getInlineCompletionPrompt() {
return inlineCompletionPrompt;
}
public void setInlineCompletionPrompt(String inlineCompletionPrompt) {
this.inlineCompletionPrompt = inlineCompletionPrompt;
}
public int getInlineDelay() {
return inlineDelay;
}
public void setInlineDelay(int inlineDelay) {
this.inlineDelay = inlineDelay;
}
public int getMaxTokens() {
return maxTokens;
}
@ -132,4 +152,12 @@ public class ConfigurationState implements PersistentStateComponent<Configuratio
public void setAutoFormattingEnabled(boolean autoFormattingEnabled) {
this.autoFormattingEnabled = autoFormattingEnabled;
}
public boolean isCodeCompletionsEnabled() {
return codeCompletionsEnabled;
}
public void setCodeCompletionsEnabled(boolean codeCompletionsEnabled) {
this.codeCompletionsEnabled = codeCompletionsEnabled;
}
}