mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
refactor(framework): remove module enabled-status loading and persistence from config loaders
This commit is contained in:
@@ -3,13 +3,12 @@ package work.slhaf.partner.api.agent.runtime.config;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import work.slhaf.partner.api.agent.factory.component.pojo.MetaModule;
|
|
||||||
import work.slhaf.partner.api.agent.factory.config.exception.ConfigUpdateFailedException;
|
|
||||||
import work.slhaf.partner.api.agent.factory.config.exception.PromptNotExistException;
|
import work.slhaf.partner.api.agent.factory.config.exception.PromptNotExistException;
|
||||||
import work.slhaf.partner.api.agent.factory.config.pojo.ModelConfig;
|
import work.slhaf.partner.api.agent.factory.config.pojo.ModelConfig;
|
||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Data
|
@Data
|
||||||
@@ -20,9 +19,6 @@ public abstract class AgentConfigLoader {
|
|||||||
public static AgentConfigLoader INSTANCE;
|
public static AgentConfigLoader INSTANCE;
|
||||||
protected HashMap<String, ModelConfig> modelConfigMap;
|
protected HashMap<String, ModelConfig> modelConfigMap;
|
||||||
protected HashMap<String, List<Message>> modelPromptMap;
|
protected HashMap<String, List<Message>> modelPromptMap;
|
||||||
protected HashMap<String, Boolean> moduleEnabledStatus;
|
|
||||||
protected Map<Integer, List<MetaModule>> moduleOrderedMap = new LinkedHashMap<>();
|
|
||||||
protected Map<String, MetaModule> moduleMap = new HashMap<>();
|
|
||||||
|
|
||||||
public void load() {
|
public void load() {
|
||||||
modelConfigMap = loadModelConfig();
|
modelConfigMap = loadModelConfig();
|
||||||
@@ -35,42 +31,6 @@ public abstract class AgentConfigLoader {
|
|||||||
|
|
||||||
public abstract void dumpModelConfig(String key);
|
public abstract void dumpModelConfig(String key);
|
||||||
|
|
||||||
protected abstract void dumpModuleEnabledStatus();
|
|
||||||
|
|
||||||
protected abstract HashMap<String, Boolean> loadModuleEnabledStatusMap(List<MetaModule> moduleList);
|
|
||||||
|
|
||||||
public void moduleEnabledStatusFilterAndRecord(List<MetaModule> moduleList) {
|
|
||||||
updateModuleMap(moduleList);
|
|
||||||
updateModuleEnabledStatus(moduleList);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateModuleMap(List<MetaModule> moduleList) {
|
|
||||||
//在ModuleRegisterFactory已进行过排序操作
|
|
||||||
for (MetaModule module : moduleList) {
|
|
||||||
int k = module.getOrder();
|
|
||||||
moduleOrderedMap.computeIfAbsent(k, order -> new ArrayList<>()).add(module);
|
|
||||||
moduleMap.put(module.getName(), module);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateModuleEnabledStatus(List<MetaModule> moduleList) {
|
|
||||||
this.moduleEnabledStatus = loadModuleEnabledStatusMap(moduleList);
|
|
||||||
|
|
||||||
boolean unmatch = false;
|
|
||||||
for (MetaModule metaModule : moduleList) {
|
|
||||||
String moduleName = metaModule.getName();
|
|
||||||
if (moduleEnabledStatus.containsKey(moduleName)) {
|
|
||||||
metaModule.setEnabled(moduleEnabledStatus.get(moduleName));
|
|
||||||
} else {
|
|
||||||
log.warn("缺少Module {} 启用配置! 将触发更新操作!", moduleName);
|
|
||||||
unmatch = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (unmatch) {
|
|
||||||
dumpModuleEnabledStatus();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Message> loadModelPrompt(String modelKey) {
|
public List<Message> loadModelPrompt(String modelKey) {
|
||||||
if (!modelPromptMap.containsKey(modelKey)) {
|
if (!modelPromptMap.containsKey(modelKey)) {
|
||||||
throw new PromptNotExistException("不存在的modelPrompt: " + modelKey);
|
throw new PromptNotExistException("不存在的modelPrompt: " + modelKey);
|
||||||
@@ -90,13 +50,4 @@ public abstract class AgentConfigLoader {
|
|||||||
dumpModelConfig(modelKey);
|
dumpModelConfig(modelKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateModuleEnabledStatus(String key, boolean status) {
|
|
||||||
if (!moduleEnabledStatus.containsKey(key)) {
|
|
||||||
throw new ConfigUpdateFailedException("模块状态更新失败! 不存在的ModuleKey: " + key);
|
|
||||||
}
|
|
||||||
moduleEnabledStatus.put(key, status);
|
|
||||||
dumpModuleEnabledStatus();
|
|
||||||
moduleMap.get(key).setEnabled(status);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
package work.slhaf.partner.api.agent.runtime.config;
|
package work.slhaf.partner.api.agent.runtime.config;
|
||||||
|
|
||||||
import cn.hutool.json.JSONObject;
|
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import work.slhaf.partner.api.agent.factory.component.pojo.MetaModule;
|
|
||||||
import work.slhaf.partner.api.agent.factory.config.exception.*;
|
import work.slhaf.partner.api.agent.factory.config.exception.*;
|
||||||
import work.slhaf.partner.api.agent.factory.config.pojo.ModelConfig;
|
import work.slhaf.partner.api.agent.factory.config.pojo.ModelConfig;
|
||||||
import work.slhaf.partner.api.agent.factory.config.pojo.PrimaryModelConfig;
|
import work.slhaf.partner.api.agent.factory.config.pojo.PrimaryModelConfig;
|
||||||
@@ -12,7 +10,6 @@ import work.slhaf.partner.api.agent.factory.config.pojo.PrimaryModelPrompt;
|
|||||||
import work.slhaf.partner.api.chat.pojo.Message;
|
import work.slhaf.partner.api.chat.pojo.Message;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -27,8 +24,6 @@ public class FileAgentConfigLoader extends AgentConfigLoader {
|
|||||||
protected static final String CONFIG_DIR = "./config/";
|
protected static final String CONFIG_DIR = "./config/";
|
||||||
protected static final String MODEL_CONFIG_DIR = "./config/model/";
|
protected static final String MODEL_CONFIG_DIR = "./config/model/";
|
||||||
protected static final String PROMPT_CONFIG_DIR = "./config/prompt/";
|
protected static final String PROMPT_CONFIG_DIR = "./config/prompt/";
|
||||||
protected static final String MODULE_ENABLED_STATUS_CONFIG_FILE = CONFIG_DIR + "module_enabled_status.json";
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected HashMap<String, List<Message>> loadModelPrompt() {
|
protected HashMap<String, List<Message>> loadModelPrompt() {
|
||||||
@@ -73,30 +68,6 @@ public class FileAgentConfigLoader extends AgentConfigLoader {
|
|||||||
return configMap;
|
return configMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected HashMap<String, Boolean> loadModuleEnabledStatusMap(List<MetaModule> moduleList) {
|
|
||||||
File file = new File(MODULE_ENABLED_STATUS_CONFIG_FILE);
|
|
||||||
try {
|
|
||||||
moduleEnabledStatus = new HashMap<>();
|
|
||||||
if (!file.exists()) {
|
|
||||||
file.createNewFile();
|
|
||||||
for (MetaModule module : moduleList) {
|
|
||||||
moduleEnabledStatus.put(module.getName(), module.isEnabled());
|
|
||||||
}
|
|
||||||
dumpModuleEnabledStatus();
|
|
||||||
} else {
|
|
||||||
JSONObject obj = JSONUtil.readJSONObject(file, StandardCharsets.UTF_8);
|
|
||||||
for (String s : obj.keySet()) {
|
|
||||||
moduleEnabledStatus.put(s, obj.getBool(s));
|
|
||||||
}
|
|
||||||
log.info("ModuleEnabledStatusConfig 配置文件已成功读取!");
|
|
||||||
}
|
|
||||||
return moduleEnabledStatus;
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new ConfigGenerateFailedException("ModuleEnabledStatusConfig 配置文件创建失败!", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void dumpModelConfig(String key) {
|
public void dumpModelConfig(String key) {
|
||||||
try {
|
try {
|
||||||
@@ -109,14 +80,4 @@ public class FileAgentConfigLoader extends AgentConfigLoader {
|
|||||||
throw new ConfigUpdateFailedException("ModelConfig 配置文件更新失败!");
|
throw new ConfigUpdateFailedException("ModelConfig 配置文件更新失败!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void dumpModuleEnabledStatus() {
|
|
||||||
try {
|
|
||||||
File file = new File(MODULE_ENABLED_STATUS_CONFIG_FILE);
|
|
||||||
FileUtils.writeStringToFile(file, JSONUtil.toJsonPrettyStr(moduleEnabledStatus), StandardCharsets.UTF_8, false);
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new ConfigGenerateFailedException("ModuleEnabledStatus 配置文件更新失败!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user