diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 1f9544413a..b0984939f9 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -1760,7 +1760,7 @@ "input_cost_per_token": 5e-06, "output_cost_per_token": 2.5e-05, "litellm_provider": "azure_ai", - "max_input_tokens": 200000, + "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -1831,7 +1831,7 @@ "cache_read_input_token_cost": 3e-07, "input_cost_per_token": 3e-06, "litellm_provider": "azure_ai", - "max_input_tokens": 200000, + "max_input_tokens": 1000000, "max_output_tokens": 64000, "max_tokens": 64000, "mode": "chat", @@ -8498,18 +8498,18 @@ }, "claude-sonnet-4-6": { "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_200k_tokens": 7.5e-06, + "cache_creation_input_token_cost_above_200k_tokens": 3.75e-06, "cache_read_input_token_cost": 3e-07, - "cache_read_input_token_cost_above_200k_tokens": 6e-07, + "cache_read_input_token_cost_above_200k_tokens": 3e-07, "input_cost_per_token": 3e-06, - "input_cost_per_token_above_200k_tokens": 6e-06, + "input_cost_per_token_above_200k_tokens": 3e-06, "litellm_provider": "anthropic", - "max_input_tokens": 200000, + "max_input_tokens": 1000000, "max_output_tokens": 64000, "max_tokens": 64000, "mode": "chat", "output_cost_per_token": 1.5e-05, - "output_cost_per_token_above_200k_tokens": 2.25e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -8690,19 +8690,19 @@ }, "claude-opus-4-6": { "cache_creation_input_token_cost": 6.25e-06, - "cache_creation_input_token_cost_above_200k_tokens": 1.25e-05, + "cache_creation_input_token_cost_above_200k_tokens": 6.25e-06, "cache_creation_input_token_cost_above_1hr": 1e-05, "cache_read_input_token_cost": 5e-07, - "cache_read_input_token_cost_above_200k_tokens": 1e-06, + "cache_read_input_token_cost_above_200k_tokens": 5e-07, "input_cost_per_token": 5e-06, - "input_cost_per_token_above_200k_tokens": 1e-05, + "input_cost_per_token_above_200k_tokens": 5e-06, "litellm_provider": "anthropic", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 2.5e-05, - "output_cost_per_token_above_200k_tokens": 3.75e-05, + "output_cost_per_token_above_200k_tokens": 2.5e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -8725,19 +8725,19 @@ }, "claude-opus-4-6-20260205": { "cache_creation_input_token_cost": 6.25e-06, - "cache_creation_input_token_cost_above_200k_tokens": 1.25e-05, + "cache_creation_input_token_cost_above_200k_tokens": 6.25e-06, "cache_creation_input_token_cost_above_1hr": 1e-05, "cache_read_input_token_cost": 5e-07, - "cache_read_input_token_cost_above_200k_tokens": 1e-06, + "cache_read_input_token_cost_above_200k_tokens": 5e-07, "input_cost_per_token": 5e-06, - "input_cost_per_token_above_200k_tokens": 1e-05, + "input_cost_per_token_above_200k_tokens": 5e-06, "litellm_provider": "anthropic", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 2.5e-05, - "output_cost_per_token_above_200k_tokens": 3.75e-05, + "output_cost_per_token_above_200k_tokens": 2.5e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -14599,17 +14599,14 @@ "uses_embed_content": true }, "vertex_ai/gemini-embedding-2-preview": { - "input_cost_per_audio_per_second": 0.00016, - "input_cost_per_image": 0.00012, - "input_cost_per_token": 2e-07, - "input_cost_per_video_per_second": 0.00079, + "input_cost_per_token": 1.5e-07, "litellm_provider": "vertex_ai", "max_input_tokens": 8192, "max_tokens": 8192, "mode": "embedding", "output_cost_per_token": 0, "output_vector_size": 3072, - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "source": "https://ai.google.dev/gemini-api/docs/embeddings#multimodal", "supports_multimodal": true, "uses_embed_content": true }, @@ -14626,18 +14623,6 @@ "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", "uses_embed_content": true }, - "vertex_ai/gemini-embedding-2-preview": { - "input_cost_per_token": 1.5e-07, - "litellm_provider": "vertex_ai", - "max_input_tokens": 8192, - "max_tokens": 8192, - "mode": "embedding", - "output_cost_per_token": 0, - "output_vector_size": 3072, - "source": "https://ai.google.dev/gemini-api/docs/embeddings#multimodal", - "supports_multimodal": true, - "uses_embed_content": true - }, "gemini/gemini-embedding-001": { "input_cost_per_token": 1.5e-07, "litellm_provider": "gemini", @@ -30192,18 +30177,18 @@ }, "vertex_ai/claude-opus-4-6": { "cache_creation_input_token_cost": 6.25e-06, - "cache_creation_input_token_cost_above_200k_tokens": 1.25e-05, + "cache_creation_input_token_cost_above_200k_tokens": 6.25e-06, "cache_read_input_token_cost": 5e-07, - "cache_read_input_token_cost_above_200k_tokens": 1e-06, + "cache_read_input_token_cost_above_200k_tokens": 5e-07, "input_cost_per_token": 5e-06, - "input_cost_per_token_above_200k_tokens": 1e-05, + "input_cost_per_token_above_200k_tokens": 5e-06, "litellm_provider": "vertex_ai-anthropic_models", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 2.5e-05, - "output_cost_per_token_above_200k_tokens": 3.75e-05, + "output_cost_per_token_above_200k_tokens": 2.5e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -30222,18 +30207,18 @@ }, "vertex_ai/claude-opus-4-6@default": { "cache_creation_input_token_cost": 6.25e-06, - "cache_creation_input_token_cost_above_200k_tokens": 1.25e-05, + "cache_creation_input_token_cost_above_200k_tokens": 6.25e-06, "cache_read_input_token_cost": 5e-07, - "cache_read_input_token_cost_above_200k_tokens": 1e-06, + "cache_read_input_token_cost_above_200k_tokens": 5e-07, "input_cost_per_token": 5e-06, - "input_cost_per_token_above_200k_tokens": 1e-05, + "input_cost_per_token_above_200k_tokens": 5e-06, "litellm_provider": "vertex_ai-anthropic_models", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 2.5e-05, - "output_cost_per_token_above_200k_tokens": 3.75e-05, + "output_cost_per_token_above_200k_tokens": 2.5e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -30278,18 +30263,18 @@ }, "vertex_ai/claude-sonnet-4-6": { "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_200k_tokens": 7.5e-06, + "cache_creation_input_token_cost_above_200k_tokens": 3.75e-06, "cache_read_input_token_cost": 3e-07, - "cache_read_input_token_cost_above_200k_tokens": 6e-07, + "cache_read_input_token_cost_above_200k_tokens": 3e-07, "input_cost_per_token": 3e-06, - "input_cost_per_token_above_200k_tokens": 6e-06, + "input_cost_per_token_above_200k_tokens": 3e-06, "litellm_provider": "vertex_ai-anthropic_models", - "max_input_tokens": 200000, + "max_input_tokens": 1000000, "max_output_tokens": 64000, "max_tokens": 64000, "mode": "chat", "output_cost_per_token": 1.5e-05, - "output_cost_per_token_above_200k_tokens": 2.25e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, @@ -31013,7 +30998,9 @@ "mode": "chat", "output_cost_per_token": 3.2e-06, "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#glm-models", - "supported_regions": ["global"], + "supported_regions": [ + "global" + ], "supports_function_calling": true, "supports_prompt_caching": true, "supports_reasoning": true, @@ -37015,18 +37002,18 @@ }, "vertex_ai/claude-sonnet-4-6@default": { "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_200k_tokens": 7.5e-06, + "cache_creation_input_token_cost_above_200k_tokens": 3.75e-06, "cache_read_input_token_cost": 3e-07, - "cache_read_input_token_cost_above_200k_tokens": 6e-07, + "cache_read_input_token_cost_above_200k_tokens": 3e-07, "input_cost_per_token": 3e-06, - "input_cost_per_token_above_200k_tokens": 6e-06, + "input_cost_per_token_above_200k_tokens": 3e-06, "litellm_provider": "vertex_ai-anthropic_models", - "max_input_tokens": 200000, + "max_input_tokens": 1000000, "max_output_tokens": 64000, "max_tokens": 64000, "mode": "chat", "output_cost_per_token": 1.5e-05, - "output_cost_per_token_above_200k_tokens": 2.25e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 1f9544413a..b0984939f9 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -1760,7 +1760,7 @@ "input_cost_per_token": 5e-06, "output_cost_per_token": 2.5e-05, "litellm_provider": "azure_ai", - "max_input_tokens": 200000, + "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -1831,7 +1831,7 @@ "cache_read_input_token_cost": 3e-07, "input_cost_per_token": 3e-06, "litellm_provider": "azure_ai", - "max_input_tokens": 200000, + "max_input_tokens": 1000000, "max_output_tokens": 64000, "max_tokens": 64000, "mode": "chat", @@ -8498,18 +8498,18 @@ }, "claude-sonnet-4-6": { "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_200k_tokens": 7.5e-06, + "cache_creation_input_token_cost_above_200k_tokens": 3.75e-06, "cache_read_input_token_cost": 3e-07, - "cache_read_input_token_cost_above_200k_tokens": 6e-07, + "cache_read_input_token_cost_above_200k_tokens": 3e-07, "input_cost_per_token": 3e-06, - "input_cost_per_token_above_200k_tokens": 6e-06, + "input_cost_per_token_above_200k_tokens": 3e-06, "litellm_provider": "anthropic", - "max_input_tokens": 200000, + "max_input_tokens": 1000000, "max_output_tokens": 64000, "max_tokens": 64000, "mode": "chat", "output_cost_per_token": 1.5e-05, - "output_cost_per_token_above_200k_tokens": 2.25e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -8690,19 +8690,19 @@ }, "claude-opus-4-6": { "cache_creation_input_token_cost": 6.25e-06, - "cache_creation_input_token_cost_above_200k_tokens": 1.25e-05, + "cache_creation_input_token_cost_above_200k_tokens": 6.25e-06, "cache_creation_input_token_cost_above_1hr": 1e-05, "cache_read_input_token_cost": 5e-07, - "cache_read_input_token_cost_above_200k_tokens": 1e-06, + "cache_read_input_token_cost_above_200k_tokens": 5e-07, "input_cost_per_token": 5e-06, - "input_cost_per_token_above_200k_tokens": 1e-05, + "input_cost_per_token_above_200k_tokens": 5e-06, "litellm_provider": "anthropic", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 2.5e-05, - "output_cost_per_token_above_200k_tokens": 3.75e-05, + "output_cost_per_token_above_200k_tokens": 2.5e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -8725,19 +8725,19 @@ }, "claude-opus-4-6-20260205": { "cache_creation_input_token_cost": 6.25e-06, - "cache_creation_input_token_cost_above_200k_tokens": 1.25e-05, + "cache_creation_input_token_cost_above_200k_tokens": 6.25e-06, "cache_creation_input_token_cost_above_1hr": 1e-05, "cache_read_input_token_cost": 5e-07, - "cache_read_input_token_cost_above_200k_tokens": 1e-06, + "cache_read_input_token_cost_above_200k_tokens": 5e-07, "input_cost_per_token": 5e-06, - "input_cost_per_token_above_200k_tokens": 1e-05, + "input_cost_per_token_above_200k_tokens": 5e-06, "litellm_provider": "anthropic", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 2.5e-05, - "output_cost_per_token_above_200k_tokens": 3.75e-05, + "output_cost_per_token_above_200k_tokens": 2.5e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -14599,17 +14599,14 @@ "uses_embed_content": true }, "vertex_ai/gemini-embedding-2-preview": { - "input_cost_per_audio_per_second": 0.00016, - "input_cost_per_image": 0.00012, - "input_cost_per_token": 2e-07, - "input_cost_per_video_per_second": 0.00079, + "input_cost_per_token": 1.5e-07, "litellm_provider": "vertex_ai", "max_input_tokens": 8192, "max_tokens": 8192, "mode": "embedding", "output_cost_per_token": 0, "output_vector_size": 3072, - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "source": "https://ai.google.dev/gemini-api/docs/embeddings#multimodal", "supports_multimodal": true, "uses_embed_content": true }, @@ -14626,18 +14623,6 @@ "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", "uses_embed_content": true }, - "vertex_ai/gemini-embedding-2-preview": { - "input_cost_per_token": 1.5e-07, - "litellm_provider": "vertex_ai", - "max_input_tokens": 8192, - "max_tokens": 8192, - "mode": "embedding", - "output_cost_per_token": 0, - "output_vector_size": 3072, - "source": "https://ai.google.dev/gemini-api/docs/embeddings#multimodal", - "supports_multimodal": true, - "uses_embed_content": true - }, "gemini/gemini-embedding-001": { "input_cost_per_token": 1.5e-07, "litellm_provider": "gemini", @@ -30192,18 +30177,18 @@ }, "vertex_ai/claude-opus-4-6": { "cache_creation_input_token_cost": 6.25e-06, - "cache_creation_input_token_cost_above_200k_tokens": 1.25e-05, + "cache_creation_input_token_cost_above_200k_tokens": 6.25e-06, "cache_read_input_token_cost": 5e-07, - "cache_read_input_token_cost_above_200k_tokens": 1e-06, + "cache_read_input_token_cost_above_200k_tokens": 5e-07, "input_cost_per_token": 5e-06, - "input_cost_per_token_above_200k_tokens": 1e-05, + "input_cost_per_token_above_200k_tokens": 5e-06, "litellm_provider": "vertex_ai-anthropic_models", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 2.5e-05, - "output_cost_per_token_above_200k_tokens": 3.75e-05, + "output_cost_per_token_above_200k_tokens": 2.5e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -30222,18 +30207,18 @@ }, "vertex_ai/claude-opus-4-6@default": { "cache_creation_input_token_cost": 6.25e-06, - "cache_creation_input_token_cost_above_200k_tokens": 1.25e-05, + "cache_creation_input_token_cost_above_200k_tokens": 6.25e-06, "cache_read_input_token_cost": 5e-07, - "cache_read_input_token_cost_above_200k_tokens": 1e-06, + "cache_read_input_token_cost_above_200k_tokens": 5e-07, "input_cost_per_token": 5e-06, - "input_cost_per_token_above_200k_tokens": 1e-05, + "input_cost_per_token_above_200k_tokens": 5e-06, "litellm_provider": "vertex_ai-anthropic_models", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 2.5e-05, - "output_cost_per_token_above_200k_tokens": 3.75e-05, + "output_cost_per_token_above_200k_tokens": 2.5e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -30278,18 +30263,18 @@ }, "vertex_ai/claude-sonnet-4-6": { "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_200k_tokens": 7.5e-06, + "cache_creation_input_token_cost_above_200k_tokens": 3.75e-06, "cache_read_input_token_cost": 3e-07, - "cache_read_input_token_cost_above_200k_tokens": 6e-07, + "cache_read_input_token_cost_above_200k_tokens": 3e-07, "input_cost_per_token": 3e-06, - "input_cost_per_token_above_200k_tokens": 6e-06, + "input_cost_per_token_above_200k_tokens": 3e-06, "litellm_provider": "vertex_ai-anthropic_models", - "max_input_tokens": 200000, + "max_input_tokens": 1000000, "max_output_tokens": 64000, "max_tokens": 64000, "mode": "chat", "output_cost_per_token": 1.5e-05, - "output_cost_per_token_above_200k_tokens": 2.25e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, @@ -31013,7 +30998,9 @@ "mode": "chat", "output_cost_per_token": 3.2e-06, "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing#glm-models", - "supported_regions": ["global"], + "supported_regions": [ + "global" + ], "supports_function_calling": true, "supports_prompt_caching": true, "supports_reasoning": true, @@ -37015,18 +37002,18 @@ }, "vertex_ai/claude-sonnet-4-6@default": { "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_200k_tokens": 7.5e-06, + "cache_creation_input_token_cost_above_200k_tokens": 3.75e-06, "cache_read_input_token_cost": 3e-07, - "cache_read_input_token_cost_above_200k_tokens": 6e-07, + "cache_read_input_token_cost_above_200k_tokens": 3e-07, "input_cost_per_token": 3e-06, - "input_cost_per_token_above_200k_tokens": 6e-06, + "input_cost_per_token_above_200k_tokens": 3e-06, "litellm_provider": "vertex_ai-anthropic_models", - "max_input_tokens": 200000, + "max_input_tokens": 1000000, "max_output_tokens": 64000, "max_tokens": 64000, "mode": "chat", "output_cost_per_token": 1.5e-05, - "output_cost_per_token_above_200k_tokens": 2.25e-05, + "output_cost_per_token_above_200k_tokens": 1.5e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, diff --git a/tests/test_litellm/test_claude_opus_4_6_config.py b/tests/test_litellm/test_claude_opus_4_6_config.py index 243c3bed7f..67c47da8c9 100644 --- a/tests/test_litellm/test_claude_opus_4_6_config.py +++ b/tests/test_litellm/test_claude_opus_4_6_config.py @@ -72,29 +72,26 @@ def test_opus_4_6_model_pricing_and_capabilities(): "has_long_context_pricing": True, "tool_use_system_prompt_tokens": 346, "max_input_tokens": 1000000, - # Anthropic direct API charges 2x for >200k tokens - "input_cost_per_token_above_200k_tokens": 1e-05, - "output_cost_per_token_above_200k_tokens": 3.75e-05, - "cache_creation_input_token_cost_above_200k_tokens": 1.25e-05, - "cache_read_input_token_cost_above_200k_tokens": 1e-06, + "input_cost_per_token_above_200k_tokens": 5e-06, + "output_cost_per_token_above_200k_tokens": 2.5e-05, + "cache_creation_input_token_cost_above_200k_tokens": 6.25e-06, + "cache_read_input_token_cost_above_200k_tokens": 5e-07, }, "claude-opus-4-6-20260205": { "provider": "anthropic", "has_long_context_pricing": True, "tool_use_system_prompt_tokens": 346, "max_input_tokens": 1000000, - # Anthropic direct API charges 2x for >200k tokens - "input_cost_per_token_above_200k_tokens": 1e-05, - "output_cost_per_token_above_200k_tokens": 3.75e-05, - "cache_creation_input_token_cost_above_200k_tokens": 1.25e-05, - "cache_read_input_token_cost_above_200k_tokens": 1e-06, + "input_cost_per_token_above_200k_tokens": 5e-06, + "output_cost_per_token_above_200k_tokens": 2.5e-05, + "cache_creation_input_token_cost_above_200k_tokens": 6.25e-06, + "cache_read_input_token_cost_above_200k_tokens": 5e-07, }, "anthropic.claude-opus-4-6-v1": { "provider": "bedrock_converse", "has_long_context_pricing": True, "tool_use_system_prompt_tokens": 346, "max_input_tokens": 1000000, - # Bedrock does not surcharge for >200k tokens "input_cost_per_token_above_200k_tokens": 5e-06, "output_cost_per_token_above_200k_tokens": 2.5e-05, "cache_creation_input_token_cost_above_200k_tokens": 6.25e-06, @@ -105,17 +102,16 @@ def test_opus_4_6_model_pricing_and_capabilities(): "has_long_context_pricing": True, "tool_use_system_prompt_tokens": 346, "max_input_tokens": 1000000, - # Vertex AI charges 2x for >200k tokens - "input_cost_per_token_above_200k_tokens": 1e-05, - "output_cost_per_token_above_200k_tokens": 3.75e-05, - "cache_creation_input_token_cost_above_200k_tokens": 1.25e-05, - "cache_read_input_token_cost_above_200k_tokens": 1e-06, + "input_cost_per_token_above_200k_tokens": 5e-06, + "output_cost_per_token_above_200k_tokens": 2.5e-05, + "cache_creation_input_token_cost_above_200k_tokens": 6.25e-06, + "cache_read_input_token_cost_above_200k_tokens": 5e-07, }, "azure_ai/claude-opus-4-6": { "provider": "azure_ai", "has_long_context_pricing": False, "tool_use_system_prompt_tokens": 159, - "max_input_tokens": 200000, + "max_input_tokens": 1000000, }, } diff --git a/tests/test_litellm/test_claude_sonnet_4_6_config.py b/tests/test_litellm/test_claude_sonnet_4_6_config.py index b116d6d696..3f5ccad140 100644 --- a/tests/test_litellm/test_claude_sonnet_4_6_config.py +++ b/tests/test_litellm/test_claude_sonnet_4_6_config.py @@ -8,6 +8,72 @@ import os import litellm +def test_sonnet_4_6_model_pricing_and_capabilities(): + json_path = os.path.join(os.path.dirname(__file__), "../../model_prices_and_context_window.json") + with open(json_path) as f: + model_data = json.load(f) + + expected_models = { + "claude-sonnet-4-6": { + "provider": "anthropic", + "has_long_context_pricing": True, + "tool_use_system_prompt_tokens": 346, + "max_input_tokens": 1000000, + "input_cost_per_token_above_200k_tokens": 3e-06, + "output_cost_per_token_above_200k_tokens": 1.5e-05, + "cache_creation_input_token_cost_above_200k_tokens": 3.75e-06, + "cache_read_input_token_cost_above_200k_tokens": 3e-07, + }, + "vertex_ai/claude-sonnet-4-6": { + "provider": "vertex_ai-anthropic_models", + "has_long_context_pricing": True, + "tool_use_system_prompt_tokens": 346, + "max_input_tokens": 1000000, + "input_cost_per_token_above_200k_tokens": 3e-06, + "output_cost_per_token_above_200k_tokens": 1.5e-05, + "cache_creation_input_token_cost_above_200k_tokens": 3.75e-06, + "cache_read_input_token_cost_above_200k_tokens": 3e-07, + }, + "azure_ai/claude-sonnet-4-6": { + "provider": "azure_ai", + "has_long_context_pricing": False, + "tool_use_system_prompt_tokens": None, + "max_input_tokens": 1000000, + }, + } + + for model_name, config in expected_models.items(): + assert model_name in model_data, f"Missing model entry: {model_name}" + info = model_data[model_name] + + assert info["litellm_provider"] == config["provider"] + assert info["mode"] == "chat" + assert info["max_input_tokens"] == config["max_input_tokens"] + assert info["max_output_tokens"] == 64000 + assert info["max_tokens"] == 64000 + + assert info["input_cost_per_token"] == 3e-06 + assert info["output_cost_per_token"] == 1.5e-05 + assert info["cache_creation_input_token_cost"] == 3.75e-06 + assert info["cache_read_input_token_cost"] == 3e-07 + + if config["has_long_context_pricing"]: + assert info["input_cost_per_token_above_200k_tokens"] == config["input_cost_per_token_above_200k_tokens"] + assert info["output_cost_per_token_above_200k_tokens"] == config["output_cost_per_token_above_200k_tokens"] + assert info["cache_creation_input_token_cost_above_200k_tokens"] == config["cache_creation_input_token_cost_above_200k_tokens"] + assert info["cache_read_input_token_cost_above_200k_tokens"] == config["cache_read_input_token_cost_above_200k_tokens"] + + assert info["supports_assistant_prefill"] is True + assert info["supports_function_calling"] is True + assert info["supports_prompt_caching"] is True + assert info["supports_reasoning"] is True + assert info["supports_tool_choice"] is True + assert info["supports_vision"] is True + + if config["tool_use_system_prompt_tokens"] is not None: + assert info["tool_use_system_prompt_tokens"] == config["tool_use_system_prompt_tokens"] + + def test_sonnet_4_6_bedrock_regional_model_pricing(): """ Validate that Bedrock Claude Sonnet 4.6 regional models have correct pricing.