chat2db add model

This commit is contained in:
robin
2023-11-02 16:55:34 +08:00
parent 1e835830bd
commit 520fb0d3b2
4 changed files with 62 additions and 3 deletions

View File

@ -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)

View File

@ -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) {

View File

@ -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);
}
}

View File

@ -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<Config> chat2dbApiKey = configService.find(Chat2dbAIClient.CHAT2DB_OPENAI_KEY);
DataResult<Config> chat2dbApiHost = configService.find(Chat2dbAIClient.CHAT2DB_OPENAI_HOST);
DataResult<Config> 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<Config> azureApiKey = configService.find(AzureOpenAIClient.AZURE_CHATGPT_API_KEY);