fix: preserve compaction split after trailing tool results

This commit is contained in:
Ayaan Zaidi
2026-04-04 22:34:05 +05:30
parent 3f7bd3bd7b
commit cde1e2d3a1
2 changed files with 15 additions and 3 deletions

View File

@@ -171,6 +171,20 @@ describe("splitMessagesByTokenShare", () => {
expect(parts.flat().length).toBe(messages.length);
});
it("splits before a trailing completed tool-call pair", () => {
const messages: AgentMessage[] = [
makeMessage(1, 4000),
makeAssistantToolCall(2, "call_tail", "y".repeat(200)),
makeToolResult(3, "call_tail", "r".repeat(4000)),
];
const parts = splitMessagesByTokenShare(messages, 2);
expect(parts.length).toBe(2);
expect(parts[0]?.map((m) => m.timestamp)).toEqual([1]);
expect(parts[1]?.map((m) => m.timestamp)).toEqual([2, 3]);
});
it("does not block splits after aborted tool-call assistants", () => {
const messages: AgentMessage[] = [
makeAssistantToolCall(1, "call_abort", "y".repeat(4000), "aborted"),

View File

@@ -188,9 +188,7 @@ export function splitMessagesByTokenShare(
chunks.length < normalizedParts - 1 &&
currentTokens > targetTokens
) {
chunks.push(current);
current = [];
currentTokens = 0;
splitCurrentAtPendingBoundary();
pendingChunkStartIndex = null;
}
}