Skip to content

feat(models): add Claude Fable 5.1 - #12366

Closed
davidebaraldo wants to merge 5 commits into
cheaper-inference:release/v3.8.51from
davidebaraldo:feat/claude-fable-5-1
Closed

davidebaraldo wants to merge 5 commits into
cheaper-inference:release/v3.8.51from
davidebaraldo:feat/claude-fable-5-1

Conversation

@davidebaraldo

Copy link
Copy Markdown
Contributor

What

Adds Claude Fable 5.1 (claude-fable-5-1), released by Anthropic on 2026-09-01 (announcement, model page).

Specs from the official docs: 1M context, 128K max output, adaptive-only thinking (cannot be disabled), non-default temperature/top_p/top_k rejected with a 400, $10/$50 per MTok — same list price as Fable 5, but cache reads at $0.25/MTok (a quarter of Fable 5's read price).

Where it's added

Mirrors the existing claude-fable-5 entries, only on surfaces that actually serve the model today:

  • Provider registries: anthropic (API key), claude (OAuth), claude/web, vertex (Google Cloud lists claude-fable-5-1 natively)
  • modelSpecs: capabilities (rejectsThinkingDisabled, adaptiveThinkingOnly) + Bedrock aliases (anthropic.claude-fable-5-1 per official docs)
  • Pricing: new CLAUDE_FABLE_5_1_PRICING shared tier (frontier-labs) and the cc OAuth subscription table — both with the $0.25 cache-read price; providerCostData row
  • CONTEXT_1M_SUPPORTED_MODELS, staticModels (claude), modelFamilyFallback (falls to claude-fable-5, then claude-opus-5/claude-sonnet-5)

Deliberately not added

  • Third-party gateway registries (cursor, kiro, github-copilot, etc.): their upstream catalogs haven't published the model — adding it there would be speculative.
  • Fast-mode default list: fast-mode availability for 5.1 is not documented.

Verification

  • typecheck:core clean
  • Catalog/pricing/context-1m/family-fallback/sampling-params test suites: 35/35 pass (catalog-updates-v3x, claude-context-1m-supported-models, model-family-fallback-notation, catalog-pricing-lookup-index-8697, claude-adaptive-sampling-params, cc-discovery-aliases-catalog)
  • Pre-commit hooks (prettier, eslint with project suppressions, docs-sync, any-budget) pass

Anthropic released Claude Fable 5.1 (claude-fable-5-1) on 2026-09-01: same
request surface as Claude Fable 5 (adaptive-only thinking that cannot be
disabled, non-default temperature/top_p/top_k rejected), 1M context, 128K max
output, $10/$50 per MTok with cache reads at $0.25/MTok - a quarter of
Fable 5's cache-read price.

Add the model everywhere the platform actually serves it today, mirroring the
existing claude-fable-5 entries:

- provider registries: anthropic (API key), claude (OAuth), claude/web, vertex
- modelSpecs: capabilities + Bedrock aliases (anthropic.claude-fable-5-1)
- pricing: frontier-labs (new CLAUDE_FABLE_5_1_PRICING shared tier) and the
  cc OAuth subscription table, both with the lower cache-read price
- providerCostData, staticModels, CONTEXT_1M_SUPPORTED_MODELS
- modelFamilyFallback: falls to claude-fable-5, then claude-opus-5/sonnet-5

Deliberately not added: third-party gateway registries (cursor, kiro, copilot,
etc.) whose upstream catalogs have not published the model, and the fast-mode
default list, since fast-mode availability for 5.1 is not documented.
Anthropic gates newer models on the Claude Code client version it sees on the
wire. With CLAUDE_CODE_CLIENT_VERSION pinned at 2.1.220, every OAuth request
for claude-fable-5-1 is rejected with HTTP 200 + an error message:

  Claude Code 2.1.220 does not support this model; version 2.1.251 or newer
  is required. Run 'claude update' ...

The rejection is independent of the caller's own User-Agent: this constant is
the single source of truth every Claude executor, compatibility bridge, and
identity preset derives its wire identity from, so a caller already running a
recent CLI still gets refused.

Bump to 2.1.258 (a released CLI version above Anthropic's 2.1.251 floor) so
Fable 5.1 is reachable on Claude OAuth connections. Verified end to end against
a live Claude Max subscription: the same request that returned the version
error now returns model=claude-fable-5-1.

Note for future model launches: this constant needs a bump whenever Anthropic
raises the minimum client version for a new model.
@davidebaraldo

Copy link
Copy Markdown
Contributor Author

Added a second commit: fix(claude): bump spoofed Claude Code client version to 2.1.258.

Without it the model this PR adds is unreachable on Claude OAuth connections. Anthropic gates newer models on the Claude Code version it sees on the wire, and CLAUDE_CODE_CLIENT_VERSION was pinned at 2.1.220, so every claude-fable-5-1 request came back as HTTP 200 with:

Claude Code 2.1.220 does not support this model; version 2.1.251 or newer is required. Run 'claude update' ...

The refusal is independent of the caller's own User-Agent — that constant is the single source of truth every Claude executor and identity preset derives its wire identity from, so even a caller on a current CLI is refused.

Verified end to end against a live Claude Max subscription: the request that previously returned the version error now returns model=claude-fable-5-1.

Worth noting for future launches: this constant needs a bump whenever Anthropic raises the minimum client version for a new model.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
@diegosouzapw

Copy link
Copy Markdown
Collaborator

Sweep-reds babysit (round 5 Fase B)

Pushed 1a95483731 on feat/claude-fable-5-1 (no base merge; base-red #12581 still open).

Own reds — fixed

  • Merge integrity: changelog.d/features/12366-claude-fable-5-1.md now starts with - (plus credit).
  • Units 2/4, 3/4, 4/4: version bump 2.1.220 → 2.1.258 left tests/golden snapshot pinning the old wire identity; aligned pins + added claude-fable-5-1 to the claude-web registry assertion.

Local: focused unit files pass; check:complexity-ratchets on this PR's own 13 files vs merge-base 158647618356 is 0/0.

Inherited — not chased

  • Fast Quality Gates / complexity-ratchets: CI ran new-code mode on 257 files (merge commit vs current release/v3.8.51 tip). This PR does not grow complexity on its own files. Same class as 🔴 Release branch not green: release/v3.8.51 #12581 file-size chat.ts drift — do not merge the tip into this PR.
  • No new ESLint warnings: lint itself was eslintWarnings=0, eslintErrors=0. Job failed on CodeQL ratchet 13 > baseline 11 (repo-wide, not this diff).

Not merging.

Claude flagship catalogs on anthropic/cc/cw now list claude-fable-5-1 first.
Keep the executor billing-header pin on one line so executor-default-base.test.ts
stays at the frozen 1632 LOC cap.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
@diegosouzapw

Copy link
Copy Markdown
Collaborator

sweep-reds r7 Fase B — CI status on 4a53a0b5d5

Quality Gates did not start for this SHA. gh run list --commit 4a53a0b5d5aa6e1d0a8897da06b4b997c2494d24 is empty. The PR check rollup only has Mergify + semgrep-cloud-platform (the GitHub App), not quality.yml.

Last quality.yml was run 33745886401 on 1a95483731 (r5):

  • Units 2/4 OWN: tests/unit/provider-models-config.test.ts — anthropic must list the strongest Claude model first (claude-fable-5-1 vs pin claude-fable-5). Already fixed in 4a53a0b5d5. Local focused tests pass (64/64 on provider-models-config / executor-default-base / claude-web-sonnet5-registry-6209).
  • FQG inherited: 2 gate(s) failed: file-size complexity-ratchets (new-code vs current release/v3.8.51 tip / 🔴 Release branch not green: release/v3.8.51 #12581 class). This PR's own files do not grow those ratchets. Not chasing; not merging the base while 🔴 Release branch not green: release/v3.8.51 #12581 is open.

Empty commit is forbidden, and gh workflow run is not used here. Please re-push from the fork (or close/reopen) so pull_request synchronize fires quality.yml. Merge state is CONFLICTING/DIRTY vs release/v3.8.51; not merging the base.

@diegosouzapw

Copy link
Copy Markdown
Collaborator

Obrigado, @davidebaraldo — as duas metades deste PR chegaram ao release/v3.8.51 por outros caminhos enquanto ele estava aberto, então estou fechando em vez de reconciliar.

Claude Fable 5.1 — o #12367 reestruturou os catálogos e já traz claude-fable-5-1 em claude, claude/web, bedrock, vertex e devin, com CLAUDE_FABLE_5_1_PRICING em src/shared/constants/pricing/shared-tiers.ts reusada nos três lugares que precisam dela (frontier-labs.ts, oauth-subscriptions.ts, devin.ts).

Wire identity do Claude Code 2.1.258 — entrou pelo #12604, que carregou os commits do @ggiak não subsumidos do #12402. O tip está em:

src/shared/constants/claudeCodeClient.ts:  CLAUDE_CODE_CLIENT_VERSION = "2.1.258"
docker/devin-bridge/Dockerfile:            ARG CLAUDE_CODE_VERSION=2.1.258

Vale registrar que três PRs independentes (#12344, #12366 e o #12402) atacaram o mesmo par nesta janela — o Fable 5.1 e o bump de identidade andaram juntos em todos. Não é retrabalho seu isoladamente; foi convergência de várias pessoas na mesma necessidade real, e o que decidiu qual versão ficou foi ordem de merge, não qualidade.

Se ao comparar com o que está no tip você achar alguma diferença que valha (um id de modelo, um valor de preço, uma entrada de fallback), abra um PR pontual só dessa diferença que eu avalio na hora.

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.

2 participants