diff --git a/tradingagents/agents/analysts/fundamentals_analyst.py b/tradingagents/agents/analysts/fundamentals_analyst.py index e20139cb..fdf005b3 100644 --- a/tradingagents/agents/analysts/fundamentals_analyst.py +++ b/tradingagents/agents/analysts/fundamentals_analyst.py @@ -1,7 +1,7 @@ from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder import time import json -from tradingagents.agents.utils.agent_utils import get_fundamentals, get_balance_sheet, get_cashflow, get_income_statement, get_insider_sentiment, get_insider_transactions +from tradingagents.agents.utils.agent_utils import get_fundamentals, get_balance_sheet, get_cashflow, get_income_statement, get_insider_sentiment, get_insider_transactions, normalize_content from tradingagents.dataflows.config import get_config @@ -53,7 +53,7 @@ def create_fundamentals_analyst(llm): report = "" if len(result.tool_calls) == 0: - report = result.content + report = normalize_content(result.content) return { "messages": [result], diff --git a/tradingagents/agents/analysts/market_analyst.py b/tradingagents/agents/analysts/market_analyst.py index c955dd76..94999237 100644 --- a/tradingagents/agents/analysts/market_analyst.py +++ b/tradingagents/agents/analysts/market_analyst.py @@ -1,7 +1,7 @@ from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder import time import json -from tradingagents.agents.utils.agent_utils import get_stock_data, get_indicators +from tradingagents.agents.utils.agent_utils import get_stock_data, get_indicators, normalize_content from tradingagents.dataflows.config import get_config @@ -75,7 +75,7 @@ Volume-Based Indicators: report = "" if len(result.tool_calls) == 0: - report = result.content + report = normalize_content(result.content) return { "messages": [result], diff --git a/tradingagents/agents/analysts/news_analyst.py b/tradingagents/agents/analysts/news_analyst.py index 03b4fae4..b5d87b96 100644 --- a/tradingagents/agents/analysts/news_analyst.py +++ b/tradingagents/agents/analysts/news_analyst.py @@ -1,7 +1,7 @@ from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder import time import json -from tradingagents.agents.utils.agent_utils import get_news, get_global_news +from tradingagents.agents.utils.agent_utils import get_news, get_global_news, normalize_content from tradingagents.dataflows.config import get_config @@ -48,7 +48,7 @@ def create_news_analyst(llm): report = "" if len(result.tool_calls) == 0: - report = result.content + report = normalize_content(result.content) return { "messages": [result], diff --git a/tradingagents/agents/analysts/social_media_analyst.py b/tradingagents/agents/analysts/social_media_analyst.py index b25712d7..57e5d1d7 100644 --- a/tradingagents/agents/analysts/social_media_analyst.py +++ b/tradingagents/agents/analysts/social_media_analyst.py @@ -1,7 +1,7 @@ from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder import time import json -from tradingagents.agents.utils.agent_utils import get_news +from tradingagents.agents.utils.agent_utils import get_news, normalize_content from tradingagents.dataflows.config import get_config @@ -49,7 +49,7 @@ def create_social_media_analyst(llm): report = "" if len(result.tool_calls) == 0: - report = result.content + report = normalize_content(result.content) return { "messages": [result], diff --git a/tradingagents/agents/utils/agent_utils.py b/tradingagents/agents/utils/agent_utils.py index 6cf294a1..c1ea38b0 100644 --- a/tradingagents/agents/utils/agent_utils.py +++ b/tradingagents/agents/utils/agent_utils.py @@ -1,5 +1,20 @@ from langchain_core.messages import HumanMessage, RemoveMessage + +def normalize_content(content): + """Normalize LLM response content to string. + + Gemini returns content as a list of dicts with 'text' keys, + while OpenAI/Anthropic return a simple string. + """ + if isinstance(content, list): + return "".join( + block.get("text", "") if isinstance(block, dict) else str(block) + for block in content + ) + return content + + # Import tools from separate utility files from tradingagents.agents.utils.core_stock_tools import ( get_stock_data