mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
完善配置加载逻辑.
- 在 AgentRegisterContext 中新增对应的配置字段,供后续与模块协同检验 - 调整 ActivateModel 接口中的 modelSettings 实现逻辑 - 可以通过 ConfigLoaderFactory 提供的静态方法设置所需的配置管理类,并提供加载逻辑实现 - 为 ModelConfigManager 提供了默认的实现,从运行目录下加载模型配置与模块对应的提示词 - 实现了 ModelConfigManager 中的初步检验,检测是否存在默认模型配置与基础提示词,以及是否存在多余的模型配置。 - 新增了两个实体类,对应从文件加载的原始配置、提示词数据。
This commit is contained in:
@@ -2,10 +2,10 @@ package work.slhaf.partner.api.factory;
|
|||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import work.slhaf.partner.api.entity.AgentContext;
|
import work.slhaf.partner.api.entity.AgentContext;
|
||||||
import work.slhaf.partner.api.factory.config.ConfigLoaderFactory;
|
|
||||||
import work.slhaf.partner.api.factory.entity.AgentRegisterContext;
|
|
||||||
import work.slhaf.partner.api.factory.capability.CapabilityCheckFactory;
|
import work.slhaf.partner.api.factory.capability.CapabilityCheckFactory;
|
||||||
import work.slhaf.partner.api.factory.capability.CapabilityRegisterFactory;
|
import work.slhaf.partner.api.factory.capability.CapabilityRegisterFactory;
|
||||||
|
import work.slhaf.partner.api.factory.config.ConfigLoaderFactory;
|
||||||
|
import work.slhaf.partner.api.factory.entity.AgentRegisterContext;
|
||||||
import work.slhaf.partner.api.factory.module.ModuleCheckFactory;
|
import work.slhaf.partner.api.factory.module.ModuleCheckFactory;
|
||||||
import work.slhaf.partner.api.factory.module.ModuleRegisterFactory;
|
import work.slhaf.partner.api.factory.module.ModuleRegisterFactory;
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
package work.slhaf.partner.api.factory.capability;
|
package work.slhaf.partner.api.factory.capability;
|
||||||
|
|
||||||
import org.reflections.Reflections;
|
import org.reflections.Reflections;
|
||||||
import work.slhaf.partner.api.factory.entity.AgentBaseFactory;
|
|
||||||
import work.slhaf.partner.api.factory.entity.AgentRegisterContext;
|
|
||||||
import work.slhaf.partner.api.common.util.AgentUtil;
|
import work.slhaf.partner.api.common.util.AgentUtil;
|
||||||
import work.slhaf.partner.api.factory.capability.annotation.*;
|
import work.slhaf.partner.api.factory.capability.annotation.*;
|
||||||
import work.slhaf.partner.api.factory.capability.exception.DuplicateCapabilityException;
|
import work.slhaf.partner.api.factory.capability.exception.DuplicateCapabilityException;
|
||||||
import work.slhaf.partner.api.factory.capability.exception.UnMatchedCapabilityException;
|
import work.slhaf.partner.api.factory.capability.exception.UnMatchedCapabilityException;
|
||||||
import work.slhaf.partner.api.factory.capability.exception.UnMatchedCapabilityMethodException;
|
import work.slhaf.partner.api.factory.capability.exception.UnMatchedCapabilityMethodException;
|
||||||
import work.slhaf.partner.api.factory.capability.exception.UnMatchedCoordinatedMethodException;
|
import work.slhaf.partner.api.factory.capability.exception.UnMatchedCoordinatedMethodException;
|
||||||
|
import work.slhaf.partner.api.factory.entity.AgentBaseFactory;
|
||||||
|
import work.slhaf.partner.api.factory.entity.AgentRegisterContext;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package work.slhaf.partner.api.factory.capability;
|
package work.slhaf.partner.api.factory.capability;
|
||||||
|
|
||||||
import org.reflections.Reflections;
|
import org.reflections.Reflections;
|
||||||
import work.slhaf.partner.api.factory.entity.AgentBaseFactory;
|
|
||||||
import work.slhaf.partner.api.factory.entity.AgentRegisterContext;
|
|
||||||
import work.slhaf.partner.api.factory.capability.annotation.Capability;
|
import work.slhaf.partner.api.factory.capability.annotation.Capability;
|
||||||
import work.slhaf.partner.api.factory.capability.annotation.InjectCapability;
|
import work.slhaf.partner.api.factory.capability.annotation.InjectCapability;
|
||||||
import work.slhaf.partner.api.factory.capability.annotation.ToCoordinated;
|
import work.slhaf.partner.api.factory.capability.annotation.ToCoordinated;
|
||||||
import work.slhaf.partner.api.factory.capability.exception.ProxySetFailedExceptionCapability;
|
import work.slhaf.partner.api.factory.capability.exception.ProxySetFailedExceptionCapability;
|
||||||
|
import work.slhaf.partner.api.factory.entity.AgentBaseFactory;
|
||||||
|
import work.slhaf.partner.api.factory.entity.AgentRegisterContext;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Proxy;
|
import java.lang.reflect.Proxy;
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package work.slhaf.partner.api.factory.capability;
|
package work.slhaf.partner.api.factory.capability;
|
||||||
|
|
||||||
import org.reflections.Reflections;
|
import org.reflections.Reflections;
|
||||||
import work.slhaf.partner.api.factory.entity.AgentBaseFactory;
|
|
||||||
import work.slhaf.partner.api.factory.entity.AgentRegisterContext;
|
|
||||||
import work.slhaf.partner.api.factory.capability.annotation.*;
|
import work.slhaf.partner.api.factory.capability.annotation.*;
|
||||||
|
import work.slhaf.partner.api.factory.capability.exception.CapabilityFactoryExecuteFailedException;
|
||||||
import work.slhaf.partner.api.factory.capability.exception.CoreInstancesCreateFailedExceptionCapability;
|
import work.slhaf.partner.api.factory.capability.exception.CoreInstancesCreateFailedExceptionCapability;
|
||||||
import work.slhaf.partner.api.factory.capability.exception.DuplicateMethodException;
|
import work.slhaf.partner.api.factory.capability.exception.DuplicateMethodException;
|
||||||
import work.slhaf.partner.api.factory.capability.exception.CapabilityFactoryExecuteFailedException;
|
import work.slhaf.partner.api.factory.entity.AgentBaseFactory;
|
||||||
|
import work.slhaf.partner.api.factory.entity.AgentRegisterContext;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|||||||
@@ -1,22 +1,33 @@
|
|||||||
package work.slhaf.partner.api.factory.config;
|
package work.slhaf.partner.api.factory.config;
|
||||||
|
|
||||||
|
import lombok.Setter;
|
||||||
|
import work.slhaf.partner.api.common.chat.pojo.Message;
|
||||||
|
import work.slhaf.partner.api.factory.config.pojo.ModelConfig;
|
||||||
import work.slhaf.partner.api.factory.entity.AgentBaseFactory;
|
import work.slhaf.partner.api.factory.entity.AgentBaseFactory;
|
||||||
import work.slhaf.partner.api.factory.entity.AgentRegisterContext;
|
import work.slhaf.partner.api.factory.entity.AgentRegisterContext;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class ConfigLoaderFactory extends AgentBaseFactory {
|
public class ConfigLoaderFactory extends AgentBaseFactory {
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
private static ModelConfigManager modelConfigManager = new DefaultModelConfigManager();
|
||||||
|
private HashMap<String, ModelConfig> modelConfigMap;
|
||||||
|
private HashMap<String, List<Message>> modelPromptMap;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setVariables(AgentRegisterContext context) {
|
protected void setVariables(AgentRegisterContext context) {
|
||||||
|
modelConfigMap = context.getModelConfigMap();
|
||||||
|
modelPromptMap = context.getModelPromptMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void run() {
|
protected void run() {
|
||||||
//反射获取是否存在其他的ModelConfigFactory子类,如果存在,则不使用默认配置工厂
|
modelConfigManager.load();
|
||||||
ModelConfigFactory factory;
|
modelConfigManager.check();
|
||||||
if (){
|
modelConfigMap.putAll(modelConfigManager.getModelConfigMap());
|
||||||
|
modelPromptMap.putAll(modelConfigManager.getModelPromptMap());
|
||||||
}
|
|
||||||
factory.load();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
package work.slhaf.partner.api.factory.config;
|
|
||||||
|
|
||||||
import work.slhaf.partner.api.common.chat.pojo.Message;
|
|
||||||
import work.slhaf.partner.api.factory.config.pojo.ModelConfig;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 默认配置工厂
|
|
||||||
* 将从当前运行目录的config文件夹下创建并读取配置
|
|
||||||
*/
|
|
||||||
public class DefaultModelConfigFactory extends ModelConfigFactory {
|
|
||||||
|
|
||||||
private static final String MODEL_CONFIG_DIR = "./config/model/";
|
|
||||||
private static final String PROMPT_CONFIG_DIR = "./config/prompt/";
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected HashMap<String, List<Message>> loadPrompt() {
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected HashMap<String, ModelConfig> loadConfig() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
package work.slhaf.partner.api.factory.config;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import work.slhaf.partner.api.common.chat.pojo.Message;
|
||||||
|
import work.slhaf.partner.api.factory.config.exception.ModelConfigDirNotExistException;
|
||||||
|
import work.slhaf.partner.api.factory.config.exception.ModelConfigNotExistException;
|
||||||
|
import work.slhaf.partner.api.factory.config.exception.ModelPromptDirNotExistException;
|
||||||
|
import work.slhaf.partner.api.factory.config.exception.ModelPromptNotExistException;
|
||||||
|
import work.slhaf.partner.api.factory.config.pojo.ModelConfig;
|
||||||
|
import work.slhaf.partner.api.factory.config.pojo.PrimaryModelConfig;
|
||||||
|
import work.slhaf.partner.api.factory.config.pojo.PrimaryModelPrompt;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认配置工厂
|
||||||
|
* 将从当前运行目录的config文件夹下创建并读取配置
|
||||||
|
*/
|
||||||
|
public class DefaultModelConfigManager extends ModelConfigManager {
|
||||||
|
|
||||||
|
private static final String MODEL_CONFIG_DIR = "./config/model/";
|
||||||
|
private static final String PROMPT_CONFIG_DIR = "./config/prompt/";
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected HashMap<String, List<Message>> loadPrompt() {
|
||||||
|
File file = new File(PROMPT_CONFIG_DIR);
|
||||||
|
if (!file.exists() && !file.isDirectory()) {
|
||||||
|
throw new ModelPromptDirNotExistException("未找到提示词目录: " + PROMPT_CONFIG_DIR + " 请手动创建!");
|
||||||
|
}
|
||||||
|
File[] files = file.listFiles();
|
||||||
|
if (files == null || files.length == 0) {
|
||||||
|
throw new ModelPromptNotExistException("在目录 " + PROMPT_CONFIG_DIR + " 中未找到提示词配置!");
|
||||||
|
}
|
||||||
|
HashMap<String, List<Message>> promptMap = new HashMap<>();
|
||||||
|
for (File f : files) {
|
||||||
|
if (f.isDirectory()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
PrimaryModelPrompt primaryModelPrompt = JSONUtil.readJSONObject(f, StandardCharsets.UTF_8).toBean(PrimaryModelPrompt.class);
|
||||||
|
promptMap.put(primaryModelPrompt.getKey(), primaryModelPrompt.getMessages());
|
||||||
|
}
|
||||||
|
return promptMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected HashMap<String, ModelConfig> loadConfig() {
|
||||||
|
File file = new File(MODEL_CONFIG_DIR);
|
||||||
|
if (!file.exists() || !file.isDirectory()) {
|
||||||
|
throw new ModelConfigDirNotExistException("未找到配置目录: " + MODEL_CONFIG_DIR + " 请手动创建!");
|
||||||
|
}
|
||||||
|
File[] files = file.listFiles();
|
||||||
|
if (files == null || files.length == 0) {
|
||||||
|
throw new ModelConfigNotExistException("在目录" + MODEL_CONFIG_DIR + "中未找到配置文件!");
|
||||||
|
}
|
||||||
|
//遍历文件获取所有配置文件并返回
|
||||||
|
HashMap<String, ModelConfig> configMap = new HashMap<>();
|
||||||
|
for (File f : files) {
|
||||||
|
if (f.isDirectory()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
PrimaryModelConfig primaryModelConfig = JSONUtil.readJSONObject(f, StandardCharsets.UTF_8).toBean(PrimaryModelConfig.class);
|
||||||
|
configMap.put(primaryModelConfig.getKey(), primaryModelConfig.getModelConfig());
|
||||||
|
}
|
||||||
|
return configMap;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
package work.slhaf.partner.api.factory.config;
|
|
||||||
|
|
||||||
import work.slhaf.partner.api.common.chat.pojo.Message;
|
|
||||||
import work.slhaf.partner.api.factory.config.exception.UnExistModelConfigException;
|
|
||||||
import work.slhaf.partner.api.factory.config.exception.UnExistModelPromptException;
|
|
||||||
import work.slhaf.partner.api.factory.config.pojo.ModelConfig;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public abstract class ModelConfigFactory {
|
|
||||||
|
|
||||||
public static ModelConfigFactory factory;
|
|
||||||
protected HashMap<String, ModelConfig> modelConfigMap;
|
|
||||||
protected HashMap<String, List<Message>> modelPromptMap;
|
|
||||||
|
|
||||||
public ModelConfigFactory() {
|
|
||||||
factory = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void load() {
|
|
||||||
modelConfigMap = loadConfig();
|
|
||||||
modelPromptMap = loadPrompt();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract HashMap<String, List<Message>> loadPrompt();
|
|
||||||
|
|
||||||
protected abstract HashMap<String, ModelConfig> loadConfig();
|
|
||||||
|
|
||||||
|
|
||||||
public List<Message> loadModelPrompt(String modelKey){
|
|
||||||
if (!modelPromptMap.containsKey(modelKey)){
|
|
||||||
throw new UnExistModelPromptException("不存在的modelPrompt: "+modelKey);
|
|
||||||
}
|
|
||||||
return modelPromptMap.get(modelKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ModelConfig loadModelConfig(String modelKey) {
|
|
||||||
if (!modelConfigMap.containsKey(modelKey)) {
|
|
||||||
throw new UnExistModelConfigException("不存在的modelKey: " + modelKey);
|
|
||||||
}
|
|
||||||
return modelConfigMap.get(modelKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateModelConfig(String modelKey, ModelConfig config) {
|
|
||||||
if (!modelConfigMap.containsKey(modelKey)) {
|
|
||||||
throw new UnExistModelConfigException("不存在的modelKey: " + modelKey);
|
|
||||||
}
|
|
||||||
modelConfigMap.get(modelKey).setModel(config.getModel());
|
|
||||||
modelConfigMap.get(modelKey).setBaseUrl(config.getBaseUrl());
|
|
||||||
modelConfigMap.get(modelKey).setApikey(config.getApikey());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
package work.slhaf.partner.api.factory.config;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import work.slhaf.partner.api.common.chat.pojo.Message;
|
||||||
|
import work.slhaf.partner.api.factory.config.exception.ModelConfigNotExistException;
|
||||||
|
import work.slhaf.partner.api.factory.config.exception.ModelPromptNotExistException;
|
||||||
|
import work.slhaf.partner.api.factory.config.pojo.ModelConfig;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public abstract class ModelConfigManager {
|
||||||
|
|
||||||
|
public static ModelConfigManager INSTANCE;
|
||||||
|
@Getter
|
||||||
|
protected HashMap<String, ModelConfig> modelConfigMap;
|
||||||
|
@Getter
|
||||||
|
protected HashMap<String, List<Message>> modelPromptMap;
|
||||||
|
|
||||||
|
protected ModelConfigManager() {
|
||||||
|
INSTANCE = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void load() {
|
||||||
|
modelConfigMap = loadConfig();
|
||||||
|
modelPromptMap = loadPrompt();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract HashMap<String, List<Message>> loadPrompt();
|
||||||
|
|
||||||
|
protected abstract HashMap<String, ModelConfig> loadConfig();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对模型Config与Prompt分别进行检验,除了都必须包含default外,还需要确保数量、key一致,毕竟是模型配置与提示词
|
||||||
|
*/
|
||||||
|
public void check(){
|
||||||
|
log.info("[ModelConfigManager]: 执行config与prompt检测...");
|
||||||
|
if (!modelConfigMap.containsKey("default")){
|
||||||
|
throw new ModelConfigNotExistException("缺少默认配置! 需确保存在一个模型配置的key为`default`");
|
||||||
|
}
|
||||||
|
if (!modelPromptMap.containsKey("basic")){
|
||||||
|
throw new ModelPromptNotExistException("缺少基础Prompt! 需要确保存在key为basic的Prompt文件,它将与其他Prompt共同作用于模块节点。");
|
||||||
|
}
|
||||||
|
Set<String> configKeySet = new HashSet<>(modelConfigMap.keySet());
|
||||||
|
configKeySet.remove("default");
|
||||||
|
Set<String> promptKeySet = new HashSet<>(modelPromptMap.keySet());
|
||||||
|
promptKeySet.remove("basic");
|
||||||
|
if (!promptKeySet.containsAll(configKeySet)){
|
||||||
|
log.warn("存在未被提示词包含的模型配置,该配置将无法生效!");
|
||||||
|
}
|
||||||
|
log.info("[ModelConfigManager]: 检测完毕.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public List<Message> loadModelPrompt(String modelKey){
|
||||||
|
if (!modelPromptMap.containsKey(modelKey)){
|
||||||
|
throw new ModelPromptNotExistException("不存在的modelPrompt: "+modelKey);
|
||||||
|
}
|
||||||
|
return modelPromptMap.get(modelKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModelConfig loadModelConfig(String modelKey) {
|
||||||
|
if (!modelConfigMap.containsKey(modelKey)) {
|
||||||
|
throw new ModelConfigNotExistException("不存在的modelKey: " + modelKey);
|
||||||
|
}
|
||||||
|
return modelConfigMap.get(modelKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateModelConfig(String modelKey, ModelConfig config) {
|
||||||
|
if (!modelConfigMap.containsKey(modelKey)) {
|
||||||
|
throw new ModelConfigNotExistException("不存在的modelKey: " + modelKey);
|
||||||
|
}
|
||||||
|
modelConfigMap.get(modelKey).setModel(config.getModel());
|
||||||
|
modelConfigMap.get(modelKey).setBaseUrl(config.getBaseUrl());
|
||||||
|
modelConfigMap.get(modelKey).setApikey(config.getApikey());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package work.slhaf.partner.api.factory.config.exception;
|
||||||
|
|
||||||
|
public class ModelConfigDirNotExistException extends ModelConfigFactoryFailedException{
|
||||||
|
public ModelConfigDirNotExistException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModelConfigDirNotExistException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,10 +2,10 @@ package work.slhaf.partner.api.factory.config.exception;
|
|||||||
|
|
||||||
public class ModelConfigFactoryFailedException extends RuntimeException {
|
public class ModelConfigFactoryFailedException extends RuntimeException {
|
||||||
public ModelConfigFactoryFailedException(String message, Throwable cause) {
|
public ModelConfigFactoryFailedException(String message, Throwable cause) {
|
||||||
super("ModelConfigFactory 执行失败: " + message, cause);
|
super("ModelConfigManager 执行失败: " + message, cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ModelConfigFactoryFailedException(String message) {
|
public ModelConfigFactoryFailedException(String message) {
|
||||||
super("ModelConfigFactory 执行失败: " + message);
|
super("ModelConfigManager 执行失败: " + message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package work.slhaf.partner.api.factory.config.exception;
|
||||||
|
|
||||||
|
public class ModelConfigNotExistException extends ModelConfigFactoryFailedException {
|
||||||
|
public ModelConfigNotExistException(String message, Throwable e) {
|
||||||
|
super(message, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModelConfigNotExistException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package work.slhaf.partner.api.factory.config.exception;
|
||||||
|
|
||||||
|
public class ModelPromptDirNotExistException extends ModelConfigFactoryFailedException{
|
||||||
|
public ModelPromptDirNotExistException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModelPromptDirNotExistException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package work.slhaf.partner.api.factory.config.exception;
|
||||||
|
|
||||||
|
public class ModelPromptNotExistException extends ModelConfigFactoryFailedException{
|
||||||
|
public ModelPromptNotExistException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModelPromptNotExistException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
package work.slhaf.partner.api.factory.config.exception;
|
|
||||||
|
|
||||||
public class UnExistModelConfigException extends ModelConfigFactoryFailedException {
|
|
||||||
public UnExistModelConfigException(String message, Throwable e) {
|
|
||||||
super(message, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnExistModelConfigException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
package work.slhaf.partner.api.factory.config.exception;
|
|
||||||
|
|
||||||
public class UnExistModelPromptException extends ModelConfigFactoryFailedException{
|
|
||||||
public UnExistModelPromptException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public UnExistModelPromptException(String message, Throwable cause) {
|
|
||||||
super(message, cause);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package work.slhaf.partner.api.factory.config.pojo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PrimaryModelConfig {
|
||||||
|
private String key;
|
||||||
|
private ModelConfig modelConfig;
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package work.slhaf.partner.api.factory.config.pojo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import work.slhaf.partner.api.common.chat.pojo.Message;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PrimaryModelPrompt {
|
||||||
|
private String key;
|
||||||
|
private List<Message> messages;
|
||||||
|
}
|
||||||
@@ -2,8 +2,11 @@ package work.slhaf.partner.api.factory.entity;
|
|||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.reflections.Reflections;
|
import org.reflections.Reflections;
|
||||||
|
import work.slhaf.partner.api.common.chat.pojo.Message;
|
||||||
|
import work.slhaf.partner.api.factory.config.pojo.ModelConfig;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
@@ -16,6 +19,8 @@ public class AgentRegisterContext {
|
|||||||
private final HashMap<Class<?>, Object> capabilityHolderInstances = new HashMap<>();
|
private final HashMap<Class<?>, Object> capabilityHolderInstances = new HashMap<>();
|
||||||
private Set<Class<?>> cores;
|
private Set<Class<?>> cores;
|
||||||
private Set<Class<?>> capabilities;
|
private Set<Class<?>> capabilities;
|
||||||
|
private HashMap<String, List<Message>> modelPromptMap = new HashMap<>();
|
||||||
|
private HashMap<String, ModelConfig> modelConfigMap = new HashMap<>();
|
||||||
|
|
||||||
public AgentRegisterContext(String path) {
|
public AgentRegisterContext(String path) {
|
||||||
reflections = new Reflections(path);
|
reflections = new Reflections(path);
|
||||||
|
|||||||
@@ -13,5 +13,6 @@ public class ModuleCheckFactory extends AgentBaseFactory {
|
|||||||
protected void run() {
|
protected void run() {
|
||||||
//检查注解AgentModule所在类是否继承了AgentInteractionModule
|
//检查注解AgentModule所在类是否继承了AgentInteractionModule
|
||||||
//检查hook注解所在方法是否位于AgentInteractionModule子类/AgentInteractionSubModule子类/ActivateModel子类
|
//检查hook注解所在方法是否位于AgentInteractionModule子类/AgentInteractionSubModule子类/ActivateModel子类
|
||||||
|
//检查当前加载的模块数量、名称与prompt是否一致
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
package work.slhaf.partner.api.factory.module.annotation;
|
package work.slhaf.partner.api.factory.module.annotation;
|
||||||
|
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用于注解执行模块
|
* 用于注解执行模块
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import work.slhaf.partner.api.common.chat.Model;
|
|||||||
import work.slhaf.partner.api.common.chat.constant.ChatConstant;
|
import work.slhaf.partner.api.common.chat.constant.ChatConstant;
|
||||||
import work.slhaf.partner.api.common.chat.pojo.ChatResponse;
|
import work.slhaf.partner.api.common.chat.pojo.ChatResponse;
|
||||||
import work.slhaf.partner.api.common.chat.pojo.Message;
|
import work.slhaf.partner.api.common.chat.pojo.Message;
|
||||||
import work.slhaf.partner.api.factory.config.ModelConfigFactory;
|
import work.slhaf.partner.api.factory.config.ModelConfigManager;
|
||||||
import work.slhaf.partner.api.factory.config.pojo.ModelConfig;
|
import work.slhaf.partner.api.factory.config.pojo.ModelConfig;
|
||||||
import work.slhaf.partner.api.factory.module.annotation.Before;
|
import work.slhaf.partner.api.factory.module.annotation.Before;
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ public interface ActivateModel {
|
|||||||
@Before
|
@Before
|
||||||
default void modelSettings() {
|
default void modelSettings() {
|
||||||
Model model = new Model();
|
Model model = new Model();
|
||||||
ModelConfig modelConfig = ModelConfigFactory.factory.loadModelConfig(modelKey());
|
ModelConfig modelConfig = ModelConfigManager.INSTANCE.loadModelConfig(modelKey());
|
||||||
model.setBaseMessages(withBasicPrompt() ? loadSpecificPromptAndBasicPrompt(modelKey(), promptModule()) : loadSpecificPrompt(modelKey(), promptModule()));
|
model.setBaseMessages(withBasicPrompt() ? loadSpecificPromptAndBasicPrompt(modelKey(), promptModule()) : loadSpecificPrompt(modelKey(), promptModule()));
|
||||||
model.setChatClient(new ChatClient(modelConfig.getBaseUrl(), modelConfig.getApikey(), modelConfig.getModel()));
|
model.setChatClient(new ChatClient(modelConfig.getBaseUrl(), modelConfig.getApikey(), modelConfig.getModel()));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user