diff --git a/.idea/misc.xml b/.idea/misc.xml index c1c2d2d2..33abddf0 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,13 +1,16 @@ - + - - - + + + + + + diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/config/ConfigLoaderFactory.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/config/ConfigLoaderFactory.java index d3fb05d6..d406b76a 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/config/ConfigLoaderFactory.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/factory/config/ConfigLoaderFactory.java @@ -5,7 +5,7 @@ import work.slhaf.partner.api.agent.factory.config.pojo.ModelConfig; import work.slhaf.partner.api.agent.factory.context.AgentRegisterContext; import work.slhaf.partner.api.agent.factory.context.ConfigFactoryContext; import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager; -import work.slhaf.partner.api.agent.runtime.config.DefaultAgentConfigManager; +import work.slhaf.partner.api.agent.runtime.config.FileAgentConfigManager; import work.slhaf.partner.api.chat.pojo.Message; import java.util.HashMap; @@ -24,7 +24,7 @@ public class ConfigLoaderFactory extends AgentBaseFactory { modelPromptMap = factoryContext.getModelPromptMap(); if (AgentConfigManager.INSTANCE == null){ - AgentConfigManager.setINSTANCE(new DefaultAgentConfigManager()); + AgentConfigManager.setINSTANCE(new FileAgentConfigManager()); } agentConfigManager = AgentConfigManager.INSTANCE; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/DefaultAgentConfigManager.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/FileAgentConfigManager.java similarity index 92% rename from Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/DefaultAgentConfigManager.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/FileAgentConfigManager.java index 5f0bfe58..e11dc602 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/DefaultAgentConfigManager.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/config/FileAgentConfigManager.java @@ -22,12 +22,12 @@ import java.util.List; * 将从当前运行目录的config文件夹下创建并读取配置 */ @Slf4j -public class DefaultAgentConfigManager extends AgentConfigManager { +public class FileAgentConfigManager extends AgentConfigManager { - private static final String CONFIG_DIR = "./config/"; - private static final String MODEL_CONFIG_DIR = "./config/model/"; - private static final String PROMPT_CONFIG_DIR = "./config/prompt/"; - private static final String MODULE_ENABLED_STATUS_CONFIG_FILE = CONFIG_DIR + "module_enabled_status.json"; + protected static final String CONFIG_DIR = "./config/"; + protected static final String MODEL_CONFIG_DIR = "./config/model/"; + 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 diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/GlobalExceptionHandler.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/GlobalExceptionHandler.java index 73e83c24..b5fb92d7 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/GlobalExceptionHandler.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/GlobalExceptionHandler.java @@ -4,7 +4,7 @@ public class GlobalExceptionHandler { public static GlobalExceptionHandler INSTANCE = new GlobalExceptionHandler(); - private AgentExceptionCallback exceptionCallback = new DefaultAgentExceptionCallback(); + private AgentExceptionCallback exceptionCallback = new LogAgentExceptionCallback(); public void handle(Throwable e) { diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/DefaultAgentExceptionCallback.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/LogAgentExceptionCallback.java similarity index 80% rename from Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/DefaultAgentExceptionCallback.java rename to Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/LogAgentExceptionCallback.java index e76d3164..056650b5 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/DefaultAgentExceptionCallback.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/exception/LogAgentExceptionCallback.java @@ -3,7 +3,7 @@ package work.slhaf.partner.api.agent.runtime.exception; import lombok.extern.slf4j.Slf4j; @Slf4j -public class DefaultAgentExceptionCallback implements AgentExceptionCallback { +public class LogAgentExceptionCallback implements AgentExceptionCallback { @Override public void onRuntimeException(AgentRuntimeException e) { diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentGateway.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentGateway.java index 9f2d2977..7cae1699 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentGateway.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentGateway.java @@ -4,9 +4,23 @@ import work.slhaf.partner.api.agent.runtime.interaction.data.AgentInputData; import work.slhaf.partner.api.agent.runtime.interaction.data.AgentOutputData; import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.RunningFlowContext; -public interface AgentGateway { +public interface AgentGateway { void launch(); - AgentInteractionAdapter adapter(); + default void receive(I inputData){ + C finalInputData = adapter().parseInputData(inputData); + C outputContext = adapter().call(finalInputData); + O outputData = adapter().parseOutputData(outputContext); + send(outputData); + } + + void send(O outputData); + + /** + * 通过adapter提供的receive、send方法进行与客户端的交互行为 + * + * @return adapter实例 + */ + AgentInteractionAdapter adapter(); } diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.java index 6946e812..52bf595c 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/AgentInteractionAdapter.java @@ -11,31 +11,15 @@ import java.util.List; public abstract class AgentInteractionAdapter { - private static AgentInteractionAdapter INSTANCE; - protected AgentRunningFlow agentRunningFlow = new AgentRunningFlow<>(); protected List moduleList = AgentConfigManager.INSTANCE.getModuleList(); - public void receive(I inputData) { - C finalInputData = parseInputData(inputData); - C outputContext = agentRunningFlow.launch(moduleList, finalInputData); - O outputData = parseOutputData(outputContext); - send(outputData); + public C call(C finalInputData){ + return agentRunningFlow.launch(moduleList, finalInputData); } protected abstract O parseOutputData(C outputContext); protected abstract C parseInputData(I inputData); - public abstract void send(O outputData); - - public static AgentInteractionAdapter getInstance() { - @SuppressWarnings("unchecked") - AgentInteractionAdapter instance = (AgentInteractionAdapter) INSTANCE; - return instance; - } - - public static void setInstance(AgentInteractionAdapter instance) { - INSTANCE = instance; - } } diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/data/AgentOutputData.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/data/AgentOutputData.java index c3b8cbcb..95b6f50a 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/data/AgentOutputData.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/data/AgentOutputData.java @@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode; @Data public abstract class AgentOutputData extends InteractionData{ - private int code; + protected int code; public static class StatusCode { public static final int SUCCESS = 1; diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/AgentRunningFlow.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/AgentRunningFlow.java index a206856f..0bee1fd3 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/AgentRunningFlow.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/AgentRunningFlow.java @@ -17,8 +17,11 @@ public class AgentRunningFlow { for (MetaModule metaModule : moduleList) { metaModule.getInstance().execute(interactionContext); } + interactionContext.setOk(1); }catch (Exception e){ GlobalExceptionHandler.INSTANCE.handle(e); + interactionContext.setOk(0); + interactionContext.setErrMsg(e.getMessage()); } return interactionContext; } diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/ActivateModel.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/ActivateModel.java index 78f7d900..1c61d561 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/ActivateModel.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/ActivateModel.java @@ -17,7 +17,7 @@ public interface ActivateModel { AgentConfigManager AGENT_CONFIG_MANAGER = AgentConfigManager.INSTANCE; - @Init + @Init(order = -1) default void modelSettings() { Model model = new Model(); ModelConfig modelConfig = AgentConfigManager.INSTANCE.loadModelConfig(modelKey()); diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/AgentRunningModule.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/AgentRunningModule.java index 6ed3a7db..134ccae4 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/AgentRunningModule.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/AgentRunningModule.java @@ -2,9 +2,11 @@ package work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts; import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.RunningFlowContext; +import java.io.IOException; + /** * 流程执行模块基类 */ -public abstract class AgentRunningModule extends Module { - public abstract void execute(RunningFlowContext context); +public abstract class AgentRunningModule extends Module { + public abstract void execute(C context) throws IOException, ClassNotFoundException; } diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/AgentRunningSubModule.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/AgentRunningSubModule.java index 2278a835..6ca84847 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/AgentRunningSubModule.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/abstracts/AgentRunningSubModule.java @@ -3,6 +3,7 @@ package work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts; /** * 流程子模块基类 + * * @param 输入类型 * @param 输出类型 */ diff --git a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/entity/RunningFlowContext.java b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/entity/RunningFlowContext.java index 0fe991a4..0e47e639 100644 --- a/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/entity/RunningFlowContext.java +++ b/Partner-Api/src/main/java/work/slhaf/partner/api/agent/runtime/interaction/flow/entity/RunningFlowContext.java @@ -1,11 +1,15 @@ package work.slhaf.partner.api.agent.runtime.interaction.flow.entity; import lombok.Data; +import lombok.EqualsAndHashCode; +import work.slhaf.partner.api.common.entity.PersistableObject; /** * 流程上下文 */ +@EqualsAndHashCode(callSuper = true) @Data -public abstract class RunningFlowContext { - +public abstract class RunningFlowContext extends PersistableObject { + protected int ok; + protected String errMsg; } diff --git a/Partner-Main/src/main/java/work/slhaf/Main.java b/Partner-Main/src/main/java/work/slhaf/Main.java index 833d5fd8..c35c4178 100644 --- a/Partner-Main/src/main/java/work/slhaf/Main.java +++ b/Partner-Main/src/main/java/work/slhaf/Main.java @@ -1,14 +1,16 @@ package work.slhaf; -import work.slhaf.partner.Agent; - -import java.io.IOException; -import java.util.Scanner; +import work.slhaf.partner.api.agent.Agent; +import work.slhaf.partner.common.config.PartnerAgentConfigManager; +import work.slhaf.partner.runtime.exception.PartnerExceptionCallback; +import work.slhaf.partner.runtime.interaction.WebSocketGateway; public class Main { - public static void main(String[] args) throws IOException { - Agent.initialize(); - Scanner scanner = new Scanner(System.in); - while (!scanner.nextLine().equals("exit")) ; + public static void main(String[] args) { + Agent.newAgent(Main.class) + .setGateway(WebSocketGateway.initialize()) + .setAgentConfigManager(new PartnerAgentConfigManager()) + .setAgentExceptionCallback(new PartnerExceptionCallback()) + .launch(); } } \ No newline at end of file diff --git a/Partner-Main/src/main/java/work/slhaf/partner/Agent.java b/Partner-Main/src/main/java/work/slhaf/partner/Agent.java deleted file mode 100644 index fac47350..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/Agent.java +++ /dev/null @@ -1,75 +0,0 @@ -package work.slhaf.partner; - -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.common.config.Config; -import work.slhaf.partner.common.monitor.DebugMonitor; -import work.slhaf.partner.core.InteractionHub; -import work.slhaf.partner.core.interaction.agent_interface.InputReceiver; -import work.slhaf.partner.core.interaction.agent_interface.TaskCallback; -import work.slhaf.partner.core.interaction.data.InteractionInputData; -import work.slhaf.partner.core.interaction.data.InteractionOutputData; -import work.slhaf.partner.gateway.AgentWebSocketServer; -import work.slhaf.partner.gateway.MessageSender; - -import java.io.IOException; -import java.time.LocalDateTime; - -@Data -@Slf4j -public class Agent implements TaskCallback, InputReceiver { - - private static volatile Agent agent; - private InteractionHub interactionHub; - private MessageSender messageSender; - - public static void initialize() throws IOException { - if (agent == null) { - synchronized (Agent.class) { - if (agent == null) { - //加载配置 - Config config = Config.getConfig(); - agent = new Agent(); - agent.setInteractionHub(InteractionHub.initialize()); - agent.registerTaskCallback(); - AgentWebSocketServer server = new AgentWebSocketServer(config.getWebSocketConfig().getPort(), agent); - server.launch(); - agent.setMessageSender(server); - log.info("Agent 加载完毕.."); - //启动监测线程 - DebugMonitor.initialize(); - } - } - } - } - - public static Agent getInstance() throws IOException { - initialize(); - return agent; - } - - /** - * 接收用户输入,包装为标准输入数据类 - */ - public void receiveInput(InteractionInputData inputData) throws IOException, ClassNotFoundException { - inputData.setLocalDateTime(LocalDateTime.now()); - interactionHub.call(inputData); - } - - - /** - * 向用户返回输出内容 - */ - public void sendToUser(String userInfo, String output) { - messageSender.sendMessage(new InteractionOutputData(output, userInfo)); - } - - @Override - public void onTaskFinished(String userInfo, String output) { - sendToUser(userInfo, output); - } - - private void registerTaskCallback() { - interactionHub.setCallback(this); - } -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/config/Config.java b/Partner-Main/src/main/java/work/slhaf/partner/common/config/Config.java index 1724d843..0f37197d 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/config/Config.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/common/config/Config.java @@ -1,138 +1,9 @@ package work.slhaf.partner.common.config; -import cn.hutool.json.JSONUtil; -import com.alibaba.fastjson2.JSONArray; import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.io.FileUtils; -import work.slhaf.partner.module.modules.core.CoreModel; -import work.slhaf.partner.module.modules.memory.selector.MemorySelector; -import work.slhaf.partner.module.modules.memory.updater.MemoryUpdater; -import work.slhaf.partner.module.modules.process.PostprocessExecutor; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.List; -import java.util.Scanner; @Data -@Slf4j public class Config { - - private static final String CONFIG_FILE_PATH = "./config/config.json"; - private static final String LOG_FILE_PATH = "./data/log"; - private static Config config; - + private int port; private String agentId; -// private String basicCharacter; - - private WebSocketConfig webSocketConfig; - - private List moduleConfigList; - - private Config() { - } - - public static Config getConfig() throws IOException { - if (config == null) { - File file = new File(CONFIG_FILE_PATH); - if (file.exists()) { - config = JSONUtil.readJSONObject(file, StandardCharsets.UTF_8).toBean(Config.class); - } else { - config = new Config(); - Scanner scanner = new Scanner(System.in); - - System.out.print("输入智能体名称: "); - config.setAgentId(scanner.nextLine()); - - System.out.println("(注意! 设定角色之后修改主配置文件将不会影响现有记忆,除非同时更换agentId)"); - - System.out.println("\r\n--------模型配置--------\r\n"); - generateModelConfig(scanner); - - System.out.println("\r\n--------服务配置--------\r\n"); - generateWsSocketConfig(scanner); - - System.out.println("\r\n--------模块链配置--------\r\n"); - generatePipelineConfig(); - - boolean launchOrNot = getLaunchOrNot(scanner); - - //保存配置文件 - String str = JSONUtil.toJsonPrettyStr(config); - FileUtils.writeStringToFile(file, str, StandardCharsets.UTF_8); - log.info("配置已保存"); - - if (!launchOrNot) { - System.exit(0); - } - } - config.generateCommonDirs(); - } - return config; - } - - private void generateCommonDirs() throws IOException { - Files.createDirectories(Paths.get(LOG_FILE_PATH)); - } - - private static boolean getLaunchOrNot(Scanner scanner) { - System.out.print("是否直接启动Partner?(y/n): "); - String input; - while (true) { - input = scanner.nextLine(); - if (input.equals("y")) { - return true; - } else if (input.equals("n")) { - return false; - } else { - System.out.println("请输入y或n"); - } - } - } - - private static void generatePipelineConfig() { - List moduleConfigList = List.of( - new ModuleConfig(MemorySelector.class.getName(), ModuleConfig.Constant.INTERNAL, null), - new ModuleConfig(CoreModel.class.getName(), ModuleConfig.Constant.INTERNAL, null), - new ModuleConfig(PostprocessExecutor.class.getName(),ModuleConfig.Constant.INTERNAL,null), - new ModuleConfig(MemoryUpdater.class.getName(), ModuleConfig.Constant.INTERNAL, null) - ); - config.setModuleConfigList(moduleConfigList); - } - - private static void generateWsSocketConfig(Scanner scanner) { - System.out.print("WebSocket port: "); - WebSocketConfig wsConfig = new WebSocketConfig(); - wsConfig.setPort(scanner.nextInt()); - config.setWebSocketConfig(wsConfig); - } - - private static void generateModelConfig(Scanner scanner) throws IOException { - System.out.println("配置LLM APi:"); - System.out.println("经测试, 目前只建议选择Qwen3: qwen-plus-latest或qwen-max-latest"); - System.out.print("base_url: "); - String baseUrl = scanner.nextLine(); - System.out.print("apikey: "); - String apikey = scanner.nextLine(); - System.out.print("model: "); - String model = scanner.nextLine(); - - ModelConfig modelConfig = new ModelConfig(); - modelConfig.setBaseUrl(baseUrl); - modelConfig.setApikey(apikey); - modelConfig.setModel(model); - - InputStream stream = Config.class.getClassLoader().getResourceAsStream("modules/default_activated_model.json"); - String content = new String(stream.readAllBytes(), StandardCharsets.UTF_8); - stream.close(); - for (String s : JSONArray.parseArray(content, String.class)) { - modelConfig.generateConfig(s); - } - } - } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/config/ModelConfig.java b/Partner-Main/src/main/java/work/slhaf/partner/common/config/ModelConfig.java deleted file mode 100644 index 41b0e37f..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/config/ModelConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package work.slhaf.partner.common.config; - -import cn.hutool.json.JSONUtil; -import lombok.Data; -import org.apache.commons.io.FileUtils; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.HashMap; - -@Data -public class ModelConfig { - - private static final String MODEL_CONFIG_DIR_PATH = "./config/model/"; - private static final HashMap modelConfigMap = new HashMap<>(); - - private String apikey; - private String baseUrl; - private String model; - - public void generateConfig(String filename) throws IOException { - String str = JSONUtil.toJsonPrettyStr(this); - File file = new File(MODEL_CONFIG_DIR_PATH + filename + ".json"); - FileUtils.writeStringToFile(file, str, StandardCharsets.UTF_8); - } - - public static ModelConfig load(String modelKey) { - if (!modelConfigMap.containsKey(modelKey)) { - modelConfigMap.put(modelKey,loadConfig(modelKey)); - } - - return modelConfigMap.get(modelKey); - } - - private static ModelConfig loadConfig(String modelKey) { - File file = new File(MODEL_CONFIG_DIR_PATH+modelKey+".json"); - return JSONUtil.readJSONObject(file,StandardCharsets.UTF_8).toBean(ModelConfig.class); - } -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/config/ModuleConfig.java b/Partner-Main/src/main/java/work/slhaf/partner/common/config/ModuleConfig.java deleted file mode 100644 index db5304b5..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/config/ModuleConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package work.slhaf.partner.common.config; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class ModuleConfig { - private String className; - private String type; - private String path; - - public static class Constant { - public static final String INTERNAL = "internal"; - public static final String EXTERNAL = "external"; - } -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/config/PartnerAgentConfigManager.java b/Partner-Main/src/main/java/work/slhaf/partner/common/config/PartnerAgentConfigManager.java new file mode 100644 index 00000000..86f84375 --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/common/config/PartnerAgentConfigManager.java @@ -0,0 +1,40 @@ +package work.slhaf.partner.common.config; + +import cn.hutool.json.JSONUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; +import work.slhaf.partner.api.agent.factory.config.exception.ConfigNotExistException; +import work.slhaf.partner.api.agent.runtime.config.FileAgentConfigManager; +import work.slhaf.partner.common.exception.ConfigLoadFailedException; + +import java.io.File; +import java.nio.charset.StandardCharsets; + +@EqualsAndHashCode(callSuper = true) +@Data +public final class PartnerAgentConfigManager extends FileAgentConfigManager { + + private static final String COMMON_CONFIG_FILE = CONFIG_DIR + "common_config.json"; + + private Config config; + + @Override + public void load() { + loadWebSocketConfig(); + super.load(); + } + + private void loadWebSocketConfig() { + File file = new File(COMMON_CONFIG_FILE); + if (!file.exists()) { + throw new ConfigNotExistException("Partner Config Not Exist: " + COMMON_CONFIG_FILE); + } + config = JSONUtil.readJSONObject(file, StandardCharsets.UTF_8).toBean(Config.class); + if (config == null || config.getAgentId() == null) { + throw new ConfigLoadFailedException("Partner Config Load Failed: " + COMMON_CONFIG_FILE); + } + if (config.getPort() <= 0 || config.getPort() > 65535) { + throw new ConfigLoadFailedException("Invalid Websocket port: " + config.getPort()); + } + } +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/config/WebSocketConfig.java b/Partner-Main/src/main/java/work/slhaf/partner/common/config/WebSocketConfig.java deleted file mode 100644 index e1821684..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/config/WebSocketConfig.java +++ /dev/null @@ -1,8 +0,0 @@ -package work.slhaf.partner.common.config; - -import lombok.Data; - -@Data -public class WebSocketConfig { - private Integer port; -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/exception/ConfigLoadFailedException.java b/Partner-Main/src/main/java/work/slhaf/partner/common/exception/ConfigLoadFailedException.java new file mode 100644 index 00000000..1410f663 --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/common/exception/ConfigLoadFailedException.java @@ -0,0 +1,13 @@ +package work.slhaf.partner.common.exception; + +import work.slhaf.partner.api.agent.factory.config.exception.ConfigFactoryInitFailedException; + +public class ConfigLoadFailedException extends ConfigFactoryInitFailedException { + public ConfigLoadFailedException(String message, Throwable cause) { + super(message, cause); + } + + public ConfigLoadFailedException(String message) { + super(message); + } +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/exception/ServiceLoadFailedException.java b/Partner-Main/src/main/java/work/slhaf/partner/common/exception/ServiceLoadFailedException.java new file mode 100644 index 00000000..20fda42e --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/common/exception/ServiceLoadFailedException.java @@ -0,0 +1,13 @@ +package work.slhaf.partner.common.exception; + +import work.slhaf.partner.api.agent.runtime.exception.AgentLaunchFailedException; + +public class ServiceLoadFailedException extends AgentLaunchFailedException { + public ServiceLoadFailedException(String message, Throwable cause) { + super(message, cause); + } + + public ServiceLoadFailedException(String message) { + super(message); + } +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/exception_handler/GlobalExceptionHandler.java b/Partner-Main/src/main/java/work/slhaf/partner/common/exception/callback/GlobalExceptionHandler.java similarity index 88% rename from Partner-Main/src/main/java/work/slhaf/partner/common/exception_handler/GlobalExceptionHandler.java rename to Partner-Main/src/main/java/work/slhaf/partner/common/exception/callback/GlobalExceptionHandler.java index ce2b0e6c..6e57a644 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/exception_handler/GlobalExceptionHandler.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/common/exception/callback/GlobalExceptionHandler.java @@ -1,8 +1,8 @@ -package work.slhaf.partner.common.exception_handler; +package work.slhaf.partner.common.exception.callback; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.common.exception_handler.pojo.GlobalException; -import work.slhaf.partner.common.exception_handler.pojo.GlobalExceptionData; +import work.slhaf.partner.runtime.exception.pojo.GlobalException; +import work.slhaf.partner.runtime.exception.pojo.GlobalExceptionData; import java.io.*; import java.nio.file.Files; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/exception_handler/pojo/GlobalException.java b/Partner-Main/src/main/java/work/slhaf/partner/common/exception_handler/pojo/GlobalException.java deleted file mode 100644 index 52a4e691..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/exception_handler/pojo/GlobalException.java +++ /dev/null @@ -1,30 +0,0 @@ -package work.slhaf.partner.common.exception_handler.pojo; - -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.core.cognation.cognation.CognationCore; -import work.slhaf.partner.core.interaction.data.context.InteractionContext; -import work.slhaf.partner.core.session.SessionManager; - -@EqualsAndHashCode(callSuper = true) -@Slf4j -@Data -public class GlobalException extends RuntimeException { - - private GlobalExceptionData data; - - public GlobalException(String message) { - super(message); - try { - this.data = new GlobalExceptionData(); - this.data.setExceptionTime(System.currentTimeMillis()); - this.data.setSessionManager(SessionManager.getInstance()); - this.data.setCognationCore(CognationCore.getInstance()); - this.data.setContext(InteractionContext.getInstance()); - } catch (Exception e) { - log.error("[GlobalException] 捕获异常, 获取数据失败"); - } - } - -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/exception_handler/pojo/GlobalExceptionData.java b/Partner-Main/src/main/java/work/slhaf/partner/common/exception_handler/pojo/GlobalExceptionData.java deleted file mode 100644 index 7c60bb38..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/exception_handler/pojo/GlobalExceptionData.java +++ /dev/null @@ -1,26 +0,0 @@ -package work.slhaf.partner.common.exception_handler.pojo; - -import lombok.Data; -import lombok.EqualsAndHashCode; -import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.cognation.cognation.CognationCore; -import work.slhaf.partner.core.interaction.data.context.InteractionContext; -import work.slhaf.partner.core.session.SessionManager; - -import java.io.Serial; -import java.util.HashMap; - -@EqualsAndHashCode(callSuper = true) -@Data -public class GlobalExceptionData extends PersistableObject { - - @Serial - private static final long serialVersionUID = 1L; - - private String exceptionMessage; - - protected HashMap context; - protected SessionManager sessionManager; - protected CognationCore cognationCore; - protected Long exceptionTime; -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CoordinatedManager.java b/Partner-Main/src/main/java/work/slhaf/partner/core/CoordinatedManager.java similarity index 89% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CoordinatedManager.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/CoordinatedManager.java index f8f02b23..99e2a1e6 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CoordinatedManager.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/CoordinatedManager.java @@ -1,20 +1,20 @@ -package work.slhaf.partner.core.cognation; +package work.slhaf.partner.core; import lombok.Data; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.CoordinateManager; import work.slhaf.partner.api.agent.factory.capability.annotation.Coordinated; import work.slhaf.partner.api.chat.constant.ChatConstant; -import work.slhaf.partner.common.exception_handler.GlobalExceptionHandler; -import work.slhaf.partner.common.exception_handler.pojo.GlobalException; -import work.slhaf.partner.core.cognation.cognation.CognationCore; -import work.slhaf.partner.core.cognation.common.pojo.MemoryResult; -import work.slhaf.partner.core.cognation.common.pojo.MemorySliceResult; -import work.slhaf.partner.core.cognation.submodule.cache.CacheCore; -import work.slhaf.partner.core.cognation.submodule.dispatch.DispatchCore; -import work.slhaf.partner.core.cognation.submodule.memory.MemoryCore; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; -import work.slhaf.partner.core.cognation.submodule.perceive.PerceiveCore; +import work.slhaf.partner.common.exception.callback.GlobalExceptionHandler; +import work.slhaf.partner.runtime.exception.pojo.GlobalException; +import work.slhaf.partner.core.cognation.CognationCore; +import work.slhaf.partner.core.common.pojo.MemoryResult; +import work.slhaf.partner.core.common.pojo.MemorySliceResult; +import work.slhaf.partner.core.submodule.cache.CacheCore; +import work.slhaf.partner.core.submodule.dispatch.DispatchCore; +import work.slhaf.partner.core.submodule.memory.MemoryCore; +import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; +import work.slhaf.partner.core.submodule.perceive.PerceiveCore; import java.io.IOException; import java.io.Serial; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/InteractionHub.java b/Partner-Main/src/main/java/work/slhaf/partner/core/InteractionHub.java deleted file mode 100644 index 03b65505..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/InteractionHub.java +++ /dev/null @@ -1,56 +0,0 @@ -package work.slhaf.partner.core; - -import lombok.Data; -import lombok.ToString; -import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.common.exception_handler.GlobalExceptionHandler; -import work.slhaf.partner.common.exception_handler.pojo.GlobalException; -import work.slhaf.partner.core.interaction.agent_interface.TaskCallback; -import work.slhaf.partner.core.interaction.data.InteractionInputData; -import work.slhaf.partner.core.interaction.data.context.InteractionContext; -import work.slhaf.partner.core.interaction.module.InteractionFlow; -import work.slhaf.partner.core.interaction.module.InteractionModulesLoader; -import work.slhaf.partner.module.modules.process.PreprocessExecutor; - -import java.io.IOException; -import java.util.List; - -@Data -@Slf4j -public class InteractionHub { - - private static volatile InteractionHub interactionHub; - - @ToString.Exclude - private TaskCallback callback; - private List interactionModules; - - public static InteractionHub initialize() throws IOException { - if (interactionHub == null) { - synchronized (InteractionHub.class) { - if (interactionHub == null) { - interactionHub = new InteractionHub(); - //加载模块 - interactionHub.setInteractionModules(InteractionModulesLoader.getInstance().registerInteractionModules()); - log.info("InteractionHub注册完毕..."); - } - } - } - return interactionHub; - } - - public void call(InteractionInputData inputData) throws IOException, ClassNotFoundException { - InteractionContext interactionContext = PreprocessExecutor.getInstance().execute(inputData); - try { - for (InteractionFlow interactionModule : interactionModules) { - interactionModule.execute(interactionContext); - } - } catch (GlobalException e) { - GlobalExceptionHandler.writeExceptionState(e); - interactionContext.getCoreResponse().put("text", "[ERROR] " + e.getMessage()); - } finally { - callback.onTaskFinished(interactionContext.getUserInfo(), interactionContext.getCoreResponse().getString("text")); - interactionContext.clearUp(); - } - } -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java similarity index 90% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCapability.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java index b46c0168..80399840 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCapability.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCapability.java @@ -1,10 +1,10 @@ -package work.slhaf.partner.core.cognation.cognation; +package work.slhaf.partner.core.cognation; import work.slhaf.partner.api.agent.factory.capability.annotation.Capability; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMethod; import work.slhaf.partner.api.agent.factory.capability.annotation.ToCoordinated; import work.slhaf.partner.api.chat.pojo.Message; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.EvaluatedSlice; +import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice; import java.util.HashMap; import java.util.List; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java similarity index 93% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCore.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java index 5fb7e081..9f5981df 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/CognationCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/CognationCore.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.cognation.cognation; +package work.slhaf.partner.core.cognation; import lombok.Data; import lombok.EqualsAndHashCode; @@ -7,11 +7,11 @@ import org.apache.commons.io.FileUtils; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityCore; import work.slhaf.partner.api.chat.pojo.Message; import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.cognation.cognation.pojo.ActiveData; -import work.slhaf.partner.core.cognation.submodule.cache.CacheCore; -import work.slhaf.partner.core.cognation.submodule.memory.MemoryCore; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.EvaluatedSlice; -import work.slhaf.partner.core.cognation.submodule.perceive.PerceiveCore; +import work.slhaf.partner.core.cognation.pojo.ActiveData; +import work.slhaf.partner.core.submodule.cache.CacheCore; +import work.slhaf.partner.core.submodule.memory.MemoryCore; +import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice; +import work.slhaf.partner.core.submodule.perceive.PerceiveCore; import java.io.*; import java.nio.file.Files; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/exception/UserNotExistsException.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/exception/UserNotExistsException.java similarity index 70% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/exception/UserNotExistsException.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/cognation/exception/UserNotExistsException.java index f80fd12d..aae2addb 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/exception/UserNotExistsException.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/exception/UserNotExistsException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.cognation.cognation.exception; +package work.slhaf.partner.core.cognation.exception; public class UserNotExistsException extends RuntimeException { public UserNotExistsException(String message) { diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/pojo/ActiveData.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/pojo/ActiveData.java similarity index 88% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/pojo/ActiveData.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/cognation/pojo/ActiveData.java index 61a23a0b..429eecc1 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/cognation/pojo/ActiveData.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/pojo/ActiveData.java @@ -1,7 +1,7 @@ -package work.slhaf.partner.core.cognation.cognation.pojo; +package work.slhaf.partner.core.cognation.pojo; import lombok.Data; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.EvaluatedSlice; +import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice; import java.util.HashMap; import java.util.List; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/dispatch/DispatchCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/dispatch/DispatchCapability.java deleted file mode 100644 index 7270f403..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/dispatch/DispatchCapability.java +++ /dev/null @@ -1,4 +0,0 @@ -package work.slhaf.partner.core.cognation.submodule.dispatch; - -public interface DispatchCapability { -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemoryResult.java b/Partner-Main/src/main/java/work/slhaf/partner/core/common/pojo/MemoryResult.java similarity index 84% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemoryResult.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/common/pojo/MemoryResult.java index 8f538b06..9d602a61 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemoryResult.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/common/pojo/MemoryResult.java @@ -1,9 +1,9 @@ -package work.slhaf.partner.core.cognation.common.pojo; +package work.slhaf.partner.core.common.pojo; import lombok.Data; import lombok.EqualsAndHashCode; import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; +import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; import java.io.Serial; import java.util.List; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemorySliceResult.java b/Partner-Main/src/main/java/work/slhaf/partner/core/common/pojo/MemorySliceResult.java similarity index 80% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemorySliceResult.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/common/pojo/MemorySliceResult.java index 03591b62..1a21a18a 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/common/pojo/MemorySliceResult.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/common/pojo/MemorySliceResult.java @@ -1,10 +1,10 @@ -package work.slhaf.partner.core.cognation.common.pojo; +package work.slhaf.partner.core.common.pojo; import com.alibaba.fastjson2.annotation.JSONField; import lombok.Data; import lombok.EqualsAndHashCode; import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; +import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; import java.io.Serial; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/agent_interface/InputReceiver.java b/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/agent_interface/InputReceiver.java deleted file mode 100644 index 1a06ae60..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/agent_interface/InputReceiver.java +++ /dev/null @@ -1,11 +0,0 @@ -package work.slhaf.partner.core.interaction.agent_interface; - - -import work.slhaf.partner.core.interaction.data.InteractionInputData; - -import java.io.IOException; - -public interface InputReceiver { - - void receiveInput(InteractionInputData inputData) throws IOException, ClassNotFoundException; -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/agent_interface/TaskCallback.java b/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/agent_interface/TaskCallback.java deleted file mode 100644 index 9e1767c4..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/agent_interface/TaskCallback.java +++ /dev/null @@ -1,5 +0,0 @@ -package work.slhaf.partner.core.interaction.agent_interface; - -public interface TaskCallback { - void onTaskFinished(String userInfo,String output); -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/InteractionInputData.java b/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/InteractionInputData.java deleted file mode 100644 index 41f32f76..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/InteractionInputData.java +++ /dev/null @@ -1,15 +0,0 @@ -package work.slhaf.partner.core.interaction.data; - -import lombok.Data; - -import java.time.LocalDateTime; - -@Data -public class InteractionInputData { - private String userInfo; - private String userNickName; - private String content; - private LocalDateTime localDateTime; - private String platform; - private boolean single; -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/InteractionOutputData.java b/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/InteractionOutputData.java deleted file mode 100644 index c9fea2ba..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/InteractionOutputData.java +++ /dev/null @@ -1,11 +0,0 @@ -package work.slhaf.partner.core.interaction.data; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class InteractionOutputData { - private String content; - private String userInfo; -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/module/InteractionFlow.java b/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/module/InteractionFlow.java deleted file mode 100644 index 3e8350f6..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/module/InteractionFlow.java +++ /dev/null @@ -1,9 +0,0 @@ -package work.slhaf.partner.core.interaction.module; - -import work.slhaf.partner.core.interaction.data.context.InteractionContext; - -import java.io.IOException; - -public interface InteractionFlow { - void execute(InteractionContext context) throws IOException, ClassNotFoundException; -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/module/InteractionModulesLoader.java b/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/module/InteractionModulesLoader.java deleted file mode 100644 index b74a078a..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/module/InteractionModulesLoader.java +++ /dev/null @@ -1,60 +0,0 @@ -package work.slhaf.partner.core.interaction.module; - -import work.slhaf.partner.common.config.Config; -import work.slhaf.partner.common.config.ModuleConfig; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.List; - -public class InteractionModulesLoader { - - private static InteractionModulesLoader interactionModulesLoader; - - public static InteractionModulesLoader getInstance(){ - if (interactionModulesLoader == null) { - interactionModulesLoader = new InteractionModulesLoader(); - } - return interactionModulesLoader; - } - - public List registerInteractionModules() throws IOException { - List moduleList = new ArrayList<>(); - List moduleConfigList = Config.getConfig().getModuleConfigList(); - for (ModuleConfig moduleConfig : moduleConfigList) { - if (ModuleConfig.Constant.INTERNAL.equals(moduleConfig.getType())) { - moduleList.add(loadInternalModule(moduleConfig.getClassName())); - } else if (ModuleConfig.Constant.EXTERNAL.equals(moduleConfig.getType())) { - moduleList.add(loadExternalModule(moduleConfig.getClassName(),moduleConfig.getPath())); - } - } - return moduleList; - } - - private InteractionFlow loadExternalModule(String className, String path) { - try { - URL jarUrl = new File(path).toURI().toURL(); - URLClassLoader loader = new URLClassLoader(new URL[]{jarUrl}, this.getClass().getClassLoader()); - - Class clazz = loader.loadClass(className); - loader.close(); - return (InteractionFlow) clazz.getMethod("getInstance").invoke(null); - } catch (ClassNotFoundException | InvocationTargetException | IllegalAccessException | - NoSuchMethodException | IOException e) { - throw new RuntimeException("Fail to load internal module: " + className ,e); - } - } - - private static InteractionFlow loadInternalModule(String className) { - try { - Class clazz = Class.forName(className); - return (InteractionFlow) clazz.getMethod("getInstance").invoke(null); - } catch (ClassNotFoundException | InvocationTargetException | IllegalAccessException | NoSuchMethodException e) { - throw new RuntimeException("Fail to load internal module: " + className,e); - } - } -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCapability.java similarity index 90% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCapability.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCapability.java index 09d8229f..36422753 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCapability.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCapability.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.cognation.submodule.cache; +package work.slhaf.partner.core.submodule.cache; import work.slhaf.partner.api.agent.factory.capability.annotation.Capability; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCore.java similarity index 96% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCore.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCore.java index 5507eea6..ac777407 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/cache/CacheCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/cache/CacheCore.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.cognation.submodule.cache; +package work.slhaf.partner.core.submodule.cache; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -6,8 +6,8 @@ import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityCore; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMethod; import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.cognation.common.pojo.MemoryResult; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; +import work.slhaf.partner.core.common.pojo.MemoryResult; +import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; import java.io.Serial; import java.time.LocalDate; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/DispatchCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/DispatchCapability.java new file mode 100644 index 00000000..e1a0d05b --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/DispatchCapability.java @@ -0,0 +1,4 @@ +package work.slhaf.partner.core.submodule.dispatch; + +public interface DispatchCapability { +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/dispatch/DispatchCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/DispatchCore.java similarity index 82% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/dispatch/DispatchCore.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/DispatchCore.java index af720747..73ad8eb3 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/dispatch/DispatchCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/DispatchCore.java @@ -1,7 +1,7 @@ -package work.slhaf.partner.core.cognation.submodule.dispatch; +package work.slhaf.partner.core.submodule.dispatch; import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.cognation.submodule.dispatch.pojo.DispatchData; +import work.slhaf.partner.core.submodule.dispatch.pojo.DispatchData; import java.io.Serial; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/dispatch/pojo/DispatchData.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/pojo/DispatchData.java similarity index 79% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/dispatch/pojo/DispatchData.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/pojo/DispatchData.java index 9692e1be..36a26247 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/dispatch/pojo/DispatchData.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/dispatch/pojo/DispatchData.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.cognation.submodule.dispatch.pojo; +package work.slhaf.partner.core.submodule.dispatch.pojo; import lombok.Data; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCapability.java similarity index 75% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCapability.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCapability.java index 0e9c48f1..9abaa119 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCapability.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCapability.java @@ -1,9 +1,9 @@ -package work.slhaf.partner.core.cognation.submodule.memory; +package work.slhaf.partner.core.submodule.memory; import work.slhaf.partner.api.agent.factory.capability.annotation.Capability; import work.slhaf.partner.api.agent.factory.capability.annotation.ToCoordinated; -import work.slhaf.partner.core.cognation.common.pojo.MemoryResult; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; +import work.slhaf.partner.core.common.pojo.MemoryResult; +import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; import java.io.IOException; import java.time.LocalDate; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCore.java similarity index 95% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCore.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCore.java index 4b46615d..01cac98e 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/MemoryCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/MemoryCore.java @@ -1,17 +1,17 @@ -package work.slhaf.partner.core.cognation.submodule.memory; +package work.slhaf.partner.core.submodule.memory; import lombok.Data; import lombok.EqualsAndHashCode; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityCore; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMethod; import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.cognation.common.pojo.MemoryResult; -import work.slhaf.partner.core.cognation.common.pojo.MemorySliceResult; -import work.slhaf.partner.core.cognation.submodule.memory.exception.UnExistedDateIndexException; -import work.slhaf.partner.core.cognation.submodule.memory.exception.UnExistedTopicException; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.node.MemoryNode; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.node.TopicNode; +import work.slhaf.partner.core.common.pojo.MemoryResult; +import work.slhaf.partner.core.common.pojo.MemorySliceResult; +import work.slhaf.partner.core.submodule.memory.exception.UnExistedDateIndexException; +import work.slhaf.partner.core.submodule.memory.exception.UnExistedTopicException; +import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; +import work.slhaf.partner.core.submodule.memory.pojo.node.MemoryNode; +import work.slhaf.partner.core.submodule.memory.pojo.node.TopicNode; import java.io.IOException; import java.io.Serial; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/exception/NullSliceListException.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/NullSliceListException.java similarity index 67% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/exception/NullSliceListException.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/NullSliceListException.java index 970af25b..cdf03e1e 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/exception/NullSliceListException.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/NullSliceListException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.cognation.submodule.memory.exception; +package work.slhaf.partner.core.submodule.memory.exception; public class NullSliceListException extends RuntimeException { public NullSliceListException(String message) { diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/exception/UnExistedDateIndexException.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/UnExistedDateIndexException.java similarity index 69% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/exception/UnExistedDateIndexException.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/UnExistedDateIndexException.java index 053973f0..241ee983 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/exception/UnExistedDateIndexException.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/UnExistedDateIndexException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.cognation.submodule.memory.exception; +package work.slhaf.partner.core.submodule.memory.exception; public class UnExistedDateIndexException extends RuntimeException { public UnExistedDateIndexException(String message) { diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/exception/UnExistedTopicException.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/UnExistedTopicException.java similarity index 68% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/exception/UnExistedTopicException.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/UnExistedTopicException.java index e84070d9..42218a53 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/exception/UnExistedTopicException.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/exception/UnExistedTopicException.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.cognation.submodule.memory.exception; +package work.slhaf.partner.core.submodule.memory.exception; public class UnExistedTopicException extends RuntimeException { public UnExistedTopicException(String message) { diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/EvaluatedSlice.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/EvaluatedSlice.java similarity index 87% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/EvaluatedSlice.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/EvaluatedSlice.java index 468210b3..50a0affb 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/EvaluatedSlice.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/EvaluatedSlice.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.cognation.submodule.memory.pojo; +package work.slhaf.partner.core.submodule.memory.pojo; import lombok.Builder; import lombok.Data; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/MemorySlice.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemorySlice.java similarity index 96% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/MemorySlice.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemorySlice.java index 533cb6ec..51f771b6 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/MemorySlice.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/MemorySlice.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.cognation.submodule.memory.pojo; +package work.slhaf.partner.core.submodule.memory.pojo; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/MemoryNode.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/node/MemoryNode.java similarity index 91% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/MemoryNode.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/node/MemoryNode.java index a6a14d07..0c3b4c8d 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/MemoryNode.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/node/MemoryNode.java @@ -1,11 +1,11 @@ -package work.slhaf.partner.core.cognation.submodule.memory.pojo.node; +package work.slhaf.partner.core.submodule.memory.pojo.node; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.cognation.submodule.memory.exception.NullSliceListException; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; +import work.slhaf.partner.core.submodule.memory.exception.NullSliceListException; +import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; import java.io.*; import java.nio.file.Files; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/TopicNode.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/node/TopicNode.java similarity index 89% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/TopicNode.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/node/TopicNode.java index fb7119eb..9f0638ee 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/memory/pojo/node/TopicNode.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/memory/pojo/node/TopicNode.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.cognation.submodule.memory.pojo.node; +package work.slhaf.partner.core.submodule.memory.pojo.node; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCapability.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/PerceiveCapability.java similarity index 71% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCapability.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/PerceiveCapability.java index ba38e7e5..1602585d 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCapability.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/PerceiveCapability.java @@ -1,7 +1,7 @@ -package work.slhaf.partner.core.cognation.submodule.perceive; +package work.slhaf.partner.core.submodule.perceive; import work.slhaf.partner.api.agent.factory.capability.annotation.Capability; -import work.slhaf.partner.core.cognation.submodule.perceive.pojo.User; +import work.slhaf.partner.core.submodule.perceive.pojo.User; @Capability(value = "perceive") public interface PerceiveCapability { diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCore.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/PerceiveCore.java similarity index 92% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCore.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/PerceiveCore.java index 18039010..eea1a495 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/PerceiveCore.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/PerceiveCore.java @@ -1,12 +1,12 @@ -package work.slhaf.partner.core.cognation.submodule.perceive; +package work.slhaf.partner.core.submodule.perceive; import lombok.Data; import lombok.EqualsAndHashCode; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityCore; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityMethod; import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.cognation.cognation.exception.UserNotExistsException; -import work.slhaf.partner.core.cognation.submodule.perceive.pojo.User; +import work.slhaf.partner.core.cognation.exception.UserNotExistsException; +import work.slhaf.partner.core.submodule.perceive.pojo.User; import java.io.Serial; import java.util.ArrayList; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/pojo/User.java b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/pojo/User.java similarity index 96% rename from Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/pojo/User.java rename to Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/pojo/User.java index 4afb6774..c6251634 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/cognation/submodule/perceive/pojo/User.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/submodule/perceive/pojo/User.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.cognation.submodule.perceive.pojo; +package work.slhaf.partner.core.submodule.perceive.pojo; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/gateway/MessageSender.java b/Partner-Main/src/main/java/work/slhaf/partner/gateway/MessageSender.java deleted file mode 100644 index 0c3af117..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/gateway/MessageSender.java +++ /dev/null @@ -1,7 +0,0 @@ -package work.slhaf.partner.gateway; - -import work.slhaf.partner.core.interaction.data.InteractionOutputData; - -public interface MessageSender { - void sendMessage(InteractionOutputData outputData); -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/CoreModule.java b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/CoreModule.java deleted file mode 100644 index b877e7b0..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/CoreModule.java +++ /dev/null @@ -1,5 +0,0 @@ -package work.slhaf.partner.module.common.module; - -public abstract class CoreModule extends InteractionModule { - -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/CoreRunningModule.java b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/CoreRunningModule.java new file mode 100644 index 00000000..39489981 --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/CoreRunningModule.java @@ -0,0 +1,7 @@ +package work.slhaf.partner.module.common.module; + +import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningModule; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; + +public abstract class CoreRunningModule extends AgentRunningModule { +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/InteractionModule.java b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/InteractionModule.java deleted file mode 100644 index adb9ecab..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/InteractionModule.java +++ /dev/null @@ -1,7 +0,0 @@ -package work.slhaf.partner.module.common.module; - -import work.slhaf.partner.core.interaction.module.InteractionFlow; - -public abstract class InteractionModule/* extends Module*/ implements InteractionFlow { - -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PostModule.java b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PostModule.java deleted file mode 100644 index edad25ed..00000000 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PostModule.java +++ /dev/null @@ -1,4 +0,0 @@ -package work.slhaf.partner.module.common.module; - -public abstract class PostModule extends InteractionModule{ -} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PostRunningModule.java b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PostRunningModule.java new file mode 100644 index 00000000..3104f630 --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PostRunningModule.java @@ -0,0 +1,7 @@ +package work.slhaf.partner.module.common.module; + +import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningModule; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; + +public abstract class PostRunningModule extends AgentRunningModule { +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PreModule.java b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PreRunningModule.java similarity index 61% rename from Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PreModule.java rename to Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PreRunningModule.java index 98f5417a..776b8a9b 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PreModule.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/common/module/PreRunningModule.java @@ -1,6 +1,7 @@ package work.slhaf.partner.module.common.module; -import work.slhaf.partner.core.interaction.data.context.InteractionContext; +import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningModule; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import work.slhaf.partner.module.common.entity.AppendPromptData; import java.util.HashMap; @@ -8,8 +9,8 @@ import java.util.HashMap; /** * 前置模块抽象类 */ -public abstract class PreModule extends InteractionModule { - protected void setAppendedPrompt(InteractionContext context) { +public abstract class PreRunningModule extends AgentRunningModule { + protected void setAppendedPrompt(PartnerRunningFlowContext context) { AppendPromptData data = new AppendPromptData(); data.setModuleName(moduleName()); HashMap map = getPromptDataMap(context.getUserId()); @@ -17,7 +18,7 @@ public abstract class PreModule extends InteractionModule { context.getModuleContext().getAppendedPrompt().add(data); } - protected void setActiveModule(InteractionContext context) { + protected void setActiveModule(PartnerRunningFlowContext context) { context.getCoreContext().addActiveModule(moduleName()); } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java index 8ac206ed..35117212 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/core/CoreModel.java @@ -5,17 +5,19 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; +import work.slhaf.partner.api.agent.factory.module.annotation.CoreModule; +import work.slhaf.partner.api.agent.factory.module.annotation.Init; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel; import work.slhaf.partner.api.chat.constant.ChatConstant; import work.slhaf.partner.api.chat.pojo.ChatResponse; import work.slhaf.partner.api.chat.pojo.Message; import work.slhaf.partner.api.chat.pojo.MetaMessage; -import work.slhaf.partner.core.cognation.cognation.CognationCapability; -import work.slhaf.partner.core.interaction.data.context.InteractionContext; -import work.slhaf.partner.core.session.SessionManager; +import work.slhaf.partner.core.cognation.CognationCapability; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import work.slhaf.partner.runtime.session.SessionManager; import work.slhaf.partner.module.common.entity.AppendPromptData; import work.slhaf.partner.module.common.model.ModelConstant; -import work.slhaf.partner.module.common.module.CoreModule; +import work.slhaf.partner.module.common.module.CoreRunningModule; import java.io.IOException; import java.time.LocalDateTime; @@ -28,33 +30,21 @@ import static work.slhaf.partner.common.util.ExtractUtil.extractJson; @EqualsAndHashCode(callSuper = true) @Data @Slf4j -public class CoreModel extends CoreModule implements ActivateModel { - - private static volatile CoreModel coreModel; - +@CoreModule +public class CoreModel extends CoreRunningModule implements ActivateModel { + @InjectCapability private CognationCapability cognationCapability; private SessionManager sessionManager; private List appendedMessages; - private CoreModel() { - modelSettings(); - } - - public static CoreModel getInstance() throws IOException, ClassNotFoundException { - if (coreModel == null) { - synchronized (CoreModel.class) { - if (coreModel == null) { - coreModel = new CoreModel(); - coreModel.getModel().setChatMessages(coreModel.cognationCapability.getChatMessages()); - coreModel.appendedMessages = new ArrayList<>(); - coreModel.sessionManager = SessionManager.getInstance(); - coreModel.updateChatClientSettings(); - log.info("[CoreModel] CoreModel注册完毕..."); - } - } - } - return coreModel; + @Init + public void init(){ + List chatMessages = this.cognationCapability.getChatMessages(); + this.getModel().setChatMessages(chatMessages); + this.appendedMessages = new ArrayList<>(); + this.sessionManager = SessionManager.getInstance(); + log.info("[CoreModel] CoreModel注册完毕..."); } @Override @@ -74,21 +64,34 @@ public class CoreModel extends CoreModule implements ActivateModel { } @Override - public void execute(InteractionContext interactionContext) { - String userId = interactionContext.getUserId(); + public void execute(PartnerRunningFlowContext runningFlowContext) { + String userId = runningFlowContext.getUserId(); log.debug("[CoreModel] 主对话流程开始: {}", userId); - List appendedPrompt = interactionContext.getModuleContext().getAppendedPrompt(); + beforeChat(runningFlowContext); + executeChat(runningFlowContext); + log.debug("[CoreModel] 主对话流程({})结束...", userId); + } + + private void beforeChat(PartnerRunningFlowContext runningFlowContext) { + setAppendedPromptMessage(runningFlowContext); + activateModule(runningFlowContext); + setMessageCount(runningFlowContext); + + log.debug("[CoreModel] 当前消息列表大小: {}", chatMessages().size()); + log.debug("[CoreModel] 当前核心prompt内容: {}", runningFlowContext.getCoreContext().toString()); + + setMessage(runningFlowContext.getCoreContext().toString()); + } + + private void setAppendedPromptMessage(PartnerRunningFlowContext runningFlowContext) { + List appendedPrompt = runningFlowContext.getModuleContext().getAppendedPrompt(); int appendedPromptSize = getAppendedPromptSize(appendedPrompt); if (appendedPromptSize > 0) { setAppendedPromptMessage(appendedPrompt); } - activateModule(interactionContext); - setMessageCount(interactionContext); + } - log.debug("[CoreModel] 当前消息列表大小: {}", chatMessages().size()); - log.debug("[CoreModel] 当前核心prompt内容: {}", interactionContext.getCoreContext().toString()); - - setMessage(interactionContext.getCoreContext().toString()); + private void executeChat(PartnerRunningFlowContext runningFlowContext) { JSONObject response = new JSONObject(); int count = 0; @@ -102,7 +105,7 @@ public class CoreModel extends CoreModule implements ActivateModel { handleExceptionResponse(response, chatResponse.getMessage()); } log.debug("[CoreModel] CoreModel 响应内容: {}", response); - updateModuleContextAndChatMessages(interactionContext, response.getString("text"), chatResponse); + updateModuleContextAndChatMessages(runningFlowContext, response.getString("text"), chatResponse); break; } catch (Exception e) { count++; @@ -113,12 +116,11 @@ public class CoreModel extends CoreModule implements ActivateModel { break; } } finally { - updateCoreResponse(interactionContext, response); + updateCoreResponse(runningFlowContext, response); resetAppendedMessages(); log.debug("[CoreModel] 消息列表更新大小: {}", chatMessages().size()); } } - log.debug("[CoreModel] 主对话流程({})结束...", userId); } private int getAppendedPromptSize(List appendedPrompt) { @@ -129,15 +131,15 @@ public class CoreModel extends CoreModule implements ActivateModel { return size; } - private void activateModule(InteractionContext context) { + private void activateModule(PartnerRunningFlowContext context) { for (AppendPromptData data : context.getModuleContext().getAppendedPrompt()) { if (data.getAppendedPrompt().isEmpty()) continue; context.getCoreContext().activateModule(data.getModuleName()); } } - private void updateCoreResponse(InteractionContext interactionContext, JSONObject response) { - interactionContext.getCoreResponse().put("text", response.getString("text")); + private void updateCoreResponse(PartnerRunningFlowContext runningFlowContext, JSONObject response) { + runningFlowContext.getCoreResponse().put("text", response.getString("text")); } private void resetAppendedMessages() { @@ -153,7 +155,7 @@ public class CoreModel extends CoreModule implements ActivateModel { return chatClient().runChat(temp); } - private void updateModuleContextAndChatMessages(InteractionContext interactionContext, String response, ChatResponse chatResponse) { + private void updateModuleContextAndChatMessages(PartnerRunningFlowContext runningFlowContext, String response, ChatResponse chatResponse) { cognationCapability.getMessageLock().lock(); chatMessages().removeIf(m -> { if (m.getRole().equals(ChatConstant.Character.ASSISTANT)) { @@ -168,17 +170,17 @@ public class CoreModel extends CoreModule implements ActivateModel { }); //添加时间标志 String dateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("\r\n**[yyyy-MM-dd HH:mm:ss]")); - Message primaryUserMessage = new Message(ChatConstant.Character.USER, interactionContext.getCoreContext().getText() + dateTime); + Message primaryUserMessage = new Message(ChatConstant.Character.USER, runningFlowContext.getCoreContext().getText() + dateTime); chatMessages().add(primaryUserMessage); Message assistantMessage = new Message(ChatConstant.Character.ASSISTANT, response); chatMessages().add(assistantMessage); cognationCapability.getMessageLock().unlock(); //设置上下文 - interactionContext.getModuleContext().getExtraContext().put("total_token", chatResponse.getUsageBean().getTotal_tokens()); + runningFlowContext.getModuleContext().getExtraContext().put("total_token", chatResponse.getUsageBean().getTotal_tokens()); //区分单人聊天场景 - if (interactionContext.isSingle()) { + if (runningFlowContext.isSingle()) { MetaMessage metaMessage = new MetaMessage(primaryUserMessage, assistantMessage); - sessionManager.addMetaMessage(interactionContext.getUserId(), metaMessage); + sessionManager.addMetaMessage(runningFlowContext.getUserId(), metaMessage); } } @@ -192,8 +194,8 @@ public class CoreModel extends CoreModule implements ActivateModel { // interactionContext.setFinished(true); } - private void setMessageCount(InteractionContext interactionContext) { - interactionContext.getModuleContext().getExtraContext().put("message_count", chatMessages().size()); + private void setMessageCount(PartnerRunningFlowContext runningFlowContext) { + runningFlowContext.getModuleContext().getExtraContext().put("message_count", chatMessages().size()); } private void setAppendedPromptMessage(List appendPrompt) { diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java index e4ddbfad..1ee9e719 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/MemorySelector.java @@ -5,17 +5,18 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; -import work.slhaf.partner.core.cognation.cognation.CognationCapability; -import work.slhaf.partner.core.cognation.common.pojo.MemoryResult; -import work.slhaf.partner.core.cognation.submodule.cache.CacheCapability; -import work.slhaf.partner.core.cognation.submodule.memory.MemoryCapability; -import work.slhaf.partner.core.cognation.submodule.memory.exception.UnExistedDateIndexException; -import work.slhaf.partner.core.cognation.submodule.memory.exception.UnExistedTopicException; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.EvaluatedSlice; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; -import work.slhaf.partner.core.interaction.data.context.InteractionContext; -import work.slhaf.partner.core.session.SessionManager; -import work.slhaf.partner.module.common.module.PreModule; +import work.slhaf.partner.api.agent.factory.module.annotation.AgentModule; +import work.slhaf.partner.core.cognation.CognationCapability; +import work.slhaf.partner.core.common.pojo.MemoryResult; +import work.slhaf.partner.core.submodule.cache.CacheCapability; +import work.slhaf.partner.core.submodule.memory.MemoryCapability; +import work.slhaf.partner.core.submodule.memory.exception.UnExistedDateIndexException; +import work.slhaf.partner.core.submodule.memory.exception.UnExistedTopicException; +import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice; +import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import work.slhaf.partner.runtime.session.SessionManager; +import work.slhaf.partner.module.common.module.PreRunningModule; import work.slhaf.partner.module.modules.memory.selector.evaluator.SliceSelectEvaluator; import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorInput; import work.slhaf.partner.module.modules.memory.selector.extractor.MemorySelectExtractor; @@ -32,7 +33,8 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) @Data @Slf4j -public class MemorySelector extends PreModule { +@AgentModule(name="memory_selector",order=1) +public class MemorySelector extends PreRunningModule { private static volatile MemorySelector memorySelector; @@ -65,32 +67,32 @@ public class MemorySelector extends PreModule { } @Override - public void execute(InteractionContext interactionContext) throws IOException, ClassNotFoundException { + public void execute(PartnerRunningFlowContext runningFlowContext) throws IOException, ClassNotFoundException { log.debug("[MemorySelector] 记忆回溯流程开始..."); - String userId = interactionContext.getUserId(); + String userId = runningFlowContext.getUserId(); //获取主题路径 - ExtractorResult extractorResult = memorySelectExtractor.execute(interactionContext); + ExtractorResult extractorResult = memorySelectExtractor.execute(runningFlowContext); if (extractorResult.isRecall() || !extractorResult.getMatches().isEmpty()) { cognationCapability.clearActivatedSlices(userId); - List evaluatedSlices = selectAndEvaluateMemory(interactionContext, extractorResult); + List evaluatedSlices = selectAndEvaluateMemory(runningFlowContext, extractorResult); cognationCapability.updateActivatedSlices(userId, evaluatedSlices); } //设置追加提示词 - setAppendedPrompt(interactionContext); - setModuleContextRecall(interactionContext); - setActiveModule(interactionContext); + setAppendedPrompt(runningFlowContext); + setModuleContextRecall(runningFlowContext); + setActiveModule(runningFlowContext); log.debug("[MemorySelector] 记忆回溯完成..."); } - private List selectAndEvaluateMemory(InteractionContext interactionContext, ExtractorResult extractorResult) throws IOException, ClassNotFoundException { + private List selectAndEvaluateMemory(PartnerRunningFlowContext runningFlowContext, ExtractorResult extractorResult) throws IOException, ClassNotFoundException { log.debug("[MemorySelector] 触发记忆回溯..."); //查找切片 - String userId = interactionContext.getUserId(); + String userId = runningFlowContext.getUserId(); List memoryResultList = new ArrayList<>(); setMemoryResultList(memoryResultList, extractorResult.getMatches(), userId); //评估切片 EvaluatorInput evaluatorInput = EvaluatorInput.builder() - .input(interactionContext.getInput()) + .input(runningFlowContext.getInput()) .memoryResults(memoryResultList) .messages(cognationCapability.getChatMessages()) .build(); @@ -100,12 +102,12 @@ public class MemorySelector extends PreModule { return memorySlices; } - private void setModuleContextRecall(InteractionContext interactionContext) { - String userId = interactionContext.getUserId(); + private void setModuleContextRecall(PartnerRunningFlowContext runningFlowContext) { + String userId = runningFlowContext.getUserId(); boolean recall = cognationCapability.hasActivatedSlices(userId); - interactionContext.getModuleContext().getExtraContext().put("recall", recall); + runningFlowContext.getModuleContext().getExtraContext().put("recall", recall); if (recall) { - interactionContext.getModuleContext().getExtraContext().put("recall_count", cognationCapability.getActivatedSlicesSize(userId)); + runningFlowContext.getModuleContext().getExtraContext().put("recall_count", cognationCapability.getActivatedSlicesSize(userId)); } } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java index 7092f7cd..e0f8b30f 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/evaluator/SliceSelectEvaluator.java @@ -9,10 +9,10 @@ import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateModel; import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; -import work.slhaf.partner.core.cognation.common.pojo.MemoryResult; -import work.slhaf.partner.core.cognation.common.pojo.MemorySliceResult; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.EvaluatedSlice; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; +import work.slhaf.partner.core.common.pojo.MemoryResult; +import work.slhaf.partner.core.common.pojo.MemorySliceResult; +import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice; +import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorBatchInput; import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorInput; import work.slhaf.partner.module.modules.memory.selector.evaluator.data.EvaluatorResult; @@ -34,10 +34,6 @@ public class SliceSelectEvaluator extends AgentRunningSubModule implements ActivateModel { +public class MemorySelectExtractor extends AgentRunningSubModule implements ActivateModel { private static volatile MemorySelectExtractor memorySelectExtractor; @@ -58,7 +58,7 @@ public class MemorySelectExtractor extends AgentRunningSubModule chatMessages = new ArrayList<>(); diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/data/ExtractorInput.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/data/ExtractorInput.java index 96125729..28bd2ad0 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/data/ExtractorInput.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/selector/extractor/data/ExtractorInput.java @@ -3,7 +3,7 @@ package work.slhaf.partner.module.modules.memory.selector.extractor.data; import lombok.Builder; import lombok.Data; import work.slhaf.partner.api.chat.pojo.Message; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.EvaluatedSlice; +import work.slhaf.partner.core.submodule.memory.pojo.EvaluatedSlice; import java.time.LocalDate; import java.util.List; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/MemoryUpdater.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/MemoryUpdater.java index 140f728b..93f3ba2d 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/MemoryUpdater.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/memory/updater/MemoryUpdater.java @@ -8,14 +8,14 @@ import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapabili import work.slhaf.partner.api.chat.constant.ChatConstant; import work.slhaf.partner.api.chat.pojo.Message; import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; -import work.slhaf.partner.core.cognation.cognation.CognationCapability; -import work.slhaf.partner.core.cognation.submodule.cache.CacheCapability; -import work.slhaf.partner.core.cognation.submodule.memory.MemoryCapability; -import work.slhaf.partner.core.cognation.submodule.memory.pojo.MemorySlice; -import work.slhaf.partner.core.cognation.submodule.perceive.PerceiveCapability; -import work.slhaf.partner.core.interaction.data.context.InteractionContext; -import work.slhaf.partner.core.session.SessionManager; -import work.slhaf.partner.module.common.module.PostModule; +import work.slhaf.partner.core.cognation.CognationCapability; +import work.slhaf.partner.core.submodule.cache.CacheCapability; +import work.slhaf.partner.core.submodule.memory.MemoryCapability; +import work.slhaf.partner.core.submodule.memory.pojo.MemorySlice; +import work.slhaf.partner.core.submodule.perceive.PerceiveCapability; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import work.slhaf.partner.runtime.session.SessionManager; +import work.slhaf.partner.module.common.module.PostRunningModule; import work.slhaf.partner.module.modules.memory.selector.extractor.MemorySelectExtractor; import work.slhaf.partner.module.modules.memory.updater.summarizer.MemorySummarizer; import work.slhaf.partner.module.modules.memory.updater.summarizer.data.SummarizeInput; @@ -32,7 +32,7 @@ import static work.slhaf.partner.common.util.ExtractUtil.extractUserId; @EqualsAndHashCode(callSuper = true) @Data @Slf4j -public class MemoryUpdater extends PostModule { +public class MemoryUpdater extends PostRunningModule { private static volatile MemoryUpdater memoryUpdater; @@ -100,7 +100,7 @@ public class MemoryUpdater extends PostModule { } @Override - public void execute(InteractionContext context) { + public void execute(PartnerRunningFlowContext context) { if (context.isFinished()) { log.warn("[MemoryUpdater] 流程强制结束, 不触发记忆被动更新机制"); return; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java index fe7932c2..299403a8 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/selector/PerceiveSelector.java @@ -3,17 +3,17 @@ package work.slhaf.partner.module.modules.perceive.selector; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; -import work.slhaf.partner.core.cognation.submodule.perceive.PerceiveCapability; -import work.slhaf.partner.core.cognation.submodule.perceive.pojo.User; -import work.slhaf.partner.core.interaction.data.context.InteractionContext; -import work.slhaf.partner.module.common.module.PreModule; +import work.slhaf.partner.core.submodule.perceive.PerceiveCapability; +import work.slhaf.partner.core.submodule.perceive.pojo.User; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import work.slhaf.partner.module.common.module.PreRunningModule; import java.io.IOException; import java.util.HashMap; @Slf4j @Setter -public class PerceiveSelector extends PreModule { +public class PerceiveSelector extends PreRunningModule { private static volatile PerceiveSelector perceiveSelector; @@ -32,7 +32,7 @@ public class PerceiveSelector extends PreModule { } @Override - public void execute(InteractionContext context) throws IOException, ClassNotFoundException { + public void execute(PartnerRunningFlowContext context) throws IOException, ClassNotFoundException { log.debug("[PerceiveSelector] 感知模块处理流程开始..."); //处理思路: 根据用户id,查询用户相关身份感知数据,直接添加到appendPrompt中,这直接执行appendPrompt方法应该可以 setAppendedPrompt(context); diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java index 4ddb0b6a..8d72b2cc 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/PerceiveUpdater.java @@ -1,15 +1,13 @@ package work.slhaf.partner.module.modules.perceive.updater; import lombok.Data; -import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; -import work.slhaf.partner.core.cognation.cognation.CognationCapability; -import work.slhaf.partner.core.cognation.submodule.perceive.PerceiveCapability; -import work.slhaf.partner.core.cognation.submodule.perceive.pojo.User; -import work.slhaf.partner.core.interaction.data.context.InteractionContext; -import work.slhaf.partner.module.common.module.PostModule; +import work.slhaf.partner.core.cognation.CognationCapability; +import work.slhaf.partner.core.submodule.perceive.PerceiveCapability; +import work.slhaf.partner.core.submodule.perceive.pojo.User; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.RelationExtractor; import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo.RelationExtractResult; import work.slhaf.partner.module.modules.perceive.updater.static_extractor.StaticMemoryExtractor; @@ -24,10 +22,9 @@ import java.util.concurrent.locks.ReentrantLock; /** * 感知更新,异步 */ -@EqualsAndHashCode(callSuper = true) @Slf4j @Data -public class PerceiveUpdater extends PostModule { +public class PerceiveUpdater { private static volatile PerceiveUpdater perceiveUpdater; @@ -54,8 +51,7 @@ public class PerceiveUpdater extends PostModule { return perceiveUpdater; } - @Override - public void execute(InteractionContext context) throws IOException, ClassNotFoundException { + public void execute(PartnerRunningFlowContext context) throws IOException, ClassNotFoundException { executor.execute(() -> { boolean trigger = context.getModuleContext().getExtraContext().getBoolean("perceive_updater"); if (!trigger){ @@ -78,7 +74,7 @@ public class PerceiveUpdater extends PostModule { }); } - private void runRelationExtractorAction(InteractionContext context, ReentrantLock userLock, User user) { + private void runRelationExtractorAction(PartnerRunningFlowContext context, ReentrantLock userLock, User user) { RelationExtractResult relationExtractResult = relationExtractor.execute(context); userLock.lock(); user.setRelation(relationExtractResult.getRelation()); @@ -88,7 +84,7 @@ public class PerceiveUpdater extends PostModule { userLock.unlock(); } - private void runStaticExtractorAction(InteractionContext context, ReentrantLock userLock, User user) { + private void runStaticExtractorAction(PartnerRunningFlowContext context, ReentrantLock userLock, User user) { HashMap newStaticMemory = staticMemoryExtractor.execute(context); userLock.lock(); user.setStaticMemory(newStaticMemory); diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java index 79b25c77..9fa4b41f 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/perceive/updater/relation_extractor/RelationExtractor.java @@ -7,10 +7,10 @@ import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.ActivateM import work.slhaf.partner.api.agent.runtime.interaction.flow.abstracts.AgentRunningSubModule; import work.slhaf.partner.api.chat.pojo.ChatResponse; import work.slhaf.partner.api.chat.pojo.Message; -import work.slhaf.partner.core.cognation.cognation.CognationCapability; -import work.slhaf.partner.core.cognation.submodule.perceive.PerceiveCapability; -import work.slhaf.partner.core.cognation.submodule.perceive.pojo.User; -import work.slhaf.partner.core.interaction.data.context.InteractionContext; +import work.slhaf.partner.core.cognation.CognationCapability; +import work.slhaf.partner.core.submodule.perceive.PerceiveCapability; +import work.slhaf.partner.core.submodule.perceive.pojo.User; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo.RelationExtractInput; import work.slhaf.partner.module.modules.perceive.updater.relation_extractor.pojo.RelationExtractResult; @@ -21,7 +21,7 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) @Data -public class RelationExtractor extends AgentRunningSubModule implements ActivateModel { +public class RelationExtractor extends AgentRunningSubModule implements ActivateModel { private static volatile RelationExtractor relationExtractor; @@ -45,7 +45,7 @@ public class RelationExtractor extends AgentRunningSubModule(cognationCapability.getChatMessages()); String userId = context.getUserId(); RelationExtractInput input = getRelationInput(userId); @@ -56,7 +56,7 @@ public class RelationExtractor extends AgentRunningSubModule> implements ActivateModel { +public class StaticMemoryExtractor extends AgentRunningSubModule> implements ActivateModel { private static volatile StaticMemoryExtractor staticMemoryExtractor; @@ -43,7 +43,7 @@ public class StaticMemoryExtractor extends AgentRunningSubModule execute(InteractionContext context) { + public HashMap execute(PartnerRunningFlowContext context) { StaticMemoryExtractInput input = StaticMemoryExtractInput.builder() .userId(context.getUserId()) .messages(cognationCapability.getChatMessages()) diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PostprocessExecutor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PostprocessExecutor.java index 329562f1..c6601b75 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PostprocessExecutor.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PostprocessExecutor.java @@ -4,16 +4,16 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; -import work.slhaf.partner.core.cognation.cognation.CognationCapability; -import work.slhaf.partner.core.interaction.data.context.InteractionContext; -import work.slhaf.partner.module.common.module.PostModule; +import work.slhaf.partner.core.cognation.CognationCapability; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import work.slhaf.partner.module.common.module.PostRunningModule; import java.io.IOException; @EqualsAndHashCode(callSuper = true) @Slf4j @Data -public class PostprocessExecutor extends PostModule { +public class PostprocessExecutor extends PostRunningModule { private static volatile PostprocessExecutor postprocessExecutor; private static final int POST_PROCESS_TRIGGER_ROLL_LIMIT = 36; @@ -33,7 +33,7 @@ public class PostprocessExecutor extends PostModule { } @Override - public void execute(InteractionContext context) throws IOException, ClassNotFoundException { + public void execute(PartnerRunningFlowContext context) throws IOException, ClassNotFoundException { boolean trigger = cognationCapability.getChatMessages().size() >= POST_PROCESS_TRIGGER_ROLL_LIMIT; context.getModuleContext().getExtraContext().put("post_process_trigger", trigger); log.debug("[PostprocessExecutor] 是否执行后处理: {}", trigger); diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java index e8ecab8e..8b870cc5 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/process/PreprocessExecutor.java @@ -4,12 +4,12 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import work.slhaf.partner.api.agent.factory.capability.annotation.CapabilityHolder; import work.slhaf.partner.api.agent.factory.capability.annotation.InjectCapability; -import work.slhaf.partner.core.cognation.cognation.CognationCapability; -import work.slhaf.partner.core.cognation.submodule.perceive.PerceiveCapability; -import work.slhaf.partner.core.cognation.submodule.perceive.pojo.User; -import work.slhaf.partner.core.interaction.data.InteractionInputData; -import work.slhaf.partner.core.interaction.data.context.InteractionContext; -import work.slhaf.partner.core.session.SessionManager; +import work.slhaf.partner.core.cognation.CognationCapability; +import work.slhaf.partner.core.submodule.perceive.PerceiveCapability; +import work.slhaf.partner.core.submodule.perceive.pojo.User; +import work.slhaf.partner.runtime.interaction.data.PartnerInputData; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import work.slhaf.partner.runtime.session.SessionManager; import work.slhaf.partner.module.common.entity.AppendPromptData; import java.io.IOException; @@ -45,7 +45,7 @@ public class PreprocessExecutor { return preprocessExecutor; } - public InteractionContext execute(InteractionInputData inputData) { + public PartnerRunningFlowContext execute(PartnerInputData inputData) { checkAndSetMemoryId(); return getInteractionContext(inputData); } @@ -57,9 +57,9 @@ public class PreprocessExecutor { } } - private InteractionContext getInteractionContext(InteractionInputData inputData) { + private PartnerRunningFlowContext getInteractionContext(PartnerInputData inputData) { log.debug("[PreprocessExecutor] 预处理原始输入: {}", inputData); - InteractionContext context = new InteractionContext(); + PartnerRunningFlowContext context = new PartnerRunningFlowContext(); User user = perceiveCapability.getUser(inputData.getUserInfo(), inputData.getPlatform()); if (user == null) { @@ -67,10 +67,6 @@ public class PreprocessExecutor { } String userId = user.getUuid(); context.setUserId(userId); - context.setUserNickname(inputData.getUserNickName()); - context.setUserInfo(inputData.getUserInfo()); - context.setDateTime(inputData.getLocalDateTime()); - context.setSingle(inputData.isSingle()); String userStr = "[" + inputData.getUserNickName() + "(" + userId + ")]"; String input = userStr + " " + inputData.getContent(); @@ -83,7 +79,7 @@ public class PreprocessExecutor { return context; } - private void setAppendedPrompt(InteractionContext context) { + private void setAppendedPrompt(PartnerRunningFlowContext context) { HashMap map = new HashMap<>(); map.put("text", "这部分才是真正的用户输入内容, 就像你之前收到过的输入一样。但...不会是'同一个人'。"); map.put("datetime", "本次用户输入对应的当前时间"); @@ -97,7 +93,7 @@ public class PreprocessExecutor { context.setAppendedPrompt(data); } - private void setCoreContext(InteractionInputData inputData, InteractionContext context, String input, String userId) { + private void setCoreContext(PartnerInputData inputData, PartnerRunningFlowContext context, String input, String userId) { context.getCoreContext().setText(input); context.getCoreContext().setDateTime(LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); context.getCoreContext().setUserNick(inputData.getUserNickName()); diff --git a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskScheduler.java b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskScheduler.java index e0816855..b12e7404 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskScheduler.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/module/modules/task/TaskScheduler.java @@ -2,8 +2,8 @@ package work.slhaf.partner.module.modules.task; import lombok.Data; import lombok.extern.slf4j.Slf4j; -import work.slhaf.partner.core.interaction.data.context.InteractionContext; -import work.slhaf.partner.core.interaction.module.InteractionFlow; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import work.slhaf.partner.runtime.interaction.module.InteractionFlow; @Data @Slf4j @@ -22,7 +22,7 @@ public class TaskScheduler implements InteractionFlow { } @Override - public void execute(InteractionContext interactionContext) { + public void execute(PartnerRunningFlowContext runningFlowContext) { } } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/PartnerExceptionCallback.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/PartnerExceptionCallback.java new file mode 100644 index 00000000..abe9f00e --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/PartnerExceptionCallback.java @@ -0,0 +1,54 @@ +package work.slhaf.partner.runtime.exception; + +import lombok.extern.slf4j.Slf4j; +import work.slhaf.partner.api.agent.runtime.exception.AgentExceptionCallback; +import work.slhaf.partner.api.agent.runtime.exception.AgentLaunchFailedException; +import work.slhaf.partner.api.agent.runtime.exception.AgentRuntimeException; +import work.slhaf.partner.runtime.exception.pojo.GlobalExceptionData; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +@Slf4j +public class PartnerExceptionCallback implements AgentExceptionCallback { + + private static final String EXCEPTION_SNAPSHOTS_PATH = "./data/exception/snapshots/"; + private static final String EXCEPTION_LOG_PATH = "./data/exception/log/"; + + @Override + public void onRuntimeException(AgentRuntimeException exception) { + GlobalExceptionData exceptionData = new GlobalExceptionData(); + Path filePath = Paths.get(EXCEPTION_SNAPSHOTS_PATH, exceptionData.getExceptionTime() + ".dat"); + try { + Files.createDirectories(Path.of(EXCEPTION_SNAPSHOTS_PATH)); + ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath.toFile())); + oos.writeObject(exceptionData); + oos.close(); + BufferedWriter logWriter = new BufferedWriter(new FileWriter(EXCEPTION_LOG_PATH + exceptionData.getExceptionTime() + ".log")); + logWriter.write(exception.getMessage()); + logWriter.close(); + log.warn("[GlobalExceptionHandler] 捕获异常, 状态快照已保存到: {}", filePath); + log.warn("[GlobalExceptionHandler] 捕获异常, 异常日志已保存到: {}", EXCEPTION_LOG_PATH + exceptionData.getExceptionTime() + ".log"); + } catch (IOException e) { + log.error("[GlobalExceptionHandler] 捕获异常, 保存失败: ", e); + } + + } + + @Override + public void onFailedException(AgentLaunchFailedException exception) { + Path filepath = Paths.get(EXCEPTION_LOG_PATH, System.currentTimeMillis() + ".log"); + try { + Files.createDirectories(Path.of(EXCEPTION_LOG_PATH)); + BufferedWriter logWriter = new BufferedWriter(new FileWriter(EXCEPTION_LOG_PATH + System.currentTimeMillis() + ".log")); + logWriter.write(exception.getMessage()); + logWriter.close(); + log.warn("[GlobalExceptionHandler] 捕获启动失败异常, 异常日志已保存到: {}", filepath); + } catch (IOException ex) { + log.error("[GlobalExceptionHandler] 捕获启动失败异常, 保存失败: ", ex); + } + } + +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalException.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalException.java new file mode 100644 index 00000000..a9525c4e --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalException.java @@ -0,0 +1,26 @@ +package work.slhaf.partner.runtime.exception.pojo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.extern.slf4j.Slf4j; +import work.slhaf.partner.core.cognation.CognationCore; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import work.slhaf.partner.runtime.session.SessionManager; + +@EqualsAndHashCode(callSuper = true) +@Slf4j +@Data +public class GlobalException extends RuntimeException { + + private GlobalExceptionData data; + + public GlobalException(String message) { + super(message); + try { + this.data = new GlobalExceptionData(); + } catch (Exception e) { + log.error("[GlobalException] 捕获异常, 获取数据失败"); + } + } + +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalExceptionData.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalExceptionData.java new file mode 100644 index 00000000..eb7db433 --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/exception/pojo/GlobalExceptionData.java @@ -0,0 +1,26 @@ +package work.slhaf.partner.runtime.exception.pojo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import work.slhaf.partner.api.common.entity.PersistableObject; +import work.slhaf.partner.core.cognation.CognationCore; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; +import work.slhaf.partner.runtime.session.SessionManager; + +import java.io.Serial; +import java.util.HashMap; + +@EqualsAndHashCode(callSuper = true) +@Data +public class GlobalExceptionData extends PersistableObject { + + @Serial + private static final long serialVersionUID = 1L; + + private String exceptionMessage; + + protected HashMap context = PartnerRunningFlowContext.getInstance(); + protected SessionManager sessionManager = SessionManager.getInstance(); + protected CognationCore cognationCore = CognationCore.getInstance(); + protected Long exceptionTime = System.currentTimeMillis(); +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/PartnerInteractionAdapter.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/PartnerInteractionAdapter.java new file mode 100644 index 00000000..de0aaad7 --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/PartnerInteractionAdapter.java @@ -0,0 +1,28 @@ +package work.slhaf.partner.runtime.interaction; + +import work.slhaf.partner.api.agent.runtime.interaction.AgentInteractionAdapter; +import work.slhaf.partner.runtime.interaction.data.PartnerInputData; +import work.slhaf.partner.runtime.interaction.data.PartnerOutputData; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; + +public class PartnerInteractionAdapter extends AgentInteractionAdapter { + @Override + protected PartnerOutputData parseOutputData(PartnerRunningFlowContext outputContext) { + PartnerOutputData outputData = new PartnerOutputData(); + outputData.setCode(outputContext.getOk()); + outputData.setContent(outputContext.getCoreResponse().getString("text")); + outputData.setUserInfo(outputContext.getUserInfo()); + outputData.setDateTime(outputContext.getDateTime()); + return outputData; + } + + @Override + protected PartnerRunningFlowContext parseInputData(PartnerInputData inputData) { + PartnerRunningFlowContext context = new PartnerRunningFlowContext(); + context.setUserNickname(inputData.getUserNickName()); + context.setUserInfo(inputData.getUserInfo()); + context.setDateTime(inputData.getDateTime()); + context.setSingle(inputData.isSingle()); + return context; + } +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/gateway/AgentWebSocketServer.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/WebSocketGateway.java similarity index 68% rename from Partner-Main/src/main/java/work/slhaf/partner/gateway/AgentWebSocketServer.java rename to Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/WebSocketGateway.java index faffbbd2..c6d7f286 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/gateway/AgentWebSocketServer.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/WebSocketGateway.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.gateway; +package work.slhaf.partner.runtime.interaction; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson2.JSONObject; @@ -8,31 +8,37 @@ import org.java_websocket.WebSocket; import org.java_websocket.framing.Framedata; import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.server.WebSocketServer; +import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager; +import work.slhaf.partner.api.agent.runtime.interaction.AgentGateway; +import work.slhaf.partner.api.agent.runtime.interaction.AgentInteractionAdapter; +import work.slhaf.partner.common.config.PartnerAgentConfigManager; import work.slhaf.partner.common.thread.InteractionThreadPoolExecutor; -import work.slhaf.partner.core.interaction.agent_interface.InputReceiver; -import work.slhaf.partner.core.interaction.data.InteractionInputData; -import work.slhaf.partner.core.interaction.data.InteractionOutputData; +import work.slhaf.partner.runtime.interaction.data.PartnerInputData; +import work.slhaf.partner.runtime.interaction.data.PartnerOutputData; +import work.slhaf.partner.runtime.interaction.data.context.PartnerRunningFlowContext; -import java.io.IOException; import java.net.InetSocketAddress; import java.util.concurrent.ConcurrentHashMap; @Slf4j -public class AgentWebSocketServer extends WebSocketServer implements MessageSender { +public class WebSocketGateway extends WebSocketServer implements AgentGateway { private static final long HEARTBEAT_INTERVAL = 10_000; @ToString.Exclude - private final InputReceiver receiver; private final ConcurrentHashMap userSessions = new ConcurrentHashMap<>(); private final InteractionThreadPoolExecutor executor; // 记录最后一次收到Pong的时间 private final ConcurrentHashMap lastPongTimes = new ConcurrentHashMap<>(); - public AgentWebSocketServer(int port, InputReceiver receiver) { + public static WebSocketGateway initialize() { + PartnerAgentConfigManager configManager = (PartnerAgentConfigManager) AgentConfigManager.INSTANCE; + return new WebSocketGateway(configManager.getConfig().getPort()); + } + + private WebSocketGateway(int port) { super(new InetSocketAddress(port)); - this.receiver = receiver; this.executor = InteractionThreadPoolExecutor.getInstance(); } @@ -42,10 +48,26 @@ public class AgentWebSocketServer extends WebSocketServer implements MessageSend startHeartbeatThread(); } + @Override + public void send(PartnerOutputData outputData) { + userSessions.forEach((userInfo, webSocket) -> { + if (webSocket.isOpen()) { + webSocket.send(JSONUtil.toJsonStr(outputData)); + } else { + log.warn("用户不在线: {}", userInfo); + } + }); + } + + @Override + public AgentInteractionAdapter adapter() { + return new PartnerInteractionAdapter(); + } + private void startHeartbeatThread() { executor.execute(() -> { - while (!Thread.interrupted()){ - try{ + while (!Thread.interrupted()) { + try { Thread.sleep(HEARTBEAT_INTERVAL); checkConnections(); } catch (InterruptedException e) { @@ -105,13 +127,9 @@ public class AgentWebSocketServer extends WebSocketServer implements MessageSend @Override public void onMessage(WebSocket webSocket, String s) { - InteractionInputData inputData = JSONObject.parseObject(s, InteractionInputData.class); + PartnerInputData inputData = JSONObject.parseObject(s, PartnerInputData.class); userSessions.put(inputData.getUserInfo(), webSocket); // 注册连接 - try { - receiver.receiveInput(inputData); - } catch (IOException | ClassNotFoundException e) { - throw new RuntimeException(e); - } + receive(inputData); } @Override @@ -124,13 +142,4 @@ public class AgentWebSocketServer extends WebSocketServer implements MessageSend log.info("WebSocketServer 已启动..."); } - @Override - public void sendMessage(InteractionOutputData outputData) { - WebSocket webSocket = userSessions.get(outputData.getUserInfo()); - if (webSocket != null && webSocket.isOpen()) { - webSocket.send(JSONUtil.toJsonStr(outputData)); - } else { - log.warn("用户不在线: {}", outputData.getUserInfo()); - } - } } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/PartnerInputData.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/PartnerInputData.java new file mode 100644 index 00000000..8e3e2d43 --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/PartnerInputData.java @@ -0,0 +1,13 @@ +package work.slhaf.partner.runtime.interaction.data; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import work.slhaf.partner.api.agent.runtime.interaction.data.AgentInputData; + +@EqualsAndHashCode(callSuper = true) +@Data +public class PartnerInputData extends AgentInputData { + private String userNickName; + private String platform; + private boolean single; +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/PartnerOutputData.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/PartnerOutputData.java new file mode 100644 index 00000000..3d027bbc --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/PartnerOutputData.java @@ -0,0 +1,12 @@ +package work.slhaf.partner.runtime.interaction.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import work.slhaf.partner.api.agent.runtime.interaction.data.AgentOutputData; + +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +public class PartnerOutputData extends AgentOutputData { +} diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/InteractionContext.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/context/PartnerRunningFlowContext.java similarity index 68% rename from Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/InteractionContext.java rename to Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/context/PartnerRunningFlowContext.java index ad94a3d7..e96ee591 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/InteractionContext.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/context/PartnerRunningFlowContext.java @@ -1,11 +1,11 @@ -package work.slhaf.partner.core.interaction.data.context; +package work.slhaf.partner.runtime.interaction.data.context; import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; -import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.core.interaction.data.context.subcontext.CoreContext; -import work.slhaf.partner.core.interaction.data.context.subcontext.ModuleContext; +import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.RunningFlowContext; +import work.slhaf.partner.runtime.interaction.data.context.subcontext.CoreContext; +import work.slhaf.partner.runtime.interaction.data.context.subcontext.ModuleContext; import work.slhaf.partner.module.common.entity.AppendPromptData; import java.io.Serial; @@ -15,12 +15,12 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) @Data -public class InteractionContext extends PersistableObject { +public class PartnerRunningFlowContext extends RunningFlowContext { @Serial private static final long serialVersionUID = 1L; - private static HashMap activeContext = new HashMap<>(); + private static HashMap activeContext = new HashMap<>(); protected String userId; protected String userNickname; @@ -34,7 +34,7 @@ public class InteractionContext extends PersistableObject { protected ModuleContext moduleContext = new ModuleContext(); protected JSONObject coreResponse = new JSONObject(); - public InteractionContext() { + public PartnerRunningFlowContext() { activeContext.put(userId, this); } @@ -51,7 +51,7 @@ public class InteractionContext extends PersistableObject { appendPromptList.addFirst(appendedPrompt); } - public static HashMap getInstance() { + public static HashMap getInstance() { return activeContext; } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/CoreContext.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/context/subcontext/CoreContext.java similarity index 92% rename from Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/CoreContext.java rename to Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/context/subcontext/CoreContext.java index 6beac340..328233ad 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/CoreContext.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/context/subcontext/CoreContext.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.interaction.data.context.subcontext; +package work.slhaf.partner.runtime.interaction.data.context.subcontext; import com.alibaba.fastjson2.JSONObject; import lombok.Data; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/ModuleContext.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/context/subcontext/ModuleContext.java similarity index 89% rename from Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/ModuleContext.java rename to Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/context/subcontext/ModuleContext.java index 93d05d0a..afc91398 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/interaction/data/context/subcontext/ModuleContext.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/interaction/data/context/subcontext/ModuleContext.java @@ -1,4 +1,4 @@ -package work.slhaf.partner.core.interaction.data.context.subcontext; +package work.slhaf.partner.runtime.interaction.data.context.subcontext; import com.alibaba.fastjson2.JSONObject; import lombok.Data; diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/session/SessionManager.java b/Partner-Main/src/main/java/work/slhaf/partner/runtime/session/SessionManager.java similarity index 85% rename from Partner-Main/src/main/java/work/slhaf/partner/core/session/SessionManager.java rename to Partner-Main/src/main/java/work/slhaf/partner/runtime/session/SessionManager.java index 5347114a..aad53eb6 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/session/SessionManager.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/runtime/session/SessionManager.java @@ -1,13 +1,15 @@ -package work.slhaf.partner.core.session; +package work.slhaf.partner.runtime.session; import com.alibaba.fastjson2.JSONObject; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; +import work.slhaf.partner.api.agent.runtime.config.AgentConfigManager; import work.slhaf.partner.api.chat.pojo.Message; import work.slhaf.partner.api.chat.pojo.MetaMessage; import work.slhaf.partner.api.common.entity.PersistableObject; -import work.slhaf.partner.common.config.Config; +import work.slhaf.partner.common.config.PartnerAgentConfigManager; +import work.slhaf.partner.common.exception.ServiceLoadFailedException; import java.io.*; import java.nio.file.Files; @@ -35,14 +37,17 @@ public class SessionManager extends PersistableObject { private String currentMemoryId; private long lastUpdatedTime; - public static SessionManager getInstance() throws IOException, ClassNotFoundException { + public static SessionManager getInstance() { if (sessionManager == null) { synchronized (SessionManager.class) { if (sessionManager == null) { - String id = Config.getConfig().getAgentId(); + String id = ((PartnerAgentConfigManager) AgentConfigManager.INSTANCE).getConfig().getAgentId(); Path filePath = Paths.get(STORAGE_DIR, id + ".session"); if (Files.exists(filePath)) { sessionManager = deserialize(id); + if (sessionManager == null){ + throw new ServiceLoadFailedException("SessionManager 加载失败"); + } } else { sessionManager = new SessionManager(); sessionManager.setSingleMetaMessageMap(new HashMap<>()); @@ -109,12 +114,15 @@ public class SessionManager extends PersistableObject { } } - private static SessionManager deserialize(String id) throws IOException, ClassNotFoundException { + private static SessionManager deserialize(String id) { Path filePath = getFilePath(id); try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath.toFile()))) { SessionManager sessionManager = (SessionManager) ois.readObject(); log.info("[SessionManager] SessionManager 已从文件加载: {}", filePath); return sessionManager; + }catch (IOException | ClassNotFoundException e) { + log.error("[SessionManager] 读取异常, 读取失败: ", e); + return null; } } diff --git a/Partner-Main/src/test/java/ReflectionTest.java b/Partner-Main/src/test/java/ReflectionTest.java index 370bfc91..a734b0d0 100644 --- a/Partner-Main/src/test/java/ReflectionTest.java +++ b/Partner-Main/src/test/java/ReflectionTest.java @@ -1,6 +1,6 @@ import org.junit.jupiter.api.Test; -import work.slhaf.partner.core.cognation.common.pojo.MemoryResult; -import work.slhaf.partner.core.cognation.submodule.memory.MemoryCapability; +import work.slhaf.partner.core.common.pojo.MemoryResult; +import work.slhaf.partner.core.submodule.memory.MemoryCapability; import java.lang.reflect.Proxy; import java.util.function.Function; diff --git a/Partner-Main/src/test/java/SelfAwarenessTest.java b/Partner-Main/src/test/java/SelfAwarenessTest.java index aacba430..b03aaab0 100644 --- a/Partner-Main/src/test/java/SelfAwarenessTest.java +++ b/Partner-Main/src/test/java/SelfAwarenessTest.java @@ -4,7 +4,6 @@ import work.slhaf.partner.api.chat.ChatClient; import work.slhaf.partner.api.chat.constant.ChatConstant; import work.slhaf.partner.api.chat.pojo.ChatResponse; import work.slhaf.partner.api.chat.pojo.Message; -import work.slhaf.partner.common.config.ModelConfig; import work.slhaf.partner.common.util.ResourcesUtil; import work.slhaf.partner.module.common.model.ModelConstant; import work.slhaf.partner.module.modules.memory.selector.extractor.data.ExtractorInput; @@ -67,10 +66,9 @@ public class SelfAwarenessTest { private static ChatClient getChatClient(String modelKey) { - ModelConfig coreModel = ModelConfig.load(modelKey); - String model = coreModel.getModel(); - String baseUrl = coreModel.getBaseUrl(); - String apikey = coreModel.getApikey(); + String model = ""; + String baseUrl = ""; + String apikey = ""; ChatClient chatClient = new ChatClient(baseUrl, apikey, model); chatClient.setTop_p(0.7); chatClient.setTemperature(0.35); diff --git a/Partner-Test-Demo/src/main/java/work/slhaf/demo/AgentDemoApplication.java b/Partner-Test-Demo/src/main/java/work/slhaf/demo/AgentDemoApplication.java index 2a2b1926..fad5d6f0 100644 --- a/Partner-Test-Demo/src/main/java/work/slhaf/demo/AgentDemoApplication.java +++ b/Partner-Test-Demo/src/main/java/work/slhaf/demo/AgentDemoApplication.java @@ -1,25 +1,8 @@ package work.slhaf.demo; -import work.slhaf.partner.api.agent.Agent; -import work.slhaf.partner.api.agent.runtime.interaction.AgentGateway; -import work.slhaf.partner.api.agent.runtime.interaction.AgentInteractionAdapter; -import work.slhaf.partner.api.agent.runtime.interaction.data.AgentInputData; -import work.slhaf.partner.api.agent.runtime.interaction.data.AgentOutputData; -import work.slhaf.partner.api.agent.runtime.interaction.flow.entity.RunningFlowContext; - public class AgentDemoApplication { public static void main(String[] args) { - Agent.newAgent(AgentDemoApplication.class).setGateway(new AgentGateway() { - @Override - public void launch() { - } - - @Override - public AgentInteractionAdapter adapter() { - return null; - } - }).launch(); } } \ No newline at end of file diff --git a/Partner-Test-Demo/src/test/java/FunctionRouterTest.java b/Partner-Test-Demo/src/test/java/FunctionRouterTest.java deleted file mode 100644 index 38d8f566..00000000 --- a/Partner-Test-Demo/src/test/java/FunctionRouterTest.java +++ /dev/null @@ -1,15 +0,0 @@ -import org.junit.jupiter.api.Test; -import work.slhaf.demo.ability.CacheCapability; -import work.slhaf.demo.capability.annotation.InjectCapability; - -public class FunctionRouterTest { - - @InjectCapability - private CacheCapability cache; - - @Test - public void test(){ - cache.getUserDialogMapStr("123",111); - } - -} diff --git a/Partner-Test-Demo/src/test/java/TestA.java b/Partner-Test-Demo/src/test/java/TestA.java new file mode 100644 index 00000000..e819eaf4 --- /dev/null +++ b/Partner-Test-Demo/src/test/java/TestA.java @@ -0,0 +1,9 @@ +public class TestA { + public static void main(String[] args) { + try { + int a = 1 / 0; + }catch (Exception ignore) { + } + System.out.println("111"); + } +}