From 33ffd782c42849c5976b9c3c3416191f04f0eb4c Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Tue, 14 Apr 2026 12:40:56 +0800 Subject: [PATCH] refactor(cognition): remove duplicate recent chat block building logic, refresh which in cognition core uniformly --- .../core/cognition/CognitionCapability.java | 2 + .../partner/core/cognition/CognitionCore.java | 40 +++++++++++++------ .../communication/CommunicationProducer.java | 24 +++-------- 3 files changed, 34 insertions(+), 32 deletions(-) diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/CognitionCapability.java b/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/CognitionCapability.java index 1d4264ca..0f3674e6 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/CognitionCapability.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/CognitionCapability.java @@ -19,6 +19,8 @@ public interface CognitionCapability { void rollChatMessagesWithSnapshot(int snapshotSize, int retainDivisor); + void refreshRecentChatMessagesContext(); + Lock getMessageLock(); } diff --git a/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/CognitionCore.java b/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/CognitionCore.java index 5cacfa3c..0e0e4928 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/CognitionCore.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/core/cognition/CognitionCore.java @@ -99,6 +99,32 @@ public class CognitionCore implements StateSerializable { return messageLock; } + @CapabilityMethod + public void refreshRecentChatMessagesContext() { + ContextBlock block = new ContextBlock( + new BlockContent("recent_chat_messages", "communication_producer") { + @Override + protected void fillXml(@NotNull Document document, @NotNull Element root) { + appendRepeatedElements(document, root, "chat_message", resolveRecentChatMessages()); + } + }, + Set.of(ContextBlock.VisibleDomain.COGNITION), + 100, + 10, + 4 + ); + contextWorkspace.register(block); + } + + private List resolveRecentChatMessages() { + int exclusiveEnd = Math.max(chatMessages.size() - 1, 0); + if (exclusiveEnd == 0) { + return List.of(); + } + int start = Math.max(exclusiveEnd - 6, 0); + return chatMessages.subList(start, exclusiveEnd); + } + @Override public @NotNull Path statePath() { return Path.of("core", "cognition.json"); @@ -128,19 +154,7 @@ public class CognitionCore implements StateSerializable { this.chatMessages.add(new Message(Message.Character.fromValue(role), content)); } - ContextBlock block = new ContextBlock( - new BlockContent("recent_chat_messages", "communication_producer") { - @Override - protected void fillXml(@NotNull Document document, @NotNull Element root) { - appendRepeatedElements(document, root, "chat_message", List.of(chatMessages.subList(chatMessages.size() - 7, chatMessages.size() - 1))); - } - }, - Set.of(ContextBlock.VisibleDomain.COGNITION), - 100, - 10, - 4 - ); - contextWorkspace.register(block); + refreshRecentChatMessagesContext(); } @Override diff --git a/Partner-Core/src/main/java/work/slhaf/partner/module/communication/CommunicationProducer.java b/Partner-Core/src/main/java/work/slhaf/partner/module/communication/CommunicationProducer.java index f81c9097..8f65d477 100644 --- a/Partner-Core/src/main/java/work/slhaf/partner/module/communication/CommunicationProducer.java +++ b/Partner-Core/src/main/java/work/slhaf/partner/module/communication/CommunicationProducer.java @@ -21,7 +21,10 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.StringWriter; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @EqualsAndHashCode(callSuper = true) @@ -71,24 +74,7 @@ public class CommunicationProducer extends AbstractAgentModule.Running chatMessages = cognitionCapability.getChatMessages(); - appendRepeatedElements(document, root, "chat_message", List.of(chatMessages.subList(chatMessages.size() - 7, chatMessages.size() - 1))); - } - }, - Set.of(ContextBlock.VisibleDomain.COGNITION), - 100, - 5, - 4 - ); - cognitionCapability.contextWorkspace().register(block); + cognitionCapability.refreshRecentChatMessagesContext(); } private List buildChatMessages(PartnerRunningFlowContext runningFlowContext) {