test(e2e): bump claude code compat matrix tiers to sonnet-5 and opus-4-8 - #33483
test(e2e): bump claude code compat matrix tiers to sonnet-5 and opus-4-8#33483mateo-berri wants to merge 1 commit into
Conversation
Anthropic and both Bedrock surfaces move their mid and large tiers from claude-sonnet-4-6 / claude-opus-4-7 to claude-sonnet-5 / claude-opus-4-8. The haiku-4-5 small tier is unchanged everywhere. Vertex AI stays fully on the old tiers and Azure keeps sonnet-4-6 in its sonnet slot (opus does bump to 4-8): live validation showed both new base models 429 with 0 TPM quota in the suite's Vertex project/region, and the Foundry subscription has a hard 0 TPM quota limit for Claude Sonnet 5, so a sonnet-5 deployment cannot be created yet. test_v0_layout now encodes the per-provider tier expectations so the pins are enforced and documented.
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Greptile SummaryThis PR bumps the Claude Code compatibility matrix's mid and large model tiers from Sonnet 4.6 / Opus 4.7 to Sonnet 5 / Opus 4.8 across the anthropic, bedrock-invoke, and bedrock-converse provider columns, with partial updates for azure (opus only) and vertex AI intentionally left on older tiers due to hard 0-TPM quota limits on the newer base models.
Confidence Score: 4/5Safe to merge; changes are confined to test configuration and e2e test files, with well-documented rationale for the two quota-pinned provider columns. All 69 changed files are test-only (e2e suite config and unit test fixtures). The alias swaps are internally consistent across test_config.yaml, the per-feature test files, and the builder/driver unit-test fixtures for the three fully-bumped columns. The two quota-pinned columns (vertex, azure-sonnet) are correctly left on their older tiers and the new layout guard in test_v0_layout.py enforces this via PROVIDER_TIER_OVERRIDES. One minor inconsistency exists in test_rate_limiter.py where two provider-inference example aliases reference model names that are not registered in the proxy config due to quota pins — the unit test logic is unaffected since infer_provider is purely suffix-based, but the examples no longer reflect the actual deployed aliases. tests/e2e/claude_code/_driver_unit_tests/test_rate_limiter.py — the two updated provider-inference examples reference aliases that don't exist in the proxy config due to intentional quota pins.
|
| Filename | Overview |
|---|---|
| tests/e2e/claude_code/test_config.yaml | Bumps anthropic, bedrock-invoke, and bedrock-converse to sonnet-5/opus-4-8; Azure opus bumped to 4-8; Azure sonnet and Vertex AI intentionally left on older tiers. Consistent with the PR description. |
| tests/e2e/claude_code/_builder_unit_tests/test_v0_layout.py | Adds DEFAULT_TIERS and PROVIDER_TIER_OVERRIDES constants to encode per-provider pinned tiers, with detailed docstring explaining quota rationale; the layout enforcement test now uses provider-specific tier sets instead of a single global set. |
| tests/e2e/claude_code/_driver_unit_tests/test_rate_limiter.py | Updated provider-inference parametrize examples to reflect bumped model tiers; two examples now reference aliases (claude-sonnet-5-azure, claude-opus-4-8-vertex) that don't exist in test_config.yaml due to quota pins on those columns. |
| tests/e2e/claude_code/_builder_unit_tests/test_matrix_builder.py | Mechanical alias swap from sonnet-4-6/opus-4-7 to sonnet-5/opus-4-8 in fixture data and assertions; test logic unchanged. |
| tests/e2e/claude_code/manifest.yaml | Comments updated to reflect new tier names; long_context comment made tier-generic since different providers now exercise different model versions. |
| tests/e2e/claude_code/thinking/test_azure.py | Opus bumped to 4-8-azure; removed stale note about opus-4-7-preview thinking limitations on Foundry, which is no longer relevant with the 4-8 upgrade. |
| tests/e2e/claude_code/long_context_1m/test_azure.py | Opus bumped to 4-8-azure; comment updated to reflect sonnet stays at 4-6 but opus moves to 4-8; sonnet model unchanged. |
Reviews (1): Last reviewed commit: "test(e2e): bump claude code compat matri..." | Re-trigger Greptile
| ("claude-haiku-4-5", PROVIDER_ANTHROPIC), | ||
| ("claude-sonnet-4-6", PROVIDER_ANTHROPIC), | ||
| ("claude-opus-4-7", PROVIDER_ANTHROPIC), | ||
| ("claude-sonnet-5", PROVIDER_ANTHROPIC), | ||
| ("claude-opus-4-8", PROVIDER_ANTHROPIC), | ||
| ("claude-haiku-4-5-azure", PROVIDER_AZURE), | ||
| ("claude-sonnet-4-6-azure", PROVIDER_AZURE), | ||
| ("claude-opus-4-7-vertex", PROVIDER_VERTEX_AI), | ||
| ("claude-sonnet-5-azure", PROVIDER_AZURE), | ||
| ("claude-opus-4-8-vertex", PROVIDER_VERTEX_AI), | ||
| ("claude-haiku-4-5-bedrock-converse", PROVIDER_BEDROCK_CONVERSE), | ||
| ("claude-haiku-4-5-bedrock-invoke", PROVIDER_BEDROCK_INVOKE), | ||
| ], |
There was a problem hiding this comment.
Rate-limiter examples no longer match deployed aliases
Two of the updated example aliases don't correspond to any entry in test_config.yaml: claude-sonnet-5-azure (azure sonnet intentionally stays on claude-sonnet-4-6-azure due to Foundry quota) and claude-opus-4-8-vertex (vertex intentionally stays on claude-opus-4-7-vertex due to GCP quota). infer_provider is suffix-based so the logic under test still passes, but anyone cross-referencing these examples against the proxy config will find no matching alias, which could be confusing during future maintenance or quota-flip work.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
Relevant issues
Resolves caveat 4 of #32548 (the model-tier bump follow-up for the Claude Code compatibility matrix)
Linear ticket
Pre-Submission checklist
Please complete all items before asking a LiteLLM maintainer to review your PR
@greptileaito re-request a review after pushing changes)Delays in PR merge?
If you're seeing a delay in your PR being merged, ping the LiteLLM Team on Slack (#pr-review).
Screenshots / Proof of Fix
All proofs captured at commit 3befa3a against a live proxy booted from this branch with the suite's own config, hitting the real provider APIs (no mocks):
One trivial
/v1/messagescall per configured alias:Why Vertex AI keeps the old tiers: the same curls with the new-tier aliases (run before pinning the column back) 429 deterministically
The Service Usage API confirms the suite's Vertex project has no TPM granted for either new base model in its region (quota buckets exist with no effective limit), so these 429s are a hard 0-quota condition rather than burst exhaustion
Why Azure keeps sonnet-4-6 in the sonnet slot (opus does bump to 4-8, which is already deployed on the suite's Foundry resource): the subscription's quota limit for Claude Sonnet 5 is 0, so a deployment cannot even be created
Note on
claude-opus-4-7-vertex: that alias is unchanged by this PR (it is the current large tier in the merged suite, and this PR keeps vertex on it). It 429'd on the same per-base-model TPM metric throughout the validation window even though the project has an 8M TPM grant for the opus-4-7 base model and the haiku/sonnet vertex aliases pass, consistent with concurrent live testing consuming that model's quota at capture time. Pre-existing environment condition, orthogonal to this PRType
✅ Test
Changes
Bumps the Claude Code compatibility matrix's mid and large model tiers from Sonnet 4.6 / Opus 4.7 to Sonnet 5 / Opus 4.8 wherever the suite's live provider environments can actually serve them, per caveat 4 of #32548. The haiku-4-5 small tier is unchanged everywhere, and
run_daily.shis untouched (owned by another in-flight PR)Per provider column: anthropic, bedrock_invoke, and bedrock_converse move fully to
claude-sonnet-5/claude-opus-4-8(aliases intest_config.yaml, the per-feature test files, and the_builder/_driverunit-test fixtures that encode alias names). azure bumps opus toclaude-opus-4-8but keepsclaude-sonnet-4-6in its sonnet slot because the suite's Foundry subscription has a hard 0 TPM quota limit for Claude Sonnet 5 (deployment creation rejected with InsufficientQuota; evidence above). vertex_ai stays fully onclaude-sonnet-4-6/claude-opus-4-7because both new base models have 0 TPM in the suite's Vertex project and region and deterministically 429test_v0_layout.py::test_per_provider_test_file_imports_and_parametrizes_three_modelsnow encodes the per-provider tier expectations (DEFAULT_TIERSplusPROVIDER_TIER_OVERRIDESfor the two quota-pinned columns) with a docstring explaining why each pin exists and what to flip once quota lands, so the pins are enforced by a failing test instead of being folklore. Tier-naming comments inmanifest.yamland the test docstrings were updated to match; the long-context manifest comment went tier-generic since the exercised models now differ per column.sample_compatibility-matrix.jsonneeded no change (it carries no model names)Follow-ups for whoever owns the provider accounts: request Claude Sonnet 5 TPM quota in the Foundry subscription (self-serve form), request sonnet-5 and opus-4-8 TPM quota in the Vertex project, then flip the pinned aliases plus the layout-test overrides
QA runbook
Environment prerequisites: a proxy booted from this branch with
--config tests/e2e/claude_code/test_config.yamland the suite's provider credentials in the environment (ANTHROPIC_API_KEY, AWS credentials for us-east-1 Bedrock,VERTEXAI_PROJECT/VERTEXAI_LOCATIONplus GCP credentials,AZURE_FOUNDRY_API_BASE/AZURE_FOUNDRY_API_KEYpointing at the Foundry resource that hosts the Claude deployments). Every changed e2e file is the same mechanical alias swap, so the runbook covers one representative cell per provider column plus the structural pin{"model": "claude-sonnet-5", "max_tokens": 32, "messages": [{"role": "user", "content": "Reply with the single word pong"}]}and the proxy keyclaude-opus-4-8andclaude-haiku-4-5bedrock/us.anthropic.claude-sonnet-5andbedrock/us.anthropic.claude-opus-4-8claude-sonnet-5-bedrock-invokethenclaude-opus-4-8-bedrock-invokebedrock/converse/us.anthropic.claude-sonnet-5andbedrock/converse/us.anthropic.claude-opus-4-8claude-sonnet-5-bedrock-conversethenclaude-opus-4-8-bedrock-converseclaude-sonnet-4-6-vertex; expect 200claude-sonnet-5-vertex; expect a 400 invalid-model error from the proxy (alias deliberately not registered), confirming the pin is realclaude-opus-4-8-azurethenclaude-sonnet-4-6-azure; expect 200 from eachFinal Attestation