From 9bd7e6e83ab20efef3e235d48fbb12ddd522d1a8 Mon Sep 17 00:00:00 2001 From: Rene Leonhardt <65483435+reneleonhardt@users.noreply.github.com> Date: Mon, 13 May 2024 09:48:55 +0200 Subject: [PATCH] feat: Visualize downloaded models (#543) * feat: Visualize downloaded models * Simplify GeneralSettings access --- .../GenerateGitCommitMessageAction.java | 6 +- .../CompletionRequestProvider.java | 3 +- .../completions/CompletionRequestService.java | 14 ++-- .../codegpt/completions/HuggingFaceModel.java | 13 +++- .../codegpt/completions/llama/LlamaModel.java | 77 +++++++++++++++---- .../conversations/ConversationService.java | 5 +- .../codegpt/settings/GeneralSettings.java | 11 ++- .../llama/form/LlamaModelPreferencesForm.java | 34 ++------ .../chat/ChatToolWindowTabPanel.java | 4 +- .../ui/ChatToolWindowScrollablePanel.java | 2 +- .../chat/ui/textarea/ModelComboBoxAction.java | 8 +- .../chat/ui/textarea/TotalTokensPanel.java | 2 +- .../chat/ui/textarea/UserPromptTextArea.java | 2 +- .../CodeCompletionFeatureToggleActions.kt | 37 ++++----- .../codecompletions/CodeCompletionService.kt | 4 +- .../CodeGPTInlineCompletionProvider.kt | 2 +- 16 files changed, 135 insertions(+), 89 deletions(-) diff --git a/src/main/java/ee/carlrobert/codegpt/actions/GenerateGitCommitMessageAction.java b/src/main/java/ee/carlrobert/codegpt/actions/GenerateGitCommitMessageAction.java index 79d40759..82efba4a 100644 --- a/src/main/java/ee/carlrobert/codegpt/actions/GenerateGitCommitMessageAction.java +++ b/src/main/java/ee/carlrobert/codegpt/actions/GenerateGitCommitMessageAction.java @@ -62,14 +62,12 @@ public class GenerateGitCommitMessageAction extends AnAction { @Override public void update(@NotNull AnActionEvent event) { var commitWorkflowUi = event.getData(VcsDataKeys.COMMIT_WORKFLOW_UI); - var selectedService = GeneralSettings.getCurrentState().getSelectedService(); - if (selectedService == YOU || commitWorkflowUi == null) { + if (GeneralSettings.isSelected(YOU) || commitWorkflowUi == null) { event.getPresentation().setVisible(false); return; } - var callAllowed = CompletionRequestService.isRequestAllowed( - GeneralSettings.getCurrentState().getSelectedService()); + var callAllowed = CompletionRequestService.isRequestAllowed(); event.getPresentation().setEnabled(callAllowed && new CommitWorkflowChanges(commitWorkflowUi).isFilesSelected()); event.getPresentation().setText(CodeGPTBundle.get(callAllowed diff --git a/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java b/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java index 9b41a453..a10d99c2 100644 --- a/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java +++ b/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java @@ -449,8 +449,7 @@ public class CompletionRequestProvider { CallParameters callParameters) { var messages = buildOpenAIMessages(callParameters); - if (model == null - || GeneralSettings.getCurrentState().getSelectedService() == ServiceType.YOU) { + if (model == null || GeneralSettings.isSelected(ServiceType.YOU)) { return messages; } diff --git a/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestService.java b/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestService.java index 97834b8d..564db528 100644 --- a/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestService.java +++ b/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestService.java @@ -81,7 +81,7 @@ public final class CompletionRequestService { CompletionEventListener eventListener) { var application = ApplicationManager.getApplication(); var requestProvider = new CompletionRequestProvider(callParameters.getConversation()); - return switch (GeneralSettings.getCurrentState().getSelectedService()) { + return switch (GeneralSettings.getSelectedService()) { case CODEGPT -> CompletionClientProvider.getCodeGPTClient().getChatCompletionAsync( requestProvider.buildOpenAIChatCompletionRequest( application.getService(CodeGPTServiceSettings.class) @@ -141,7 +141,7 @@ public final class CompletionRequestService { new OpenAIChatCompletionStandardMessage("system", systemPrompt), new OpenAIChatCompletionStandardMessage("user", gitDiff))) .setModel(OpenAISettings.getCurrentState().getModel()); - var selectedService = GeneralSettings.getCurrentState().getSelectedService(); + var selectedService = GeneralSettings.getSelectedService(); switch (selectedService) { case CODEGPT: CompletionClientProvider.getCodeGPTClient().getChatCompletionAsync( @@ -243,7 +243,7 @@ public final class CompletionRequestService { public Optional getLookupCompletion(String prompt) { var openaiRequest = CompletionRequestProvider.buildOpenAILookupCompletionRequest(prompt); - var selectedService = GeneralSettings.getCurrentState().getSelectedService(); + var selectedService = GeneralSettings.getSelectedService(); switch (selectedService) { case CODEGPT: var model = ApplicationManager.getApplication().getService(CodeGPTServiceSettings.class) @@ -273,8 +273,12 @@ public final class CompletionRequestService { } } - public boolean isRequestAllowed() { - return isRequestAllowed(GeneralSettings.getCurrentState().getSelectedService()); + public boolean isAllowed() { + return isRequestAllowed(); + } + + public static boolean isRequestAllowed() { + return isRequestAllowed(GeneralSettings.getSelectedService()); } public static boolean isRequestAllowed(ServiceType serviceType) { diff --git a/src/main/java/ee/carlrobert/codegpt/completions/HuggingFaceModel.java b/src/main/java/ee/carlrobert/codegpt/completions/HuggingFaceModel.java index f3e98e12..8238604d 100644 --- a/src/main/java/ee/carlrobert/codegpt/completions/HuggingFaceModel.java +++ b/src/main/java/ee/carlrobert/codegpt/completions/HuggingFaceModel.java @@ -1,9 +1,12 @@ package ee.carlrobert.codegpt.completions; +import static ee.carlrobert.codegpt.completions.llama.LlamaModel.getDownloadedMarker; +import static ee.carlrobert.codegpt.completions.llama.LlamaModel.getLlamaModelsPath; import static java.lang.String.format; import java.net.MalformedURLException; import java.net.URL; +import org.jetbrains.annotations.NotNull; public enum HuggingFaceModel { @@ -179,6 +182,14 @@ public enum HuggingFaceModel { } public String getQuantizationLabel() { - return format("%d-bit precision", quantization); + return format("%s %d-bit precision", downloaded(), quantization); + } + + public boolean isDownloaded() { + return getLlamaModelsPath().resolve(fileName).toFile().exists(); + } + + private @NotNull String downloaded() { + return getDownloadedMarker(isDownloaded()); } } diff --git a/src/main/java/ee/carlrobert/codegpt/completions/llama/LlamaModel.java b/src/main/java/ee/carlrobert/codegpt/completions/llama/LlamaModel.java index 7ea7e024..c9d58a97 100644 --- a/src/main/java/ee/carlrobert/codegpt/completions/llama/LlamaModel.java +++ b/src/main/java/ee/carlrobert/codegpt/completions/llama/LlamaModel.java @@ -5,8 +5,15 @@ import static java.util.stream.Collectors.toSet; import ee.carlrobert.codegpt.codecompletions.InfillPromptTemplate; import ee.carlrobert.codegpt.completions.HuggingFaceModel; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; +import java.util.function.BiConsumer; import org.jetbrains.annotations.NotNull; public enum LlamaModel { @@ -174,18 +181,37 @@ public enum LlamaModel { } public static @NotNull LlamaModel findByHuggingFaceModel(HuggingFaceModel huggingFaceModel) { - for (var llamaModel : LlamaModel.values()) { - if (llamaModel.getHuggingFaceModels().contains(huggingFaceModel)) { - return llamaModel; - } - } + return Arrays.stream(LlamaModel.values()) + .filter(model -> model.getHuggingFaceModels().contains(huggingFaceModel)) + .findFirst() + .orElseThrow(() -> new RuntimeException("Unable to find correct LLM")); + } - throw new RuntimeException("Unable to find correct LLM"); + public @NotNull List filterSelectedModelsBySize(ModelSize selectedModelSize) { + return selectedModelSize != null ? getHuggingFaceModels().stream() + .filter(model -> selectedModelSize.size() == model.getParameterSize()) + .toList() : List.of(); + } + + public boolean anyDownloaded() { + return huggingFaceModels.stream().anyMatch(HuggingFaceModel::isDownloaded); + } + + public String getDownloadedMarker() { + return getDownloadedMarker(anyDownloaded()); + } + + public static String getDownloadedMarker(boolean downloaded) { + return downloaded ? "✓" : "\u2001"; + } + + public static @NotNull Path getLlamaModelsPath() { + return Paths.get(System.getProperty("user.home"), ".codegpt/models/gguf"); } @Override public String toString() { - return String.join(" ", label, getFormattedModelSizeRange()); + return String.join(" ", getDownloadedMarker(), label, getFormattedModelSizeRange()); } public String getLabel() { @@ -218,12 +244,37 @@ public enum LlamaModel { return format("(%dB - %dB)", Collections.min(parameters), Collections.max(parameters)); } - public List getSortedUniqueModelSizes() { + public List getSortedUniqueModelSizes() { return huggingFaceModels.stream() - .map(HuggingFaceModel::getParameterSize) - .collect(toSet()) - .stream() - .sorted() - .toList(); + .map(hfm -> new ModelSize(hfm.getParameterSize(), hfm.isDownloaded())) + .sorted() + .collect(LinkedHashSet::new, ModelSize.skipSameSize(), Set::addAll) + .stream().toList(); + } + + public record ModelSize(int size, boolean downloaded) implements Comparable { + // Sort by size, but downloaded comes first: [ 7B, ✓ 13B, 13B, 34B] + private static final Comparator sizeDownloadedFirst = Comparator + .comparing(ModelSize::size) + .thenComparing(Comparator.comparing(ModelSize::downloaded).reversed()); + + @Override + public int compareTo(@NotNull ModelSize other) { + return sizeDownloadedFirst.compare(this, other); + } + + private static @NotNull BiConsumer, ModelSize> skipSameSize() { + return (s, e) -> { + if (s.stream().noneMatch(v -> v.size == e.size)) { + s.add(e); + } + }; + } + + @Override + public String toString() { + return "%s %dB".formatted(getDownloadedMarker(downloaded), size); + } + } } diff --git a/src/main/java/ee/carlrobert/codegpt/conversations/ConversationService.java b/src/main/java/ee/carlrobert/codegpt/conversations/ConversationService.java index 3d5352b7..fd4f4212 100644 --- a/src/main/java/ee/carlrobert/codegpt/conversations/ConversationService.java +++ b/src/main/java/ee/carlrobert/codegpt/conversations/ConversationService.java @@ -49,8 +49,7 @@ public final class ConversationService { conversation.setClientCode(clientCode); conversation.setCreatedOn(LocalDateTime.now()); conversation.setUpdatedOn(LocalDateTime.now()); - conversation.setModel(getModelForSelectedService( - GeneralSettings.getCurrentState().getSelectedService())); + conversation.setModel(getModelForSelectedService(GeneralSettings.getSelectedService())); return conversation; } @@ -113,7 +112,7 @@ public final class ConversationService { } public Conversation startConversation() { - var completionCode = GeneralSettings.getCurrentState().getSelectedService().getCompletionCode(); + var completionCode = GeneralSettings.getSelectedService().getCompletionCode(); var conversation = createConversation(completionCode); conversationState.setCurrentConversation(conversation); addConversation(conversation); diff --git a/src/main/java/ee/carlrobert/codegpt/settings/GeneralSettings.java b/src/main/java/ee/carlrobert/codegpt/settings/GeneralSettings.java index 39a55745..84baa2d2 100644 --- a/src/main/java/ee/carlrobert/codegpt/settings/GeneralSettings.java +++ b/src/main/java/ee/carlrobert/codegpt/settings/GeneralSettings.java @@ -41,6 +41,14 @@ public class GeneralSettings implements PersistentStateComponent(); - var initialModelSizes = llamaModel.getSortedUniqueModelSizes().stream() - .map(ModelSize::new) - .toList(); + var initialModelSizes = llamaModel.getSortedUniqueModelSizes(); modelSizeComboBoxModel.addAll(initialModelSizes); modelSizeComboBoxModel.setSelectedItem(initialModelSizes.get(0)); var modelComboBoxModel = new EnumComboBoxModel<>(LlamaModel.class); @@ -315,22 +314,15 @@ public class LlamaModelPreferencesForm { comboBox.setSelectedItem(llamaModel); comboBox.addItemListener(e -> { var selectedModel = (LlamaModel) e.getItem(); - var modelSizes = selectedModel.getSortedUniqueModelSizes().stream() - .map(ModelSize::new) - .toList(); + var modelSizes = selectedModel.getSortedUniqueModelSizes(); modelSizeComboBoxModel.removeAllElements(); modelSizeComboBoxModel.addAll(modelSizes); modelSizeComboBoxModel.setSelectedItem(modelSizes.get(0)); modelSizeComboBox.setEnabled(modelSizes.size() > 1); - var huggingFaceModels = selectedModel.getHuggingFaceModels().stream() - .filter(model -> { - var selectedModelSize = (ModelSize) modelSizeComboBoxModel.getSelectedItem(); - return selectedModelSize != null - && selectedModelSize.size() == model.getParameterSize(); - }) - .toList(); + var huggingFaceModels = selectedModel.filterSelectedModelsBySize( + (ModelSize) modelSizeComboBoxModel.getSelectedItem()); huggingFaceComboBoxModel.removeAllElements(); huggingFaceComboBoxModel.addAll(huggingFaceModels); @@ -348,13 +340,8 @@ public class LlamaModelPreferencesForm { comboBox.setSelectedItem(modelSizeComboBoxModel.getSelectedItem()); comboBox.addItemListener(e -> { var selectedModel = llamaModelComboBoxModel.getSelectedItem(); - var models = selectedModel.getHuggingFaceModels().stream() - .filter(model -> { - var selectedModelSize = (ModelSize) modelSizeComboBoxModel.getSelectedItem(); - return selectedModelSize != null - && selectedModelSize.size() == model.getParameterSize(); - }) - .toList(); + var models = selectedModel.filterSelectedModelsBySize( + (ModelSize) modelSizeComboBoxModel.getSelectedItem()); if (!models.isEmpty()) { huggingFaceComboBoxModel.removeAllElements(); huggingFaceComboBoxModel.addAll(models); @@ -494,11 +481,4 @@ public class LlamaModelPreferencesForm { private record ModelDetails(double fileSize, double maxRAMRequired) { } - - private record ModelSize(int size) { - @Override - public String toString() { - return size + "B"; - } - } } diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java index 11105bc8..cb9a1f4d 100644 --- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java +++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ChatToolWindowTabPanel.java @@ -229,7 +229,7 @@ public class ChatToolWindowTabPanel implements Disposable { private void call(CallParameters callParameters, ResponsePanel responsePanel) { var responseContainer = (ChatMessageResponseBody) responsePanel.getContent(); - if (!CompletionRequestService.getInstance().isRequestAllowed()) { + if (!CompletionRequestService.getInstance().isAllowed()) { responseContainer.displayMissingCredential(); return; } @@ -359,7 +359,7 @@ public class ChatToolWindowTabPanel implements Disposable { gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridy = 1; rootPanel.add( - createUserPromptPanel(GeneralSettings.getCurrentState().getSelectedService()), gbc); + createUserPromptPanel(GeneralSettings.getSelectedService()), gbc); return rootPanel; } } diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/ChatToolWindowScrollablePanel.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/ChatToolWindowScrollablePanel.java index c4b0bfca..515d0777 100644 --- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/ChatToolWindowScrollablePanel.java +++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/ChatToolWindowScrollablePanel.java @@ -28,7 +28,7 @@ public class ChatToolWindowScrollablePanel extends ScrollablePanel { public void displayLandingView(JComponent landingView) { clearAll(); add(landingView); - if (GeneralSettings.getCurrentState().getSelectedService() == ServiceType.CODEGPT + if (GeneralSettings.isSelected(ServiceType.CODEGPT) && !CredentialsStore.INSTANCE.isCredentialSet(CredentialKey.CODEGPT_API_KEY)) { var panel = new ResponsePanel() diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/ModelComboBoxAction.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/ModelComboBoxAction.java index 52930eaf..3400bacb 100644 --- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/ModelComboBoxAction.java +++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/ModelComboBoxAction.java @@ -159,7 +159,7 @@ public class ModelComboBoxAction extends ComboBoxAction { if (!YouUserManager.getInstance().isSubscribed() && youSettings.getChatMode() != YouCompletionMode.DEFAULT) { youSettings.setChatMode(YouCompletionMode.DEFAULT); - updateTemplatePresentation(GeneralSettings.getCurrentState().getSelectedService()); + updateTemplatePresentation(GeneralSettings.getSelectedService()); } } ); @@ -240,9 +240,11 @@ public class ModelComboBoxAction extends ComboBoxAction { private String getSelectedHuggingFace() { var huggingFaceModel = LlamaSettings.getCurrentState().getHuggingFaceModel(); + var llamaModel = LlamaModel.findByHuggingFaceModel(huggingFaceModel); return format( - "%s %dB (Q%d)", - LlamaModel.findByHuggingFaceModel(huggingFaceModel).getLabel(), + "%s %s %dB (Q%d)", + llamaModel.getDownloadedMarker(), + llamaModel.getLabel(), huggingFaceModel.getParameterSize(), huggingFaceModel.getQuantization()); } diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/TotalTokensPanel.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/TotalTokensPanel.java index c9b0da5c..827c70e1 100644 --- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/TotalTokensPanel.java +++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/TotalTokensPanel.java @@ -163,7 +163,7 @@ public class TotalTokensPanel extends JPanel { } private String getIconToolTipText(String html) { - if (GeneralSettings.getCurrentState().getSelectedService() != ServiceType.OPENAI) { + if (!GeneralSettings.isSelected(ServiceType.OPENAI)) { return """ diff --git a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/UserPromptTextArea.java b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/UserPromptTextArea.java index e7bc6862..6138ff93 100644 --- a/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/UserPromptTextArea.java +++ b/src/main/java/ee/carlrobert/codegpt/toolwindow/chat/ui/textarea/UserPromptTextArea.java @@ -191,7 +191,7 @@ public class UserPromptTextArea extends JPanel { handleSubmit(); } })); - var selectedService = GeneralSettings.getCurrentState().getSelectedService(); + var selectedService = GeneralSettings.getSelectedService(); if (selectedService == ANTHROPIC || selectedService == OLLAMA || (selectedService == OPENAI diff --git a/src/main/kotlin/ee/carlrobert/codegpt/actions/CodeCompletionFeatureToggleActions.kt b/src/main/kotlin/ee/carlrobert/codegpt/actions/CodeCompletionFeatureToggleActions.kt index 6a0b29d0..c2f22c3d 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/actions/CodeCompletionFeatureToggleActions.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/actions/CodeCompletionFeatureToggleActions.kt @@ -17,35 +17,28 @@ abstract class CodeCompletionFeatureToggleActions( private val enableFeatureAction: Boolean ) : DumbAwareAction() { - override fun actionPerformed(e: AnActionEvent) { - when (GeneralSettings.getCurrentState().selectedService) { - CODEGPT -> - service().state.codeCompletionSettings.codeCompletionsEnabled + override fun actionPerformed(e: AnActionEvent) = when (GeneralSettings.getSelectedService()) { + CODEGPT -> service().state.codeCompletionSettings::codeCompletionsEnabled::set - OPENAI -> - OpenAISettings.getCurrentState().isCodeCompletionsEnabled = enableFeatureAction + OPENAI -> OpenAISettings.getCurrentState()::setCodeCompletionsEnabled - LLAMA_CPP -> - LlamaSettings.getCurrentState().isCodeCompletionsEnabled = enableFeatureAction + LLAMA_CPP -> LlamaSettings.getCurrentState()::setCodeCompletionsEnabled - OLLAMA -> service().state.codeCompletionsEnabled = enableFeatureAction - CUSTOM_OPENAI -> service().state - .codeCompletionSettings - .codeCompletionsEnabled = enableFeatureAction + OLLAMA -> service().state::codeCompletionsEnabled::set - ANTHROPIC, - AZURE, - YOU, - GOOGLE, - null -> { /* no-op for these services */ - } - } - } + CUSTOM_OPENAI -> service().state.codeCompletionSettings::codeCompletionsEnabled::set + + ANTHROPIC, + AZURE, + YOU, + GOOGLE, + null -> { _: Boolean -> Unit } // no-op for these services + }(enableFeatureAction) override fun update(e: AnActionEvent) { - val selectedService = GeneralSettings.getCurrentState().selectedService + val selectedService = GeneralSettings.getSelectedService() val codeCompletionEnabled = - service().isCodeCompletionsEnabled(selectedService) + e.project?.service()?.isCodeCompletionsEnabled(selectedService) ?: false e.presentation.isVisible = codeCompletionEnabled != enableFeatureAction e.presentation.isEnabled = when (selectedService) { CODEGPT, diff --git a/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeCompletionService.kt b/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeCompletionService.kt index a2093b31..d5409bc4 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeCompletionService.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeCompletionService.kt @@ -37,7 +37,7 @@ class CodeCompletionService { requestDetails: InfillRequestDetails, eventListener: CompletionEventListener ): EventSource = - when (val selectedService = GeneralSettings.getCurrentState().selectedService) { + when (val selectedService = GeneralSettings.getSelectedService()) { CODEGPT -> CompletionClientProvider.getCodeGPTClient() .getCompletionAsync(buildCodeGPTRequest(requestDetails), eventListener) @@ -56,4 +56,4 @@ class CodeCompletionService { else -> throw IllegalArgumentException("Code completion not supported for ${selectedService.name}") } -} \ No newline at end of file +} diff --git a/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeGPTInlineCompletionProvider.kt b/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeGPTInlineCompletionProvider.kt index 1a817d29..3e20f012 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeGPTInlineCompletionProvider.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/codecompletions/CodeGPTInlineCompletionProvider.kt @@ -67,7 +67,7 @@ class CodeGPTInlineCompletionProvider : InlineCompletionProvider { } override fun isEnabled(event: InlineCompletionEvent): Boolean { - val selectedService = GeneralSettings.getCurrentState().selectedService + val selectedService = GeneralSettings.getSelectedService() val codeCompletionsEnabled = when (selectedService) { ServiceType.CODEGPT -> service().state.codeCompletionSettings.codeCompletionsEnabled ServiceType.OPENAI -> OpenAISettings.getCurrentState().isCodeCompletionsEnabled