From 3ee24cda01d6f1ef1ad6af76dabe271803ac598f Mon Sep 17 00:00:00 2001 From: mubashir1osmani Date: Thu, 27 Aug 2026 15:39:23 -0400 Subject: [PATCH] feat(pricing): add gemini-live-2.5-flash-native-audio to model cost map Missing entry caused a cascade: _model_cost_entry returned {} for vertex_ai/gemini-live-2.5-flash-native-audio, so _is_audio_only_live_model returned False, _coerce_response_modalities never coerced TEXT -> AUDIO in the Vertex setup message, the session hung, and no usage was ever logged. Add bare key (vertex_ai-language-models provider) and gemini/ prefixed key (gemini provider) with GA pricing: $0.50/M text in, $3.00/M audio in, $2.00/M text out, $12.00/M audio out, gemini_native_audio=true. Also extend the existing parametrized tests to assert the vertex_ai/ prefix resolves correctly through _model_cost_entry's stripped-prefix fallback. --- model_prices_and_context_window.json | 75 +++++++++++++++++++ .../test_gemini_realtime_transformation.py | 9 +++ 2 files changed, 84 insertions(+) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index c36018feb9d..6f52163704c 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -20273,6 +20273,81 @@ }, "supports_image_size": false }, + "gemini-live-2.5-flash-native-audio": { + "input_cost_per_audio_token": 3e-06, + "input_cost_per_token": 5e-07, + "litellm_provider": "vertex_ai-language-models", + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_tokens": 65535, + "mode": "realtime", + "output_cost_per_audio_token": 1.2e-05, + "output_cost_per_token": 2e-06, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", + "supported_endpoints": [ + "/vertex_ai/live", + "/v1/realtime" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true, + "gemini_native_audio": true + }, + "gemini/gemini-live-2.5-flash-native-audio": { + "input_cost_per_audio_token": 3e-06, + "input_cost_per_token": 5e-07, + "litellm_provider": "gemini", + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "max_tokens": 65535, + "mode": "realtime", + "output_cost_per_audio_token": 1.2e-05, + "output_cost_per_token": 2e-06, + "source": "https://ai.google.dev/gemini-api/docs/pricing", + "supported_endpoints": [ + "/v1/realtime" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "audio" + ], + "supports_audio_input": true, + "supports_audio_output": true, + "supports_function_calling": true, + "supports_parallel_function_calling": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_system_messages": true, + "supports_tool_choice": true, + "supports_url_context": true, + "supports_vision": true, + "supports_web_search": true, + "gemini_native_audio": true + }, "gemini-live-2.5-flash-preview-native-audio-09-2025": { "cache_read_input_token_cost": 7.5e-08, "input_cost_per_audio_token": 3e-06, diff --git a/tests/test_litellm/llms/gemini/realtime/test_gemini_realtime_transformation.py b/tests/test_litellm/llms/gemini/realtime/test_gemini_realtime_transformation.py index deb148a07c0..35916325b1a 100644 --- a/tests/test_litellm/llms/gemini/realtime/test_gemini_realtime_transformation.py +++ b/tests/test_litellm/llms/gemini/realtime/test_gemini_realtime_transformation.py @@ -1813,6 +1813,8 @@ def patch_gemini_audio_cost_map_entries(monkeypatch): "gemini-2.5-flash-native-audio", "gemini-2.5-flash-native-audio-latest", "gemini/gemini-2.5-flash-native-audio-latest", + "gemini-live-2.5-flash-native-audio", + "gemini/gemini-live-2.5-flash-native-audio", ] flash_live_models = [ "gemini-3.1-flash-live-preview", @@ -1835,6 +1837,10 @@ def patch_gemini_audio_cost_map_entries(monkeypatch): ("gemini/gemini-3.1-flash-live-preview", True), ("gemini-2.5-flash-native-audio-latest", True), ("gemini/gemini-2.5-flash-native-audio-latest", True), + ("gemini-live-2.5-flash-native-audio", True), + ("gemini/gemini-live-2.5-flash-native-audio", True), + # vertex_ai/ prefix must resolve via the stripped-prefix fallback + ("vertex_ai/gemini-live-2.5-flash-native-audio", True), ("gemini-2.0-flash", False), ("gemini-2.5-flash", False), ], @@ -1848,6 +1854,9 @@ def test_is_audio_only_live_model_uses_cost_map(model, expected, patch_gemini_au [ ("gemini-2.5-flash-native-audio-latest", True), ("gemini/gemini-2.5-flash-native-audio-latest", True), + ("gemini-live-2.5-flash-native-audio", True), + ("gemini/gemini-live-2.5-flash-native-audio", True), + ("vertex_ai/gemini-live-2.5-flash-native-audio", True), ("gemini-3.1-flash-live-preview", False), ("gemini/gemini-3.1-flash-live-preview", False), ("gemini-2.0-flash", False),