diff --git a/tradingagents/agents/analysts/fundamentals_analyst.py b/tradingagents/agents/analysts/fundamentals_analyst.py index 6b63b1b4..3600ced6 100644 --- a/tradingagents/agents/analysts/fundamentals_analyst.py +++ b/tradingagents/agents/analysts/fundamentals_analyst.py @@ -11,6 +11,7 @@ from tradingagents.agents.utils.fundamental_data_tools import ( get_sector_relative, ) from tradingagents.agents.utils.news_data_tools import get_insider_transactions +from tradingagents.agents.utils.tool_runner import run_tool_loop from tradingagents.dataflows.config import get_config @@ -66,12 +67,9 @@ def create_fundamentals_analyst(llm): chain = prompt | llm.bind_tools(tools) - result = chain.invoke(state["messages"]) + result = run_tool_loop(chain, state["messages"], tools) - report = "" - - if len(result.tool_calls) == 0: - report = result.content + report = result.content or "" return { "messages": [result], diff --git a/tradingagents/agents/analysts/market_analyst.py b/tradingagents/agents/analysts/market_analyst.py index e5a9982d..898b9fe9 100644 --- a/tradingagents/agents/analysts/market_analyst.py +++ b/tradingagents/agents/analysts/market_analyst.py @@ -3,6 +3,7 @@ import time from tradingagents.agents.utils.core_stock_tools import get_stock_data from tradingagents.agents.utils.technical_indicators_tools import get_indicators from tradingagents.agents.utils.fundamental_data_tools import get_macro_regime +from tradingagents.agents.utils.tool_runner import run_tool_loop from tradingagents.dataflows.config import get_config @@ -73,16 +74,14 @@ Volume-Based Indicators: chain = prompt | llm.bind_tools(tools) - result = chain.invoke(state["messages"]) + result = run_tool_loop(chain, state["messages"], tools) - report = "" + report = result.content or "" macro_regime_report = "" - if len(result.tool_calls) == 0: - report = result.content - # Extract macro regime section if present - if "Macro Regime Classification" in report or "RISK-ON" in report.upper() or "RISK-OFF" in report.upper() or "TRANSITION" in report.upper(): - macro_regime_report = report + # Extract macro regime section if present + if report and ("Macro Regime Classification" in report or "RISK-ON" in report.upper() or "RISK-OFF" in report.upper() or "TRANSITION" in report.upper()): + macro_regime_report = report return { "messages": [result], diff --git a/tradingagents/agents/analysts/news_analyst.py b/tradingagents/agents/analysts/news_analyst.py index 7c29b7b4..d32590b8 100644 --- a/tradingagents/agents/analysts/news_analyst.py +++ b/tradingagents/agents/analysts/news_analyst.py @@ -1,6 +1,7 @@ from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder import json from tradingagents.agents.utils.news_data_tools import get_news, get_global_news +from tradingagents.agents.utils.tool_runner import run_tool_loop from tradingagents.dataflows.config import get_config @@ -42,12 +43,9 @@ def create_news_analyst(llm): prompt = prompt.partial(instrument_context=instrument_context) chain = prompt | llm.bind_tools(tools) - result = chain.invoke(state["messages"]) + result = run_tool_loop(chain, state["messages"], tools) - report = "" - - if len(result.tool_calls) == 0: - report = result.content + report = result.content or "" return { "messages": [result], diff --git a/tradingagents/agents/analysts/social_media_analyst.py b/tradingagents/agents/analysts/social_media_analyst.py index 9c34a5f1..caa61a41 100644 --- a/tradingagents/agents/analysts/social_media_analyst.py +++ b/tradingagents/agents/analysts/social_media_analyst.py @@ -2,6 +2,7 @@ from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder import time import json from tradingagents.agents.utils.news_data_tools import get_news +from tradingagents.agents.utils.tool_runner import run_tool_loop from tradingagents.dataflows.config import get_config @@ -43,12 +44,9 @@ def create_social_media_analyst(llm): chain = prompt | llm.bind_tools(tools) - result = chain.invoke(state["messages"]) + result = run_tool_loop(chain, state["messages"], tools) - report = "" - - if len(result.tool_calls) == 0: - report = result.content + report = result.content or "" return { "messages": [result],