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 listEnabledModels() { List output = new ArrayList<>(); try { List 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; } }