Skip to content

modelPresets: 13 of 27 OpenRouter prices differ from OpenRouter's catalog (gpt-5.6-luna is 5x over), and devstral-2512 is no longer listed at all #1849

Description

@xyzs996

common/modelPresets.ts says of pricePerMTok:

US dollars per million tokens, as published by the provider's catalog.

I diffed the 27 provider: "openrouter" presets against https://openrouter.ai/api/v1/models today (2026-08-24). 13 match, 13 don't, and one id is no longer in the catalog.

id in this file OpenRouter today
openai/gpt-5.6-luna 1.0 / 6.0 0.2 / 1.2
openai/gpt-5.6-luna-pro 1.0 / 6.0 0.2 / 1.2
google/gemini-3.6-flash 1.5 / 7.5 0.75 / 3.75
deepseek/deepseek-v4-flash 0.094 / 0.188 0.056 / 0.112
moonshotai/kimi-k2.6 0.684 / 3.42 0.95 / 4.0
z-ai/glm-5.2 0.819 / 2.574 0.966 / 3.036
deepseek/deepseek-v4-pro 0.435 / 0.87 0.5222 / 1.0443
moonshotai/kimi-k2.7-code 0.82 / 3.75 0.67 / 3.4
openai/gpt-5.6-terra-pro 2.5 / 15.0 2.0 / 12.0
minimax/minimax-m2.7 0.25 / 1.0 0.24 / 0.96
deepseek/deepseek-v3.2 0.269 / 0.4 0.26 / 0.38
tencent/hy3 0.14 / 0.58 0.132 / 0.528
nvidia/nemotron-3-super-120b-a12b 0.08 / 0.45 0.085 / 0.4

The last four are rounding-level. The first three are not: the gpt-5.6-luna pair is 5x over on both axes and gemini-3.6-flash is 2x over. Since the picker's stated reason for showing the number is that "the range across this list is two orders of magnitude", a 5x error is large relative to the thing the column exists to communicate — gpt-5.6-luna currently reads as more expensive than deepseek/deepseek-v3.2 when it is in fact cheaper on input.

kimi-k2.6, glm-5.2 and deepseek-v4-pro move the other way — those three are cheaper in the file than they actually bill.

mistralai/devstral-2512

It's marked unreachable(ACCOUNT_PRIVACY) as of 2026-07-22. As of today the id isn't in OpenRouter's catalog at all — it doesn't appear among the 416 ids the endpoint returns, under any suffix. So the 404 is no longer an account-privacy thing that another account might get past; there's nothing to route to. Worth either dropping the row or giving it a distinct status, since the current note tells a reader "try your own account" and that won't work now.

(muse-spark-1.2-contributor is provider: "meta", so it's outside this check.)

Repro

No key needed:

curl -s https://openrouter.ai/api/v1/models \
  | jq -r '.data[] | [.id, (.pricing.prompt|tonumber*1e6), (.pricing.completion|tonumber*1e6)] | @tsv'

Given scripts/model-trials.ts already exists for the part that genuinely needs a real run, the price column is the opposite case — it's one unauthenticated GET and a comparison, so it can be a test rather than something that has to be noticed. MEASURED_AT covers the trials; the prices have no such stamp, and they're the field that moves without anyone touching the repo.

Happy to send a PR with the 13 corrected rows plus that check, if you want it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions