Commit Graph

23 Commits

Author SHA1 Message Date
SharkQuant 2e37bc117d migrate off Railway, update Dockerfile and LLM clients 2026-04-11 22:51:22 -04:00
dtarkent2-sys 1d3f5e9c86 fix: 10 reliability and observability fixes for trading pipeline
invoke_structured() catches ValidationError with safe defaults, ticker validation
(empty/length), 60s per-LLM-call timeout, event buffer capped at 5000, recursion
limit 50→25, tier 2 low-confidence DataFlags, tier 3 upstream confidence checks,
heartbeat JSON every 15s, data source attribution in all prompts, structured logging
replaces print()

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:08:01 +00:00
dtarkent2-sys 5e8c81e738 fix: 6 audit issues — missing await, regime range, pct_out scaling, ticker validation, dead code, flag merge
1. app.py: await _update_in_progress (coroutine was silently dropped)
2. models.py + tier1.py: regime_score_adjustment range ±2→±10 (was negligible on 0-100 scale)
3. y_finance.py: pct_out * 100 (was fraction, displayed as percent)
4. app.py: ticker validation accepts dots/hyphens (BRK.B, BF-B)
5. portfolio.py: wire _fetch_peer_basics into theme substitution (was dead code)
6. setup.py: accumulate global_flags across parallel agents (dict.update was dropping them)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:56:38 +00:00
dtarkent2-sys ee80a42971 feat: add regime awareness, smart-money tracking, theme substitution & position replacement
- MacroRegimeOutput: risk_appetite, liquidity_regime, regime_score_adjustment (-2 to +2)
- InstitutionalFlowOutput: 13F holders, insider transactions, short interest trend, smart_money_signal
- Scoring node applies regime adjustment to master score
- Theme Substitution Engine: identifies best expression of theme, ranks peers, flags overlap
- Position Replacement Agent: compares candidate to theme alternatives, flags replacements
- Pipeline: Scoring → Portfolio Analysis → Debate → Decision
- Final decision narrative includes theme context and replacement flags

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:46:03 +00:00
dtarkent2-sys 7ad9e1d1ce feat: rebuild as structured Pydantic equity ranking engine
Replace generic LLM debate system with a tiered, macro-aware equity
ranking pipeline where every agent returns Pydantic structured output
and scoring is deterministic Python — no prose drives downstream decisions.

Architecture: Validation → Tier 1 (Macro+Liquidity parallel) →
Tier 2 (8 agents parallel) → Scoring (Archetype+MasterScore) →
Tier 3 (Bull/Bear debate + Risk + FinalDecision) → END

Master Score: 25% business_quality + 20% macro + 15% institutional_flow
+ 10% valuation + 10% entry_timing + 10% earnings_revisions + 5% backlog
+ 5% crowding. Hard veto gates, confidence penalties, position role
assignment all computed deterministically.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:30:46 +00:00
dtarkent2-sys d1fa7b6004 perf: switch to Ollama Cloud (deepseek-v3.1:671b-cloud)
Use Ollama Cloud GPU inference instead of self-hosted CPU Ollama.
1-3s per call vs 2-15 minutes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:18:08 +00:00
dtarkent2-sys 512aff3b40 perf: default to Anthropic Claude models instead of Groq Llama
- deep_think defaults to claude-sonnet-4-6
- quick_think defaults to claude-haiku-4-5-20251001
- LLM provider defaults to anthropic

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:06:22 +00:00
dtarkent2-sys 055a8159a4 Add debug logging for LLM provider and type
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 02:30:37 +00:00
dtarkent2-sys c6bf2b570b Switch from Anthropic to Groq for LLM calls
Use Groq's free OpenAI-compatible API instead of Anthropic Claude
to avoid API credit costs. Defaults to llama-3.3-70b-versatile.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 23:33:32 +00:00
dtarkent2-sys 3ac1c5ad3d Harden security, fix memory leak, clean up deps
- Add API key auth (AGENTS_API_KEY env var) on /analyze endpoints
- Add CORS_ORIGINS env var instead of hardcoded wildcard
- Add memory cleanup (30min TTL) and concurrency semaphore (max 3)
- Add 10-minute analysis timeout
- Fix ticker validation (alphanumeric check)
- Remove unused deps (redis, backtrader, parsel, rich, typer, questionary)
- Fix pyproject.toml: replace chainlit with actual FastAPI deps
- Add .dockerignore, add eval_results/ to .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 03:17:11 +00:00
dtarkent2-sys 3cd0c19b35 Parallelize research & risk debate stages for ~25% faster analysis
Run Bull+Bear researchers concurrently and all 3 risk analysts
(Aggressive/Conservative/Neutral) concurrently instead of sequentially.
With max_debate_rounds=1, there's no back-and-forth so parallel execution
is safe. Sequential mode is completely unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 14:45:59 +00:00
dtarkent2-sys aa654c9425 Emit final agent_update events so all dots turn green at completion
The final decision block set all agents to "completed" in buf but never
emitted agent_update SSE events for them. This left Risk stage dots as
cyan (active) and Decision dot as gray on the UI. Now emits agent_update
for any agents not yet shown as completed before the decision event.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 11:53:03 +00:00
dtarkent2-sys 67463a2b99 Fix agent status reset bug in stream_mode=values
With stream_mode="values", each chunk contains the full accumulated state.
The debate and risk sections were checking data fields (bull/bear history,
aggressive/conservative/neutral history) without guarding against re-processing,
causing completed agents to be reset to "in_progress" on every subsequent
chunk. This made agent and report counts appear stuck at 5/12 and 4/7.

