package com.vincent.rsf.server.ai.service;
|
|
import com.vincent.rsf.server.ai.config.AiProperties;
|
import com.vincent.rsf.server.system.entity.AiParam;
|
import com.vincent.rsf.server.system.service.AiParamService;
|
import lombok.Data;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
@Service
|
public class AiRuntimeConfigService {
|
|
@Resource
|
private AiProperties aiProperties;
|
@Resource
|
private AiParamService aiParamService;
|
|
public List<ModelRuntimeConfig> listEnabledModels() {
|
List<ModelRuntimeConfig> output = new ArrayList<>();
|
try {
|
List<AiParam> list = aiParamService.listEnabledModels();
|
for (AiParam item : list) {
|
output.add(toRuntimeConfig(item));
|
}
|
} catch (Exception ignore) {
|
}
|
if (!output.isEmpty()) {
|
return output;
|
}
|
for (AiProperties.ModelConfig model : aiProperties.getEnabledModels()) {
|
ModelRuntimeConfig config = new ModelRuntimeConfig();
|
config.setCode(model.getCode());
|
config.setName(model.getName());
|
config.setProvider(model.getProvider());
|
config.setSystemPrompt(aiProperties.getSystemPrompt());
|
config.setMaxContextMessages(aiProperties.getMaxContextMessages());
|
config.setEnabled(model.getEnabled());
|
output.add(config);
|
}
|
return output;
|
}
|
|
public ModelRuntimeConfig resolveModel(String modelCode) {
|
try {
|
AiParam aiParam;
|
if (modelCode == null || modelCode.trim().isEmpty()) {
|
aiParam = aiParamService.getDefaultModel();
|
} else {
|
aiParam = aiParamService.getEnabledModel(modelCode);
|
}
|
if (aiParam != null) {
|
return toRuntimeConfig(aiParam);
|
}
|
} catch (Exception ignore) {
|
}
|
String targetCode = modelCode;
|
if (targetCode == null || targetCode.trim().isEmpty()) {
|
targetCode = aiProperties.resolveDefaultModelCode();
|
}
|
for (AiProperties.ModelConfig model : aiProperties.getEnabledModels()) {
|
if (targetCode.equals(model.getCode())) {
|
ModelRuntimeConfig config = new ModelRuntimeConfig();
|
config.setCode(model.getCode());
|
config.setName(model.getName());
|
config.setProvider(model.getProvider());
|
config.setSystemPrompt(aiProperties.getSystemPrompt());
|
config.setMaxContextMessages(aiProperties.getMaxContextMessages());
|
config.setEnabled(model.getEnabled());
|
return config;
|
}
|
}
|
ModelRuntimeConfig config = new ModelRuntimeConfig();
|
config.setCode(aiProperties.resolveDefaultModelCode());
|
config.setName(aiProperties.resolveDefaultModelCode());
|
config.setProvider("mock");
|
config.setSystemPrompt(aiProperties.getSystemPrompt());
|
config.setMaxContextMessages(aiProperties.getMaxContextMessages());
|
config.setEnabled(true);
|
return config;
|
}
|
|
public String resolveDefaultModelCode() {
|
return resolveModel(null).getCode();
|
}
|
|
private ModelRuntimeConfig toRuntimeConfig(AiParam aiParam) {
|
ModelRuntimeConfig config = new ModelRuntimeConfig();
|
config.setCode(aiParam.getModelCode());
|
config.setName(aiParam.getName());
|
config.setProvider(aiParam.getProvider());
|
config.setChatUrl(aiParam.getChatUrl());
|
config.setApiKey(aiParam.getApiKey());
|
config.setModelName(aiParam.getModelName());
|
config.setSystemPrompt(aiParam.getSystemPrompt() == null || aiParam.getSystemPrompt().trim().isEmpty()
|
? aiProperties.getSystemPrompt()
|
: aiParam.getSystemPrompt());
|
config.setMaxContextMessages(aiParam.getMaxContextMessages() == null || aiParam.getMaxContextMessages() <= 0
|
? aiProperties.getMaxContextMessages()
|
: aiParam.getMaxContextMessages());
|
config.setEnabled(Integer.valueOf(1).equals(aiParam.getStatus()));
|
return config;
|
}
|
|
@Data
|
public static class ModelRuntimeConfig {
|
private String code;
|
private String name;
|
private String provider;
|
private String chatUrl;
|
private String apiKey;
|
private String modelName;
|
private String systemPrompt;
|
private Integer maxContextMessages;
|
private Boolean enabled;
|
}
|
}
|