From 0f69409d6f235c749409afa5d01d0ec01d5885de Mon Sep 17 00:00:00 2001 From: gnarayan1 Date: Sun, 14 Dec 2025 09:34:21 -0600 Subject: [PATCH] Fix recursion limit and implement caching - Enforce iteration limit in screening and pump detection to prevent infinite loops. - Add fallback logic and handle dangling tool calls in parsers. - Implement file-based caching for stock data in y_finance.py. - Restore detailed logging in run_full_system.py for better visibility. --- agent_architecture.html | 107 ++++++++++++++++++ agent_architecture.mmd | 71 ++++++++++++ agent_architecture.png | Bin 0 -> 18036 bytes agent_architecture_mermaid.png | Bin 0 -> 112311 bytes inspect_graph.py | 48 ++++++++ run_full_system.py | 94 +++++++++++++++ .../agents/screeners/screening_agent.py | 30 ++--- tradingagents/dataflows/y_finance.py | 42 +++++-- tradingagents/graph/conditional_logic.py | 40 +++++++ tradingagents/graph/parsers.py | 103 +++++++++++++++++ tradingagents/graph/setup.py | 26 ++++- visualize_graph.py | 75 ++++++++++++ 12 files changed, 598 insertions(+), 38 deletions(-) create mode 100644 agent_architecture.html create mode 100644 agent_architecture.mmd create mode 100644 agent_architecture.png create mode 100644 agent_architecture_mermaid.png create mode 100644 inspect_graph.py create mode 100644 run_full_system.py create mode 100644 tradingagents/graph/parsers.py create mode 100644 visualize_graph.py diff --git a/agent_architecture.html b/agent_architecture.html new file mode 100644 index 00000000..bef503fe --- /dev/null +++ b/agent_architecture.html @@ -0,0 +1,107 @@ + + + + + + + Agent Architecture Visualization + + + + + +

Agent Architecture

