TradingAgents: Multi-Agents LLM Financial Trading Framework
This report presents the forensic synthetic code analysis of TauricResearch/TradingAgents, a Python project with 92,869 GitHub stars. SynthScan v2.0 examined 17,323 lines of code across 141 source files, recording 611 pattern matches distributed across 16 syntactic categories. The overall adjusted score of 48.8 places this repository in the Strong AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 611 distinct pattern matches across 16 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_yfinance_stale_ohlcv_guard.py | 39 | def test_recent_prior_trading_day_is_accepted(self): | CODE |
| LOW⚡ | tests/test_yfinance_stale_ohlcv_guard.py | 43 | def test_year_old_row_is_rejected_with_detail(self): | CODE |
| LOW⚡ | tests/test_yfinance_stale_ohlcv_guard.py | 51 | def test_empty_frame_is_left_to_caller(self): | CODE |
| LOW⚡ | tests/test_yfinance_stale_ohlcv_guard.py | 57 | def test_long_holiday_gap_within_threshold_is_accepted(self): | CODE |
| LOW⚡ | tests/test_yfinance_stale_ohlcv_guard.py | 63 | def test_get_yfin_data_online_raises_on_stale_frame(self): | CODE |
| LOW | tests/test_yfinance_stale_ohlcv_guard.py | 92 | def test_router_sentinel_surfaces_stale_reason(self): | CODE |
| LOW | tests/test_market_toolnode.py | 14 | def test_market_toolnode_can_execute_verified_snapshot(): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 38 | def test_minimal_required_fields(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 47 | def test_optional_fields_included_when_present(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 278 | def test_falls_back_to_freetext_when_structured_unavailable(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 295 | def test_header_contains_band_and_score(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 306 | def test_header_contains_confidence(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 315 | def test_narrative_preserved_in_output(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 325 | def test_all_six_bands_render(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 333 | def test_score_out_of_range_rejected(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 382 | def test_sentiment_report_also_in_messages(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 389 | def test_prompt_contains_ticker(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 394 | def test_falls_back_to_freetext_when_structured_unavailable(self): | CODE |
| LOW⚡ | tests/test_structured_agents.py | 401 | def test_falls_back_to_freetext_when_structured_call_fails(self): | CODE |
| LOW | tests/test_structured_agents.py | 62 | def test_optional_fields_omitted_when_absent(self): | CODE |
| LOW | tests/test_structured_agents.py | 76 | def test_trader_nullish_strings_coerce_to_none(self): | CODE |
| LOW | tests/test_structured_agents.py | 87 | def test_trader_real_numeric_string_still_parses(self): | CODE |
| LOW | tests/test_structured_agents.py | 91 | def test_pm_nullish_price_target_coerces_to_none(self): | CODE |
| LOW | tests/test_structured_agents.py | 156 | def test_invoke_structured_falls_back_when_result_is_none(): | CODE |
| LOW | tests/test_structured_agents.py | 175 | def test_structured_path_produces_rendered_markdown(self): | CODE |
| LOW | tests/test_structured_agents.py | 194 | def test_prompt_includes_investment_plan(self): | CODE |
| LOW | tests/test_structured_agents.py | 203 | def test_falls_back_to_freetext_when_structured_unavailable(self): | CODE |
| LOW | tests/test_structured_agents.py | 253 | def test_structured_path_produces_rendered_markdown(self): | CODE |
| LOW | tests/test_structured_agents.py | 350 | def _structured_sentiment_llm(captured: dict, report: SentimentReport | None = None): | CODE |
| LOW | tests/test_structured_agents.py | 370 | def test_structured_path_produces_rendered_markdown(self): | CODE |
| LOW | tests/test_no_data_handling.py | 34 | def test_empty_download_raises_and_does_not_cache(self): | CODE |
| LOW | tests/test_no_data_handling.py | 51 | def test_no_data_from_all_vendors_returns_sentinel(self): | CODE |
| LOW | tests/test_no_data_handling.py | 67 | def test_unconfigured_fallback_does_not_mask_no_data(self): | CODE |
| LOW⚡ | tests/test_minimax.py | 28 | def test_reasoning_split_sent_via_extra_body_not_top_level(self): | CODE |
| LOW⚡ | tests/test_minimax.py | 35 | def test_non_reasoning_minimax_does_not_inject_reasoning_split(self): | CODE |
| LOW | tests/test_minimax.py | 68 | def test_schema_still_bound_as_tool(self): | CODE |
| LOW⚡ | tests/test_google_thinking_level.py | 27 | def test_flash_passes_thinking_level_through(level): | CODE |
| LOW⚡ | tests/test_google_thinking_level.py | 33 | def test_pro_remaps_minimal_to_low(): | CODE |
| LOW⚡ | tests/test_google_thinking_level.py | 43 | def test_no_thinking_level_is_omitted(): | CODE |
| LOW | tests/test_news_analyst_prompt.py | 15 | def test_get_news_takes_ticker_not_query(): | CODE |
| LOW | tests/test_news_analyst_prompt.py | 22 | def test_news_prompt_matches_get_news_signature(): | CODE |
| LOW⚡ | tests/test_risk_router_path_map.py | 33 | def test_router_return_always_routable(latest_speaker): | CODE |
| LOW⚡ | tests/test_risk_router_path_map.py | 40 | def test_router_terminates_at_round_limit(): | CODE |
| LOW⚡ | tests/test_risk_router_path_map.py | 47 | def test_path_map_covers_full_router_range(): | CODE |
| LOW | tests/test_risk_router_path_map.py | 66 | def test_debate_router_return_always_routable(current_response): | CODE |
| LOW | tests/test_risk_router_path_map.py | 73 | def test_debate_path_map_covers_full_router_range(): | CODE |
| LOW⚡ | tests/test_ollama_base_url.py | 39 | def test_resolver_returns_default_when_env_unset(monkeypatch): | CODE |
| LOW⚡ | tests/test_ollama_base_url.py | 45 | def test_resolver_returns_env_when_set(monkeypatch): | CODE |
| LOW⚡ | tests/test_ollama_base_url.py | 51 | def test_resolver_evaluation_is_call_time(monkeypatch): | CODE |
| LOW⚡ | tests/test_ollama_base_url.py | 59 | def test_resolver_does_not_affect_other_providers(monkeypatch): | CODE |
| LOW⚡ | tests/test_ollama_base_url.py | 67 | def test_client_get_llm_picks_up_env(monkeypatch): | CODE |
| LOW⚡ | tests/test_ollama_base_url.py | 76 | def test_explicit_base_url_overrides_env(monkeypatch): | CODE |
| LOW | tests/test_ollama_base_url.py | 93 | def test_cli_dropdown_uses_env(monkeypatch): | CODE |
| LOW | tests/test_ollama_base_url.py | 106 | def test_cli_dropdown_default_when_unset(monkeypatch): | CODE |
| LOW | tests/test_ollama_base_url.py | 120 | def test_confirm_endpoint_shows_default(monkeypatch, capsys): | CODE |
| LOW | tests/test_ollama_base_url.py | 131 | def test_confirm_endpoint_marks_env_origin(monkeypatch, capsys): | CODE |
| LOW | tests/test_ollama_base_url.py | 141 | def test_confirm_endpoint_warns_on_missing_scheme(monkeypatch, capsys): | CODE |
| LOW⚡ | tests/test_ollama_base_url.py | 152 | def test_confirm_endpoint_warns_on_non_default_port_remote(monkeypatch, capsys): | CODE |
| LOW⚡ | tests/test_ollama_base_url.py | 162 | def test_confirm_endpoint_quiet_on_local_no_port(monkeypatch, capsys): | CODE |
| LOW⚡ | tests/test_ollama_base_url.py | 172 | def test_ollama_model_labels_no_local_suffix(): | CODE |
| 344 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_structured_agents.py | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_structured_agents.py | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_structured_agents.py | 288 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_structured_agents.py | 290 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_structured_agents.py | 125 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_structured_agents.py | 127 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_structured_agents.py | 216 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_structured_agents.py | 218 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_signal_processing.py | 16 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_signal_processing.py | 18 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_signal_processing.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_signal_processing.py | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 27 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 52 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 182 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 184 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_deepseek_reasoning.py | 228 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_deepseek_reasoning.py | 118 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_deepseek_reasoning.py | 120 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 106 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 108 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 383 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 385 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 669 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 671 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 801 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_memory_log.py | 803 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_memory_log.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_memory_log.py | 32 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 39 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 41 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 68 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 116 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 118 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 183 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 185 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 253 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tradingagents/agents/schemas.py | 255 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tradingagents/agents/analysts/sentiment_analyst.py | 186 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tradingagents/agents/analysts/sentiment_analyst.py | 188 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_ollama_base_url.py | 3 | CODE | |
| LOW | tests/test_stocktwits_resilience.py | 8 | CODE | |
| LOW | tests/test_reddit_fallback.py | 4 | CODE | |
| LOW | tests/test_market_data_validator.py | 3 | CODE | |
| LOW | tests/test_llm_max_retries.py | 7 | CODE | |
| LOW | tests/test_env_overrides.py | 3 | CODE | |
| LOW | tests/test_stockstats_date_column.py | 7 | CODE | |
| LOW | tests/test_api_key_env.py | 3 | CODE | |
| LOW | tests/test_openai_responses_base_url.py | 4 | CODE | |
| LOW | tradingagents/__init__.py | 25 | CODE | |
| LOW | tradingagents/graph/checkpointer.py | 6 | CODE | |
| LOW | tradingagents/graph/__init__.py | 3 | CODE | |
| LOW | tradingagents/graph/__init__.py | 4 | CODE | |
| LOW | tradingagents/graph/__init__.py | 5 | CODE | |
| LOW | tradingagents/graph/__init__.py | 6 | CODE | |
| LOW | tradingagents/graph/__init__.py | 7 | CODE | |
| LOW | tradingagents/graph/__init__.py | 8 | CODE | |
| LOW | tradingagents/graph/signal_processing.py | 13 | CODE | |
| LOW | tradingagents/agents/__init__.py | 1 | CODE | |
| LOW | tradingagents/agents/__init__.py | 2 | CODE | |
| LOW | tradingagents/agents/__init__.py | 3 | CODE | |
| LOW | tradingagents/agents/__init__.py | 4 | CODE | |
| LOW | tradingagents/agents/__init__.py | 4 | CODE | |
| LOW | tradingagents/agents/__init__.py | 8 | CODE | |
| LOW | tradingagents/agents/__init__.py | 9 | CODE | |
| LOW | tradingagents/agents/__init__.py | 10 | CODE | |
| LOW | tradingagents/agents/__init__.py | 11 | CODE | |
| LOW | tradingagents/agents/__init__.py | 12 | CODE | |
| LOW | tradingagents/agents/__init__.py | 13 | CODE | |
| LOW | tradingagents/agents/__init__.py | 14 | CODE | |
| LOW | tradingagents/agents/__init__.py | 15 | CODE | |
| LOW | tradingagents/agents/__init__.py | 16 | CODE | |
| LOW | tradingagents/agents/__init__.py | 16 | CODE | |
| LOW | tradingagents/agents/__init__.py | 16 | CODE | |
| LOW | tradingagents/agents/__init__.py | 17 | CODE | |
| LOW | tradingagents/agents/schemas.py | 19 | CODE | |
| LOW | tradingagents/agents/trader/trader.py | 3 | CODE | |
| LOW | tradingagents/agents/managers/portfolio_manager.py | 11 | CODE | |
| LOW | tradingagents/agents/managers/research_manager.py | 3 | CODE | |
| LOW | tradingagents/agents/utils/agent_utils.py | 10 | CODE | |
| LOW | tradingagents/agents/utils/agent_utils.py | 11 | CODE | |
| LOW | tradingagents/agents/utils/agent_utils.py | 11 | CODE | |
| LOW | tradingagents/agents/utils/agent_utils.py | 11 | CODE | |
| LOW | tradingagents/agents/utils/agent_utils.py | 11 | CODE | |
| LOW | tradingagents/agents/utils/agent_utils.py | 17 | CODE | |
| LOW | tradingagents/agents/utils/agent_utils.py | 18 | CODE | |
| LOW | tradingagents/agents/utils/agent_utils.py | 19 | CODE | |
| LOW | tradingagents/agents/utils/agent_utils.py | 19 | CODE | |
| LOW | tradingagents/agents/utils/agent_utils.py | 19 | CODE | |
| LOW | tradingagents/agents/utils/agent_utils.py | 24 | CODE | |
| LOW | tradingagents/agents/utils/agent_utils.py | 25 | CODE | |
| LOW | tradingagents/agents/utils/rating.py | 12 | CODE | |
| LOW | tradingagents/agents/utils/structured.py | 19 | CODE | |
| LOW | tradingagents/agents/analysts/social_media_analyst.py | 13 | CODE | |
| LOW | tradingagents/agents/analysts/social_media_analyst.py | 13 | CODE | |
| LOW | tradingagents/dataflows/symbol_utils.py | 21 | CODE | |
| LOW | tradingagents/dataflows/symbol_utils.py | 28 | CODE | |
| LOW | tradingagents/dataflows/stocktwits.py | 15 | CODE | |
| LOW | tradingagents/dataflows/market_data_validator.py | 11 | CODE | |
| LOW | tradingagents/dataflows/errors.py | 18 | CODE | |
| 16 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/utils.py | 77 | except Exception: | CODE |
| LOW | cli/utils.py | 224 | except Exception as e: | CODE |
| LOW | cli/main.py | 1261 | except Exception as e: | CODE |
| LOW | cli/announcements.py | 24 | except Exception: | CODE |
| LOW | tradingagents/graph/trading_graph.py | 289 | except Exception as e: | CODE |
| LOW | tradingagents/agents/utils/agent_utils.py | 100 | except Exception as exc: # noqa: BLE001 — fail open, never block the run | CODE |
| LOW | tradingagents/agents/utils/structured.py | 72 | except Exception as exc: | CODE |
| LOW | tradingagents/dataflows/interface.py | 214 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/alpha_vantage_indicator.py | 213 | except Exception as e: | CODE |
| MEDIUM | tradingagents/dataflows/alpha_vantage_indicator.py | 214 | print(f"Error getting Alpha Vantage indicator data for {indicator}: {e}") | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 190 | except Exception as e: | CODE |
| MEDIUM | tradingagents/dataflows/y_finance.py | 191 | print(f"Error getting bulk stockstats data: {e}") | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 265 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 337 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 372 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 407 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 442 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/y_finance.py | 469 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/alpha_vantage_common.py | 148 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/market_data_validator.py | 81 | except Exception as exc: # noqa: BLE001 — one bad indicator shouldn't sink the snapshot | CODE |
| LOW | tradingagents/dataflows/yfinance_news.py | 130 | except Exception as e: | CODE |
| LOW | tradingagents/dataflows/yfinance_news.py | 218 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_minimax.py | 18 | os.environ.setdefault("MINIMAX_API_KEY", "placeholder") | CODE |
| LOW⚡ | tests/test_minimax.py | 21 | api_key="placeholder", | CODE |
| LOW | tests/conftest.py | 37 | monkeypatch.setenv(env_var, os.environ.get(env_var) or "placeholder") | CODE |
| LOW⚡ | tests/test_temperature_config.py | 30 | provider=provider, model=model, temperature=0.0, api_key="placeholder" | CODE |
| LOW⚡ | tests/test_temperature_config.py | 37 | provider="openai", model="gpt-4.1", api_key="placeholder" | CODE |
| LOW⚡ | tests/test_deepseek_reasoning.py | 58 | os.environ.setdefault("DEEPSEEK_API_KEY", "placeholder") | CODE |
| LOW⚡ | tests/test_deepseek_reasoning.py | 61 | api_key="placeholder", | CODE |
| LOW⚡ | tests/test_deepseek_reasoning.py | 141 | model=model, api_key="placeholder", base_url="https://api.deepseek.com", | CODE |
| LOW⚡ | tests/test_deepseek_reasoning.py | 189 | return bool(key) and key != "placeholder" | CODE |
| LOW⚡ | tests/test_anthropic_effort.py | 91 | api_key="placeholder", | CODE |
| LOW⚡ | tests/test_anthropic_effort.py | 95 | assert captured["kwargs"]["api_key"] == "placeholder" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_checkpoint_resume.py | 86 | # Create a checkpoint by crashing | COMMENT |
| MEDIUM | cli/main.py | 62 | # Create a deque to store recent messages with a maximum length | COMMENT |
| MEDIUM | cli/main.py | 513 | # Create a boxed questionnaire for each step | COMMENT |
| MEDIUM | tradingagents/dataflows/y_finance.py | 231 | # Create a dictionary mapping date strings to indicator values | COMMENT |
| MEDIUM | tradingagents/dataflows/alpha_vantage_common.py | 68 | # Create a copy of params to avoid modifying the original | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tradingagents/graph/__init__.py | 10 | __all__ = [ | CODE |
| LOW | tradingagents/graph/trading_graph.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/agents/__init__.py | 19 | __all__ = [ | CODE |
| LOW | tradingagents/agents/utils/agent_utils.py | 29 | __all__ = [ | CODE |
| LOW | tradingagents/agents/utils/agent_utils.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/agents/utils/structured.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/polymarket.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/interface.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/symbol_utils.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/stocktwits.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/stockstats_utils.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/fred.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/reddit.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | tradingagents/dataflows/alpha_vantage.py | 13 | __all__ = [ | CODE |
| LOW | tradingagents/llm_clients/__init__.py | 4 | __all__ = ["BaseLLMClient", "create_llm_client"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/main.py | 535 | # Step 1: Ticker symbol | COMMENT |
| LOW | cli/main.py | 552 | # Step 2: Analysis date | COMMENT |
| LOW | cli/main.py | 563 | # Step 3: Output language (skipped when set via TRADINGAGENTS_OUTPUT_LANGUAGE) | COMMENT |
| LOW | cli/main.py | 578 | # Step 4: Select analysts | COMMENT |
| LOW | cli/main.py | 589 | # Step 5: Research depth (skipped when both round counts are set via env). | COMMENT |
| LOW | cli/main.py | 611 | # Step 6: LLM Provider (skipped when set via TRADINGAGENTS_LLM_PROVIDER). | COMMENT |
| LOW | cli/main.py | 664 | # Step 7: Thinking agents (skipped when either model is set via environment) | COMMENT |
| LOW | cli/main.py | 681 | # Step 8: Provider-specific reasoning/thinking configuration. Each knob is | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/main.py | 535 | # Step 1: Ticker symbol | COMMENT |
| LOW | cli/main.py | 552 | # Step 2: Analysis date | COMMENT |
| LOW | cli/main.py | 563 | # Step 3: Output language (skipped when set via TRADINGAGENTS_OUTPUT_LANGUAGE) | COMMENT |
| LOW | cli/main.py | 578 | # Step 4: Select analysts | COMMENT |
| LOW | cli/main.py | 589 | # Step 5: Research depth (skipped when both round counts are set via env). | COMMENT |
| LOW | cli/main.py | 611 | # Step 6: LLM Provider (skipped when set via TRADINGAGENTS_LLM_PROVIDER). | COMMENT |
| LOW | cli/main.py | 664 | # Step 7: Thinking agents (skipped when either model is set via environment) | COMMENT |
| LOW | cli/main.py | 681 | # Step 8: Provider-specific reasoning/thinking configuration. Each knob is | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/main.py | 482 | CODE | |
| LOW | cli/main.py | 991 | CODE | |
| LOW | tradingagents/graph/trading_graph.py | 153 | CODE | |
| LOW | tradingagents/graph/trading_graph.py | 419 | CODE | |
| LOW | tradingagents/agents/utils/agent_utils.py | 122 | CODE | |
| LOW | tradingagents/dataflows/alpha_vantage_indicator.py | 4 | CODE | |
| LOW | tradingagents/dataflows/yfinance_news.py | 134 | CODE | |
| LOW | tradingagents/llm_clients/openai_client.py | 276 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | CHANGELOG.md | 256 | - [@Bcardo](https://github.com/Bcardo) — memory-log redesign (#579), empty-memory hallucination report (#572), encoding | CODE |
| MEDIUM | tradingagents/llm_clients/model_catalog.py | 63 | # M3 carries a 1M-token context window; the M2.x line is 204,800 tokens. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tradingagents/agents/analysts/sentiment_analyst.py | 131 | return f"""You are a financial market sentiment analyst. Your task is to produce a comprehensive sentiment report fo | CODE |
| MEDIUM | tradingagents/agents/analysts/sentiment_analyst.py | 156 | ## How to analyze this data (best practices) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tradingagents/llm_clients/factory.py | 11 | Create an LLM client for the specified provider. Provider modules are imported lazily so that simply importing this | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tradingagents/default_config.py | 81 | "llm_provider": "openai", | COMMENT |
| LOW | tradingagents/default_config.py | 101 | # 429 throttling on rate-limited deployments instead of aborting a run (#1091). | COMMENT |
| LOW | tradingagents/llm_clients/model_catalog.py | 141 | ("Custom model ID", "custom"), | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tradingagents/dataflows/stocktwits.py | 6 | user-labeled sentiment field (``Bullish``/``Bearish``/null), the message | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tradingagents/dataflows/alpha_vantage_indicator.py | 182 | # Check if date is in our range | COMMENT |