diff --git a/src/main/java/ee/carlrobert/codegpt/actions/GenerateGitCommitMessageAction.java b/src/main/java/ee/carlrobert/codegpt/actions/GenerateGitCommitMessageAction.java index 1b7faa0b4..43dfa15e1 100644 --- a/src/main/java/ee/carlrobert/codegpt/actions/GenerateGitCommitMessageAction.java +++ b/src/main/java/ee/carlrobert/codegpt/actions/GenerateGitCommitMessageAction.java @@ -28,6 +28,7 @@ import ee.carlrobert.codegpt.Icons; import ee.carlrobert.codegpt.completions.CompletionRequestService; import ee.carlrobert.codegpt.settings.GeneralSettings; +import ee.carlrobert.codegpt.settings.service.ServiceType; import ee.carlrobert.codegpt.ui.OverlayUtil; import ee.carlrobert.llm.client.openai.completion.ErrorDetails; import ee.carlrobert.llm.completion.CompletionEventListener; @@ -61,16 +62,16 @@ public GenerateGitCommitMessageAction() { @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) { + ServiceType selectedService; + if (commitWorkflowUi == null + || YOU == (selectedService = GeneralSettings.getCurrentState().getSelectedService())) { event.getPresentation().setVisible(false); return; } - var callAllowed = CompletionRequestService.isRequestAllowed( - GeneralSettings.getCurrentState().getSelectedService()); - event.getPresentation().setEnabled(callAllowed - && new CommitWorkflowChanges(commitWorkflowUi).isFilesSelected()); + var callAllowed = CompletionRequestService.isRequestAllowed(selectedService); + boolean enabled = callAllowed && new CommitWorkflowChanges(commitWorkflowUi).isFilesSelected(); + event.getPresentation().setEnabled(enabled); event.getPresentation().setText(CodeGPTBundle.get(callAllowed ? "action.generateCommitMessage.title" : "action.generateCommitMessage.missingCredentials")); diff --git a/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestService.java b/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestService.java index f4e3a17b5..04f1856db 100644 --- a/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestService.java +++ b/src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestService.java @@ -1,7 +1,5 @@ package ee.carlrobert.codegpt.completions; -import static ee.carlrobert.codegpt.settings.service.ServiceType.ANTHROPIC; -import static ee.carlrobert.codegpt.settings.service.ServiceType.AZURE; import static ee.carlrobert.codegpt.settings.service.ServiceType.CUSTOM_OPENAI; import static ee.carlrobert.codegpt.settings.service.ServiceType.LLAMA_CPP; import static ee.carlrobert.codegpt.settings.service.ServiceType.OPENAI; @@ -14,8 +12,6 @@ import ee.carlrobert.codegpt.codecompletions.InfillRequestDetails; import ee.carlrobert.codegpt.completions.llama.LlamaModel; import ee.carlrobert.codegpt.completions.llama.PromptTemplate; -import ee.carlrobert.codegpt.credentials.CredentialsStore; -import ee.carlrobert.codegpt.credentials.CredentialsStore.CredentialKey; import ee.carlrobert.codegpt.settings.GeneralSettings; import ee.carlrobert.codegpt.settings.configuration.ConfigurationSettings; import ee.carlrobert.codegpt.settings.service.ServiceType; @@ -210,19 +206,12 @@ public boolean isRequestAllowed() { } public static boolean isRequestAllowed(ServiceType serviceType) { - if (serviceType == OPENAI - && CredentialsStore.INSTANCE.isCredentialSet(CredentialKey.OPENAI_API_KEY)) { - return true; - } - - var azureCredentialKey = AzureSettings.getCurrentState().isUseAzureApiKeyAuthentication() - ? CredentialKey.AZURE_OPENAI_API_KEY - : CredentialKey.AZURE_ACTIVE_DIRECTORY_TOKEN; - if (serviceType == AZURE && CredentialsStore.INSTANCE.isCredentialSet(azureCredentialKey)) { - return true; - } - - return List.of(LLAMA_CPP, ANTHROPIC, CUSTOM_OPENAI).contains(serviceType); + return switch (serviceType) { + case OPENAI -> OpenAISettings.isCredentialSet(); + case AZURE -> AzureSettings.isCredentialSet(); + case LLAMA_CPP, ANTHROPIC, CUSTOM_OPENAI -> true; + case YOU -> false; + }; } /** diff --git a/src/main/java/ee/carlrobert/codegpt/settings/service/azure/AzureSettings.java b/src/main/java/ee/carlrobert/codegpt/settings/service/azure/AzureSettings.java index 7df50c079..bdf74d886 100644 --- a/src/main/java/ee/carlrobert/codegpt/settings/service/azure/AzureSettings.java +++ b/src/main/java/ee/carlrobert/codegpt/settings/service/azure/AzureSettings.java @@ -35,6 +35,10 @@ public static AzureSettings getInstance() { return ApplicationManager.getApplication().getService(AzureSettings.class); } + public static boolean isCredentialSet() { + return getCurrentState().isCredentialSet(); + } + public boolean isModified(AzureSettingsForm form) { return !form.getCurrentState().equals(state) || !StringUtils.equals( diff --git a/src/main/java/ee/carlrobert/codegpt/settings/service/azure/AzureSettingsState.java b/src/main/java/ee/carlrobert/codegpt/settings/service/azure/AzureSettingsState.java index dced9a5f8..4616e603f 100644 --- a/src/main/java/ee/carlrobert/codegpt/settings/service/azure/AzureSettingsState.java +++ b/src/main/java/ee/carlrobert/codegpt/settings/service/azure/AzureSettingsState.java @@ -1,5 +1,6 @@ package ee.carlrobert.codegpt.settings.service.azure; +import ee.carlrobert.codegpt.credentials.CredentialsStore; import java.util.Objects; public class AzureSettingsState { @@ -51,6 +52,16 @@ public void setUseAzureActiveDirectoryAuthentication( this.useAzureActiveDirectoryAuthentication = useAzureActiveDirectoryAuthentication; } + public CredentialsStore.CredentialKey getCredentialKey() { + return isUseAzureApiKeyAuthentication() + ? CredentialsStore.CredentialKey.AZURE_OPENAI_API_KEY + : CredentialsStore.CredentialKey.AZURE_ACTIVE_DIRECTORY_TOKEN; + } + + public boolean isCredentialSet() { + return CredentialsStore.INSTANCE.isCredentialSet(getCredentialKey()); + } + @Override public boolean equals(Object o) { if (this == o) { diff --git a/src/main/java/ee/carlrobert/codegpt/settings/service/openai/OpenAISettings.java b/src/main/java/ee/carlrobert/codegpt/settings/service/openai/OpenAISettings.java index d65a1576e..71d69c6ce 100644 --- a/src/main/java/ee/carlrobert/codegpt/settings/service/openai/OpenAISettings.java +++ b/src/main/java/ee/carlrobert/codegpt/settings/service/openai/OpenAISettings.java @@ -34,10 +34,15 @@ public static OpenAISettings getInstance() { return ApplicationManager.getApplication().getService(OpenAISettings.class); } + public static boolean isCredentialSet() { + return CredentialsStore.INSTANCE.isCredentialSet(OPENAI_API_KEY); + } + public boolean isModified(OpenAISettingsForm form) { return !form.getCurrentState().equals(state) || !StringUtils.equals( form.getApiKey(), CredentialsStore.INSTANCE.getCredential(OPENAI_API_KEY)); } + } diff --git a/src/main/kotlin/ee/carlrobert/codegpt/credentials/CredentialsStore.kt b/src/main/kotlin/ee/carlrobert/codegpt/credentials/CredentialsStore.kt index 1a97fc623..9388fa2a3 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/credentials/CredentialsStore.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/credentials/CredentialsStore.kt @@ -9,7 +9,7 @@ object CredentialsStore { private val credentialsMap = mutableMapOf() fun loadAll() { - CredentialKey.values().forEach { + CredentialKey.entries.forEach { val credentialAttributes = CredentialAttributes(generateServiceName("CodeGPT", it.name)) val password = PasswordSafe.instance.getPassword(credentialAttributes) setCredential(it, password) @@ -22,7 +22,7 @@ object CredentialsStore { credentialsMap[key] = password } - fun isCredentialSet(key: CredentialKey): Boolean = !getCredential(key).isNullOrEmpty() + fun isCredentialSet(key: CredentialKey): Boolean = !getCredential(key).isNullOrBlank() enum class CredentialKey { OPENAI_API_KEY, @@ -33,4 +33,4 @@ object CredentialsStore { YOU_ACCOUNT_PASSWORD, LLAMA_API_KEY } -} \ No newline at end of file +}