mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 11:27:39 +00:00
test(agents): dedupe avatar and compaction fixtures
This commit is contained in:
@@ -14,14 +14,25 @@ function makeMessage(id: number, size: number): AgentMessage {
|
||||
};
|
||||
}
|
||||
|
||||
function makeMessages(count: number, size: number): AgentMessage[] {
|
||||
return Array.from({ length: count }, (_, index) => makeMessage(index + 1, size));
|
||||
}
|
||||
|
||||
function pruneLargeSimpleHistory() {
|
||||
const messages = makeMessages(4, 4000);
|
||||
const maxContextTokens = 2000; // budget is 1000 tokens (50%)
|
||||
const pruned = pruneHistoryForContextShare({
|
||||
messages,
|
||||
maxContextTokens,
|
||||
maxHistoryShare: 0.5,
|
||||
parts: 2,
|
||||
});
|
||||
return { messages, pruned, maxContextTokens };
|
||||
}
|
||||
|
||||
describe("splitMessagesByTokenShare", () => {
|
||||
it("splits messages into two non-empty parts", () => {
|
||||
const messages: AgentMessage[] = [
|
||||
makeMessage(1, 4000),
|
||||
makeMessage(2, 4000),
|
||||
makeMessage(3, 4000),
|
||||
makeMessage(4, 4000),
|
||||
];
|
||||
const messages = makeMessages(4, 4000);
|
||||
|
||||
const parts = splitMessagesByTokenShare(messages, 2);
|
||||
expect(parts.length).toBeGreaterThanOrEqual(2);
|
||||
@@ -31,14 +42,7 @@ describe("splitMessagesByTokenShare", () => {
|
||||
});
|
||||
|
||||
it("preserves message order across parts", () => {
|
||||
const messages: AgentMessage[] = [
|
||||
makeMessage(1, 4000),
|
||||
makeMessage(2, 4000),
|
||||
makeMessage(3, 4000),
|
||||
makeMessage(4, 4000),
|
||||
makeMessage(5, 4000),
|
||||
makeMessage(6, 4000),
|
||||
];
|
||||
const messages = makeMessages(6, 4000);
|
||||
|
||||
const parts = splitMessagesByTokenShare(messages, 3);
|
||||
expect(parts.flat().map((msg) => msg.timestamp)).toEqual(messages.map((msg) => msg.timestamp));
|
||||
@@ -47,19 +51,7 @@ describe("splitMessagesByTokenShare", () => {
|
||||
|
||||
describe("pruneHistoryForContextShare", () => {
|
||||
it("drops older chunks until the history budget is met", () => {
|
||||
const messages: AgentMessage[] = [
|
||||
makeMessage(1, 4000),
|
||||
makeMessage(2, 4000),
|
||||
makeMessage(3, 4000),
|
||||
makeMessage(4, 4000),
|
||||
];
|
||||
const maxContextTokens = 2000; // budget is 1000 tokens (50%)
|
||||
const pruned = pruneHistoryForContextShare({
|
||||
messages,
|
||||
maxContextTokens,
|
||||
maxHistoryShare: 0.5,
|
||||
parts: 2,
|
||||
});
|
||||
const { pruned, maxContextTokens } = pruneLargeSimpleHistory();
|
||||
|
||||
expect(pruned.droppedChunks).toBeGreaterThan(0);
|
||||
expect(pruned.keptTokens).toBeLessThanOrEqual(Math.floor(maxContextTokens * 0.5));
|
||||
@@ -67,14 +59,7 @@ describe("pruneHistoryForContextShare", () => {
|
||||
});
|
||||
|
||||
it("keeps the newest messages when pruning", () => {
|
||||
const messages: AgentMessage[] = [
|
||||
makeMessage(1, 4000),
|
||||
makeMessage(2, 4000),
|
||||
makeMessage(3, 4000),
|
||||
makeMessage(4, 4000),
|
||||
makeMessage(5, 4000),
|
||||
makeMessage(6, 4000),
|
||||
];
|
||||
const messages = makeMessages(6, 4000);
|
||||
const totalTokens = estimateMessagesTokens(messages);
|
||||
const maxContextTokens = Math.max(1, Math.floor(totalTokens * 0.5)); // budget = 25%
|
||||
const pruned = pruneHistoryForContextShare({
|
||||
@@ -110,19 +95,7 @@ describe("pruneHistoryForContextShare", () => {
|
||||
// When orphaned tool_results exist, droppedMessages may exceed
|
||||
// droppedMessagesList.length since orphans are counted but not
|
||||
// added to the list (they lack context for summarization).
|
||||
const messages: AgentMessage[] = [
|
||||
makeMessage(1, 4000),
|
||||
makeMessage(2, 4000),
|
||||
makeMessage(3, 4000),
|
||||
makeMessage(4, 4000),
|
||||
];
|
||||
const maxContextTokens = 2000; // budget is 1000 tokens (50%)
|
||||
const pruned = pruneHistoryForContextShare({
|
||||
messages,
|
||||
maxContextTokens,
|
||||
maxHistoryShare: 0.5,
|
||||
parts: 2,
|
||||
});
|
||||
const { messages, pruned } = pruneLargeSimpleHistory();
|
||||
|
||||
expect(pruned.droppedChunks).toBeGreaterThan(0);
|
||||
// Without orphaned tool_results, counts match exactly
|
||||
|
||||
Reference in New Issue
Block a user