From 9b7e4d5ad2acd849849bfcad325fdb7fb0825078 Mon Sep 17 00:00:00 2001 From: Mihidum Hettiyahandi <55163074+mihidumh@users.noreply.github.com> Date: Wed, 15 Jul 2026 08:31:05 +1000 Subject: [PATCH] fix(pricing): add undated azure aliases for gpt-audio-mini and gpt-realtime-mini MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Azure deployments are commonly created against the undated model name, and the cost-tracking docs say to set base_model to azure/ — but only the dated -2025-10-06 entries existed for these two models (the openai provider has undated aliases for both). base_model: azure/gpt-audio-mini therefore resolved to nothing and, depending on the fallback path, text tokens billed at $0 while audio tokens billed fine. Mirror the -2025-10-06 entries as undated aliases, exactly like the undated openai entries mirror their newest dated variant. Fixes #33170 --- ...odel_prices_and_context_window_backup.json | 63 +++++++++++++++++++ model_prices_and_context_window.json | 63 +++++++++++++++++++ .../test_azure_audio_price_aliases.py | 48 ++++++++++++++ 3 files changed, 174 insertions(+) create mode 100644 tests/test_litellm/test_azure_audio_price_aliases.py diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index dedb9bbf40a..b6dfac715ab 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 e10dde793d1..d6716497a5e 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_azure_audio_price_aliases.py b/tests/test_litellm/test_azure_audio_price_aliases.py new file mode 100644 index 00000000000..16dbe5faebb --- /dev/null +++ b/tests/test_litellm/test_azure_audio_price_aliases.py @@ -0,0 +1,48 @@ +"""Undated azure aliases for the audio models must exist and match their dated +variants — Azure deployments are commonly created against the undated model +name, and `base_model: azure/gpt-audio-mini` previously resolved to nothing +(text tokens billed at $0). Issue #33170.""" + +import pytest + +import litellm + + +@pytest.fixture(autouse=True) +def _use_local_model_cost_map(monkeypatch): + original_model_cost = litellm.model_cost + monkeypatch.setenv("LITELLM_LOCAL_MODEL_COST_MAP", "True") + litellm.model_cost = litellm.get_model_cost_map(url="") + try: + yield + finally: + litellm.model_cost = original_model_cost + + +COST_FIELDS = ( + "input_cost_per_token", + "output_cost_per_token", + "input_cost_per_audio_token", + "output_cost_per_audio_token", +) + + +@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_alias_matches_dated_entry(undated, dated): + undated_info = litellm.get_model_info(undated) + dated_info = litellm.get_model_info(dated) + + for field in COST_FIELDS: + assert undated_info.get(field) == dated_info.get(field), field + # the production symptom was text tokens billed at $0 — make sure the + # alias carries real, non-zero prices + assert (undated_info.get(field) or 0) > 0, f"{undated}.{field} must be non-zero" + + assert undated_info.get("litellm_provider") == "azure" + assert undated_info.get("mode") == dated_info.get("mode")