fix(agent): avoid tool compaction echo loops

This commit is contained in:
chengyongru
2026-07-03 00:36:22 +08:00
committed by Xubin Ren
parent 34535b4e7c
commit aecb5fbc33
2 changed files with 4 additions and 4 deletions
+1 -1
View File
@@ -427,7 +427,7 @@ class ContextGovernor:
@staticmethod @staticmethod
def _summary_for(message: dict[str, Any]) -> str: def _summary_for(message: dict[str, Any]) -> str:
name = message.get("name", "tool") name = message.get("name", "tool")
return f"[{name} result omitted from context]" return f"[Prior {name} result compacted to fit context; the tool call already completed.]"
def _legal_history_tail( def _legal_history_tail(
self, self,
+3 -3
View File
@@ -550,7 +550,7 @@ def test_microcompact_overflow_compacts_to_low_watermark(monkeypatch):
def estimate(_provider, _model, msgs, _tools): def estimate(_provider, _model, msgs, _tools):
return sum( return sum(
100 if (content := msg.get("content")) == long_content 100 if (content := msg.get("content")) == long_content
else 1 if isinstance(content, str) and "omitted from context" in content else 1 if isinstance(content, str) and "compacted to fit context" in content
else 0 else 0
for msg in msgs for msg in msgs
if msg.get("role") == "tool" if msg.get("role") == "tool"
@@ -564,7 +564,7 @@ def test_microcompact_overflow_compacts_to_low_watermark(monkeypatch):
set(), set(),
) )
tool_msgs = [m for m in result if m.get("role") == "tool"] tool_msgs = [m for m in result if m.get("role") == "tool"]
compacted = [m for m in tool_msgs if "omitted from context" in str(m.get("content", ""))] compacted = [m for m in tool_msgs if "compacted to fit context" in str(m.get("content", ""))]
preserved = [m for m in tool_msgs if m.get("content") == long_content] preserved = [m for m in tool_msgs if m.get("content") == long_content]
assert len(compacted) == 8 assert len(compacted) == 8
@@ -609,7 +609,7 @@ def test_microcompact_compacts_newest_when_it_alone_overflows(monkeypatch):
) )
tool_msg = next(m for m in result if m.get("role") == "tool") tool_msg = next(m for m in result if m.get("role") == "tool")
assert "omitted from context" in tool_msg["content"] assert "compacted to fit context" in tool_msg["content"]
assert compacted_tool_call_ids == {"c0"} assert compacted_tool_call_ids == {"c0"}