Skip to content

Commit cfa5ff7

Browse files
authored
Use enum value to store selected service (#265)
1 parent ff60d1e commit cfa5ff7

File tree

12 files changed

+166
-233
lines changed

12 files changed

+166
-233
lines changed

src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestHandler.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import ee.carlrobert.codegpt.completions.you.YouUserManager;
55
import ee.carlrobert.codegpt.conversations.Conversation;
66
import ee.carlrobert.codegpt.conversations.message.Message;
7+
import ee.carlrobert.codegpt.settings.service.ServiceType;
78
import ee.carlrobert.codegpt.settings.state.AzureSettingsState;
89
import ee.carlrobert.codegpt.settings.state.OpenAISettingsState;
910
import ee.carlrobert.codegpt.settings.state.SettingsState;
@@ -80,12 +81,12 @@ private EventSource startCall(
8081
var requestProvider = new CompletionRequestProvider(conversation);
8182

8283
try {
83-
if (settings.isUseLlamaService()) {
84+
if (settings.getSelectedService() == ServiceType.LLAMA_CPP) {
8485
return CompletionClientProvider.getLlamaClient()
8586
.getChatCompletion(requestProvider.buildLlamaCompletionRequest(message), eventListener);
8687
}
8788

88-
if (settings.isUseYouService()) {
89+
if (settings.getSelectedService() == ServiceType.YOU) {
8990
var sessionId = "";
9091
var accessToken = "";
9192
var youUserManager = YouUserManager.getInstance();
@@ -103,7 +104,7 @@ private EventSource startCall(
103104
.getChatCompletion(request, eventListener);
104105
}
105106

106-
if (settings.isUseAzureService()) {
107+
if (settings.getSelectedService() == ServiceType.AZURE) {
107108
var azureSettings = AzureSettingsState.getInstance();
108109
return CompletionClientProvider.getAzureClient().getChatCompletion(
109110
requestProvider.buildOpenAIChatCompletionRequest(
@@ -151,7 +152,7 @@ protected Void doInBackground() {
151152
conversation,
152153
message,
153154
isRetry,
154-
settings.isUseYouService() ?
155+
settings.getSelectedService() == ServiceType.YOU ?
155156
new YouRequestCompletionEventListener() :
156157
new BaseCompletionEventListener());
157158
} catch (TotalUsageExceededException e) {
@@ -212,20 +213,10 @@ public void onSerpResults(List<YouSerpResult> results) {
212213
}
213214

214215
private void sendInfo(SettingsState settings) {
215-
var service = "openai";
216-
if (settings.isUseAzureService()) {
217-
service = "azure";
218-
}
219-
if (settings.isUseYouService()) {
220-
service = "you";
221-
}
222-
if (settings.isUseLlamaService()) {
223-
service = "llama";
224-
}
225216
TelemetryAction.COMPLETION.createActionMessage()
226217
.property("conversationId", conversation.getId().toString())
227218
.property("model", conversation.getModel())
228-
.property("service", service)
219+
.property("service", settings.getSelectedService().getCode().toLowerCase())
229220
.send();
230221
}
231222

src/main/java/ee/carlrobert/codegpt/completions/CompletionRequestProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import ee.carlrobert.codegpt.conversations.ConversationsState;
1212
import ee.carlrobert.codegpt.conversations.message.Message;
1313
import ee.carlrobert.codegpt.settings.configuration.ConfigurationState;
14+
import ee.carlrobert.codegpt.settings.service.ServiceType;
1415
import ee.carlrobert.codegpt.settings.state.LlamaSettingsState;
1516
import ee.carlrobert.codegpt.settings.state.SettingsState;
1617
import ee.carlrobert.codegpt.settings.state.YouSettingsState;
@@ -149,7 +150,7 @@ private List<OpenAIChatCompletionMessage> buildMessages(
149150
messages.add(new OpenAIChatCompletionMessage("user", message.getPrompt()));
150151
}
151152

152-
if (SettingsState.getInstance().isUseYouService()) {
153+
if (SettingsState.getInstance().getSelectedService() == ServiceType.YOU) {
153154
return messages;
154155
}
155156

src/main/java/ee/carlrobert/codegpt/conversations/ConversationService.java

Lines changed: 48 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.intellij.openapi.application.ApplicationManager;
66
import com.intellij.openapi.components.Service;
77
import ee.carlrobert.codegpt.conversations.message.Message;
8+
import ee.carlrobert.codegpt.settings.service.ServiceType;
89
import ee.carlrobert.codegpt.settings.state.AzureSettingsState;
910
import ee.carlrobert.codegpt.settings.state.LlamaSettingsState;
1011
import ee.carlrobert.codegpt.settings.state.OpenAISettingsState;
@@ -43,17 +44,9 @@ public Conversation createConversation(String clientCode) {
4344
var conversation = new Conversation();
4445
conversation.setId(UUID.randomUUID());
4546
conversation.setClientCode(clientCode);
46-
if (settings.isUseYouService()) {
47-
conversation.setModel("YouCode");
48-
} else if (settings.isUseAzureService()) {
49-
conversation.setModel(AzureSettingsState.getInstance().getModel());
50-
} else if (settings.isUseOpenAIService()) {
51-
conversation.setModel(OpenAISettingsState.getInstance().getModel());
52-
} else {
53-
conversation.setModel(LlamaSettingsState.getInstance().getHuggingFaceModel().getCode());
54-
}
5547
conversation.setCreatedOn(LocalDateTime.now());
5648
conversation.setUpdatedOn(LocalDateTime.now());
49+
conversation.setModel(getModelForSelectedService(settings.getSelectedService()));
5750
return conversation;
5851
}
5952

@@ -121,22 +114,9 @@ public void saveConversation(Conversation conversation) {
121114
conversationState.setCurrentConversation(conversation);
122115
}
123116

124-
private String getClientCode() {
125-
var settings = SettingsState.getInstance();
126-
if (settings.isUseOpenAIService()) {
127-
return "chat.completion";
128-
}
129-
if (settings.isUseAzureService()) {
130-
return "azure.chat.completion";
131-
}
132-
if (settings.isUseLlamaService()) {
133-
return "llama.chat.completion";
134-
}
135-
return "you.chat.completion";
136-
}
137-
138117
public Conversation startConversation() {
139-
var conversation = createConversation(getClientCode());
118+
var completionCode = SettingsState.getInstance().getSelectedService().getCompletionCode();
119+
var conversation = createConversation(completionCode);
140120
conversationState.setCurrentConversation(conversation);
141121
addConversation(conversation);
142122
return conversation;
@@ -147,32 +127,6 @@ public void clearAll() {
147127
conversationState.setCurrentConversation(null);
148128
}
149129

150-
public Optional<Conversation> getPreviousConversation() {
151-
return tryGetNextOrPreviousConversation(true);
152-
}
153-
154-
public Optional<Conversation> getNextConversation() {
155-
return tryGetNextOrPreviousConversation(false);
156-
}
157-
158-
private Optional<Conversation> tryGetNextOrPreviousConversation(boolean isPrevious) {
159-
var currentConversation = ConversationsState.getCurrentConversation();
160-
if (currentConversation != null) {
161-
var sortedConversations = getSortedConversations();
162-
for (int i = 0; i < sortedConversations.size(); i++) {
163-
var conversation = sortedConversations.get(i);
164-
if (conversation != null && conversation.getId().equals(currentConversation.getId())) {
165-
// higher index indicates older conversation
166-
var previousIndex = isPrevious ? i + 1 : i - 1;
167-
if (isPrevious ? previousIndex < sortedConversations.size() : previousIndex != -1) {
168-
return Optional.of(sortedConversations.get(previousIndex));
169-
}
170-
}
171-
}
172-
}
173-
return Optional.empty();
174-
}
175-
176130
public void deleteConversation(Conversation conversation) {
177131
var iterator = conversationState.getConversationsMapping()
178132
.get(conversation.getClientCode())
@@ -205,4 +159,48 @@ public void discardTokenLimits(Conversation conversation) {
205159
conversation.discardTokenLimits();
206160
saveConversation(conversation);
207161
}
162+
163+
public Optional<Conversation> getPreviousConversation() {
164+
return tryGetNextOrPreviousConversation(true);
165+
}
166+
167+
public Optional<Conversation> getNextConversation() {
168+
return tryGetNextOrPreviousConversation(false);
169+
}
170+
171+
private Optional<Conversation> tryGetNextOrPreviousConversation(boolean isPrevious) {
172+
var currentConversation = ConversationsState.getCurrentConversation();
173+
if (currentConversation != null) {
174+
var sortedConversations = getSortedConversations();
175+
for (int i = 0; i < sortedConversations.size(); i++) {
176+
var conversation = sortedConversations.get(i);
177+
if (conversation != null && conversation.getId().equals(currentConversation.getId())) {
178+
// higher index indicates older conversation
179+
var previousIndex = isPrevious ? i + 1 : i - 1;
180+
if (isPrevious ? previousIndex < sortedConversations.size() : previousIndex != -1) {
181+
return Optional.of(sortedConversations.get(previousIndex));
182+
}
183+
}
184+
}
185+
}
186+
return Optional.empty();
187+
}
188+
189+
private static String getModelForSelectedService(ServiceType serviceType) {
190+
switch (serviceType) {
191+
case OPENAI:
192+
return OpenAISettingsState.getInstance().getModel();
193+
case AZURE:
194+
return AzureSettingsState.getInstance().getModel();
195+
case YOU:
196+
return "YouCode";
197+
case LLAMA_CPP:
198+
var llamaSettings = LlamaSettingsState.getInstance();
199+
return llamaSettings.isUseCustomModel() ?
200+
llamaSettings.getCustomLlamaModelPath() :
201+
llamaSettings.getHuggingFaceModel().getCode();
202+
default:
203+
throw new RuntimeException("Could not find corresponding service mapping");
204+
}
205+
}
208206
}

src/main/java/ee/carlrobert/codegpt/settings/SettingsComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public SettingsComponent(Disposable parentDisposable, SettingsState settings) {
3939
cards.add(serviceSelectionForm.getLlamaServiceSectionPanel(), ServiceType.LLAMA_CPP.getCode());
4040
var serviceComboBoxModel = new DefaultComboBoxModel<ServiceType>();
4141
serviceComboBoxModel.addAll(Arrays.stream(ServiceType.values())
42-
.filter(it -> !"LLAMA_CPP".equals(it.getCode()) || SystemInfoRt.isUnix)
42+
.filter(it -> ServiceType.LLAMA_CPP != it || SystemInfoRt.isUnix)
4343
.collect(toList()));
4444
serviceComboBox = new ComboBox<>(serviceComboBoxModel);
4545
serviceComboBox.setSelectedItem(ServiceType.OPENAI);

src/main/java/ee/carlrobert/codegpt/settings/SettingsConfigurable.java

Lines changed: 6 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
11
package ee.carlrobert.codegpt.settings;
22

3-
import static ee.carlrobert.codegpt.settings.service.ServiceType.AZURE;
4-
import static ee.carlrobert.codegpt.settings.service.ServiceType.LLAMA_CPP;
5-
import static ee.carlrobert.codegpt.settings.service.ServiceType.OPENAI;
6-
import static ee.carlrobert.codegpt.settings.service.ServiceType.YOU;
7-
83
import com.intellij.openapi.Disposable;
94
import com.intellij.openapi.options.Configurable;
105
import com.intellij.openapi.util.Disposer;
116
import ee.carlrobert.codegpt.CodeGPTBundle;
127
import ee.carlrobert.codegpt.conversations.ConversationsState;
138
import ee.carlrobert.codegpt.credentials.AzureCredentialsManager;
149
import ee.carlrobert.codegpt.credentials.OpenAICredentialsManager;
15-
import ee.carlrobert.codegpt.settings.service.ServiceType;
1610
import ee.carlrobert.codegpt.settings.state.AzureSettingsState;
1711
import ee.carlrobert.codegpt.settings.state.LlamaSettingsState;
1812
import ee.carlrobert.codegpt.settings.state.OpenAISettingsState;
@@ -98,13 +92,7 @@ public void apply() {
9892
.setAzureActiveDirectoryToken(serviceSelectionForm.getAzureActiveDirectoryToken());
9993

10094
settings.setDisplayName(settingsComponent.getDisplayName());
101-
// TODO: Store as single enum value
102-
settings.setUseOpenAIService(settingsComponent.getSelectedService() == OPENAI);
103-
settings.setUseAzureService(settingsComponent.getSelectedService() == ServiceType.AZURE);
104-
settings.setUseYouService(settingsComponent.getSelectedService() == ServiceType.YOU);
105-
YouSettingsState.getInstance()
106-
.setDisplayWebSearchResults(serviceSelectionForm.isDisplayWebSearchResults());
107-
settings.setUseLlamaService(settingsComponent.getSelectedService() == ServiceType.LLAMA_CPP);
95+
settings.setSelectedService(settingsComponent.getSelectedService());
10896

10997
var llamaModelPreferencesForm = serviceSelectionForm.getLlamaModelPreferencesForm();
11098
llamaSettings.setCustomLlamaModelPath(llamaModelPreferencesForm.getCustomLlamaModelPath());
@@ -116,12 +104,14 @@ public void apply() {
116104

117105
openAISettings.apply(serviceSelectionForm);
118106
azureSettings.apply(serviceSelectionForm);
107+
YouSettingsState.getInstance()
108+
.setDisplayWebSearchResults(serviceSelectionForm.isDisplayWebSearchResults());
119109

120110
if (serviceChanged || modelChanged) {
121111
resetActiveTab();
122112
if (serviceChanged) {
123113
TelemetryAction.SETTINGS_CHANGED.createActionMessage()
124-
.property("service", getServiceCode())
114+
.property("service", settingsComponent.getSelectedService().getCode().toLowerCase())
125115
.send();
126116
}
127117
}
@@ -137,20 +127,8 @@ public void reset() {
137127

138128
// settingsComponent.setEmail(settings.getEmail());
139129
settingsComponent.setDisplayName(settings.getDisplayName());
130+
settingsComponent.setSelectedService(settings.getSelectedService());
140131

141-
// TODO
142-
if (settings.isUseOpenAIService()) {
143-
settingsComponent.setSelectedService(OPENAI);
144-
}
145-
if (settings.isUseAzureService()) {
146-
settingsComponent.setSelectedService(ServiceType.AZURE);
147-
}
148-
if (settings.isUseYouService()) {
149-
settingsComponent.setSelectedService(ServiceType.YOU);
150-
}
151-
if (settings.isUseLlamaService()) {
152-
settingsComponent.setSelectedService(ServiceType.LLAMA_CPP);
153-
}
154132
var llamaModelPreferencesForm = serviceSelectionForm.getLlamaModelPreferencesForm();
155133
llamaModelPreferencesForm.setSelectedModel(llamaSettings.getHuggingFaceModel());
156134
llamaModelPreferencesForm.setCustomLlamaModelPath(llamaSettings.getCustomLlamaModelPath());
@@ -174,10 +152,7 @@ public void disposeUIResources() {
174152
}
175153

176154
private boolean isServiceChanged(SettingsState settings) {
177-
return (settingsComponent.getSelectedService() == OPENAI) != settings.isUseOpenAIService() ||
178-
(settingsComponent.getSelectedService() == AZURE) != settings.isUseAzureService() ||
179-
(settingsComponent.getSelectedService() == YOU) != settings.isUseYouService() ||
180-
(settingsComponent.getSelectedService() == LLAMA_CPP) != settings.isUseLlamaService();
155+
return settingsComponent.getSelectedService() != settings.getSelectedService();
181156
}
182157

183158
private void resetActiveTab() {
@@ -189,20 +164,4 @@ private void resetActiveTab() {
189164

190165
project.getService(StandardChatToolWindowContentManager.class).resetActiveTab();
191166
}
192-
193-
private String getServiceCode() {
194-
if (settingsComponent.getSelectedService() == OPENAI) {
195-
return "openai";
196-
}
197-
if (settingsComponent.getSelectedService() == AZURE) {
198-
return "azure";
199-
}
200-
if (settingsComponent.getSelectedService() == YOU) {
201-
return "you";
202-
}
203-
if (settingsComponent.getSelectedService() == LLAMA_CPP) {
204-
return "llama.cpp";
205-
}
206-
return null;
207-
}
208167
}

src/main/java/ee/carlrobert/codegpt/settings/service/ServiceType.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,19 @@
33
import ee.carlrobert.codegpt.CodeGPTBundle;
44

55
public enum ServiceType {
6-
OPENAI("OPENAI", CodeGPTBundle.get("service.openai.title")),
7-
AZURE("AZURE", CodeGPTBundle.get("service.azure.title")),
8-
YOU("YOU", CodeGPTBundle.get("service.you.title")),
9-
LLAMA_CPP("LLAMA_CPP", CodeGPTBundle.get("service.llama.title"));
6+
OPENAI("OPENAI", CodeGPTBundle.get("service.openai.title"), "chat.completion"),
7+
AZURE("AZURE", CodeGPTBundle.get("service.azure.title"), "azure.chat.completion"),
8+
YOU("YOU", CodeGPTBundle.get("service.you.title"), "you.chat.completion"),
9+
LLAMA_CPP("LLAMA_CPP", CodeGPTBundle.get("service.llama.title"), "llama.chat.completion");
1010

1111
private final String code;
1212
private final String label;
13+
private final String completionCode;
1314

14-
ServiceType(String code, String label) {
15+
ServiceType(String code, String label, String completionCode) {
1516
this.code = code;
1617
this.label = label;
18+
this.completionCode = completionCode;
1719
}
1820

1921
public String getCode() {
@@ -24,6 +26,10 @@ public String getLabel() {
2426
return label;
2527
}
2628

29+
public String getCompletionCode() {
30+
return completionCode;
31+
}
32+
2733
@Override
2834
public String toString() {
2935
return label;

0 commit comments

Comments
 (0)