From 520fb0d3b2c9b8a7881bcc00a4003eb84630c1aa Mon Sep 17 00:00:00 2001 From: robin <850379744@qq.com> Date: Thu, 2 Nov 2023 16:55:34 +0800 Subject: [PATCH] chat2db add model --- .../chat2db/client/Chat2DBAIStreamClient.java | 3 +- .../ai/chat2db/client/Chat2dbAIClient.java | 11 ++++- ...Chat2dbHeaderAuthorizationInterceptor.java | 46 +++++++++++++++++++ .../controller/config/ConfigController.java | 5 ++ 4 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/chat2db/interceptor/Chat2dbHeaderAuthorizationInterceptor.java diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/chat2db/client/Chat2DBAIStreamClient.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/chat2db/client/Chat2DBAIStreamClient.java index b2b5d377..1f63d4ab 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/chat2db/client/Chat2DBAIStreamClient.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/chat2db/client/Chat2DBAIStreamClient.java @@ -1,6 +1,7 @@ package ai.chat2db.server.web.api.controller.ai.chat2db.client; import ai.chat2db.server.tools.common.exception.ParamBusinessException; +import ai.chat2db.server.web.api.controller.ai.chat2db.interceptor.Chat2dbHeaderAuthorizationInterceptor; import ai.chat2db.server.web.api.controller.ai.fastchat.client.FastChatOpenAiApi; import ai.chat2db.server.web.api.controller.ai.fastchat.embeddings.FastChatEmbedding; import ai.chat2db.server.web.api.controller.ai.fastchat.embeddings.FastChatEmbeddingResponse; @@ -100,7 +101,7 @@ public class Chat2DBAIStreamClient { private OkHttpClient okHttpClient() { OkHttpClient okHttpClient = new OkHttpClient .Builder() - .addInterceptor(new HeaderAuthorizationInterceptor(Lists.newArrayList(this.apiKey))) + .addInterceptor(new Chat2dbHeaderAuthorizationInterceptor(this.apiKey, this.model)) .connectTimeout(50, TimeUnit.SECONDS) .writeTimeout(50, TimeUnit.SECONDS) .readTimeout(50, TimeUnit.SECONDS) diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/chat2db/client/Chat2dbAIClient.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/chat2db/client/Chat2dbAIClient.java index c73a4704..b3db9845 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/chat2db/client/Chat2dbAIClient.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/chat2db/client/Chat2dbAIClient.java @@ -24,6 +24,11 @@ public class Chat2dbAIClient { */ public static final String CHAT2DB_OPENAI_HOST = "chat2db.apiHost"; + /** + * OPENAI模型 + */ + public static final String CHAT2DB_OPENAI_MODEL = "chat2db.model"; + /** * FASTCHAT OPENAI embedding model */ @@ -68,9 +73,11 @@ public class Chat2dbAIClient { } else { apikey = ApplicationContextUtil.getProperty(CHAT2DB_OPENAI_KEY); } + Config modelConfig = configService.find(CHAT2DB_OPENAI_MODEL).getData(); + String model = modelConfig.getContent(); log.info("refresh chat2db apikey:{}", maskApiKey(apikey)); - CHAT2DB_AI_STREAM_CLIENT = Chat2DBAIStreamClient.builder().apiHost(apiHost).apiKey( - apikey).build(); + CHAT2DB_AI_STREAM_CLIENT = Chat2DBAIStreamClient.builder().apiHost(apiHost) + .apiKey(apikey).model(model).build(); } private static String maskApiKey(String input) { diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/chat2db/interceptor/Chat2dbHeaderAuthorizationInterceptor.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/chat2db/interceptor/Chat2dbHeaderAuthorizationInterceptor.java new file mode 100644 index 00000000..446a84a1 --- /dev/null +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/chat2db/interceptor/Chat2dbHeaderAuthorizationInterceptor.java @@ -0,0 +1,46 @@ +package ai.chat2db.server.web.api.controller.ai.chat2db.interceptor; + +import ai.chat2db.server.domain.api.enums.AiSqlSourceEnum; +import ai.chat2db.server.web.api.util.StringUtils; +import cn.hutool.http.ContentType; +import cn.hutool.http.Header; +import lombok.Getter; +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +import java.io.IOException; + +/** + * 描述:请求增加header apikey + * + * @author grt + * @since 2023-03-23 + */ +@Getter +public class Chat2dbHeaderAuthorizationInterceptor implements Interceptor { + + private String apiKey; + + private String model; + + public Chat2dbHeaderAuthorizationInterceptor(String apiKey, String model) { + this.apiKey = apiKey; + this.model = model; + if (StringUtils.isEmpty(model)) { + this.model = AiSqlSourceEnum.OPENAI.getCode(); + } + } + + @Override + public Response intercept(Chain chain) throws IOException { + Request original = chain.request(); + Request request = original.newBuilder() + .header(Header.AUTHORIZATION.getValue(), "Bearer " + apiKey) + .header("X-CHAT2DB-AI-TYPE", model) + .header(Header.CONTENT_TYPE.getValue(), ContentType.JSON.getValue()) + .method(original.method(), original.body()) + .build(); + return chain.proceed(request); + } +} diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/config/ConfigController.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/config/ConfigController.java index 66b683d4..fd07c3ec 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/config/ConfigController.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/config/ConfigController.java @@ -119,6 +119,9 @@ public class ConfigController { SystemConfigParam hostParam = SystemConfigParam.builder().code(Chat2dbAIClient.CHAT2DB_OPENAI_HOST).content( request.getApiHost()).build(); configService.createOrUpdate(hostParam); + SystemConfigParam modelParam = SystemConfigParam.builder().code(Chat2dbAIClient.CHAT2DB_OPENAI_MODEL).content( + request.getModel()).build(); + configService.createOrUpdate(modelParam); Chat2dbAIClient.refresh(); } @@ -312,9 +315,11 @@ public class ConfigController { case CHAT2DBAI: DataResult chat2dbApiKey = configService.find(Chat2dbAIClient.CHAT2DB_OPENAI_KEY); DataResult chat2dbApiHost = configService.find(Chat2dbAIClient.CHAT2DB_OPENAI_HOST); + DataResult chat2dbModel = configService.find(Chat2dbAIClient.CHAT2DB_OPENAI_MODEL); config.setApiKey(Objects.nonNull(chat2dbApiKey.getData()) ? chat2dbApiKey.getData().getContent() : ""); config.setApiHost( Objects.nonNull(chat2dbApiHost.getData()) ? chat2dbApiHost.getData().getContent() : ""); + config.setModel(Objects.nonNull(chat2dbModel.getData()) ? chat2dbModel.getData().getContent() : ""); break; case AZUREAI: DataResult azureApiKey = configService.find(AzureOpenAIClient.AZURE_CHATGPT_API_KEY);