Auto-router
gopuram/auto picks the right model for every request — four postures, transparent decisions, routing is free.
Stop choosing between 250+ models. Send your request to gopuram/auto
and each message is classified (in about a second, free) and routed to the
right model for that job: greetings hit pennies-per-million models, hard
reasoning hits frontier. You pick a posture, not a model — and every
posture is just a model id, so it works in any OpenAI SDK, dropdown, or tool
with zero code changes.
| Model id | Posture | Behavior |
|---|---|---|
gopuram/auto | balanced | the right tier for each request, full pool |
gopuram/auto:economy | economy | same tier, cheaper half of the pool |
gopuram/auto:quality | quality | one tier up on every request |
gopuram/auto:ultra | ultra | always frontier models |
client = OpenAI(base_url="https://api.gopuram.net/v1", api_key=GOPURAM_API_KEY)
r = client.chat.completions.create(
model="gopuram/auto", # or gopuram/auto:economy / :quality / :ultra
messages=[{"role": "user", "content": "Refactor this parser to be iterative…"}],
)
print(r.model) # the CONCRETE model that served it
print(r.usage.cost) # billed at that model's normal price
Transparent by design
Every response tells you what happened — the model field always carries
the concrete model that answered, and a routing object (on non-stream
bodies, and beside usage on the final stream chunk) explains why:
"routing": {
"router": "gopuram/auto",
"posture": "balanced",
"tier": 3,
"tier_label": "advanced",
"task_type": "coding",
"confidence": 0.85,
"method": "llm"
}
method is honest about how the decision was made: heuristic (trivially
easy — no classifier needed), llm (classified), fallback (classifier
timed out inside its 1.5s budget — routed to the safe middle tier), or
fixed (ultra always routes frontier, no classification).
How it routes
Requests map to four capability tiers — light (casual chat, lookups),
standard (drafting, everyday work), advanced (multi-step reasoning,
coding, analysis), frontier (the hardest work). An explicit ask for
careful work ("think step by step", "be thorough", "prove…") floors the
tier at advanced. Vision requests only route to vision-capable models.
Repeat traffic from the same account (and optional user field) routes
deterministically, keeping provider prompt caches warm — with no state
stored on our side.
Billing
Routing is free. You pay exactly the routed model's normal per-token
price — the classification call is on us. usage.cost is the routed
model's real cost, and your usage log attributes every request to the
concrete model that served it.
Notes
- Streaming, tools, reasoning, and vision input all pass through to the routed model; requests are validated against the picked model's capabilities.
- The router requires a paid balance (its pools are paid models).
- To pin a key to routed-only access, allowlist the router ids themselves — the concrete pool models don't need to be listed.