Encapsulate settings (#180)

This commit is contained in:
Carl-Robert 2023-08-27 18:16:08 +03:00 committed by GitHub
parent de971806d0
commit ef5fd5919f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
36 changed files with 697 additions and 369 deletions

View file

@ -8,6 +8,10 @@ import ee.carlrobert.codegpt.conversations.ConversationsState;
import ee.carlrobert.codegpt.credentials.AzureCredentialsManager;
import ee.carlrobert.codegpt.credentials.OpenAICredentialsManager;
import ee.carlrobert.codegpt.credentials.UserCredentialsManager;
import ee.carlrobert.codegpt.settings.state.AzureSettingsState;
import ee.carlrobert.codegpt.settings.state.ModelSettingsState;
import ee.carlrobert.codegpt.settings.state.OpenAISettingsState;
import ee.carlrobert.codegpt.settings.state.SettingsState;
import ee.carlrobert.codegpt.toolwindow.chat.standard.StandardChatToolWindowContentManager;
import ee.carlrobert.codegpt.toolwindow.chat.standard.StandardChatToolWindowTabPanel;
import ee.carlrobert.codegpt.util.ApplicationUtils;
@ -41,41 +45,48 @@ public class SettingsConfigurable implements Configurable, Disposable {
@Override
public boolean isModified() {
var settings = SettingsState.getInstance();
var openAISettings = OpenAISettingsState.getInstance();
var azureSettings = AzureSettingsState.getInstance();
var modelSettings = ModelSettingsState.getInstance();
var serviceSelectionForm = settingsComponent.getServiceSelectionForm();
return !settingsComponent.getEmail().equals(settings.email) ||
!settingsComponent.getDisplayName().equals(settings.displayName) ||
return !settingsComponent.getEmail().equals(settings.getEmail()) ||
!settingsComponent.getDisplayName().equals(settings.getDisplayName()) ||
serviceSelectionForm.isOpenAIServiceSelected() != settings.useOpenAIService ||
serviceSelectionForm.isAzureServiceSelected() != settings.useAzureService ||
serviceSelectionForm.isOpenAIServiceSelected() != settings.isUseOpenAIService() ||
serviceSelectionForm.isAzureServiceSelected() != settings.isUseAzureService() ||
!serviceSelectionForm.getOpenAIApiKey().equals(OpenAICredentialsManager.getInstance().getApiKey()) ||
!serviceSelectionForm.getOpenAIOrganization().equals(settings.openAIOrganization) ||
!serviceSelectionForm.getOpenAIBaseHost().equals(settings.openAIBaseHost) ||
!serviceSelectionForm.getOpenAIOrganization().equals(openAISettings.getOrganization()) ||
!serviceSelectionForm.getOpenAIBaseHost().equals(openAISettings.getBaseHost()) ||
serviceSelectionForm.isAzureActiveDirectoryAuthenticationSelected() != settings.useAzureActiveDirectoryAuthentication ||
serviceSelectionForm.isAzureApiKeyAuthenticationSelected() != settings.useAzureApiKeyAuthentication ||
serviceSelectionForm.isAzureActiveDirectoryAuthenticationSelected() != azureSettings.isUseAzureActiveDirectoryAuthentication() ||
serviceSelectionForm.isAzureApiKeyAuthenticationSelected() != azureSettings.isUseAzureApiKeyAuthentication() ||
!serviceSelectionForm.getAzureActiveDirectoryToken().equals(AzureCredentialsManager.getInstance().getAzureActiveDirectoryToken()) ||
!serviceSelectionForm.getAzureOpenAIApiKey().equals(AzureCredentialsManager.getInstance().getAzureOpenAIApiKey()) ||
!serviceSelectionForm.getAzureResourceName().equals(settings.azureResourceName) ||
!serviceSelectionForm.getAzureDeploymentId().equals(settings.azureDeploymentId) ||
!serviceSelectionForm.getAzureApiVersion().equals(settings.azureApiVersion) ||
!serviceSelectionForm.getAzureBaseHost().equals(settings.azureBaseHost) ||
!serviceSelectionForm.getAzureResourceName().equals(azureSettings.getResourceName()) ||
!serviceSelectionForm.getAzureDeploymentId().equals(azureSettings.getDeploymentId()) ||
!serviceSelectionForm.getAzureApiVersion().equals(azureSettings.getApiVersion()) ||
!serviceSelectionForm.getAzureBaseHost().equals(azureSettings.getBaseHost()) ||
isModelChanged(settings) ||
isCompletionOptionChanged(settings);
isModelChanged(modelSettings) ||
isCompletionOptionChanged(modelSettings);
}
@Override
public void apply() {
var settings = SettingsState.getInstance();
var isModelChanged = isModelChanged(settings);
var openAISettings = OpenAISettingsState.getInstance();
var azureSettings = AzureSettingsState.getInstance();
var modelSettings = ModelSettingsState.getInstance();
var isModelChanged = isModelChanged(modelSettings);
if (isModelChanged) {
EncodingManager.getInstance()
.setEncoding(settings.isChatCompletionOptionSelected ? settings.chatCompletionBaseModel
: settings.textCompletionBaseModel);
EncodingManager.getInstance().setEncoding(modelSettings.isUseChatCompletion() ?
modelSettings.getChatCompletionModel() :
modelSettings.getTextCompletionModel());
}
if (isCompletionOptionChanged(settings) || isModelChanged) {
if (isCompletionOptionChanged(modelSettings) || isModelChanged) {
ConversationsState.getInstance().setCurrentConversation(null);
var project = ApplicationUtils.findCurrentProject();
if (project == null) {
@ -100,57 +111,59 @@ public class SettingsConfigurable implements Configurable, Disposable {
AzureCredentialsManager.getInstance().setApiKey(serviceSelectionForm.getAzureOpenAIApiKey());
AzureCredentialsManager.getInstance().setAzureActiveDirectoryToken(serviceSelectionForm.getAzureActiveDirectoryToken());
settings.email = settingsComponent.getEmail();
settings.displayName = settingsComponent.getDisplayName();
settings.setEmail(settingsComponent.getEmail());
settings.setDisplayName(settingsComponent.getDisplayName());
settings.setUseOpenAIService(serviceSelectionForm.isOpenAIServiceSelected());
settings.setUseOpenAIService(serviceSelectionForm.isAzureServiceSelected());
settings.useOpenAIService = serviceSelectionForm.isOpenAIServiceSelected();
settings.useAzureService = serviceSelectionForm.isAzureServiceSelected();
openAISettings.setOrganization(serviceSelectionForm.getOpenAIOrganization());
openAISettings.setBaseHost(serviceSelectionForm.getOpenAIBaseHost());
settings.openAIOrganization = serviceSelectionForm.getOpenAIOrganization();
settings.openAIBaseHost = serviceSelectionForm.getOpenAIBaseHost();
azureSettings.setUseAzureActiveDirectoryAuthentication(serviceSelectionForm.isAzureActiveDirectoryAuthenticationSelected());
azureSettings.setUseAzureApiKeyAuthentication(serviceSelectionForm.isAzureApiKeyAuthenticationSelected());
azureSettings.setResourceName(serviceSelectionForm.getAzureResourceName());
azureSettings.setDeploymentId(serviceSelectionForm.getAzureDeploymentId());
azureSettings.setApiVersion(serviceSelectionForm.getAzureApiVersion());
azureSettings.setBaseHost(serviceSelectionForm.getAzureBaseHost());
settings.useAzureActiveDirectoryAuthentication = serviceSelectionForm.isAzureActiveDirectoryAuthenticationSelected();
settings.useAzureApiKeyAuthentication = serviceSelectionForm.isAzureApiKeyAuthenticationSelected();
settings.azureResourceName = serviceSelectionForm.getAzureResourceName();
settings.azureDeploymentId = serviceSelectionForm.getAzureDeploymentId();
settings.azureApiVersion = serviceSelectionForm.getAzureApiVersion();
settings.azureBaseHost = serviceSelectionForm.getAzureBaseHost();
settings.chatCompletionBaseModel = modelSelectionForm.getChatCompletionBaseModel().getCode();
settings.textCompletionBaseModel = modelSelectionForm.getTextCompletionBaseModel().getCode();
settings.isChatCompletionOptionSelected = modelSelectionForm.isChatCompletionOptionSelected();
settings.isTextCompletionOptionSelected = modelSelectionForm.isTextCompletionOptionSelected();
modelSettings.setUseChatCompletion(modelSelectionForm.isChatCompletionOptionSelected());
modelSettings.setUseTextCompletion(modelSelectionForm.isTextCompletionOptionSelected());
modelSettings.setChatCompletionModel(modelSelectionForm.getChatCompletionBaseModel().getCode());
modelSettings.setTextCompletionModel(modelSelectionForm.getTextCompletionBaseModel().getCode());
}
@Override
public void reset() {
var settings = SettingsState.getInstance();
var openAISettings = OpenAISettingsState.getInstance();
var azureSettings = AzureSettingsState.getInstance();
var modelSettings = ModelSettingsState.getInstance();
var serviceSelectionForm = settingsComponent.getServiceSelectionForm();
var modelSelectionForm = settingsComponent.getModelSelectionForm();
settingsComponent.setEmail(settings.email);
settingsComponent.setDisplayName(settings.displayName);
settingsComponent.setEmail(settings.getEmail());
settingsComponent.setDisplayName(settings.getDisplayName());
serviceSelectionForm.setOpenAIServiceSelected(settings.useAzureService);
serviceSelectionForm.setAzureServiceSelected(settings.useAzureService);
serviceSelectionForm.setOpenAIServiceSelected(settings.isUseOpenAIService());
serviceSelectionForm.setAzureServiceSelected(settings.isUseAzureService());
serviceSelectionForm.setOpenAIApiKey(OpenAICredentialsManager.getInstance().getApiKey());
serviceSelectionForm.setOpenAIOrganization(settings.openAIOrganization);
serviceSelectionForm.setOpenAIBaseHost(settings.openAIBaseHost);
serviceSelectionForm.setOpenAIOrganization(openAISettings.getOrganization());
serviceSelectionForm.setOpenAIBaseHost(openAISettings.getBaseHost());
serviceSelectionForm.setAzureApiKeyAuthenticationSelected(settings.useAzureApiKeyAuthentication);
serviceSelectionForm.setAzureApiKeyAuthenticationSelected(azureSettings.isUseAzureApiKeyAuthentication());
serviceSelectionForm.setAzureApiKey(AzureCredentialsManager.getInstance().getAzureOpenAIApiKey());
serviceSelectionForm.setAzureActiveDirectoryAuthenticationSelected(settings.useAzureActiveDirectoryAuthentication);
serviceSelectionForm.setAzureActiveDirectoryAuthenticationSelected(azureSettings.isUseAzureActiveDirectoryAuthentication());
serviceSelectionForm.setAzureActiveDirectoryToken(AzureCredentialsManager.getInstance().getAzureActiveDirectoryToken());
serviceSelectionForm.setAzureResourceName(settings.azureResourceName);
serviceSelectionForm.setAzureDeploymentId(settings.azureDeploymentId);
serviceSelectionForm.setAzureApiVersion(settings.azureApiVersion);
serviceSelectionForm.setAzureBaseHost(settings.azureBaseHost);
serviceSelectionForm.setAzureResourceName(azureSettings.getResourceName());
serviceSelectionForm.setAzureDeploymentId(azureSettings.getDeploymentId());
serviceSelectionForm.setAzureApiVersion(azureSettings.getApiVersion());
serviceSelectionForm.setAzureBaseHost(azureSettings.getBaseHost());
modelSelectionForm.setUseChatCompletionSelected(settings.isChatCompletionOptionSelected);
modelSelectionForm.setUseTextCompletionSelected(settings.isTextCompletionOptionSelected);
modelSelectionForm.setChatCompletionBaseModel(settings.chatCompletionBaseModel);
modelSelectionForm.setTextCompletionBaseModel(settings.textCompletionBaseModel);
modelSelectionForm.setUseChatCompletionSelected(modelSettings.isUseChatCompletion());
modelSelectionForm.setUseTextCompletionSelected(modelSettings.isUseTextCompletion());
modelSelectionForm.setChatCompletionBaseModel(modelSettings.getChatCompletionModel());
modelSelectionForm.setTextCompletionBaseModel(modelSettings.getTextCompletionModel());
}
@Override
@ -158,16 +171,16 @@ public class SettingsConfigurable implements Configurable, Disposable {
settingsComponent = null;
}
private boolean isCompletionOptionChanged(SettingsState settings) {
private boolean isCompletionOptionChanged(ModelSettingsState settings) {
var modelSelectionForm = settingsComponent.getModelSelectionForm();
return modelSelectionForm.isChatCompletionOptionSelected() != settings.isChatCompletionOptionSelected ||
modelSelectionForm.isTextCompletionOptionSelected() != settings.isTextCompletionOptionSelected;
return modelSelectionForm.isChatCompletionOptionSelected() != settings.isUseChatCompletion() ||
modelSelectionForm.isTextCompletionOptionSelected() != settings.isUseTextCompletion();
}
private boolean isModelChanged(SettingsState settings) {
private boolean isModelChanged(ModelSettingsState settings) {
var modelSelectionForm = settingsComponent.getModelSelectionForm();
return !modelSelectionForm.getChatCompletionBaseModel().getCode().equals(settings.chatCompletionBaseModel) ||
!modelSelectionForm.getTextCompletionBaseModel().getCode().equals(settings.textCompletionBaseModel);
return !modelSelectionForm.getChatCompletionBaseModel().getCode().equals(settings.getChatCompletionModel()) ||
!modelSelectionForm.getTextCompletionBaseModel().getCode().equals(settings.getTextCompletionModel());
}
@Override