fix(honcho): strip whitespace from conclusion and delete_id inputs

Models may send whitespace-only strings like {"conclusion": " "} which
pass bool() but create meaningless conclusions. Strip both inputs so
whitespace-only values are treated as empty.

Adds tests for whitespace-only conclusion and delete_id.

Reviewed-by: @erosika
This commit is contained in:
kshitijk4poor 2026-04-16 22:19:54 +05:30 committed by kshitij
parent 4377d7da0d
commit fe3e68f572
2 changed files with 26 additions and 2 deletions

View file

@ -1008,8 +1008,8 @@ class HonchoMemoryProvider(MemoryProvider):
return json.dumps({"result": "\n\n".join(parts) or "No context available."}) return json.dumps({"result": "\n\n".join(parts) or "No context available."})
elif tool_name == "honcho_conclude": elif tool_name == "honcho_conclude":
delete_id = args.get("delete_id") delete_id = (args.get("delete_id") or "").strip()
conclusion = args.get("conclusion", "") conclusion = args.get("conclusion", "").strip()
peer = args.get("peer", "user") peer = args.get("peer", "user")
has_delete_id = bool(delete_id) has_delete_id = bool(delete_id)

View file

@ -501,6 +501,30 @@ class TestConcludeToolDispatch:
provider._manager.create_conclusion.assert_not_called() provider._manager.create_conclusion.assert_not_called()
provider._manager.delete_conclusion.assert_not_called() provider._manager.delete_conclusion.assert_not_called()
def test_honcho_conclude_rejects_whitespace_only_conclusion(self):
"""Whitespace-only conclusion should be treated as empty."""
import json
provider = HonchoMemoryProvider()
provider._session_initialized = True
provider._session_key = "telegram:123"
provider._manager = MagicMock()
result = provider.handle_tool_call("honcho_conclude", {"conclusion": " "})
parsed = json.loads(result)
assert parsed == {"error": "Exactly one of conclusion or delete_id must be provided."}
provider._manager.create_conclusion.assert_not_called()
def test_honcho_conclude_rejects_whitespace_only_delete_id(self):
"""Whitespace-only delete_id should be treated as empty."""
import json
provider = HonchoMemoryProvider()
provider._session_initialized = True
provider._session_key = "telegram:123"
provider._manager = MagicMock()
result = provider.handle_tool_call("honcho_conclude", {"delete_id": " "})
parsed = json.loads(result)
assert parsed == {"error": "Exactly one of conclusion or delete_id must be provided."}
provider._manager.delete_conclusion.assert_not_called()
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Message chunking # Message chunking