From 14acc5b09f6225a71fe53745b3053e84c74e193d Mon Sep 17 00:00:00 2001 From: Carl-Robert Linnupuu Date: Thu, 9 Nov 2023 20:30:26 +0200 Subject: [PATCH] Remove Azure model selection and max completion token limit --- .../completions/CompletionRequestHandler.java | 10 +++-- .../CompletionRequestProvider.java | 6 +-- .../completions/CompletionRequestService.java | 2 +- .../conversations/ConversationService.java | 2 +- .../settings/SettingsConfigurable.java | 3 +- .../configuration/ConfigurationComponent.java | 2 +- .../service/ServiceSelectionForm.java | 30 ++------------ .../settings/state/AzureSettingsState.java | 40 +++++++++---------- .../codegpt/settings/state/SettingsState.java | 3 +- .../resources/messages/codegpt.properties | 2 +- .../DefaultCompletionRequestHandlerTest.java | 8 +--- .../settings/state/SettingsStateTest.java | 3 -- 12 files changed, 40 insertions(+), 71 deletions(-) diff --git a/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestHandler.java b/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestHandler.java index 77a1c6fc..33ab9351 100644 --- a/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestHandler.java +++ b/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestHandler.java @@ -51,9 +51,13 @@ public class CompletionRequestHandler { try { return CompletionRequestService.getInstance() .getChatCompletionAsync(conversation, message, retry, useContextualSearch, eventListener); - } catch (Throwable t) { - toolWindowCompletionEventListener.handleError(new ErrorDetails("Something went wrong"), t); - throw t; + } catch (Throwable ex) { + var errorMessage = "Something went wrong"; + if (ex instanceof TotalUsageExceededException) { + errorMessage = "The length of the context exceeds the maximum limit that the model can handle. Try reducing the input message or maximum completion token size."; + } + toolWindowCompletionEventListener.handleError(new ErrorDetails(errorMessage), ex); + throw ex; } } diff --git a/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java b/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java index 1df8281f..249bb686 100644 --- a/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java +++ b/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java @@ -107,7 +107,7 @@ public class CompletionRequestProvider { } public OpenAIChatCompletionRequest buildOpenAIChatCompletionRequest( - String model, + @Nullable String model, Message message, boolean isRetry, boolean useContextualSearch, @@ -126,7 +126,7 @@ public class CompletionRequestProvider { } private List buildMessages( - String model, + @Nullable String model, Message message, boolean isRetry, boolean useContextualSearch) { @@ -150,7 +150,7 @@ public class CompletionRequestProvider { messages.add(new OpenAIChatCompletionMessage("user", message.getPrompt())); } - if (SettingsState.getInstance().getSelectedService() == ServiceType.YOU) { + if (model == null || SettingsState.getInstance().getSelectedService() == 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 c6c59b86..ab925de3 100644 --- a/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestService.java +++ b/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestService.java @@ -46,7 +46,7 @@ public final class CompletionRequestService { var azureSettings = AzureSettingsState.getInstance(); return CompletionClientProvider.getAzureClient().getChatCompletion( requestProvider.buildOpenAIChatCompletionRequest( - azureSettings.getModel(), + null, message, retry, useContextualSearch, diff --git a/src/main/java/ee/carlrobert/codegpt/conversations/ConversationService.java b/src/main/java/ee/carlrobert/codegpt/conversations/ConversationService.java index 2ec2dc89..13756c20 100644 --- a/src/main/java/ee/carlrobert/codegpt/conversations/ConversationService.java +++ b/src/main/java/ee/carlrobert/codegpt/conversations/ConversationService.java @@ -191,7 +191,7 @@ public final class ConversationService { case OPENAI: return OpenAISettingsState.getInstance().getModel(); case AZURE: - return AzureSettingsState.getInstance().getModel(); + return AzureSettingsState.getInstance().getDeploymentId(); case YOU: return "YouCode"; case LLAMA_CPP: diff --git a/src/main/java/ee/carlrobert/codegpt/settings/SettingsConfigurable.java b/src/main/java/ee/carlrobert/codegpt/settings/SettingsConfigurable.java index ee9cc41f..6db83940 100644 --- a/src/main/java/ee/carlrobert/codegpt/settings/SettingsConfigurable.java +++ b/src/main/java/ee/carlrobert/codegpt/settings/SettingsConfigurable.java @@ -78,8 +78,7 @@ public class SettingsConfigurable implements Configurable { var azureSettings = AzureSettingsState.getInstance(); var llamaSettings = LlamaSettingsState.getInstance(); var serviceChanged = isServiceChanged(settings); - var modelChanged = openAISettings.getModel().equals(serviceSelectionForm.getOpenAIModel()) || - azureSettings.getModel().equals(serviceSelectionForm.getAzureModel()); + var modelChanged = openAISettings.getModel().equals(serviceSelectionForm.getOpenAIModel()); var prevKey = OpenAICredentialsManager.getInstance().getApiKey(); if (prevKey != null && !prevKey.equals(serviceSelectionForm.getOpenAIApiKey())) { 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 02e2b1d0..7f0bc16a 100644 --- a/src/main/java/ee/carlrobert/codegpt/settings/configuration/ConfigurationComponent.java +++ b/src/main/java/ee/carlrobert/codegpt/settings/configuration/ConfigurationComponent.java @@ -82,7 +82,7 @@ public class ConfigurationComponent { } }); - maxTokensField = new IntegerField("max_tokens", 100, 2000); + maxTokensField = new IntegerField(); maxTokensField.setColumns(12); maxTokensField.setValue(configuration.getMaxTokens()); diff --git a/src/main/java/ee/carlrobert/codegpt/settings/service/ServiceSelectionForm.java b/src/main/java/ee/carlrobert/codegpt/settings/service/ServiceSelectionForm.java index 75c5029c..3909c771 100644 --- a/src/main/java/ee/carlrobert/codegpt/settings/service/ServiceSelectionForm.java +++ b/src/main/java/ee/carlrobert/codegpt/settings/service/ServiceSelectionForm.java @@ -14,7 +14,6 @@ import com.intellij.util.ui.FormBuilder; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UI; import ee.carlrobert.codegpt.CodeGPTBundle; -import ee.carlrobert.codegpt.completions.you.YouUserManager; import ee.carlrobert.codegpt.completions.you.auth.AuthenticationNotifier; import ee.carlrobert.codegpt.credentials.AzureCredentialsManager; import ee.carlrobert.codegpt.credentials.OpenAICredentialsManager; @@ -54,7 +53,6 @@ public class ServiceSelectionForm { private final JBTextField azureDeploymentIdField; private final JBTextField azureApiVersionField; private final JPanel azureServiceSectionPanel; - private final ComboBox azureCompletionModelComboBox; private final JPanel youServiceSectionPanel; private final JBCheckBox displayWebSearchResultsCheckBox; @@ -106,17 +104,10 @@ public class ServiceSelectionForm { azureResourceNameField = new JBTextField(azureSettings.getResourceName(), 35); azureDeploymentIdField = new JBTextField(azureSettings.getDeploymentId(), 35); azureApiVersionField = new JBTextField(azureSettings.getApiVersion(), 35); - azureCompletionModelComboBox = new ComboBox<>( - new EnumComboBoxModel<>(OpenAIChatCompletionModel.class)); - azureCompletionModelComboBox.setSelectedItem(selectedOpenAIModel); - azureCompletionModelComboBox.getEditor() - .getEditorComponent() - .setMaximumSize(azureBaseHostField.getPreferredSize()); displayWebSearchResultsCheckBox = new JBCheckBox( CodeGPTBundle.get("settingsConfigurable.service.you.displayResults.label"), YouSettingsState.getInstance().isDisplayWebSearchResults()); - displayWebSearchResultsCheckBox.setEnabled(YouUserManager.getInstance().isAuthenticated()); openAIServiceSectionPanel = createOpenAIServiceSectionPanel(); azureServiceSectionPanel = createAzureServiceSectionPanel(); @@ -135,6 +126,10 @@ public class ServiceSelectionForm { private JPanel createOpenAIServiceSectionPanel() { var requestConfigurationPanel = UI.PanelFactory.grid() + .add(UI.PanelFactory.panel(openAICompletionModelComboBox) + .withLabel(CodeGPTBundle.get( + "settingsConfigurable.shared.model.label")) + .resizeX(false)) .add(UI.PanelFactory.panel(openAIOrganizationField) .withLabel(CodeGPTBundle.get( "settingsConfigurable.service.openai.organization.label")) @@ -149,10 +144,6 @@ public class ServiceSelectionForm { .withLabel(CodeGPTBundle.get( "settingsConfigurable.shared.path.label")) .resizeX(false)) - .add(UI.PanelFactory.panel(openAICompletionModelComboBox) - .withLabel(CodeGPTBundle.get( - "settingsConfigurable.shared.model.label")) - .resizeX(false)) .createPanel(); var apiKeyFieldPanel = UI.PanelFactory.panel(openAIApiKeyField) @@ -213,9 +204,6 @@ public class ServiceSelectionForm { .add(UI.PanelFactory.panel(azurePathField) .withLabel(CodeGPTBundle.get("settingsConfigurable.shared.path.label")) .resizeX(false)) - .add(UI.PanelFactory.panel(azureCompletionModelComboBox) - .withLabel(CodeGPTBundle.get("settingsConfigurable.shared.model.label")) - .resizeX(false)) .createPanel()); return FormBuilder.createFormBuilder() @@ -365,16 +353,6 @@ public class ServiceSelectionForm { return azureBaseHostField.getText(); } - public void setAzureModel(String model) { - azureCompletionModelComboBox.setSelectedItem(OpenAIChatCompletionModel.findByCode(model)); - } - - public String getAzureModel() { - return ((OpenAIChatCompletionModel) (azureCompletionModelComboBox.getModel() - .getSelectedItem())) - .getCode(); - } - public void setDisplayWebSearchResults(boolean displayWebSearchResults) { displayWebSearchResultsCheckBox.setSelected(displayWebSearchResults); } diff --git a/src/main/java/ee/carlrobert/codegpt/settings/state/AzureSettingsState.java b/src/main/java/ee/carlrobert/codegpt/settings/state/AzureSettingsState.java index efbbfaf2..763aace1 100644 --- a/src/main/java/ee/carlrobert/codegpt/settings/state/AzureSettingsState.java +++ b/src/main/java/ee/carlrobert/codegpt/settings/state/AzureSettingsState.java @@ -7,7 +7,6 @@ import com.intellij.openapi.components.Storage; import com.intellij.util.xmlb.XmlSerializerUtil; import ee.carlrobert.codegpt.credentials.AzureCredentialsManager; import ee.carlrobert.codegpt.settings.service.ServiceSelectionForm; -import ee.carlrobert.llm.client.openai.completion.chat.OpenAIChatCompletionModel; import org.jetbrains.annotations.NotNull; @State(name = "CodeGPT_AzureSettings_210", storages = @Storage("CodeGPT_AzureSettings_210.xml")) @@ -20,7 +19,6 @@ public class AzureSettingsState implements PersistentStateComponent { } if ("azure.chat.completion".equals(clientCode)) { setSelectedService(ServiceType.AZURE); - AzureSettingsState.getInstance().setModel(conversation.getModel()); } if ("llama.chat.completion".equals(clientCode)) { setSelectedService(ServiceType.LLAMA_CPP); @@ -68,7 +67,7 @@ public class SettingsState implements PersistentStateComponent { case OPENAI: return OpenAISettingsState.getInstance().getModel(); case AZURE: - return AzureSettingsState.getInstance().getModel(); + return AzureSettingsState.getInstance().getDeploymentId(); case YOU: return "YouCode"; case LLAMA_CPP: diff --git a/src/main/resources/messages/codegpt.properties b/src/main/resources/messages/codegpt.properties index 84a54dc8..cf9e61fe 100644 --- a/src/main/resources/messages/codegpt.properties +++ b/src/main/resources/messages/codegpt.properties @@ -66,7 +66,7 @@ configurationConfigurable.section.assistant.systemPromptField.comment=The system 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. Must be between 100 and 2000 +configurationConfigurable.section.assistant.maxTokensField.comment=The maximum capacity for completion. advancedSettingsConfigurable.displayName=CodeGPT: Advanced Settings advancedSettingsConfigurable.proxy.title=HTTP/SOCKS Proxy advancedSettingsConfigurable.proxy.typeComboBoxField.label=Proxy: diff --git a/src/test/java/ee/carlrobert/codegpt/completions/DefaultCompletionRequestHandlerTest.java b/src/test/java/ee/carlrobert/codegpt/completions/DefaultCompletionRequestHandlerTest.java index 6143650b..d0edd194 100644 --- a/src/test/java/ee/carlrobert/codegpt/completions/DefaultCompletionRequestHandlerTest.java +++ b/src/test/java/ee/carlrobert/codegpt/completions/DefaultCompletionRequestHandlerTest.java @@ -87,7 +87,6 @@ public class DefaultCompletionRequestHandlerTest extends BasePlatformTestCase { } public void testAzureChatCompletionCall() { - AzureSettingsState.getInstance().setModel(OpenAIChatCompletionModel.GPT_3_5.getCode()); SettingsState.getInstance().setSelectedService(ServiceType.AZURE); var azureSettings = AzureSettingsState.getInstance(); azureSettings.setResourceName("TEST_RESOURCE_NAME"); @@ -105,11 +104,8 @@ public class DefaultCompletionRequestHandlerTest extends BasePlatformTestCase { assertThat(request.getUri().getQuery()).isEqualTo("api-version=TEST_API_VERSION"); assertThat(request.getHeaders().get("Api-key").get(0)).isEqualTo("TEST_API_KEY"); assertThat(request.getBody()) - .extracting( - "model", - "messages") - .containsExactly( - "gpt-3.5-turbo", + .extracting("messages") + .isEqualTo( List.of( Map.of("role", "system", "content", COMPLETION_SYSTEM_PROMPT), Map.of("role", "user", "content", "TEST_PREV_PROMPT"), diff --git a/src/test/java/ee/carlrobert/codegpt/settings/state/SettingsStateTest.java b/src/test/java/ee/carlrobert/codegpt/settings/state/SettingsStateTest.java index 0273bfeb..f032bd7f 100644 --- a/src/test/java/ee/carlrobert/codegpt/settings/state/SettingsStateTest.java +++ b/src/test/java/ee/carlrobert/codegpt/settings/state/SettingsStateTest.java @@ -27,8 +27,6 @@ public class SettingsStateTest extends BasePlatformTestCase { public void testAzureSettingsSync() { var settings = SettingsState.getInstance(); - var azureSettings = AzureSettingsState.getInstance(); - azureSettings.setModel("gpt-3.5-turbo"); var conversation = new Conversation(); conversation.setModel("gpt-4"); conversation.setClientCode("azure.chat.completion"); @@ -36,7 +34,6 @@ public class SettingsStateTest extends BasePlatformTestCase { settings.sync(conversation); assertThat(settings.getSelectedService()).isEqualTo(ServiceType.AZURE); - assertThat(azureSettings.getModel()).isEqualTo("gpt-4"); } public void testYouSettingsSync() {