chore(release): backport #31923, #31929, #31393 to stable/1.90.x and cut 1.90.3 - #32025
Conversation
Backport of #31929 to stable/1.90.x. Cherry-picked from 1543725 (litellm_internal_staging). Deviations from the upstream squash, needed because the line predates some staging-only state: - model_prices JSON churn reduced to its semantic content: drop the stale 1h-TTL pricing keys from the two Claude 3.5 Sonnet Bedrock entries and add supports_parallel_tool_use_config to the flagged entries. 6 of the 58 flagged entries (*.anthropic.claude-sonnet-5) do not exist on this line and were skipped - ported the local_model_cost_map fixture into test_anthropic_claude3_transformation.py (added upstream by an earlier staging commit that never reached this line) - test_parallel_tool_calls_config_kept_for_sonnet_5 renamed and pointed at anthropic.claude-sonnet-4-6, since sonnet-5 has no entry on this line - test_parallel_tool_calls_newer_model_adds_disable_flag now forces the bundled cost map so it does not depend on the remote map having synced the new flag - ruff-strict-budget.json kept at the line's schema (no change needed)
Backport of #31393 to stable/1.90.x. Cherry-picked from 7acc015 (litellm_internal_staging). The test-file conflict hunk also carried the staging-only TestMCPClientResolvedAuth class from an unrelated commit that never reached this line; it was dropped and only the additions belonging to #31393 were kept.
4769948 to
01363fe
Compare
Greptile SummaryThis backport cherry-picks three fixes onto
Confidence Score: 4/5All three bug fixes are mechanically correct and well-covered by new regression tests; the only non-obvious concerns are a type-annotation inconsistency on a TypedDict that has no runtime impact, and a lookup-pattern divergence in the strict-tools helper that could cause stale values after cost-map hot-swaps. The MCP logging redaction is a one-line change with obvious intent. The strict-tools fix correctly moves the gate to a pricing-JSON flag populated for all affected models. The TTL fix properly threads the caller-supplied control dict through _build_cache_point_block — the new test suite confirms both the happy path and the regional-model fallback. The two findings are style/annotation concerns: CacheControlToolConfigInjectionPoint.control is added as a nominally required TypedDict field rather than optional, and _get_bedrock_converse_strict_tools_flag diverges from the simpler litellm.model_cost direct-lookup pattern used by its sibling helpers, introducing an lru_cache staleness risk that the sibling helpers do not share. Neither concern causes misbehavior in normal production use. litellm/llms/bedrock/common_utils.py (_get_bedrock_converse_strict_tools_flag lookup path) and litellm/types/integrations/anthropic_cache_control_hook.py (TypedDict total= annotation).
|
| Filename | Overview |
|---|---|
| litellm/experimental_mcp_client/client.py | Removes tool-call and prompt arguments from two INFO-level log messages; straightforward and correct. |
| litellm/llms/bedrock/common_utils.py | Adds bedrock_converse_supports_strict_tools, bedrock_converse_supports_parallel_tool_use_config, and refactors is_claude_4_5_on_bedrock to use pricing-JSON flags. The strict-tools lookup path goes through get_model_info() (lru_cache'd) + local map fallback, diverging from the simpler direct litellm.model_cost access used by the other two helpers. |
| litellm/llms/bedrock/chat/converse_transformation.py | Extracts _build_cache_point_block static method, wires it into the tool_config injection path so ttl is honored, and decouples the parallel-tool-use-config gate to the new supports_parallel_tool_use_config flag. Logic is correct. |
| litellm/litellm_core_utils/prompt_templates/factory.py | Replaces get_bedrock_base_model check with bedrock_converse_supports_strict_tools call; correct import swap and logic change. |
| litellm/types/integrations/anthropic_cache_control_hook.py | Adds control: Optional[ChatCompletionCachedContent] to CacheControlToolConfigInjectionPoint TypedDict without total=False, making the field nominally required even though it is read with .get() at runtime. |
| model_prices_and_context_window.json | Adds bedrock_converse_supports_strict_tools: false to Opus 4.7/4.8 entries, adds supports_parallel_tool_use_config: true to all 4.5+ capable model entries, removes stale 1h-TTL pricing keys from two Claude 3.5 Sonnet entries. Changes are consistent and correct. |
| litellm/types/utils.py | Adds bedrock_converse_supports_strict_tools to ProviderSpecificModelInfo; straightforward addition. |
| litellm/utils.py | Threads bedrock_converse_supports_strict_tools through _get_model_info_helper; minimal correct addition. |
| tests/test_litellm/llms/bedrock/chat/test_converse_transformation.py | Adds comprehensive regression tests for TTL in tool_config injection and decoupled parallel-tool-use-config gate; existing tests updated to use local cost map to be independent of network-fetched data. |
| tests/test_litellm/litellm_core_utils/prompt_templates/test_bedrock_converse_strict_tools_opus_47_48.py | New regression test file covering strict-tools forwarding for Opus 4.7/4.8 (dropped), other Anthropic models (kept), and non-Anthropic families (dropped). |
| tests/test_litellm/experimental_mcp_client/test_mcp_client.py | Adds two async tests verifying that tool-call arguments and prompt arguments are no longer logged; uses patch.object on verbose_logger correctly. |
Comments Outside Diff (1)
-
litellm/types/integrations/anthropic_cache_control_hook.py, line 19-23 (link)Adding
controlto aTypedDictthat is not declaredtotal=Falsemakes the field nominally required from a type-checker perspective. Any existing caller that builds{"location": "tool_config"}without acontrolkey will now get a type error, even though at runtimepoint.get("control")handles the missing key gracefully. Declaring the class withtotal=False(or usingNotRequired) keeps the runtime behaviour intact and avoids this backward-incompatible type annotation change.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!
Reviews (1): Last reviewed commit: "bump: version 1.90.2 → 1.90.3" | Re-trigger Greptile
| def _get_bedrock_converse_strict_tools_flag(base_model: str) -> Optional[bool]: | ||
| candidates = dict.fromkeys( | ||
| (base_model, _BEDROCK_MODEL_VERSION_SUFFIX_RE.sub("", base_model)) | ||
| ) | ||
| for candidate in candidates: | ||
| with contextlib.suppress(Exception): | ||
| model_info = get_cached_model_info()( | ||
| model=candidate, | ||
| custom_llm_provider="bedrock", | ||
| ) | ||
|
|
||
| flag = model_info.get("bedrock_converse_supports_strict_tools") | ||
| if isinstance(flag, bool): | ||
| return flag | ||
|
|
||
| model_cost_key = model_info.get("key") | ||
| if isinstance(model_cost_key, str): | ||
| local_flag = ( | ||
| _get_local_model_cost_map() | ||
| .get(model_cost_key, {}) | ||
| .get("bedrock_converse_supports_strict_tools") | ||
| ) | ||
| if isinstance(local_flag, bool): | ||
| return local_flag | ||
| return None |
There was a problem hiding this comment.
Strict-tools lookup uses a different access pattern than its siblings
is_claude_4_5_on_bedrock and bedrock_converse_supports_parallel_tool_use_config both read from litellm.model_cost directly (with a base-model fallback), so they always reflect whatever cost-map is currently loaded — including test overrides. _get_bedrock_converse_strict_tools_flag instead goes through get_model_info(), which is @lru_cache-decorated. If litellm.model_cost is swapped in a test (or hot-reloaded in a long-running proxy process) after the first call, the strict-tools check may silently return a stale cached value while the other two checks immediately reflect the new map. A simpler direct litellm.model_cost.get(candidate) pattern (as the other two helpers use) would avoid this discrepancy and eliminate the need for the _get_local_model_cost_map() fallback path.
….3) (#1400) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/berriai/litellm](https://images.chainguard.dev/directory/image/wolfi-base/overview) ([source](https://github.com/BerriAI/litellm)) | patch | `v1.90.2` → `v1.90.3` | --- ### Release Notes <details> <summary>BerriAI/litellm (ghcr.io/berriai/litellm)</summary> ### [`v1.90.3`](https://github.com/BerriAI/litellm/releases/tag/v1.90.3) [Compare Source](BerriAI/litellm@v1.90.3...v1.90.3) ##### Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.90.3 ``` **Verify using the release tag (convenience):** Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/v1.90.3/cosign.pub \ ghcr.io/berriai/litellm:v1.90.3 ``` Expected output: ``` The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key ``` *** ##### What's Changed - chore(release): backport [#​31923](BerriAI/litellm#31923), [#​31929](BerriAI/litellm#31929), [#​31393](BerriAI/litellm#31393) to stable/1.90.x and cut 1.90.3 by [@​mateo-berri](https://github.com/mateo-berri) in [#​32025](BerriAI/litellm#32025) **Full Changelog**: <BerriAI/litellm@v1.90.2...v1.90.3> ### [`v1.90.3`](https://github.com/BerriAI/litellm/releases/tag/v1.90.3) [Compare Source](BerriAI/litellm@v1.90.2...v1.90.3) ##### Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.90.3 ``` **Verify using the release tag (convenience):** Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/v1.90.3/cosign.pub \ ghcr.io/berriai/litellm:v1.90.3 ``` Expected output: ``` The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key ``` *** ##### What's Changed - chore(release): backport [#​31923](BerriAI/litellm#31923), [#​31929](BerriAI/litellm#31929), [#​31393](BerriAI/litellm#31393) to stable/1.90.x and cut 1.90.3 by [@​mateo-berri](https://github.com/mateo-berri) in [#​32025](BerriAI/litellm#32025) **Full Changelog**: <BerriAI/litellm@v1.90.2...v1.90.3> </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19--> Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/1400
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [ghcr.io/berriai/litellm](https://images.chainguard.dev/directory/image/wolfi-base/overview) ([source](https://github.com/BerriAI/litellm)) | final | patch | `v1.90.2` → `v1.90.3` | --- ### Release Notes <details> <summary>BerriAI/litellm (ghcr.io/berriai/litellm)</summary> ### [`v1.90.3`](https://github.com/BerriAI/litellm/releases/tag/v1.90.3) [Compare Source](BerriAI/litellm@v1.90.3...v1.90.3) ##### Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.90.3 ``` **Verify using the release tag (convenience):** Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/v1.90.3/cosign.pub \ ghcr.io/berriai/litellm:v1.90.3 ``` Expected output: ``` The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key ``` *** ##### What's Changed - chore(release): backport [#​31923](BerriAI/litellm#31923), [#​31929](BerriAI/litellm#31929), [#​31393](BerriAI/litellm#31393) to stable/1.90.x and cut 1.90.3 by [@​mateo-berri](https://github.com/mateo-berri) in [#​32025](BerriAI/litellm#32025) **Full Changelog**: <BerriAI/litellm@v1.90.2...v1.90.3> ### [`v1.90.3`](https://github.com/BerriAI/litellm/releases/tag/v1.90.3) [Compare Source](BerriAI/litellm@v1.90.2...v1.90.3) ##### Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.90.3 ``` **Verify using the release tag (convenience):** Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/v1.90.3/cosign.pub \ ghcr.io/berriai/litellm:v1.90.3 ``` Expected output: ``` The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key ``` *** ##### What's Changed - chore(release): backport [#​31923](BerriAI/litellm#31923), [#​31929](BerriAI/litellm#31929), [#​31393](BerriAI/litellm#31393) to stable/1.90.x and cut 1.90.3 by [@​mateo-berri](https://github.com/mateo-berri) in [#​32025](BerriAI/litellm#32025) **Full Changelog**: <BerriAI/litellm@v1.90.2...v1.90.3> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDkuNSIsInVwZGF0ZWRJblZlciI6IjQzLjI0OS41IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: Renovate Bot <renovate@bhamm-lab.com> Reviewed-on: https://codeberg.org/blake-hamm/bhamm-lab/pulls/258
…to v1.90.3 (#257) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [https://github.com/BerriAI/litellm.git](https://github.com/BerriAI/litellm) | patch | `v1.90.0` → `v1.90.3` | --- ### Release Notes <details> <summary>BerriAI/litellm (https://github.com/BerriAI/litellm.git)</summary> ### [`v1.90.3`](https://github.com/BerriAI/litellm/releases/tag/v1.90.3) [Compare Source](BerriAI/litellm@v1.90.2...v1.90.3) #### Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.90.3 ``` **Verify using the release tag (convenience):** Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/v1.90.3/cosign.pub \ ghcr.io/berriai/litellm:v1.90.3 ``` Expected output: ``` The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key ``` *** #### What's Changed - chore(release): backport [#​31923](BerriAI/litellm#31923), [#​31929](BerriAI/litellm#31929), [#​31393](BerriAI/litellm#31393) to stable/1.90.x and cut 1.90.3 by [@​mateo-berri](https://github.com/mateo-berri) in [#​32025](BerriAI/litellm#32025) **Full Changelog**: <BerriAI/litellm@v1.90.2...v1.90.3> ### [`v1.90.2`](https://github.com/BerriAI/litellm/releases/tag/v1.90.2) [Compare Source](BerriAI/litellm@v1.90.1...v1.90.2) #### Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.90.2 ``` **Verify using the release tag (convenience):** Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/v1.90.2/cosign.pub \ ghcr.io/berriai/litellm:v1.90.2 ``` Expected output: ``` The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key ``` *** #### What's Changed - chore(release): backport [#​31519](BerriAI/litellm#31519), [#​31733](BerriAI/litellm#31733) to stable/1.90.x and cut 1.90.2 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31782](BerriAI/litellm#31782) **Full Changelog**: <BerriAI/litellm@v1.90.1...v1.90.2> ### [`v1.90.1`](https://github.com/BerriAI/litellm/releases/tag/v1.90.1) [Compare Source](BerriAI/litellm@v1.90.0-rc.1...v1.90.1) #### Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](BerriAI/litellm@0112e53). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.90.1 ``` **Verify using the release tag (convenience):** Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/v1.90.1/cosign.pub \ ghcr.io/berriai/litellm:v1.90.1 ``` Expected output: ``` The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key ``` *** #### What's Changed - chore(release): backport [#​31036](BerriAI/litellm#31036), [#​31342](BerriAI/litellm#31342), [#​31653](BerriAI/litellm#31653) to stable/1.90.x and cut 1.90.1 (litellm-enterprise 0.1.43.post1) by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​31667](BerriAI/litellm#31667) **Full Changelog**: <BerriAI/litellm@v1.90.0...v1.90.1> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDkuNSIsInVwZGF0ZWRJblZlciI6IjQzLjI0OS41IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--> Co-authored-by: Renovate Bot <renovate@bhamm-lab.com> Reviewed-on: https://codeberg.org/blake-hamm/bhamm-lab/pulls/257
Relevant issues
Backports three already-merged fixes from litellm_internal_staging onto stable/1.90.x. #31923 fixes #31582: Bedrock Converse routes Claude Opus 4.7/4.8 through a validator that rejects
toolSpec.strict(tools.N.custom.strict: Extra inputs are not permitted), so the old blanket "forward strict for all Anthropic models" gate turned every strict-tool request against those models into a 400. The gate is now driven by abedrock_converse_supports_strict_toolsflag in the pricing JSON. #31929 makescache_control_injection_pointswithlocation: tool_confighonorcontrol.ttl(previously a bare{"cachePoint": {"type": "default"}}was always emitted and Bedrock silently fell back to the 5-minute default), and replaces the hardcoded Claude model-name pattern list for 1h-TTL eligibility with a lookup againstcache_creation_input_token_cost_above_1hrin the pricing JSON, which also removes that stale pricing key from two Claude 3.5 Sonnet entries that never supported 1h TTL. #31393 stops the MCP client from logging tool-call and prompt arguments at INFO on every call; caller input such as user queries, model names, and instructions landed verbatim in the proxy application logs and any downstream log aggregator, and these INFO lines now log only the tool or prompt nameCuts 1.90.3. The line's tip is at 1.90.2 with the v1.90.1/v1.90.2 releases still pending, so this PR follows the line's one-bump-per-backport-PR pattern and takes the next patch
Linear ticket
LIT-3892 (#31929), LIT-3811 (#31393)
Pre-Submission checklist
Screenshots / Proof of Fix
Targeted suites on the line, judged as a delta against a clean baseline captured on the line's tip (1e60f26) before picking: baseline 1007 passed, 0 failures; after both picks 1032 passed, 0 failures (the 25 net-new tests are the picks' own regression tests)
Live proxy proof against real Bedrock (us-west-2), two proxies running the line's code before and after the picks, same curl against each
#31923, strict tool on Opus 4.7 (
bedrock/us.anthropic.claude-opus-4-7):#31929,
tool_configcache injection withttl: 1hon Sonnet 4.6 (both return HTTP 200; the outgoing Bedrock request logged by--detailed_debugshows the ttl now survives):#31393, MCP tool call through the gateway against the real public DeepWiki MCP server, proxies run with
--debug(INFO-level application logs) andmcp_servers: {deepwiki: {url: https://mcp.deepwiki.com/mcp, transport: http}}in the config. Both calls return HTTP 200 with the tool result; the difference is what lands in the proxy logThe mcp client suite (
tests/test_litellm/experimental_mcp_client/) passes 34 on the patched tree: the 32 pre-existing tests plus the pick's 2 regression testsType
Bug Fix
Changes
What is included, in the order committed:
Adaptation notes
#31923 applies semantically verbatim; only surrounding context and Black formatting differ (the line predates the ruff formatter migration), and two typing imports the staging file uses elsewhere were dropped as unused on this line
#31929 needed more adaptation because the line predates some staging state. The upstream squash's large pricing-JSON churn reduces to its semantic content on this line: drop the stale 1h-TTL pricing keys from the two Claude 3.5 Sonnet Bedrock entries and add
supports_parallel_tool_use_configto the flagged model entries; 6 of the 58 flagged entries (the*.anthropic.claude-sonnet-5family) do not exist on this line and were skipped. Thelocal_model_cost_maptest fixture, added upstream by an earlier staging commit that never reached this line, was ported intotest_anthropic_claude3_transformation.py.test_parallel_tool_calls_config_kept_for_sonnet_5was renamed and pointed atanthropic.claude-sonnet-4-6since sonnet-5 has no pricing entry on this line, andtest_parallel_tool_calls_newer_model_adds_disable_flagnow forces the bundled cost map so it does not depend on the remote map having synced the new flag.ruff-strict-budget.jsonkeeps the line's schema unchanged#31393 applies verbatim; the test-file conflict hunk also carried a staging-only
TestMCPClientResolvedAuthclass from an unrelated commit that never reached this line, which was dropped, keeping only the additions belonging to #31393