tenseleyflow/loader / fad3bf8

Browse files

Drop large mutation call history

Authored by espadonne
SHA
fad3bf842045f913c43cd0a4d5d4b55cde0b3c0c
Parents
8056705
Tree
bd36a31

2 changed files

StatusFile+-
M src/loader/runtime/session.py 9 18
M tests/test_session_state.py 3 9
src/loader/runtime/session.pymodified
@@ -39,36 +39,23 @@ _UNSET = object()
3939
 _REQUEST_TOOL_PAYLOAD_SUMMARY_THRESHOLD = 240
4040
 
4141
 
42
-def _request_text_line_count(value: str) -> int:
43
-    """Count lines for one request-projected text payload."""
44
-
45
-    if not value:
46
-        return 0
47
-    return value.count("\n") + 1
48
-
49
-
50
-def _project_request_tool_call(tool_call: ToolCall) -> ToolCall:
42
+def _project_request_tool_call(tool_call: ToolCall) -> ToolCall | None:
5143
     """Project one historical tool call into a lighter request-time form."""
5244
 
5345
     arguments = dict(tool_call.arguments)
5446
     if tool_call.name == "write":
5547
         content = arguments.get("content")
5648
         if isinstance(content, str) and len(content) > _REQUEST_TOOL_PAYLOAD_SUMMARY_THRESHOLD:
57
-            arguments.pop("content", None)
58
-            arguments["content_chars"] = len(content)
59
-            arguments["content_lines"] = _request_text_line_count(content)
49
+            return None
6050
     elif tool_call.name == "edit":
6151
         for key in ("old_string", "new_string"):
6252
             value = arguments.get(key)
6353
             if isinstance(value, str) and len(value) > _REQUEST_TOOL_PAYLOAD_SUMMARY_THRESHOLD:
64
-                arguments.pop(key, None)
65
-                arguments[f"{key}_chars"] = len(value)
66
-                arguments[f"{key}_lines"] = _request_text_line_count(value)
54
+                return None
6755
     elif tool_call.name == "patch":
6856
         hunks = arguments.get("hunks")
6957
         if isinstance(hunks, list) and hunks:
70
-            arguments.pop("hunks", None)
71
-            arguments["hunk_count"] = len(hunks)
58
+            return None
7259
     return ToolCall(
7360
         id=tool_call.id,
7461
         name=tool_call.name,
@@ -81,7 +68,11 @@ def _project_request_message(message: Message) -> Message:
8168
 
8269
     if message.role is not Role.ASSISTANT or not message.tool_calls:
8370
         return message
84
-    projected_tool_calls = [_project_request_tool_call(tool_call) for tool_call in message.tool_calls]
71
+    projected_tool_calls = [
72
+        projected
73
+        for tool_call in message.tool_calls
74
+        if (projected := _project_request_tool_call(tool_call)) is not None
75
+    ]
8576
     if projected_tool_calls == message.tool_calls:
8677
         return message
8778
     return Message(
tests/test_session_state.pymodified
@@ -159,7 +159,7 @@ def test_session_compaction_persists_summary_and_recent_messages(temp_dir: Path)
159159
     ]
160160
 
161161
 
162
-def test_build_request_messages_trims_large_mutation_payloads_from_history(
162
+def test_build_request_messages_omits_large_mutation_tool_calls_from_history(
163163
     temp_dir: Path,
164164
 ) -> None:
165165
     large_html = "<html>" + ("x" * 400) + "</html>"
@@ -199,14 +199,8 @@ def test_build_request_messages_trims_large_mutation_payloads_from_history(
199199
 
200200
     request_messages = session.build_request_messages()
201201
 
202
-    assert request_messages[2].tool_calls[0].arguments["file_path"].endswith("index.html")
203
-    assert "content" not in request_messages[2].tool_calls[0].arguments
204
-    assert request_messages[2].tool_calls[0].arguments["content_chars"] == len(large_html)
205
-    assert request_messages[2].tool_calls[0].arguments["content_lines"] == 1
206
-    assert "old_string" not in request_messages[2].tool_calls[1].arguments
207
-    assert "new_string" not in request_messages[2].tool_calls[1].arguments
208
-    assert request_messages[2].tool_calls[1].arguments["old_string_chars"] == len(old_block)
209
-    assert request_messages[2].tool_calls[1].arguments["new_string_chars"] == len(new_block)
202
+    assert request_messages[2].tool_calls == []
203
+    assert request_messages[2].content == "I'll write the first files now."
210204
     assert session.messages[1].tool_calls[0].arguments["content"] == large_html
211205
     assert session.messages[1].tool_calls[1].arguments["old_string"] == old_block
212206
     assert session.messages[1].tool_calls[1].arguments["new_string"] == new_block