From 999a6a8d7e65bdfcda3435886a72fc6ac80597e6 Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Wed, 15 Apr 2026 17:24:22 +0800 Subject: [PATCH] refactor(dialog): remove legacy data class --- .../module/communication/DialogRolling.java | 30 +++++------ .../summarizer/MultiSummarizer.java | 35 +++++++++++++ .../summarizer/SingleSummarizer.java | 10 ++-- .../updater/summarizer/MultiSummarizer.java | 52 ------------------- .../updater/summarizer/TotalSummarizer.java | 32 ------------ .../summarizer/entity/SummarizeInput.java | 14 ----- .../summarizer/entity/SummarizeResult.java | 12 ----- .../communication/DialogRollingTest.java | 33 ++---------- 8 files changed, 55 insertions(+), 163 deletions(-) create mode 100644 Partner-Core/src/main/java/work/slhaf/partner/module/communication/summarizer/MultiSummarizer.java rename Partner-Core/src/main/java/work/slhaf/partner/module/{memory/updater => communication}/summarizer/SingleSummarizer.java (86%) delete mode 100644 Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/MultiSummarizer.java delete mode 100644 Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/TotalSummarizer.java delete mode 100644 Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/entity/SummarizeInput.java delete mode 100644 Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/entity/SummarizeResult.java diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/communication/DialogRolling.java b/Partner-Core/src/main/java/work/slhaf/partner/module/communication/DialogRolling.java index 1bb187c5..2fb94d71 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/communication/DialogRolling.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/communication/DialogRolling.java @@ -26,18 +26,14 @@ import work.slhaf.partner.framework.agent.factory.component.annotation.InjectMod import work.slhaf.partner.framework.agent.model.pojo.Message; import work.slhaf.partner.framework.agent.support.Result; import work.slhaf.partner.module.action.scheduler.ActionScheduler; -import work.slhaf.partner.module.memory.runtime.MemoryRuntime; -import work.slhaf.partner.module.memory.updater.summarizer.MultiSummarizer; -import work.slhaf.partner.module.memory.updater.summarizer.SingleSummarizer; -import work.slhaf.partner.module.memory.updater.summarizer.entity.SummarizeInput; -import work.slhaf.partner.module.memory.updater.summarizer.entity.SummarizeResult; +import work.slhaf.partner.module.communication.summarizer.MultiSummarizer; +import work.slhaf.partner.module.communication.summarizer.SingleSummarizer; import work.slhaf.partner.runtime.PartnerRunningFlowContext; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Set; -import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicBoolean; @EqualsAndHashCode(callSuper = true) @@ -47,8 +43,10 @@ public class DialogRolling extends AbstractAgentModule.Running triggerRolling(false)); + actionCapability.getExecutor(ActionCore.ExecutorType.VIRTUAL).execute(() -> triggerRolling(false)); } private void tryAutoRolling() { @@ -163,11 +158,10 @@ public class DialogRolling extends AbstractAgentModule.Running chatSnapshot, int rollingSize, int retainDivisor) { - SummarizeInput summarizeInput = new SummarizeInput(chatSnapshot, memoryRuntime.getTopicTree()); - singleSummarizer.execute(summarizeInput.getChatMessages()); - Result summarizeResult = multiSummarizer.execute(summarizeInput); - String summary = summarizeResult.fold( - SummarizeResult::getSummary, + singleSummarizer.execute(chatSnapshot); + Result summaryResult = multiSummarizer.execute(chatSnapshot); + String summary = summaryResult.fold( + value -> value, exp -> "no summary, due to exception" ); if (summary.isBlank()) { diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/communication/summarizer/MultiSummarizer.java b/Partner-Core/src/main/java/work/slhaf/partner/module/communication/summarizer/MultiSummarizer.java new file mode 100644 index 00000000..06c2e101 --- /dev/null +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/communication/summarizer/MultiSummarizer.java @@ -0,0 +1,35 @@ +package work.slhaf.partner.module.communication.summarizer; + +import cn.hutool.json.JSONUtil; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.jetbrains.annotations.NotNull; +import work.slhaf.partner.framework.agent.factory.component.abstracts.AbstractAgentModule; +import work.slhaf.partner.framework.agent.factory.component.annotation.InjectModule; +import work.slhaf.partner.framework.agent.model.ActivateModel; +import work.slhaf.partner.framework.agent.model.pojo.Message; +import work.slhaf.partner.framework.agent.support.Result; +import work.slhaf.partner.module.memory.runtime.MemoryRuntime; + +import java.util.List; + +@EqualsAndHashCode(callSuper = true) +@Data +public class MultiSummarizer extends AbstractAgentModule.Sub, Result> implements ActivateModel { + + @InjectModule + private MemoryRuntime memoryRuntime; + + @Override + protected @NotNull Result doExecute(List messages) { + return chat( + List.of(new Message(Message.Character.USER, JSONUtil.toJsonPrettyStr(messages))) + ); + } + + @NotNull + @Override + public String modelKey() { + return "multi_summarizer"; + } +} diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/SingleSummarizer.java b/Partner-Core/src/main/java/work/slhaf/partner/module/communication/summarizer/SingleSummarizer.java similarity index 86% rename from Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/SingleSummarizer.java rename to Partner-Core/src/main/java/work/slhaf/partner/module/communication/summarizer/SingleSummarizer.java index 348dfd17..edd5493d 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/SingleSummarizer.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/communication/summarizer/SingleSummarizer.java @@ -1,7 +1,8 @@ -package work.slhaf.partner.module.memory.updater.summarizer; +package work.slhaf.partner.module.communication.summarizer; import lombok.Data; import lombok.EqualsAndHashCode; +import org.jetbrains.annotations.NotNull; import work.slhaf.partner.core.action.ActionCapability; import work.slhaf.partner.core.action.ActionCore; import work.slhaf.partner.framework.agent.factory.capability.annotation.InjectCapability; @@ -30,7 +31,6 @@ public class SingleSummarizer extends AbstractAgentModule.Sub, Voi @Override protected Void doExecute(List chatMessages) { - log.debug("[MemorySummarizer] 长文本摘要开始..."); CountDownLatch latch = new CountDownLatch(chatMessages.size()); for (int i = 0; i < chatMessages.size(); i++) { Message chatMessage = chatMessages.get(i); @@ -56,14 +56,10 @@ public class SingleSummarizer extends AbstractAgentModule.Sub, Voi latch.await(); } catch (InterruptedException ignored) { } - log.debug("[MemorySummarizer] 长文本摘要结束"); return null; } - private String singleExecute(String primaryContent) { - return chat(List.of(new Message(Message.Character.USER, primaryContent))).getOrThrow(); - } - + @NotNull @Override public String modelKey() { return "single_summarizer"; diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/MultiSummarizer.java b/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/MultiSummarizer.java deleted file mode 100644 index 84674784..00000000 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/MultiSummarizer.java +++ /dev/null @@ -1,52 +0,0 @@ -package work.slhaf.partner.module.memory.updater.summarizer; - -import cn.hutool.json.JSONUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.jetbrains.annotations.NotNull; -import work.slhaf.partner.framework.agent.factory.component.abstracts.AbstractAgentModule; -import work.slhaf.partner.framework.agent.factory.component.annotation.InjectModule; -import work.slhaf.partner.framework.agent.model.ActivateModel; -import work.slhaf.partner.framework.agent.model.pojo.Message; -import work.slhaf.partner.framework.agent.support.Result; -import work.slhaf.partner.module.memory.runtime.MemoryRuntime; -import work.slhaf.partner.module.memory.updater.summarizer.entity.SummarizeInput; -import work.slhaf.partner.module.memory.updater.summarizer.entity.SummarizeResult; - -import java.util.ArrayList; -import java.util.List; - -@EqualsAndHashCode(callSuper = true) -@Data -public class MultiSummarizer extends AbstractAgentModule.Sub> implements ActivateModel { - - @InjectModule - private MemoryRuntime memoryRuntime; - - @Override - protected @NotNull Result doExecute(SummarizeInput input) { - return formattedChat( - List.of(new Message(Message.Character.USER, JSONUtil.toJsonPrettyStr(input))), - SummarizeResult.class - ).onSuccess(this::fix); - } - - private void fix(SummarizeResult result) { - if (result == null || result.getTopicPath() == null || result.getTopicPath().isEmpty()) { - return; - } - String topicPath = memoryRuntime.fixTopicPath(result.getTopicPath()); - List relatedTopicPath = new ArrayList<>(); - for (String s : result.getRelatedTopicPath()) { - relatedTopicPath.add(memoryRuntime.fixTopicPath(s)); - } - result.setTopicPath(topicPath); - result.setRelatedTopicPath(relatedTopicPath); - } - - @NotNull - @Override - public String modelKey() { - return "multi_summarizer"; - } -} diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/TotalSummarizer.java b/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/TotalSummarizer.java deleted file mode 100644 index 8abe138c..00000000 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/TotalSummarizer.java +++ /dev/null @@ -1,32 +0,0 @@ -package work.slhaf.partner.module.memory.updater.summarizer; - -import cn.hutool.json.JSONUtil; -import lombok.Data; -import lombok.EqualsAndHashCode; -import work.slhaf.partner.framework.agent.factory.component.abstracts.AbstractAgentModule; -import work.slhaf.partner.framework.agent.model.ActivateModel; -import work.slhaf.partner.framework.agent.model.pojo.Message; - -import java.util.HashMap; -import java.util.List; - -@EqualsAndHashCode(callSuper = true) -@Data -public class TotalSummarizer extends AbstractAgentModule.Sub, String> implements ActivateModel { - protected String doExecute(HashMap singleMemorySummary) { - return formattedChat( - List.of(new Message(Message.Character.USER, JSONUtil.toJsonPrettyStr(singleMemorySummary))), - SummaryContent.class - ).getOrThrow().getContent(); - } - - @Override - public String modelKey() { - return "total_summarizer"; - } - - @lombok.Data - private static class SummaryContent { - private String content; - } -} diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/entity/SummarizeInput.java b/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/entity/SummarizeInput.java deleted file mode 100644 index b34884fc..00000000 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/entity/SummarizeInput.java +++ /dev/null @@ -1,14 +0,0 @@ -package work.slhaf.partner.module.memory.updater.summarizer.entity; - -import lombok.AllArgsConstructor; -import lombok.Data; -import work.slhaf.partner.framework.agent.model.pojo.Message; - -import java.util.List; - -@AllArgsConstructor -@Data -public class SummarizeInput { - private List chatMessages; - private String topicTree; -} diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/entity/SummarizeResult.java b/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/entity/SummarizeResult.java deleted file mode 100644 index 26c7c034..00000000 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/memory/updater/summarizer/entity/SummarizeResult.java +++ /dev/null @@ -1,12 +0,0 @@ -package work.slhaf.partner.module.memory.updater.summarizer.entity; - -import lombok.Data; - -import java.util.List; - -@Data -public class SummarizeResult { - private String summary; - private String topicPath; - private List relatedTopicPath; -} diff --git a/Partner-Core/src/test/java/work/slhaf/partner/module/communication/DialogRollingTest.java b/Partner-Core/src/test/java/work/slhaf/partner/module/communication/DialogRollingTest.java index 039522b3..e19c41a4 100644 --- a/Partner-Core/src/test/java/work/slhaf/partner/module/communication/DialogRollingTest.java +++ b/Partner-Core/src/test/java/work/slhaf/partner/module/communication/DialogRollingTest.java @@ -9,10 +9,8 @@ import work.slhaf.partner.core.memory.pojo.MemorySlice; import work.slhaf.partner.core.memory.pojo.MemoryUnit; import work.slhaf.partner.framework.agent.model.pojo.Message; import work.slhaf.partner.framework.agent.support.Result; -import work.slhaf.partner.module.memory.runtime.MemoryRuntime; -import work.slhaf.partner.module.memory.updater.summarizer.MultiSummarizer; -import work.slhaf.partner.module.memory.updater.summarizer.SingleSummarizer; -import work.slhaf.partner.module.memory.updater.summarizer.entity.SummarizeResult; +import work.slhaf.partner.module.communication.summarizer.MultiSummarizer; +import work.slhaf.partner.module.communication.summarizer.SingleSummarizer; import java.lang.reflect.Field; import java.nio.file.Path; @@ -39,31 +37,18 @@ class DialogRollingTest { return new Message(role, content); } - private static SummarizeResult summarizeResult(String summary, String topicPath, List relatedTopicPath) { - SummarizeResult result = new SummarizeResult(); - result.setSummary(summary); - result.setTopicPath(topicPath); - result.setRelatedTopicPath(relatedTopicPath); - return result; - } - @Test void shouldDelegateMemoryUpdateToCapability() throws Exception { String sessionId = "dialog-rolling-" + UUID.randomUUID(); StubMemoryCapability memoryCapability = new StubMemoryCapability(sessionId); DialogRolling dialogRolling = new DialogRolling(); - MemoryRuntime memoryRuntime = Mockito.mock(MemoryRuntime.class); MultiSummarizer multiSummarizer = Mockito.mock(MultiSummarizer.class); SingleSummarizer singleSummarizer = Mockito.mock(SingleSummarizer.class); setField(dialogRolling, "memoryCapability", memoryCapability); - setField(dialogRolling, "memoryRuntime", memoryRuntime); setField(dialogRolling, "multiSummarizer", multiSummarizer); setField(dialogRolling, "singleSummarizer", singleSummarizer); - when(memoryRuntime.getTopicTree()).thenReturn("topic-tree"); - when(multiSummarizer.execute(Mockito.any())).thenReturn(Result.success( - summarizeResult("new-summary", "topic/main", List.of("topic/related")) - )); + when(multiSummarizer.execute(Mockito.any())).thenReturn(Result.success("new-summary")); MemoryUnit existingUnit = new MemoryUnit(sessionId); existingUnit.getConversationMessages().addAll(List.of( @@ -98,18 +83,13 @@ class DialogRollingTest { String sessionId = "dialog-rolling-" + UUID.randomUUID(); StubMemoryCapability memoryCapability = new StubMemoryCapability(sessionId); DialogRolling dialogRolling = new DialogRolling(); - MemoryRuntime memoryRuntime = Mockito.mock(MemoryRuntime.class); MultiSummarizer multiSummarizer = Mockito.mock(MultiSummarizer.class); SingleSummarizer singleSummarizer = Mockito.mock(SingleSummarizer.class); setField(dialogRolling, "memoryCapability", memoryCapability); - setField(dialogRolling, "memoryRuntime", memoryRuntime); setField(dialogRolling, "multiSummarizer", multiSummarizer); setField(dialogRolling, "singleSummarizer", singleSummarizer); - when(memoryRuntime.getTopicTree()).thenReturn("topic-tree"); - when(multiSummarizer.execute(Mockito.any())).thenReturn(Result.success( - summarizeResult("fresh-summary", "topic/root", List.of()) - )); + when(multiSummarizer.execute(Mockito.any())).thenReturn(Result.success("fresh-summary")); RollingResult rollingResult = dialogRolling.buildRollingResult(List.of( message(Message.Character.USER, "first"), @@ -158,16 +138,13 @@ class DialogRollingTest { String sessionId = "dialog-rolling-" + UUID.randomUUID(); StubMemoryCapability memoryCapability = new StubMemoryCapability(sessionId); DialogRolling dialogRolling = new DialogRolling(); - MemoryRuntime memoryRuntime = Mockito.mock(MemoryRuntime.class); MultiSummarizer multiSummarizer = Mockito.mock(MultiSummarizer.class); SingleSummarizer singleSummarizer = Mockito.mock(SingleSummarizer.class); setField(dialogRolling, "memoryCapability", memoryCapability); - setField(dialogRolling, "memoryRuntime", memoryRuntime); setField(dialogRolling, "multiSummarizer", multiSummarizer); setField(dialogRolling, "singleSummarizer", singleSummarizer); - when(memoryRuntime.getTopicTree()).thenReturn("topic-tree"); - when(multiSummarizer.execute(Mockito.any())).thenReturn(Result.success(summarizeResult(" ", "topic/root", List.of()))); + when(multiSummarizer.execute(Mockito.any())).thenReturn(Result.success(" ")); RollingResult rollingResult = dialogRolling.buildRollingResult(List.of( message(Message.Character.USER, "u1"),