From dbd8f0141c6d0b4c91ba1a7637d0d9f0dec018d3 Mon Sep 17 00:00:00 2001 From: Bill Date: Sun, 2 Nov 2025 19:39:43 -0500 Subject: [PATCH] fix: initialize agent properly in API mode Fixed critical bug where ModelDayExecutor._initialize_agent() created a BaseAgent but never called agent.initialize(), leaving self.model=None. This caused 'NoneType' object has no attribute 'bind' error when run_trading_session() tried to create the langchain agent. Changes: - Made _initialize_agent() async - Added await agent.initialize() call - Updated call site to await async function Now properly initializes MCP client, tools, and AI model before executing trading sessions, matching the working CLI mode pattern. --- api/model_day_executor.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/api/model_day_executor.py b/api/model_day_executor.py index 9e9e503..95620e9 100644 --- a/api/model_day_executor.py +++ b/api/model_day_executor.py @@ -126,7 +126,7 @@ class ModelDayExecutor: os.environ["RUNTIME_ENV_PATH"] = self.runtime_config_path # Initialize agent - agent = self._initialize_agent() + agent = await self._initialize_agent() # Run trading session logger.info(f"Running trading session for {self.model_sig} on {self.date}") @@ -209,7 +209,7 @@ class ModelDayExecutor: """Execute model-day simulation (sync entry point).""" return self.execute_sync() - def _initialize_agent(self): + async def _initialize_agent(self): """ Initialize trading agent with config. @@ -259,6 +259,9 @@ class ModelDayExecutor: # - Database initialization is handled by JobManager # - File-based position tracking is only for standalone/CLI mode + # Initialize MCP client and AI model + await agent.initialize() + return agent def _create_trading_session(self, cursor) -> int: