Skip to content

ORBOrbit Auto

Routing you can read.

Send model: "orbit/auto" and Orbit picks a model with a deterministic, heuristic router — then tells you exactly why. It is a cost/capability trade-off, not a promise of the objectively best model.

Live

Try it

Preview a route.

This calls the public, rate-limited preview endpoint. It never calls a model and never charges anything.

Route preview

Selected model
—
Estimated cost
—
Max (reserved)
—
Est. savings
—
Latency
—

Preview only — no model is called. Execution happens in the playground (sign-in required).

Execute
POST /v1/route/preview
curl https://<your-orbit-host>/v1/route/preview \
  -H "Content-Type: application/json" \
  -d '{ "prompt": "Prove that the sum of two even numbers is even.", "mode": "auto" }'

Rate limit

The public preview allows about 20 requests per minute per IP and returns 429 rate_limited beyond that. Authenticated callers get their own allowlists applied.

1 · Modes

Six modes, one target tier.

ModeBehaviourTarget tier
autoClassifies the prompt: code signals → coding; strong multi-step reasoning signals with enough complexity → reasoning; otherwise balanced.derived
economyTargets tier 1 and weighs cost heavily; prefers models tagged fast.1
balancedTier follows complexity: < 0.30 → 1, < 0.55 → 2, otherwise 3. Prefers general models.1–3
codingTier 2 below complexity 0.5, tier 3 above. Prefers models tagged coding.2–3
reasoningTier 3 below complexity 0.6, tier 4 above. Prefers models tagged reasoning.3–4
high_performanceTier 4, with cost weighed very lightly.4

2 · Signals

Cheap, explainable signals.

Token estimate

~3.5 characters per token plus per-message overhead. Used for routing and reservations; billing uses provider-reported usage.

Code signals

Fenced code, language keywords, stack traces, refactor/unit-test vocabulary, trailing braces.

Reasoning signals

Proof, derivation, step-by-step, trade-off, optimisation and maths vocabulary or symbols.

Complexity 0–1

Combines length, code and reasoning signals, minus simple-request signals (greetings, translate, rephrase), plus tool use.

3 · Hard filters

Ineligible means ineligible.

Before ranking, any model failing one of these checks is excluded — and the preview lists the reason for each exclusion.

  • Provider not configured

    The operator has no key for the model's provider.

  • Not in model allowlist

    The API key or agent policy (intersected up the agent hierarchy) excludes it.

  • Context window too small

    Estimated prompt tokens + max_tokens exceed the model's window.

  • No tool support

    The request includes tools and the model cannot call them.

  • No image input

    The request contains images and the model is text-only.

  • Exceeds per-request spend limit

    The worst-case cost (incl. fee) is above the agent's per-request maximum.

4 · Ranking & fallbacks

Fit first, then price.

  • Tier fit. Under-powered models are penalised more than over-powered ones (−1.4 per tier below target vs −0.6 per tier above).
  • Strength match. +0.6 when the model is tagged with the mode's preferred strength; +0.4 for long-context models on long prompts.
  • Cost. A log-scaled cost penalty, weighted 0.9 in economy, 0.05 in high_performance and 0.35 otherwise.
  • Latency. Only Orbit's own observed p50, when enough history exists. Until then latency plays no part and is shown as “—”.

Fallbacks never cost more than the selection

Up to two fallbacks are chosen from the remaining eligible models, and only those whose worst-case cost is less than or equal to the selected model's. A provider failure can never silently upgrade your spend.

Baseline for savings

Estimated savings compare the selection with the most capable eligible model for the same request and token estimate. It is an estimate, not a guarantee.

5 · Transparency

Every response explains itself.

Chat completions include an orbit object alongside the standard OpenAI fields.

Response (abridged)
{
  "id": "chatcmpl-…",
  "object": "chat.completion",
  "model": "anthropic/claude-sonnet-5.5",
  "choices": [ … ],
  "usage": { "prompt_tokens": 412, "completion_tokens": 288, "total_tokens": 700 },
  "orbit": {
    "request_id": "req_…",
    "model": "anthropic/claude-sonnet-5.5",
    "routing": { "mode": "coding", "tier": 3, "explanation": "auto → coding · …", "fallback_used": false },
    "cost": { "estimated_usd": "…", "charged_usd": "…", "provider_cost_usd": "…", "fee_usd": "…" }
  }
}
orbit.request_id
Look the request up later with GET /v1/requests/:id
orbit.model
The model that actually served the request
orbit.routing.mode / tier
Effective mode and the selected model's tier
orbit.routing.explanation
The human-readable reasoning shown in previews
orbit.routing.fallback_used
true if a fallback served the request
orbit.cost.estimated_usd
Pre-flight estimate
orbit.cost.charged_usd
What your balance was charged (provider cost + fee)
orbit.cost.provider_cost_usd / fee_usd
The two parts of the charge