mirror of
https://github.com/shareAI-lab/analysis_claude_code.git
synced 2026-09-20 12:13:38 +08:00
fix: preserve only unseen tool results
This commit is contained in:
@@ -79,6 +79,16 @@ def tool_use_message(tool_id="tool-1"):
|
||||
}
|
||||
|
||||
|
||||
def tool_use_batch(*tool_ids):
|
||||
return {
|
||||
"role": "assistant",
|
||||
"content": [
|
||||
types.SimpleNamespace(type="tool_use", id=tool_id, name="bash")
|
||||
for tool_id in tool_ids
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
def tool_result_message(tool_id="tool-1"):
|
||||
return {
|
||||
"role": "user",
|
||||
@@ -123,18 +133,26 @@ def compaction_api(module):
|
||||
|
||||
|
||||
class CompactionToolPairTests(unittest.TestCase):
|
||||
def test_micro_compact_keeps_latest_tool_result_batch(self):
|
||||
def test_micro_compact_keeps_unseen_tool_result_batch(self):
|
||||
for name, path in MODULES.items():
|
||||
with self.subTest(name=name), tempfile.TemporaryDirectory() as tmp:
|
||||
messages = [
|
||||
tool_use_message("old-1"),
|
||||
long_tool_result_batch("old-1"),
|
||||
tool_use_message("old-2"),
|
||||
long_tool_result_batch("old-2"),
|
||||
tool_use_message("old-3"),
|
||||
long_tool_result_batch("old-3"),
|
||||
tool_use_message("old-4"),
|
||||
long_tool_result_batch("old-4"),
|
||||
user_text(),
|
||||
tool_use_batch("latest-1", "latest-2", "latest-3", "latest-4"),
|
||||
long_tool_result_batch(
|
||||
"latest-1", "latest-2", "latest-3", "latest-4"
|
||||
),
|
||||
{"role": "user", "content": [
|
||||
{"type": "text", "text": "<task_notification>done</task_notification>"}
|
||||
]},
|
||||
{"role": "user", "content": "<reminder>Update your todos.</reminder>"},
|
||||
]
|
||||
module = load_module(f"{name}_micro_batch_under_test", path, Path(tmp))
|
||||
compacted = compaction_api(module).micro_compact(messages)
|
||||
@@ -150,6 +168,28 @@ class CompactionToolPairTests(unittest.TestCase):
|
||||
"latest-1", "latest-2", "latest-3", "latest-4"):
|
||||
self.assertIn(f"{tool_id}: ", results[tool_id])
|
||||
|
||||
def test_micro_compact_releases_batch_after_model_consumes_it(self):
|
||||
for name, path in MODULES.items():
|
||||
with self.subTest(name=name), tempfile.TemporaryDirectory() as tmp:
|
||||
messages = [
|
||||
tool_use_batch("seen-1", "seen-2", "seen-3", "seen-4"),
|
||||
long_tool_result_batch("seen-1", "seen-2", "seen-3", "seen-4"),
|
||||
assistant_text(),
|
||||
user_text(),
|
||||
]
|
||||
module = load_module(f"{name}_consumed_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("seen-1: ", results["seen-1"])
|
||||
for tool_id in ("seen-2", "seen-3", "seen-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