diff --git a/litellm/litellm_core_utils/llm_cost_calc/utils.py b/litellm/litellm_core_utils/llm_cost_calc/utils.py index 59d0465e6d4..24c04e0bc45 100644 --- a/litellm/litellm_core_utils/llm_cost_calc/utils.py +++ b/litellm/litellm_core_utils/llm_cost_calc/utils.py @@ -143,7 +143,7 @@ def _get_service_tier_cost_key(base_key: str, service_tier: Optional[str]) -> st Args: base_key: The base cost key (e.g., "input_cost_per_token") - service_tier: The service tier ("flex", "priority", or None for standard) + service_tier: The service tier ("flex", "priority", "regional", or None for standard) Returns: str: The cost key to use (e.g., "input_cost_per_token_flex" or "input_cost_per_token") @@ -151,8 +151,9 @@ def _get_service_tier_cost_key(base_key: str, service_tier: Optional[str]) -> st if service_tier is None: return base_key - # Only use service tier specific keys for "flex" and "priority" - if service_tier.lower() in [ServiceTier.FLEX.value, ServiceTier.PRIORITY.value]: + # Only use service tier specific keys for known tiers + known_tiers = {tier.value for tier in ServiceTier} + if service_tier.lower() in known_tiers: return f"{base_key}_{service_tier.lower()}" # For any other service tier, use standard pricing diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index fb5bfa6cf4e..f0d33e91944 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -18631,8 +18631,10 @@ }, "gpt-4.1": { "cache_read_input_token_cost": 5e-07, + "cache_read_input_token_cost_regional": 5.5e-07, "cache_read_input_token_cost_priority": 8.75e-07, "input_cost_per_token": 2e-06, + "input_cost_per_token_regional": 2.2e-06, "input_cost_per_token_batches": 1e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", @@ -18641,6 +18643,7 @@ "max_tokens": 32768, "mode": "chat", "output_cost_per_token": 8e-06, + "output_cost_per_token_regional": 8.8e-06, "output_cost_per_token_batches": 4e-06, "output_cost_per_token_priority": 1.4e-05, "supported_endpoints": [ @@ -18704,8 +18707,10 @@ }, "gpt-4.1-mini": { "cache_read_input_token_cost": 1e-07, + "cache_read_input_token_cost_regional": 1.1e-07, "cache_read_input_token_cost_priority": 1.75e-07, "input_cost_per_token": 4e-07, + "input_cost_per_token_regional": 4.4e-07, "input_cost_per_token_batches": 2e-07, "input_cost_per_token_priority": 7e-07, "litellm_provider": "openai", @@ -18714,6 +18719,7 @@ "max_tokens": 32768, "mode": "chat", "output_cost_per_token": 1.6e-06, + "output_cost_per_token_regional": 1.76e-06, "output_cost_per_token_batches": 8e-07, "output_cost_per_token_priority": 2.8e-06, "supported_endpoints": [ @@ -18777,8 +18783,10 @@ }, "gpt-4.1-nano": { "cache_read_input_token_cost": 2.5e-08, + "cache_read_input_token_cost_regional": 2.75e-08, "cache_read_input_token_cost_priority": 5e-08, "input_cost_per_token": 1e-07, + "input_cost_per_token_regional": 1.1e-07, "input_cost_per_token_batches": 5e-08, "input_cost_per_token_priority": 2e-07, "litellm_provider": "openai", @@ -18787,6 +18795,7 @@ "max_tokens": 32768, "mode": "chat", "output_cost_per_token": 4e-07, + "output_cost_per_token_regional": 4.4e-07, "output_cost_per_token_batches": 2e-07, "output_cost_per_token_priority": 8e-07, "supported_endpoints": [ @@ -18848,8 +18857,10 @@ }, "gpt-4o": { "cache_read_input_token_cost": 1.25e-06, + "cache_read_input_token_cost_regional": 1.375e-06, "cache_read_input_token_cost_priority": 2.125e-06, "input_cost_per_token": 2.5e-06, + "input_cost_per_token_regional": 2.75e-06, "input_cost_per_token_batches": 1.25e-06, "input_cost_per_token_priority": 4.25e-06, "litellm_provider": "openai", @@ -18858,6 +18869,7 @@ "max_tokens": 16384, "mode": "chat", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_batches": 5e-06, "output_cost_per_token_priority": 1.7e-05, "supports_function_calling": true, @@ -18872,6 +18884,7 @@ }, "gpt-4o-2024-05-13": { "input_cost_per_token": 5e-06, + "input_cost_per_token_regional": 5.5e-06, "input_cost_per_token_batches": 2.5e-06, "input_cost_per_token_priority": 8.75e-06, "litellm_provider": "openai", @@ -18880,6 +18893,7 @@ "max_tokens": 4096, "mode": "chat", "output_cost_per_token": 1.5e-05, + "output_cost_per_token_regional": 1.65e-05, "output_cost_per_token_batches": 7.5e-06, "output_cost_per_token_priority": 2.625e-05, "supports_function_calling": true, @@ -19198,8 +19212,10 @@ }, "gpt-4o-mini": { "cache_read_input_token_cost": 7.5e-08, + "cache_read_input_token_cost_regional": 8.25e-08, "cache_read_input_token_cost_priority": 1.25e-07, "input_cost_per_token": 1.5e-07, + "input_cost_per_token_regional": 1.65e-07, "input_cost_per_token_batches": 7.5e-08, "input_cost_per_token_priority": 2.5e-07, "litellm_provider": "openai", @@ -19208,6 +19224,7 @@ "max_tokens": 16384, "mode": "chat", "output_cost_per_token": 6e-07, + "output_cost_per_token_regional": 6.6e-07, "output_cost_per_token_batches": 3e-07, "output_cost_per_token_priority": 1e-06, "supports_function_calling": true, @@ -19900,9 +19917,11 @@ }, "gpt-5": { "cache_read_input_token_cost": 1.25e-07, + "cache_read_input_token_cost_regional": 1.375e-07, "cache_read_input_token_cost_flex": 6.25e-08, "cache_read_input_token_cost_priority": 2.5e-07, "input_cost_per_token": 1.25e-06, + "input_cost_per_token_regional": 1.375e-06, "input_cost_per_token_flex": 6.25e-07, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", @@ -19911,6 +19930,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_flex": 5e-06, "output_cost_per_token_priority": 2e-05, "supported_endpoints": [ @@ -19943,8 +19963,10 @@ }, "gpt-5.1": { "cache_read_input_token_cost": 1.25e-07, + "cache_read_input_token_cost_regional": 1.375e-07, "cache_read_input_token_cost_priority": 2.5e-07, "input_cost_per_token": 1.25e-06, + "input_cost_per_token_regional": 1.375e-06, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -19952,6 +19974,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_priority": 2e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -19983,8 +20006,10 @@ }, "gpt-5.1-2025-11-13": { "cache_read_input_token_cost": 1.25e-07, + "cache_read_input_token_cost_regional": 1.375e-07, "cache_read_input_token_cost_priority": 2.5e-07, "input_cost_per_token": 1.25e-06, + "input_cost_per_token_regional": 1.375e-06, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -19992,6 +20017,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_priority": 2e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -20023,8 +20049,10 @@ }, "gpt-5.1-chat-latest": { "cache_read_input_token_cost": 1.25e-07, + "cache_read_input_token_cost_regional": 1.375e-07, "cache_read_input_token_cost_priority": 2.5e-07, "input_cost_per_token": 1.25e-06, + "input_cost_per_token_regional": 1.375e-06, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", "max_input_tokens": 128000, @@ -20032,6 +20060,7 @@ "max_tokens": 16384, "mode": "chat", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_priority": 2e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -20062,8 +20091,10 @@ }, "gpt-5.2": { "cache_read_input_token_cost": 1.75e-07, + "cache_read_input_token_cost_regional": 1.925e-07, "cache_read_input_token_cost_priority": 3.5e-07, "input_cost_per_token": 1.75e-06, + "input_cost_per_token_regional": 1.925e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -20071,6 +20102,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1.4e-05, + "output_cost_per_token_regional": 1.54e-05, "output_cost_per_token_priority": 2.8e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -20103,8 +20135,10 @@ }, "gpt-5.2-2025-12-11": { "cache_read_input_token_cost": 1.75e-07, + "cache_read_input_token_cost_regional": 1.925e-07, "cache_read_input_token_cost_priority": 3.5e-07, "input_cost_per_token": 1.75e-06, + "input_cost_per_token_regional": 1.925e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -20112,6 +20146,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1.4e-05, + "output_cost_per_token_regional": 1.54e-05, "output_cost_per_token_priority": 2.8e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -20144,8 +20179,10 @@ }, "gpt-5.2-chat-latest": { "cache_read_input_token_cost": 1.75e-07, + "cache_read_input_token_cost_regional": 1.925e-07, "cache_read_input_token_cost_priority": 3.5e-07, "input_cost_per_token": 1.75e-06, + "input_cost_per_token_regional": 1.925e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", "max_input_tokens": 128000, @@ -20153,6 +20190,7 @@ "max_tokens": 16384, "mode": "chat", "output_cost_per_token": 1.4e-05, + "output_cost_per_token_regional": 1.54e-05, "output_cost_per_token_priority": 2.8e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -20182,8 +20220,10 @@ }, "gpt-5.3-chat-latest": { "cache_read_input_token_cost": 1.75e-07, + "cache_read_input_token_cost_regional": 1.925e-07, "cache_read_input_token_cost_priority": 3.5e-07, "input_cost_per_token": 1.75e-06, + "input_cost_per_token_regional": 1.925e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", "max_input_tokens": 128000, @@ -20191,6 +20231,7 @@ "max_tokens": 16384, "mode": "chat", "output_cost_per_token": 1.4e-05, + "output_cost_per_token_regional": 1.54e-05, "output_cost_per_token_priority": 2.8e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -20288,11 +20329,15 @@ }, "gpt-5.5": { "cache_read_input_token_cost": 5e-07, + "cache_read_input_token_cost_regional": 5.5e-07, "cache_read_input_token_cost_above_272k_tokens": 1e-06, + "cache_read_input_token_cost_above_272k_tokens_regional": 1.1e-06, "cache_read_input_token_cost_flex": 2.5e-07, "cache_read_input_token_cost_priority": 1e-06, "input_cost_per_token": 5e-06, + "input_cost_per_token_regional": 5.5e-06, "input_cost_per_token_above_272k_tokens": 1e-05, + "input_cost_per_token_above_272k_tokens_regional": 1.1e-05, "input_cost_per_token_flex": 2.5e-06, "input_cost_per_token_batches": 2.5e-06, "input_cost_per_token_priority": 1e-05, @@ -20302,7 +20347,9 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 3e-05, + "output_cost_per_token_regional": 3.3e-05, "output_cost_per_token_above_272k_tokens": 4.5e-05, + "output_cost_per_token_above_272k_tokens_regional": 4.95e-05, "output_cost_per_token_flex": 1.5e-05, "output_cost_per_token_batches": 1.5e-05, "output_cost_per_token_priority": 6e-05, @@ -20336,11 +20383,15 @@ }, "gpt-5.5-2026-04-23": { "cache_read_input_token_cost": 5e-07, + "cache_read_input_token_cost_regional": 5.5e-07, "cache_read_input_token_cost_above_272k_tokens": 1e-06, + "cache_read_input_token_cost_above_272k_tokens_regional": 1.1e-06, "cache_read_input_token_cost_flex": 2.5e-07, "cache_read_input_token_cost_priority": 1e-06, "input_cost_per_token": 5e-06, + "input_cost_per_token_regional": 5.5e-06, "input_cost_per_token_above_272k_tokens": 1e-05, + "input_cost_per_token_above_272k_tokens_regional": 1.1e-05, "input_cost_per_token_flex": 2.5e-06, "input_cost_per_token_batches": 2.5e-06, "input_cost_per_token_priority": 1e-05, @@ -20350,7 +20401,9 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 3e-05, + "output_cost_per_token_regional": 3.3e-05, "output_cost_per_token_above_272k_tokens": 4.5e-05, + "output_cost_per_token_above_272k_tokens_regional": 4.95e-05, "output_cost_per_token_flex": 1.5e-05, "output_cost_per_token_batches": 1.5e-05, "output_cost_per_token_priority": 6e-05, @@ -20472,11 +20525,15 @@ }, "gpt-5.4": { "cache_read_input_token_cost": 2.5e-07, + "cache_read_input_token_cost_regional": 2.75e-07, "cache_read_input_token_cost_above_272k_tokens": 5e-07, + "cache_read_input_token_cost_above_272k_tokens_regional": 5.5e-07, "cache_read_input_token_cost_flex": 1.3e-07, "cache_read_input_token_cost_priority": 5e-07, "input_cost_per_token": 2.5e-06, + "input_cost_per_token_regional": 2.75e-06, "input_cost_per_token_above_272k_tokens": 5e-06, + "input_cost_per_token_above_272k_tokens_regional": 5.5e-06, "input_cost_per_token_flex": 1.25e-06, "input_cost_per_token_batches": 1.25e-06, "input_cost_per_token_priority": 5e-06, @@ -20486,7 +20543,9 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1.5e-05, + "output_cost_per_token_regional": 1.65e-05, "output_cost_per_token_above_272k_tokens": 2.25e-05, + "output_cost_per_token_above_272k_tokens_regional": 2.475e-05, "output_cost_per_token_flex": 7.5e-06, "output_cost_per_token_batches": 7.5e-06, "output_cost_per_token_priority": 3e-05, @@ -20519,11 +20578,15 @@ }, "gpt-5.4-2026-03-05": { "cache_read_input_token_cost": 2.5e-07, + "cache_read_input_token_cost_regional": 2.75e-07, "cache_read_input_token_cost_above_272k_tokens": 5e-07, + "cache_read_input_token_cost_above_272k_tokens_regional": 5.5e-07, "cache_read_input_token_cost_flex": 1.3e-07, "cache_read_input_token_cost_priority": 5e-07, "input_cost_per_token": 2.5e-06, + "input_cost_per_token_regional": 2.75e-06, "input_cost_per_token_above_272k_tokens": 5e-06, + "input_cost_per_token_above_272k_tokens_regional": 5.5e-06, "input_cost_per_token_flex": 1.25e-06, "input_cost_per_token_batches": 1.25e-06, "input_cost_per_token_priority": 5e-06, @@ -20533,7 +20596,9 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1.5e-05, + "output_cost_per_token_regional": 1.65e-05, "output_cost_per_token_above_272k_tokens": 2.25e-05, + "output_cost_per_token_above_272k_tokens_regional": 2.475e-05, "output_cost_per_token_flex": 7.5e-06, "output_cost_per_token_batches": 7.5e-06, "output_cost_per_token_priority": 3e-05, @@ -20649,10 +20714,12 @@ }, "gpt-5.4-mini": { "cache_read_input_token_cost": 7.5e-08, + "cache_read_input_token_cost_regional": 8.25e-08, "cache_read_input_token_cost_flex": 3.75e-08, "cache_read_input_token_cost_batches": 3.75e-08, "cache_read_input_token_cost_priority": 1.5e-07, "input_cost_per_token": 7.5e-07, + "input_cost_per_token_regional": 8.25e-07, "input_cost_per_token_flex": 3.75e-07, "input_cost_per_token_batches": 3.75e-07, "input_cost_per_token_priority": 1.5e-06, @@ -20662,6 +20729,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 4.5e-06, + "output_cost_per_token_regional": 4.95e-06, "output_cost_per_token_flex": 2.25e-06, "output_cost_per_token_batches": 2.25e-06, "output_cost_per_token_priority": 9e-06, @@ -20695,10 +20763,12 @@ }, "gpt-5.4-mini-2026-03-17": { "cache_read_input_token_cost": 7.5e-08, + "cache_read_input_token_cost_regional": 8.25e-08, "cache_read_input_token_cost_flex": 3.75e-08, "cache_read_input_token_cost_batches": 3.75e-08, "cache_read_input_token_cost_priority": 1.5e-07, "input_cost_per_token": 7.5e-07, + "input_cost_per_token_regional": 8.25e-07, "input_cost_per_token_flex": 3.75e-07, "input_cost_per_token_batches": 3.75e-07, "input_cost_per_token_priority": 1.5e-06, @@ -20708,6 +20778,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 4.5e-06, + "output_cost_per_token_regional": 4.95e-06, "output_cost_per_token_flex": 2.25e-06, "output_cost_per_token_batches": 2.25e-06, "output_cost_per_token_priority": 9e-06, @@ -20899,9 +20970,11 @@ }, "gpt-5-2025-08-07": { "cache_read_input_token_cost": 1.25e-07, + "cache_read_input_token_cost_regional": 1.375e-07, "cache_read_input_token_cost_flex": 6.25e-08, "cache_read_input_token_cost_priority": 2.5e-07, "input_cost_per_token": 1.25e-06, + "input_cost_per_token_regional": 1.375e-06, "input_cost_per_token_flex": 6.25e-07, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", @@ -20910,6 +20983,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_flex": 5e-06, "output_cost_per_token_priority": 2e-05, "supported_endpoints": [ @@ -21046,8 +21120,10 @@ }, "gpt-5.1-codex": { "cache_read_input_token_cost": 1.25e-07, + "cache_read_input_token_cost_regional": 1.375e-07, "cache_read_input_token_cost_priority": 2.5e-07, "input_cost_per_token": 1.25e-06, + "input_cost_per_token_regional": 1.375e-06, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -21055,6 +21131,7 @@ "max_tokens": 128000, "mode": "responses", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_priority": 2e-05, "supported_endpoints": [ "/v1/responses" @@ -21117,8 +21194,10 @@ }, "gpt-5.1-codex-mini": { "cache_read_input_token_cost": 2.5e-08, + "cache_read_input_token_cost_regional": 2.75e-08, "cache_read_input_token_cost_priority": 4.5e-08, "input_cost_per_token": 2.5e-07, + "input_cost_per_token_regional": 2.75e-07, "input_cost_per_token_priority": 4.5e-07, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -21126,6 +21205,7 @@ "max_tokens": 128000, "mode": "responses", "output_cost_per_token": 2e-06, + "output_cost_per_token_regional": 2.2e-06, "output_cost_per_token_priority": 3.6e-06, "supported_endpoints": [ "/v1/responses" @@ -21154,8 +21234,10 @@ }, "gpt-5.2-codex": { "cache_read_input_token_cost": 1.75e-07, + "cache_read_input_token_cost_regional": 1.925e-07, "cache_read_input_token_cost_priority": 3.5e-07, "input_cost_per_token": 1.75e-06, + "input_cost_per_token_regional": 1.925e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -21163,6 +21245,7 @@ "max_tokens": 128000, "mode": "responses", "output_cost_per_token": 1.4e-05, + "output_cost_per_token_regional": 1.54e-05, "output_cost_per_token_priority": 2.8e-05, "supported_endpoints": [ "/v1/responses" @@ -21191,8 +21274,10 @@ }, "gpt-5.3-codex": { "cache_read_input_token_cost": 1.75e-07, + "cache_read_input_token_cost_regional": 1.925e-07, "cache_read_input_token_cost_priority": 3.5e-07, "input_cost_per_token": 1.75e-06, + "input_cost_per_token_regional": 1.925e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -21200,6 +21285,7 @@ "max_tokens": 128000, "mode": "responses", "output_cost_per_token": 1.4e-05, + "output_cost_per_token_regional": 1.54e-05, "output_cost_per_token_priority": 2.8e-05, "supported_endpoints": [ "/v1/responses" @@ -21228,9 +21314,11 @@ }, "gpt-5-mini": { "cache_read_input_token_cost": 2.5e-08, + "cache_read_input_token_cost_regional": 2.75e-08, "cache_read_input_token_cost_flex": 1.25e-08, "cache_read_input_token_cost_priority": 4.5e-08, "input_cost_per_token": 2.5e-07, + "input_cost_per_token_regional": 2.75e-07, "input_cost_per_token_flex": 1.25e-07, "input_cost_per_token_priority": 4.5e-07, "litellm_provider": "openai", @@ -21239,6 +21327,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 2e-06, + "output_cost_per_token_regional": 2.2e-06, "output_cost_per_token_flex": 1e-06, "output_cost_per_token_priority": 3.6e-06, "supported_endpoints": [ @@ -21271,9 +21360,11 @@ }, "gpt-5-mini-2025-08-07": { "cache_read_input_token_cost": 2.5e-08, + "cache_read_input_token_cost_regional": 2.75e-08, "cache_read_input_token_cost_flex": 1.25e-08, "cache_read_input_token_cost_priority": 4.5e-08, "input_cost_per_token": 2.5e-07, + "input_cost_per_token_regional": 2.75e-07, "input_cost_per_token_flex": 1.25e-07, "input_cost_per_token_priority": 4.5e-07, "litellm_provider": "openai", @@ -21282,6 +21373,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 2e-06, + "output_cost_per_token_regional": 2.2e-06, "output_cost_per_token_flex": 1e-06, "output_cost_per_token_priority": 3.6e-06, "supported_endpoints": [ @@ -21314,8 +21406,10 @@ }, "gpt-5-nano": { "cache_read_input_token_cost": 5e-09, + "cache_read_input_token_cost_regional": 5.5e-09, "cache_read_input_token_cost_flex": 2.5e-09, "input_cost_per_token": 5e-08, + "input_cost_per_token_regional": 5.5e-08, "input_cost_per_token_flex": 2.5e-08, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", @@ -21324,6 +21418,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 4e-07, + "output_cost_per_token_regional": 4.4e-07, "output_cost_per_token_flex": 2e-07, "supported_endpoints": [ "/v1/chat/completions", @@ -25259,9 +25354,11 @@ }, "o3": { "cache_read_input_token_cost": 5e-07, + "cache_read_input_token_cost_regional": 5.5e-07, "cache_read_input_token_cost_flex": 2.5e-07, "cache_read_input_token_cost_priority": 8.75e-07, "input_cost_per_token": 2e-06, + "input_cost_per_token_regional": 2.2e-06, "input_cost_per_token_flex": 1e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", @@ -25270,6 +25367,7 @@ "max_tokens": 100000, "mode": "chat", "output_cost_per_token": 8e-06, + "output_cost_per_token_regional": 8.8e-06, "output_cost_per_token_flex": 4e-06, "output_cost_per_token_priority": 1.4e-05, "supported_endpoints": [ @@ -25495,9 +25593,11 @@ }, "o4-mini": { "cache_read_input_token_cost": 2.75e-07, + "cache_read_input_token_cost_regional": 3.025e-07, "cache_read_input_token_cost_flex": 1.375e-07, "cache_read_input_token_cost_priority": 5e-07, "input_cost_per_token": 1.1e-06, + "input_cost_per_token_regional": 1.21e-06, "input_cost_per_token_flex": 5.5e-07, "input_cost_per_token_priority": 2e-06, "litellm_provider": "openai", @@ -25506,6 +25606,7 @@ "max_tokens": 100000, "mode": "chat", "output_cost_per_token": 4.4e-06, + "output_cost_per_token_regional": 4.84e-06, "output_cost_per_token_flex": 2.2e-06, "output_cost_per_token_priority": 8e-06, "supports_function_calling": true, diff --git a/litellm/types/utils.py b/litellm/types/utils.py index 400edcac889..90fd87382b0 100644 --- a/litellm/types/utils.py +++ b/litellm/types/utils.py @@ -177,6 +177,9 @@ class ModelInfoBase(ProviderSpecificModelInfo, total=False): input_cost_per_token_priority: Optional[ float ] # OpenAI priority service tier pricing + input_cost_per_token_regional: Optional[ + float + ] # OpenAI regional/data-residency processing pricing (10% uplift) cache_creation_input_token_cost: Optional[float] cache_creation_input_token_cost_above_200k_tokens: Optional[float] cache_creation_input_token_cost_above_1hr: Optional[float] @@ -187,8 +190,14 @@ class ModelInfoBase(ProviderSpecificModelInfo, total=False): cache_read_input_token_cost_priority: Optional[ float ] # OpenAI priority service tier pricing + cache_read_input_token_cost_regional: Optional[ + float + ] # OpenAI regional/data-residency processing pricing (10% uplift) cache_read_input_token_cost_above_200k_tokens: Optional[float] cache_read_input_token_cost_above_272k_tokens: Optional[float] + cache_read_input_token_cost_above_272k_tokens_regional: Optional[ + float + ] # OpenAI regional/data-residency processing pricing (10% uplift) for prompts >272K input_cost_per_character: Optional[float] # only for vertex ai models input_cost_per_audio_token: Optional[float] input_cost_per_token_above_128k_tokens: Optional[float] # only for vertex ai models @@ -198,6 +207,9 @@ class ModelInfoBase(ProviderSpecificModelInfo, total=False): input_cost_per_token_above_272k_tokens: Optional[ float ] # GPT-5.4/5.4-pro: prompts >272K priced at 2x input + input_cost_per_token_above_272k_tokens_regional: Optional[ + float + ] # OpenAI regional/data-residency processing pricing (10% uplift) for prompts >272K input_cost_per_character_above_128k_tokens: Optional[ float ] # only for vertex ai models @@ -214,6 +226,9 @@ class ModelInfoBase(ProviderSpecificModelInfo, total=False): output_cost_per_token_priority: Optional[ float ] # OpenAI priority service tier pricing + output_cost_per_token_regional: Optional[ + float + ] # OpenAI regional/data-residency processing pricing (10% uplift) output_cost_per_character: Optional[float] # only for vertex ai models output_cost_per_audio_token: Optional[float] output_cost_per_token_above_128k_tokens: Optional[ @@ -225,6 +240,9 @@ class ModelInfoBase(ProviderSpecificModelInfo, total=False): output_cost_per_token_above_272k_tokens: Optional[ float ] # GPT-5.4/5.4-pro: prompts >272K priced at 1.5x output + output_cost_per_token_above_272k_tokens_regional: Optional[ + float + ] # OpenAI regional/data-residency processing pricing (10% uplift) for prompts >272K output_cost_per_character_above_128k_tokens: Optional[ float ] # only for vertex ai models @@ -3006,6 +3024,7 @@ class CustomPricingLiteLLMParams(BaseModel): # This allows any model_info parameter to be set in litellm_params input_cost_per_token_flex: Optional[float] = None input_cost_per_token_priority: Optional[float] = None + input_cost_per_token_regional: Optional[float] = None cache_creation_input_token_cost: Optional[float] = None cache_creation_input_token_cost_above_1hr: Optional[float] = None cache_creation_input_token_cost_above_200k_tokens: Optional[float] = None @@ -3013,6 +3032,7 @@ class CustomPricingLiteLLMParams(BaseModel): cache_read_input_token_cost: Optional[float] = None cache_read_input_token_cost_flex: Optional[float] = None cache_read_input_token_cost_priority: Optional[float] = None + cache_read_input_token_cost_regional: Optional[float] = None cache_read_input_token_cost_above_200k_tokens: Optional[float] = None cache_read_input_audio_token_cost: Optional[float] = None input_cost_per_character: Optional[float] = None @@ -3034,6 +3054,7 @@ class CustomPricingLiteLLMParams(BaseModel): output_cost_per_token_batches: Optional[float] = None output_cost_per_token_flex: Optional[float] = None output_cost_per_token_priority: Optional[float] = None + output_cost_per_token_regional: Optional[float] = None output_cost_per_character: Optional[float] = None output_cost_per_audio_token: Optional[float] = None output_cost_per_token_above_128k_tokens: Optional[float] = None @@ -3575,6 +3596,7 @@ class ServiceTier(Enum): FLEX = "flex" PRIORITY = "priority" + REGIONAL = "regional" # OpenAI regional/data-residency processing (10% uplift) LLMResponseTypes = Union[ diff --git a/litellm/utils.py b/litellm/utils.py index cefd348078b..4fbeb521ba5 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -5827,6 +5827,9 @@ def _get_model_info_helper( # noqa: PLR0915 input_cost_per_token_priority=_model_info.get( "input_cost_per_token_priority", None ), + input_cost_per_token_regional=_model_info.get( + "input_cost_per_token_regional", None + ), cache_creation_input_token_cost=_model_info.get( "cache_creation_input_token_cost", None ), @@ -5842,12 +5845,18 @@ def _get_model_info_helper( # noqa: PLR0915 cache_read_input_token_cost_above_272k_tokens=_model_info.get( "cache_read_input_token_cost_above_272k_tokens", None ), + cache_read_input_token_cost_above_272k_tokens_regional=_model_info.get( + "cache_read_input_token_cost_above_272k_tokens_regional", None + ), cache_read_input_token_cost_flex=_model_info.get( "cache_read_input_token_cost_flex", None ), cache_read_input_token_cost_priority=_model_info.get( "cache_read_input_token_cost_priority", None ), + cache_read_input_token_cost_regional=_model_info.get( + "cache_read_input_token_cost_regional", None + ), cache_creation_input_token_cost_above_1hr=_model_info.get( "cache_creation_input_token_cost_above_1hr", None ), @@ -5863,6 +5872,9 @@ def _get_model_info_helper( # noqa: PLR0915 input_cost_per_token_above_272k_tokens=_model_info.get( "input_cost_per_token_above_272k_tokens", None ), + input_cost_per_token_above_272k_tokens_regional=_model_info.get( + "input_cost_per_token_above_272k_tokens_regional", None + ), input_cost_per_query=_model_info.get("input_cost_per_query", None), input_cost_per_second=_model_info.get("input_cost_per_second", None), input_cost_per_audio_token=_model_info.get( @@ -5891,6 +5903,9 @@ def _get_model_info_helper( # noqa: PLR0915 output_cost_per_token_priority=_model_info.get( "output_cost_per_token_priority", None ), + output_cost_per_token_regional=_model_info.get( + "output_cost_per_token_regional", None + ), output_cost_per_audio_token=_model_info.get( "output_cost_per_audio_token", None ), @@ -5912,6 +5927,9 @@ def _get_model_info_helper( # noqa: PLR0915 output_cost_per_token_above_272k_tokens=_model_info.get( "output_cost_per_token_above_272k_tokens", None ), + output_cost_per_token_above_272k_tokens_regional=_model_info.get( + "output_cost_per_token_above_272k_tokens_regional", None + ), output_cost_per_second=_model_info.get("output_cost_per_second", None), output_cost_per_second_1080p=_model_info.get( "output_cost_per_second_1080p", None diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 94f0f1e78d3..1d8e58f40a7 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -18665,8 +18665,10 @@ }, "gpt-4.1": { "cache_read_input_token_cost": 5e-07, + "cache_read_input_token_cost_regional": 5.5e-07, "cache_read_input_token_cost_priority": 8.75e-07, "input_cost_per_token": 2e-06, + "input_cost_per_token_regional": 2.2e-06, "input_cost_per_token_batches": 1e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", @@ -18675,6 +18677,7 @@ "max_tokens": 32768, "mode": "chat", "output_cost_per_token": 8e-06, + "output_cost_per_token_regional": 8.8e-06, "output_cost_per_token_batches": 4e-06, "output_cost_per_token_priority": 1.4e-05, "supported_endpoints": [ @@ -18738,8 +18741,10 @@ }, "gpt-4.1-mini": { "cache_read_input_token_cost": 1e-07, + "cache_read_input_token_cost_regional": 1.1e-07, "cache_read_input_token_cost_priority": 1.75e-07, "input_cost_per_token": 4e-07, + "input_cost_per_token_regional": 4.4e-07, "input_cost_per_token_batches": 2e-07, "input_cost_per_token_priority": 7e-07, "litellm_provider": "openai", @@ -18748,6 +18753,7 @@ "max_tokens": 32768, "mode": "chat", "output_cost_per_token": 1.6e-06, + "output_cost_per_token_regional": 1.76e-06, "output_cost_per_token_batches": 8e-07, "output_cost_per_token_priority": 2.8e-06, "supported_endpoints": [ @@ -18811,8 +18817,10 @@ }, "gpt-4.1-nano": { "cache_read_input_token_cost": 2.5e-08, + "cache_read_input_token_cost_regional": 2.75e-08, "cache_read_input_token_cost_priority": 5e-08, "input_cost_per_token": 1e-07, + "input_cost_per_token_regional": 1.1e-07, "input_cost_per_token_batches": 5e-08, "input_cost_per_token_priority": 2e-07, "litellm_provider": "openai", @@ -18821,6 +18829,7 @@ "max_tokens": 32768, "mode": "chat", "output_cost_per_token": 4e-07, + "output_cost_per_token_regional": 4.4e-07, "output_cost_per_token_batches": 2e-07, "output_cost_per_token_priority": 8e-07, "supported_endpoints": [ @@ -18882,8 +18891,10 @@ }, "gpt-4o": { "cache_read_input_token_cost": 1.25e-06, + "cache_read_input_token_cost_regional": 1.375e-06, "cache_read_input_token_cost_priority": 2.125e-06, "input_cost_per_token": 2.5e-06, + "input_cost_per_token_regional": 2.75e-06, "input_cost_per_token_batches": 1.25e-06, "input_cost_per_token_priority": 4.25e-06, "litellm_provider": "openai", @@ -18892,6 +18903,7 @@ "max_tokens": 16384, "mode": "chat", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_batches": 5e-06, "output_cost_per_token_priority": 1.7e-05, "supports_function_calling": true, @@ -18906,6 +18918,7 @@ }, "gpt-4o-2024-05-13": { "input_cost_per_token": 5e-06, + "input_cost_per_token_regional": 5.5e-06, "input_cost_per_token_batches": 2.5e-06, "input_cost_per_token_priority": 8.75e-06, "litellm_provider": "openai", @@ -18914,6 +18927,7 @@ "max_tokens": 4096, "mode": "chat", "output_cost_per_token": 1.5e-05, + "output_cost_per_token_regional": 1.65e-05, "output_cost_per_token_batches": 7.5e-06, "output_cost_per_token_priority": 2.625e-05, "supports_function_calling": true, @@ -19232,8 +19246,10 @@ }, "gpt-4o-mini": { "cache_read_input_token_cost": 7.5e-08, + "cache_read_input_token_cost_regional": 8.25e-08, "cache_read_input_token_cost_priority": 1.25e-07, "input_cost_per_token": 1.5e-07, + "input_cost_per_token_regional": 1.65e-07, "input_cost_per_token_batches": 7.5e-08, "input_cost_per_token_priority": 2.5e-07, "litellm_provider": "openai", @@ -19242,6 +19258,7 @@ "max_tokens": 16384, "mode": "chat", "output_cost_per_token": 6e-07, + "output_cost_per_token_regional": 6.6e-07, "output_cost_per_token_batches": 3e-07, "output_cost_per_token_priority": 1e-06, "supports_function_calling": true, @@ -19934,9 +19951,11 @@ }, "gpt-5": { "cache_read_input_token_cost": 1.25e-07, + "cache_read_input_token_cost_regional": 1.375e-07, "cache_read_input_token_cost_flex": 6.25e-08, "cache_read_input_token_cost_priority": 2.5e-07, "input_cost_per_token": 1.25e-06, + "input_cost_per_token_regional": 1.375e-06, "input_cost_per_token_flex": 6.25e-07, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", @@ -19945,6 +19964,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_flex": 5e-06, "output_cost_per_token_priority": 2e-05, "supported_endpoints": [ @@ -19977,8 +19997,10 @@ }, "gpt-5.1": { "cache_read_input_token_cost": 1.25e-07, + "cache_read_input_token_cost_regional": 1.375e-07, "cache_read_input_token_cost_priority": 2.5e-07, "input_cost_per_token": 1.25e-06, + "input_cost_per_token_regional": 1.375e-06, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -19986,6 +20008,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_priority": 2e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -20017,8 +20040,10 @@ }, "gpt-5.1-2025-11-13": { "cache_read_input_token_cost": 1.25e-07, + "cache_read_input_token_cost_regional": 1.375e-07, "cache_read_input_token_cost_priority": 2.5e-07, "input_cost_per_token": 1.25e-06, + "input_cost_per_token_regional": 1.375e-06, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -20026,6 +20051,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_priority": 2e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -20057,8 +20083,10 @@ }, "gpt-5.1-chat-latest": { "cache_read_input_token_cost": 1.25e-07, + "cache_read_input_token_cost_regional": 1.375e-07, "cache_read_input_token_cost_priority": 2.5e-07, "input_cost_per_token": 1.25e-06, + "input_cost_per_token_regional": 1.375e-06, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", "max_input_tokens": 128000, @@ -20066,6 +20094,7 @@ "max_tokens": 16384, "mode": "chat", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_priority": 2e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -20096,8 +20125,10 @@ }, "gpt-5.2": { "cache_read_input_token_cost": 1.75e-07, + "cache_read_input_token_cost_regional": 1.925e-07, "cache_read_input_token_cost_priority": 3.5e-07, "input_cost_per_token": 1.75e-06, + "input_cost_per_token_regional": 1.925e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -20105,6 +20136,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1.4e-05, + "output_cost_per_token_regional": 1.54e-05, "output_cost_per_token_priority": 2.8e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -20137,8 +20169,10 @@ }, "gpt-5.2-2025-12-11": { "cache_read_input_token_cost": 1.75e-07, + "cache_read_input_token_cost_regional": 1.925e-07, "cache_read_input_token_cost_priority": 3.5e-07, "input_cost_per_token": 1.75e-06, + "input_cost_per_token_regional": 1.925e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -20146,6 +20180,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1.4e-05, + "output_cost_per_token_regional": 1.54e-05, "output_cost_per_token_priority": 2.8e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -20178,8 +20213,10 @@ }, "gpt-5.2-chat-latest": { "cache_read_input_token_cost": 1.75e-07, + "cache_read_input_token_cost_regional": 1.925e-07, "cache_read_input_token_cost_priority": 3.5e-07, "input_cost_per_token": 1.75e-06, + "input_cost_per_token_regional": 1.925e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", "max_input_tokens": 128000, @@ -20187,6 +20224,7 @@ "max_tokens": 16384, "mode": "chat", "output_cost_per_token": 1.4e-05, + "output_cost_per_token_regional": 1.54e-05, "output_cost_per_token_priority": 2.8e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -20216,8 +20254,10 @@ }, "gpt-5.3-chat-latest": { "cache_read_input_token_cost": 1.75e-07, + "cache_read_input_token_cost_regional": 1.925e-07, "cache_read_input_token_cost_priority": 3.5e-07, "input_cost_per_token": 1.75e-06, + "input_cost_per_token_regional": 1.925e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", "max_input_tokens": 128000, @@ -20225,6 +20265,7 @@ "max_tokens": 16384, "mode": "chat", "output_cost_per_token": 1.4e-05, + "output_cost_per_token_regional": 1.54e-05, "output_cost_per_token_priority": 2.8e-05, "supported_endpoints": [ "/v1/chat/completions", @@ -20322,11 +20363,15 @@ }, "gpt-5.5": { "cache_read_input_token_cost": 5e-07, + "cache_read_input_token_cost_regional": 5.5e-07, "cache_read_input_token_cost_above_272k_tokens": 1e-06, + "cache_read_input_token_cost_above_272k_tokens_regional": 1.1e-06, "cache_read_input_token_cost_flex": 2.5e-07, "cache_read_input_token_cost_priority": 1e-06, "input_cost_per_token": 5e-06, + "input_cost_per_token_regional": 5.5e-06, "input_cost_per_token_above_272k_tokens": 1e-05, + "input_cost_per_token_above_272k_tokens_regional": 1.1e-05, "input_cost_per_token_flex": 2.5e-06, "input_cost_per_token_batches": 2.5e-06, "input_cost_per_token_priority": 1e-05, @@ -20336,7 +20381,9 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 3e-05, + "output_cost_per_token_regional": 3.3e-05, "output_cost_per_token_above_272k_tokens": 4.5e-05, + "output_cost_per_token_above_272k_tokens_regional": 4.95e-05, "output_cost_per_token_flex": 1.5e-05, "output_cost_per_token_batches": 1.5e-05, "output_cost_per_token_priority": 6e-05, @@ -20370,11 +20417,15 @@ }, "gpt-5.5-2026-04-23": { "cache_read_input_token_cost": 5e-07, + "cache_read_input_token_cost_regional": 5.5e-07, "cache_read_input_token_cost_above_272k_tokens": 1e-06, + "cache_read_input_token_cost_above_272k_tokens_regional": 1.1e-06, "cache_read_input_token_cost_flex": 2.5e-07, "cache_read_input_token_cost_priority": 1e-06, "input_cost_per_token": 5e-06, + "input_cost_per_token_regional": 5.5e-06, "input_cost_per_token_above_272k_tokens": 1e-05, + "input_cost_per_token_above_272k_tokens_regional": 1.1e-05, "input_cost_per_token_flex": 2.5e-06, "input_cost_per_token_batches": 2.5e-06, "input_cost_per_token_priority": 1e-05, @@ -20384,7 +20435,9 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 3e-05, + "output_cost_per_token_regional": 3.3e-05, "output_cost_per_token_above_272k_tokens": 4.5e-05, + "output_cost_per_token_above_272k_tokens_regional": 4.95e-05, "output_cost_per_token_flex": 1.5e-05, "output_cost_per_token_batches": 1.5e-05, "output_cost_per_token_priority": 6e-05, @@ -20506,11 +20559,15 @@ }, "gpt-5.4": { "cache_read_input_token_cost": 2.5e-07, + "cache_read_input_token_cost_regional": 2.75e-07, "cache_read_input_token_cost_above_272k_tokens": 5e-07, + "cache_read_input_token_cost_above_272k_tokens_regional": 5.5e-07, "cache_read_input_token_cost_flex": 1.3e-07, "cache_read_input_token_cost_priority": 5e-07, "input_cost_per_token": 2.5e-06, + "input_cost_per_token_regional": 2.75e-06, "input_cost_per_token_above_272k_tokens": 5e-06, + "input_cost_per_token_above_272k_tokens_regional": 5.5e-06, "input_cost_per_token_flex": 1.25e-06, "input_cost_per_token_batches": 1.25e-06, "input_cost_per_token_priority": 5e-06, @@ -20520,7 +20577,9 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1.5e-05, + "output_cost_per_token_regional": 1.65e-05, "output_cost_per_token_above_272k_tokens": 2.25e-05, + "output_cost_per_token_above_272k_tokens_regional": 2.475e-05, "output_cost_per_token_flex": 7.5e-06, "output_cost_per_token_batches": 7.5e-06, "output_cost_per_token_priority": 3e-05, @@ -20553,11 +20612,15 @@ }, "gpt-5.4-2026-03-05": { "cache_read_input_token_cost": 2.5e-07, + "cache_read_input_token_cost_regional": 2.75e-07, "cache_read_input_token_cost_above_272k_tokens": 5e-07, + "cache_read_input_token_cost_above_272k_tokens_regional": 5.5e-07, "cache_read_input_token_cost_flex": 1.3e-07, "cache_read_input_token_cost_priority": 5e-07, "input_cost_per_token": 2.5e-06, + "input_cost_per_token_regional": 2.75e-06, "input_cost_per_token_above_272k_tokens": 5e-06, + "input_cost_per_token_above_272k_tokens_regional": 5.5e-06, "input_cost_per_token_flex": 1.25e-06, "input_cost_per_token_batches": 1.25e-06, "input_cost_per_token_priority": 5e-06, @@ -20567,7 +20630,9 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1.5e-05, + "output_cost_per_token_regional": 1.65e-05, "output_cost_per_token_above_272k_tokens": 2.25e-05, + "output_cost_per_token_above_272k_tokens_regional": 2.475e-05, "output_cost_per_token_flex": 7.5e-06, "output_cost_per_token_batches": 7.5e-06, "output_cost_per_token_priority": 3e-05, @@ -20683,10 +20748,12 @@ }, "gpt-5.4-mini": { "cache_read_input_token_cost": 7.5e-08, + "cache_read_input_token_cost_regional": 8.25e-08, "cache_read_input_token_cost_flex": 3.75e-08, "cache_read_input_token_cost_batches": 3.75e-08, "cache_read_input_token_cost_priority": 1.5e-07, "input_cost_per_token": 7.5e-07, + "input_cost_per_token_regional": 8.25e-07, "input_cost_per_token_flex": 3.75e-07, "input_cost_per_token_batches": 3.75e-07, "input_cost_per_token_priority": 1.5e-06, @@ -20696,6 +20763,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 4.5e-06, + "output_cost_per_token_regional": 4.95e-06, "output_cost_per_token_flex": 2.25e-06, "output_cost_per_token_batches": 2.25e-06, "output_cost_per_token_priority": 9e-06, @@ -20729,10 +20797,12 @@ }, "gpt-5.4-mini-2026-03-17": { "cache_read_input_token_cost": 7.5e-08, + "cache_read_input_token_cost_regional": 8.25e-08, "cache_read_input_token_cost_flex": 3.75e-08, "cache_read_input_token_cost_batches": 3.75e-08, "cache_read_input_token_cost_priority": 1.5e-07, "input_cost_per_token": 7.5e-07, + "input_cost_per_token_regional": 8.25e-07, "input_cost_per_token_flex": 3.75e-07, "input_cost_per_token_batches": 3.75e-07, "input_cost_per_token_priority": 1.5e-06, @@ -20742,6 +20812,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 4.5e-06, + "output_cost_per_token_regional": 4.95e-06, "output_cost_per_token_flex": 2.25e-06, "output_cost_per_token_batches": 2.25e-06, "output_cost_per_token_priority": 9e-06, @@ -20933,9 +21004,11 @@ }, "gpt-5-2025-08-07": { "cache_read_input_token_cost": 1.25e-07, + "cache_read_input_token_cost_regional": 1.375e-07, "cache_read_input_token_cost_flex": 6.25e-08, "cache_read_input_token_cost_priority": 2.5e-07, "input_cost_per_token": 1.25e-06, + "input_cost_per_token_regional": 1.375e-06, "input_cost_per_token_flex": 6.25e-07, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", @@ -20944,6 +21017,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_flex": 5e-06, "output_cost_per_token_priority": 2e-05, "supported_endpoints": [ @@ -21080,8 +21154,10 @@ }, "gpt-5.1-codex": { "cache_read_input_token_cost": 1.25e-07, + "cache_read_input_token_cost_regional": 1.375e-07, "cache_read_input_token_cost_priority": 2.5e-07, "input_cost_per_token": 1.25e-06, + "input_cost_per_token_regional": 1.375e-06, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -21089,6 +21165,7 @@ "max_tokens": 128000, "mode": "responses", "output_cost_per_token": 1e-05, + "output_cost_per_token_regional": 1.1e-05, "output_cost_per_token_priority": 2e-05, "supported_endpoints": [ "/v1/responses" @@ -21151,8 +21228,10 @@ }, "gpt-5.1-codex-mini": { "cache_read_input_token_cost": 2.5e-08, + "cache_read_input_token_cost_regional": 2.75e-08, "cache_read_input_token_cost_priority": 4.5e-08, "input_cost_per_token": 2.5e-07, + "input_cost_per_token_regional": 2.75e-07, "input_cost_per_token_priority": 4.5e-07, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -21160,6 +21239,7 @@ "max_tokens": 128000, "mode": "responses", "output_cost_per_token": 2e-06, + "output_cost_per_token_regional": 2.2e-06, "output_cost_per_token_priority": 3.6e-06, "supported_endpoints": [ "/v1/responses" @@ -21188,8 +21268,10 @@ }, "gpt-5.2-codex": { "cache_read_input_token_cost": 1.75e-07, + "cache_read_input_token_cost_regional": 1.925e-07, "cache_read_input_token_cost_priority": 3.5e-07, "input_cost_per_token": 1.75e-06, + "input_cost_per_token_regional": 1.925e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -21197,6 +21279,7 @@ "max_tokens": 128000, "mode": "responses", "output_cost_per_token": 1.4e-05, + "output_cost_per_token_regional": 1.54e-05, "output_cost_per_token_priority": 2.8e-05, "supported_endpoints": [ "/v1/responses" @@ -21225,8 +21308,10 @@ }, "gpt-5.3-codex": { "cache_read_input_token_cost": 1.75e-07, + "cache_read_input_token_cost_regional": 1.925e-07, "cache_read_input_token_cost_priority": 3.5e-07, "input_cost_per_token": 1.75e-06, + "input_cost_per_token_regional": 1.925e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", "max_input_tokens": 272000, @@ -21234,6 +21319,7 @@ "max_tokens": 128000, "mode": "responses", "output_cost_per_token": 1.4e-05, + "output_cost_per_token_regional": 1.54e-05, "output_cost_per_token_priority": 2.8e-05, "supported_endpoints": [ "/v1/responses" @@ -21262,9 +21348,11 @@ }, "gpt-5-mini": { "cache_read_input_token_cost": 2.5e-08, + "cache_read_input_token_cost_regional": 2.75e-08, "cache_read_input_token_cost_flex": 1.25e-08, "cache_read_input_token_cost_priority": 4.5e-08, "input_cost_per_token": 2.5e-07, + "input_cost_per_token_regional": 2.75e-07, "input_cost_per_token_flex": 1.25e-07, "input_cost_per_token_priority": 4.5e-07, "litellm_provider": "openai", @@ -21273,6 +21361,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 2e-06, + "output_cost_per_token_regional": 2.2e-06, "output_cost_per_token_flex": 1e-06, "output_cost_per_token_priority": 3.6e-06, "supported_endpoints": [ @@ -21305,9 +21394,11 @@ }, "gpt-5-mini-2025-08-07": { "cache_read_input_token_cost": 2.5e-08, + "cache_read_input_token_cost_regional": 2.75e-08, "cache_read_input_token_cost_flex": 1.25e-08, "cache_read_input_token_cost_priority": 4.5e-08, "input_cost_per_token": 2.5e-07, + "input_cost_per_token_regional": 2.75e-07, "input_cost_per_token_flex": 1.25e-07, "input_cost_per_token_priority": 4.5e-07, "litellm_provider": "openai", @@ -21316,6 +21407,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 2e-06, + "output_cost_per_token_regional": 2.2e-06, "output_cost_per_token_flex": 1e-06, "output_cost_per_token_priority": 3.6e-06, "supported_endpoints": [ @@ -21348,8 +21440,10 @@ }, "gpt-5-nano": { "cache_read_input_token_cost": 5e-09, + "cache_read_input_token_cost_regional": 5.5e-09, "cache_read_input_token_cost_flex": 2.5e-09, "input_cost_per_token": 5e-08, + "input_cost_per_token_regional": 5.5e-08, "input_cost_per_token_flex": 2.5e-08, "input_cost_per_token_priority": 2.5e-06, "litellm_provider": "openai", @@ -21358,6 +21452,7 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 4e-07, + "output_cost_per_token_regional": 4.4e-07, "output_cost_per_token_flex": 2e-07, "supported_endpoints": [ "/v1/chat/completions", @@ -25293,9 +25388,11 @@ }, "o3": { "cache_read_input_token_cost": 5e-07, + "cache_read_input_token_cost_regional": 5.5e-07, "cache_read_input_token_cost_flex": 2.5e-07, "cache_read_input_token_cost_priority": 8.75e-07, "input_cost_per_token": 2e-06, + "input_cost_per_token_regional": 2.2e-06, "input_cost_per_token_flex": 1e-06, "input_cost_per_token_priority": 3.5e-06, "litellm_provider": "openai", @@ -25304,6 +25401,7 @@ "max_tokens": 100000, "mode": "chat", "output_cost_per_token": 8e-06, + "output_cost_per_token_regional": 8.8e-06, "output_cost_per_token_flex": 4e-06, "output_cost_per_token_priority": 1.4e-05, "supported_endpoints": [ @@ -25529,9 +25627,11 @@ }, "o4-mini": { "cache_read_input_token_cost": 2.75e-07, + "cache_read_input_token_cost_regional": 3.025e-07, "cache_read_input_token_cost_flex": 1.375e-07, "cache_read_input_token_cost_priority": 5e-07, "input_cost_per_token": 1.1e-06, + "input_cost_per_token_regional": 1.21e-06, "input_cost_per_token_flex": 5.5e-07, "input_cost_per_token_priority": 2e-06, "litellm_provider": "openai", @@ -25540,6 +25640,7 @@ "max_tokens": 100000, "mode": "chat", "output_cost_per_token": 4.4e-06, + "output_cost_per_token_regional": 4.84e-06, "output_cost_per_token_flex": 2.2e-06, "output_cost_per_token_priority": 8e-06, "supports_function_calling": true, diff --git a/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py b/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py index a7a2b7720d7..55ff5201bd6 100644 --- a/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py +++ b/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py @@ -1091,6 +1091,169 @@ def test_service_tier_fallback_pricing(): ), f"Standard completion cost mismatch: {std_cost[1]} vs {expected_standard_completion}" +def test_service_tier_regional_pricing(): + """Regional service tier should apply a 10% uplift over standard pricing. + + OpenAI charges a 10% premium when using regional/data-residency processing + on the latest GPT models (see https://developers.openai.com/api/docs/pricing). + """ + os.environ["LITELLM_LOCAL_MODEL_COST_MAP"] = "True" + litellm.model_cost = litellm.get_model_cost_map(url="") + + model = "gpt-5" + custom_llm_provider = "openai" + + usage = Usage(prompt_tokens=1000, completion_tokens=500, total_tokens=1500) + + std_cost = generic_cost_per_token( + model=model, + usage=usage, + custom_llm_provider=custom_llm_provider, + service_tier=None, + ) + regional_cost = generic_cost_per_token( + model=model, + usage=usage, + custom_llm_provider=custom_llm_provider, + service_tier="regional", + ) + + std_total = std_cost[0] + std_cost[1] + regional_total = regional_cost[0] + regional_cost[1] + + assert std_total > 0 + assert regional_total > 0 + + ratio = regional_total / std_total + assert ( + abs(ratio - 1.10) < 0.001 + ), f"Regional pricing should be 10% above standard, got ratio {ratio:.4f}" + + # gpt-5 standard: input=1.25e-06, output=1e-05 + # gpt-5 regional: input=1.375e-06, output=1.1e-05 + expected_regional_prompt = 1000 * 1.375e-06 + expected_regional_completion = 500 * 1.1e-05 + assert abs(regional_cost[0] - expected_regional_prompt) < 1e-10 + assert abs(regional_cost[1] - expected_regional_completion) < 1e-10 + + +def test_service_tier_regional_pricing_case_insensitive(): + """Regional service tier should be matched case-insensitively.""" + os.environ["LITELLM_LOCAL_MODEL_COST_MAP"] = "True" + litellm.model_cost = litellm.get_model_cost_map(url="") + + usage = Usage(prompt_tokens=1000, completion_tokens=500, total_tokens=1500) + + lower = generic_cost_per_token( + model="gpt-5", + usage=usage, + custom_llm_provider="openai", + service_tier="regional", + ) + upper = generic_cost_per_token( + model="gpt-5", + usage=usage, + custom_llm_provider="openai", + service_tier="REGIONAL", + ) + + assert abs(lower[0] - upper[0]) < 1e-12 + assert abs(lower[1] - upper[1]) < 1e-12 + + +def test_service_tier_regional_pricing_fallback(): + """If a model has no regional pricing keys, regional tier falls back to standard.""" + os.environ["LITELLM_LOCAL_MODEL_COST_MAP"] = "True" + litellm.model_cost = litellm.get_model_cost_map(url="") + + # gpt-4 has no regional pricing keys + usage = Usage(prompt_tokens=1000, completion_tokens=500, total_tokens=1500) + + std_cost = generic_cost_per_token( + model="gpt-4", + usage=usage, + custom_llm_provider="openai", + service_tier=None, + ) + regional_cost = generic_cost_per_token( + model="gpt-4", + usage=usage, + custom_llm_provider="openai", + service_tier="regional", + ) + + assert abs(std_cost[0] - regional_cost[0]) < 1e-10 + assert abs(std_cost[1] - regional_cost[1]) < 1e-10 + + +def test_service_tier_regional_pricing_above_threshold(): + """Regional uplift should also apply to above-threshold pricing on models + like gpt-5.4 that price prompts above 272k tokens at a higher rate.""" + os.environ["LITELLM_LOCAL_MODEL_COST_MAP"] = "True" + litellm.model_cost = litellm.get_model_cost_map(url="") + + # Prompt above the 272k threshold + usage = Usage(prompt_tokens=300_000, completion_tokens=1000, total_tokens=301_000) + + std_cost = generic_cost_per_token( + model="gpt-5.4", + usage=usage, + custom_llm_provider="openai", + service_tier=None, + ) + regional_cost = generic_cost_per_token( + model="gpt-5.4", + usage=usage, + custom_llm_provider="openai", + service_tier="regional", + ) + + std_total = std_cost[0] + std_cost[1] + regional_total = regional_cost[0] + regional_cost[1] + + assert std_total > 0 + ratio = regional_total / std_total + assert ( + abs(ratio - 1.10) < 0.001 + ), f"Regional pricing above threshold should be 10% above standard, got {ratio:.4f}" + + +def test_service_tier_regional_cost_key_resolution(): + """_get_service_tier_cost_key should produce the regional suffix for known + tiers (including 'regional').""" + from litellm.litellm_core_utils.llm_cost_calc.utils import ( + _get_service_tier_cost_key, + ) + + assert ( + _get_service_tier_cost_key("input_cost_per_token", "regional") + == "input_cost_per_token_regional" + ) + assert ( + _get_service_tier_cost_key("input_cost_per_token", "REGIONAL") + == "input_cost_per_token_regional" + ) + # Unknown tier falls back to base key + assert ( + _get_service_tier_cost_key("input_cost_per_token", "made-up-tier") + == "input_cost_per_token" + ) + # None returns base key + assert ( + _get_service_tier_cost_key("input_cost_per_token", None) + == "input_cost_per_token" + ) + + +def test_service_tier_enum_contains_regional(): + """ServiceTier enum should expose REGIONAL alongside FLEX and PRIORITY.""" + from litellm.types.utils import ServiceTier + + assert ServiceTier.REGIONAL.value == "regional" + values = {t.value for t in ServiceTier} + assert {"flex", "priority", "regional"}.issubset(values) + + @pytest.mark.parametrize( "model", [ diff --git a/tests/test_litellm/test_cost_calculator.py b/tests/test_litellm/test_cost_calculator.py index d5c1132c5fd..aa9b8fe447e 100644 --- a/tests/test_litellm/test_cost_calculator.py +++ b/tests/test_litellm/test_cost_calculator.py @@ -1705,6 +1705,67 @@ def test_completion_cost_extracts_service_tier_from_usage(): ), f"Flex pricing should be ~50% of standard, got {flex_ratio:.2f}" +def test_completion_cost_extracts_regional_service_tier_from_response(): + """completion_cost should apply OpenAI's regional 10% uplift when the + response carries service_tier='regional'.""" + from litellm import completion_cost + + os.environ["LITELLM_LOCAL_MODEL_COST_MAP"] = "True" + litellm.model_cost = litellm.get_model_cost_map(url="") + + model = "gpt-5" + usage = Usage(prompt_tokens=1000, completion_tokens=500, total_tokens=1500) + + response_regional = ModelResponse(usage=usage, model=model) + setattr(response_regional, "service_tier", "regional") + regional_cost = completion_cost( + completion_response=response_regional, + model=model, + custom_llm_provider="openai", + ) + + response_standard = ModelResponse(usage=usage, model=model) + standard_cost = completion_cost( + completion_response=response_standard, + model=model, + custom_llm_provider="openai", + ) + + assert regional_cost > standard_cost + ratio = regional_cost / standard_cost + assert ( + abs(ratio - 1.10) < 0.001 + ), f"Regional pricing should be 10% above standard, got {ratio:.4f}" + + +def test_completion_cost_regional_service_tier_from_optional_params(): + """Regional uplift should also be picked up from optional_params.""" + from litellm import completion_cost + + os.environ["LITELLM_LOCAL_MODEL_COST_MAP"] = "True" + litellm.model_cost = litellm.get_model_cost_map(url="") + + model = "gpt-5" + usage = Usage(prompt_tokens=1000, completion_tokens=500, total_tokens=1500) + response = ModelResponse(usage=usage, model=model) + + standard_cost = completion_cost( + completion_response=response, + model=model, + custom_llm_provider="openai", + ) + regional_cost = completion_cost( + completion_response=response, + model=model, + custom_llm_provider="openai", + optional_params={"service_tier": "regional"}, + ) + + assert regional_cost > standard_cost + ratio = regional_cost / standard_cost + assert abs(ratio - 1.10) < 0.001 + + def test_completion_cost_service_tier_priority(): """Test that service_tier extraction follows priority: optional_params > completion_response > usage.""" from litellm import completion_cost diff --git a/tests/test_litellm/test_utils.py b/tests/test_litellm/test_utils.py index bc60375f906..d7a51eaa3d9 100644 --- a/tests/test_litellm/test_utils.py +++ b/tests/test_litellm/test_utils.py @@ -721,21 +721,29 @@ def test_aaamodel_prices_and_context_window_json_is_valid(): "input_cost_per_token_above_272k_tokens": {"type": "number"}, "cache_read_input_token_cost_flex": {"type": "number"}, "cache_read_input_token_cost_priority": {"type": "number"}, + "cache_read_input_token_cost_regional": {"type": "number"}, "cache_read_input_token_cost_above_200k_tokens_priority": { "type": "number" }, "cache_read_input_token_cost_above_272k_tokens_priority": { "type": "number" }, + "cache_read_input_token_cost_above_272k_tokens_regional": { + "type": "number" + }, "input_cost_per_token_flex": {"type": "number"}, "input_cost_per_token_priority": {"type": "number"}, + "input_cost_per_token_regional": {"type": "number"}, "input_cost_per_token_above_200k_tokens_priority": {"type": "number"}, "input_cost_per_token_above_272k_tokens_priority": {"type": "number"}, + "input_cost_per_token_above_272k_tokens_regional": {"type": "number"}, "input_cost_per_audio_token_priority": {"type": "number"}, "output_cost_per_token_flex": {"type": "number"}, "output_cost_per_token_priority": {"type": "number"}, + "output_cost_per_token_regional": {"type": "number"}, "output_cost_per_token_above_200k_tokens_priority": {"type": "number"}, "output_cost_per_token_above_272k_tokens_priority": {"type": "number"}, + "output_cost_per_token_above_272k_tokens_regional": {"type": "number"}, "input_cost_per_pixel": {"type": "number"}, "input_cost_per_query": {"type": "number"}, "input_cost_per_request": {"type": "number"},