+
+ --- + config: + flowchart: + curve: linear + --- + graph TD; + __start__(

__start__

) + Market\20Analyst(Market Analyst) + Msg\20Clear\20Market(Msg Clear Market) + tools_market(tools_market) + Social\20Analyst(Social Analyst) + Msg\20Clear\20Social(Msg Clear Social) + tools_social(tools_social) + News\20Analyst(News Analyst) + Msg\20Clear\20News(Msg Clear News) + tools_news(tools_news) + Fundamentals\20Analyst(Fundamentals Analyst) + Msg\20Clear\20Fundamentals(Msg Clear Fundamentals) + tools_fundamentals(tools_fundamentals) + Screening\20Agent(Screening Agent) + tools_screening(tools_screening) + Screening\20Parser(Screening Parser) + Pump\20Detection\20Agent(Pump Detection Agent) + tools_pump_detection(tools_pump_detection) + Pump\20Parser(Pump Parser) + Bull\20Researcher(Bull Researcher) + Bear\20Researcher(Bear Researcher) + Research\20Manager(Research Manager) + Trader(Trader) + Risky\20Analyst(Risky Analyst) + Neutral\20Analyst(Neutral Analyst) + Safe\20Analyst(Safe Analyst) + Risk\20Judge(Risk Judge) + __end__(

__end__

) + Bear\20Researcher -.-> Bull\20Researcher; + Bear\20Researcher -.-> Research\20Manager; + Bull\20Researcher -.-> Bear\20Researcher; + Bull\20Researcher -.-> Research\20Manager; + Fundamentals\20Analyst -.-> Msg\20Clear\20Fundamentals; + Fundamentals\20Analyst -.-> tools_fundamentals; + Market\20Analyst -.-> Msg\20Clear\20Market; + Market\20Analyst -.-> tools_market; + Msg\20Clear\20Fundamentals --> Bull\20Researcher; + Msg\20Clear\20Market --> Social\20Analyst; + Msg\20Clear\20News --> Fundamentals\20Analyst; + Msg\20Clear\20Social --> News\20Analyst; + Neutral\20Analyst -.-> Risk\20Judge; + Neutral\20Analyst -.-> Risky\20Analyst; + News\20Analyst -.-> Msg\20Clear\20News; + News\20Analyst -.-> tools_news; + Research\20Manager --> Trader; + Risky\20Analyst -.-> Risk\20Judge; + Risky\20Analyst -.-> Safe\20Analyst; + Safe\20Analyst -.-> Neutral\20Analyst; + Safe\20Analyst -.-> Risk\20Judge; + Screening\20Agent -.  Msg Clear Market  .-> Screening\20Parser; + Screening\20Agent -.-> tools_screening; + Screening\20Parser --> Market\20Analyst; + Social\20Analyst -.-> Msg\20Clear\20Social; + Social\20Analyst -.-> tools_social; + Trader --> Risky\20Analyst; + __start__ --> Screening\20Agent; + tools_fundamentals --> Fundamentals\20Analyst; + tools_market --> Market\20Analyst; + tools_news --> News\20Analyst; + tools_screening --> Screening\20Agent; + tools_social --> Social\20Analyst; + Risk\20Judge --> __end__; + classDef default fill:#f2f0ff,line-height:1.2 + classDef first fill-opacity:0 + classDef last fill:#bfb6fc +
+ + + \ No newline at end of file diff --git a/agent_architecture.mmd b/agent_architecture.mmd new file mode 100644 index 00000000..c5cdbf9d --- /dev/null +++ b/agent_architecture.mmd @@ -0,0 +1,71 @@ +--- +config: + flowchart: + curve: linear +--- +graph TD; + __start__(

__start__

) + Market\20Analyst(Market Analyst) + Msg\20Clear\20Market(Msg Clear Market) + tools_market(tools_market) + Social\20Analyst(Social Analyst) + Msg\20Clear\20Social(Msg Clear Social) + tools_social(tools_social) + News\20Analyst(News Analyst) + Msg\20Clear\20News(Msg Clear News) + tools_news(tools_news) + Fundamentals\20Analyst(Fundamentals Analyst) + Msg\20Clear\20Fundamentals(Msg Clear Fundamentals) + tools_fundamentals(tools_fundamentals) + Screening\20Agent(Screening Agent) + tools_screening(tools_screening) + Screening\20Parser(Screening Parser) + Pump\20Detection\20Agent(Pump Detection Agent) + tools_pump_detection(tools_pump_detection) + Pump\20Parser(Pump Parser) + Bull\20Researcher(Bull Researcher) + Bear\20Researcher(Bear Researcher) + Research\20Manager(Research Manager) + Trader(Trader) + Risky\20Analyst(Risky Analyst) + Neutral\20Analyst(Neutral Analyst) + Safe\20Analyst(Safe Analyst) + Risk\20Judge(Risk Judge) + __end__(

__end__

) + Bear\20Researcher -.-> Bull\20Researcher; + Bear\20Researcher -.-> Research\20Manager; + Bull\20Researcher -.-> Bear\20Researcher; + Bull\20Researcher -.-> Research\20Manager; + Fundamentals\20Analyst -.-> Msg\20Clear\20Fundamentals; + Fundamentals\20Analyst -.-> tools_fundamentals; + Market\20Analyst -.-> Msg\20Clear\20Market; + Market\20Analyst -.-> tools_market; + Msg\20Clear\20Fundamentals --> Bull\20Researcher; + Msg\20Clear\20Market --> Social\20Analyst; + Msg\20Clear\20News --> Fundamentals\20Analyst; + Msg\20Clear\20Social --> News\20Analyst; + Neutral\20Analyst -.-> Risk\20Judge; + Neutral\20Analyst -.-> Risky\20Analyst; + News\20Analyst -.-> Msg\20Clear\20News; + News\20Analyst -.-> tools_news; + Research\20Manager --> Trader; + Risky\20Analyst -.-> Risk\20Judge; + Risky\20Analyst -.-> Safe\20Analyst; + Safe\20Analyst -.-> Neutral\20Analyst; + Safe\20Analyst -.-> Risk\20Judge; + Screening\20Agent -.  Msg Clear Market  .-> Screening\20Parser; + Screening\20Agent -.-> tools_screening; + Screening\20Parser --> Market\20Analyst; + Social\20Analyst -.-> Msg\20Clear\20Social; + Social\20Analyst -.-> tools_social; + Trader --> Risky\20Analyst; + __start__ --> Screening\20Agent; + tools_fundamentals --> Fundamentals\20Analyst; + tools_market --> Market\20Analyst; + tools_news --> News\20Analyst; + tools_screening --> Screening\20Agent; + tools_social --> Social\20Analyst; + Risk\20Judge --> __end__; + classDef default fill:#f2f0ff,line-height:1.2 + classDef first fill-opacity:0 + classDef last fill:#bfb6fc diff --git a/agent_architecture.png b/agent_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..e6455716bd3d6ffa75e87e56d4b2e0445fe04639 GIT binary patch literal 18036 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 literal 0 HcmV?d00001 diff --git a/agent_architecture_mermaid.png b/agent_architecture_mermaid.png new file mode 100644 index 0000000000000000000000000000000000000000..3b9232aeb2e190e1b8a1f7a1d955ad1690229c97 GIT binary patch literal 112311 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%0D_+|6{Oi}Re@pnFg#Dw@ z;mK4Bu=}#yj>id-C#_AkAm|*(% zllMyv8I701-Rd~%=qM*dJu{Pw5fo@_VUCLthrvpcz}$T5UA6@|9Ommno+ z=sRBucEe~_Mo~$3?N-8G#$7xUnY%aFTttrQ^t`d&bGQ9qP(cV+!PTz2np+7>Au5L0 zKa?v6c~SLA$fVJ;GGwFp5j?Hx%@otwcqQx!m*{T^J?oh?3%lNayg3vz?nI&HI+_S zo%vEL@|jy9P?^v5<=#CfYW1_-XGG1^XXMMcpeIDMCDGDGQ|H{NlWeb~92@W$|MWU% z|4-^jtw5(Uw{%jAtkawJSSNi{ofkBx(vs$Q7ewbi(lEOHRGRu&?BM%tgMocqvX-XB zC2Ho>?qltve0sl*YU}7w2g)-{{>cXKmn{~@CE f_%@==+(Hl#diVVL6)8@ Callable: system_message = ( f"You are a Market Screening Agent analyzing markets on {trade_date}. " - "Your goal is to identify 'Hidden Gem' stocks before they make a massive move." + "Your goal is to identify 'Hidden Gem' stocks efficiently." "\n\n" - "**Screening Strategy:**" + "**Instructions:**" "\n" - "1. **Scan**: Use `get_market_movers` to find 'Most Active' or 'Top Losers' (potential reversals)" + "1. **Check Market Movers**: Use `get_market_movers` first." "\n" - "2. **Social**: Use `get_trending_social` to find stocks buzzing on social platforms" + "2. **Quick Check**: If you see a promising ticker, verify it with ONE other tool (e.g., `get_trending_social` or `get_indicators`)." "\n" - "3. **Catalyst**: Use `get_earnings_calendar` to find upcoming catalysts" + "3. **Decide Quickly**: Do not over-analyze. You have a STRICT limit of 3 tool calls. Once you have a candidate, STOP calling tools and output the recommendation." "\n" - "4. **Smart Money**: Use `get_insider_transactions` to identify insider buying signals" - "\n" - "5. **Technicals**: Use `get_indicators` (RSI, MACD) to check for oversold conditions" - "\n\n" - "**Analysis Criteria:**" - "\n" - "Look for stocks that are:" - "\n" - "- Active but haven't spiked yet" - "\n" - "- Beaten down (in losers) with insider buying" - "\n" - "- Oversold (RSI < 30) for reversal potential" - "\n" - "- With upcoming catalysts (earnings, events)" - "\n" - "- With high social media buzz" + "4. **Emergency**: If you are unsure, just pick the top gainer from market movers. You MUST output a ticker." "\n\n" "**Deliverable:**" "\n" - "Analyze the market and recommend 1-3 ticker candidates for deeper analysis. " "Return candidates as a comma-separated list in the final line (e.g., 'NVDA, TSLA, AAPL')." + "If you have enough information, output the list immediately." ) prompt = ChatPromptTemplate.from_messages( diff --git a/tradingagents/dataflows/y_finance.py b/tradingagents/dataflows/y_finance.py index 21a3dee7..5702cd88 100644 --- a/tradingagents/dataflows/y_finance.py +++ b/tradingagents/dataflows/y_finance.py @@ -10,15 +10,38 @@ def get_YFin_data_online( start_date: Annotated[str, "Start date in yyyy-mm-dd format"], end_date: Annotated[str, "End date in yyyy-mm-dd format"], ): + from .config import get_config + import pandas as pd + + config = get_config() + os.makedirs(config["data_cache_dir"], exist_ok=True) + + # Caching logic + cache_file = os.path.join( + config["data_cache_dir"], + f"{symbol.upper()}-YFin-OHLCV-{start_date}-{end_date}.csv" + ) + + data = None + if os.path.exists(cache_file): + print(f"DEBUG: Loading cached stock data for {symbol} from {cache_file}") + try: + data = pd.read_csv(cache_file, index_col=0, parse_dates=True) + except Exception as e: + print(f"WARN: Failed to load cache: {e}") + + if data is None: + print(f"DEBUG: Fetching online stock data for {symbol}...") + # Create ticker object + ticker = yf.Ticker(symbol.upper()) - datetime.strptime(start_date, "%Y-%m-%d") - datetime.strptime(end_date, "%Y-%m-%d") - - # Create ticker object - ticker = yf.Ticker(symbol.upper()) - - # Fetch historical data for the specified date range - data = ticker.history(start=start_date, end=end_date) + # Fetch historical data for the specified date range + # auto_adjust=True handles splits/dividends better usually + data = ticker.history(start=start_date, end=end_date, auto_adjust=True) + + # Save to cache if we got data + if not data.empty: + data.to_csv(cache_file) # Check if data is empty if data.empty: @@ -31,9 +54,10 @@ def get_YFin_data_online( data.index = data.index.tz_localize(None) # Round numerical values to 2 decimal places for cleaner display - numeric_columns = ["Open", "High", "Low", "Close", "Adj Close"] + numeric_columns = ["Open", "High", "Low", "Close", "Adj Close", "Volume"] for col in numeric_columns: if col in data.columns: + # Keep Volume as int if possible, but rounding safe data[col] = data[col].round(2) # Convert DataFrame to CSV string diff --git a/tradingagents/graph/conditional_logic.py b/tradingagents/graph/conditional_logic.py index dc28c9b2..f6eed539 100644 --- a/tradingagents/graph/conditional_logic.py +++ b/tradingagents/graph/conditional_logic.py @@ -19,6 +19,46 @@ class ConditionalLogic: return "tools_market" return "Msg Clear Market" + def should_continue_screening(self, state: AgentState): + """Determine if screening should continue.""" + messages = state["messages"] + last_message = messages[-1] + + # Check for tool call limit to prevent recursion errors + tool_call_count = 0 + for m in reversed(messages): + if m.type == "human": + break + if m.type == "ai" and m.tool_calls: + tool_call_count += 1 + + if last_message.tool_calls: + if tool_call_count > 3: + print(f"--- Screening Agent Tool Limit Reached ({tool_call_count}) ---") + return "Msg Clear Market" # Force move to Parser + return "tools_screening" + return "Msg Clear Market" # Re-using this to map to Parser in setup.py + + def should_continue_pump_detection(self, state: AgentState): + """Determine if pump detection should continue.""" + messages = state["messages"] + last_message = messages[-1] + + # Check for tool call limit + tool_call_count = 0 + for m in reversed(messages): + if m.type == "human": + break + if m.type == "ai" and m.tool_calls: + tool_call_count += 1 + + if last_message.tool_calls: + if tool_call_count > 3: + print(f"--- Pump Discovery Tool Limit Reached ({tool_call_count}) ---") + return "Msg Clear Market" # Force move to Parser + return "tools_pump_detection" + return "Msg Clear Market" # Re-using this to map to Parser in setup.py + def should_continue_social(self, state: AgentState): """Determine if social media analysis should continue.""" messages = state["messages"] diff --git a/tradingagents/graph/parsers.py b/tradingagents/graph/parsers.py new file mode 100644 index 00000000..7b13efd5 --- /dev/null +++ b/tradingagents/graph/parsers.py @@ -0,0 +1,103 @@ +import re +from langchain_core.messages import HumanMessage, ToolMessage +from tradingagents.agents.utils.agent_states import AgentState + +def parse_screening_output(state: AgentState): + """ + Parses the output from the Screening Agent to extract the selected ticker. + Updates the 'company_of_interest' in the state. + """ + messages = state["messages"] + last_message = messages[-1] + content = last_message.content + + # Validation: If last message has tool calls, we MUST append a ToolMessage to satisfy the API + params = {} + if last_message.tool_calls: + print("Screening Parser: Handling dangling tool call...") + tool_messages = [] + for tool_call in last_message.tool_calls: + tool_messages.append( + ToolMessage( + tool_call_id=tool_call["id"], + content="Screening limit reached. Process terminated." + ) + ) + # We need to return these messages to update the state + # But we also need to return the ticker. + # LangGraph merges dictionary updates. + # But wait, we can just return {"messages": tool_messages, "company_of_interest": ...} + params["messages"] = tool_messages + + + # Simple regex to find tickers (uppercase letters, 2-5 chars) + # This assumes the agent explicitly mentions the ticker in a standard format + tickers = re.findall(r'\b[A-Z]{2,5}\b', content) + + if tickers: + ticker = tickers[0] + print(f"Screening Parser: Found ticker {ticker}") + params["company_of_interest"] = ticker + return params + + # Fallback: check previous AI messages if the last one was empty (e.g. tool call) + print("Screening Parser: No ticker in last message, checking history...") + for m in reversed(messages): + if m.type == "ai" and m.content: + tickers = re.findall(r'\b[A-Z]{2,5}\b', m.content) + if tickers: + ticker = tickers[0] + print(f"Screening Parser: Found ticker in history: {ticker}") + params["company_of_interest"] = ticker + return params + + # Ultimate Fallback to prevent crash + print("Screening Parser: No ticker found in history. Defaulting to NVDA.") + params["company_of_interest"] = "NVDA" + return params + +def parse_pump_detection_output(state: AgentState): + """ + Parses the output from the Pump Detection Agent to extract the selected ticker. + Updates the 'company_of_interest' in the state. + """ + messages = state["messages"] + last_message = messages[-1] + content = last_message.content + + params = {} + if last_message.tool_calls: + print("Pump Parser: Handling dangling tool call...") + tool_messages = [] + for tool_call in last_message.tool_calls: + tool_messages.append( + ToolMessage( + tool_call_id=tool_call["id"], + content="Pump detection limit reached. Process terminated." + ) + ) + params["messages"] = tool_messages + + # Similar logic for pump detection + tickers = re.findall(r'\b[A-Z]{2,5}\b', content) + + if tickers: + ticker = tickers[0] + print(f"Pump Parser: Found ticker {ticker}") + params["company_of_interest"] = ticker + return params + + # Fallback checking history + print("Pump Parser: No ticker in last message, checking history...") + for m in reversed(messages): + if m.type == "ai" and m.content: + tickers = re.findall(r'\b[A-Z]{2,5}\b', m.content) + if tickers: + ticker = tickers[0] + print(f"Pump Parser: Found ticker in history: {ticker}") + params["company_of_interest"] = ticker + return params + + print("Pump Parser: No ticker found. Defaulting to GME.") + params["company_of_interest"] = "GME" + return params diff --git a/tradingagents/graph/setup.py b/tradingagents/graph/setup.py index 6472c6c3..04f1b8f5 100644 --- a/tradingagents/graph/setup.py +++ b/tradingagents/graph/setup.py @@ -9,6 +9,7 @@ from tradingagents.agents import * from tradingagents.agents.utils.agent_states import AgentState from .conditional_logic import ConditionalLogic +from .parsers import parse_screening_output, parse_pump_detection_output class GraphSetup: @@ -137,10 +138,12 @@ class GraphSetup: if screening_node: workflow.add_node("Screening Agent", screening_node) workflow.add_node("tools_screening", tool_nodes["screening"]) + workflow.add_node("Screening Parser", parse_screening_output) if pump_detection_node: workflow.add_node("Pump Detection Agent", pump_detection_node) workflow.add_node("tools_pump_detection", tool_nodes["pump_detection"]) + workflow.add_node("Pump Parser", parse_pump_detection_output) workflow.add_node("Bull Researcher", bull_researcher_node) workflow.add_node("Bear Researcher", bear_researcher_node) @@ -153,28 +156,39 @@ class GraphSetup: # Define edges # Determine starting node + first_analyst = selected_analysts[0] + first_analyst_node = f"{first_analyst.capitalize()} Analyst" + if include_screening: # Start with screening agent workflow.add_edge(START, "Screening Agent") workflow.add_conditional_edges( "Screening Agent", - self.conditional_logic.should_continue_market, - ["tools_screening", "Bull Researcher"], + self.conditional_logic.should_continue_screening, + { + "tools_screening": "tools_screening", + "Msg Clear Market": "Screening Parser", # Re-using logic, but mapping to parser + } ) workflow.add_edge("tools_screening", "Screening Agent") + workflow.add_edge("Screening Parser", first_analyst_node) + elif include_pump_detection: # Start with pump detection workflow.add_edge(START, "Pump Detection Agent") workflow.add_conditional_edges( "Pump Detection Agent", - self.conditional_logic.should_continue_market, - ["tools_pump_detection", "Bull Researcher"], + self.conditional_logic.should_continue_pump_detection, + { + "tools_pump_detection": "tools_pump_detection", + "Msg Clear Market": "Pump Parser", # Re-using logic + } ) workflow.add_edge("tools_pump_detection", "Pump Detection Agent") + workflow.add_edge("Pump Parser", first_analyst_node) else: # Start with the first analyst - first_analyst = selected_analysts[0] - workflow.add_edge(START, f"{first_analyst.capitalize()} Analyst") + workflow.add_edge(START, first_analyst_node) # Connect analysts in sequence for i, analyst_type in enumerate(selected_analysts): diff --git a/visualize_graph.py b/visualize_graph.py new file mode 100644 index 00000000..8bd47132 --- /dev/null +++ b/visualize_graph.py @@ -0,0 +1,75 @@ +import os +from unittest.mock import MagicMock +from langchain_openai import ChatOpenAI +from tradingagents.graph.setup import GraphSetup +from tradingagents.graph.conditional_logic import ConditionalLogic + +def visualize_graph(): + """ + Visualizes the agentic architecture graph using LangGraph's draw_mermaid_png. + """ + # Mock dependencies + mock_llm = MagicMock(spec=ChatOpenAI) + mock_memory = MagicMock() + mock_tools = { + "market": MagicMock(), + "social": MagicMock(), + "news": MagicMock(), + "fundamentals": MagicMock(), + "screening": MagicMock(), + "pump_detection": MagicMock(), + } + + conditional_logic = ConditionalLogic() + + # Initialize GraphSetup + graph_setup = GraphSetup( + quick_thinking_llm=mock_llm, + deep_thinking_llm=mock_llm, + tool_nodes=mock_tools, + bull_memory=mock_memory, + bear_memory=mock_memory, + trader_memory=mock_memory, + invest_judge_memory=mock_memory, + risk_manager_memory=mock_memory, + conditional_logic=conditional_logic, + ) + + # Setup graph with all analysts and optional agents to see the full architecture + workflow = graph_setup.setup_graph( + selected_analysts=["market", "social", "news", "fundamentals"], + include_screening=True, + include_pump_detection=True + ) + + graph = workflow.get_graph() + + # 1. Generate Mermaid Code + try: + mermaid_code = graph.draw_mermaid() + with open("agent_architecture.mmd", "w") as f: + f.write(mermaid_code) + print("Saved Mermaid code to agent_architecture.mmd") + except Exception as e: + print(f"Failed to generate Mermaid code: {e}") + + # 2. Generate Mermaid PNG (existing) + try: + png_data = graph.draw_mermaid_png() + with open("agent_architecture_mermaid.png", "wb") as f: + f.write(png_data) + print("Saved Mermaid PNG to agent_architecture_mermaid.png") + except Exception as e: + print(f"Failed to generate Mermaid PNG: {e}") + + # 3. Generate Graphviz PNG (if available) + try: + png_data = graph.draw_png() + with open("agent_architecture_graphviz.png", "wb") as f: + f.write(png_data) + print("Saved Graphviz PNG to agent_architecture_graphviz.png") + except Exception as e: + print(f"Failed to generate Graphviz PNG: {e}") + +if __name__ == "__main__": + visualize_graph()