TradingAgents/docs/plans/2026-02-20-chainlit-web-ui-...

2.2 KiB

TradingAgents Chainlit Web UI — Design

Summary

Add a Chainlit web UI to TradingAgents so it can be deployed on Railway as a web service. Users interact via chat messages (e.g., "Analyze NVDA") and see live agent progress streamed into the browser.

Architecture

Thin Chainlit wrapper around the existing TradingAgentsGraph programmatic API. ~150 lines of new code in a single app.py.

Components

app.py (Chainlit entry point)

  • @cl.on_chat_start — Welcome message explaining usage (e.g., "Type a ticker like NVDA or Analyze AAPL 2024-12-01")
  • @cl.on_message — Parse ticker + optional date from user message, create TradingAgentsGraph with Anthropic config, run propagate() in debug mode, stream Chainlit Step messages for each agent phase, send final decision as formatted message

Dockerfile

  • Python 3.13-slim base
  • Install requirements.txt
  • Expose $PORT
  • CMD: chainlit run app.py --host 0.0.0.0 --port $PORT

railway.toml

  • Build from Dockerfile
  • Health check on /

Railway Environment Variables

  • ANTHROPIC_API_KEY — required, for Claude models
  • PORT — auto-set by Railway

LLM Configuration

  • Provider: anthropic
  • Quick-think model: claude-haiku-4-5-20251001
  • Deep-think model: claude-sonnet-4-5-20241022
  • Data vendor: yfinance (no extra API keys needed)

Data Flow

User message: "Analyze NVDA"
  -> Parse: ticker=NVDA, date=today
  -> TradingAgentsGraph(config={anthropic, haiku/sonnet})
  -> graph.propagate("NVDA", "2026-02-20")
     -> Debug stream chunks
     -> Each chunk -> Chainlit Step (Analyst, Research, Trading, Risk, Portfolio)
  -> Final decision -> formatted Chainlit message with markdown

Message Parsing

Simple regex/string parsing:

  • "NVDA" -> ticker=NVDA, date=today
  • "Analyze AAPL 2024-12-01" -> ticker=AAPL, date=2024-12-01
  • "What's the outlook for TSLA?" -> ticker=TSLA, date=today
  • Extract uppercase 1-5 letter words as potential tickers

Deployment

  1. Push changes to github.com/dtarkent2-sys/TradingAgents main branch
  2. Create Railway service from GitHub repo
  3. Set ANTHROPIC_API_KEY env var
  4. Railway auto-deploys, Chainlit serves on assigned PORT