diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index a6f59abc140..27841672172 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -4509,6 +4509,37 @@ "supports_tool_choice": true, "supports_vision": false }, + "azure/gpt-audio-mini": { + "input_cost_per_audio_token": 1e-05, + "input_cost_per_token": 6e-07, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_audio_token": 2e-05, + "output_cost_per_token": 2.4e-06, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text", + "audio" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": false, + "supports_reasoning": false, + "supports_response_schema": false, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": false + }, "azure/gpt-audio-mini-2025-10-06": { "input_cost_per_audio_token": 1e-05, "input_cost_per_token": 6e-07, @@ -4717,6 +4748,38 @@ "supports_system_messages": true, "supports_tool_choice": true }, + "azure/gpt-realtime-mini": { + "cache_creation_input_audio_token_cost": 3e-07, + "cache_read_input_token_cost": 6e-08, + "input_cost_per_audio_token": 1e-05, + "input_cost_per_image": 8e-07, + "input_cost_per_token": 6e-07, + "litellm_provider": "azure", + "max_input_tokens": 32000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_audio_token": 2e-05, + "output_cost_per_token": 2.4e-06, + "supported_endpoints": [ + "/v1/realtime" + ], + "supported_modalities": [ + "text", + "image", + "audio" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, "azure/gpt-realtime-mini-2025-10-06": { "cache_creation_input_audio_token_cost": 3e-07, "cache_read_input_token_cost": 6e-08, diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 08a452be844..4b2ee62819c 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -4509,6 +4509,37 @@ "supports_tool_choice": true, "supports_vision": false }, + "azure/gpt-audio-mini": { + "input_cost_per_audio_token": 1e-05, + "input_cost_per_token": 6e-07, + "litellm_provider": "azure", + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "output_cost_per_audio_token": 2e-05, + "output_cost_per_token": 2.4e-06, + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supported_modalities": [ + "text", + "audio" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_parallel_function_calling": true, + "supports_prompt_caching": false, + "supports_reasoning": false, + "supports_response_schema": false, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_vision": false + }, "azure/gpt-audio-mini-2025-10-06": { "input_cost_per_audio_token": 1e-05, "input_cost_per_token": 6e-07, @@ -4717,6 +4748,38 @@ "supports_system_messages": true, "supports_tool_choice": true }, + "azure/gpt-realtime-mini": { + "cache_creation_input_audio_token_cost": 3e-07, + "cache_read_input_token_cost": 6e-08, + "input_cost_per_audio_token": 1e-05, + "input_cost_per_image": 8e-07, + "input_cost_per_token": 6e-07, + "litellm_provider": "azure", + "max_input_tokens": 32000, + "max_output_tokens": 4096, + "max_tokens": 4096, + "mode": "chat", + "output_cost_per_audio_token": 2e-05, + "output_cost_per_token": 2.4e-06, + "supported_endpoints": [ + "/v1/realtime" + ], + "supported_modalities": [ + "text", + "image", + "audio" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_system_messages": true, + "supports_tool_choice": true + }, "azure/gpt-realtime-mini-2025-10-06": { "cache_creation_input_audio_token_cost": 3e-07, "cache_read_input_token_cost": 6e-08, diff --git a/tests/test_litellm/test_cost_calculator.py b/tests/test_litellm/test_cost_calculator.py index 9636db4f4cd..3c6fa23df42 100644 --- a/tests/test_litellm/test_cost_calculator.py +++ b/tests/test_litellm/test_cost_calculator.py @@ -754,6 +754,45 @@ def test_realtime_transcription_duration_cost_resolves_model_from_litellm_name( assert abs(cost - 120.0 * (0.017 / 60)) < 1e-9 +@pytest.mark.parametrize( + "undated, dated", + [ + ("azure/gpt-audio-mini", "azure/gpt-audio-mini-2025-10-06"), + ("azure/gpt-realtime-mini", "azure/gpt-realtime-mini-2025-10-06"), + ], +) +def test_undated_azure_audio_aliases_mirror_dated_pricing(monkeypatch, undated, dated): + """ + Azure deployments are commonly created against the undated model name, so + base_model=azure/gpt-audio-mini must resolve. Missing undated aliases billed + text tokens at $0 (issue #33170). Verify the undated alias exists and its + token pricing matches the dated variant. + """ + monkeypatch.setenv("LITELLM_LOCAL_MODEL_COST_MAP", "True") + monkeypatch.setattr(litellm, "model_cost", litellm.get_model_cost_map(url="")) + + assert undated in litellm.model_cost + + undated_info = litellm.get_model_info(model=undated, custom_llm_provider="azure") + dated_info = litellm.get_model_info(model=dated, custom_llm_provider="azure") + assert undated_info["input_cost_per_token"] == dated_info["input_cost_per_token"] + assert undated_info["output_cost_per_token"] == dated_info["output_cost_per_token"] + assert ( + undated_info["input_cost_per_audio_token"] + == dated_info["input_cost_per_audio_token"] + ) + + prompt_usd, completion_usd = cost_per_token( + model=undated, + prompt_tokens=1000, + completion_tokens=1000, + custom_llm_provider="azure", + ) + assert prompt_usd == 1000 * dated_info["input_cost_per_token"] + assert completion_usd == 1000 * dated_info["output_cost_per_token"] + assert prompt_usd > 0 + + def test_realtime_transcription_no_completed_events_is_zero(monkeypatch): """A realtime stream without transcription completed events adds no extra cost.""" monkeypatch.setenv("LITELLM_LOCAL_MODEL_COST_MAP", "True")