From 81b92e293af2f893505d107ac30723fb7bed2d67 Mon Sep 17 00:00:00 2001 From: Bill Date: Sun, 2 Nov 2025 20:11:20 -0500 Subject: [PATCH] fix: make ContextInjector async to match ToolCallInterceptor protocol The interceptor __call__ method must be async and follow the proper signature: async __call__(request, handler) -> result Previous implementation was synchronous and had wrong signature, causing 'object function can't be used in await expression' error. --- agent/context_injector.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/agent/context_injector.py b/agent/context_injector.py index 0184bf4..0b05491 100644 --- a/agent/context_injector.py +++ b/agent/context_injector.py @@ -5,7 +5,7 @@ This interceptor automatically injects `signature` and `today_date` parameters into buy/sell tool calls to support concurrent multi-model simulations. """ -from typing import Any, Dict +from typing import Any, Callable, Awaitable class ContextInjector: @@ -28,23 +28,28 @@ class ContextInjector: self.signature = signature self.today_date = today_date - def __call__(self, tool_name: str, tool_input: Dict[str, Any]) -> Dict[str, Any]: + async def __call__( + self, + request: Any, # MCPToolCallRequest + handler: Callable[[Any], Awaitable[Any]] + ) -> Any: # MCPToolCallResult """ Intercept tool call and inject context parameters. Args: - tool_name: Name of the tool being called - tool_input: Original tool input parameters + request: Tool call request containing name and arguments + handler: Async callable to execute the actual tool Returns: - Modified tool input with injected context + Result from handler after injecting context """ - # Only inject for trade tools (buy/sell) - if tool_name in ["buy", "sell"]: - # Inject signature and today_date if not already provided - if "signature" not in tool_input: - tool_input["signature"] = self.signature - if "today_date" not in tool_input: - tool_input["today_date"] = self.today_date + # Inject signature and today_date for trade tools + if request.name in ["buy", "sell"]: + # Add signature and today_date to arguments if not present + if "signature" not in request.arguments: + request.arguments["signature"] = self.signature + if "today_date" not in request.arguments: + request.arguments["today_date"] = self.today_date - return tool_input + # Call the actual tool handler + return await handler(request)