fix(graph): resolve instrument identity to stop wrong-company hallucination

Agents had no ground-truth ticker→company mapping, so the market analyst
could pattern-match a price chart to the wrong company (e.g. TOTDY read as
"TotalEnergies"), and every downstream agent inherited the bad framing.

Resolve identity once at run start via a cached, fail-open yfinance lookup
and inject company/sector/exchange into the shared instrument context that
all twelve agents consume, with an explicit do-not-substitute instruction.
Resolution runs on both the propagate() and CLI entry points.

Also replaces the bare "Continue" message-clear placeholder, which some
OpenAI-compatible providers interpreted as the user task, with a
context-anchored placeholder carrying the resolved identity and date.

#814 #888
This commit is contained in:
Yijia-Xiao committed 2026-05-30 23:56:32 +00:00
1 parent 61522e103e
commit d7b40a2a5c
18 files changed
+390 -44

No files matched your search

+10 -1
View File
@@ -21,12 +21,21 @@ class Propagator:
trade_date: str,
asset_type: str = "stock",
past_context: str = "",
instrument_context: str = "",
) -> Dict[str, Any]:
"""Create the initial state for the agent graph."""
"""Create the initial state for the agent graph.
``instrument_context`` is the deterministic ticker-identity string
resolved once at run start (see
``TradingAgentsGraph.resolve_instrument_context``). When empty, agents
fall back to ticker-only context via
``get_instrument_context_from_state``.
"""
return {
"messages": [("human", company_name)],
"company_of_interest": company_name,
"asset_type": asset_type,
"instrument_context": instrument_context,
"trade_date": str(trade_date),
"past_context": past_context,
"investment_debate_state": InvestDebateState(