Skip to content

Add Claude Fable 5 across Anthropic, Bedrock, Vertex AI, and Azure AI - #30062

Closed
mateo-berri wants to merge 1 commit into
litellm_internal_stagingfrom
claude/tender-shannon-7bzr3k
Closed

Add Claude Fable 5 across Anthropic, Bedrock, Vertex AI, and Azure AI#30062
mateo-berri wants to merge 1 commit into
litellm_internal_stagingfrom
claude/tender-shannon-7bzr3k

Conversation

@mateo-berri

Copy link
Copy Markdown
Contributor

Relevant issues

Linear ticket

Pre-Submission checklist

Please complete all items before asking a LiteLLM maintainer to review your PR

  • I have added meaningful tests
  • My PR passes all unit tests on make test-unit
  • My PR's scope is as isolated as possible; it only solves 1 specific problem
  • I have requested a Greptile review by commenting @greptileai and received a Confidence Score of at least 4/5 before requesting a maintainer review

Delays in PR merge?

If you're seeing a delay in your PR being merged, ping the LiteLLM Team on Slack (#pr-review).

CI (LiteLLM team)

CI status guideline:

  • 50-55 passing tests: main is stable with minor issues.
  • 45-49 passing tests: acceptable but needs attention
  • <= 40 passing tests: unstable; be careful with your merges and assess the risk.
  • Branch creation CI run
    Link:

  • CI run for the last commit
    Link:

  • Merge / cherry-pick CI run
    Links:

Screenshots / Proof of Fix

Proxy started against this branch's cost map (the hosted map on main does not have the model yet, so LITELLM_LOCAL_MODEL_COST_MAP=True makes the proxy use the bundled copy; once this merges, the hosted map picks it up and the flag is unnecessary):

LITELLM_LOCAL_MODEL_COST_MAP=True python litellm/proxy/proxy_cli.py --config /tmp/fable_proof/config.yaml --port 4000

with deployments anthropic/claude-fable-5, bedrock/us.anthropic.claude-fable-5, vertex_ai/claude-fable-5, and azure_ai/claude-fable-5.

First-party Anthropic, with reasoning_effort translated to adaptive thinking and real spend tracked:

curl -s -D /tmp/h.txt http://localhost:4000/v1/chat/completions \
  -H "Authorization: Bearer sk-1234" -H "Content-Type: application/json" \
  -d '{"model": "claude-fable-5", "messages": [{"role": "user", "content": "Reply with exactly: fable-5 via anthropic works"}], "reasoning_effort": "low", "max_tokens": 2000}' \
  | jq '{model, content: .choices[0].message.content, prompt_tokens: .usage.prompt_tokens, completion_tokens: .usage.completion_tokens}'; grep -i "^x-litellm-response-cost:" /tmp/h.txt
{
  "model": "claude-fable-5",
  "content": "fable-5 via anthropic works",
  "prompt_tokens": 25,
  "completion_tokens": 13
}
x-litellm-response-cost: 0.0009000000000000001

The cost header matches the new pricing exactly: 25 input tokens at $10/MTok plus 13 output tokens at $50/MTok is $0.0009

Streaming with reasoning_effort: "xhigh" (Fable 5 rejects the legacy budget_tokens shape with a 400, so a 200 here proves the adaptive thinking plus output_config.effort wire format is being sent):

curl -s -N http://localhost:4000/v1/chat/completions \
  -H "Authorization: Bearer sk-1234" -H "Content-Type: application/json" \
  -d '{"model": "claude-fable-5", "messages": [{"role": "user", "content": "In one short sentence, what is 17*23? Show the result only."}], "reasoning_effort": "xhigh", "stream": true, "stream_options": {"include_usage": true}, "max_tokens": 30000}' | tail -4
data: {"id":"chatcmpl-3211eb1a-...","model":"claude-fable-5","choices":[{"index":0,"delta":{}}],"usage":{"completion_tokens":12,"prompt_tokens":26,"total_tokens":38,...}}

data: [DONE]

reasoning_effort: "none" also returns 200; this matters because Fable 5 is stricter than Opus 4.8 and 400s on an explicit thinking: {"type": "disabled"}, so LiteLLM must omit the param entirely, which it does:

{"content": "no-thinking path works", "completion_tokens": 20}

Bedrock routing reaches the real model; the remaining blocker is account provisioning, not LiteLLM. Fable 5 on Bedrock requires opting the AWS account into provider data sharing via the Data Retention API (no console UI at launch per the AWS model card), which our CI account has not done:

curl -s http://localhost:4000/v1/chat/completions -H "Authorization: Bearer sk-1234" -H "Content-Type: application/json" \
  -d '{"model": "bedrock-claude-fable-5", "messages": [{"role": "user", "content": "hi"}], "max_tokens": 100}'
