mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 08:43:02 +08:00
fix(memory): restore normalizing logic in memory core, and fix errors in MemoryCoreTest
This commit is contained in:
@@ -84,6 +84,38 @@ public class MemoryCore implements StateSerializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void normalizeMemoryUnit(MemoryUnit memoryUnit) {
|
private void normalizeMemoryUnit(MemoryUnit memoryUnit) {
|
||||||
|
if (memoryUnit.getTimestamp() == null || memoryUnit.getTimestamp() <= 0) {
|
||||||
|
memoryUnit.updateTimestamp();
|
||||||
|
}
|
||||||
|
int maxEndExclusive = memoryUnit.getConversationMessages().size();
|
||||||
|
List<MemorySlice> normalizedSlices = new ArrayList<>(memoryUnit.getSlices().size());
|
||||||
|
for (MemorySlice slice : memoryUnit.getSlices()) {
|
||||||
|
if (slice == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String sliceId = slice.getId();
|
||||||
|
if (sliceId == null || sliceId.isBlank()) {
|
||||||
|
sliceId = UUID.randomUUID().toString();
|
||||||
|
}
|
||||||
|
long sliceTimestamp = slice.getTimestamp() == null || slice.getTimestamp() <= 0
|
||||||
|
? memoryUnit.getTimestamp()
|
||||||
|
: slice.getTimestamp();
|
||||||
|
int startIndex = slice.getStartIndex() == null || slice.getStartIndex() < 0
|
||||||
|
? 0
|
||||||
|
: Math.min(slice.getStartIndex(), maxEndExclusive);
|
||||||
|
int endIndex = slice.getEndIndex() == null || slice.getEndIndex() < startIndex
|
||||||
|
? maxEndExclusive
|
||||||
|
: Math.min(slice.getEndIndex(), maxEndExclusive);
|
||||||
|
normalizedSlices.add(MemorySlice.restore(
|
||||||
|
sliceId,
|
||||||
|
startIndex,
|
||||||
|
endIndex,
|
||||||
|
slice.getSummary(),
|
||||||
|
sliceTimestamp
|
||||||
|
));
|
||||||
|
}
|
||||||
|
memoryUnit.getSlices().clear();
|
||||||
|
memoryUnit.getSlices().addAll(normalizedSlices);
|
||||||
memoryUnit.getSlices().sort(Comparator.naturalOrder());
|
memoryUnit.getSlices().sort(Comparator.naturalOrder());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import java.util.List;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
class MemoryCoreTest {
|
class MemoryCoreTest {
|
||||||
|
|
||||||
@@ -51,10 +52,7 @@ class MemoryCoreTest {
|
|||||||
|
|
||||||
MemoryCore memoryCore = new MemoryCore();
|
MemoryCore memoryCore = new MemoryCore();
|
||||||
|
|
||||||
MemorySlice slice = new MemorySlice();
|
MemorySlice slice = MemorySlice.restore("slice-1", 1, 99, null, 1L);
|
||||||
slice.setId("slice-1");
|
|
||||||
slice.setStartIndex(1);
|
|
||||||
slice.setEndIndex(99);
|
|
||||||
|
|
||||||
MemoryUnit unit = new MemoryUnit("unit-1");
|
MemoryUnit unit = new MemoryUnit("unit-1");
|
||||||
unit.getConversationMessages().addAll(List.of(
|
unit.getConversationMessages().addAll(List.of(
|
||||||
@@ -70,4 +68,25 @@ class MemoryCoreTest {
|
|||||||
assertEquals(1, savedSlice.getStartIndex());
|
assertEquals(1, savedSlice.getStartIndex());
|
||||||
assertEquals(3, savedSlice.getEndIndex());
|
assertEquals(3, savedSlice.getEndIndex());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldFillMissingTimestampsWhenSavingMemoryUnit() throws Exception {
|
||||||
|
agentId = "memory-core-test-" + UUID.randomUUID();
|
||||||
|
previousLoader = AgentConfigLoader.INSTANCE;
|
||||||
|
AgentConfigLoader.INSTANCE = testLoader(agentId);
|
||||||
|
|
||||||
|
MemoryCore memoryCore = new MemoryCore();
|
||||||
|
|
||||||
|
MemorySlice slice = MemorySlice.restore("slice-1", 0, 1, "summary", 0L);
|
||||||
|
MemoryUnit unit = new MemoryUnit("unit-1");
|
||||||
|
unit.getConversationMessages().add(new Message(Message.Character.USER, "m0"));
|
||||||
|
unit.getSlices().add(slice);
|
||||||
|
|
||||||
|
memoryCore.saveMemoryUnit(unit);
|
||||||
|
|
||||||
|
MemoryUnit savedUnit = memoryCore.getMemoryUnit("unit-1");
|
||||||
|
MemorySlice savedSlice = memoryCore.getMemorySlice("unit-1", "slice-1");
|
||||||
|
assertTrue(savedUnit.getTimestamp() > 0);
|
||||||
|
assertEquals(savedUnit.getTimestamp(), savedSlice.getTimestamp());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user