Fix: move the _emitted flag guard to the outer if-block so the entire
section is skipped once its event has been emitted.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 11:50:32 +00:00
dtarkent2-sys 47771849ca Clean up debug logging and fix reports count
Remove verbose debug prints added during parallel analysts development.
Fix reports showing 4/7 by updating buf.report_sections for investment_plan,
trader_investment_plan, and final_trade_decision (previously only analyst
reports were tracked).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 11:41:01 +00:00
dtarkent2-sys 05b319c101 debug: add chunk-level logging in stream loop 2026-02-20 11:26:37 +00:00
dtarkent2-sys 64defb3939 debug: add logging to trace analysis execution 2026-02-20 11:19:35 +00:00
dtarkent2-sys 223879bc04 feat: parallelize analyst agents for ~3x speedup
Run all 4 analysts (Market, Social, News, Fundamentals) concurrently
using asyncio.gather instead of sequentially. Each analyst gets its own
isolated message state and tool-calling loop. Cuts analyst phase from
~8-9 min to ~2-3 min (total analysis from ~11 min to ~4-5 min).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 11:13:16 +00:00
dtarkent2-sys f5519b9efe fix: add SSE replay buffer + fix research agent status tracking
- Replace global update_research_team_status() with local buf calls
  (was updating CLI's global buffer, not analysis-specific one)
- Add replay buffer: all events stored in memory per analysis
- Support ?last_event=N query param for reconnection replay
- Send event IDs so browser can track position
- Mark analysis as done so replay works after completion

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 03:48:22 +00:00
dtarkent2-sys 777226722a fix: add SSE heartbeat to prevent Railway proxy timeout
Railway kills idle connections after ~30s. During long LLM calls
between agent stages, the SSE stream goes silent and gets dropped.
Now sends heartbeat events every 15s to keep the connection alive.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 03:25:53 +00:00
dtarkent2-sys 52228414ed Replace Chainlit with FastAPI SSE backend
Swap Chainlit chatbot UI for a minimal FastAPI service with:
- POST /analyze to start analysis
- GET /analyze/{id}/stream for SSE progress events
- GET /health for Railway healthcheck

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 02:43:24 +00:00
dtarkent2-sys ac782d179d feat: rebuild Chainlit UI to match CLI experience
Replaces the barebones web UI with one that mirrors the CLI:
- Agent status table with team/agent/status tracking
- Reuses CLI's MessageBuffer, update_analyst_statuses, classify_message_type
- Shows full debate transcripts (Bull/Bear, Risk team)
- Live stats (LLM calls, tokens, elapsed time)
- Collapsible Steps for each phase with full report content

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 02:04:13 +00:00
dtarkent2-sys 76f1e0abf0 fix: use correct Claude model ID (claude-sonnet-4-6)
The old model ID claude-sonnet-4-5-20241022 returns 404. Updated to
the current claude-sonnet-4-6 for the deep thinking model.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 01:52:46 +00:00
dtarkent2-sys eade96f1c9 feat: add Chainlit web UI + Dockerfile for Railway deployment
Adds a Chainlit-based web interface that wraps TradingAgentsGraph,
streaming analyst reports, research debates, and final decisions
to the browser in real-time. Configured for Anthropic Claude models.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 00:52:45 +00:00