refactor: improve llm-client code modularity

This commit is contained in:
Carl-Robert Linnupuu 2023-12-07 21:48:12 +02:00
parent c0ecce8d45
commit 425b0cd58b
14 changed files with 50 additions and 67 deletions

View file

@ -7,7 +7,7 @@ import com.knuddels.jtokkit.api.Encoding;
import com.knuddels.jtokkit.api.EncodingRegistry;
import com.knuddels.jtokkit.api.EncodingType;
import ee.carlrobert.codegpt.conversations.Conversation;
import ee.carlrobert.llm.client.openai.completion.chat.request.OpenAIChatCompletionMessage;
import ee.carlrobert.llm.client.openai.completion.request.OpenAIChatCompletionMessage;
@Service
public final class EncodingManager {

View file

@ -29,8 +29,8 @@ import ee.carlrobert.codegpt.credentials.OpenAICredentialsManager;
import ee.carlrobert.codegpt.settings.state.OpenAISettingsState;
import ee.carlrobert.codegpt.util.OverlayUtil;
import ee.carlrobert.llm.client.openai.completion.ErrorDetails;
import ee.carlrobert.llm.client.openai.completion.chat.request.OpenAIChatCompletionMessage;
import ee.carlrobert.llm.client.openai.completion.chat.request.OpenAIChatCompletionRequest;
import ee.carlrobert.llm.client.openai.completion.request.OpenAIChatCompletionMessage;
import ee.carlrobert.llm.client.openai.completion.request.OpenAIChatCompletionRequest;
import ee.carlrobert.llm.completion.CompletionEventListener;
import java.io.BufferedReader;
import java.io.File;

View file

@ -8,9 +8,6 @@ import ee.carlrobert.codegpt.settings.advanced.AdvancedSettingsState;
import ee.carlrobert.codegpt.settings.state.AzureSettingsState;
import ee.carlrobert.codegpt.settings.state.LlamaSettingsState;
import ee.carlrobert.codegpt.settings.state.OpenAISettingsState;
import ee.carlrobert.codegpt.settings.state.YouSettingsState;
import ee.carlrobert.llm.client.Client;
import ee.carlrobert.llm.client.ProxyAuthenticator;
import ee.carlrobert.llm.client.azure.AzureClient;
import ee.carlrobert.llm.client.azure.AzureCompletionRequestParams;
import ee.carlrobert.llm.client.llama.LlamaClient;
@ -20,15 +17,31 @@ import ee.carlrobert.llm.client.you.YouClient;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.concurrent.TimeUnit;
import okhttp3.Credentials;
import okhttp3.OkHttpClient;
public class CompletionClientProvider {
public static OpenAIClient getOpenAIClient() {
return getOpenAIClientBuilder().build();
var settings = OpenAISettingsState.getInstance();
var builder = new OpenAIClient.Builder(OpenAICredentialsManager.getInstance().getApiKey())
.setOrganization(settings.getOrganization());
var baseHost = settings.getBaseHost();
if (baseHost != null) {
builder.setHost(baseHost);
}
return builder.build(getDefaultClientBuilder());
}
public static AzureClient getAzureClient() {
return getAzureClientBuilder().build();
var settings = AzureSettingsState.getInstance();
var params = new AzureCompletionRequestParams(
settings.getResourceName(),
settings.getDeploymentId(),
settings.getApiVersion());
return new AzureClient.Builder(AzureCredentialsManager.getInstance().getSecret(), params)
.setActiveDirectoryAuthentication(settings.isUseAzureActiveDirectoryAuthentication())
.build();
}
public static YouClient getYouClient() {
@ -47,56 +60,39 @@ public class CompletionClientProvider {
accessToken = authenticationResponse.getSessionJwt();
}
// FIXME
return (YouClient) new YouClient.Builder(sessionId, accessToken)
return new YouClient.Builder(sessionId, accessToken)
.setUTMParameters(utmParameters)
.setHost(YouSettingsState.getInstance().getBaseHost())
.build();
}
public static LlamaClient getLlamaClient() {
var builder = new LlamaClient.Builder()
.setPort(LlamaSettingsState.getInstance().getServerPort());
return (LlamaClient) addDefaultClientParams(builder).build();
return new LlamaClient.Builder()
.setPort(LlamaSettingsState.getInstance().getServerPort())
.build(getDefaultClientBuilder());
}
private static OpenAIClient.Builder getOpenAIClientBuilder() {
var settings = OpenAISettingsState.getInstance();
var builder = new OpenAIClient
.Builder(OpenAICredentialsManager.getInstance().getApiKey())
.setOrganization(settings.getOrganization());
return (OpenAIClient.Builder) addDefaultClientParams(builder).setHost(settings.getBaseHost());
}
private static AzureClient.Builder getAzureClientBuilder() {
var settings = AzureSettingsState.getInstance();
var params = new AzureCompletionRequestParams(
settings.getResourceName(),
settings.getDeploymentId(),
settings.getApiVersion());
var builder = new AzureClient.Builder(AzureCredentialsManager.getInstance().getSecret(), params)
.setActiveDirectoryAuthentication(settings.isUseAzureActiveDirectoryAuthentication());
return (AzureClient.Builder) addDefaultClientParams(builder).setHost(settings.getBaseHost());
}
private static Client.Builder addDefaultClientParams(Client.Builder builder) {
private static OkHttpClient.Builder getDefaultClientBuilder() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
var advancedSettings = AdvancedSettingsState.getInstance();
var proxyHost = advancedSettings.getProxyHost();
var proxyPort = advancedSettings.getProxyPort();
if (!proxyHost.isEmpty() && proxyPort != 0) {
builder.setProxy(
builder.proxy(
new Proxy(advancedSettings.getProxyType(), new InetSocketAddress(proxyHost, proxyPort)));
if (advancedSettings.isProxyAuthSelected()) {
builder.setProxyAuthenticator(new ProxyAuthenticator(
advancedSettings.getProxyUsername(),
advancedSettings.getProxyPassword()));
builder.proxyAuthenticator((route, response) ->
response.request()
.newBuilder()
.header("Proxy-Authorization", Credentials.basic(
advancedSettings.getProxyUsername(),
advancedSettings.getProxyPassword()))
.build());
}
}
return builder
.setConnectTimeout((long) advancedSettings.getConnectTimeout(), TimeUnit.SECONDS)
.setReadTimeout((long) advancedSettings.getReadTimeout(), TimeUnit.SECONDS)
.setRetryOnReadTimeout(true);
.connectTimeout(advancedSettings.getConnectTimeout(), TimeUnit.SECONDS)
.readTimeout(advancedSettings.getReadTimeout(), TimeUnit.SECONDS);
}
}

View file

@ -22,10 +22,10 @@ import ee.carlrobert.codegpt.telemetry.core.configuration.TelemetryConfiguration
import ee.carlrobert.codegpt.telemetry.core.service.UserId;
import ee.carlrobert.embedding.EmbeddingsService;
import ee.carlrobert.llm.client.llama.completion.LlamaCompletionRequest;
import ee.carlrobert.llm.client.openai.completion.OpenAIChatCompletionModel;
import ee.carlrobert.llm.client.openai.completion.OpenAICompletionRequest;
import ee.carlrobert.llm.client.openai.completion.chat.OpenAIChatCompletionModel;
import ee.carlrobert.llm.client.openai.completion.chat.request.OpenAIChatCompletionMessage;
import ee.carlrobert.llm.client.openai.completion.chat.request.OpenAIChatCompletionRequest;
import ee.carlrobert.llm.client.openai.completion.request.OpenAIChatCompletionMessage;
import ee.carlrobert.llm.client.openai.completion.request.OpenAIChatCompletionRequest;
import ee.carlrobert.llm.client.you.completion.YouCompletionRequest;
import ee.carlrobert.llm.client.you.completion.YouCompletionRequestMessage;
import java.util.ArrayList;

View file

@ -21,7 +21,7 @@ import ee.carlrobert.codegpt.settings.state.AzureSettingsState;
import ee.carlrobert.codegpt.settings.state.OpenAISettingsState;
import ee.carlrobert.codegpt.settings.state.YouSettingsState;
import ee.carlrobert.codegpt.util.UIUtil;
import ee.carlrobert.llm.client.openai.completion.chat.OpenAIChatCompletionModel;
import ee.carlrobert.llm.client.openai.completion.OpenAIChatCompletionModel;
import java.util.List;
import java.util.Map;
import javax.swing.ButtonGroup;

View file

@ -7,7 +7,7 @@ import com.intellij.openapi.components.Storage;
import com.intellij.util.xmlb.XmlSerializerUtil;
import ee.carlrobert.codegpt.credentials.OpenAICredentialsManager;
import ee.carlrobert.codegpt.settings.service.ServiceSelectionForm;
import ee.carlrobert.llm.client.openai.completion.chat.OpenAIChatCompletionModel;
import ee.carlrobert.llm.client.openai.completion.OpenAIChatCompletionModel;
import org.jetbrains.annotations.NotNull;
@State(name = "CodeGPT_OpenAISettings_210", storages = @Storage("CodeGPT_OpenAISettings_210.xml"))

View file

@ -12,7 +12,6 @@ public class YouSettingsState implements PersistentStateComponent<YouSettingsSta
private boolean displayWebSearchResults = true;
private boolean useGPT4Model;
private String baseHost;
public static YouSettingsState getInstance() {
return ApplicationManager.getApplication().getService(YouSettingsState.class);
@ -43,12 +42,4 @@ public class YouSettingsState implements PersistentStateComponent<YouSettingsSta
public void setUseGPT4Model(boolean useGPT4Model) {
this.useGPT4Model = useGPT4Model;
}
public void setBaseHost(String baseHost) {
this.baseHost = baseHost;
}
public String getBaseHost() {
return baseHost;
}
}

View file

@ -3,7 +3,7 @@ package ee.carlrobert.codegpt.toolwindow;
import com.intellij.ui.components.JBLabel;
import com.intellij.util.ui.JBFont;
import ee.carlrobert.codegpt.Icons;
import ee.carlrobert.llm.client.openai.completion.chat.OpenAIChatCompletionModel;
import ee.carlrobert.llm.client.openai.completion.OpenAIChatCompletionModel;
import java.util.NoSuchElementException;
import javax.swing.SwingConstants;

View file

@ -13,7 +13,7 @@ import ee.carlrobert.codegpt.settings.service.ServiceType;
import ee.carlrobert.codegpt.settings.state.LlamaSettingsState;
import ee.carlrobert.codegpt.settings.state.OpenAISettingsState;
import ee.carlrobert.codegpt.settings.state.SettingsState;
import ee.carlrobert.llm.client.openai.completion.chat.OpenAIChatCompletionModel;
import ee.carlrobert.llm.client.openai.completion.OpenAIChatCompletionModel;
import java.util.List;
import javax.swing.Icon;
import javax.swing.JComponent;