{"product":"Agent Mystro","summary":"An OpenAI-compatible endpoint that classifies each request and routes it to the model that has earned that kind of work, learned per customer from that customer's own blind picks.","interface":{"protocol":"OpenAI Chat Completions","endpoint":"/v1/chat/completions","streaming":true,"tool_calling":true,"drop_in":"Point any OpenAI SDK at this base URL and change the API key.","deployment":"Runs on Cloudflare Workers, so the routing decision happens at a point of presence near the caller rather than in a single region. The classifier is in-process and makes no network call, so routing adds no upstream round trip of its own."},"pricing":{"free":{"usd_per_month":0,"tokens_routed_included":1000000,"note":"Population defaults only. No per-customer learned routing."},"pro":{"usd_per_month":19,"tokens_routed_included":5000000,"usd_per_million_overage":0.2,"note":"Includes the taste engine: blind picks bend routing toward this customer, and GET /v1/gain reports what it bought."},"inference":"Not resold. Customers pay their providers directly and we take no percentage of token spend."},"key_model":{"mode":"BYOK","description":"Customers supply their own provider API keys. We never resell inference; we charge for routing.","keys_at_rest":"AES-256-GCM, per-customer key derived by HKDF from a secret held in Cloudflare Worker Secrets.","verification":"Every key is validated against the provider before it is stored."},"task_types":[{"id":"draft_cold","label":"Cold drafting","measured":true,"unrouted":false,"evidence":"Blind battery of 10 new-message briefs: Gemini one-shot 5, Claude-then-GPT edit 3, GPT one-shot 0.","population_prior":{"google:pro":1.2576094803481088,"chain:claude_then_gpt":0.4954694283012121,"anthropic:opus":0.03383404872599316,"openai:flagship":-1.7869129573753142}},{"id":"draft_reply","label":"Replies and threaded responses","measured":true,"unrouted":false,"evidence":"Blind battery of 10 incoming messages with intent: Claude-draft-then-GPT-edit 6, Gemini 4, both solo arms 0.","population_prior":{"chain:claude_then_gpt":1.889985998987029,"google:pro":1.154536438736394,"openai:flagship":-1.5222612188617115,"anthropic:opus":-1.5222612188617115}},{"id":"page_gui","label":"Web pages and interfaces","measured":true,"unrouted":false,"evidence":"Blind battery of 10 page briefs: GPT one-shot 8, Gemini 1, Claude 1.","population_prior":{"openai:flagship":2.0464014147469642,"google:pro":-1.0232007073734821,"anthropic:opus":-1.0232007073734821}},{"id":"code","label":"Code and orchestration","measured":false,"unrouted":false,"evidence":"No dedicated battery yet. Default follows the measured orchestration lane; treated as a weak prior and marked as such.","population_prior":{"anthropic:opus":0.35,"openai:flagship":0,"google:pro":-0.35}},{"id":"research","label":"Live research","measured":true,"unrouted":false,"evidence":"Blind battery of 10 checkable questions graded against the record: Claude with web search 5, GPT 3, Gemini 2, Perplexity 0. Accuracy 10/10 for Claude and Gemini.","population_prior":{"anthropic:opus":0.6619718278896708,"openai:flagship":-0.10016822415722593,"google:pro":-0.5618036037324449}},{"id":"math_finance","label":"Finance and arithmetic","measured":true,"unrouted":true,"evidence":"Blind battery of 10 briefs including four setup traps: every arm scored 10/10 on accuracy and explanation picks fell inside the noise margin. No routing default is warranted.","population_prior":{"anthropic:opus":0,"openai:flagship":0,"google:pro":0}},{"id":"extraction","label":"Document extraction","measured":true,"unrouted":true,"evidence":"Auto-graded against ground truth on 6 synthetic documents: GPT 30/30, Gemini 30/30, Claude 29/30. Clean-document extraction is saturated.","population_prior":{"anthropic:opus":0,"openai:flagship":0,"google:pro":0}},{"id":"reasoning","label":"Analysis and reasoning","measured":false,"unrouted":false,"evidence":"No dedicated battery yet. Falls back to the population default and is flagged as unmeasured.","population_prior":{"anthropic:opus":0.35,"openai:flagship":0,"google:pro":-0.35}},{"id":"other","label":"Unclassified","measured":false,"unrouted":false,"evidence":"No battery. Population default applies until the customer supplies picks.","population_prior":{"anthropic:opus":0,"openai:flagship":0,"google:pro":0}}],"method":{"classifier":"Deterministic weighted-signal scorer over the request text. Sub-millisecond, zero cost per request, and every firing signal is returned in the response.","routing":"Bradley-Terry latent strengths per task type and arm.","learning":"One online gradient step per blind pick, learning rate 0.35.","cold_start":"Bayesian shrinkage toward measured population priors with kappa 6, so a customer's first picks cannot overturn a ten-brief battery and their fiftieth can.","lineage":"Method follows the published RouteLLM line of work (matrix factorisation and preference-trained routers, Apache 2.0)."},"evidence":{"batteries":[{"code":"b1","task_type":"draft_cold","briefs":10,"wins":{"google:pro":5,"chain:claude_then_gpt":3,"anthropic:opus":2,"openai:flagship":0},"decoded":"2026-07-25","blind":true},{"code":"b2","task_type":"page_gui","briefs":10,"wins":{"openai:flagship":8,"google:pro":1,"anthropic:opus":1},"decoded":"2026-07-25","blind":true},{"code":"b7","task_type":"draft_reply","briefs":10,"wins":{"chain:claude_then_gpt":6,"google:pro":4,"openai:flagship":0,"anthropic:opus":0},"decoded":"2026-07-25","blind":true},{"code":"b8","task_type":"research","briefs":10,"wins":{"anthropic:opus":5,"openai:flagship":3,"google:pro":2},"decoded":"2026-07-25","blind":true}],"how_run":"Each battery presented N briefs, outputs shuffled and stripped of provenance tells, judged blind by a human, then decoded against an offline key."},"limits":["Population priors come from a single expert judge across ten briefs per battery. That is enough to beat an unmeasured guess and is not a population study.","Two task types are deliberately unrouted: finance arithmetic and clean-document extraction both saturated in testing, so we route them on cost and say so.","Code and general reasoning have no dedicated battery yet. Their priors are weak and flagged as unmeasured in every response.","Cost figures are estimates from published list prices, used to enforce spend caps. Your provider dashboard is the billing source of truth.","Google requests use Google's OpenAI-compatible surface, which is in beta and silently ignores parameters it does not support. Anthropic requests use the native Messages API precisely to avoid that class of silent degradation.","No SOC 2 report, no EU data residency guarantee, and no third-party security audit at this time.","Prompt-variation lift (varying the prompt rather than the model) is believed to matter and has not been measured here. We do not claim it.","Three providers, not three hundred. A routing claim is only as strong as the blind evidence behind each arm, and we will not run batteries against a catalogue that size. If you need breadth over measured routing, OpenRouter or LiteLLM is the better tool.","No self-hosted build, and this is a design consequence rather than a missing feature: the population prior is learned across customers, so an isolated instance would ship frozen and never improve. If prompts may not leave your own infrastructure, LiteLLM is the honest answer.","No automatic provider failover, response caching, guardrails, or PII sanitisation yet. Portkey, Kong and Cloudflare all ship those today. They are queued here and are not claimed until built.","Routing priors are refreshed when we re-run a battery, not continuously. Models ship monthly, so a prior can age between runs. Unify re-benchmarks about every ten minutes; we do not."],"privacy":{"prompt_retention":"off","logging":"Request logs carry a fixed vocabulary of ids, counts, and enum values. There is no field in the log record that can hold prompt or completion text.","deletion":"DELETE /v1/account removes all keys, picks, and routing state."},"verify_yourself":["GET /v1/routing/health shows live model resolution per provider, including whether each answer came from live discovery or a dated fallback pin.","Every chat response carries a mystro block naming the task type, the signals that fired, the evidence behind the default, and how much of the decision was yours.","GET /v1/taste/scorecard shows your pick counts and how far your routing has moved from the population default."]}