mirror of
https://github.com/shareAI-lab/analysis_claude_code.git
synced 2026-09-20 12:13:38 +08:00
fix: preserve latest tool result batch during compaction
This commit is contained in:
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user