diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 2a4e65ca2be8..bb25c0342220 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -13297,6 +13297,39 @@ "output_cost_per_token": 1e-06, "supports_reasoning": true }, + "cloudflare/@cf/openai/whisper": { + "input_cost_per_second": 7.5e-06, + "litellm_provider": "cloudflare", + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://developers.cloudflare.com/workers-ai/models/whisper/", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "cloudflare/@cf/openai/whisper-large-v3-turbo": { + "input_cost_per_second": 8.5e-06, + "litellm_provider": "cloudflare", + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://developers.cloudflare.com/workers-ai/models/whisper-large-v3-turbo/", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "cloudflare/@cf/openai/whisper-tiny-en": { + "input_cost_per_second": 0.0, + "litellm_provider": "cloudflare", + "metadata": { + "notes": "Cloudflare publishes no unit pricing for this beta model, so cost tracking reports $0 until they do" + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://developers.cloudflare.com/workers-ai/models/whisper-tiny-en/", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, "codestral/codestral-2405": { "input_cost_per_token": 0.0, "litellm_provider": "codestral", diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 2a4e65ca2be8..bb25c0342220 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -13297,6 +13297,39 @@ "output_cost_per_token": 1e-06, "supports_reasoning": true }, + "cloudflare/@cf/openai/whisper": { + "input_cost_per_second": 7.5e-06, + "litellm_provider": "cloudflare", + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://developers.cloudflare.com/workers-ai/models/whisper/", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "cloudflare/@cf/openai/whisper-large-v3-turbo": { + "input_cost_per_second": 8.5e-06, + "litellm_provider": "cloudflare", + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://developers.cloudflare.com/workers-ai/models/whisper-large-v3-turbo/", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, + "cloudflare/@cf/openai/whisper-tiny-en": { + "input_cost_per_second": 0.0, + "litellm_provider": "cloudflare", + "metadata": { + "notes": "Cloudflare publishes no unit pricing for this beta model, so cost tracking reports $0 until they do" + }, + "mode": "audio_transcription", + "output_cost_per_second": 0.0, + "source": "https://developers.cloudflare.com/workers-ai/models/whisper-tiny-en/", + "supported_endpoints": [ + "/v1/audio/transcriptions" + ] + }, "codestral/codestral-2405": { "input_cost_per_token": 0.0, "litellm_provider": "codestral", diff --git a/tests/test_litellm/test_cloudflare_workers_ai_model_metadata.py b/tests/test_litellm/test_cloudflare_workers_ai_model_metadata.py index 9ca4515239aa..59603aa4779b 100644 --- a/tests/test_litellm/test_cloudflare_workers_ai_model_metadata.py +++ b/tests/test_litellm/test_cloudflare_workers_ai_model_metadata.py @@ -75,6 +75,29 @@ def test_additional_current_models_are_present(): assert entry["output_cost_per_token"] > 0 +@pytest.mark.parametrize( + "key, published_price_per_audio_minute", + [ + ("cloudflare/@cf/openai/whisper", 0.00045), + ("cloudflare/@cf/openai/whisper-large-v3-turbo", 0.00051), + ], +) +def test_whisper_transcription_pricing_is_stored_per_second(key, published_price_per_audio_minute): + entry = litellm.model_cost[key] + assert entry["litellm_provider"] == "cloudflare" + assert entry["mode"] == "audio_transcription" + assert entry["supported_endpoints"] == ["/v1/audio/transcriptions"] + assert entry["output_cost_per_second"] == 0.0 + assert entry["input_cost_per_second"] == pytest.approx(published_price_per_audio_minute / 60) + + +def test_whisper_tiny_en_is_present_and_unpriced(): + entry = litellm.model_cost["cloudflare/@cf/openai/whisper-tiny-en"] + assert entry["mode"] == "audio_transcription" + assert entry["input_cost_per_second"] == 0.0 + assert entry["output_cost_per_second"] == 0.0 + + def test_root_and_backup_have_identical_cloudflare_keys(): if not os.path.exists(ROOT_MAP): pytest.skip("root cost map only ships in source checkouts")