BedrockException - {"message":"The model returned the following errors: data retention mode 'default' is not available for this model"}

(this is from the global. profile; us.anthropic.claude-fable-5 is not yet listed for this account and returns "provided model identifier is invalid", and the base id returns the standard "use an inference profile" error, both consistent with a day-one rollout)

Azure Foundry authenticates and routes correctly; the CI resource just has no claude-fable-5 deployment yet (same current state as claude-opus-4-8 there). Creating the deployment in the Foundry portal under Models + endpoints is the one manual step left:

Azure_aiException - {"error":{"code":"DeploymentNotFound","message":"The API deployment claude-fable-5 does not exist. ..."}}

Vertex could not be exercised live from this sandbox because the ADC credential in the environment has an expired refresh token ("Reauthentication is needed. Please run gcloud auth application-default login"); the model id claude-fable-5 is confirmed against the Vertex docs and the entries mirror the verified Opus 4.8 shape

To re-run Bedrock/Vertex/Azure once provisioned: opt the AWS account into provider_data_sharing, refresh the gcloud ADC credential, create the Foundry deployment, then re-run the curls above with the corresponding model names. The e2e grid cells in tests/llm_translation/reasoning_effort_grid/grid_spec.py carry fail_reason markers for exactly these three gaps and should have those markers removed at the same time

Type

🆕 New Feature

Changes

Adds Claude Fable 5 (released today; $10/$50 per MTok, 1M context, 128K max output, adaptive thinking only) to the model cost map for all four platforms that serve it: claude-fable-5 (Anthropic API, with the inference_geo: us 1.1x multiplier in provider_specific_entry and deliberately no fast key since Fable 5 has no fast mode), anthropic.claude-fable-5 plus global./us./eu. inference profiles (Bedrock converse, geo profiles at the documented 10% regional premium; AWS lists no au/apac/jp profiles for this model), vertex_ai/claude-fable-5 and @default (Vertex publishes the bare id with no date suffix), and azure_ai/claude-fable-5 (Microsoft Foundry serves Fable 5 with the full 1M context window, unlike Opus 4.8 which is capped at 200k there)

All entries carry supports_adaptive_thinking, which is what makes LiteLLM emit thinking: {"type": "adaptive"} plus output_config.effort instead of the legacy budget_tokens shape that Fable 5 rejects. Cache pricing uses the standard multipliers: $12.50/MTok 5m write, $20/MTok 1h write, $1/MTok read

Also registers anthropic.claude-fable-5 in BEDROCK_CONVERSE_MODELS, adds the model to the setup wizard, and extends the reasoning effort e2e grid with Fable 5 rows for all four providers (Bedrock/Vertex/Azure cells xfail with documented provisioning reasons until the CI accounts are set up, mirroring how Opus 4.8 was rolled in)

Tests: tests/test_litellm/test_claude_fable_5_config.py validates pricing, capabilities, regional premiums, backup-map parity, Bedrock converse registration, provider resolution, and adaptive-thinking detection through bedrock/, bedrock/invoke/, vertex_ai/, and azure_ai/ routed ids. One notable assertion: provider_specific_entry == {"us": 1.1} guards against a future copy-paste of the Opus entries adding a fast multiplier that would misprice speed: "fast" requests on a model that has no fast mode

Known pre-existing issue, not touched here: model_prices_and_context_window.json and the bundled backup already diverge on this branch in the snowflake entries; the new Fable 5 entries are byte-identical in both files and the new test asserts that parity for these entries

https://claude.ai/code/session_01MZarYYT3aS7DxaNjoax6Gm


Generated by Claude Code

Adds cost map entries for claude-fable-5 ($10/$50 per MTok, 1M context,
128K output, adaptive thinking only) on the Anthropic API, Bedrock
converse (base, global, and us/eu geo inference profiles at the 10%
regional premium), Vertex AI, and Azure AI (Microsoft Foundry, which
serves Fable 5 with the full 1M context window unlike Opus 4.8).

Registers anthropic.claude-fable-5 in BEDROCK_CONVERSE_MODELS, lists the
model in the setup wizard, and extends the reasoning effort e2e grid.
The Bedrock, Vertex, and Azure grid cells carry fail_reason markers
until the CI accounts are provisioned: Bedrock needs the provider data
sharing opt-in Fable 5 requires, and the Foundry resource needs a
claude-fable-5 deployment.

The first-party entry carries provider_specific_entry {us: 1.1} for the
inference_geo premium and deliberately no fast multiplier since Fable 5
has no fast mode.

https://claude.ai/code/session_01MZarYYT3aS7DxaNjoax6Gm
@codecov

codecov Bot commented Jun 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

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