GOPURAM

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 idPostureBehavior
gopuram/autobalancedthe right tier for each request, full pool
gopuram/auto:economyeconomysame tier, cheaper half of the pool
gopuram/auto:qualityqualityone tier up on every request
gopuram/auto:ultraultraalways 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.