Cost
Read a Lobstack receipt
Read the receipt Lobstack returns on every model call — cost_usd, savings_usd, baseline_reason — and report cost from it instead of estimating.
Cost · For developers · MIT
Choose the cheapest model tier that can actually do the task instead of defaulting to a flagship, and verify the choice before spending on it.
Use when selecting a model for a feature or agent, when one model dominates a bill, or when asked to cut inference cost without losing quality.
# In Lobstack: Skills › Add a skill, then paste the file or drop the folder # In Claude Code: mkdir -p .claude/skills/lobstack-model-tier # paste SKILL.md into .claude/skills/lobstack-model-tier/SKILL.md
---name: lobstack-model-tierdescription: "Choose the cheapest model tier that can actually do the task instead of defaulting to a flagship, and verify the choice before spending on it. Use when selecting a model for a feature or agent, when one model dominates a bill, or when asked to cut inference cost without losing quality."license: MITmetadata: title: "Pick a model tier, not a flagship" version: 1.0.0 author: lobstack category: cost tags: [cost, routing, models, gateway]--- # Pick a model tier, not a flagship Defaulting to the best available model is the most common and most expensivedecision in an LLM codebase, and it is almost never a decision — it is theexample from a quickstart, left in. deepseek-v4-flash costs $0.27/$1.1 per million tokens in/out. claude-fable-5-1 costs $10/$50. That is roughly 44× on the same tokens, which is why "which model" is a cost decision before it is a quality one. Prices last checked against each provider's own page on 2026-09-08. ## The five tiers Lobstack groups every model into five capability tiers and routes "auto"requests to the cheapest tier that can handle the request. The thresholds and thelead model of each tier are the router's actual configuration: | tier | complexity | what `auto` serves | $/Mtok in/out | relative cost || --- | --- | --- | --- | --- || nano | ≤ 20 | gemini-3.1-flash-lite | $0.25/$1.5 | 0.10× || small | ≤ 40 | claude-haiku-4-5 | $1/$5 | 0.30× || standard | ≤ 70 | claude-sonnet-5 | $2/$10 | 0.67× || premium | ≤ 90 | gemini-3.1-pro | $2/$12 | 2.00× || flagship | ≤ 100 | claude-opus-5 | $5/$25 | 5.00× | complexity is a heuristic score from 0–100 over the prompt: length, whether itcontains code, whether it asks for multiple steps, analysis or creative writing,and how long the conversation already is. It is a heuristic and it is worthknowing that, but it is the same one the live path uses — not an approximation ofit. ## What each tier is actually for - nano — classification, routing, extraction, yes/no, tagging, short rewrites, "is this spam". Anything where the answer is short and the judgement is shallow. If you are calling a model in a loop over rows, start here.- small — summarisation, straightforward Q&A over supplied context, format conversion, commit messages, simple tool selection. The workhorse for anything where the context does the work and the model only has to be careful.- standard — most user-facing chat, most agent turns, code that fits in a file, multi-step tool use with a clear plan. This is the default you should be arguing yourself *up* from, not down to.- premium — genuine reasoning over a large context, hard debugging, design work with real trade-offs, long multi-file changes.- flagship — the tasks where a wrong answer costs more than the call. Use it deliberately, per call site, and be able to name why. ## The procedure 1. Write the task down in one sentence. If the sentence contains "classify", "extract", "label", "route" or "reformat", you are in nano or small and you are done.2. Ask what a wrong answer costs. Cheap to detect and cheap to fix (a draft a human reads, a retry, a suggestion) argues down a tier. Expensive and silent (a migration, a payment, a customer-visible claim) argues up.3. Try the cheap tier on twenty real inputs, not on the one you invented. Cheap models fail differently: they do not produce slightly worse prose, they miss an instruction or drop a field. Diff the outputs on the failure you care about, not on taste.4. Set a ceiling rather than a model wherever you can. "auto" plus a plan ceiling means the easy 80% of traffic lands cheap without anyone tuning anything, and hard requests still reach a capable model.5. Spend the saving on the prompt. A cheaper model with an explicit, well-structured prompt beats a flagship on a vague one, and costs a twentieth as much. See cost-aware-system-prompts. ## Verify before you spend POST /api/gateway/v1/route-preview answers "what would the router do withthis?" without running inference. It is unauthenticated, writes nothing, and usesthe same selectModel() and the same price registry the live path uses — so theanswer is the decision, not a simulation of it. ```bashcurl -s https://www.lobstack.ai/api/gateway/v1/route-preview \ -H 'Content-Type: application/json' \ -d '{"prompt":"Label this ticket: billing, bug, or feature request.\n\n…", "requested_model":"claude-opus-5", "plan_tier":"developer", "expected_output_tokens":8}'``` ```json{ "object": "routing_preview", "complexity": 12, "tier": "nano", "routed": true, "reason": "Trivial query → nano tier", "model": { "key": "gemini-3.1-flash-lite", "provider": "google", "price_per_mtok": { "input": 0.25, "output": 1.5 } }, "token_estimate": { "input": 31, "output": 8, "estimated": true }, "cost_usd": 0.0000198, "baseline": { "model": "claude-opus-5", "cost_usd": 0.000355, "saving_usd": 0.000335 }}``` Two honesty notes that matter when you quote these numbers: - token_estimate.estimated is true. It is roughly four characters per token, and the output length is unknowable before generation — pass expected_output_tokens when you know your own shape. The billed figure always comes from the provider's usage block on the real request.- baseline is null on an "auto" request. There is nothing to compare against when nobody named a model, and inventing a flagship comparison is how every savings claim in this category gets manufactured. ## The ceiling is a structural cap Plans carry a tier ceiling, and the router never exceeds it — so cost control isa property of the configuration rather than something to catch in review: | plan | price | meter | included | tier ceiling || --- | --- | --- | --- | --- || Free | $0/mo | spend | $1 of credit a week | standard || BYOK | $19/mo | requests | 100,000 requests | flagship || Developer | $29/mo | spend | $10 of model spend | flagship || Agency | $99/mo | spend | $35 of model spend | flagship || Scale | $299/mo | spend | $120 of model spend | flagship | The effective ceiling is the lower of the model you asked for and your plan's.Naming a nano model on a flagship plan caps you at nano, which is the correctbehaviour and occasionally a surprise. ## Do not - Do not pick a model because it was in the example you copied.- Do not benchmark on one hand-written input.- Do not use "auto" and then quote a saving against a flagship. Nobody asked for the flagship; see lobstack-receipts, rule 2.- Do not assume cheap means fast or dear means slow. They are unrelated; measure p95 separately.
Cost
Read the receipt Lobstack returns on every model call — cost_usd, savings_usd, baseline_reason — and report cost from it instead of estimating.
Cost
Hold an agent, job or run inside a hard dollar budget using the per-call cost the Gateway returns, and handle the 402 when an allowance runs out.
Cost
Write or review a system prompt that does not quietly multiply the bill — bounded output, no re-sent bulk, tool schemas counted as the input tokens they are.
Migration
Move existing OpenAI or Anthropic SDK code onto the Lobstack Gateway by changing the base URL and the key, and verify it actually routed.
Observability
Find model calls that bypass the gateway and therefore appear on no bill anyone reads, and detect the opposite fault of counting one call twice.