mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
fix(memory): trim persisted overlap from chat snapshot in MemoryUpdater
This commit is contained in:
@@ -24,6 +24,14 @@ class MemoryUpdaterTest {
|
||||
return (MemoryUnit) method.invoke(updater, chatMessages, summarizeResult);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static List<Message> invokeResolveChatIncrement(MemoryUpdater updater,
|
||||
List<Message> chatMessages) throws Exception {
|
||||
Method method = MemoryUpdater.class.getDeclaredMethod("resolveChatIncrement", List.class);
|
||||
method.setAccessible(true);
|
||||
return (List<Message>) method.invoke(updater, chatMessages);
|
||||
}
|
||||
|
||||
private static void setField(Object target, String fieldName, Object value) throws Exception {
|
||||
Field field = target.getClass().getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
@@ -107,6 +115,61 @@ class MemoryUpdaterTest {
|
||||
assertEquals("fresh-summary", created.getSlices().getFirst().getSummary());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldTrimPersistedOverlapFromCurrentSnapshot() throws Exception {
|
||||
StubMemoryCapability memoryCapability = new StubMemoryCapability("session-3");
|
||||
MemoryUpdater updater = new MemoryUpdater();
|
||||
setField(updater, "memoryCapability", memoryCapability);
|
||||
|
||||
MemoryUnit existingUnit = new MemoryUnit();
|
||||
existingUnit.setId("session-3");
|
||||
existingUnit.setConversationMessages(new ArrayList<>(List.of(
|
||||
message(Message.Character.USER, "m1"),
|
||||
message(Message.Character.ASSISTANT, "m2"),
|
||||
message(Message.Character.USER, "m3"),
|
||||
message(Message.Character.ASSISTANT, "m4")
|
||||
)));
|
||||
memoryCapability.saveMemoryUnit(existingUnit);
|
||||
|
||||
List<Message> increment = invokeResolveChatIncrement(
|
||||
updater,
|
||||
List.of(
|
||||
message(Message.Character.USER, "m3"),
|
||||
message(Message.Character.ASSISTANT, "m4"),
|
||||
message(Message.Character.USER, "m5"),
|
||||
message(Message.Character.ASSISTANT, "m6")
|
||||
)
|
||||
);
|
||||
|
||||
assertEquals(List.of("m5", "m6"), increment.stream().map(Message::getContent).toList());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldReturnEmptyIncrementWhenSnapshotIsFullyPersisted() throws Exception {
|
||||
StubMemoryCapability memoryCapability = new StubMemoryCapability("session-4");
|
||||
MemoryUpdater updater = new MemoryUpdater();
|
||||
setField(updater, "memoryCapability", memoryCapability);
|
||||
|
||||
MemoryUnit existingUnit = new MemoryUnit();
|
||||
existingUnit.setId("session-4");
|
||||
existingUnit.setConversationMessages(new ArrayList<>(List.of(
|
||||
message(Message.Character.USER, "m1"),
|
||||
message(Message.Character.ASSISTANT, "m2"),
|
||||
message(Message.Character.USER, "m3")
|
||||
)));
|
||||
memoryCapability.saveMemoryUnit(existingUnit);
|
||||
|
||||
List<Message> increment = invokeResolveChatIncrement(
|
||||
updater,
|
||||
List.of(
|
||||
message(Message.Character.ASSISTANT, "m2"),
|
||||
message(Message.Character.USER, "m3")
|
||||
)
|
||||
);
|
||||
|
||||
assertEquals(List.of(), increment);
|
||||
}
|
||||
|
||||
private static final class StubMemoryCapability implements MemoryCapability {
|
||||
private final String sessionId;
|
||||
private final Map<String, MemoryUnit> units = new HashMap<>();
|
||||
|
||||
Reference in New Issue
Block a user