From 2ebaa32d1c8d1d28c4e74b554444b4afa76f13d3 Mon Sep 17 00:00:00 2001 From: Harshit28j Date: Thu, 5 Mar 2026 09:17:48 +0530 Subject: [PATCH] fix(ci): fix mypy type ignores, MCP test mocks, model prices schema - Fix mypy: use correct error codes [typeddict-item] instead of [misc], remove variable redefinition in spend_log_cleanup, use type: ignore for cost_tracking_settings assignment - Fix MCP tests: add tool_name_to_display_name and tool_name_to_description dict fields to mock objects for test_add_update_server_with_alias and test_add_update_server_fallback_to_server_id - Fix model prices schema: add 'realtime' to allowed mode enum for gemini-live models Co-Authored-By: Claude Opus 4.6 --- litellm/proxy/db/db_transaction_queue/spend_log_cleanup.py | 2 +- .../proxy/guardrails/guardrail_hooks/azure/prompt_shield.py | 2 +- .../proxy/guardrails/guardrail_hooks/azure/text_moderation.py | 4 ++-- litellm/proxy/management_endpoints/cost_tracking_settings.py | 2 +- tests/mcp_tests/test_mcp_server.py | 4 ++++ tests/test_litellm/test_utils.py | 1 + 6 files changed, 10 insertions(+), 5 deletions(-) diff --git a/litellm/proxy/db/db_transaction_queue/spend_log_cleanup.py b/litellm/proxy/db/db_transaction_queue/spend_log_cleanup.py index 966f5c4b416..8c04bae2593 100644 --- a/litellm/proxy/db/db_transaction_queue/spend_log_cleanup.py +++ b/litellm/proxy/db/db_transaction_queue/spend_log_cleanup.py @@ -131,7 +131,7 @@ class SpendLogCleanup: # If we have a pod lock manager, try to acquire the lock if self.pod_lock_manager and self.pod_lock_manager.redis_cache: - lock_acquired: bool = await self.pod_lock_manager.acquire_lock( + lock_acquired = await self.pod_lock_manager.acquire_lock( cronjob_id=SPEND_LOG_CLEANUP_JOB_NAME, ) or False verbose_proxy_logger.info( diff --git a/litellm/proxy/guardrails/guardrail_hooks/azure/prompt_shield.py b/litellm/proxy/guardrails/guardrail_hooks/azure/prompt_shield.py index a3883899904..d25e6c0a017 100644 --- a/litellm/proxy/guardrails/guardrail_hooks/azure/prompt_shield.py +++ b/litellm/proxy/guardrails/guardrail_hooks/azure/prompt_shield.py @@ -98,7 +98,7 @@ class AzureContentSafetyPromptShieldGuardrail(AzureGuardrailBase, CustomGuardrai "text:shieldPrompt", cast(dict, request_body) ) - last_response = AzurePromptShieldGuardrailResponse(**response_json) # type: ignore[misc] + last_response = AzurePromptShieldGuardrailResponse(**response_json) # type: ignore[typeddict-item] if last_response["userPromptAnalysis"].get("attackDetected"): verbose_proxy_logger.warning( diff --git a/litellm/proxy/guardrails/guardrail_hooks/azure/text_moderation.py b/litellm/proxy/guardrails/guardrail_hooks/azure/text_moderation.py index 05b360fd510..5d2e69cfb7a 100644 --- a/litellm/proxy/guardrails/guardrail_hooks/azure/text_moderation.py +++ b/litellm/proxy/guardrails/guardrail_hooks/azure/text_moderation.py @@ -125,13 +125,13 @@ class AzureContentSafetyTextModerationGuardrail(AzureGuardrailBase, CustomGuardr for chunk in chunks: request_body = AzureTextModerationGuardrailRequestBody( text=chunk, - **self.optional_params_request_body, # type: ignore[misc] + **self.optional_params_request_body, # type: ignore[typeddict-item] ) response_json = await self._post_to_content_safety( "text:analyze", cast(dict, request_body) ) - chunk_response = AzureTextModerationGuardrailResponse(**response_json) # type: ignore[misc] + chunk_response = AzureTextModerationGuardrailResponse(**response_json) # type: ignore[typeddict-item] # For multi-chunk texts the callers only see the final response, # so we must check every intermediate chunk here to avoid silently diff --git a/litellm/proxy/management_endpoints/cost_tracking_settings.py b/litellm/proxy/management_endpoints/cost_tracking_settings.py index c09aaabc073..8e69672f67c 100644 --- a/litellm/proxy/management_endpoints/cost_tracking_settings.py +++ b/litellm/proxy/management_endpoints/cost_tracking_settings.py @@ -59,7 +59,7 @@ def _resolve_model_for_cost_lookup(model: str) -> Tuple[str, Optional[str]]: model_info = first_deployment.get("model_info", {}) # Check base_model first (needed for Azure custom deployment names) - base_model: Optional[str] = model_info.get("base_model") or litellm_params.get( + base_model = model_info.get("base_model") or litellm_params.get( # type: ignore[assignment] "base_model" ) if base_model: diff --git a/tests/mcp_tests/test_mcp_server.py b/tests/mcp_tests/test_mcp_server.py index c5ad25d3014..337a276b715 100644 --- a/tests/mcp_tests/test_mcp_server.py +++ b/tests/mcp_tests/test_mcp_server.py @@ -1465,6 +1465,8 @@ async def test_add_update_server_with_alias(): mock_mcp_server.args = [] mock_mcp_server.env = None mock_mcp_server.spec_path = None + mock_mcp_server.tool_name_to_display_name = {} + mock_mcp_server.tool_name_to_description = {} # OAuth fields - set explicitly to None to avoid MagicMock objects mock_mcp_server.client_id = None mock_mcp_server.client_secret = None @@ -1547,6 +1549,8 @@ async def test_add_update_server_fallback_to_server_id(): mock_mcp_server.args = [] mock_mcp_server.env = None mock_mcp_server.spec_path = None + mock_mcp_server.tool_name_to_display_name = {} + mock_mcp_server.tool_name_to_description = {} # OAuth fields - set explicitly to None to avoid MagicMock objects mock_mcp_server.client_id = None mock_mcp_server.client_secret = None diff --git a/tests/test_litellm/test_utils.py b/tests/test_litellm/test_utils.py index 92a7b8096e6..dc57a167f36 100644 --- a/tests/test_litellm/test_utils.py +++ b/tests/test_litellm/test_utils.py @@ -676,6 +676,7 @@ def test_aaamodel_prices_and_context_window_json_is_valid(): "image_generation", "video_generation", "moderation", + "realtime", "rerank", "responses", "ocr",