mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
refactor(memory): compute memory slice in MemoryCore
This commit is contained in:
@@ -3,18 +3,20 @@ package work.slhaf.partner.core.memory;
|
||||
import work.slhaf.partner.core.memory.pojo.MemorySlice;
|
||||
import work.slhaf.partner.core.memory.pojo.MemoryUnit;
|
||||
import work.slhaf.partner.framework.agent.factory.capability.annotation.Capability;
|
||||
import work.slhaf.partner.framework.agent.model.pojo.Message;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@Capability(value = "memory")
|
||||
public interface MemoryCapability {
|
||||
|
||||
void saveMemoryUnit(MemoryUnit memoryUnit);
|
||||
|
||||
MemoryUnit getMemoryUnit(String unitId);
|
||||
|
||||
MemorySlice getMemorySlice(String unitId, String sliceId);
|
||||
|
||||
MemoryUnit updateMemoryUnit(List<Message> chatMessages, String summary);
|
||||
|
||||
Collection<MemoryUnit> listMemoryUnits();
|
||||
|
||||
void refreshMemorySession();
|
||||
|
||||
@@ -8,6 +8,7 @@ import work.slhaf.partner.core.memory.pojo.MemorySlice;
|
||||
import work.slhaf.partner.core.memory.pojo.MemoryUnit;
|
||||
import work.slhaf.partner.framework.agent.factory.capability.annotation.CapabilityCore;
|
||||
import work.slhaf.partner.framework.agent.factory.capability.annotation.CapabilityMethod;
|
||||
import work.slhaf.partner.framework.agent.model.pojo.Message;
|
||||
import work.slhaf.partner.framework.agent.state.State;
|
||||
import work.slhaf.partner.framework.agent.state.StateSerializable;
|
||||
import work.slhaf.partner.framework.agent.state.StateValue;
|
||||
@@ -33,11 +34,25 @@ public class MemoryCore implements StateSerializable {
|
||||
}
|
||||
|
||||
@CapabilityMethod
|
||||
public void saveMemoryUnit(MemoryUnit memoryUnit) {
|
||||
public MemoryUnit updateMemoryUnit(List<Message> chatMessages, String summary) {
|
||||
memoryLock.lock();
|
||||
try {
|
||||
normalizeMemoryUnit(memoryUnit);
|
||||
memoryUnits.put(memoryUnit.getId(), memoryUnit);
|
||||
MemoryUnit unit = getMemoryUnit(memorySessionId);
|
||||
unit.updateTimestamp();
|
||||
|
||||
List<Message> conversationMessages = unit.getConversationMessages();
|
||||
int startIndex = conversationMessages.size();
|
||||
|
||||
MemorySlice memorySlice = new MemorySlice(
|
||||
startIndex,
|
||||
startIndex + chatMessages.size(),
|
||||
summary
|
||||
);
|
||||
|
||||
conversationMessages.addAll(chatMessages);
|
||||
|
||||
unit.getSlices().add(memorySlice);
|
||||
return unit;
|
||||
} finally {
|
||||
memoryLock.unlock();
|
||||
}
|
||||
|
||||
@@ -78,7 +78,6 @@ public class MemoryRuntime extends AbstractAgentModule.Standalone {
|
||||
}
|
||||
|
||||
public void recordMemory(MemoryUnit memoryUnit, String topicPath, List<String> relatedTopicPaths) {
|
||||
memoryCapability.saveMemoryUnit(memoryUnit);
|
||||
MemorySlice memorySlice = memoryUnit.getSlices().getLast();
|
||||
SliceRef sliceRef = new SliceRef(memoryUnit.getId(), memorySlice.getId());
|
||||
indexMemoryUnit(memoryUnit);
|
||||
|
||||
Reference in New Issue
Block a user