Add Claude Fable 5.1 pricing
This pull request was posted by Claude Code using claude-opus-5 on behalf of David.
Adds Claude Fable 5.1 (released 2026-09-01) across every provider that hosts it, and fixes a latent mispricing the new model exposed.
Prices
Same as Fable 5 on every key except cache reads: Fable 5.1 and Mythos 5.1 bill cache hits at 0.025x base input, not the usual 0.1x.
| Provider | Model id | input | 5m cache write | 1h cache write | cache read | output |
|---|---|---|---|---|---|---|
anthropic | claude-fable-5-1 | $10 | $12.50 | $20 | $0.25 | $50 |
google (Vertex, global) | claude-fable-5-1 | $10 | $12.50 | — | $0.25 | $50 |
aws (Bedrock, global) | global.anthropic.claude-fable-5-1-v1:0 | $10 | $12.50 | — | $0.25 | $50 |
aws (Bedrock, regional, +10%) | regional.anthropic.claude-fable-5-1-v1:0 | $11 | $13.75 | — | $0.275 | $55 |
openrouter | anthropic/claude-fable-5.1 | $10 | $12.50 | — | $0.25 | $50 |
Context window is 1M on all of them.
The bug this exposed
Before this PR, claude-fable-5-1 silently resolved to the Fable 5 record on anthropic, google and aws — the Fable 5 entries matched by prefix/substring, and find_model returns the first match in ID-sorted order, where claude-fable-5 sorts ahead of claude-fable-5-1. That priced Fable 5.1 cache reads at $1/MTok instead of $0.25 — 4x too high, with no error raised.
So this PR also tightens the existing Fable 5 match clauses so they stop at Fable 5:
anthropic.yml—starts_with: claude-fable-5→equals+regex: ^claude-fable-5-\d{8}$google.yml—contains: claude-fable-5→ends_with+contains: claude-fable-5@aws.yml(global) —contains: global.anthropic.claude-fable-5→ends_with+contains: …-v1aws.yml(regional) — thestarts_with/containsclauses now require either an exact match or a-v1suffix
openrouter.yml already used equals clauses, so it was never affected.
The build's own matches other model ids validator catches the global.* case; the others are not reachable by that check, which is why the regression tests below pin them.
Tests
New parametrized regressions on both sides — tests/test_price_regressions.py and packages/js/src/__tests__/matcher.test.ts — asserting for all five records that Fable 5.1 resolves to its own entry, that its cache-read total is exactly a quarter of Fable 5's, and the absolute per-MTok rate.
Sources
- Pricing + the 0.025x cache multiplier: https://platform.claude.com/docs/en/about-claude/pricing
- Model IDs, context window: https://platform.claude.com/docs/en/models/overview
- Bedrock IDs, regional availability, 10% regional premium: https://platform.claude.com/docs/en/build-with-claude/claude-in-amazon-bedrock
- Vertex IDs, 1M context, 10% regional premium: https://platform.claude.com/docs/en/build-with-claude/claude-on-vertex-ai
- OpenRouter rates confirmed against
https://openrouter.ai/api/v1/models(anthropic/claude-fable-5.1:input_cache_read2.5e-7 = $0.25/MTok)
Scope decisions
~anthropic/claude-fable-latestleft on Fable 5. OpenRouter's models API still reports that alias with a $1/MTok cache read, i.e. it has not moved to 5.1. Pinned by a test so a future move is visible.- Mythos 5.1 not added. Same prices as Fable 5.1, but the repo has no Mythos records at all — Mythos 5 was never added either, since it is invitation-only (Project Glasswing). Consistent with existing scope, not an oversight.
- AWS/Vertex prices are derived, not read off their own pricing pages. Both pages are JS-rendered and did not yield the Claude tables. They follow the existing precedent in these files: Anthropic first-party rates for global, +10% for regional. Bedrock/Vertex hosting and model IDs are confirmed from the provider integration docs linked above.
- No 1h cache-write key on the Vertex/Bedrock/OpenRouter records, matching their existing Fable 5 siblings, which also omit it.
aws.ymlregional clauses now require a-v1suffix on the geo-prefixed forms (e.g.us.anthropic.claude-fable-5-v1:0). Real Bedrock inference-profile ids always carry it; a bareus.anthropic.claude-fable-5no longer matches. This narrowing is what separates the two records.