openai config update

This commit is contained in:
robin
2023-07-29 12:31:30 +08:00
parent 7f450a6527
commit ab7f427002
3 changed files with 270 additions and 2 deletions

View File

@ -4,6 +4,7 @@ package ai.chat2db.server.web.api.controller.config;
import java.util.Objects;
import ai.chat2db.server.domain.api.enums.AiSqlSourceEnum;
import ai.chat2db.server.domain.api.model.AIConfig;
import ai.chat2db.server.domain.api.model.ChatGptConfig;
import ai.chat2db.server.domain.api.model.Config;
import ai.chat2db.server.domain.api.param.SystemConfigParam;
@ -12,6 +13,7 @@ import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.web.api.aspect.ConnectionInfoAspect;
import ai.chat2db.server.web.api.controller.ai.azure.client.AzureOpenAIClient;
import ai.chat2db.server.web.api.controller.config.request.AIConfigCreateRequest;
import ai.chat2db.server.web.api.controller.config.request.AISystemConfigRequest;
import ai.chat2db.server.web.api.controller.config.request.SystemConfigRequest;
import ai.chat2db.server.web.api.util.OpenAIClient;
@ -24,6 +26,7 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
@ -50,13 +53,13 @@ public class ConfigController {
}
/**
* 保存ChatGPT相关配置
* save ai config
*
* @param request
* @return
*/
@PostMapping("/system_config/chatgpt")
public ActionResult addChatGptSystemConfig(@RequestBody AISystemConfigRequest request) {
public ActionResult addAiSystemConfig(@RequestBody AISystemConfigRequest request) {
String sqlSource = StringUtils.isNotBlank(request.getAiSqlSource()) ? request.getAiSqlSource()
: AiSqlSourceEnum.CHAT2DBAI.getCode();
AiSqlSourceEnum aiSqlSourceEnum = AiSqlSourceEnum.getByName(sqlSource);
@ -85,6 +88,110 @@ public class ConfigController {
return ActionResult.isSuccess();
}
/**
* 保存ChatGPT相关配置
*
* @param request
* @return
*/
@PostMapping("/system_config/ai")
public ActionResult addChatGptSystemConfig(@RequestBody AIConfigCreateRequest request) {
String sqlSource = request.getAiSqlSource();
AiSqlSourceEnum aiSqlSourceEnum = AiSqlSourceEnum.getByName(sqlSource);
if (Objects.isNull(aiSqlSourceEnum)) {
sqlSource = AiSqlSourceEnum.CHAT2DBAI.getCode();
aiSqlSourceEnum = AiSqlSourceEnum.CHAT2DBAI;
}
SystemConfigParam param = SystemConfigParam.builder().code(RestAIClient.AI_SQL_SOURCE).content(sqlSource)
.build();
configService.createOrUpdate(param);
switch (Objects.requireNonNull(aiSqlSourceEnum)) {
case OPENAI :
saveOpenAIConfig(request);
break;
case CHAT2DBAI:
saveChat2dbAIConfig(request);
break;
case RESTAI :
saveRestAIConfig(request);
break;
case AZUREAI :
saveAzureAIConfig(request);
break;
}
return ActionResult.isSuccess();
}
/**
* save chat2db ai config
*
* @param request
*/
private void saveChat2dbAIConfig(AIConfigCreateRequest request) {
SystemConfigParam param = SystemConfigParam.builder().code(OpenAIClient.OPENAI_KEY).content(
request.getApiKey()).build();
configService.createOrUpdate(param);
SystemConfigParam hostParam = SystemConfigParam.builder().code(OpenAIClient.OPENAI_HOST).content(
request.getApiHost()).build();
configService.createOrUpdate(hostParam);
OpenAIClient.refresh();
}
/**
* save open ai config
*
* @param request
*/
private void saveOpenAIConfig(AIConfigCreateRequest request) {
SystemConfigParam param = SystemConfigParam.builder().code(OpenAIClient.OPENAI_KEY).content(
request.getApiKey()).build();
configService.createOrUpdate(param);
SystemConfigParam hostParam = SystemConfigParam.builder().code(OpenAIClient.OPENAI_HOST).content(
request.getApiHost()).build();
configService.createOrUpdate(hostParam);
SystemConfigParam httpProxyHostParam = SystemConfigParam.builder().code(OpenAIClient.PROXY_HOST).content(
request.getHttpProxyHost()).build();
configService.createOrUpdate(httpProxyHostParam);
SystemConfigParam httpProxyPortParam = SystemConfigParam.builder().code(OpenAIClient.PROXY_PORT).content(
request.getHttpProxyPort()).build();
configService.createOrUpdate(httpProxyPortParam);
OpenAIClient.refresh();
}
/**
* save rest ai config
*
* @param request
*/
private void saveRestAIConfig(AIConfigCreateRequest request) {
SystemConfigParam restParam = SystemConfigParam.builder().code(RestAIClient.REST_AI_URL).content(
request.getApiHost()).build();
configService.createOrUpdate(restParam);
SystemConfigParam methodParam = SystemConfigParam.builder().code(RestAIClient.REST_AI_STREAM_OUT).content(
request.getStream().toString()).build();
configService.createOrUpdate(methodParam);
RestAIClient.refresh();
}
/**
* save azure config
*
* @param request
*/
private void saveAzureAIConfig(AIConfigCreateRequest request) {
SystemConfigParam apikeyParam = SystemConfigParam.builder().code(AzureOpenAIClient.AZURE_CHATGPT_API_KEY).content(
request.getApiKey()).build();
configService.createOrUpdate(apikeyParam);
SystemConfigParam endpointParam = SystemConfigParam.builder().code(AzureOpenAIClient.AZURE_CHATGPT_ENDPOINT).content(
request.getApiHost()).build();
configService.createOrUpdate(endpointParam);
SystemConfigParam modelParam = SystemConfigParam.builder().code(AzureOpenAIClient.AZURE_CHATGPT_DEPLOYMENT_ID).content(
request.getModel()).build();
configService.createOrUpdate(modelParam);
AzureOpenAIClient.refresh();
}
/**
* 保存OPENAI相关配置
*
@ -161,6 +268,65 @@ public class ConfigController {
return DataResult.of(result.getData());
}
/**
* 查询ChatGPT相关配置
*
* @return
*/
@GetMapping("/system_config/ai")
public DataResult<AIConfig> getChatAiSystemConfig(String aiSqlSource) {
if (StringUtils.isBlank(aiSqlSource)) {
DataResult<Config> dbSqlSource = configService.find(RestAIClient.AI_SQL_SOURCE);
if (Objects.nonNull(dbSqlSource.getData())) {
aiSqlSource = dbSqlSource.getData().getContent();
}
}
AIConfig config = new AIConfig();
AiSqlSourceEnum aiSqlSourceEnum = AiSqlSourceEnum.getByName(aiSqlSource);
if (Objects.isNull(aiSqlSourceEnum)) {
aiSqlSourceEnum = AiSqlSourceEnum.CHAT2DBAI;
aiSqlSource = AiSqlSourceEnum.CHAT2DBAI.getCode();
}
config.setAiSqlSource(aiSqlSource);
switch (Objects.requireNonNull(aiSqlSourceEnum)) {
case OPENAI :
DataResult<Config> apiKey = configService.find(OpenAIClient.OPENAI_KEY);
DataResult<Config> apiHost = configService.find(OpenAIClient.OPENAI_HOST);
DataResult<Config> httpProxyHost = configService.find(OpenAIClient.PROXY_HOST);
DataResult<Config> httpProxyPort = configService.find(OpenAIClient.PROXY_PORT);
config.setApiKey(Objects.nonNull(apiKey.getData()) ? apiKey.getData().getContent() : null);
config.setApiHost(Objects.nonNull(apiHost.getData()) ? apiHost.getData().getContent() : null);
config.setHttpProxyHost(Objects.nonNull(httpProxyHost.getData()) ? httpProxyHost.getData().getContent() : null);
config.setHttpProxyPort(Objects.nonNull(httpProxyPort.getData()) ? httpProxyPort.getData().getContent() : null);
break;
case CHAT2DBAI:
apiKey = configService.find(OpenAIClient.OPENAI_KEY);
apiHost = configService.find(OpenAIClient.OPENAI_HOST);
config.setApiKey(Objects.nonNull(apiKey.getData()) ? apiKey.getData().getContent() : null);
config.setApiHost(Objects.nonNull(apiHost.getData()) ? apiHost.getData().getContent() : null);
break;
case AZUREAI:
DataResult<Config> azureApiKey = configService.find(AzureOpenAIClient.AZURE_CHATGPT_API_KEY);
DataResult<Config> azureEndpoint = configService.find(AzureOpenAIClient.AZURE_CHATGPT_ENDPOINT);
DataResult<Config> azureDeployId = configService.find(AzureOpenAIClient.AZURE_CHATGPT_DEPLOYMENT_ID);
config.setApiKey(Objects.nonNull(azureApiKey.getData()) ? azureApiKey.getData().getContent() : null);
config.setApiHost(Objects.nonNull(azureEndpoint.getData()) ? azureEndpoint.getData().getContent() : null);
config.setModel(Objects.nonNull(azureDeployId.getData()) ? azureDeployId.getData().getContent() : null);
break;
case RESTAI:
DataResult<Config> restAiUrl = configService.find(RestAIClient.REST_AI_URL);
DataResult<Config> restAiHttpMethod = configService.find(RestAIClient.REST_AI_STREAM_OUT);
config.setApiHost(Objects.nonNull(restAiUrl.getData()) ? restAiUrl.getData().getContent() : null);
config.setStream(Objects.nonNull(restAiHttpMethod.getData()) ? Boolean.valueOf(
restAiHttpMethod.getData().getContent()) : Boolean.TRUE);
break;
default:
break;
}
return DataResult.of(config);
}
/**
* 查询ChatGPT相关配置
*

View File

@ -0,0 +1,51 @@
package ai.chat2db.server.web.api.controller.config.request;
import ai.chat2db.server.domain.api.enums.AiSqlSourceEnum;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* @author jipengfei
* @version : SystemConfigRequest.java
*/
@Data
public class AIConfigCreateRequest {
/**
* APIKEY
*/
private String apiKey;
/**
* APIHOST
*/
private String apiHost;
/**
* api http proxy host
*/
private String httpProxyHost;
/**
* api http proxy port
*/
private String httpProxyPort;
/**
* @see AiSqlSourceEnum
*/
@NotNull
private String aiSqlSource;
/**
* return data stream
* 非必填默认值为TRUE
*/
private Boolean stream = Boolean.TRUE;
/**
* deployed model, default gpt-3.5-turbo
*/
private String model;
}