Salvaged from PR #1470 by adavyas. Core fix: Honcho tool calls in a multi-session gateway could route to the wrong session because honcho_tools.py relied on process-global state. Now threads session context through the call chain: AIAgent._invoke_tool() → handle_function_call() → registry.dispatch() → handler **kw → _resolve_session_context() Changes: - Add _resolve_session_context() to prefer per-call context over globals - Plumb honcho_manager + honcho_session_key through handle_function_call - Add sync_honcho=False to run_conversation() for synthetic flush turns - Pass honcho_session_key through gateway memory flush lifecycle - Harden gateway PID detection when /proc cmdline is unreadable - Make interrupt test scripts import-safe for pytest-xdist - Wrap BibTeX examples in Jekyll raw blocks for docs build - Fix thread-order-dependent assertion in client lifecycle test - Expand Honcho docs: session isolation, lifecycle, routing internals Dropped from original PR: - Indentation change in _create_request_openai_client that would move client creation inside the lock (causes unnecessary contention) Co-authored-by: adavyas <adavyas@users.noreply.github.com>
37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
"""Regression tests for per-call Honcho tool session routing."""
|
|
|
|
import json
|
|
from unittest.mock import MagicMock
|
|
|
|
from tools import honcho_tools
|
|
|
|
|
|
class TestHonchoToolSessionContext:
|
|
def setup_method(self):
|
|
self.orig_manager = honcho_tools._session_manager
|
|
self.orig_key = honcho_tools._session_key
|
|
|
|
def teardown_method(self):
|
|
honcho_tools._session_manager = self.orig_manager
|
|
honcho_tools._session_key = self.orig_key
|
|
|
|
def test_explicit_call_context_wins_over_module_global_state(self):
|
|
global_manager = MagicMock()
|
|
global_manager.get_peer_card.return_value = ["global"]
|
|
explicit_manager = MagicMock()
|
|
explicit_manager.get_peer_card.return_value = ["explicit"]
|
|
|
|
honcho_tools.set_session_context(global_manager, "global-session")
|
|
|
|
result = json.loads(
|
|
honcho_tools._handle_honcho_profile(
|
|
{},
|
|
honcho_manager=explicit_manager,
|
|
honcho_session_key="explicit-session",
|
|
)
|
|
)
|
|
|
|
assert result == {"result": ["explicit"]}
|
|
explicit_manager.get_peer_card.assert_called_once_with("explicit-session")
|
|
global_manager.get_peer_card.assert_not_called()
|