From d62b001f2f2f28674ee7d7ca40a4959adc8a3214 Mon Sep 17 00:00:00 2001 From: Daniel Cherubini Date: Fri, 26 Jun 2026 15:43:30 +0200 Subject: [PATCH] fix: use modern lowercase type annotations (UP006) --- .../messages/transformation.py | 48 +++++++------------ ...opic_messages_system_role_normalization.py | 40 ++++------------ 2 files changed, 28 insertions(+), 60 deletions(-) diff --git a/litellm/llms/anthropic/experimental_pass_through/messages/transformation.py b/litellm/llms/anthropic/experimental_pass_through/messages/transformation.py index c22ddc5aa96..c6335e05708 100644 --- a/litellm/llms/anthropic/experimental_pass_through/messages/transformation.py +++ b/litellm/llms/anthropic/experimental_pass_through/messages/transformation.py @@ -1,4 +1,4 @@ -from typing import Any, AsyncIterator, Dict, List, Optional, Tuple +from typing import Any, AsyncIterator, Optional import httpx @@ -57,7 +57,7 @@ class AnthropicMessagesConfig(BaseAnthropicMessagesConfig): # "metadata", ] - def _remove_scope_from_cache_control(self, anthropic_messages_request: Dict) -> None: + def _remove_scope_from_cache_control(self, anthropic_messages_request: dict) -> None: """ Remove `scope` field from cache_control blocks. @@ -111,9 +111,9 @@ class AnthropicMessagesConfig(BaseAnthropicMessagesConfig): def _normalize_system_role_messages( self, - messages: List[Dict], - anthropic_messages_optional_request_params: Dict, - ) -> Tuple[List[Dict], Dict]: + messages: list[dict], + anthropic_messages_optional_request_params: dict, + ) -> tuple[list[dict], dict]: """Move ``role: "system"`` entries from the messages array into the top-level ``system`` field. @@ -121,32 +121,22 @@ class AnthropicMessagesConfig(BaseAnthropicMessagesConfig): ``role: "system"`` inside messages — they only accept ``system`` as a top-level parameter. """ - system_role_messages = [ - m for m in messages if isinstance(m, dict) and m.get("role") == "system" - ] + system_role_messages = [m for m in messages if isinstance(m, dict) and m.get("role") == "system"] if not system_role_messages: return messages, anthropic_messages_optional_request_params # Remove system-role entries from messages - filtered_messages = [ - m - for m in messages - if not (isinstance(m, dict) and m.get("role") == "system") - ] + filtered_messages = [m for m in messages if not (isinstance(m, dict) and m.get("role") == "system")] # Merge into top-level system existing_system = anthropic_messages_optional_request_params.get("system") system_blocks: list = [] if existing_system is not None: - system_blocks.extend( - AnthropicMessagesConfig._as_system_content_blocks(existing_system) - ) + system_blocks.extend(AnthropicMessagesConfig._as_system_content_blocks(existing_system)) for msg in system_role_messages: - system_blocks.extend( - AnthropicMessagesConfig._as_system_content_blocks(msg.get("content")) - ) + system_blocks.extend(AnthropicMessagesConfig._as_system_content_blocks(msg.get("content"))) if system_blocks: anthropic_messages_optional_request_params["system"] = system_blocks @@ -216,12 +206,12 @@ class AnthropicMessagesConfig(BaseAnthropicMessagesConfig): self, headers: dict, model: str, - messages: List[Any], + messages: list[Any], optional_params: dict, litellm_params: dict, api_key: Optional[str] = None, api_base: Optional[str] = None, - ) -> Tuple[dict, Optional[str]]: + ) -> tuple[dict, Optional[str]]: # Check for Anthropic OAuth token in Authorization header headers, api_key = optionally_handle_anthropic_oauth(headers=headers, api_key=api_key) @@ -242,7 +232,7 @@ class AnthropicMessagesConfig(BaseAnthropicMessagesConfig): return headers, api_base @staticmethod - def _translate_reasoning_effort_to_anthropic(model: str, optional_params: Dict) -> None: + def _translate_reasoning_effort_to_anthropic(model: str, optional_params: dict) -> None: """Map OpenAI-style ``reasoning_effort`` to native Anthropic params. Caller-supplied ``thinking`` / ``output_config`` win over the alias. @@ -290,7 +280,7 @@ class AnthropicMessagesConfig(BaseAnthropicMessagesConfig): optional_params["output_config"] = existing_output_config @staticmethod - def _translate_legacy_thinking_for_adaptive_model(model: str, optional_params: Dict) -> None: + def _translate_legacy_thinking_for_adaptive_model(model: str, optional_params: dict) -> None: """Translate legacy ``thinking.type=enabled`` to adaptive for 4.6/4.7. Caller-provided ``output_config.effort`` is never overridden. """ @@ -324,11 +314,11 @@ class AnthropicMessagesConfig(BaseAnthropicMessagesConfig): def transform_anthropic_messages_request( self, model: str, - messages: List[Dict], - anthropic_messages_optional_request_params: Dict, + messages: list[dict], + anthropic_messages_optional_request_params: dict, litellm_params: GenericLiteLLMParams, headers: dict, - ) -> Dict: + ) -> dict: """ No transformation is needed for Anthropic messages @@ -355,10 +345,8 @@ class AnthropicMessagesConfig(BaseAnthropicMessagesConfig): # Normalize role: "system" entries from messages array into top-level system. # Some partner endpoints (Vertex AI, Bedrock) reject role: "system" in messages. if self.should_normalize_system_role_messages(): - messages, anthropic_messages_optional_request_params = ( - self._normalize_system_role_messages( - messages, anthropic_messages_optional_request_params - ) + messages, anthropic_messages_optional_request_params = self._normalize_system_role_messages( + messages, anthropic_messages_optional_request_params ) system_param = anthropic_messages_optional_request_params.get("system") diff --git a/tests/test_litellm/llms/anthropic/experimental_pass_through/messages/test_anthropic_messages_system_role_normalization.py b/tests/test_litellm/llms/anthropic/experimental_pass_through/messages/test_anthropic_messages_system_role_normalization.py index ee625f15bd1..78dc2093100 100644 --- a/tests/test_litellm/llms/anthropic/experimental_pass_through/messages/test_anthropic_messages_system_role_normalization.py +++ b/tests/test_litellm/llms/anthropic/experimental_pass_through/messages/test_anthropic_messages_system_role_normalization.py @@ -43,9 +43,7 @@ class TestNormalizeSystemRoleMessages: messages = [{"role": "user", "content": "hello"}] params = {} - result_messages, result_params = config._normalize_system_role_messages( - messages, params - ) + result_messages, result_params = config._normalize_system_role_messages(messages, params) assert result_messages == messages assert result_params == {} @@ -58,14 +56,10 @@ class TestNormalizeSystemRoleMessages: ] params = {} - result_messages, result_params = config._normalize_system_role_messages( - messages, params - ) + result_messages, result_params = config._normalize_system_role_messages(messages, params) assert result_messages == [{"role": "user", "content": "hello"}] - assert result_params["system"] == [ - {"type": "text", "text": "You are helpful"} - ] + assert result_params["system"] == [{"type": "text", "text": "You are helpful"}] def test_existing_system_merged_with_system_messages(self): config = self._make_config() @@ -75,9 +69,7 @@ class TestNormalizeSystemRoleMessages: ] params = {"system": "Base instruction"} - result_messages, result_params = config._normalize_system_role_messages( - messages, params - ) + result_messages, result_params = config._normalize_system_role_messages(messages, params) assert result_messages == [{"role": "user", "content": "hello"}] assert result_params["system"] == [ @@ -94,9 +86,7 @@ class TestNormalizeSystemRoleMessages: ] params = {} - result_messages, result_params = config._normalize_system_role_messages( - messages, params - ) + result_messages, result_params = config._normalize_system_role_messages(messages, params) assert result_messages == [{"role": "user", "content": "hi"}] assert result_params["system"] == [ @@ -115,14 +105,10 @@ class TestNormalizeSystemRoleMessages: ] params = {} - result_messages, result_params = config._normalize_system_role_messages( - messages, params - ) + result_messages, result_params = config._normalize_system_role_messages(messages, params) assert result_messages == [{"role": "user", "content": "hello"}] - assert result_params["system"] == [ - {"type": "text", "text": "Block content"} - ] + assert result_params["system"] == [{"type": "text", "text": "Block content"}] def test_existing_system_as_list_merged_correctly(self): config = self._make_config() @@ -132,9 +118,7 @@ class TestNormalizeSystemRoleMessages: ] params = {"system": [{"type": "text", "text": "Existing block"}]} - result_messages, result_params = config._normalize_system_role_messages( - messages, params - ) + result_messages, result_params = config._normalize_system_role_messages(messages, params) assert result_messages == [{"role": "user", "content": "hello"}] assert result_params["system"] == [ @@ -150,9 +134,7 @@ class TestNormalizeSystemRoleMessages: ] params = {} - result_messages, result_params = config._normalize_system_role_messages( - messages, params - ) + result_messages, result_params = config._normalize_system_role_messages(messages, params) assert result_messages == [{"role": "user", "content": "hello"}] assert "system" not in result_params @@ -166,9 +148,7 @@ class TestNormalizeSystemRoleMessages: ] params = {} - result_messages, result_params = config._normalize_system_role_messages( - messages, params - ) + result_messages, result_params = config._normalize_system_role_messages(messages, params) assert result_messages == [ "not a dict",