What
Model pricing is now baked into the model catalog at build time rather than fetched at runtime, with validation that every catalog entry has complete pricing data.
Details
- A new pricing-tier resolver (
BVo) maps model entries to their pricing shapes, supporting both direct pricing objects and shared tier references. - Pricing requires
input,output,cache_write_5m,cache_read, andweb_searchfields; missing fields throw at startup: "model catalog entry '{id}' has incomplete pricing — baked entries need the full ModelCosts shape." - Model IDs must be registered in
CATALOG_MODEL_IDS; unregistered IDs throw: "model catalog id '{id}' missing from CATALOG_MODEL_IDS — regenerate with 'bun run generate:model-catalog'." - The first-party billing UI uses the catalog pricing to display per-token costs in the model picker.
- Claude Sonnet 5 can show promotional pricing text when a promo expiry date is set (search for
"promo through").
Evidence
Validation error (search for "baked entries need the full ModelCosts shape"); catalog check (search for "model catalog id missing from CATALOG_MODEL_IDS")
Strings lifted out of the shipped bundle, so the claim above can be checked against them.