This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
Summary
AI summaryFixed free‑mode call stalls by adding per‑model and overall timeouts and asserted the $0 reserve invariant.
Full changelog
0.32.0 rebuilt the tier lists against the live catalogue. That was the right move, and it got the free tier wrong on the way.
The contradiction was inside 0.32.0's own release notes
It removed gpt-oss-120b and gpt-oss-20b as "delisted... the tier only ever worked through aliasing" — while the same entry states that llama-4-maverick "answers 200 OK while being served by gpt-oss-120b". A model cannot simultaneously be the thing serving the alias and be dead.
The error was reading "absent from GET /v1/models" as "retired". It means hidden — a listing decision, not a health signal. And gpt-oss-120b is the gateway's own FREE_FALLBACK_MODEL, with gpt-oss-20b its last-resort rung: the two models the gateway itself falls back to were the two removed from mode:"free".
Re-probed on both chains with a realistic ~1.5K-token prompt — gpt-oss-120b 1.7s, gpt-oss-20b 2.8s, both 200 with real completions. gpt-oss-120b takes free[0] (deepseek-v4-flash measured 5.4s on the same prompt).
mistral-large-3-675b stays excluded, but the recorded reason was also wrong: it does not hang, it crawls — 2s on a toy ping, 123.2s on a real prompt. That is exactly how it kept certifying itself healthy. Never health-check a free model with a 16-token ping.
Fixed on top, from review
mode:"free"could stall a tool call for eighty minutes. The fallback loop had no deadline and the SDK default request timeout is 600s (not the 60swallet.tsclaimed — wrong by 10x, corrected). Free models fail by crawling, so one degraded entry held the call for ten minutes before falling through, and this release made it worse by growingfree[]from 6 entries to 8. Now bounded twice: 60s per model + 150s across the whole loop, so a ninth free model can never lengthen the worst case. Paid tiers untouched.- The
$0reserve rested on an unenforced invariant.estimateChatCostreturns0formode:"free"only because everyfree[]entry happens to benvidia/*. Now asserted and mutation-tested. - Catalogue doctrine stated in both directions, so the next sweep doesn't delete these two ids a third time.
177 tests, typecheck, build and verify:prices (20/20 exact) green.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About blockrunai/blockrun-mcp
Live data for AI agents — search, research, markets, crypto, X/Twitter. Pay-per-call via x402 micropayments.
Related context
Beta — feedback welcome: [email protected]