fix: preserve latest tool result batch during compaction

This commit is contained in:
123456wda
2026-08-15 20:55:42 +08:00
parent 66cfd2ca91
commit b5bd0ddfa1
6 changed files with 72 additions and 10 deletions

View File

@@ -86,6 +86,17 @@ def tool_result_message(tool_id="tool-1"):
}
def long_tool_result_batch(*tool_ids):
return {
"role": "user",
"content": [
{"type": "tool_result", "tool_use_id": tool_id,
"content": f"{tool_id}: " + "x" * 160}
for tool_id in tool_ids
],
}
def message_has_tool_use(message):
content = message.get("content")
return (
@@ -112,6 +123,33 @@ def compaction_api(module):
class CompactionToolPairTests(unittest.TestCase):
def test_micro_compact_keeps_latest_tool_result_batch(self):
for name, path in MODULES.items():
with self.subTest(name=name), tempfile.TemporaryDirectory() as tmp:
messages = [
long_tool_result_batch("old-1"),
long_tool_result_batch("old-2"),
long_tool_result_batch("old-3"),
long_tool_result_batch("old-4"),
user_text(),
long_tool_result_batch(
"latest-1", "latest-2", "latest-3", "latest-4"
),
]
module = load_module(f"{name}_micro_batch_under_test", path, Path(tmp))
compacted = compaction_api(module).micro_compact(messages)
results = {
block["tool_use_id"]: block["content"]
for message in compacted
if isinstance(message["content"], list)
for block in message["content"]
if isinstance(block, dict) and block.get("type") == "tool_result"
}
self.assertNotIn("old-1: ", results["old-1"])
for tool_id in ("old-2", "old-3", "old-4",
"latest-1", "latest-2", "latest-3", "latest-4"):
self.assertIn(f"{tool_id}: ", results[tool_id])
def test_snip_compact_keeps_head_tool_pair(self):
messages = [
user_text(),