Skip to content

fix(chat): reserve $0 for the hidden NVIDIA ids the account sheet bills at $0 - #181

Merged
VickyXAI merged 2 commits into
mainfrom
fix/free-set-2026-10-20
Oct 20, 2026
Merged

VickyXAI merged 2 commits into
mainfrom
fix/free-set-2026-10-20

Conversation

@VickyXAI

@VickyXAI VickyXAI commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

What changes

This adds 17 ids to FREE_CHAT_MODELS in src/utils/constants.ts. Each is hidden from GET /v1/models, but the account price sheet (blockrun.ai/api/pricing) prices it at $0 / billingMode:"free". Until now an explicit call to any of them reserved the $5/$30 default, so an exhausted budget refused a free call. verify:prices had flagged each one.

The ids: nvidia/nemotron-3-super-120b-a12b-free, qwen3.5-397b-a17b, nemotron-ultra-253b, nemotron-super-49b, deepseek-v3.2, deepseek-v4-pro, deepseek-v4-flash, nemotron-3-nano-omni-nim, mistral-large-3-675b, qwen3-coder-480b, devstral-2-123b, glm-4.7, llama-4-maverick, qwen3-next-80b-a3b-instruct, qwen3.5-122b-a10b, seed-oss-36b, mistral-small-4-119b.

MODEL_TIERS.free (the routing order) is unchanged.

Bare-name safety

nvidia/deepseek-v4-pro has the same bare name as the paid deepseek/deepseek-v4-pro ($1.32/$3.96). Under the old map order the free id would have taken over bare deepseek-v4-pro, which means a $0 reserve for a paid call. To prevent that:

  • BARE_TO_PREFIXED now adds free ids first, so a paid id with the same bare name always owns that spelling.
  • New export FREE_SHADOWED_BY_PAID names the exception, which is currently only nvidia/deepseek-v4-pro.
  • The uniqueness test allows only that kind of clash.
  • A new test pins bare deepseek-v4-pro to the paid rate.

Sources

  • blockrun.ai/api/pricing (2026-10-20): inputPrice/outputPrice 0, billingMode:"free".
  • Gateway src/lib/models.ts: billingMode:"free", $0/$0 for 16 of the 17. deepseek-v4-flash is covered by the account sheet and by the MODEL_REDIRECTS entry in the chat route.
  • Unpaid POST probes on blockrun.ai and sol.blockrun.ai (2026-10-20), using a ~3,000-char prompt with max_tokens 32. All 17 returned HTTP 200 with no payment header on both chains. The responding model was one of nemotron-3-super-120b, gpt-oss-20b, nano-omni or llama-3.2-11b-vision.

Checks

  • npm run typecheck: clean
  • npm test: 1423/1423 pass
  • npm run build: ok
  • npm run verify:prices: exit 0, 0 under-reserving. The catalogue sweep finds 0 gaps on Base, Solana and the account sheet. The 17 "billed $0 but FREE_CHAT_MODELS does not list it" notes are gone.

package.json is untouched.

Update: two DeepSeek mirrors dropped (2026-10-20)

nvidia/deepseek-v4-pro and nvidia/deepseek-v4-flash are removed from the free set. The gateway removed -flash in blockrun#848 (already live) and is removing -pro now. Once removed, both return an unknown-model 400, so the set now holds 15 account-sheet ids instead of 17.

The "paid wins bare spelling" rule stays: bare deepseek-v4-pro still reserves the paid deepseek/deepseek-v4-pro rate. FREE_SHADOWED_BY_PAID is now empty, and the tests pin that.

Expected verify:prices note: until the gateway change ships, the account sheet still lists nvidia/deepseek-v4-pro at $0. verify:prices therefore reports it as "billed $0 but FREE_CHAT_MODELS does not list it". That is an over-reserve note, not a failure. verify:prices still exits 0 with 0 under-reserving, and tests are 1423/1423.

…bills at $0

blockrun.ai/api/pricing prices these at $0 (billingMode "free") and both
wallet gateways answer them unpaid, redirected onto $0 models (probed
2026-10-20). An explicit call reserved the $5/$30 default, so an exhausted
budget refused a free call. Added to FREE_CHAT_MODELS only; the free
routing order is unchanged.

nvidia/deepseek-v4-pro shares its bare name with the paid
deepseek/deepseek-v4-pro, so BARE_TO_PREFIXED now lets paid ids own a bare
spelling (free ids go in first), and FREE_SHADOWED_BY_PAID names the
exception the uniqueness test tolerates.
The gateways are retiring both (blockrun#848 removed -flash, live; -pro
removal approved 2026-10-20); afterwards they answer an unknown-model 400, so
a $0 reserve would only mask that. The paid-wins-bare-spelling rule stays:
bare deepseek-v4-pro still reserves deepseek/deepseek-v4-pro's rate.
FREE_SHADOWED_BY_PAID is now empty; tests updated.
@VickyXAI
VickyXAI merged commit f33c098 into main Oct 20, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant