From c319616c1f8bae5df86193dc01df5a4611dd6b20 Mon Sep 17 00:00:00 2001 From: "devin-ai-integration[bot]" <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 10 Nov 2026 11:56:15 -0800 Subject: [PATCH] Registry audit 2026-11-10, Together, Mistral, Fireworks, Azure AI and Copilot fixes (#51003) Lowers Together Tev1 4B input price to the pricing page value, adds Mistral Leanstral vision and reasoning flags, and absorbs #50991, #50988 and #50958. Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Kerry Lu <326648561+kerry-berri@users.noreply.github.com> Co-authored-by: zoveki <349028329+zoveki@users.noreply.github.com> --- ...odel_prices_and_context_window_backup.json | 195 +++++++++++++++++- model_prices_and_context_window.json | 195 +++++++++++++++++- .../test_fireworks_ai_chat_transformation.py | 16 ++ .../fireworks_ai/latest_router_aliases.py | 13 ++ ...t_fireworks_ai_responses_transformation.py | 22 ++ .../test_model_prices_and_context_window.py | 23 +++ 6 files changed, 452 insertions(+), 12 deletions(-) create mode 100644 tests/unit/llms/fireworks_ai/latest_router_aliases.py diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index b37a5197483..edcea48e4df 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -3921,6 +3921,11 @@ "max_input_tokens": 200000, "max_output_tokens": 64000, "mode": "chat", + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, "output_cost_per_token": 2.5e-05, "supports_assistant_prefill": true, "supports_computer_use": true, @@ -3932,6 +3937,7 @@ "supports_tool_choice": true, "supports_vision": true, "supports_output_config": true, + "supports_web_search": true, "prompt_cache_min_tokens": 4096, "source": "https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/model-retirement-schedule" }, @@ -4074,7 +4080,7 @@ "deprecation_source": "https://learn.microsoft.com/en-us/azure/foundry/concepts/model-lifecycle-retirement" }, "azure_ai/claude-fable-latest": { - "alias_of": "azure_ai/claude-fable-5-1" + "alias_of": "azure_ai/claude-fable-5-2" }, "azure_ai/claude-mythos-5-1": { "input_cost_per_token": 1e-05, @@ -4088,6 +4094,11 @@ "max_input_tokens": 1000000, "max_output_tokens": 128000, "mode": "chat", + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, "supports_adaptive_thinking": true, "thinking_always_on": true, "supports_mid_conversation_system": true, @@ -4105,6 +4116,7 @@ "supports_vision": true, "supports_xhigh_reasoning_effort": true, "supports_max_reasoning_effort": false, + "supports_web_search": true, "prompt_cache_min_tokens": 512, "source": "https://learn.microsoft.com/en-us/azure/foundry/concepts/model-lifecycle-retirement" }, @@ -4229,6 +4241,11 @@ "max_input_tokens": 200000, "max_output_tokens": 64000, "mode": "chat", + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, "output_cost_per_token": 1.5e-05, "supports_assistant_prefill": true, "supports_computer_use": true, @@ -4239,6 +4256,7 @@ "supports_response_schema": true, "supports_tool_choice": true, "supports_vision": true, + "supports_web_search": true, "prompt_cache_min_tokens": 1024, "source": "https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/model-retirement-schedule" }, @@ -4290,6 +4308,11 @@ "max_input_tokens": 1000000, "max_output_tokens": 128000, "mode": "chat", + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, "output_cost_per_token": 1.5e-05, "supports_assistant_prefill": false, "supports_computer_use": true, @@ -4302,6 +4325,7 @@ "supports_tool_choice": true, "supports_vision": true, "supports_output_config": true, + "supports_web_search": true, "prompt_cache_min_tokens": 1024, "source": "https://learn.microsoft.com/en-us/azure/foundry/foundry-models/concepts/claude-models" }, @@ -28947,6 +28971,24 @@ "supports_tool_choice": true, "supports_vision": true }, + "fireworks_ai/accounts/fireworks/routers/minimax-latest": { + "cache_read_input_token_cost": 6e-08, + "cache_read_input_token_cost_priority": 9e-08, + "input_cost_per_token": 3e-07, + "input_cost_per_token_priority": 4.5e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 512000, + "max_output_tokens": 512000, + "mode": "chat", + "output_cost_per_token": 1.2e-06, + "output_cost_per_token_priority": 1.8e-06, + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "fireworks_ai/minimax-latest": { "alias_of": "fireworks_ai/accounts/fireworks/models/minimax-m3" }, @@ -33848,7 +33890,7 @@ "thinking_always_on": true }, "github_copilot/claude-fable-latest": { - "alias_of": "github_copilot/claude-fable-5.1" + "alias_of": "github_copilot/claude-fable-5.2" }, "github_copilot/claude-haiku-4.5": { "cache_creation_input_token_cost": 1.25e-06, @@ -65253,7 +65295,9 @@ "source": "https://docs.mistral.ai/models/model-cards/leanstral-1-5", "supports_function_calling": true, "supports_response_schema": true, - "supports_tool_choice": true + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true }, "mistral/mistral-moderation-2603": { "input_cost_per_token": 0.0, @@ -65775,6 +65819,30 @@ "supports_tool_choice": true, "supports_vision": true }, + "fireworks_ai/accounts/fireworks/routers/kimi-latest": { + "cache_read_input_token_cost": 3e-07, + "cache_read_input_token_cost_priority": 3.75e-07, + "input_cost_per_token": 3e-06, + "input_cost_per_token_priority": 3.75e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 1048576, + "max_output_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "output_cost_per_token_priority": 1.875e-05, + "reasoning_effort_levels": [ + "low", + "high", + "max" + ], + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "fireworks_ai/kimi-latest": { "alias_of": "fireworks_ai/accounts/fireworks/models/kimi-k3" }, @@ -66074,6 +66142,7 @@ "supports_function_calling": true, "supports_mid_conversation_system": true, "supports_reasoning": true, + "supports_tool_choice": true, "supports_vision": true }, "fireworks_ai/accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b": { @@ -66137,6 +66206,24 @@ "supports_tool_choice": true, "supports_vision": true }, + "fireworks_ai/accounts/fireworks/routers/qwen-max-latest": { + "cache_read_input_token_cost": 2.5e-07, + "cache_read_input_token_cost_priority": 3.75e-07, + "input_cost_per_token": 2e-06, + "input_cost_per_token_priority": 3e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 262144, + "mode": "chat", + "output_cost_per_token": 6e-06, + "output_cost_per_token_priority": 9e-06, + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": false, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "fireworks_ai/accounts/fireworks/routers/glm-5p2-fast": { "cache_read_input_token_cost": 2.1e-07, "deprecation_date": "2026-09-25", @@ -66194,6 +66281,27 @@ "supports_tool_choice": true, "supports_vision": true }, + "fireworks_ai/accounts/fireworks/routers/kimi-fast-latest": { + "cache_read_input_token_cost": 4.5e-07, + "input_cost_per_token": 4.5e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 1048576, + "max_output_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.25e-05, + "reasoning_effort_levels": [ + "low", + "high", + "max" + ], + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "fireworks_ai/accounts/fireworks/routers/kimi-k3-us": { "cache_read_input_token_cost": 4.5e-07, "cache_read_input_token_cost_priority": 5.625e-07, @@ -69008,7 +69116,9 @@ "source": "https://docs.mistral.ai/models/model-cards/leanstral-1-5", "supports_function_calling": true, "supports_response_schema": true, - "supports_tool_choice": true + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true }, "fireworks_ai/accounts/fireworks/models/glm-5p3": { "cache_read_input_token_cost": 2.6e-07, @@ -69029,6 +69139,25 @@ "supports_tool_choice": true, "supports_vision": false }, + "fireworks_ai/accounts/fireworks/routers/glm-latest": { + "cache_read_input_token_cost": 2.6e-07, + "cache_read_input_token_cost_priority": 3.25e-07, + "input_cost_per_token": 1.4e-06, + "input_cost_per_token_priority": 1.75e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 1048576, + "max_output_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "output_cost_per_token_priority": 5.5e-06, + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": false + }, "fireworks_ai/accounts/fireworks/routers/glm-5p3-us": { "cache_read_input_token_cost": 3.9e-07, "cache_read_input_token_cost_priority": 4.875e-07, @@ -69102,6 +69231,22 @@ "supports_tool_choice": true, "supports_vision": false }, + "fireworks_ai/accounts/fireworks/routers/glm-fast-latest": { + "cache_read_input_token_cost": 3.9e-07, + "input_cost_per_token": 2.1e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 1048576, + "max_output_tokens": 1048576, + "mode": "chat", + "output_cost_per_token": 6.6e-06, + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": false + }, "fireworks_ai/accounts/fireworks/routers/auto": { "litellm_provider": "fireworks_ai", "mode": "chat", @@ -69163,6 +69308,24 @@ "supports_tool_choice": true, "supports_vision": true }, + "fireworks_ai/accounts/fireworks/routers/glm-flash-latest": { + "cache_read_input_token_cost": 3e-08, + "cache_read_input_token_cost_priority": 3.75e-08, + "input_cost_per_token": 1.5e-07, + "input_cost_per_token_priority": 1.875e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 1048576, + "max_output_tokens": 1048576, + "mode": "chat", + "output_cost_per_token": 5e-07, + "output_cost_per_token_priority": 6.25e-07, + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "fireworks_ai/accounts/fireworks/routers/glm-5p3-flash-us": { "cache_read_input_token_cost": 4.5e-08, "cache_read_input_token_cost_priority": 5.625e-08, @@ -71992,12 +72155,12 @@ "source": "https://api.together.xyz/v1/models" }, "together_ai/together/Tev1-4B-experimental": { - "input_cost_per_token": 4.2e-08, + "input_cost_per_token": 4e-08, "litellm_provider": "together_ai", "max_input_tokens": 32768, "mode": "chat", "output_cost_per_token": 0.0, - "source": "https://api.together.ai/v1/models" + "source": "https://www.together.ai/pricing" }, "together_ai/Qwen/Qwen2.5-72B-Instruct-Turbo": { "deprecation_date": "2026-02-06", @@ -79437,6 +79600,26 @@ "supports_tool_choice": true, "supports_vision": true }, + "fireworks_ai/accounts/fireworks/routers/deepseek-flash-latest": { + "cache_read_input_token_cost": 6e-09, + "cache_read_input_token_cost_priority": 7.5e-09, + "input_cost_per_token": 3e-07, + "input_cost_per_token_priority": 3.75e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 1048576, + "max_output_tokens": 393216, + "mode": "chat", + "output_cost_per_token": 1.2e-06, + "output_cost_per_token_priority": 1.5e-06, + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "github_copilot/claude-sonnet-4.6": { "cache_creation_input_token_cost": 3.75e-06, "cache_read_input_token_cost": 3e-07, diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index b37a5197483..edcea48e4df 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -3921,6 +3921,11 @@ "max_input_tokens": 200000, "max_output_tokens": 64000, "mode": "chat", + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, "output_cost_per_token": 2.5e-05, "supports_assistant_prefill": true, "supports_computer_use": true, @@ -3932,6 +3937,7 @@ "supports_tool_choice": true, "supports_vision": true, "supports_output_config": true, + "supports_web_search": true, "prompt_cache_min_tokens": 4096, "source": "https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/model-retirement-schedule" }, @@ -4074,7 +4080,7 @@ "deprecation_source": "https://learn.microsoft.com/en-us/azure/foundry/concepts/model-lifecycle-retirement" }, "azure_ai/claude-fable-latest": { - "alias_of": "azure_ai/claude-fable-5-1" + "alias_of": "azure_ai/claude-fable-5-2" }, "azure_ai/claude-mythos-5-1": { "input_cost_per_token": 1e-05, @@ -4088,6 +4094,11 @@ "max_input_tokens": 1000000, "max_output_tokens": 128000, "mode": "chat", + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, "supports_adaptive_thinking": true, "thinking_always_on": true, "supports_mid_conversation_system": true, @@ -4105,6 +4116,7 @@ "supports_vision": true, "supports_xhigh_reasoning_effort": true, "supports_max_reasoning_effort": false, + "supports_web_search": true, "prompt_cache_min_tokens": 512, "source": "https://learn.microsoft.com/en-us/azure/foundry/concepts/model-lifecycle-retirement" }, @@ -4229,6 +4241,11 @@ "max_input_tokens": 200000, "max_output_tokens": 64000, "mode": "chat", + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, "output_cost_per_token": 1.5e-05, "supports_assistant_prefill": true, "supports_computer_use": true, @@ -4239,6 +4256,7 @@ "supports_response_schema": true, "supports_tool_choice": true, "supports_vision": true, + "supports_web_search": true, "prompt_cache_min_tokens": 1024, "source": "https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/model-retirement-schedule" }, @@ -4290,6 +4308,11 @@ "max_input_tokens": 1000000, "max_output_tokens": 128000, "mode": "chat", + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, "output_cost_per_token": 1.5e-05, "supports_assistant_prefill": false, "supports_computer_use": true, @@ -4302,6 +4325,7 @@ "supports_tool_choice": true, "supports_vision": true, "supports_output_config": true, + "supports_web_search": true, "prompt_cache_min_tokens": 1024, "source": "https://learn.microsoft.com/en-us/azure/foundry/foundry-models/concepts/claude-models" }, @@ -28947,6 +28971,24 @@ "supports_tool_choice": true, "supports_vision": true }, + "fireworks_ai/accounts/fireworks/routers/minimax-latest": { + "cache_read_input_token_cost": 6e-08, + "cache_read_input_token_cost_priority": 9e-08, + "input_cost_per_token": 3e-07, + "input_cost_per_token_priority": 4.5e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 512000, + "max_output_tokens": 512000, + "mode": "chat", + "output_cost_per_token": 1.2e-06, + "output_cost_per_token_priority": 1.8e-06, + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "fireworks_ai/minimax-latest": { "alias_of": "fireworks_ai/accounts/fireworks/models/minimax-m3" }, @@ -33848,7 +33890,7 @@ "thinking_always_on": true }, "github_copilot/claude-fable-latest": { - "alias_of": "github_copilot/claude-fable-5.1" + "alias_of": "github_copilot/claude-fable-5.2" }, "github_copilot/claude-haiku-4.5": { "cache_creation_input_token_cost": 1.25e-06, @@ -65253,7 +65295,9 @@ "source": "https://docs.mistral.ai/models/model-cards/leanstral-1-5", "supports_function_calling": true, "supports_response_schema": true, - "supports_tool_choice": true + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true }, "mistral/mistral-moderation-2603": { "input_cost_per_token": 0.0, @@ -65775,6 +65819,30 @@ "supports_tool_choice": true, "supports_vision": true }, + "fireworks_ai/accounts/fireworks/routers/kimi-latest": { + "cache_read_input_token_cost": 3e-07, + "cache_read_input_token_cost_priority": 3.75e-07, + "input_cost_per_token": 3e-06, + "input_cost_per_token_priority": 3.75e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 1048576, + "max_output_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "output_cost_per_token_priority": 1.875e-05, + "reasoning_effort_levels": [ + "low", + "high", + "max" + ], + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "fireworks_ai/kimi-latest": { "alias_of": "fireworks_ai/accounts/fireworks/models/kimi-k3" }, @@ -66074,6 +66142,7 @@ "supports_function_calling": true, "supports_mid_conversation_system": true, "supports_reasoning": true, + "supports_tool_choice": true, "supports_vision": true }, "fireworks_ai/accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b": { @@ -66137,6 +66206,24 @@ "supports_tool_choice": true, "supports_vision": true }, + "fireworks_ai/accounts/fireworks/routers/qwen-max-latest": { + "cache_read_input_token_cost": 2.5e-07, + "cache_read_input_token_cost_priority": 3.75e-07, + "input_cost_per_token": 2e-06, + "input_cost_per_token_priority": 3e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 262144, + "mode": "chat", + "output_cost_per_token": 6e-06, + "output_cost_per_token_priority": 9e-06, + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": false, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "fireworks_ai/accounts/fireworks/routers/glm-5p2-fast": { "cache_read_input_token_cost": 2.1e-07, "deprecation_date": "2026-09-25", @@ -66194,6 +66281,27 @@ "supports_tool_choice": true, "supports_vision": true }, + "fireworks_ai/accounts/fireworks/routers/kimi-fast-latest": { + "cache_read_input_token_cost": 4.5e-07, + "input_cost_per_token": 4.5e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 1048576, + "max_output_tokens": 131072, + "mode": "chat", + "output_cost_per_token": 2.25e-05, + "reasoning_effort_levels": [ + "low", + "high", + "max" + ], + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "fireworks_ai/accounts/fireworks/routers/kimi-k3-us": { "cache_read_input_token_cost": 4.5e-07, "cache_read_input_token_cost_priority": 5.625e-07, @@ -69008,7 +69116,9 @@ "source": "https://docs.mistral.ai/models/model-cards/leanstral-1-5", "supports_function_calling": true, "supports_response_schema": true, - "supports_tool_choice": true + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true }, "fireworks_ai/accounts/fireworks/models/glm-5p3": { "cache_read_input_token_cost": 2.6e-07, @@ -69029,6 +69139,25 @@ "supports_tool_choice": true, "supports_vision": false }, + "fireworks_ai/accounts/fireworks/routers/glm-latest": { + "cache_read_input_token_cost": 2.6e-07, + "cache_read_input_token_cost_priority": 3.25e-07, + "input_cost_per_token": 1.4e-06, + "input_cost_per_token_priority": 1.75e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 1048576, + "max_output_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "output_cost_per_token_priority": 5.5e-06, + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": false + }, "fireworks_ai/accounts/fireworks/routers/glm-5p3-us": { "cache_read_input_token_cost": 3.9e-07, "cache_read_input_token_cost_priority": 4.875e-07, @@ -69102,6 +69231,22 @@ "supports_tool_choice": true, "supports_vision": false }, + "fireworks_ai/accounts/fireworks/routers/glm-fast-latest": { + "cache_read_input_token_cost": 3.9e-07, + "input_cost_per_token": 2.1e-06, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 1048576, + "max_output_tokens": 1048576, + "mode": "chat", + "output_cost_per_token": 6.6e-06, + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": false + }, "fireworks_ai/accounts/fireworks/routers/auto": { "litellm_provider": "fireworks_ai", "mode": "chat", @@ -69163,6 +69308,24 @@ "supports_tool_choice": true, "supports_vision": true }, + "fireworks_ai/accounts/fireworks/routers/glm-flash-latest": { + "cache_read_input_token_cost": 3e-08, + "cache_read_input_token_cost_priority": 3.75e-08, + "input_cost_per_token": 1.5e-07, + "input_cost_per_token_priority": 1.875e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 1048576, + "max_output_tokens": 1048576, + "mode": "chat", + "output_cost_per_token": 5e-07, + "output_cost_per_token_priority": 6.25e-07, + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "fireworks_ai/accounts/fireworks/routers/glm-5p3-flash-us": { "cache_read_input_token_cost": 4.5e-08, "cache_read_input_token_cost_priority": 5.625e-08, @@ -71992,12 +72155,12 @@ "source": "https://api.together.xyz/v1/models" }, "together_ai/together/Tev1-4B-experimental": { - "input_cost_per_token": 4.2e-08, + "input_cost_per_token": 4e-08, "litellm_provider": "together_ai", "max_input_tokens": 32768, "mode": "chat", "output_cost_per_token": 0.0, - "source": "https://api.together.ai/v1/models" + "source": "https://www.together.ai/pricing" }, "together_ai/Qwen/Qwen2.5-72B-Instruct-Turbo": { "deprecation_date": "2026-02-06", @@ -79437,6 +79600,26 @@ "supports_tool_choice": true, "supports_vision": true }, + "fireworks_ai/accounts/fireworks/routers/deepseek-flash-latest": { + "cache_read_input_token_cost": 6e-09, + "cache_read_input_token_cost_priority": 7.5e-09, + "input_cost_per_token": 3e-07, + "input_cost_per_token_priority": 3.75e-07, + "litellm_provider": "fireworks_ai", + "max_input_tokens": 1048576, + "max_output_tokens": 393216, + "mode": "chat", + "output_cost_per_token": 1.2e-06, + "output_cost_per_token_priority": 1.5e-06, + "source": "https://api.fireworks.ai/v1/serverless/models?format=nested", + "supports_function_calling": true, + "supports_mid_conversation_system": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "github_copilot/claude-sonnet-4.6": { "cache_creation_input_token_cost": 3.75e-06, "cache_read_input_token_cost": 3e-07, diff --git a/tests/unit/llms/fireworks_ai/chat/test_fireworks_ai_chat_transformation.py b/tests/unit/llms/fireworks_ai/chat/test_fireworks_ai_chat_transformation.py index dd352aac66d..0968dedd427 100644 --- a/tests/unit/llms/fireworks_ai/chat/test_fireworks_ai_chat_transformation.py +++ b/tests/unit/llms/fireworks_ai/chat/test_fireworks_ai_chat_transformation.py @@ -23,6 +23,7 @@ from litellm.types.utils import ( Message, ModelResponse, ) +from tests.unit.llms.fireworks_ai.latest_router_aliases import LATEST_ROUTER_ALIAS_TARGETS def test_validate_environment_sets_session_affinity_from_litellm_session_id(): @@ -368,6 +369,21 @@ def test_get_supported_openai_params_parallel_tool_calls_without_tool_choice( assert "tool_choice" not in supported_params +@pytest.mark.parametrize(("alias", "target"), LATEST_ROUTER_ALIAS_TARGETS) +def test_latest_router_alias_accepts_the_same_params_as_the_model_it_points_to(alias: str, target: str) -> None: + config: Final = FireworksAIConfig() + alias_params: Final = set(config.get_supported_openai_params(alias)) + target_params: Final = set(config.get_supported_openai_params(target)) + excluded_params: Final = ( + {"reasoning_effort", "reasoning_history", "thinking"} + if alias == "accounts/fireworks/routers/glm-flash-latest" + else set() + ) + + assert alias_params - excluded_params == target_params - excluded_params + assert "tool_choice" in alias_params + + def test_get_provider_info_omits_false_supports_reasoning(monkeypatch): """Test that Fireworks only overrides supports_reasoning for supported models.""" config = FireworksAIConfig() diff --git a/tests/unit/llms/fireworks_ai/latest_router_aliases.py b/tests/unit/llms/fireworks_ai/latest_router_aliases.py new file mode 100644 index 00000000000..6c305034b93 --- /dev/null +++ b/tests/unit/llms/fireworks_ai/latest_router_aliases.py @@ -0,0 +1,13 @@ +from typing import Final + +# https://api.fireworks.ai/v1/serverless/models?format=nested, read 2026-10-29 +LATEST_ROUTER_ALIAS_TARGETS: Final = ( + ("accounts/fireworks/routers/minimax-latest", "accounts/fireworks/models/minimax-m3"), + ("accounts/fireworks/routers/kimi-latest", "accounts/fireworks/models/kimi-k3"), + ("accounts/fireworks/routers/kimi-fast-latest", "accounts/fireworks/routers/kimi-k3-fast"), + ("accounts/fireworks/routers/qwen-max-latest", "accounts/fireworks/models/qwen3p8-max"), + ("accounts/fireworks/routers/glm-latest", "accounts/fireworks/models/glm-5p3"), + ("accounts/fireworks/routers/glm-fast-latest", "accounts/fireworks/routers/glm-5p3-fast"), + ("accounts/fireworks/routers/glm-flash-latest", "accounts/fireworks/models/glm-5p3-flash"), + ("accounts/fireworks/routers/deepseek-flash-latest", "accounts/fireworks/models/deepseek-v4p1-flash-1017"), +) diff --git a/tests/unit/llms/fireworks_ai/responses/test_fireworks_ai_responses_transformation.py b/tests/unit/llms/fireworks_ai/responses/test_fireworks_ai_responses_transformation.py index fe33a26dfd7..9a9c6ed3c82 100644 --- a/tests/unit/llms/fireworks_ai/responses/test_fireworks_ai_responses_transformation.py +++ b/tests/unit/llms/fireworks_ai/responses/test_fireworks_ai_responses_transformation.py @@ -26,6 +26,7 @@ from litellm.types.llms.openai import InputTokensDetails, ResponseAPIUsage, Resp from litellm.types.router import GenericLiteLLMParams from litellm.types.utils import LlmProviders from litellm.utils import ProviderConfigManager +from tests.unit.llms.fireworks_ai.latest_router_aliases import LATEST_ROUTER_ALIAS_TARGETS FIREWORKS_RESPONSES_URL: Final = "https://api.fireworks.ai/inference/v1/responses" HTTPX_CLIENT_FACTORY: Final = "litellm.llms.custom_httpx.llm_http_handler.get_httpx_client" @@ -249,6 +250,27 @@ def test_responses_call_keeps_developer_items_in_place_for_a_model_the_cost_map_ ) +@respx.mock +@pytest.mark.parametrize(("alias", "target"), LATEST_ROUTER_ALIAS_TARGETS) +def test_latest_router_alias_places_developer_items_like_the_model_it_points_to(alias: str, target: str) -> None: + route: Final = _fireworks_responses_route(alias) + for model in (alias, target): + litellm.responses( + model=f"fireworks_ai/{model}", + input=[ + {"role": "user", "content": "Hi there"}, + {"role": "developer", "content": "Answer with exactly one word."}, + {"role": "user", "content": "What is the capital of France?"}, + {"type": "message", "role": "assistant", "content": "Paris"}, + {"role": "developer", "content": "Reply with PONG."}, + ], + api_key="fw-test-key", + ) + alias_body, target_body = (json.loads(call.request.content) for call in route.calls) + assert alias_body["model"] == alias + assert {**alias_body, "model": target} == target_body + + @respx.mock def test_responses_call_folds_developer_items_when_the_loaded_cost_map_turns_the_flag_off( declare_mid_conversation_system: Callable[[str, bool], None], diff --git a/tests/unit/test_model_prices_and_context_window.py b/tests/unit/test_model_prices_and_context_window.py index b270d385693..165f92e0e59 100644 --- a/tests/unit/test_model_prices_and_context_window.py +++ b/tests/unit/test_model_prices_and_context_window.py @@ -1050,6 +1050,29 @@ def test_bedrock_gpt_oss_vision_is_explicitly_disabled_for_the_router_gate() -> assert litellm.utils.is_vision_explicitly_disabled("bedrock_mantle/openai.gpt-oss-20b") is True +@pytest.mark.parametrize("path", (PRICES_PATH, BACKUP_PRICES_PATH), ids=("main", "backup")) +def test_azure_ai_claude_rows_bill_web_search_like_their_anthropic_rows(path: Path) -> None: + prices: Final[dict[str, JsonValue]] = TypeAdapter(dict[str, JsonValue]).validate_json(path.read_bytes()) + pairs: Final = { + key: (row, prices[key.removeprefix("azure_ai/")]) + for key, row in prices.items() + if key.startswith("azure_ai/claude") and isinstance(row, dict) and key.removeprefix("azure_ai/") in prices + } + priced_pairs: Final = { + key: (row, bare) + for key, (row, bare) in pairs.items() + if isinstance(bare, dict) and bare.get("search_context_cost_per_query") + } + assert priced_pairs + drifted: Final = tuple( + key + for key, (row, bare) in priced_pairs.items() + if row.get("search_context_cost_per_query") != bare["search_context_cost_per_query"] + or row.get("supports_web_search") is not True + ) + assert drifted == (), drifted + + @pytest.mark.parametrize("path", (PRICES_PATH, BACKUP_PRICES_PATH), ids=("main", "backup")) def test_azure_ai_claude_rows_priced_for_web_search_say_they_support_it(path: Path) -> None: prices: Final[dict[str, JsonValue]] = TypeAdapter(dict[str, JsonValue]).validate_json(path.read_bytes())