From 13bb1b6cfc9e34e501b0fd0f88db2e8e3812769f Mon Sep 17 00:00:00 2001 From: Hasnaat Hussain Date: Sat, 8 Aug 2026 15:30:53 +0500 Subject: [PATCH] refactor(anthropic): keep drop params immutable Signed-off-by: Hasnaat Hussain --- .../pass_through/messages/handler.py | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/litellm/llms/anthropic/pass_through/messages/handler.py b/litellm/llms/anthropic/pass_through/messages/handler.py index 5226aa06c1a..68786e79d77 100644 --- a/litellm/llms/anthropic/pass_through/messages/handler.py +++ b/litellm/llms/anthropic/pass_through/messages/handler.py @@ -7,8 +7,9 @@ import asyncio import contextvars -from collections.abc import AsyncIterator, Coroutine, Iterator +from collections.abc import AsyncIterator, Coroutine, Iterator, Mapping, Sequence from functools import partial +from types import MappingProxyType from typing import Any, Final, cast import litellm @@ -421,30 +422,30 @@ def validate_anthropic_api_metadata(metadata: dict | None = None) -> dict | None def _drop_unsupported_anthropic_messages_params( - anthropic_messages_optional_request_params: dict, + anthropic_messages_optional_request_params: Mapping[str, Any], model: str, custom_llm_provider: str | None, - additional_drop_params: list[str] | None = None, -) -> dict: + additional_drop_params: Sequence[str] | None = None, +) -> Mapping[str, Any]: from litellm.llms.anthropic.chat.transformation import AnthropicConfig from litellm.utils import _should_drop_param - additional_drop_params = additional_drop_params or [] - for k in list(anthropic_messages_optional_request_params.keys()): - if _should_drop_param(k, additional_drop_params): - anthropic_messages_optional_request_params.pop(k, None) - - if not AnthropicConfig._model_supports_effort_param(model, custom_llm_provider or "anthropic"): - anthropic_messages_optional_request_params.pop("output_config", None) - if not AnthropicConfig._supports_model_capability(model, "supports_reasoning", custom_llm_provider or "anthropic"): - anthropic_messages_optional_request_params.pop("thinking", None) - if ( - "context_management" in anthropic_messages_optional_request_params - and custom_llm_provider in ["vertex_ai", "bedrock"] - and "haiku" in model.lower() - ): - anthropic_messages_optional_request_params.pop("context_management", None) - return anthropic_messages_optional_request_params + additional_drop_params_list: Final = additional_drop_params if isinstance(additional_drop_params, list) else None + supports_effort: Final = AnthropicConfig._model_supports_effort_param(model, custom_llm_provider or "anthropic") + supports_reasoning: Final = AnthropicConfig._supports_model_capability( + model, "supports_reasoning", custom_llm_provider or "anthropic" + ) + drop_context_management: Final = custom_llm_provider in ["vertex_ai", "bedrock"] and "haiku" in model.lower() + return MappingProxyType( + { + k: v + for k, v in anthropic_messages_optional_request_params.items() + if not _should_drop_param(k, additional_drop_params_list) + and (k != "output_config" or supports_effort) + and (k != "thinking" or supports_reasoning) + and (k != "context_management" or not drop_context_management) + } + ) def anthropic_messages_handler( @@ -673,7 +674,7 @@ def anthropic_messages_handler( ) ) - should_drop_params = ( + should_drop_params: Final = ( litellm.drop_params is True or getattr(litellm_params, "drop_params", None) is True or kwargs.get("drop_params") is True