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.
common/modelPresets.tssays ofpricePerMTok:I diffed the 27
provider: "openrouter"presets againsthttps://openrouter.ai/api/v1/modelstoday (2026-08-24). 13 match, 13 don't, and one id is no longer in the catalog.openai/gpt-5.6-lunaopenai/gpt-5.6-luna-progoogle/gemini-3.6-flashdeepseek/deepseek-v4-flashmoonshotai/kimi-k2.6z-ai/glm-5.2deepseek/deepseek-v4-promoonshotai/kimi-k2.7-codeopenai/gpt-5.6-terra-prominimax/minimax-m2.7deepseek/deepseek-v3.2tencent/hy3nvidia/nemotron-3-super-120b-a12bThe last four are rounding-level. The first three are not: the
gpt-5.6-lunapair is 5x over on both axes andgemini-3.6-flashis 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-lunacurrently reads as more expensive thandeepseek/deepseek-v3.2when it is in fact cheaper on input.kimi-k2.6,glm-5.2anddeepseek-v4-promove the other way — those three are cheaper in the file than they actually bill.mistralai/devstral-2512It's marked
unreachable(ACCOUNT_PRIVACY)as of2026-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-contributorisprovider: "meta", so it's outside this check.)Repro
No key needed:
Given
scripts/model-trials.tsalready 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_ATcovers 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.