candle-annotator/openspec/changes/archive/2026-02-18-ml-ui-connection/tasks.md
2026-02-18 10:21:05 +01:00

4.3 KiB

1. FastAPI Pattern Detection Endpoints

  • 1.1 Extract pattern detection logic from generate_talib_annotations.py into a reusable module (e.g., app/patterns.py) with detect_patterns(candles, pattern_names) function
  • 1.2 Add GET /patterns/available endpoint returning all supported CDL pattern names with display names
  • 1.3 Add POST /patterns/detect endpoint accepting {candles, patterns}, running selected CDL functions, returning span annotations with source "talib"
  • 1.4 Add input validation: reject invalid pattern names with HTTP 400, handle empty patterns list as "run all"

2. FastAPI Training Endpoints

  • 2.1 Add POST /training/start endpoint that launches training in a background thread, returns {run_id, status: "running"}, and rejects concurrent runs with HTTP 409
  • 2.2 Add GET /training/runs endpoint returning training run history from the training_runs table, sorted by date descending
  • 2.3 Add GET /training/dataset-info endpoint returning labeled dataset file path, existence, size, and row count
  • 2.4 Add background training thread management: track active run, update DB status on completion/failure

3. FastAPI Model Loading Endpoint

  • 3.1 Add POST /model/load endpoint accepting {run_id}, looking up the training run, loading the model artifact, and replacing the active model in AppState
  • 3.2 Add thread-safe model swap with locking to prevent conflicts with in-flight prediction requests

4. Next.js Proxy Routes

  • 4.1 Add GET /api/patterns/available proxy route
  • 4.2 Add POST /api/patterns/detect proxy route
  • 4.3 Add POST /api/training/start proxy route
  • 4.4 Add GET /api/training/runs proxy route
  • 4.5 Add GET /api/training/dataset-info proxy route
  • 4.6 Add POST /api/model/load proxy route
  • 4.7 Extend DELETE /api/span-annotations to support source and label query parameters for bulk deletion

5. TA-Lib Pattern UI Panel

  • 5.1 Create TalibPatternPanel component with collapsible section, fetching available patterns from /api/patterns/available on mount
  • 5.2 Add pattern checkboxes grouped by category with "Select All" / "Deselect All" toggle
  • 5.3 Add "Detect Patterns" button that sends selected patterns + chart candles to /api/patterns/detect, shows loading state
  • 5.4 Save detection results as span annotations via POST /api/span-annotations with source: "talib" and refresh the annotation list
  • 5.5 Add detection results summary showing pattern counts grouped by name
  • 5.6 Add "Clear All TA-Lib" bulk delete button calling DELETE /api/span-annotations?source=talib&chartId=X
  • 5.7 Add per-pattern-type delete in results summary

6. Training UI Panel

  • 6.1 Create TrainingPanel component with collapsible section
  • 6.2 Add model type dropdown (Random Forest / XGBoost) defaulting to Random Forest
  • 6.3 Add dataset info display fetching from /api/training/dataset-info, showing warning if missing
  • 6.4 Add "Start Training" button with loading state, disabled when training active or dataset missing
  • 6.5 Add training status polling (5s interval) while a run is active, showing progress indicator
  • 6.6 Add training completion/failure handling with success message and metrics display
  • 6.7 Add training run history list fetching from /api/training/runs, showing 5 most recent runs with model type, status, date, metrics

7. Model Selector Integration

  • 7.1 Create ModelSelector dropdown component fetching completed training runs from /api/training/runs
  • 7.2 Integrate ModelSelector into PredictionPanel above action buttons, showing current model as active
  • 7.3 Wire model switch: on selection call POST /api/model/load, clear prediction cache, refresh model info
  • 7.4 Handle model load errors: show error toast, keep previous model active

8. Sidebar Layout Integration

  • 8.1 Add TalibPatternPanel to the sidebar in page.tsx between SpanAnnotationList and PredictionPanel
  • 8.2 Add TrainingPanel to the sidebar between TalibPatternPanel and PredictionPanel
  • 8.3 Make TalibPatternPanel, TrainingPanel, and PredictionPanel collapsible (default collapsed for new panels)
  • 8.4 Wire all new component state and callbacks in page.tsx