{"openapi":"3.1.0","info":{"title":"Trading Simulation API","description":"REST and SSE API for LLM trading simulations","version":"1.0.0"},"paths":{"/api/runs":{"get":{"tags":["runs"],"summary":"List Runs","description":"List all active and recent runs.","operationId":"list_runs_api_runs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunListResponse"}}}}}},"post":{"tags":["runs"],"summary":"Start Run","description":"Start a new simulation run.","operationId":"start_run_api_runs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartRunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/runs/{run_id}":{"get":{"tags":["runs"],"summary":"Get Run Status","description":"Get the status of a specific run.","operationId":"get_run_status_api_runs__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["runs"],"summary":"Cancel Run","description":"Cancel a running simulation.","operationId":"cancel_run_api_runs__run_id__delete","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cancel Run Api Runs  Run Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/past-runs":{"get":{"tags":["runs"],"summary":"List Past Runs","description":"List all past runs from database.","operationId":"list_past_runs_api_past_runs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PastRunsListResponse"}}}}}}},"/api/past-runs/{run_id}":{"get":{"tags":["runs"],"summary":"Get Past Run","description":"Get detailed information about a past run.","operationId":"get_past_run_api_past_runs__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PastRunDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/past-runs/{run_id}/events":{"get":{"tags":["runs"],"summary":"Get Past Run Events","description":"Get all events from a past run.","operationId":"get_past_run_events_api_past_runs__run_id__events_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Past Run Events Api Past Runs  Run Id  Events Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/runs/{run_id}/state":{"get":{"tags":["runs"],"summary":"Get Run State","description":"Get the current aggregated state for a run.","operationId":"get_run_state_api_runs__run_id__state_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Run State Api Runs  Run Id  State Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/runs/{run_id}/chart-data":{"get":{"tags":["runs"],"summary":"Get Run Chart Data","description":"Get chart data (P&L snapshots) for a run.","operationId":"get_run_chart_data_api_runs__run_id__chart_data_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"max_points","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Points"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Run Chart Data Api Runs  Run Id  Chart Data Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/runs/{run_id}/trades":{"get":{"tags":["runs"],"summary":"Get Run Trades","description":"Get trade history for a run.","operationId":"get_run_trades_api_runs__run_id__trades_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Run Trades Api Runs  Run Id  Trades Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/runs/{run_id}/orders":{"get":{"tags":["runs"],"summary":"Get Run Orders","description":"Get broker orders for a run (alpaca_paper/alpaca_live modes).","operationId":"get_run_orders_api_runs__run_id__orders_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Run Orders Api Runs  Run Id  Orders Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/runs/{run_id}/reasoning":{"get":{"tags":["runs"],"summary":"Get Run Reasoning","description":"Get reasoning text for a run.","operationId":"get_run_reasoning_api_runs__run_id__reasoning_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"tail","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tail"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Run Reasoning Api Runs  Run Id  Reasoning Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/runs/{run_id}/chat-snapshots":{"get":{"tags":["runs"],"summary":"Get Chat Snapshots","description":"Get all chat history snapshots for a run.","operationId":"get_chat_snapshots_api_runs__run_id__chat_snapshots_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Chat Snapshots Api Runs  Run Id  Chat Snapshots Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/runs/{run_id}/chat-snapshots/{step}":{"get":{"tags":["runs"],"summary":"Get Chat Snapshot","description":"Get chat history snapshot for a specific step.","operationId":"get_chat_snapshot_api_runs__run_id__chat_snapshots__step__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"step","in":"path","required":true,"schema":{"type":"integer","title":"Step"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Chat Snapshot Api Runs  Run Id  Chat Snapshots  Step  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/runs/{run_id}/llm-logs":{"get":{"tags":["runs"],"summary":"Get Llm Request Logs","description":"Get all LLM request logs for a run.","operationId":"get_llm_request_logs_api_runs__run_id__llm_logs_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Llm Request Logs Api Runs  Run Id  Llm Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/runs/{run_id}/stream":{"get":{"tags":["sse"],"summary":"Stream Run","description":"Stream events from a running simulation via SSE.","operationId":"stream_run_api_runs__run_id__stream_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"from_seq","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"From Seq"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/past-runs/{run_id}/replay":{"get":{"tags":["sse"],"summary":"Replay Past Run","description":"Replay events from a past run via SSE.","operationId":"replay_past_run_api_past_runs__run_id__replay_get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"speed","in":"query","required":false,"schema":{"type":"number","default":10.0,"title":"Speed"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/broker-accounts":{"get":{"tags":["broker-accounts"],"summary":"List Broker Accounts","description":"Return active broker accounts (safe fields only -- no secrets).","operationId":"list_broker_accounts_api_broker_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Broker Accounts Api Broker Accounts Get"}}}}}}},"/api/broker-accounts/{account_id}/balance":{"get":{"tags":["broker-accounts"],"summary":"Get Broker Account Balance","description":"Fetch real-time account balance from the broker (e.g. Alpaca).","operationId":"get_broker_account_balance_api_broker_accounts__account_id__balance_get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Broker Account Balance Api Broker Accounts  Account Id  Balance Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/realtime/broker-accounts":{"get":{"tags":["realtime"],"summary":"Get Default Broker Accounts","description":"Return the default paper + live broker accounts for the Realtime page.\n\nPicks ``is_default = true`` first, then falls back to the first active\nrow for each environment. Returns ``null`` for an environment that has\nno active broker account configured.","operationId":"get_default_broker_accounts_api_realtime_broker_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}]},"type":"object","title":"Response Get Default Broker Accounts Api Realtime Broker Accounts Get"}}}}}}},"/api/realtime/broker-accounts/{account_id}/snapshot":{"get":{"tags":["realtime"],"summary":"Get Account Snapshot","description":"Return live account + positions for a broker account.\n\nThe payload is everything the Realtime page header + position list need\nin a single round-trip. ``opened_at`` per position is best-effort and\nmay be null if Alpaca's activity stream doesn't go back far enough.\n\nAlpaca rate cost is steady-state O(1) in the number of positions: one\n``GET /v2/account`` plus one ``GET /v2/positions`` per tick. The\n``/v2/account/activities/FILL`` endpoint is hit only when at least one\nposition's ``(ticker, signed_qty)`` cache key is missing, in which\ncase a single (paginated) call resolves every miss in one shot.","operationId":"get_account_snapshot_api_realtime_broker_accounts__account_id__snapshot_get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Account Snapshot Api Realtime Broker Accounts  Account Id  Snapshot Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/realtime/bars":{"get":{"tags":["realtime"],"summary":"Get Bars","description":"Proxy Massive aggregate bars (single ticker, single range).","operationId":"get_bars_api_realtime_bars_get","parameters":[{"name":"ticker","in":"query","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"from_ms","in":"query","required":true,"schema":{"type":"integer","title":"From Ms"}},{"name":"to_ms","in":"query","required":true,"schema":{"type":"integer","title":"To Ms"}},{"name":"multiplier","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Multiplier"}},{"name":"timespan","in":"query","required":false,"schema":{"type":"string","default":"second","title":"Timespan"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Bars Api Realtime Bars Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/realtime/bars/batch":{"post":{"tags":["realtime"],"summary":"Get Bars Batch","description":"Batch wrapper around :func:`get_bars` so the page fans out in one HTTP call.","operationId":"get_bars_batch_api_realtime_bars_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BarsBatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Bars Batch Api Realtime Bars Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health Check","description":"Health check endpoint (no auth required).","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"BarsBatchRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BarsBatchRequestItem"},"type":"array","title":"Items"}},"type":"object","title":"BarsBatchRequest"},"BarsBatchRequestItem":{"properties":{"ticker":{"type":"string","title":"Ticker"},"from_ms":{"type":"integer","title":"From Ms"},"to_ms":{"type":"integer","title":"To Ms"},"multiplier":{"type":"integer","title":"Multiplier","default":1},"timespan":{"type":"string","title":"Timespan","default":"second"}},"type":"object","required":["ticker","from_ms","to_ms"],"title":"BarsBatchRequestItem"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PastRunDetailResponse":{"properties":{"dir_name":{"type":"string","title":"Dir Name"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"status":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Status"},"results":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Results"}},"type":"object","required":["dir_name"],"title":"PastRunDetailResponse","description":"Detailed response for a single past run."},"PastRunSummary":{"properties":{"run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Id"},"dir_name":{"type":"string","title":"Dir Name"},"status":{"type":"string","title":"Status"},"run_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Mode"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"simulation_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Simulation Date"},"llm_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Provider"},"tickers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tickers"},"initial_cash_balance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Initial Cash Balance"},"broker_start_equity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Broker Start Equity"},"leverage_multiplier":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Leverage Multiplier"},"initial_buying_power":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Initial Buying Power"},"spx_start_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Spx Start Price"},"spx_end_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Spx End Price"},"broker_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Broker Account Id"},"broker_account_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Broker Account Name"},"results_summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Results Summary"}},"type":"object","required":["run_id","dir_name","status","started_at","simulation_date","llm_provider","tickers"],"title":"PastRunSummary","description":"Summary of a past run for listing."},"PastRunsListResponse":{"properties":{"runs":{"items":{"$ref":"#/components/schemas/PastRunSummary"},"type":"array","title":"Runs"}},"type":"object","required":["runs"],"title":"PastRunsListResponse","description":"Response with list of past runs."},"RunListResponse":{"properties":{"runs":{"items":{"$ref":"#/components/schemas/RunStatusResponse"},"type":"array","title":"Runs"}},"type":"object","required":["runs"],"title":"RunListResponse","description":"Response with list of runs."},"RunStatusResponse":{"properties":{"run_id":{"type":"string","title":"Run Id"},"status":{"type":"string","enum":["pending","scheduled","running","completed","cancelled","failed","interrupted"],"title":"Status"},"started_at":{"type":"string","title":"Started At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"scheduled_start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled Start Time"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["run_id","status","started_at","config"],"title":"RunStatusResponse","description":"Response with run status details."},"StartRunRequest":{"properties":{"run_mode":{"type":"string","enum":["backtest","live","alpaca_paper","alpaca_live"],"title":"Run Mode","description":"'backtest' runs historical data instantly; 'live' schedules real-time simulated paper trading; 'alpaca_paper'/'alpaca_live' use Alpaca broker","default":"backtest"},"simulation_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Simulation Date","description":"Date to simulate trading for (single day mode)"},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date","description":"Start date for multi-day simulation"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date","description":"End date for multi-day simulation"},"max_concurrent_days":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Max Concurrent Days","description":"Max concurrent day simulations for multi-day mode","default":3},"initial_cash_balance":{"type":"number","minimum":100.0,"title":"Initial Cash Balance","description":"Actual cash deposited in brokerage (per day for multi-day)","default":425000.0},"leverage_multiplier":{"type":"number","maximum":10.0,"minimum":1.0,"title":"Leverage Multiplier","description":"Intraday margin multiplier (e.g. 4x)","default":4.0},"tickers":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Tickers","description":"List of ticker symbols to trade"},"llm_providers":{"items":{"type":"string","enum":["gpt-5.5","claude-fable-5","gemini-3-pro","qwen-baseline","qwen-trading-rl","deepseek","glm-5","qwen-235b-thinking"]},"type":"array","minItems":1,"title":"Llm Providers","description":"LLM provider(s) to use. Multiple providers run in parallel for comparison.","default":[]},"qwen_baseline_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Qwen Baseline Address","description":"host:port for Qwen Baseline vLLM server (required if qwen-baseline selected)"},"qwen_trading_rl_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Qwen Trading Rl Address","description":"host:port for Qwen Trading RL vLLM server (required if qwen-trading-rl selected)"},"deepseek_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deepseek Address","description":"host:port for DeepSeek vLLM server (required if deepseek selected)"},"broker_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Broker Account Id","description":"ID of the BrokerAccount to use (required for alpaca_paper/alpaca_live modes)"},"stop_loss_pct":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Stop Loss Pct","description":"Stop loss as % of initial cash. Liquidates all positions when breached. None or 0 to disable.","default":1.5},"best_of_n_enabled":{"type":"boolean","title":"Best Of N Enabled","description":"Enable Best of N mode - run LLM N times and judge to select best response","default":false},"n_candidates":{"type":"integer","maximum":8.0,"minimum":2.0,"title":"N Candidates","description":"Number of candidate responses to generate in Best of N mode","default":4},"analysis_interval_minutes":{"type":"integer","maximum":60.0,"minimum":1.0,"title":"Analysis Interval Minutes","description":"Minutes between analysis steps","default":5},"market_open":{"type":"string","format":"time","title":"Market Open","description":"Market open time (first LLM decision step)","default":"09:45:00"},"market_close":{"type":"string","format":"time","title":"Market Close","description":"Session force-close cutoff (prompt mandate/countdown render from this)","default":"11:30:00"}},"type":"object","title":"StartRunRequest","description":"Request to start a new simulation run."},"StartRunResponse":{"properties":{"runs":{"additionalProperties":{"type":"string"},"type":"object","title":"Runs","description":"Map of LLM provider to run ID"}},"type":"object","required":["runs"],"title":"StartRunResponse","description":"Response after starting a run."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}