Repository Analysis

TauricResearch/TradingAgents

TradingAgents: Multi-Agents LLM Financial Trading Framework

46.1 Strong AI signal View on GitHub
46.1
Adjusted Score
46.1
Raw Score
100%
Time Factor
2026-05-17
Last Push
80,775
Stars
Python
Language
11,583
Lines of Code
98
Files
379
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 2MEDIUM 49LOW 328

Pattern Findings

379 matches across 12 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers189 hits · 204 pts
SeverityFileLineSnippet
LOWtests/test_structured_agents.py33 def test_minimal_required_fields(self):
LOWtests/test_structured_agents.py42 def test_optional_fields_included_when_present(self):
LOWtests/test_structured_agents.py57 def test_optional_fields_omitted_when_absent(self):
LOWtests/test_structured_agents.py122 def test_structured_path_produces_rendered_markdown(self):
LOWtests/test_structured_agents.py141 def test_prompt_includes_investment_plan(self):
LOWtests/test_structured_agents.py150 def test_falls_back_to_freetext_when_structured_unavailable(self):
LOWtests/test_structured_agents.py200 def test_structured_path_produces_rendered_markdown(self):
LOWtests/test_structured_agents.py225 def test_falls_back_to_freetext_when_structured_unavailable(self):
LOWtests/test_minimax.py28 def test_request_payload_sets_reasoning_split(self):
LOWtests/test_minimax.py32 def test_caller_supplied_reasoning_split_is_preserved(self):
LOWtests/test_minimax.py45 def test_non_reasoning_minimax_does_not_inject_reasoning_split(self):
LOWtests/test_minimax.py80 def test_schema_still_bound_as_tool(self):
LOWtests/test_ollama_base_url.py18def test_resolver_returns_default_when_env_unset(monkeypatch):
LOWtests/test_ollama_base_url.py24def test_resolver_returns_env_when_set(monkeypatch):
LOWtests/test_ollama_base_url.py30def test_resolver_evaluation_is_call_time(monkeypatch):
LOWtests/test_ollama_base_url.py38def test_resolver_does_not_affect_other_providers(monkeypatch):
LOWtests/test_ollama_base_url.py46def test_client_get_llm_picks_up_env(monkeypatch):
LOWtests/test_ollama_base_url.py55def test_explicit_base_url_overrides_env(monkeypatch):
LOWtests/test_ollama_base_url.py72def test_cli_dropdown_uses_env(monkeypatch):
LOWtests/test_ollama_base_url.py85def test_cli_dropdown_default_when_unset(monkeypatch):
LOWtests/test_ollama_base_url.py99def test_confirm_endpoint_shows_default(monkeypatch, capsys):
LOWtests/test_ollama_base_url.py110def test_confirm_endpoint_marks_env_origin(monkeypatch, capsys):
LOWtests/test_ollama_base_url.py120def test_confirm_endpoint_warns_on_missing_scheme(monkeypatch, capsys):
LOWtests/test_ollama_base_url.py131def test_confirm_endpoint_warns_on_non_default_port_remote(monkeypatch, capsys):
LOWtests/test_ollama_base_url.py141def test_confirm_endpoint_quiet_on_local_no_port(monkeypatch, capsys):
LOWtests/test_ollama_base_url.py151def test_ollama_model_labels_no_local_suffix():
LOWtests/test_ollama_base_url.py159def test_ollama_offers_custom_model_id():
LOWtests/test_capabilities.py13 def test_deepseek_chat_supports_tool_choice(self):
LOWtests/test_capabilities.py17 def test_deepseek_reasoner_rejects_tool_choice(self):
LOWtests/test_capabilities.py46 def test_reasoner_variant_inherits_thinking_quirks(self):
LOWtests/test_capabilities.py87 def test_non_reasoning_minimax_does_not_get_reasoning_split(self):
LOWtests/test_capabilities.py108 def test_unknown_model_default(self):
LOWtests/test_capabilities.py112 def test_exact_match_precedes_pattern(self):
LOWtests/test_capabilities.py119def test_capabilities_dataclass_is_frozen():
LOWtests/test_signal_processing.py27 def test_explicit_label_overweight(self):
LOWtests/test_signal_processing.py30 def test_explicit_label_with_markdown_bold_value(self):
LOWtests/test_signal_processing.py34 def test_explicit_label_with_markdown_bold_label(self):
LOWtests/test_signal_processing.py37 def test_rendered_pm_markdown_shape(self):
LOWtests/test_signal_processing.py46 def test_explicit_label_wins_over_prose_with_markdown(self):
LOWtests/test_signal_processing.py54 def test_no_rating_returns_default(self):
LOWtests/test_signal_processing.py57 def test_no_rating_custom_default(self):
LOWtests/test_signal_processing.py60 def test_all_five_tiers_recognised(self):
LOWtests/test_signal_processing.py72 def test_returns_rating_from_pm_markdown(self):
LOWtests/test_signal_processing.py88 def test_default_when_no_rating_present(self):
LOWtests/test_model_validation.py26 def test_cli_catalog_models_are_all_validator_approved(self):
LOWtests/test_model_validation.py35 def test_unknown_model_emits_warning_for_strict_provider(self):
LOWtests/test_model_validation.py46 def test_openrouter_and_ollama_accept_custom_models_without_warning(self):
LOWtests/test_dataflows_config.py17 def test_get_config_returns_deep_copy(self):
LOWtests/test_dataflows_config.py26 def test_set_config_does_not_alias_caller_nested_dicts(self):
LOWtests/test_dataflows_config.py40 def test_partial_nested_update_preserves_existing_defaults(self):
LOWtests/test_dataflows_config.py55 def test_nested_dict_updates_merge_one_level_deep(self):
LOWtests/test_safe_ticker_component.py13 def test_accepts_common_ticker_formats(self):
LOWtests/test_safe_ticker_component.py17 def test_rejects_path_separators(self):
LOWtests/test_safe_ticker_component.py22 def test_rejects_null_byte_and_whitespace(self):
LOWtests/test_safe_ticker_component.py27 def test_rejects_empty_or_non_string(self):
LOWtests/test_safe_ticker_component.py32 def test_rejects_overlong_input(self):
LOWtests/test_safe_ticker_component.py36 def test_rejects_dot_only_values(self):
LOWtests/test_safe_ticker_component.py43 def test_traversal_string_does_not_escape_join(self):
LOWtests/test_analyst_execution.py12 def test_build_plan_preserves_selected_order(self):
LOWtests/test_analyst_execution.py21 def test_rejects_unknown_analyst_keys(self):
129 more matches not shown…
Decorative Section Separators40 hits · 153 pts
SeverityFileLineSnippet
MEDIUMtests/test_structured_agents.py26# ---------------------------------------------------------------------------
MEDIUMtests/test_structured_agents.py28# ---------------------------------------------------------------------------
MEDIUMtests/test_structured_agents.py90# ---------------------------------------------------------------------------
MEDIUMtests/test_structured_agents.py92# ---------------------------------------------------------------------------
MEDIUMtests/test_structured_agents.py163# ---------------------------------------------------------------------------
MEDIUMtests/test_structured_agents.py165# ---------------------------------------------------------------------------
MEDIUMtests/test_signal_processing.py17# ---------------------------------------------------------------------------
MEDIUMtests/test_signal_processing.py19# ---------------------------------------------------------------------------
MEDIUMtests/test_signal_processing.py65# ---------------------------------------------------------------------------
MEDIUMtests/test_signal_processing.py67# ---------------------------------------------------------------------------
MEDIUMtests/test_deepseek_reasoning.py28# ---------------------------------------------------------------------------
MEDIUMtests/test_deepseek_reasoning.py31# ---------------------------------------------------------------------------
MEDIUMtests/test_deepseek_reasoning.py51# ---------------------------------------------------------------------------
MEDIUMtests/test_deepseek_reasoning.py53# ---------------------------------------------------------------------------
MEDIUMtests/test_deepseek_reasoning.py119# ---------------------------------------------------------------------------
MEDIUMtests/test_deepseek_reasoning.py121# ---------------------------------------------------------------------------
MEDIUMtests/test_deepseek_reasoning.py183# ---------------------------------------------------------------------------
MEDIUMtests/test_deepseek_reasoning.py185# ---------------------------------------------------------------------------
MEDIUMtests/test_deepseek_reasoning.py227# ---------------------------------------------------------------------------
MEDIUMtests/test_deepseek_reasoning.py229# ---------------------------------------------------------------------------
MEDIUMtests/test_memory_log.py105# ---------------------------------------------------------------------------
MEDIUMtests/test_memory_log.py107# ---------------------------------------------------------------------------
MEDIUMtests/test_memory_log.py382# ---------------------------------------------------------------------------
MEDIUMtests/test_memory_log.py384# ---------------------------------------------------------------------------
MEDIUMtests/test_memory_log.py658# ---------------------------------------------------------------------------
MEDIUMtests/test_memory_log.py660# ---------------------------------------------------------------------------
MEDIUMtests/test_memory_log.py790# ---------------------------------------------------------------------------
MEDIUMtests/test_memory_log.py792# ---------------------------------------------------------------------------
MEDIUMtests/test_memory_log.py29# ---------------------------------------------------------------------------
MEDIUMtests/test_memory_log.py31# ---------------------------------------------------------------------------
MEDIUMtradingagents/agents/schemas.py27# ---------------------------------------------------------------------------
MEDIUMtradingagents/agents/schemas.py29# ---------------------------------------------------------------------------
MEDIUMtradingagents/agents/schemas.py56# ---------------------------------------------------------------------------
MEDIUMtradingagents/agents/schemas.py58# ---------------------------------------------------------------------------
MEDIUMtradingagents/agents/schemas.py104# ---------------------------------------------------------------------------
MEDIUMtradingagents/agents/schemas.py106# ---------------------------------------------------------------------------
MEDIUMtradingagents/agents/schemas.py166# ---------------------------------------------------------------------------
MEDIUMtradingagents/agents/schemas.py168# ---------------------------------------------------------------------------
MEDIUMtradingagents/agents/analysts/sentiment_analyst.py165# ---------------------------------------------------------------------------
MEDIUMtradingagents/agents/analysts/sentiment_analyst.py167# ---------------------------------------------------------------------------
Unused Imports105 hits · 105 pts
SeverityFileLineSnippet
LOWtest.py2
LOWtest.py2
LOWtest.py2
LOWtest.py2
LOWtest.py2
LOWtests/test_ollama_base_url.py3
LOWtests/test_ollama_base_url.py7
LOWtests/test_capabilities.py5
LOWtests/test_checkpoint_resume.py3
LOWtests/test_checkpoint_resume.py6
LOWtests/test_checkpoint_resume.py9
LOWtests/test_env_overrides.py3
LOWtests/test_api_key_env.py3
LOWtests/test_api_key_env.py6
LOWcli/models.py2
LOWcli/models.py2
LOWcli/models.py2
LOWcli/models.py3
LOWcli/utils.py3
LOWcli/main.py1
LOWcli/main.py11
LOWcli/main.py18
LOWcli/main.py31
LOWcli/main.py32
LOWcli/stats_handler.py2
LOWtradingagents/__init__.py24
LOWtradingagents/graph/checkpointer.py6
LOWtradingagents/graph/__init__.py3
LOWtradingagents/graph/__init__.py4
LOWtradingagents/graph/__init__.py5
LOWtradingagents/graph/__init__.py6
LOWtradingagents/graph/__init__.py7
LOWtradingagents/graph/__init__.py8
LOWtradingagents/graph/trading_graph.py18
LOWtradingagents/graph/trading_graph.py22
LOWtradingagents/graph/trading_graph.py22
LOWtradingagents/graph/trading_graph.py22
LOWtradingagents/graph/setup.py7
LOWtradingagents/graph/propagation.py4
LOWtradingagents/graph/signal_processing.py13
LOWtradingagents/agents/__init__.py1
LOWtradingagents/agents/__init__.py2
LOWtradingagents/agents/__init__.py2
LOWtradingagents/agents/__init__.py2
LOWtradingagents/agents/__init__.py4
LOWtradingagents/agents/__init__.py5
LOWtradingagents/agents/__init__.py6
LOWtradingagents/agents/__init__.py7
LOWtradingagents/agents/__init__.py7
LOWtradingagents/agents/__init__.py12
LOWtradingagents/agents/__init__.py13
LOWtradingagents/agents/__init__.py15
LOWtradingagents/agents/__init__.py16
LOWtradingagents/agents/__init__.py17
LOWtradingagents/agents/__init__.py19
LOWtradingagents/agents/__init__.py20
LOWtradingagents/agents/__init__.py22
LOWtradingagents/agents/schemas.py19
LOWtradingagents/agents/trader/trader.py3
LOWtradingagents/agents/managers/portfolio_manager.py11
45 more matches not shown…
Excessive Try-Catch Wrapping18 hits · 20 pts
SeverityFileLineSnippet
LOWcli/utils.py176 except Exception as e:
LOWcli/main.py1257 except Exception as e:
LOWcli/announcements.py23 except Exception:
LOWtradingagents/graph/trading_graph.py248 except Exception as e:
LOWtradingagents/agents/utils/structured.py66 except Exception as exc:
LOWtradingagents/dataflows/alpha_vantage_indicator.py220 except Exception as e:
MEDIUMtradingagents/dataflows/alpha_vantage_indicator.py221 print(f"Error getting Alpha Vantage indicator data for {indicator}: {e}")
LOWtradingagents/dataflows/y_finance.py166 except Exception as e:
MEDIUMtradingagents/dataflows/y_finance.py167 print(f"Error getting bulk stockstats data: {e}")
LOWtradingagents/dataflows/y_finance.py239 except Exception as e:
LOWtradingagents/dataflows/y_finance.py301 except Exception as e:
LOWtradingagents/dataflows/y_finance.py333 except Exception as e:
LOWtradingagents/dataflows/y_finance.py365 except Exception as e:
LOWtradingagents/dataflows/y_finance.py397 except Exception as e:
LOWtradingagents/dataflows/y_finance.py421 except Exception as e:
LOWtradingagents/dataflows/alpha_vantage_common.py119 except Exception as e:
LOWtradingagents/dataflows/yfinance_news.py107 except Exception as e:
LOWtradingagents/dataflows/yfinance_news.py201 except Exception as e:
Self-Referential Comments5 hits · 15 pts
SeverityFileLineSnippet
MEDIUMtests/test_checkpoint_resume.py89 # Create a checkpoint by crashing
MEDIUMcli/main.py45# Create a deque to store recent messages with a maximum length
MEDIUMcli/main.py496 # Create a boxed questionnaire for each step
MEDIUMtradingagents/dataflows/y_finance.py207 # Create a dictionary mapping date strings to indicator values
MEDIUMtradingagents/dataflows/alpha_vantage_common.py48 # Create a copy of params to avoid modifying the original
Verbosity Indicators8 hits · 12 pts
SeverityFileLineSnippet
LOWcli/main.py504 # Step 1: Ticker symbol
LOWcli/main.py518 # Step 2: Analysis date
LOWcli/main.py529 # Step 3: Output language
LOWcli/main.py538 # Step 4: Select analysts
LOWcli/main.py549 # Step 5: Research depth
LOWcli/main.py557 # Step 6: LLM Provider
LOWcli/main.py585 # Step 7: Thinking agents
LOWcli/main.py594 # Step 8: Provider-specific thinking configuration
Deep Nesting5 hits · 5 pts
SeverityFileLineSnippet
LOWcli/main.py977
LOWtradingagents/graph/trading_graph.py136
LOWtradingagents/dataflows/alpha_vantage_indicator.py3
LOWtradingagents/dataflows/yfinance_news.py54
LOWtradingagents/dataflows/yfinance_news.py111
AI Slop Vocabulary2 hits · 5 pts
SeverityFileLineSnippet
MEDIUMtradingagents/agents/analysts/sentiment_analyst.py109 return f"""You are a financial market sentiment analyst. Your task is to produce a comprehensive sentiment report fo
MEDIUMtradingagents/agents/analysts/sentiment_analyst.py134## How to analyze this data (best practices)
Docstring Block Structure1 hit · 5 pts
SeverityFileLineSnippet
HIGHtradingagents/llm_clients/factory.py21Create an LLM client for the specified provider. Provider modules are imported lazily so that simply importing this
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippet
LOWtradingagents/dataflows/alpha_vantage_indicator.py194 # Check if date is in our range
LOWtradingagents/dataflows/y_finance.py24 # Check if data is empty
LOWtradingagents/dataflows/alpha_vantage_common.py71 # Check if response is JSON (error responses are typically JSON)
Cross-Language Confusion1 hit · 2 pts
SeverityFileLineSnippet
HIGHtradingagents/dataflows/stocktwits.py6user-labeled sentiment field (``Bullish``/``Bearish``/null), the message
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippet
LOWtradingagents/llm_clients/model_catalog.py141 ("Custom model ID", "custom"),
LOWtradingagents/llm_clients/capabilities.py41 # MiniMax M2.x reasoning models need ``reasoning_split=True`` so the