test(compaction): cover staged pruning
This commit is contained in:
@@ -30,6 +30,20 @@ describe("splitMessagesByTokenShare", () => {
|
|||||||
expect(parts[1]?.length).toBeGreaterThan(0);
|
expect(parts[1]?.length).toBeGreaterThan(0);
|
||||||
expect(parts.flat().length).toBe(messages.length);
|
expect(parts.flat().length).toBe(messages.length);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
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 parts = splitMessagesByTokenShare(messages, 3);
|
||||||
|
expect(parts.flat().map((msg) => msg.timestamp)).toEqual(messages.map((msg) => msg.timestamp));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("pruneHistoryForContextShare", () => {
|
describe("pruneHistoryForContextShare", () => {
|
||||||
@@ -53,6 +67,29 @@ describe("pruneHistoryForContextShare", () => {
|
|||||||
expect(pruned.messages.length).toBeGreaterThan(0);
|
expect(pruned.messages.length).toBeGreaterThan(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
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 totalTokens = estimateMessagesTokens(messages);
|
||||||
|
const maxContextTokens = Math.max(1, Math.floor(totalTokens * 0.5)); // budget = 25%
|
||||||
|
const pruned = pruneHistoryForContextShare({
|
||||||
|
messages,
|
||||||
|
maxContextTokens,
|
||||||
|
maxHistoryShare: 0.5,
|
||||||
|
parts: 2,
|
||||||
|
});
|
||||||
|
|
||||||
|
const keptIds = pruned.messages.map((msg) => msg.timestamp);
|
||||||
|
const expectedSuffix = messages.slice(-keptIds.length).map((msg) => msg.timestamp);
|
||||||
|
expect(keptIds).toEqual(expectedSuffix);
|
||||||
|
});
|
||||||
|
|
||||||
it("keeps history when already within budget", () => {
|
it("keeps history when already within budget", () => {
|
||||||
const messages: AgentMessage[] = [makeMessage(1, 1000)];
|
const messages: AgentMessage[] = [makeMessage(1, 1000)];
|
||||||
const maxContextTokens = 2000;
|
const maxContextTokens = 2000;
|
||||||
|
|||||||
Reference in New Issue
Block a user