An AI Hedge Fund Team
This report presents the forensic synthetic code analysis of virattt/ai-hedge-fund, a Python project with 61,635 GitHub stars. SynthScan v2.0 examined 53,230 lines of code across 289 source files, recording 744 pattern matches distributed across 16 syntactic categories. The overall adjusted score of 23.2 places this repository in the Moderate 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 744 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 |
|---|---|---|---|---|
| MEDIUM | app/backend/services/ollama_service.py | 30 | # ============================================================================= | COMMENT |
| MEDIUM | app/backend/services/ollama_service.py | 32 | # ============================================================================= | COMMENT |
| MEDIUM | app/backend/services/ollama_service.py | 174 | # ============================================================================= | COMMENT |
| MEDIUM | app/backend/services/ollama_service.py | 176 | # ============================================================================= | COMMENT |
| MEDIUM | v2/models.py | 10 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/models.py | 12 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/models.py | 39 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/models.py | 41 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/models.py | 53 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/models.py | 55 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/demo/backtest.py | 41 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/demo/backtest.py | 43 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/demo/backtest.py | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/demo/backtest.py | 68 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/demo/backtest.py | 108 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/demo/backtest.py | 110 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/demo/backtest.py | 219 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/demo/backtest.py | 221 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/test_event_study.py | 20 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/test_event_study.py | 22 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | v2/event_study/test_event_study.py | 102 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | v2/event_study/test_event_study.py | 104 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/test_event_study.py | 125 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/test_event_study.py | 127 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/test_event_study.py | 175 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/test_event_study.py | 177 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/engine.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/engine.py | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/engine.py | 133 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/engine.py | 135 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/engine.py | 208 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/engine.py | 210 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/engine.py | 294 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/engine.py | 296 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/engine.py | 360 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/event_study/engine.py | 362 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/backtesting/engine.py | 94 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | v2/backtesting/engine.py | 96 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | v2/backtesting/engine.py | 157 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | v2/backtesting/engine.py | 159 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | v2/backtesting/engine.py | 202 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | v2/backtesting/engine.py | 204 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | v2/backtesting/engine.py | 222 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | v2/backtesting/engine.py | 224 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | v2/backtesting/engine.py | 294 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/backtesting/engine.py | 296 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/backtesting/test_backtest.py | 16 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/backtesting/test_backtest.py | 18 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | v2/backtesting/test_backtest.py | 68 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | v2/backtesting/test_backtest.py | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/backtesting/test_backtest.py | 186 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/backtesting/test_backtest.py | 188 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | v2/signals/test_signals.py | 29 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | v2/signals/test_signals.py | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/signals/test_signals.py | 48 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/signals/test_signals.py | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/signals/test_llm_agents.py | 15 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/signals/test_llm_agents.py | 17 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/signals/test_llm_agents.py | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | v2/signals/test_llm_agents.py | 72 | # --------------------------------------------------------------------------- | COMMENT |
| 93 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/src/components/panels/bottom/tabs/backtest-output.tsx | 301 | function BacktestPerformanceMetrics({ agentData }: { agentData: Record<string, any> }) { | CODE |
| LOW | app/frontend/src/hooks/use-keyboard-shortcuts.ts | 68 | export function useLayoutKeyboardShortcuts( | CODE |
| LOW | app/backend/repositories/flow_run_repository.py | 108 | def delete_flow_runs_by_flow_id(self, flow_id: int) -> int: | CODE |
| LOW | app/backend/routes/language_models.py | 41 | async def get_language_model_providers(): | CODE |
| LOW | app/backend/routes/ollama.py | 165 | async def download_model_with_progress(request: ModelRequest): | CODE |
| LOW | app/backend/services/graph.py | 180 | def parse_hedge_fund_response(response): | CODE |
| LOW | app/backend/services/ollama_service.py | 93 | async def download_model_with_progress(self, model_name: str) -> AsyncGenerator[str, None]: | CODE |
| LOW | app/backend/services/ollama_service.py | 156 | def get_all_download_progress(self) -> Dict[str, Dict[str, any]]: | CODE |
| LOW | app/backend/services/ollama_service.py | 442 | def _process_download_progress(self, progress, model_name: str) -> Optional[Dict[str, any]]: | CODE |
| LOW | app/backend/services/backtest_service.py | 207 | def calculate_portfolio_value(self, current_prices: Dict[str, float]) -> float: | CODE |
| LOW | app/backend/services/backtest_service.py | 238 | def _update_performance_metrics(self, performance_metrics: Dict[str, Any]): | CODE |
| LOW | tests/test_api_rate_limiting.py | 12 | def test_handles_single_rate_limit(self, mock_get, mock_sleep): | CODE |
| LOW | tests/test_api_rate_limiting.py | 46 | def test_handles_multiple_rate_limits(self, mock_get, mock_sleep): | CODE |
| LOW | tests/test_api_rate_limiting.py | 83 | def test_handles_post_rate_limiting(self, mock_post, mock_sleep): | CODE |
| LOW | tests/test_api_rate_limiting.py | 118 | def test_ignores_other_errors(self, mock_get, mock_sleep): | CODE |
| LOW | tests/test_api_rate_limiting.py | 145 | def test_normal_success_requests(self, mock_get, mock_sleep): | CODE |
| LOW | tests/test_api_rate_limiting.py | 220 | def test_max_retries_exceeded(self, mock_get, mock_sleep): | CODE |
| LOW | tests/test_cli_ticker_alias.py | 29 | def test_shared_cli_accepts_documented_ticker_alias() -> None: | CODE |
| LOW | tests/test_cli_ticker_alias.py | 40 | def test_backtesting_cli_accepts_documented_ticker_alias() -> None: | CODE |
| LOW | tests/test_cache.py | 9 | def test_new_cache_has_empty_stores(self): | CODE |
| LOW⚡ | tests/test_cache.py | 21 | def test_returns_cache_instance(self): | CODE |
| LOW⚡ | tests/test_cache.py | 25 | def test_returns_same_instance(self): | CODE |
| LOW⚡ | tests/test_cache.py | 32 | def test_returns_new_data_when_existing_is_none(self): | CODE |
| LOW⚡ | tests/test_cache.py | 38 | def test_returns_new_data_when_existing_is_empty(self): | CODE |
| LOW⚡ | tests/test_cache.py | 43 | def test_merges_without_duplicates(self): | CODE |
| LOW⚡ | tests/test_cache.py | 53 | def test_does_not_mutate_existing_list(self): | CODE |
| LOW⚡ | tests/test_cache.py | 70 | def test_get_returns_none_for_unknown_ticker(self): | CODE |
| LOW⚡ | tests/test_cache.py | 74 | def test_deduplicates_by_time(self): | CODE |
| LOW⚡ | tests/test_cache.py | 83 | def test_different_tickers_are_independent(self): | CODE |
| LOW | tests/test_cache.py | 100 | def test_deduplicates_by_report_period(self): | CODE |
| LOW | tests/test_cache.py | 117 | def test_deduplicates_by_report_period(self): | CODE |
| LOW | tests/test_cache.py | 134 | def test_deduplicates_by_filing_date(self): | CODE |
| LOW | tests/test_cache.py | 152 | def test_deduplicates_by_date(self): | CODE |
| LOW | tests/backtesting/test_results.py | 4 | def test_results_builder_builds_rows_and_summary(monkeypatch, portfolio): | CODE |
| LOW | tests/backtesting/test_results.py | 22 | def fake_print_backtest_results(rows): | CODE |
| LOW | tests/backtesting/test_valuation.py | 4 | def test_calculate_portfolio_value(portfolio, prices): | CODE |
| LOW | tests/backtesting/test_valuation.py | 28 | def test_compute_exposures_with_no_shorts_ratio_inf(portfolio, prices): | CODE |
| LOW | tests/backtesting/test_valuation.py | 35 | def test_compute_portfolio_summary(portfolio, prices): | CODE |
| LOW | tests/backtesting/test_metrics.py | 24 | def test_metrics_insufficient_data_no_update(): | CODE |
| LOW | tests/backtesting/test_metrics.py | 33 | def test_metrics_basic_sharpe_sortino_and_drawdown(): | CODE |
| LOW | tests/backtesting/test_metrics.py | 45 | def test_metrics_zero_volatility_sharpe_zero(): | CODE |
| LOW⚡ | tests/backtesting/test_portfolio.py | 7 | def test_apply_long_buy_basic(portfolio: Portfolio) -> None: | CODE |
| LOW⚡ | tests/backtesting/test_portfolio.py | 17 | def test_apply_long_buy_partial_fill_when_insufficient_cash() -> None: | CODE |
| LOW⚡ | tests/backtesting/test_portfolio.py | 27 | def test_apply_long_sell_realized_gain_and_cost_basis_reset(portfolio: Portfolio) -> None: | CODE |
| LOW | tests/backtesting/test_portfolio.py | 40 | def test_apply_long_sell_clamps_to_owned() -> None: | CODE |
| LOW | tests/backtesting/test_portfolio.py | 49 | def test_apply_short_open_basic(portfolio: Portfolio) -> None: | CODE |
| LOW | tests/backtesting/test_portfolio.py | 63 | def test_apply_short_open_partial_when_insufficient_margin_cash() -> None: | CODE |
| LOW | tests/backtesting/test_portfolio.py | 77 | def test_apply_short_open_uses_available_cash_not_total_cash() -> None: | CODE |
| LOW | tests/backtesting/test_portfolio.py | 95 | def test_apply_short_cover_realized_gain_and_margin_release(portfolio: Portfolio) -> None: | CODE |
| LOW | tests/backtesting/test_portfolio.py | 113 | def test_apply_short_cover_clamps_to_existing_short() -> None: | CODE |
| LOW | tests/backtesting/test_portfolio.py | 124 | def test_zero_or_negative_quantity_is_noop(portfolio: Portfolio, action: str) -> None: | CODE |
| LOW | tests/backtesting/test_execution.py | 4 | def test_trade_executor_routes_actions(portfolio): | CODE |
| LOW | tests/backtesting/test_execution.py | 21 | def test_trade_executor_guards_and_unknown_action(portfolio): | CODE |
| LOW | tests/backtesting/test_controller.py | 13 | def test_agent_controller_normalizes_and_snapshots(portfolio): | CODE |
| LOW | tests/backtesting/integration/conftest.py | 30 | def _load_price_df_from_fixture(ticker: str, start: str, end: str) -> pd.DataFrame: | CODE |
| LOW | tests/backtesting/integration/conftest.py | 63 | def _load_financial_metrics_from_fixture(ticker: str, end: str, limit: int) -> list[dict]: | CODE |
| LOW | tests/backtesting/integration/conftest.py | 92 | def _load_insider_from_fixture(ticker: str, start: str | None, end: str, limit: int) -> list[dict]: | CODE |
| LOW | tests/backtesting/integration/conftest.py | 111 | def _fake_get_financial_metrics(ticker: str, end_date: str, period: str = "ttm", limit: int = 10, api_key: str | Non | CODE |
| LOW | …backtesting/integration/test_integration_long_short.py | 5 | def test_long_short_strategy_partial_exits(): | CODE |
| LOW | …backtesting/integration/test_integration_long_short.py | 83 | def test_long_short_strategy_full_liquidation_to_cash(): | CODE |
| 115 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/backend/main.py | 4 | CODE | |
| LOW | app/backend/database/__init__.py | 1 | CODE | |
| LOW | app/backend/database/__init__.py | 1 | CODE | |
| LOW | app/backend/database/__init__.py | 1 | CODE | |
| LOW | app/backend/database/__init__.py | 2 | CODE | |
| LOW | app/backend/database/connection.py | 4 | CODE | |
| LOW | app/backend/repositories/__init__.py | 1 | CODE | |
| LOW | app/backend/repositories/api_key_repository.py | 4 | CODE | |
| LOW | app/backend/routes/language_models.py | 2 | CODE | |
| LOW | app/backend/routes/language_models.py | 2 | CODE | |
| LOW | app/backend/routes/language_models.py | 2 | CODE | |
| LOW | app/backend/routes/flow_runs.py | 8 | CODE | |
| LOW | app/backend/routes/ollama.py | 4 | CODE | |
| LOW | app/backend/services/ollama_service.py | 3 | CODE | |
| LOW | app/backend/services/ollama_service.py | 7 | CODE | |
| LOW | app/backend/services/ollama_service.py | 9 | CODE | |
| LOW | app/backend/services/ollama_service.py | 10 | CODE | |
| LOW | tests/test_cache.py | 1 | CODE | |
| LOW | tests/backtesting/test_portfolio.py | 1 | CODE | |
| LOW | v2/models.py | 3 | CODE | |
| LOW | v2/analyze.py | 13 | CODE | |
| LOW | v2/demo/backtest.py | 21 | CODE | |
| LOW | v2/event_study/plot.py | 14 | CODE | |
| LOW | v2/event_study/models.py | 12 | CODE | |
| LOW | v2/event_study/test_event_study.py | 3 | CODE | |
| LOW | v2/event_study/__init__.py | 7 | CODE | |
| LOW | v2/event_study/__init__.py | 8 | CODE | |
| LOW | v2/event_study/__init__.py | 8 | CODE | |
| LOW | v2/event_study/__init__.py | 8 | CODE | |
| LOW | v2/event_study/__init__.py | 8 | CODE | |
| LOW | v2/event_study/__init__.py | 8 | CODE | |
| LOW | v2/event_study/__init__.py | 8 | CODE | |
| LOW | v2/event_study/__init__.py | 16 | CODE | |
| LOW | v2/event_study/__init__.py | 16 | CODE | |
| LOW | v2/event_study/__init__.py | 16 | CODE | |
| LOW | v2/event_study/engine.py | 26 | CODE | |
| LOW | v2/event_study/stats.py | 8 | CODE | |
| LOW | v2/event_study/__main__.py | 6 | CODE | |
| LOW | v2/event_study/__main__.py | 12 | CODE | |
| LOW | v2/llm/client.py | 12 | CODE | |
| LOW | v2/llm/cache.py | 13 | CODE | |
| LOW | v2/llm/__init__.py | 3 | CODE | |
| LOW | v2/llm/__init__.py | 3 | CODE | |
| LOW | v2/llm/__init__.py | 4 | CODE | |
| LOW | v2/llm/__init__.py | 4 | CODE | |
| LOW | v2/llm/__init__.py | 4 | CODE | |
| LOW | v2/llm/__init__.py | 4 | CODE | |
| LOW | v2/llm/__init__.py | 4 | CODE | |
| LOW | v2/backtesting/models.py | 3 | CODE | |
| LOW | v2/backtesting/__init__.py | 3 | CODE | |
| LOW | v2/backtesting/__init__.py | 4 | CODE | |
| LOW | v2/backtesting/__init__.py | 4 | CODE | |
| LOW | v2/backtesting/__init__.py | 4 | CODE | |
| LOW | v2/backtesting/engine.py | 27 | CODE | |
| LOW | v2/backtesting/test_backtest.py | 3 | CODE | |
| LOW | v2/backtesting/__main__.py | 6 | CODE | |
| LOW | v2/signals/buffett.py | 9 | CODE | |
| LOW | v2/signals/test_signals.py | 3 | CODE | |
| LOW | v2/signals/__init__.py | 7 | CODE | |
| LOW | v2/signals/__init__.py | 9 | CODE | |
| 76 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/backend/main.py | 53 | except Exception as e: | CODE |
| LOW | app/backend/routes/language_models.py | 31 | except Exception as e: | CODE |
| LOW | app/backend/routes/language_models.py | 61 | except Exception as e: | CODE |
| LOW | app/backend/routes/flow_runs.py | 50 | except Exception as e: | CODE |
| LOW | app/backend/routes/flow_runs.py | 82 | except Exception as e: | CODE |
| LOW | app/backend/routes/flow_runs.py | 109 | except Exception as e: | CODE |
| LOW | app/backend/routes/flow_runs.py | 136 | except Exception as e: | CODE |
| LOW | app/backend/routes/flow_runs.py | 166 | except Exception as e: | CODE |
| LOW | app/backend/routes/flow_runs.py | 212 | except Exception as e: | CODE |
| LOW | app/backend/routes/flow_runs.py | 246 | except Exception as e: | CODE |
| LOW | app/backend/routes/flow_runs.py | 274 | except Exception as e: | CODE |
| LOW | app/backend/routes/flow_runs.py | 302 | except Exception as e: | CODE |
| LOW | app/backend/routes/hedge_fund.py | 59 | except Exception: | CODE |
| LOW | app/backend/routes/hedge_fund.py | 159 | except Exception as e: | CODE |
| LOW | app/backend/routes/hedge_fund.py | 216 | except Exception: | CODE |
| LOW | app/backend/routes/hedge_fund.py | 335 | except Exception as e: | CODE |
| LOW | app/backend/routes/hedge_fund.py | 350 | except Exception as e: | CODE |
| LOW | app/backend/routes/storage.py | 43 | except Exception as e: | CODE |
| LOW | app/backend/routes/flows.py | 41 | except Exception as e: | CODE |
| LOW | app/backend/routes/flows.py | 58 | except Exception as e: | CODE |
| LOW | app/backend/routes/flows.py | 80 | except Exception as e: | CODE |
| LOW | app/backend/routes/flows.py | 112 | except Exception as e: | CODE |
| LOW | app/backend/routes/flows.py | 134 | except Exception as e: | CODE |
| LOW | app/backend/routes/flows.py | 156 | except Exception as e: | CODE |
| LOW | app/backend/routes/flows.py | 173 | except Exception as e: | CODE |
| LOW | app/backend/routes/api_keys.py | 38 | except Exception as e: | CODE |
| LOW | app/backend/routes/api_keys.py | 55 | except Exception as e: | CODE |
| LOW | app/backend/routes/api_keys.py | 77 | except Exception as e: | CODE |
| LOW | app/backend/routes/api_keys.py | 104 | except Exception as e: | CODE |
| LOW | app/backend/routes/api_keys.py | 126 | except Exception as e: | CODE |
| LOW | app/backend/routes/api_keys.py | 151 | except Exception as e: | CODE |
| LOW | app/backend/routes/api_keys.py | 178 | except Exception as e: | CODE |
| LOW | app/backend/routes/api_keys.py | 200 | except Exception as e: | CODE |
| LOW | app/backend/routes/ollama.py | 53 | except Exception as e: | CODE |
| LOW | app/backend/routes/ollama.py | 85 | except Exception as e: | CODE |
| LOW | app/backend/routes/ollama.py | 117 | except Exception as e: | CODE |
| LOW | app/backend/routes/ollama.py | 154 | except Exception as e: | CODE |
| LOW | app/backend/routes/ollama.py | 193 | except Exception as e: | CODE |
| LOW | app/backend/routes/ollama.py | 215 | except Exception as e: | CODE |
| LOW | app/backend/routes/ollama.py | 238 | except Exception as e: | CODE |
| LOW | app/backend/routes/ollama.py | 275 | except Exception as e: | CODE |
| LOW | app/backend/routes/ollama.py | 291 | except Exception as e: | CODE |
| LOW | app/backend/routes/ollama.py | 317 | except Exception as e: | CODE |
| LOW | app/backend/services/graph.py | 190 | except Exception as e: | CODE |
| LOW⚡ | app/backend/services/ollama_service.py | 228 | except Exception as e: | CODE |
| LOW⚡ | app/backend/services/ollama_service.py | 239 | except Exception: | CODE |
| LOW⚡ | app/backend/services/ollama_service.py | 270 | except Exception: | CODE |
| LOW⚡ | app/backend/services/ollama_service.py | 282 | except Exception: | CODE |
| LOW | app/backend/services/ollama_service.py | 53 | except Exception as e: | CODE |
| LOW | app/backend/services/ollama_service.py | 65 | except Exception as e: | CODE |
| LOW | app/backend/services/ollama_service.py | 77 | except Exception as e: | CODE |
| LOW | app/backend/services/ollama_service.py | 89 | except Exception as e: | CODE |
| LOW | app/backend/services/ollama_service.py | 106 | except Exception as e: | CODE |
| LOW | app/backend/services/ollama_service.py | 120 | except Exception as e: | CODE |
| LOW | app/backend/services/ollama_service.py | 148 | except Exception as e: | CODE |
| LOW | app/backend/services/ollama_service.py | 204 | except Exception: | CODE |
| LOW | app/backend/services/ollama_service.py | 213 | except Exception as e: | CODE |
| LOW | app/backend/services/ollama_service.py | 256 | except Exception as e: | CODE |
| LOW | app/backend/services/ollama_service.py | 301 | except Exception as e: | CODE |
| LOW | app/backend/services/ollama_service.py | 321 | except Exception as e: | CODE |
| 45 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/run.sh | 221 | # Create a temporary directory for log files | COMMENT |
| MEDIUM | app/backend/routes/flow_runs.py | 41 | # Create the flow run | COMMENT |
| MEDIUM | app/backend/routes/health.py | 18 | # Create a JSON object for each ping | COMMENT |
| MEDIUM | app/backend/routes/hedge_fund.py | 33 | # Create the portfolio | COMMENT |
| MEDIUM | app/backend/routes/hedge_fund.py | 183 | # Create the portfolio (same as /run endpoint) | COMMENT |
| MEDIUM | …/backtesting/integration/test_integration_long_only.py | 14 | # Define the exact trading sequence we want to test | COMMENT |
| MEDIUM | …/backtesting/integration/test_integration_long_only.py | 104 | # Define the exact trading sequence we want to test | COMMENT |
| MEDIUM | …/backtesting/integration/test_integration_long_only.py | 206 | # Define the exact trading sequence we want to test | COMMENT |
| MEDIUM | src/tools/api.py | 65 | # Create a cache key that includes all parameters to ensure exact matches | COMMENT |
| MEDIUM | src/tools/api.py | 107 | # Create a cache key that includes all parameters to ensure exact matches | COMMENT |
| MEDIUM | src/tools/api.py | 191 | # Create a cache key that includes all parameters to ensure exact matches | COMMENT |
| MEDIUM | src/tools/api.py | 257 | # Create a cache key that includes all parameters to ensure exact matches | COMMENT |
| MEDIUM | src/agents/warren_buffett.py | 141 | # Create the message | COMMENT |
| MEDIUM | src/agents/sentiment.py | 120 | # Create the sentiment message | COMMENT |
| MEDIUM | src/agents/fundamentals.py | 145 | # Create the fundamental analysis message | COMMENT |
| MEDIUM | src/agents/technicals.py | 140 | # Create the technical analyst message | COMMENT |
| MEDIUM | src/agents/news_sentiment.py | 138 | # Create the sentiment analysis | COMMENT |
| MEDIUM | src/agents/nassim_taleb.py | 156 | # Create the message | COMMENT |
| MEDIUM | src/utils/progress.py | 92 | # Create the status text with appropriate styling | COMMENT |
| MEDIUM | src/utils/progress.py | 115 | # Create a global instance | COMMENT |
| MEDIUM | src/utils/ollama.py | 275 | # Create a progress bar | COMMENT |
| MEDIUM | src/data/cache.py | 16 | # Create a set of existing keys for O(1) lookup | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/backend/main.py | 33 | CODE | |
| LOW | app/backend/routes/hedge_fund.py | 26 | CODE | |
| LOW | app/backend/routes/hedge_fund.py | 170 | CODE | |
| LOW | app/backend/routes/hedge_fund.py | 63 | CODE | |
| LOW | app/backend/routes/hedge_fund.py | 220 | CODE | |
| LOW | app/backend/services/backtest_service.py | 60 | CODE | |
| LOW | app/backend/services/backtest_service.py | 285 | CODE | |
| LOW | app/backend/services/portfolio.py | 6 | CODE | |
| LOW | v2/analyze.py | 27 | CODE | |
| LOW | v2/llm/client.py | 78 | CODE | |
| LOW | src/llm/models.py | 151 | CODE | |
| LOW | src/backtesting/engine.py | 96 | CODE | |
| LOW | src/graph/state.py | 21 | CODE | |
| LOW | src/graph/state.py | 24 | CODE | |
| LOW | src/agents/peter_lynch.py | 161 | CODE | |
| LOW | src/agents/peter_lynch.py | 289 | CODE | |
| LOW | src/agents/peter_lynch.py | 396 | CODE | |
| LOW | src/agents/rakesh_jhunjhunwala.py | 17 | CODE | |
| LOW | src/agents/rakesh_jhunjhunwala.py | 162 | CODE | |
| LOW | src/agents/rakesh_jhunjhunwala.py | 246 | CODE | |
| LOW | src/agents/rakesh_jhunjhunwala.py | 437 | CODE | |
| LOW | src/agents/rakesh_jhunjhunwala.py | 498 | CODE | |
| LOW | src/agents/warren_buffett.py | 696 | CODE | |
| LOW | src/agents/michael_burry.py | 173 | CODE | |
| LOW | src/agents/stanley_druckenmiller.py | 166 | CODE | |
| LOW | src/agents/stanley_druckenmiller.py | 273 | CODE | |
| LOW | src/agents/stanley_druckenmiller.py | 351 | CODE | |
| LOW | src/agents/technicals.py | 407 | CODE | |
| LOW | src/agents/cathie_wood.py | 111 | CODE | |
| LOW | src/agents/cathie_wood.py | 210 | CODE | |
| LOW | src/agents/phil_fisher.py | 167 | CODE | |
| LOW | src/agents/phil_fisher.py | 328 | CODE | |
| LOW | src/agents/phil_fisher.py | 461 | CODE | |
| LOW | src/agents/portfolio_manager.py | 25 | CODE | |
| LOW | src/agents/news_sentiment.py | 25 | CODE | |
| LOW | src/agents/valuation.py | 21 | CODE | |
| LOW | src/agents/charlie_munger.py | 161 | CODE | |
| LOW | src/agents/charlie_munger.py | 268 | CODE | |
| LOW | src/agents/charlie_munger.py | 469 | CODE | |
| LOW | src/agents/ben_graham.py | 207 | CODE | |
| LOW | src/agents/nassim_taleb.py | 269 | CODE | |
| LOW | src/agents/nassim_taleb.py | 355 | CODE | |
| LOW | src/agents/nassim_taleb.py | 453 | CODE | |
| LOW | src/agents/nassim_taleb.py | 559 | CODE | |
| LOW | src/agents/nassim_taleb.py | 628 | CODE | |
| LOW | src/agents/mohnish_pabrai.py | 196 | CODE | |
| LOW | src/agents/mohnish_pabrai.py | 253 | CODE | |
| LOW | src/agents/risk_manager.py | 11 | CODE | |
| LOW | src/utils/llm.py | 10 | CODE | |
| LOW | src/utils/llm.py | 87 | CODE | |
| LOW | src/utils/llm.py | 109 | CODE | |
| LOW | src/utils/display.py | 17 | CODE | |
| LOW | src/utils/ollama.py | 114 | CODE | |
| LOW | src/utils/ollama.py | 207 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/run.sh | 123 | # Check if command is provided | COMMENT |
| LOW | docker/run.sh | 174 | # Check if Ollama is running | COMMENT |
| LOW | docker/run.sh | 226 | # Check if the model was successfully pulled | COMMENT |
| LOW | docker/run.sh | 244 | # Check if .env file exists, if not create from .env.example | COMMENT |
| LOW | app/run.sh | 135 | # Check if .env exists in the root directory | COMMENT |
| LOW | app/run.sh | 164 | # Check if database already exists | COMMENT |
| LOW | app/run.sh | 178 | # Check if dependencies are actually installed and working | COMMENT |
| LOW | app/run.sh | 202 | # Check if node_modules exists and has content | COMMENT |
| LOW | app/run.sh | 260 | # Check if backend started successfully | COMMENT |
| LOW | app/run.sh | 289 | # Check if frontend started successfully | COMMENT |
| LOW | app/run.sh | 318 | # Check if processes are still running | COMMENT |
| LOW | app/backend/repositories/api_key_repository.py | 23 | # Check if API key already exists for this provider | COMMENT |
| LOW | …rsions/3f9a6b7c8d2e_add_hedgefundflowruncycle_table.py | 22 | # Check if columns already exist before adding them | COMMENT |
| LOW | …rsions/3f9a6b7c8d2e_add_hedgefundflowruncycle_table.py | 71 | # Check if table exists before dropping | COMMENT |
| LOW | app/backend/routes/hedge_fund.py | 100 | # Check if client disconnected | COMMENT |
| LOW | app/backend/routes/hedge_fund.py | 275 | # Check if client disconnected | COMMENT |
| LOW | app/backend/services/graph.py | 97 | # Check if this is a direct connection from analyst to portfolio manager | COMMENT |
| LOW⚡ | app/backend/services/ollama_service.py | 234 | # Check if already running | COMMENT |
| LOW⚡ | app/backend/services/ollama_service.py | 279 | # Check if already stopped | COMMENT |
| LOW | app/backend/services/ollama_service.py | 470 | # Check if download is complete | COMMENT |
| LOW | src/tools/api.py | 321 | # Check if end_date is today | COMMENT |
| LOW | src/llm/models.py | 188 | # Check if OLLAMA_HOST is set (for Docker on macOS) | COMMENT |
| LOW | src/agents/warren_buffett.py | 730 | # Check if company has been able to maintain high margins consistently | COMMENT |
| LOW | src/agents/cathie_wood.py | 136 | # Check if growth is accelerating (first growth rate higher than last, since they're in reverse order) | COMMENT |
| LOW | src/agents/phil_fisher.py | 278 | # Check if margins are stable or improving (comparing oldest to newest) | COMMENT |
| LOW | src/agents/phil_fisher.py | 388 | # Check if FCF is positive in recent years | COMMENT |
| LOW | src/agents/charlie_munger.py | 183 | # Check if ROIC consistently above 15% (Munger's threshold) | COMMENT |
| LOW⚡ | src/utils/docker.py | 88 | # Check if the model has been downloaded | COMMENT |
| LOW | src/utils/ollama.py | 136 | # Check if it's now installed | COMMENT |
| LOW | src/utils/ollama.py | 193 | # Check if it's now installed | COMMENT |
| LOW | src/utils/ollama.py | 321 | # Check if Ollama is installed | COMMENT |
| LOW | src/utils/ollama.py | 339 | # Check if the model is already downloaded | COMMENT |
| LOW | src/utils/ollama.py | 362 | # Check if we're running in Docker | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/frontend/src/contexts/node-context.tsx | 123 | // Add message to history if it's new - use more robust checking | COMMENT |
| MEDIUM | src/tools/api.py | 94 | # Cache the results using the comprehensive cache key | COMMENT |
| MEDIUM | src/tools/api.py | 136 | # Cache the results as dicts using the comprehensive cache key | COMMENT |
| MEDIUM | src/tools/api.py | 244 | # Cache the results using the comprehensive cache key | COMMENT |
| MEDIUM | src/tools/api.py | 310 | # Cache the results using the comprehensive cache key | COMMENT |
| MEDIUM | src/agents/rakesh_jhunjhunwala.py | 115 | # Create comprehensive analysis summary | COMMENT |
| MEDIUM | src/agents/cathie_wood.py | 39 | # Request multiple periods of data (annual or TTM) for a more robust view. | COMMENT |
| MEDIUM | src/agents/bill_ackman.py | 37 | # Request multiple periods of data (annual or TTM) for a more robust long-term view. | COMMENT |
| MEDIUM | src/agents/mohnish_pabrai.py | 167 | # Low leverage | COMMENT |
| MEDIUM | src/agents/risk_manager.py | 223 | """Calculate comprehensive volatility metrics from price data.""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | v2/event_study/engine.py | 153 | # Step 1: Get earnings filings for this ticker | COMMENT |
| LOW⚡ | v2/event_study/engine.py | 158 | # Step 2: Drop retrospective rows (e.g., Q4 data parsed from a Q1 8-K) | COMMENT |
| LOW⚡ | v2/event_study/engine.py | 163 | # Step 3: Fetch stock prices — one call covering all events. | COMMENT |
| LOW | v2/event_study/engine.py | 176 | # Step 4: Build aligned return series. | COMMENT |
| LOW | v2/event_study/engine.py | 196 | # Step 5: Process each earnings event | COMMENT |
| LOW⚡ | src/utils/docker.py | 12 | # Step 1: Check if Ollama service is available | COMMENT |
| LOW⚡ | src/utils/docker.py | 16 | # Step 2: Check if model is already available | COMMENT |
| LOW⚡ | src/utils/docker.py | 22 | # Step 3: Model not available - ask if user wants to download | COMMENT |
| LOW⚡ | src/utils/docker.py | 29 | # Step 4: Download the model | COMMENT |
| LOW | src/utils/docker.py | 68 | # Step 1: Initiate the download | COMMENT |
| LOW⚡ | src/utils/docker.py | 80 | # Step 2: Monitor the download progress | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | v2/event_study/engine.py | 153 | # Step 1: Get earnings filings for this ticker | COMMENT |
| LOW⚡ | v2/event_study/engine.py | 158 | # Step 2: Drop retrospective rows (e.g., Q4 data parsed from a Q1 8-K) | COMMENT |
| LOW⚡ | v2/event_study/engine.py | 163 | # Step 3: Fetch stock prices — one call covering all events. | COMMENT |
| LOW | v2/event_study/engine.py | 176 | # Step 4: Build aligned return series. | COMMENT |
| LOW | v2/event_study/engine.py | 196 | # Step 5: Process each earnings event | COMMENT |
| LOW⚡ | src/utils/docker.py | 12 | # Step 1: Check if Ollama service is available | COMMENT |
| LOW⚡ | src/utils/docker.py | 16 | # Step 2: Check if model is already available | COMMENT |
| LOW⚡ | src/utils/docker.py | 22 | # Step 3: Model not available - ask if user wants to download | COMMENT |
| LOW⚡ | src/utils/docker.py | 29 | # Step 4: Download the model | COMMENT |
| LOW | src/utils/docker.py | 68 | # Step 1: Initiate the download | COMMENT |
| LOW⚡ | src/utils/docker.py | 80 | # Step 2: Monitor the download progress | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/backend/main.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/backend/database/__init__.py | 4 | __all__ = ["get_db", "engine", "SessionLocal", "Base"] | CODE |
| LOW | app/backend/repositories/__init__.py | 3 | __all__ = ["FlowRepository"] | CODE |
| LOW | app/backend/routes/ollama.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/backend/services/ollama_service.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | v2/event_study/__init__.py | 22 | __all__ = [ | CODE |
| LOW | v2/event_study/engine.py | 50 | logger = logging.getLogger(__name__) | CODE |
| LOW | v2/llm/__init__.py | 6 | __all__ = [ | CODE |
| LOW | v2/backtesting/__init__.py | 10 | __all__ = [ | CODE |
| LOW | v2/backtesting/engine.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | v2/signals/__init__.py | 19 | __all__ = [ | CODE |
| LOW | v2/signals/llm_agent.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | v2/features/__init__.py | 15 | __all__ = [ | CODE |
| LOW | v2/data/client.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | v2/data/__init__.py | 18 | __all__ = [ | CODE |
| LOW | src/tools/api.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/backtesting/metrics.py | 15 | def update_metrics(self, metrics: PerformanceMetrics, values: Sequence[PortfolioValuePoint]) -> None: | CODE |
| LOW | src/backtesting/__init__.py | 30 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/agents/stanley_druckenmiller.py | 0 | based on the following analysis, create a phil fisher-style investment signal. analysis data for {ticker}: {analysis_dat | STRING |
| HIGH | src/agents/cathie_wood.py | 0 | based on the following analysis, create a phil fisher-style investment signal. analysis data for {ticker}: {analysis_dat | STRING |
| HIGH | src/agents/phil_fisher.py | 0 | based on the following analysis, create a phil fisher-style investment signal. analysis data for {ticker}: {analysis_dat | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | v2/data/models.py | 40 | All ratio/metric fields are nullable (NaN/Inf sanitised to null). | STRING |
| HIGH | v2/data/models.py | 213 | # Period-over-period changes (omitted from response if null) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/frontend/src/components/Flow.tsx | 181 | // useEffect(() => { | COMMENT |
| LOW | app/frontend/src/lib/utils.ts | 21 | return 'bg-gray-600/20 text-primary border-gray-600/40'; | COMMENT |
| LOW | app/backend/alembic.ini | 1 | # A generic, single database configuration. | COMMENT |
| LOW | app/backend/alembic.ini | 21 | # Any required deps can installed by adding `alembic[tz]` to the pip requirements | COMMENT |
| LOW | app/backend/alembic.ini | 41 | # The path separator used here should be the separator specified by "version_path_separator" below. | COMMENT |
| LOW | app/backend/alembic.ini | 61 | COMMENT | |
| LOW | tests/__init__.py | 1 | # Tests package | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/tools/api.py | 30 | Make an API request with rate limiting handling and moderate backoff. Args: url: The URL to reques | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/backend/repositories/flow_repository.py | 47 | CODE | |
| LOW | app/backend/services/graph.py | 138 | CODE | |
| LOW | src/utils/display.py | 333 | CODE |