fix(vertex-ai): sync tier prices and retirement floors (#49964)

* fix(vertex-ai): sync audio tier prices and retirement floors

* fix(vertex-ai): apply ruled long-context and image tier prices

* fix(vertex-ai): support modality and long-context tier rates

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* test(vertex-ai): allow the published long-context audio premium

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
devin-ai-integration[bot] 2026-11-04 00:03:54 +00:00 • committed by GitHub
parent 65950dba8b
commit 62f85afacf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 555 additions and 173 deletions

View file

@ -49,6 +49,8 @@ from litellm.litellm_core_utils.llm_cost_calc.utils import (
generic_cost_per_token, generic_cost_per_token,
get_batch_cost_rates, get_batch_cost_rates,
get_billable_input_tokens, get_billable_input_tokens,
get_cost_per_unit,
get_modality_token_cost_key,
get_regional_uplift_multiplier, get_regional_uplift_multiplier,
get_service_tier_cost_key, get_service_tier_cost_key,
get_token_type_cost_breakdown, get_token_type_cost_breakdown,
@ -3186,8 +3188,12 @@ def _batch_rate(
"input_cost_per_video_token_batches", "input_cost_per_video_token_batches",
], ],
fallback: float, fallback: float,
*,
prompt_tokens: int = 0,
) -> float: ) -> float:
rate: Final = model_info.get(key) context_key: Final = get_modality_token_cost_key(model_info, key, prompt_tokens)
context_rate: Final = get_cost_per_unit(model_info, context_key, None)
rate: Final = model_info.get(key) if context_rate is None else context_rate
return fallback if rate is None else rate return fallback if rate is None else rate
@ -3337,7 +3343,8 @@ def _batch_prompt_cost(
) )
return ( return (
text_tokens * input_rate text_tokens * input_rate
+ audio_tokens * _batch_rate(model_info, "input_cost_per_audio_token_batches", input_rate) + audio_tokens
* _batch_rate(model_info, "input_cost_per_audio_token_batches", input_rate, prompt_tokens=usage.prompt_tokens)
+ image_tokens * _batch_rate(model_info, "input_cost_per_image_token_batches", input_rate) + image_tokens * _batch_rate(model_info, "input_cost_per_image_token_batches", input_rate)
+ video_tokens * _batch_rate(model_info, "input_cost_per_video_token_batches", input_rate) + video_tokens * _batch_rate(model_info, "input_cost_per_video_token_batches", input_rate)
+ (cached_tokens - cached_audio_tokens) * (cache_read_rate or 0.0) + (cached_tokens - cached_audio_tokens) * (cache_read_rate or 0.0)

View file

@ -1203,21 +1203,55 @@ def parse_completion_tokens_details(usage: Usage) -> CompletionTokensDetailsResu
) )
def get_modality_token_cost_key(
model_info: ModelInfo,
cost_key: str,
prompt_tokens: int,
*,
threshold_is_inclusive: bool = False,
) -> str:
suffix: Final = next((suffix for suffix in _NON_STANDARD_THRESHOLD_SUFFIXES if cost_key.endswith(suffix)), "")
base_key: Final = cost_key.removesuffix(suffix)
threshold_key: Final = max(
(
key
for key in model_info
if key.startswith(f"{base_key}_above_")
and key.endswith(("_tokens", f"_tokens{suffix}"))
and model_info.get(key) is not None
and _prompt_exceeds_threshold(prompt_tokens, _parse_above_token_threshold(key), threshold_is_inclusive)
),
key=_parse_above_token_threshold,
default=None,
)
if threshold_key is None:
return cost_key
return f"{threshold_key.removesuffix(suffix)}{suffix}"
def _modality_token_cost( def _modality_token_cost(
model_info: ModelInfo, model_info: ModelInfo,
modality_cost_key: str, modality_cost_key: str,
tokens: int, tokens: int,
prompt_base_cost: float, prompt_base_cost: float,
service_tier: str | None, service_tier: str | None,
*,
prompt_tokens: int = 0,
threshold_is_inclusive: bool = False,
) -> float: ) -> float:
""" """
Audio, image and video prompt tokens bill at their modality rate when the model has one. Audio, image and video prompt tokens bill at their modality rate when the model has one.
Without one they are ordinary prompt tokens, so they bill at `prompt_base_cost`, which Without one they are ordinary prompt tokens, so they bill at `prompt_base_cost`, which
`_get_token_base_cost` has already resolved for the service tier and long-context tier. `_get_token_base_cost` has already resolved for the service tier and long-context tier.
""" """
tiered_key: Final = get_service_tier_cost_key(modality_cost_key, service_tier) cost_key: Final = get_modality_token_cost_key(
cost_key: Final = tiered_key if model_info.get(tiered_key) is not None else modality_cost_key model_info,
if model_info.get(cost_key) is None: get_service_tier_cost_key(modality_cost_key, service_tier),
prompt_tokens,
threshold_is_inclusive=threshold_is_inclusive,
)
standard_key: Final = cost_key.removesuffix(get_service_tier_cost_key("", service_tier))
if model_info.get(cost_key) is None and model_info.get(standard_key) is None:
return float(tokens) * prompt_base_cost return float(tokens) * prompt_base_cost
return calculate_cost_component(model_info, cost_key, tokens) return calculate_cost_component(model_info, cost_key, tokens)
@ -1230,6 +1264,9 @@ def _calculate_input_cost(
cache_creation_cost: float, cache_creation_cost: float,
cache_creation_cost_by_ttl: Mapping[str, float], cache_creation_cost_by_ttl: Mapping[str, float],
service_tier: str | None = None, service_tier: str | None = None,
*,
prompt_tokens: int = 0,
threshold_is_inclusive: bool = False,
) -> float: ) -> float:
""" """
Calculates the input cost for a given model, prompt tokens, and completion tokens. Calculates the input cost for a given model, prompt tokens, and completion tokens.
@ -1260,6 +1297,8 @@ def _calculate_input_cost(
prompt_tokens_details["audio_tokens"], prompt_tokens_details["audio_tokens"],
prompt_base_cost, prompt_base_cost,
service_tier, service_tier,
prompt_tokens=prompt_tokens,
threshold_is_inclusive=threshold_is_inclusive,
) )
### IMAGE TOKEN COST ### IMAGE TOKEN COST
@ -1618,6 +1657,8 @@ def generic_cost_per_token(
cache_creation_cost=base_costs.cache_creation_rate, cache_creation_cost=base_costs.cache_creation_rate,
cache_creation_cost_by_ttl=base_costs.cache_creation_rates_by_ttl, cache_creation_cost_by_ttl=base_costs.cache_creation_rates_by_ttl,
service_tier=service_tier, service_tier=service_tier,
prompt_tokens=usage.prompt_tokens,
threshold_is_inclusive=_uses_inclusive_token_thresholds(custom_llm_provider),
) )
## CALCULATE OUTPUT COST ## CALCULATE OUTPUT COST
@ -1675,11 +1716,9 @@ def generic_cost_per_token(
## IMAGE COST ## IMAGE COST
if not is_text_tokens_total and image_tokens and image_tokens > 0: if not is_text_tokens_total and image_tokens and image_tokens > 0:
_output_cost_per_image_token = get_cost_per_unit(resolved_model_info, "output_cost_per_image_token", None) image_cost_key: Final = get_service_tier_cost_key("output_cost_per_image_token", service_tier)
_output_cost_per_image_token = ( image_rate: Final = get_cost_per_unit(resolved_model_info, image_cost_key, None)
_output_cost_per_image_token if _output_cost_per_image_token is not None else completion_base_cost completion_cost += float(image_tokens) * (completion_base_cost if image_rate is None else image_rate)
)
completion_cost += float(image_tokens) * _output_cost_per_image_token
## VIDEO COST ## VIDEO COST
if not is_text_tokens_total and video_tokens and video_tokens > 0: if not is_text_tokens_total and video_tokens and video_tokens > 0:

View file

@ -29951,21 +29951,38 @@
}, },
"gemini-2.5-flash": { "gemini-2.5-flash": {
"cache_read_input_audio_token_cost": 1e-07, "cache_read_input_audio_token_cost": 1e-07,
"deprecation_date": "2026-10-20",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions", "deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"successor_model": "gemini-3.8-flash", "cache_read_input_audio_token_cost_priority": 1.8e-07,
"cache_read_input_token_cost": 3e-08, "cache_read_input_token_cost": 3e-08,
"cache_read_input_token_cost_flex": 3e-08, "cache_read_input_token_cost_flex": 3e-08,
"cache_read_input_token_cost_priority": 5.4e-08, "cache_read_input_token_cost_priority": 5.4e-08,
"deprecation_date": "2026-10-20",
"google_maps_grounding_cost_per_query": 0.025,
"input_cost_per_audio_token": 1e-06, "input_cost_per_audio_token": 1e-06,
"input_cost_per_audio_token_above_200k_tokens": 3e-07,
"input_cost_per_audio_token_above_200k_tokens_batches": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_flex": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_priority": 1.8e-06,
"input_cost_per_audio_token_batches": 5e-07,
"input_cost_per_audio_token_flex": 5e-07,
"input_cost_per_audio_token_priority": 1.8e-06,
"input_cost_per_token": 3e-07, "input_cost_per_token": 3e-07,
"input_cost_per_token_batches": 1.5e-07,
"input_cost_per_token_flex": 1.5e-07,
"input_cost_per_token_priority": 5.4e-07,
"litellm_provider": "vertex_ai-language-models", "litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576, "max_input_tokens": 1048576,
"max_output_tokens": 65535, "max_output_tokens": 65535,
"mode": "chat", "mode": "chat",
"output_cost_per_reasoning_token": 2.5e-06, "output_cost_per_reasoning_token": 2.5e-06,
"output_cost_per_token": 2.5e-06, "output_cost_per_token": 2.5e-06,
"output_cost_per_token_batches": 1.25e-06,
"output_cost_per_token_flex": 1.25e-06,
"output_cost_per_token_priority": 4.5e-06,
"search_context_cost_per_query": {"search_context_size_low":0.035,"search_context_size_medium":0.035,"search_context_size_high":0.035},
"search_free_requests": {"count":1500,"period":"day","shared_group":"gemini-2-flash"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing", "source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"successor_model": "gemini-3.8-flash",
"supported_endpoints": [ "supported_endpoints": [
"/v1/chat/completions", "/v1/chat/completions",
"/v1/completions", "/v1/completions",
@ -29982,6 +29999,7 @@
], ],
"supports_audio_output": false, "supports_audio_output": false,
"supports_function_calling": true, "supports_function_calling": true,
"supports_image_size": false,
"supports_parallel_function_calling": true, "supports_parallel_function_calling": true,
"supports_pdf_input": true, "supports_pdf_input": true,
"supports_prompt_caching": true, "supports_prompt_caching": true,
@ -29991,23 +30009,7 @@
"supports_tool_choice": true, "supports_tool_choice": true,
"supports_url_context": true, "supports_url_context": true,
"supports_vision": true, "supports_vision": true,
"supports_web_search": true, "supports_web_search": true
"search_context_cost_per_query": {
"search_context_size_low": 0.035,
"search_context_size_medium": 0.035,
"search_context_size_high": 0.035
},
"search_free_requests": {"count": 1500, "period": "day", "shared_group": "gemini-2-flash"},
"google_maps_grounding_cost_per_query": 0.025,
"input_cost_per_audio_token_batches": 5e-07,
"input_cost_per_token_batches": 1.5e-07,
"input_cost_per_token_flex": 1.5e-07,
"input_cost_per_token_priority": 5.4e-07,
"input_cost_per_audio_token_priority": 1.8e-06,
"output_cost_per_token_batches": 1.25e-06,
"output_cost_per_token_flex": 1.25e-06,
"output_cost_per_token_priority": 4.5e-06,
"supports_image_size": false
}, },
"gemini-2.5-flash-image": { "gemini-2.5-flash-image": {
"deprecation_date": "2027-03-15", "deprecation_date": "2027-03-15",
@ -30083,6 +30085,7 @@
"output_cost_per_image": 0.134, "output_cost_per_image": 0.134,
"output_cost_per_image_token": 0.00012, "output_cost_per_image_token": 0.00012,
"output_cost_per_image_token_batches": 6e-05, "output_cost_per_image_token_batches": 6e-05,
"output_cost_per_image_token_priority": 0.000216,
"output_cost_per_token": 1.2e-05, "output_cost_per_token": 1.2e-05,
"output_cost_per_token_above_200k_tokens": 1.8e-05, "output_cost_per_token_above_200k_tokens": 1.8e-05,
"output_cost_per_token_above_200k_tokens_priority": 3.24e-05, "output_cost_per_token_above_200k_tokens_priority": 3.24e-05,
@ -30137,6 +30140,7 @@
"output_cost_per_image": 0.134, "output_cost_per_image": 0.134,
"output_cost_per_image_token": 0.00012, "output_cost_per_image_token": 0.00012,
"output_cost_per_image_token_batches": 6e-05, "output_cost_per_image_token_batches": 6e-05,
"output_cost_per_image_token_priority": 0.000216,
"output_cost_per_token": 1.2e-05, "output_cost_per_token": 1.2e-05,
"output_cost_per_token_priority": 2.16e-05, "output_cost_per_token_priority": 2.16e-05,
"output_cost_per_token_above_200k_tokens": 1.8e-05, "output_cost_per_token_above_200k_tokens": 1.8e-05,
@ -30190,6 +30194,7 @@
"output_cost_per_image": 0.0672, "output_cost_per_image": 0.0672,
"output_cost_per_image_token": 6e-05, "output_cost_per_image_token": 6e-05,
"output_cost_per_image_token_batches": 3e-05, "output_cost_per_image_token_batches": 3e-05,
"output_cost_per_image_token_priority": 0.000108,
"output_cost_per_token": 3e-06, "output_cost_per_token": 3e-06,
"output_cost_per_token_batches": 1.5e-06, "output_cost_per_token_batches": 1.5e-06,
"output_cost_per_token_flex": 1.5e-06, "output_cost_per_token_flex": 1.5e-06,
@ -30236,6 +30241,7 @@
"output_cost_per_image": 0.0672, "output_cost_per_image": 0.0672,
"output_cost_per_image_token": 6e-05, "output_cost_per_image_token": 6e-05,
"output_cost_per_image_token_batches": 3e-05, "output_cost_per_image_token_batches": 3e-05,
"output_cost_per_image_token_priority": 0.000108,
"output_cost_per_token": 3e-06, "output_cost_per_token": 3e-06,
"output_cost_per_token_batches": 1.5e-06, "output_cost_per_token_batches": 1.5e-06,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing", "source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
@ -30268,8 +30274,6 @@
"web_search_billing_unit": "per_query" "web_search_billing_unit": "per_query"
}, },
"gemini-3.1-flash-lite-image": { "gemini-3.1-flash-lite-image": {
"deprecation_date": "2027-06-28",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"cache_read_input_token_cost": 2.5e-08, "cache_read_input_token_cost": 2.5e-08,
"cache_read_input_token_cost_batches": 1.25e-08, "cache_read_input_token_cost_batches": 1.25e-08,
"cache_read_input_token_cost_flex": 1.25e-08, "cache_read_input_token_cost_flex": 1.25e-08,
@ -30286,6 +30290,7 @@
"output_cost_per_image": 0.0336, "output_cost_per_image": 0.0336,
"output_cost_per_image_token": 3e-05, "output_cost_per_image_token": 3e-05,
"output_cost_per_image_token_batches": 1.5e-05, "output_cost_per_image_token_batches": 1.5e-05,
"output_cost_per_image_token_priority": 5.4e-05,
"output_cost_per_token": 1.5e-06, "output_cost_per_token": 1.5e-06,
"output_cost_per_token_batches": 7.5e-07, "output_cost_per_token_batches": 7.5e-07,
"output_cost_per_token_flex": 7.5e-07, "output_cost_per_token_flex": 7.5e-07,
@ -30366,19 +30371,28 @@
}, },
"gemini-3.1-flash-lite": { "gemini-3.1-flash-lite": {
"cache_read_input_audio_token_cost": 5e-08, "cache_read_input_audio_token_cost": 5e-08,
"deprecation_date": "2027-05-07",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions", "deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"successor_model": "gemini-3.5-flash-lite", "cache_read_input_audio_token_cost_batches": 2.5e-08,
"cache_read_input_audio_token_cost_flex": 2.5e-08,
"cache_read_input_audio_token_cost_priority": 9e-08,
"cache_read_input_token_cost": 2.5e-08, "cache_read_input_token_cost": 2.5e-08,
"cache_read_input_token_cost_batches": 1.25e-08, "cache_read_input_token_cost_batches": 1.25e-08,
"cache_read_input_token_cost_flex": 1.25e-08, "cache_read_input_token_cost_flex": 1.25e-08,
"cache_read_input_token_cost_priority": 4.5e-08, "cache_read_input_token_cost_priority": 4.5e-08,
"deprecation_date": "2027-05-07",
"google_maps_grounding_cost_per_query": 0.014,
"input_cost_per_audio_token": 5e-07, "input_cost_per_audio_token": 5e-07,
"input_cost_per_audio_token_above_200k_tokens": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_batches": 2.5e-07,
"input_cost_per_audio_token_above_200k_tokens_flex": 2.5e-07,
"input_cost_per_audio_token_above_200k_tokens_priority": 9e-07,
"input_cost_per_audio_token_batches": 2.5e-07,
"input_cost_per_audio_token_flex": 2.5e-07,
"input_cost_per_audio_token_priority": 9e-07,
"input_cost_per_token": 2.5e-07, "input_cost_per_token": 2.5e-07,
"input_cost_per_token_batches": 1.25e-07, "input_cost_per_token_batches": 1.25e-07,
"input_cost_per_token_flex": 1.25e-07, "input_cost_per_token_flex": 1.25e-07,
"input_cost_per_token_priority": 4.5e-07, "input_cost_per_token_priority": 4.5e-07,
"input_cost_per_audio_token_priority": 9e-07,
"litellm_provider": "vertex_ai-language-models", "litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576, "max_input_tokens": 1048576,
"max_output_tokens": 65536, "max_output_tokens": 65536,
@ -30388,7 +30402,10 @@
"output_cost_per_token_batches": 7.5e-07, "output_cost_per_token_batches": 7.5e-07,
"output_cost_per_token_flex": 7.5e-07, "output_cost_per_token_flex": 7.5e-07,
"output_cost_per_token_priority": 2.7e-06, "output_cost_per_token_priority": 2.7e-06,
"search_context_cost_per_query": {"search_context_size_low":0.014,"search_context_size_medium":0.014,"search_context_size_high":0.014},
"search_free_requests": {"count":5000,"period":"month","shared_group":"gemini-3"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing", "source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"successor_model": "gemini-3.5-flash-lite",
"supported_endpoints": [ "supported_endpoints": [
"/v1/chat/completions", "/v1/chat/completions",
"/v1/completions", "/v1/completions",
@ -30406,6 +30423,7 @@
"supports_audio_input": true, "supports_audio_input": true,
"supports_audio_output": false, "supports_audio_output": false,
"supports_function_calling": true, "supports_function_calling": true,
"supports_native_streaming": true,
"supports_parallel_function_calling": true, "supports_parallel_function_calling": true,
"supports_pdf_input": true, "supports_pdf_input": true,
"supports_prompt_caching": true, "supports_prompt_caching": true,
@ -30417,16 +30435,7 @@
"supports_video_input": true, "supports_video_input": true,
"supports_vision": true, "supports_vision": true,
"supports_web_search": true, "supports_web_search": true,
"supports_native_streaming": true, "web_search_billing_unit": "per_query"
"search_context_cost_per_query": {
"search_context_size_low": 0.014,
"search_context_size_medium": 0.014,
"search_context_size_high": 0.014
},
"search_free_requests": {"count": 5000, "period": "month", "shared_group": "gemini-3"},
"web_search_billing_unit": "per_query",
"google_maps_grounding_cost_per_query": 0.014,
"input_cost_per_audio_token_batches": 2.5e-07
}, },
"gemini-3.5-flash-lite": { "gemini-3.5-flash-lite": {
"deprecation_date": "2027-07-21", "deprecation_date": "2027-07-21",
@ -30526,21 +30535,38 @@
}, },
"gemini-2.5-flash-lite": { "gemini-2.5-flash-lite": {
"cache_read_input_audio_token_cost": 3e-08, "cache_read_input_audio_token_cost": 3e-08,
"deprecation_date": "2026-10-20",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions", "deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"successor_model": "gemini-3.8-flash", "cache_read_input_audio_token_cost_priority": 5.4e-08,
"cache_read_input_token_cost": 1e-08, "cache_read_input_token_cost": 1e-08,
"cache_read_input_token_cost_flex": 1e-08, "cache_read_input_token_cost_flex": 1e-08,
"cache_read_input_token_cost_priority": 1.8e-08, "cache_read_input_token_cost_priority": 1.8e-08,
"deprecation_date": "2026-10-20",
"google_maps_grounding_cost_per_query": 0.025,
"input_cost_per_audio_token": 3e-07, "input_cost_per_audio_token": 3e-07,
"input_cost_per_audio_token_above_200k_tokens": 3e-07,
"input_cost_per_audio_token_above_200k_tokens_batches": 5e-08,
"input_cost_per_audio_token_above_200k_tokens_flex": 5e-08,
"input_cost_per_audio_token_above_200k_tokens_priority": 5.4e-07,
"input_cost_per_audio_token_batches": 5e-08,
"input_cost_per_audio_token_flex": 5e-08,
"input_cost_per_audio_token_priority": 5.4e-07,
"input_cost_per_token": 1e-07, "input_cost_per_token": 1e-07,
"input_cost_per_token_batches": 5e-08,
"input_cost_per_token_flex": 5e-08,
"input_cost_per_token_priority": 1.8e-07,
"litellm_provider": "vertex_ai-language-models", "litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576, "max_input_tokens": 1048576,
"max_output_tokens": 65535, "max_output_tokens": 65535,
"mode": "chat", "mode": "chat",
"output_cost_per_reasoning_token": 4e-07, "output_cost_per_reasoning_token": 4e-07,
"output_cost_per_token": 4e-07, "output_cost_per_token": 4e-07,
"output_cost_per_token_batches": 2e-07,
"output_cost_per_token_flex": 2e-07,
"output_cost_per_token_priority": 7.2e-07,
"search_context_cost_per_query": {"search_context_size_low":0.035,"search_context_size_medium":0.035,"search_context_size_high":0.035},
"search_free_requests": {"count":1500,"period":"day","shared_group":"gemini-2-flash"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing", "source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"successor_model": "gemini-3.8-flash",
"supported_endpoints": [ "supported_endpoints": [
"/v1/chat/completions", "/v1/chat/completions",
"/v1/completions", "/v1/completions",
@ -30557,6 +30583,7 @@
], ],
"supports_audio_output": false, "supports_audio_output": false,
"supports_function_calling": true, "supports_function_calling": true,
"supports_image_size": false,
"supports_parallel_function_calling": true, "supports_parallel_function_calling": true,
"supports_pdf_input": true, "supports_pdf_input": true,
"supports_prompt_caching": true, "supports_prompt_caching": true,
@ -30566,23 +30593,7 @@
"supports_tool_choice": true, "supports_tool_choice": true,
"supports_url_context": true, "supports_url_context": true,
"supports_vision": true, "supports_vision": true,
"supports_web_search": true, "supports_web_search": true
"search_context_cost_per_query": {
"search_context_size_low": 0.035,
"search_context_size_medium": 0.035,
"search_context_size_high": 0.035
},
"search_free_requests": {"count": 1500, "period": "day", "shared_group": "gemini-2-flash"},
"google_maps_grounding_cost_per_query": 0.025,
"input_cost_per_audio_token_batches": 5e-08,
"input_cost_per_token_batches": 5e-08,
"input_cost_per_token_flex": 5e-08,
"input_cost_per_token_priority": 1.8e-07,
"input_cost_per_audio_token_priority": 5.4e-07,
"output_cost_per_token_batches": 2e-07,
"output_cost_per_token_flex": 2e-07,
"output_cost_per_token_priority": 7.2e-07,
"supports_image_size": false
}, },
"gemini-2.5-flash-lite-preview-09-2025": { "gemini-2.5-flash-lite-preview-09-2025": {
"cache_read_input_token_cost": 1e-08, "cache_read_input_token_cost": 1e-08,
@ -30863,11 +30874,13 @@
"search_free_requests": {"count": 10000, "period": "day", "shared_group": "gemini-2.5-pro"}, "search_free_requests": {"count": 10000, "period": "day", "shared_group": "gemini-2.5-pro"},
"google_maps_grounding_cost_per_query": 0.025, "google_maps_grounding_cost_per_query": 0.025,
"input_cost_per_token_above_200k_tokens_batches": 1.25e-06, "input_cost_per_token_above_200k_tokens_batches": 1.25e-06,
"input_cost_per_token_above_200k_tokens_flex": 1.25e-06,
"input_cost_per_token_above_200k_tokens_priority": 4.5e-06, "input_cost_per_token_above_200k_tokens_priority": 4.5e-06,
"input_cost_per_token_batches": 6.25e-07, "input_cost_per_token_batches": 6.25e-07,
"input_cost_per_token_flex": 6.25e-07, "input_cost_per_token_flex": 6.25e-07,
"input_cost_per_token_priority": 2.25e-06, "input_cost_per_token_priority": 2.25e-06,
"output_cost_per_token_above_200k_tokens_batches": 7.5e-06, "output_cost_per_token_above_200k_tokens_batches": 7.5e-06,
"output_cost_per_token_above_200k_tokens_flex": 7.5e-06,
"output_cost_per_token_above_200k_tokens_priority": 2.7e-05, "output_cost_per_token_above_200k_tokens_priority": 2.7e-05,
"output_cost_per_token_batches": 5e-06, "output_cost_per_token_batches": 5e-06,
"output_cost_per_token_flex": 5e-06, "output_cost_per_token_flex": 5e-06,
@ -30883,6 +30896,7 @@
"input_cost_per_token": 2e-06, "input_cost_per_token": 2e-06,
"input_cost_per_token_above_200k_tokens": 4e-06, "input_cost_per_token_above_200k_tokens": 4e-06,
"input_cost_per_token_above_200k_tokens_batches": 2e-06, "input_cost_per_token_above_200k_tokens_batches": 2e-06,
"input_cost_per_token_above_200k_tokens_flex": 2e-06,
"input_cost_per_token_above_200k_tokens_priority": 7.2e-06, "input_cost_per_token_above_200k_tokens_priority": 7.2e-06,
"input_cost_per_token_batches": 1e-06, "input_cost_per_token_batches": 1e-06,
"input_cost_per_token_flex": 1e-06, "input_cost_per_token_flex": 1e-06,
@ -30895,6 +30909,7 @@
"output_cost_per_token": 1.2e-05, "output_cost_per_token": 1.2e-05,
"output_cost_per_token_above_200k_tokens": 1.8e-05, "output_cost_per_token_above_200k_tokens": 1.8e-05,
"output_cost_per_token_above_200k_tokens_batches": 9e-06, "output_cost_per_token_above_200k_tokens_batches": 9e-06,
"output_cost_per_token_above_200k_tokens_flex": 9e-06,
"output_cost_per_token_above_200k_tokens_priority": 3.24e-05, "output_cost_per_token_above_200k_tokens_priority": 3.24e-05,
"output_cost_per_token_batches": 6e-06, "output_cost_per_token_batches": 6e-06,
"output_cost_per_token_flex": 6e-06, "output_cost_per_token_flex": 6e-06,
@ -31042,11 +31057,17 @@
}, },
"vertex_ai/gemini-3-flash-preview": { "vertex_ai/gemini-3-flash-preview": {
"cache_read_input_audio_token_cost": 1e-07, "cache_read_input_audio_token_cost": 1e-07,
"cache_read_input_audio_token_cost_priority": 1.8e-07,
"cache_read_input_token_cost": 5e-08, "cache_read_input_token_cost": 5e-08,
"cache_read_input_token_cost_priority": 9e-08, "cache_read_input_token_cost_priority": 9e-08,
"google_maps_grounding_cost_per_query": 0.014, "google_maps_grounding_cost_per_query": 0.014,
"input_cost_per_audio_token": 1e-06, "input_cost_per_audio_token": 1e-06,
"input_cost_per_audio_token_above_200k_tokens": 1e-06,
"input_cost_per_audio_token_above_200k_tokens_batches": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_flex": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_priority": 1.8e-06,
"input_cost_per_audio_token_batches": 5e-07, "input_cost_per_audio_token_batches": 5e-07,
"input_cost_per_audio_token_flex": 5e-07,
"input_cost_per_audio_token_priority": 1.8e-06, "input_cost_per_audio_token_priority": 1.8e-06,
"input_cost_per_token": 5e-07, "input_cost_per_token": 5e-07,
"input_cost_per_token_batches": 2.5e-07, "input_cost_per_token_batches": 2.5e-07,
@ -31284,8 +31305,6 @@
"google_maps_grounding_cost_per_query": 0.014 "google_maps_grounding_cost_per_query": 0.014
}, },
"vertex_ai/gemini-3.8-flash": { "vertex_ai/gemini-3.8-flash": {
"deprecation_date": "2027-09-02",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"cache_read_input_token_cost": 7.5e-08, "cache_read_input_token_cost": 7.5e-08,
"cache_read_input_token_cost_batches": 3.75e-08, "cache_read_input_token_cost_batches": 3.75e-08,
"cache_read_input_token_cost_flex": 3.75e-08, "cache_read_input_token_cost_flex": 3.75e-08,
@ -31392,8 +31411,6 @@
"supports_native_streaming": true "supports_native_streaming": true
}, },
"vertex_ai/gemini-3.8-live": { "vertex_ai/gemini-3.8-live": {
"deprecation_date": "2027-09-25",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"gemini_audio_only_live": true, "gemini_audio_only_live": true,
"input_cost_per_audio_token": 3e-06, "input_cost_per_audio_token": 3e-06,
"input_cost_per_image_token": 1e-06, "input_cost_per_image_token": 1e-06,
@ -31439,6 +31456,7 @@
"input_cost_per_token": 2e-06, "input_cost_per_token": 2e-06,
"input_cost_per_token_above_200k_tokens": 4e-06, "input_cost_per_token_above_200k_tokens": 4e-06,
"input_cost_per_token_above_200k_tokens_batches": 2e-06, "input_cost_per_token_above_200k_tokens_batches": 2e-06,
"input_cost_per_token_above_200k_tokens_flex": 2e-06,
"input_cost_per_token_above_200k_tokens_priority": 7.2e-06, "input_cost_per_token_above_200k_tokens_priority": 7.2e-06,
"input_cost_per_token_batches": 1e-06, "input_cost_per_token_batches": 1e-06,
"input_cost_per_token_flex": 1e-06, "input_cost_per_token_flex": 1e-06,
@ -31451,6 +31469,7 @@
"output_cost_per_token": 1.2e-05, "output_cost_per_token": 1.2e-05,
"output_cost_per_token_above_200k_tokens": 1.8e-05, "output_cost_per_token_above_200k_tokens": 1.8e-05,
"output_cost_per_token_above_200k_tokens_batches": 9e-06, "output_cost_per_token_above_200k_tokens_batches": 9e-06,
"output_cost_per_token_above_200k_tokens_flex": 9e-06,
"output_cost_per_token_above_200k_tokens_priority": 3.24e-05, "output_cost_per_token_above_200k_tokens_priority": 3.24e-05,
"output_cost_per_token_batches": 6e-06, "output_cost_per_token_batches": 6e-06,
"output_cost_per_token_flex": 6e-06, "output_cost_per_token_flex": 6e-06,
@ -33332,11 +33351,17 @@
}, },
"gemini-3-flash-preview": { "gemini-3-flash-preview": {
"cache_read_input_audio_token_cost": 1e-07, "cache_read_input_audio_token_cost": 1e-07,
"cache_read_input_audio_token_cost_priority": 1.8e-07,
"cache_read_input_token_cost": 5e-08, "cache_read_input_token_cost": 5e-08,
"cache_read_input_token_cost_priority": 9e-08, "cache_read_input_token_cost_priority": 9e-08,
"google_maps_grounding_cost_per_query": 0.014, "google_maps_grounding_cost_per_query": 0.014,
"input_cost_per_audio_token": 1e-06, "input_cost_per_audio_token": 1e-06,
"input_cost_per_audio_token_above_200k_tokens": 1e-06,
"input_cost_per_audio_token_above_200k_tokens_batches": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_flex": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_priority": 1.8e-06,
"input_cost_per_audio_token_batches": 5e-07, "input_cost_per_audio_token_batches": 5e-07,
"input_cost_per_audio_token_flex": 5e-07,
"input_cost_per_audio_token_priority": 1.8e-06, "input_cost_per_audio_token_priority": 1.8e-06,
"input_cost_per_token": 5e-07, "input_cost_per_token": 5e-07,
"input_cost_per_token_batches": 2.5e-07, "input_cost_per_token_batches": 2.5e-07,
@ -33607,8 +33632,6 @@
"google_maps_grounding_cost_per_query": 0.014 "google_maps_grounding_cost_per_query": 0.014
}, },
"gemini-3.8-flash": { "gemini-3.8-flash": {
"deprecation_date": "2027-09-02",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"cache_read_input_token_cost": 7.5e-08, "cache_read_input_token_cost": 7.5e-08,
"cache_read_input_token_cost_batches": 3.75e-08, "cache_read_input_token_cost_batches": 3.75e-08,
"cache_read_input_token_cost_flex": 3.75e-08, "cache_read_input_token_cost_flex": 3.75e-08,
@ -53876,6 +53899,7 @@
"output_cost_per_image": 0.134, "output_cost_per_image": 0.134,
"output_cost_per_image_token": 0.00012, "output_cost_per_image_token": 0.00012,
"output_cost_per_image_token_batches": 6e-05, "output_cost_per_image_token_batches": 6e-05,
"output_cost_per_image_token_priority": 0.000216,
"output_cost_per_token": 1.2e-05, "output_cost_per_token": 1.2e-05,
"output_cost_per_token_above_200k_tokens": 1.8e-05, "output_cost_per_token_above_200k_tokens": 1.8e-05,
"output_cost_per_token_above_200k_tokens_priority": 3.24e-05, "output_cost_per_token_above_200k_tokens_priority": 3.24e-05,
@ -53911,6 +53935,7 @@
"output_cost_per_image": 0.134, "output_cost_per_image": 0.134,
"output_cost_per_image_token": 0.00012, "output_cost_per_image_token": 0.00012,
"output_cost_per_image_token_batches": 6e-05, "output_cost_per_image_token_batches": 6e-05,
"output_cost_per_image_token_priority": 0.000216,
"output_cost_per_token": 1.2e-05, "output_cost_per_token": 1.2e-05,
"output_cost_per_token_priority": 2.16e-05, "output_cost_per_token_priority": 2.16e-05,
"output_cost_per_token_above_200k_tokens": 1.8e-05, "output_cost_per_token_above_200k_tokens": 1.8e-05,
@ -53945,6 +53970,7 @@
"output_cost_per_image": 0.0672, "output_cost_per_image": 0.0672,
"output_cost_per_image_token": 6e-05, "output_cost_per_image_token": 6e-05,
"output_cost_per_image_token_batches": 3e-05, "output_cost_per_image_token_batches": 3e-05,
"output_cost_per_image_token_priority": 0.000108,
"output_cost_per_token": 3e-06, "output_cost_per_token": 3e-06,
"output_cost_per_token_batches": 1.5e-06, "output_cost_per_token_batches": 1.5e-06,
"output_cost_per_token_flex": 1.5e-06, "output_cost_per_token_flex": 1.5e-06,
@ -53973,6 +53999,7 @@
"output_cost_per_image": 0.0672, "output_cost_per_image": 0.0672,
"output_cost_per_image_token": 6e-05, "output_cost_per_image_token": 6e-05,
"output_cost_per_image_token_batches": 3e-05, "output_cost_per_image_token_batches": 3e-05,
"output_cost_per_image_token_priority": 0.000108,
"output_cost_per_token": 3e-06, "output_cost_per_token": 3e-06,
"output_cost_per_token_batches": 1.5e-06, "output_cost_per_token_batches": 1.5e-06,
"supports_reasoning": false, "supports_reasoning": false,
@ -53986,8 +54013,6 @@
}, },
"vertex_ai/gemini-3.1-flash-lite-image": { "vertex_ai/gemini-3.1-flash-lite-image": {
"deprecation_date": "2027-06-28",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"cache_read_input_token_cost": 2.5e-08, "cache_read_input_token_cost": 2.5e-08,
"cache_read_input_token_cost_batches": 1.25e-08, "cache_read_input_token_cost_batches": 1.25e-08,
"cache_read_input_token_cost_flex": 1.25e-08, "cache_read_input_token_cost_flex": 1.25e-08,
@ -54004,6 +54029,7 @@
"output_cost_per_image": 0.0336, "output_cost_per_image": 0.0336,
"output_cost_per_image_token": 3e-05, "output_cost_per_image_token": 3e-05,
"output_cost_per_image_token_batches": 1.5e-05, "output_cost_per_image_token_batches": 1.5e-05,
"output_cost_per_image_token_priority": 5.4e-05,
"output_cost_per_token": 1.5e-06, "output_cost_per_token": 1.5e-06,
"output_cost_per_token_batches": 7.5e-07, "output_cost_per_token_batches": 7.5e-07,
"output_cost_per_token_flex": 7.5e-07, "output_cost_per_token_flex": 7.5e-07,
@ -54084,19 +54110,28 @@
}, },
"vertex_ai/gemini-3.1-flash-lite": { "vertex_ai/gemini-3.1-flash-lite": {
"cache_read_input_audio_token_cost": 5e-08, "cache_read_input_audio_token_cost": 5e-08,
"deprecation_date": "2027-05-07",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions", "deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"successor_model": "vertex_ai/gemini-3.5-flash-lite", "cache_read_input_audio_token_cost_batches": 2.5e-08,
"cache_read_input_audio_token_cost_flex": 2.5e-08,
"cache_read_input_audio_token_cost_priority": 9e-08,
"cache_read_input_token_cost": 2.5e-08, "cache_read_input_token_cost": 2.5e-08,
"cache_read_input_token_cost_batches": 1.25e-08, "cache_read_input_token_cost_batches": 1.25e-08,
"cache_read_input_token_cost_flex": 1.25e-08, "cache_read_input_token_cost_flex": 1.25e-08,
"cache_read_input_token_cost_priority": 4.5e-08, "cache_read_input_token_cost_priority": 4.5e-08,
"deprecation_date": "2027-05-07",
"google_maps_grounding_cost_per_query": 0.014,
"input_cost_per_audio_token": 5e-07, "input_cost_per_audio_token": 5e-07,
"input_cost_per_audio_token_above_200k_tokens": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_batches": 2.5e-07,
"input_cost_per_audio_token_above_200k_tokens_flex": 2.5e-07,
"input_cost_per_audio_token_above_200k_tokens_priority": 9e-07,
"input_cost_per_audio_token_batches": 2.5e-07,
"input_cost_per_audio_token_flex": 2.5e-07,
"input_cost_per_audio_token_priority": 9e-07,
"input_cost_per_token": 2.5e-07, "input_cost_per_token": 2.5e-07,
"input_cost_per_token_batches": 1.25e-07, "input_cost_per_token_batches": 1.25e-07,
"input_cost_per_token_flex": 1.25e-07, "input_cost_per_token_flex": 1.25e-07,
"input_cost_per_token_priority": 4.5e-07, "input_cost_per_token_priority": 4.5e-07,
"input_cost_per_audio_token_priority": 9e-07,
"litellm_provider": "vertex_ai-language-models", "litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576, "max_input_tokens": 1048576,
"max_output_tokens": 65536, "max_output_tokens": 65536,
@ -54107,7 +54142,10 @@
"output_cost_per_token_flex": 7.5e-07, "output_cost_per_token_flex": 7.5e-07,
"output_cost_per_token_priority": 2.7e-06, "output_cost_per_token_priority": 2.7e-06,
"regional_endpoint_uplift_multiplier": 1.1, "regional_endpoint_uplift_multiplier": 1.1,
"search_context_cost_per_query": {"search_context_size_low":0.014,"search_context_size_medium":0.014,"search_context_size_high":0.014},
"search_free_requests": {"count":5000,"period":"month","shared_group":"gemini-3"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing", "source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"successor_model": "vertex_ai/gemini-3.5-flash-lite",
"supported_endpoints": [ "supported_endpoints": [
"/v1/chat/completions", "/v1/chat/completions",
"/v1/completions", "/v1/completions",
@ -54125,6 +54163,7 @@
"supports_audio_input": true, "supports_audio_input": true,
"supports_audio_output": false, "supports_audio_output": false,
"supports_function_calling": true, "supports_function_calling": true,
"supports_native_streaming": true,
"supports_parallel_function_calling": true, "supports_parallel_function_calling": true,
"supports_pdf_input": true, "supports_pdf_input": true,
"supports_prompt_caching": true, "supports_prompt_caching": true,
@ -54136,16 +54175,7 @@
"supports_video_input": true, "supports_video_input": true,
"supports_vision": true, "supports_vision": true,
"supports_web_search": true, "supports_web_search": true,
"supports_native_streaming": true, "web_search_billing_unit": "per_query"
"search_context_cost_per_query": {
"search_context_size_low": 0.014,
"search_context_size_medium": 0.014,
"search_context_size_high": 0.014
},
"search_free_requests": {"count": 5000, "period": "month", "shared_group": "gemini-3"},
"web_search_billing_unit": "per_query",
"google_maps_grounding_cost_per_query": 0.014,
"input_cost_per_audio_token_batches": 2.5e-07
}, },
"vertex_ai/gemini-3.5-flash-lite": { "vertex_ai/gemini-3.5-flash-lite": {
"deprecation_date": "2027-07-21", "deprecation_date": "2027-07-21",
@ -77226,6 +77256,7 @@
"output_cost_per_image": 0.0336, "output_cost_per_image": 0.0336,
"output_cost_per_image_token": 3e-05, "output_cost_per_image_token": 3e-05,
"output_cost_per_image_token_batches": 1.5e-05, "output_cost_per_image_token_batches": 1.5e-05,
"output_cost_per_image_token_priority": 5.4e-05,
"output_cost_per_token": 7.5e-06, "output_cost_per_token": 7.5e-06,
"output_cost_per_token_batches": 3.75e-06, "output_cost_per_token_batches": 3.75e-06,
"output_cost_per_token_priority": 1.35e-05, "output_cost_per_token_priority": 1.35e-05,
@ -77272,6 +77303,7 @@
"output_cost_per_image": 0.0336, "output_cost_per_image": 0.0336,
"output_cost_per_image_token": 3e-05, "output_cost_per_image_token": 3e-05,
"output_cost_per_image_token_batches": 1.5e-05, "output_cost_per_image_token_batches": 1.5e-05,
"output_cost_per_image_token_priority": 5.4e-05,
"output_cost_per_token": 7.5e-06, "output_cost_per_token": 7.5e-06,
"output_cost_per_token_batches": 3.75e-06, "output_cost_per_token_batches": 3.75e-06,
"output_cost_per_token_priority": 1.35e-05, "output_cost_per_token_priority": 1.35e-05,
@ -78395,8 +78427,6 @@
"web_search_billing_unit": "per_query" "web_search_billing_unit": "per_query"
}, },
"vertex_ai/gemini-4-argon": { "vertex_ai/gemini-4-argon": {
"deprecation_date": "2027-10-13",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"cache_read_input_token_cost": 1e-07, "cache_read_input_token_cost": 1e-07,
"cache_read_input_token_cost_batches": 5e-08, "cache_read_input_token_cost_batches": 5e-08,
"cache_read_input_token_cost_flex": 5e-08, "cache_read_input_token_cost_flex": 5e-08,

View file

@ -383,6 +383,10 @@ class ModelInfoBase(ProviderSpecificModelInfo, total=False):
input_cost_per_character: float | None # only for vertex ai models input_cost_per_character: float | None # only for vertex ai models
input_cost_per_audio_token: float | None input_cost_per_audio_token: float | None
input_cost_per_audio_token_flex: ReadOnly[float | None] input_cost_per_audio_token_flex: ReadOnly[float | None]
input_cost_per_audio_token_above_200k_tokens: ReadOnly[float | None]
input_cost_per_audio_token_above_200k_tokens_flex: ReadOnly[float | None]
input_cost_per_audio_token_above_200k_tokens_priority: ReadOnly[float | None]
input_cost_per_audio_token_above_200k_tokens_batches: ReadOnly[float | None]
input_cost_per_audio_token_priority: ReadOnly[float | None] input_cost_per_audio_token_priority: ReadOnly[float | None]
input_cost_per_token_above_128k_tokens: float | None # only for vertex ai models input_cost_per_token_above_128k_tokens: float | None # only for vertex ai models
input_cost_per_token_above_200k_tokens: float | None # only for vertex ai gemini-2.5-pro models input_cost_per_token_above_200k_tokens: float | None # only for vertex ai gemini-2.5-pro models
@ -408,10 +412,12 @@ class ModelInfoBase(ProviderSpecificModelInfo, total=False):
input_cost_per_token_batches: float | None input_cost_per_token_batches: float | None
input_cost_per_video_token_batches: ReadOnly[float | None] input_cost_per_video_token_batches: ReadOnly[float | None]
input_cost_per_token_above_200k_tokens_batches: ReadOnly[float | None] input_cost_per_token_above_200k_tokens_batches: ReadOnly[float | None]
input_cost_per_token_above_200k_tokens_flex: ReadOnly[float | None]
input_cost_per_token_above_100k_tokens_batches: ReadOnly[float | None] input_cost_per_token_above_100k_tokens_batches: ReadOnly[float | None]
input_cost_per_token_above_272k_tokens_batches: ReadOnly[float | None] input_cost_per_token_above_272k_tokens_batches: ReadOnly[float | None]
output_cost_per_token_batches: float | None output_cost_per_token_batches: float | None
output_cost_per_token_above_200k_tokens_batches: ReadOnly[float | None] output_cost_per_token_above_200k_tokens_batches: ReadOnly[float | None]
output_cost_per_token_above_200k_tokens_flex: ReadOnly[float | None]
output_cost_per_token_above_100k_tokens_batches: ReadOnly[float | None] output_cost_per_token_above_100k_tokens_batches: ReadOnly[float | None]
output_cost_per_token_above_272k_tokens_batches: ReadOnly[float | None] output_cost_per_token_above_272k_tokens_batches: ReadOnly[float | None]
output_cost_per_token: Required[float | None] output_cost_per_token: Required[float | None]
@ -444,6 +450,7 @@ class ModelInfoBase(ProviderSpecificModelInfo, total=False):
output_cost_per_pixel: ReadOnly[float | None] output_cost_per_pixel: ReadOnly[float | None]
output_cost_per_image_token: float | None output_cost_per_image_token: float | None
output_cost_per_image_token_batches: ReadOnly[float | None] output_cost_per_image_token_batches: ReadOnly[float | None]
output_cost_per_image_token_priority: ReadOnly[float | None]
output_cost_per_video_token: float | None # for gemini omni models with video output output_cost_per_video_token: float | None # for gemini omni models with video output
output_vector_size: int | None output_vector_size: int | None
output_cost_per_reasoning_token: float | None output_cost_per_reasoning_token: float | None
@ -4173,6 +4180,10 @@ class CustomPricingLiteLLMParams(MirroredPricingParams):
input_cost_per_character_above_128k_tokens: float | None = None input_cost_per_character_above_128k_tokens: float | None = None
input_cost_per_audio_token: float | None = None input_cost_per_audio_token: float | None = None
input_cost_per_audio_token_flex: float | None = None input_cost_per_audio_token_flex: float | None = None
input_cost_per_audio_token_above_200k_tokens: float | None = None
input_cost_per_audio_token_above_200k_tokens_flex: float | None = None
input_cost_per_audio_token_above_200k_tokens_priority: float | None = None
input_cost_per_audio_token_above_200k_tokens_batches: float | None = None
input_cost_per_audio_token_priority: float | None = None input_cost_per_audio_token_priority: float | None = None
input_cost_per_token_cache_hit: float | None = None input_cost_per_token_cache_hit: float | None = None
input_cost_per_token_above_128k_tokens: float | None = None input_cost_per_token_above_128k_tokens: float | None = None
@ -4183,6 +4194,7 @@ class CustomPricingLiteLLMParams(MirroredPricingParams):
input_cost_per_token_above_272k_tokens_flex: float | None = None input_cost_per_token_above_272k_tokens_flex: float | None = None
input_cost_per_token_above_272k_tokens_ultrafast: float | None = None input_cost_per_token_above_272k_tokens_ultrafast: float | None = None
input_cost_per_token_above_200k_tokens_batches: float | None = None input_cost_per_token_above_200k_tokens_batches: float | None = None
input_cost_per_token_above_200k_tokens_flex: float | None = None
input_cost_per_token_above_100k_tokens_batches: float | None = None input_cost_per_token_above_100k_tokens_batches: float | None = None
input_cost_per_token_above_272k_tokens_batches: float | None = None input_cost_per_token_above_272k_tokens_batches: float | None = None
input_cost_per_query: float | None = None input_cost_per_query: float | None = None
@ -4212,12 +4224,14 @@ class CustomPricingLiteLLMParams(MirroredPricingParams):
output_cost_per_token_above_272k_tokens_flex: float | None = None output_cost_per_token_above_272k_tokens_flex: float | None = None
output_cost_per_token_above_272k_tokens_ultrafast: float | None = None output_cost_per_token_above_272k_tokens_ultrafast: float | None = None
output_cost_per_token_above_200k_tokens_batches: float | None = None output_cost_per_token_above_200k_tokens_batches: float | None = None
output_cost_per_token_above_200k_tokens_flex: float | None = None
output_cost_per_token_above_100k_tokens_batches: float | None = None output_cost_per_token_above_100k_tokens_batches: float | None = None
output_cost_per_token_above_272k_tokens_batches: float | None = None output_cost_per_token_above_272k_tokens_batches: float | None = None
output_cost_per_character_above_128k_tokens: float | None = None output_cost_per_character_above_128k_tokens: float | None = None
output_cost_per_image: float | None = None output_cost_per_image: float | None = None
output_cost_per_image_token: float | None = None output_cost_per_image_token: float | None = None
output_cost_per_image_token_batches: float | None = None output_cost_per_image_token_batches: float | None = None
output_cost_per_image_token_priority: float | None = None
output_cost_per_video_token: float | None = None output_cost_per_video_token: float | None = None
output_cost_per_reasoning_token: float | None = None output_cost_per_reasoning_token: float | None = None
output_cost_per_reasoning_token_flex: float | None = None output_cost_per_reasoning_token_flex: float | None = None

View file

@ -7445,6 +7445,18 @@ def get_model_info_helper(
input_cost_per_text_message=_model_info.get("input_cost_per_text_message", None), input_cost_per_text_message=_model_info.get("input_cost_per_text_message", None),
input_cost_per_audio_token=_model_info.get("input_cost_per_audio_token", None), input_cost_per_audio_token=_model_info.get("input_cost_per_audio_token", None),
input_cost_per_audio_token_flex=_model_info.get("input_cost_per_audio_token_flex", None), input_cost_per_audio_token_flex=_model_info.get("input_cost_per_audio_token_flex", None),
input_cost_per_audio_token_above_200k_tokens=_model_info.get(
"input_cost_per_audio_token_above_200k_tokens", None
),
input_cost_per_audio_token_above_200k_tokens_flex=_model_info.get(
"input_cost_per_audio_token_above_200k_tokens_flex", None
),
input_cost_per_audio_token_above_200k_tokens_priority=_model_info.get(
"input_cost_per_audio_token_above_200k_tokens_priority", None
),
input_cost_per_audio_token_above_200k_tokens_batches=_model_info.get(
"input_cost_per_audio_token_above_200k_tokens_batches", None
),
input_cost_per_audio_token_priority=_model_info.get("input_cost_per_audio_token_priority", None), input_cost_per_audio_token_priority=_model_info.get("input_cost_per_audio_token_priority", None),
input_cost_per_image_token=_model_info.get("input_cost_per_image_token", None), input_cost_per_image_token=_model_info.get("input_cost_per_image_token", None),
input_cost_per_video_token=_model_info.get("input_cost_per_video_token", None), input_cost_per_video_token=_model_info.get("input_cost_per_video_token", None),
@ -7458,6 +7470,9 @@ def get_model_info_helper(
input_cost_per_token_above_200k_tokens_batches=_model_info.get( input_cost_per_token_above_200k_tokens_batches=_model_info.get(
"input_cost_per_token_above_200k_tokens_batches" "input_cost_per_token_above_200k_tokens_batches"
), ),
input_cost_per_token_above_200k_tokens_flex=_model_info.get(
"input_cost_per_token_above_200k_tokens_flex", None
),
input_cost_per_token_above_272k_tokens_batches=_model_info.get( input_cost_per_token_above_272k_tokens_batches=_model_info.get(
"input_cost_per_token_above_272k_tokens_batches" "input_cost_per_token_above_272k_tokens_batches"
), ),
@ -7465,6 +7480,9 @@ def get_model_info_helper(
output_cost_per_token_above_200k_tokens_batches=_model_info.get( output_cost_per_token_above_200k_tokens_batches=_model_info.get(
"output_cost_per_token_above_200k_tokens_batches" "output_cost_per_token_above_200k_tokens_batches"
), ),
output_cost_per_token_above_200k_tokens_flex=_model_info.get(
"output_cost_per_token_above_200k_tokens_flex", None
),
output_cost_per_token_above_272k_tokens_batches=_model_info.get( output_cost_per_token_above_272k_tokens_batches=_model_info.get(
"output_cost_per_token_above_272k_tokens_batches" "output_cost_per_token_above_272k_tokens_batches"
), ),
@ -7526,6 +7544,7 @@ def get_model_info_helper(
output_cost_per_pixel=_model_info.get("output_cost_per_pixel", None), output_cost_per_pixel=_model_info.get("output_cost_per_pixel", None),
output_cost_per_image_token=_model_info.get("output_cost_per_image_token", None), output_cost_per_image_token=_model_info.get("output_cost_per_image_token", None),
output_cost_per_image_token_batches=_model_info.get("output_cost_per_image_token_batches", None), output_cost_per_image_token_batches=_model_info.get("output_cost_per_image_token_batches", None),
output_cost_per_image_token_priority=_model_info.get("output_cost_per_image_token_priority", None),
output_cost_per_video_token=_model_info.get("output_cost_per_video_token", None), output_cost_per_video_token=_model_info.get("output_cost_per_video_token", None),
output_vector_size=_model_info.get("output_vector_size", None), output_vector_size=_model_info.get("output_vector_size", None),
citation_cost_per_token=_model_info.get("citation_cost_per_token", None), citation_cost_per_token=_model_info.get("citation_cost_per_token", None),

View file

@ -29951,21 +29951,38 @@
}, },
"gemini-2.5-flash": { "gemini-2.5-flash": {
"cache_read_input_audio_token_cost": 1e-07, "cache_read_input_audio_token_cost": 1e-07,
"deprecation_date": "2026-10-20",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions", "deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"successor_model": "gemini-3.8-flash", "cache_read_input_audio_token_cost_priority": 1.8e-07,
"cache_read_input_token_cost": 3e-08, "cache_read_input_token_cost": 3e-08,
"cache_read_input_token_cost_flex": 3e-08, "cache_read_input_token_cost_flex": 3e-08,
"cache_read_input_token_cost_priority": 5.4e-08, "cache_read_input_token_cost_priority": 5.4e-08,
"deprecation_date": "2026-10-20",
"google_maps_grounding_cost_per_query": 0.025,
"input_cost_per_audio_token": 1e-06, "input_cost_per_audio_token": 1e-06,
"input_cost_per_audio_token_above_200k_tokens": 3e-07,
"input_cost_per_audio_token_above_200k_tokens_batches": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_flex": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_priority": 1.8e-06,
"input_cost_per_audio_token_batches": 5e-07,
"input_cost_per_audio_token_flex": 5e-07,
"input_cost_per_audio_token_priority": 1.8e-06,
"input_cost_per_token": 3e-07, "input_cost_per_token": 3e-07,
"input_cost_per_token_batches": 1.5e-07,
"input_cost_per_token_flex": 1.5e-07,
"input_cost_per_token_priority": 5.4e-07,
"litellm_provider": "vertex_ai-language-models", "litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576, "max_input_tokens": 1048576,
"max_output_tokens": 65535, "max_output_tokens": 65535,
"mode": "chat", "mode": "chat",
"output_cost_per_reasoning_token": 2.5e-06, "output_cost_per_reasoning_token": 2.5e-06,
"output_cost_per_token": 2.5e-06, "output_cost_per_token": 2.5e-06,
"output_cost_per_token_batches": 1.25e-06,
"output_cost_per_token_flex": 1.25e-06,
"output_cost_per_token_priority": 4.5e-06,
"search_context_cost_per_query": {"search_context_size_low":0.035,"search_context_size_medium":0.035,"search_context_size_high":0.035},
"search_free_requests": {"count":1500,"period":"day","shared_group":"gemini-2-flash"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing", "source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"successor_model": "gemini-3.8-flash",
"supported_endpoints": [ "supported_endpoints": [
"/v1/chat/completions", "/v1/chat/completions",
"/v1/completions", "/v1/completions",
@ -29982,6 +29999,7 @@
], ],
"supports_audio_output": false, "supports_audio_output": false,
"supports_function_calling": true, "supports_function_calling": true,
"supports_image_size": false,
"supports_parallel_function_calling": true, "supports_parallel_function_calling": true,
"supports_pdf_input": true, "supports_pdf_input": true,
"supports_prompt_caching": true, "supports_prompt_caching": true,
@ -29991,23 +30009,7 @@
"supports_tool_choice": true, "supports_tool_choice": true,
"supports_url_context": true, "supports_url_context": true,
"supports_vision": true, "supports_vision": true,
"supports_web_search": true, "supports_web_search": true
"search_context_cost_per_query": {
"search_context_size_low": 0.035,
"search_context_size_medium": 0.035,
"search_context_size_high": 0.035
},
"search_free_requests": {"count": 1500, "period": "day", "shared_group": "gemini-2-flash"},
"google_maps_grounding_cost_per_query": 0.025,
"input_cost_per_audio_token_batches": 5e-07,
"input_cost_per_token_batches": 1.5e-07,
"input_cost_per_token_flex": 1.5e-07,
"input_cost_per_token_priority": 5.4e-07,
"input_cost_per_audio_token_priority": 1.8e-06,
"output_cost_per_token_batches": 1.25e-06,
"output_cost_per_token_flex": 1.25e-06,
"output_cost_per_token_priority": 4.5e-06,
"supports_image_size": false
}, },
"gemini-2.5-flash-image": { "gemini-2.5-flash-image": {
"deprecation_date": "2027-03-15", "deprecation_date": "2027-03-15",
@ -30083,6 +30085,7 @@
"output_cost_per_image": 0.134, "output_cost_per_image": 0.134,
"output_cost_per_image_token": 0.00012, "output_cost_per_image_token": 0.00012,
"output_cost_per_image_token_batches": 6e-05, "output_cost_per_image_token_batches": 6e-05,
"output_cost_per_image_token_priority": 0.000216,
"output_cost_per_token": 1.2e-05, "output_cost_per_token": 1.2e-05,
"output_cost_per_token_above_200k_tokens": 1.8e-05, "output_cost_per_token_above_200k_tokens": 1.8e-05,
"output_cost_per_token_above_200k_tokens_priority": 3.24e-05, "output_cost_per_token_above_200k_tokens_priority": 3.24e-05,
@ -30137,6 +30140,7 @@
"output_cost_per_image": 0.134, "output_cost_per_image": 0.134,
"output_cost_per_image_token": 0.00012, "output_cost_per_image_token": 0.00012,
"output_cost_per_image_token_batches": 6e-05, "output_cost_per_image_token_batches": 6e-05,
"output_cost_per_image_token_priority": 0.000216,
"output_cost_per_token": 1.2e-05, "output_cost_per_token": 1.2e-05,
"output_cost_per_token_priority": 2.16e-05, "output_cost_per_token_priority": 2.16e-05,
"output_cost_per_token_above_200k_tokens": 1.8e-05, "output_cost_per_token_above_200k_tokens": 1.8e-05,
@ -30190,6 +30194,7 @@
"output_cost_per_image": 0.0672, "output_cost_per_image": 0.0672,
"output_cost_per_image_token": 6e-05, "output_cost_per_image_token": 6e-05,
"output_cost_per_image_token_batches": 3e-05, "output_cost_per_image_token_batches": 3e-05,
"output_cost_per_image_token_priority": 0.000108,
"output_cost_per_token": 3e-06, "output_cost_per_token": 3e-06,
"output_cost_per_token_batches": 1.5e-06, "output_cost_per_token_batches": 1.5e-06,
"output_cost_per_token_flex": 1.5e-06, "output_cost_per_token_flex": 1.5e-06,
@ -30236,6 +30241,7 @@
"output_cost_per_image": 0.0672, "output_cost_per_image": 0.0672,
"output_cost_per_image_token": 6e-05, "output_cost_per_image_token": 6e-05,
"output_cost_per_image_token_batches": 3e-05, "output_cost_per_image_token_batches": 3e-05,
"output_cost_per_image_token_priority": 0.000108,
"output_cost_per_token": 3e-06, "output_cost_per_token": 3e-06,
"output_cost_per_token_batches": 1.5e-06, "output_cost_per_token_batches": 1.5e-06,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing", "source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
@ -30268,8 +30274,6 @@
"web_search_billing_unit": "per_query" "web_search_billing_unit": "per_query"
}, },
"gemini-3.1-flash-lite-image": { "gemini-3.1-flash-lite-image": {
"deprecation_date": "2027-06-28",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"cache_read_input_token_cost": 2.5e-08, "cache_read_input_token_cost": 2.5e-08,
"cache_read_input_token_cost_batches": 1.25e-08, "cache_read_input_token_cost_batches": 1.25e-08,
"cache_read_input_token_cost_flex": 1.25e-08, "cache_read_input_token_cost_flex": 1.25e-08,
@ -30286,6 +30290,7 @@
"output_cost_per_image": 0.0336, "output_cost_per_image": 0.0336,
"output_cost_per_image_token": 3e-05, "output_cost_per_image_token": 3e-05,
"output_cost_per_image_token_batches": 1.5e-05, "output_cost_per_image_token_batches": 1.5e-05,
"output_cost_per_image_token_priority": 5.4e-05,
"output_cost_per_token": 1.5e-06, "output_cost_per_token": 1.5e-06,
"output_cost_per_token_batches": 7.5e-07, "output_cost_per_token_batches": 7.5e-07,
"output_cost_per_token_flex": 7.5e-07, "output_cost_per_token_flex": 7.5e-07,
@ -30366,19 +30371,28 @@
}, },
"gemini-3.1-flash-lite": { "gemini-3.1-flash-lite": {
"cache_read_input_audio_token_cost": 5e-08, "cache_read_input_audio_token_cost": 5e-08,
"deprecation_date": "2027-05-07",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions", "deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"successor_model": "gemini-3.5-flash-lite", "cache_read_input_audio_token_cost_batches": 2.5e-08,
"cache_read_input_audio_token_cost_flex": 2.5e-08,
"cache_read_input_audio_token_cost_priority": 9e-08,
"cache_read_input_token_cost": 2.5e-08, "cache_read_input_token_cost": 2.5e-08,
"cache_read_input_token_cost_batches": 1.25e-08, "cache_read_input_token_cost_batches": 1.25e-08,
"cache_read_input_token_cost_flex": 1.25e-08, "cache_read_input_token_cost_flex": 1.25e-08,
"cache_read_input_token_cost_priority": 4.5e-08, "cache_read_input_token_cost_priority": 4.5e-08,
"deprecation_date": "2027-05-07",
"google_maps_grounding_cost_per_query": 0.014,
"input_cost_per_audio_token": 5e-07, "input_cost_per_audio_token": 5e-07,
"input_cost_per_audio_token_above_200k_tokens": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_batches": 2.5e-07,
"input_cost_per_audio_token_above_200k_tokens_flex": 2.5e-07,
"input_cost_per_audio_token_above_200k_tokens_priority": 9e-07,
"input_cost_per_audio_token_batches": 2.5e-07,
"input_cost_per_audio_token_flex": 2.5e-07,
"input_cost_per_audio_token_priority": 9e-07,
"input_cost_per_token": 2.5e-07, "input_cost_per_token": 2.5e-07,
"input_cost_per_token_batches": 1.25e-07, "input_cost_per_token_batches": 1.25e-07,
"input_cost_per_token_flex": 1.25e-07, "input_cost_per_token_flex": 1.25e-07,
"input_cost_per_token_priority": 4.5e-07, "input_cost_per_token_priority": 4.5e-07,
"input_cost_per_audio_token_priority": 9e-07,
"litellm_provider": "vertex_ai-language-models", "litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576, "max_input_tokens": 1048576,
"max_output_tokens": 65536, "max_output_tokens": 65536,
@ -30388,7 +30402,10 @@
"output_cost_per_token_batches": 7.5e-07, "output_cost_per_token_batches": 7.5e-07,
"output_cost_per_token_flex": 7.5e-07, "output_cost_per_token_flex": 7.5e-07,
"output_cost_per_token_priority": 2.7e-06, "output_cost_per_token_priority": 2.7e-06,
"search_context_cost_per_query": {"search_context_size_low":0.014,"search_context_size_medium":0.014,"search_context_size_high":0.014},
"search_free_requests": {"count":5000,"period":"month","shared_group":"gemini-3"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing", "source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"successor_model": "gemini-3.5-flash-lite",
"supported_endpoints": [ "supported_endpoints": [
"/v1/chat/completions", "/v1/chat/completions",
"/v1/completions", "/v1/completions",
@ -30406,6 +30423,7 @@
"supports_audio_input": true, "supports_audio_input": true,
"supports_audio_output": false, "supports_audio_output": false,
"supports_function_calling": true, "supports_function_calling": true,
"supports_native_streaming": true,
"supports_parallel_function_calling": true, "supports_parallel_function_calling": true,
"supports_pdf_input": true, "supports_pdf_input": true,
"supports_prompt_caching": true, "supports_prompt_caching": true,
@ -30417,16 +30435,7 @@
"supports_video_input": true, "supports_video_input": true,
"supports_vision": true, "supports_vision": true,
"supports_web_search": true, "supports_web_search": true,
"supports_native_streaming": true, "web_search_billing_unit": "per_query"
"search_context_cost_per_query": {
"search_context_size_low": 0.014,
"search_context_size_medium": 0.014,
"search_context_size_high": 0.014
},
"search_free_requests": {"count": 5000, "period": "month", "shared_group": "gemini-3"},
"web_search_billing_unit": "per_query",
"google_maps_grounding_cost_per_query": 0.014,
"input_cost_per_audio_token_batches": 2.5e-07
}, },
"gemini-3.5-flash-lite": { "gemini-3.5-flash-lite": {
"deprecation_date": "2027-07-21", "deprecation_date": "2027-07-21",
@ -30526,21 +30535,38 @@
}, },
"gemini-2.5-flash-lite": { "gemini-2.5-flash-lite": {
"cache_read_input_audio_token_cost": 3e-08, "cache_read_input_audio_token_cost": 3e-08,
"deprecation_date": "2026-10-20",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions", "deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"successor_model": "gemini-3.8-flash", "cache_read_input_audio_token_cost_priority": 5.4e-08,
"cache_read_input_token_cost": 1e-08, "cache_read_input_token_cost": 1e-08,
"cache_read_input_token_cost_flex": 1e-08, "cache_read_input_token_cost_flex": 1e-08,
"cache_read_input_token_cost_priority": 1.8e-08, "cache_read_input_token_cost_priority": 1.8e-08,
"deprecation_date": "2026-10-20",
"google_maps_grounding_cost_per_query": 0.025,
"input_cost_per_audio_token": 3e-07, "input_cost_per_audio_token": 3e-07,
"input_cost_per_audio_token_above_200k_tokens": 3e-07,
"input_cost_per_audio_token_above_200k_tokens_batches": 5e-08,
"input_cost_per_audio_token_above_200k_tokens_flex": 5e-08,
"input_cost_per_audio_token_above_200k_tokens_priority": 5.4e-07,
"input_cost_per_audio_token_batches": 5e-08,
"input_cost_per_audio_token_flex": 5e-08,
"input_cost_per_audio_token_priority": 5.4e-07,
"input_cost_per_token": 1e-07, "input_cost_per_token": 1e-07,
"input_cost_per_token_batches": 5e-08,
"input_cost_per_token_flex": 5e-08,
"input_cost_per_token_priority": 1.8e-07,
"litellm_provider": "vertex_ai-language-models", "litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576, "max_input_tokens": 1048576,
"max_output_tokens": 65535, "max_output_tokens": 65535,
"mode": "chat", "mode": "chat",
"output_cost_per_reasoning_token": 4e-07, "output_cost_per_reasoning_token": 4e-07,
"output_cost_per_token": 4e-07, "output_cost_per_token": 4e-07,
"output_cost_per_token_batches": 2e-07,
"output_cost_per_token_flex": 2e-07,
"output_cost_per_token_priority": 7.2e-07,
"search_context_cost_per_query": {"search_context_size_low":0.035,"search_context_size_medium":0.035,"search_context_size_high":0.035},
"search_free_requests": {"count":1500,"period":"day","shared_group":"gemini-2-flash"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing", "source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"successor_model": "gemini-3.8-flash",
"supported_endpoints": [ "supported_endpoints": [
"/v1/chat/completions", "/v1/chat/completions",
"/v1/completions", "/v1/completions",
@ -30557,6 +30583,7 @@
], ],
"supports_audio_output": false, "supports_audio_output": false,
"supports_function_calling": true, "supports_function_calling": true,
"supports_image_size": false,
"supports_parallel_function_calling": true, "supports_parallel_function_calling": true,
"supports_pdf_input": true, "supports_pdf_input": true,
"supports_prompt_caching": true, "supports_prompt_caching": true,
@ -30566,23 +30593,7 @@
"supports_tool_choice": true, "supports_tool_choice": true,
"supports_url_context": true, "supports_url_context": true,
"supports_vision": true, "supports_vision": true,
"supports_web_search": true, "supports_web_search": true
"search_context_cost_per_query": {
"search_context_size_low": 0.035,
"search_context_size_medium": 0.035,
"search_context_size_high": 0.035
},
"search_free_requests": {"count": 1500, "period": "day", "shared_group": "gemini-2-flash"},
"google_maps_grounding_cost_per_query": 0.025,
"input_cost_per_audio_token_batches": 5e-08,
"input_cost_per_token_batches": 5e-08,
"input_cost_per_token_flex": 5e-08,
"input_cost_per_token_priority": 1.8e-07,
"input_cost_per_audio_token_priority": 5.4e-07,
"output_cost_per_token_batches": 2e-07,
"output_cost_per_token_flex": 2e-07,
"output_cost_per_token_priority": 7.2e-07,
"supports_image_size": false
}, },
"gemini-2.5-flash-lite-preview-09-2025": { "gemini-2.5-flash-lite-preview-09-2025": {
"cache_read_input_token_cost": 1e-08, "cache_read_input_token_cost": 1e-08,
@ -30863,11 +30874,13 @@
"search_free_requests": {"count": 10000, "period": "day", "shared_group": "gemini-2.5-pro"}, "search_free_requests": {"count": 10000, "period": "day", "shared_group": "gemini-2.5-pro"},
"google_maps_grounding_cost_per_query": 0.025, "google_maps_grounding_cost_per_query": 0.025,
"input_cost_per_token_above_200k_tokens_batches": 1.25e-06, "input_cost_per_token_above_200k_tokens_batches": 1.25e-06,
"input_cost_per_token_above_200k_tokens_flex": 1.25e-06,
"input_cost_per_token_above_200k_tokens_priority": 4.5e-06, "input_cost_per_token_above_200k_tokens_priority": 4.5e-06,
"input_cost_per_token_batches": 6.25e-07, "input_cost_per_token_batches": 6.25e-07,
"input_cost_per_token_flex": 6.25e-07, "input_cost_per_token_flex": 6.25e-07,
"input_cost_per_token_priority": 2.25e-06, "input_cost_per_token_priority": 2.25e-06,
"output_cost_per_token_above_200k_tokens_batches": 7.5e-06, "output_cost_per_token_above_200k_tokens_batches": 7.5e-06,
"output_cost_per_token_above_200k_tokens_flex": 7.5e-06,
"output_cost_per_token_above_200k_tokens_priority": 2.7e-05, "output_cost_per_token_above_200k_tokens_priority": 2.7e-05,
"output_cost_per_token_batches": 5e-06, "output_cost_per_token_batches": 5e-06,
"output_cost_per_token_flex": 5e-06, "output_cost_per_token_flex": 5e-06,
@ -30883,6 +30896,7 @@
"input_cost_per_token": 2e-06, "input_cost_per_token": 2e-06,
"input_cost_per_token_above_200k_tokens": 4e-06, "input_cost_per_token_above_200k_tokens": 4e-06,
"input_cost_per_token_above_200k_tokens_batches": 2e-06, "input_cost_per_token_above_200k_tokens_batches": 2e-06,
"input_cost_per_token_above_200k_tokens_flex": 2e-06,
"input_cost_per_token_above_200k_tokens_priority": 7.2e-06, "input_cost_per_token_above_200k_tokens_priority": 7.2e-06,
"input_cost_per_token_batches": 1e-06, "input_cost_per_token_batches": 1e-06,
"input_cost_per_token_flex": 1e-06, "input_cost_per_token_flex": 1e-06,
@ -30895,6 +30909,7 @@
"output_cost_per_token": 1.2e-05, "output_cost_per_token": 1.2e-05,
"output_cost_per_token_above_200k_tokens": 1.8e-05, "output_cost_per_token_above_200k_tokens": 1.8e-05,
"output_cost_per_token_above_200k_tokens_batches": 9e-06, "output_cost_per_token_above_200k_tokens_batches": 9e-06,
"output_cost_per_token_above_200k_tokens_flex": 9e-06,
"output_cost_per_token_above_200k_tokens_priority": 3.24e-05, "output_cost_per_token_above_200k_tokens_priority": 3.24e-05,
"output_cost_per_token_batches": 6e-06, "output_cost_per_token_batches": 6e-06,
"output_cost_per_token_flex": 6e-06, "output_cost_per_token_flex": 6e-06,
@ -31042,11 +31057,17 @@
}, },
"vertex_ai/gemini-3-flash-preview": { "vertex_ai/gemini-3-flash-preview": {
"cache_read_input_audio_token_cost": 1e-07, "cache_read_input_audio_token_cost": 1e-07,
"cache_read_input_audio_token_cost_priority": 1.8e-07,
"cache_read_input_token_cost": 5e-08, "cache_read_input_token_cost": 5e-08,
"cache_read_input_token_cost_priority": 9e-08, "cache_read_input_token_cost_priority": 9e-08,
"google_maps_grounding_cost_per_query": 0.014, "google_maps_grounding_cost_per_query": 0.014,
"input_cost_per_audio_token": 1e-06, "input_cost_per_audio_token": 1e-06,
"input_cost_per_audio_token_above_200k_tokens": 1e-06,
"input_cost_per_audio_token_above_200k_tokens_batches": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_flex": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_priority": 1.8e-06,
"input_cost_per_audio_token_batches": 5e-07, "input_cost_per_audio_token_batches": 5e-07,
"input_cost_per_audio_token_flex": 5e-07,
"input_cost_per_audio_token_priority": 1.8e-06, "input_cost_per_audio_token_priority": 1.8e-06,
"input_cost_per_token": 5e-07, "input_cost_per_token": 5e-07,
"input_cost_per_token_batches": 2.5e-07, "input_cost_per_token_batches": 2.5e-07,
@ -31284,8 +31305,6 @@
"google_maps_grounding_cost_per_query": 0.014 "google_maps_grounding_cost_per_query": 0.014
}, },
"vertex_ai/gemini-3.8-flash": { "vertex_ai/gemini-3.8-flash": {
"deprecation_date": "2027-09-02",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"cache_read_input_token_cost": 7.5e-08, "cache_read_input_token_cost": 7.5e-08,
"cache_read_input_token_cost_batches": 3.75e-08, "cache_read_input_token_cost_batches": 3.75e-08,
"cache_read_input_token_cost_flex": 3.75e-08, "cache_read_input_token_cost_flex": 3.75e-08,
@ -31392,8 +31411,6 @@
"supports_native_streaming": true "supports_native_streaming": true
}, },
"vertex_ai/gemini-3.8-live": { "vertex_ai/gemini-3.8-live": {
"deprecation_date": "2027-09-25",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"gemini_audio_only_live": true, "gemini_audio_only_live": true,
"input_cost_per_audio_token": 3e-06, "input_cost_per_audio_token": 3e-06,
"input_cost_per_image_token": 1e-06, "input_cost_per_image_token": 1e-06,
@ -31439,6 +31456,7 @@
"input_cost_per_token": 2e-06, "input_cost_per_token": 2e-06,
"input_cost_per_token_above_200k_tokens": 4e-06, "input_cost_per_token_above_200k_tokens": 4e-06,
"input_cost_per_token_above_200k_tokens_batches": 2e-06, "input_cost_per_token_above_200k_tokens_batches": 2e-06,
"input_cost_per_token_above_200k_tokens_flex": 2e-06,
"input_cost_per_token_above_200k_tokens_priority": 7.2e-06, "input_cost_per_token_above_200k_tokens_priority": 7.2e-06,
"input_cost_per_token_batches": 1e-06, "input_cost_per_token_batches": 1e-06,
"input_cost_per_token_flex": 1e-06, "input_cost_per_token_flex": 1e-06,
@ -31451,6 +31469,7 @@
"output_cost_per_token": 1.2e-05, "output_cost_per_token": 1.2e-05,
"output_cost_per_token_above_200k_tokens": 1.8e-05, "output_cost_per_token_above_200k_tokens": 1.8e-05,
"output_cost_per_token_above_200k_tokens_batches": 9e-06, "output_cost_per_token_above_200k_tokens_batches": 9e-06,
"output_cost_per_token_above_200k_tokens_flex": 9e-06,
"output_cost_per_token_above_200k_tokens_priority": 3.24e-05, "output_cost_per_token_above_200k_tokens_priority": 3.24e-05,
"output_cost_per_token_batches": 6e-06, "output_cost_per_token_batches": 6e-06,
"output_cost_per_token_flex": 6e-06, "output_cost_per_token_flex": 6e-06,
@ -33332,11 +33351,17 @@
}, },
"gemini-3-flash-preview": { "gemini-3-flash-preview": {
"cache_read_input_audio_token_cost": 1e-07, "cache_read_input_audio_token_cost": 1e-07,
"cache_read_input_audio_token_cost_priority": 1.8e-07,
"cache_read_input_token_cost": 5e-08, "cache_read_input_token_cost": 5e-08,
"cache_read_input_token_cost_priority": 9e-08, "cache_read_input_token_cost_priority": 9e-08,
"google_maps_grounding_cost_per_query": 0.014, "google_maps_grounding_cost_per_query": 0.014,
"input_cost_per_audio_token": 1e-06, "input_cost_per_audio_token": 1e-06,
"input_cost_per_audio_token_above_200k_tokens": 1e-06,
"input_cost_per_audio_token_above_200k_tokens_batches": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_flex": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_priority": 1.8e-06,
"input_cost_per_audio_token_batches": 5e-07, "input_cost_per_audio_token_batches": 5e-07,
"input_cost_per_audio_token_flex": 5e-07,
"input_cost_per_audio_token_priority": 1.8e-06, "input_cost_per_audio_token_priority": 1.8e-06,
"input_cost_per_token": 5e-07, "input_cost_per_token": 5e-07,
"input_cost_per_token_batches": 2.5e-07, "input_cost_per_token_batches": 2.5e-07,
@ -33607,8 +33632,6 @@
"google_maps_grounding_cost_per_query": 0.014 "google_maps_grounding_cost_per_query": 0.014
}, },
"gemini-3.8-flash": { "gemini-3.8-flash": {
"deprecation_date": "2027-09-02",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"cache_read_input_token_cost": 7.5e-08, "cache_read_input_token_cost": 7.5e-08,
"cache_read_input_token_cost_batches": 3.75e-08, "cache_read_input_token_cost_batches": 3.75e-08,
"cache_read_input_token_cost_flex": 3.75e-08, "cache_read_input_token_cost_flex": 3.75e-08,
@ -53876,6 +53899,7 @@
"output_cost_per_image": 0.134, "output_cost_per_image": 0.134,
"output_cost_per_image_token": 0.00012, "output_cost_per_image_token": 0.00012,
"output_cost_per_image_token_batches": 6e-05, "output_cost_per_image_token_batches": 6e-05,
"output_cost_per_image_token_priority": 0.000216,
"output_cost_per_token": 1.2e-05, "output_cost_per_token": 1.2e-05,
"output_cost_per_token_above_200k_tokens": 1.8e-05, "output_cost_per_token_above_200k_tokens": 1.8e-05,
"output_cost_per_token_above_200k_tokens_priority": 3.24e-05, "output_cost_per_token_above_200k_tokens_priority": 3.24e-05,
@ -53911,6 +53935,7 @@
"output_cost_per_image": 0.134, "output_cost_per_image": 0.134,
"output_cost_per_image_token": 0.00012, "output_cost_per_image_token": 0.00012,
"output_cost_per_image_token_batches": 6e-05, "output_cost_per_image_token_batches": 6e-05,
"output_cost_per_image_token_priority": 0.000216,
"output_cost_per_token": 1.2e-05, "output_cost_per_token": 1.2e-05,
"output_cost_per_token_priority": 2.16e-05, "output_cost_per_token_priority": 2.16e-05,
"output_cost_per_token_above_200k_tokens": 1.8e-05, "output_cost_per_token_above_200k_tokens": 1.8e-05,
@ -53945,6 +53970,7 @@
"output_cost_per_image": 0.0672, "output_cost_per_image": 0.0672,
"output_cost_per_image_token": 6e-05, "output_cost_per_image_token": 6e-05,
"output_cost_per_image_token_batches": 3e-05, "output_cost_per_image_token_batches": 3e-05,
"output_cost_per_image_token_priority": 0.000108,
"output_cost_per_token": 3e-06, "output_cost_per_token": 3e-06,
"output_cost_per_token_batches": 1.5e-06, "output_cost_per_token_batches": 1.5e-06,
"output_cost_per_token_flex": 1.5e-06, "output_cost_per_token_flex": 1.5e-06,
@ -53973,6 +53999,7 @@
"output_cost_per_image": 0.0672, "output_cost_per_image": 0.0672,
"output_cost_per_image_token": 6e-05, "output_cost_per_image_token": 6e-05,
"output_cost_per_image_token_batches": 3e-05, "output_cost_per_image_token_batches": 3e-05,
"output_cost_per_image_token_priority": 0.000108,
"output_cost_per_token": 3e-06, "output_cost_per_token": 3e-06,
"output_cost_per_token_batches": 1.5e-06, "output_cost_per_token_batches": 1.5e-06,
"supports_reasoning": false, "supports_reasoning": false,
@ -53986,8 +54013,6 @@
}, },
"vertex_ai/gemini-3.1-flash-lite-image": { "vertex_ai/gemini-3.1-flash-lite-image": {
"deprecation_date": "2027-06-28",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"cache_read_input_token_cost": 2.5e-08, "cache_read_input_token_cost": 2.5e-08,
"cache_read_input_token_cost_batches": 1.25e-08, "cache_read_input_token_cost_batches": 1.25e-08,
"cache_read_input_token_cost_flex": 1.25e-08, "cache_read_input_token_cost_flex": 1.25e-08,
@ -54004,6 +54029,7 @@
"output_cost_per_image": 0.0336, "output_cost_per_image": 0.0336,
"output_cost_per_image_token": 3e-05, "output_cost_per_image_token": 3e-05,
"output_cost_per_image_token_batches": 1.5e-05, "output_cost_per_image_token_batches": 1.5e-05,
"output_cost_per_image_token_priority": 5.4e-05,
"output_cost_per_token": 1.5e-06, "output_cost_per_token": 1.5e-06,
"output_cost_per_token_batches": 7.5e-07, "output_cost_per_token_batches": 7.5e-07,
"output_cost_per_token_flex": 7.5e-07, "output_cost_per_token_flex": 7.5e-07,
@ -54084,19 +54110,28 @@
}, },
"vertex_ai/gemini-3.1-flash-lite": { "vertex_ai/gemini-3.1-flash-lite": {
"cache_read_input_audio_token_cost": 5e-08, "cache_read_input_audio_token_cost": 5e-08,
"deprecation_date": "2027-05-07",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions", "deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"successor_model": "vertex_ai/gemini-3.5-flash-lite", "cache_read_input_audio_token_cost_batches": 2.5e-08,
"cache_read_input_audio_token_cost_flex": 2.5e-08,
"cache_read_input_audio_token_cost_priority": 9e-08,
"cache_read_input_token_cost": 2.5e-08, "cache_read_input_token_cost": 2.5e-08,
"cache_read_input_token_cost_batches": 1.25e-08, "cache_read_input_token_cost_batches": 1.25e-08,
"cache_read_input_token_cost_flex": 1.25e-08, "cache_read_input_token_cost_flex": 1.25e-08,
"cache_read_input_token_cost_priority": 4.5e-08, "cache_read_input_token_cost_priority": 4.5e-08,
"deprecation_date": "2027-05-07",
"google_maps_grounding_cost_per_query": 0.014,
"input_cost_per_audio_token": 5e-07, "input_cost_per_audio_token": 5e-07,
"input_cost_per_audio_token_above_200k_tokens": 5e-07,
"input_cost_per_audio_token_above_200k_tokens_batches": 2.5e-07,
"input_cost_per_audio_token_above_200k_tokens_flex": 2.5e-07,
"input_cost_per_audio_token_above_200k_tokens_priority": 9e-07,
"input_cost_per_audio_token_batches": 2.5e-07,
"input_cost_per_audio_token_flex": 2.5e-07,
"input_cost_per_audio_token_priority": 9e-07,
"input_cost_per_token": 2.5e-07, "input_cost_per_token": 2.5e-07,
"input_cost_per_token_batches": 1.25e-07, "input_cost_per_token_batches": 1.25e-07,
"input_cost_per_token_flex": 1.25e-07, "input_cost_per_token_flex": 1.25e-07,
"input_cost_per_token_priority": 4.5e-07, "input_cost_per_token_priority": 4.5e-07,
"input_cost_per_audio_token_priority": 9e-07,
"litellm_provider": "vertex_ai-language-models", "litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576, "max_input_tokens": 1048576,
"max_output_tokens": 65536, "max_output_tokens": 65536,
@ -54107,7 +54142,10 @@
"output_cost_per_token_flex": 7.5e-07, "output_cost_per_token_flex": 7.5e-07,
"output_cost_per_token_priority": 2.7e-06, "output_cost_per_token_priority": 2.7e-06,
"regional_endpoint_uplift_multiplier": 1.1, "regional_endpoint_uplift_multiplier": 1.1,
"search_context_cost_per_query": {"search_context_size_low":0.014,"search_context_size_medium":0.014,"search_context_size_high":0.014},
"search_free_requests": {"count":5000,"period":"month","shared_group":"gemini-3"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing", "source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"successor_model": "vertex_ai/gemini-3.5-flash-lite",
"supported_endpoints": [ "supported_endpoints": [
"/v1/chat/completions", "/v1/chat/completions",
"/v1/completions", "/v1/completions",
@ -54125,6 +54163,7 @@
"supports_audio_input": true, "supports_audio_input": true,
"supports_audio_output": false, "supports_audio_output": false,
"supports_function_calling": true, "supports_function_calling": true,
"supports_native_streaming": true,
"supports_parallel_function_calling": true, "supports_parallel_function_calling": true,
"supports_pdf_input": true, "supports_pdf_input": true,
"supports_prompt_caching": true, "supports_prompt_caching": true,
@ -54136,16 +54175,7 @@
"supports_video_input": true, "supports_video_input": true,
"supports_vision": true, "supports_vision": true,
"supports_web_search": true, "supports_web_search": true,
"supports_native_streaming": true, "web_search_billing_unit": "per_query"
"search_context_cost_per_query": {
"search_context_size_low": 0.014,
"search_context_size_medium": 0.014,
"search_context_size_high": 0.014
},
"search_free_requests": {"count": 5000, "period": "month", "shared_group": "gemini-3"},
"web_search_billing_unit": "per_query",
"google_maps_grounding_cost_per_query": 0.014,
"input_cost_per_audio_token_batches": 2.5e-07
}, },
"vertex_ai/gemini-3.5-flash-lite": { "vertex_ai/gemini-3.5-flash-lite": {
"deprecation_date": "2027-07-21", "deprecation_date": "2027-07-21",
@ -77226,6 +77256,7 @@
"output_cost_per_image": 0.0336, "output_cost_per_image": 0.0336,
"output_cost_per_image_token": 3e-05, "output_cost_per_image_token": 3e-05,
"output_cost_per_image_token_batches": 1.5e-05, "output_cost_per_image_token_batches": 1.5e-05,
"output_cost_per_image_token_priority": 5.4e-05,
"output_cost_per_token": 7.5e-06, "output_cost_per_token": 7.5e-06,
"output_cost_per_token_batches": 3.75e-06, "output_cost_per_token_batches": 3.75e-06,
"output_cost_per_token_priority": 1.35e-05, "output_cost_per_token_priority": 1.35e-05,
@ -77272,6 +77303,7 @@
"output_cost_per_image": 0.0336, "output_cost_per_image": 0.0336,
"output_cost_per_image_token": 3e-05, "output_cost_per_image_token": 3e-05,
"output_cost_per_image_token_batches": 1.5e-05, "output_cost_per_image_token_batches": 1.5e-05,
"output_cost_per_image_token_priority": 5.4e-05,
"output_cost_per_token": 7.5e-06, "output_cost_per_token": 7.5e-06,
"output_cost_per_token_batches": 3.75e-06, "output_cost_per_token_batches": 3.75e-06,
"output_cost_per_token_priority": 1.35e-05, "output_cost_per_token_priority": 1.35e-05,
@ -78395,8 +78427,6 @@
"web_search_billing_unit": "per_query" "web_search_billing_unit": "per_query"
}, },
"vertex_ai/gemini-4-argon": { "vertex_ai/gemini-4-argon": {
"deprecation_date": "2027-10-13",
"deprecation_source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/model-versions",
"cache_read_input_token_cost": 1e-07, "cache_read_input_token_cost": 1e-07,
"cache_read_input_token_cost_batches": 5e-08, "cache_read_input_token_cost_batches": 5e-08,
"cache_read_input_token_cost_flex": 5e-08, "cache_read_input_token_cost_flex": 5e-08,

View file

@ -12,7 +12,7 @@ import litellm
from litellm.integrations.custom_logger import CustomLogger from litellm.integrations.custom_logger import CustomLogger
from litellm.litellm_core_utils.logging_worker import GLOBAL_LOGGING_WORKER from litellm.litellm_core_utils.logging_worker import GLOBAL_LOGGING_WORKER
from litellm.types.llms.base import CachedTokensDetails from litellm.types.llms.base import CachedTokensDetails
from litellm.types.utils import ModelResponse, PromptTokensDetailsWrapper, Usage from litellm.types.utils import CompletionTokensDetailsWrapper, ModelResponse, PromptTokensDetailsWrapper, Usage
TIER_MODEL: Final = "tier-priced-test-model" TIER_MODEL: Final = "tier-priced-test-model"
TIER_ROW: Final[Mapping[str, float]] = MappingProxyType( TIER_ROW: Final[Mapping[str, float]] = MappingProxyType(
@ -48,6 +48,190 @@ AUDIO_TIER_ROW: Final[Mapping[str, float]] = MappingProxyType(
) )
@pytest.mark.parametrize("image_tokens", (60, 100))
@pytest.mark.parametrize(
("service_tier", "priority_rate", "image_rate"),
((None, 11e-06, 7e-06), ("priority", 11e-06, 11e-06), ("flex", 11e-06, 7e-06), ("priority", 0.0, 0.0)),
)
def test_completion_cost_uses_priority_image_output_rate(
local_model_cost_map: None, service_tier: str | None, priority_rate: float, image_rate: float, image_tokens: int
) -> None:
model: Final = "gemini-synthetic-image-priority"
litellm.register_model(
{
model: {
"litellm_provider": "vertex_ai",
"mode": "chat",
"input_cost_per_token": 3e-06,
"output_cost_per_token": 5e-06,
"output_cost_per_image_token": 7e-06,
"output_cost_per_image_token_priority": priority_rate,
}
}
)
response: Final = ModelResponse(
model=model,
usage=Usage(
prompt_tokens=20,
completion_tokens=100,
total_tokens=120,
completion_tokens_details=CompletionTokensDetailsWrapper(image_tokens=image_tokens),
),
)
cost: Final = litellm.completion_cost(
completion_response=response, model=model, custom_llm_provider="vertex_ai", service_tier=service_tier
)
assert cost == pytest.approx(20 * 3e-06 + (100 - image_tokens) * 5e-06 + image_tokens * image_rate)
@pytest.mark.parametrize("prompt_tokens", (199_999, 200_000, 200_001))
@pytest.mark.parametrize(
("service_tier", "flat_rate", "context_rate"),
((None, 7e-06, 11e-06), ("priority", 13e-06, 17e-06), ("flex", 19e-06, 23e-06)),
)
def test_completion_cost_uses_total_prompt_for_audio_context_tiers(
local_model_cost_map: None, prompt_tokens: int, service_tier: str | None, flat_rate: float, context_rate: float
) -> None:
model: Final = "gemini-synthetic-audio-context"
litellm.register_model(
{
model: {
"litellm_provider": "vertex_ai",
"mode": "chat",
"input_cost_per_token": 3e-06,
"output_cost_per_token": 5e-06,
"input_cost_per_audio_token": 7e-06,
"input_cost_per_audio_token_above_200k_tokens": 11e-06,
"input_cost_per_audio_token_priority": 13e-06,
"input_cost_per_audio_token_above_200k_tokens_priority": 17e-06,
"input_cost_per_audio_token_flex": 19e-06,
"input_cost_per_audio_token_above_200k_tokens_flex": 23e-06,
}
}
)
response: Final = ModelResponse(
model=model,
usage=Usage(
prompt_tokens=prompt_tokens,
completion_tokens=10,
total_tokens=prompt_tokens + 10,
prompt_tokens_details=PromptTokensDetailsWrapper(audio_tokens=100),
),
)
cost: Final = litellm.completion_cost(
completion_response=response, model=model, custom_llm_provider="vertex_ai", service_tier=service_tier
)
audio_rate: Final = context_rate if prompt_tokens > 200_000 else flat_rate
assert cost == pytest.approx((prompt_tokens - 100) * 3e-06 + 100 * audio_rate + 10 * 5e-06)
@pytest.mark.parametrize("prompt_tokens", (200_000, 200_001))
def test_batch_cost_uses_audio_context_and_image_output_tiers(local_model_cost_map: None, prompt_tokens: int) -> None:
from litellm.cost_calculator import batch_cost_calculator
model: Final = "gemini-synthetic-batch-audio-context"
litellm.register_model(
{
model: {
"litellm_provider": "vertex_ai",
"mode": "chat",
"input_cost_per_token": 6e-06,
"output_cost_per_token": 10e-06,
"input_cost_per_token_batches": 3e-06,
"output_cost_per_token_batches": 5e-06,
"input_cost_per_token_above_200k_tokens_batches": 13e-06,
"output_cost_per_token_above_200k_tokens_batches": 17e-06,
"output_cost_per_image_token_batches": 19e-06,
"input_cost_per_audio_token_batches": 7e-06,
"input_cost_per_audio_token_above_200k_tokens_batches": 11e-06,
}
}
)
usage: Final = Usage(
prompt_tokens=prompt_tokens,
completion_tokens=20,
total_tokens=prompt_tokens + 20,
prompt_tokens_details=PromptTokensDetailsWrapper(audio_tokens=100),
completion_tokens_details=CompletionTokensDetailsWrapper(image_tokens=10),
)
cost: Final = batch_cost_calculator(model=model, custom_llm_provider="vertex_ai", usage=usage)
audio_rate: Final = 11e-06 if prompt_tokens > 200_000 else 7e-06
input_rate: Final = 13e-06 if prompt_tokens > 200_000 else 3e-06
output_rate: Final = 17e-06 if prompt_tokens > 200_000 else 5e-06
assert sum(cost) == pytest.approx(
(prompt_tokens - 100) * input_rate + 100 * audio_rate + 10 * output_rate + 10 * 19e-06
)
@pytest.mark.parametrize("prompt_tokens", (200_000, 200_001))
def test_completion_cost_uses_flex_context_input_and_output_rates(
local_model_cost_map: None, prompt_tokens: int
) -> None:
model: Final = "gemini-synthetic-flex-context"
litellm.register_model(
{
model: {
"litellm_provider": "vertex_ai",
"mode": "chat",
"input_cost_per_token": 6e-06,
"output_cost_per_token": 10e-06,
"input_cost_per_token_flex": 3e-06,
"output_cost_per_token_flex": 5e-06,
"input_cost_per_token_above_200k_tokens_flex": 7e-06,
"output_cost_per_token_above_200k_tokens_flex": 11e-06,
}
}
)
response: Final = ModelResponse(
model=model, usage=Usage(prompt_tokens=prompt_tokens, completion_tokens=10, total_tokens=prompt_tokens + 10)
)
cost: Final = litellm.completion_cost(
completion_response=response, model=model, custom_llm_provider="vertex_ai", service_tier="flex"
)
input_rate: Final = 7e-06 if prompt_tokens > 200_000 else 3e-06
output_rate: Final = 11e-06 if prompt_tokens > 200_000 else 5e-06
assert cost == pytest.approx(prompt_tokens * input_rate + 10 * output_rate)
@pytest.mark.parametrize(
("audio_fields", "audio_rate"),
(
({}, 3e-06),
({"input_cost_per_audio_token": 7e-06}, 7e-06),
({"input_cost_per_audio_token_above_200k_tokens": 11e-06}, 11e-06),
({"input_cost_per_audio_token_above_200k_tokens_priority": 0.0}, 0.0),
),
)
def test_audio_context_rates_preserve_fallbacks_and_explicit_zero(
local_model_cost_map: None, audio_fields: Mapping[str, float], audio_rate: float
) -> None:
model: Final = "gemini-synthetic-audio-fallback"
litellm.register_model(
{
model: {
"litellm_provider": "vertex_ai",
"mode": "chat",
"input_cost_per_token": 3e-06,
"output_cost_per_token": 5e-06,
**audio_fields,
}
}
)
response: Final = ModelResponse(
model=model,
usage=Usage(
prompt_tokens=200_001,
completion_tokens=10,
total_tokens=200_011,
prompt_tokens_details=PromptTokensDetailsWrapper(audio_tokens=100),
),
)
cost: Final = litellm.completion_cost(
completion_response=response, model=model, custom_llm_provider="vertex_ai", service_tier="priority"
)
assert cost == pytest.approx(199_901 * 3e-06 + 100 * audio_rate + 10 * 5e-06)
def _cost_at(prices: Mapping[str, float], column_suffix: str) -> float: def _cost_at(prices: Mapping[str, float], column_suffix: str) -> float:
return ( return (
(PROMPT_TOKENS - CACHED_TOKENS) * prices[f"input_cost_per_token{column_suffix}"] (PROMPT_TOKENS - CACHED_TOKENS) * prices[f"input_cost_per_token{column_suffix}"]

View file

@ -279,6 +279,10 @@ def test_azure_rows_price_web_search_when_their_openai_model_does(prices: dict):
PRIORITY_SUFFIX: Final = "_priority" PRIORITY_SUFFIX: Final = "_priority"
MIN_PRIORITY_MARKUP: Final = 1.0 MIN_PRIORITY_MARKUP: Final = 1.0
MAX_PRIORITY_MARKUP: Final = 5.0 MAX_PRIORITY_MARKUP: Final = 5.0
# Vertex pricing, verified 2026-11-03: https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing
VERIFIED_PRIORITY_MARKUP_MAXIMA: Final = MappingProxyType(
{("gemini-2.5-flash", "input_cost_per_audio_token_above_200k_tokens_priority"): 6.0}
)
def _rate(value: JsonValue | None) -> float | None: def _rate(value: JsonValue | None) -> float | None:
@ -312,7 +316,7 @@ def test_priority_rates_stay_within_a_premium_of_their_standard_rate(path: Path)
overpriced: Final = tuple( overpriced: Final = tuple(
f"{name}.{key} is {markup:.1f}x its standard rate" f"{name}.{key} is {markup:.1f}x its standard rate"
for name, key, markup in markups for name, key, markup in markups
if not MIN_PRIORITY_MARKUP <= markup <= MAX_PRIORITY_MARKUP if not MIN_PRIORITY_MARKUP <= markup <= VERIFIED_PRIORITY_MARKUP_MAXIMA.get((name, key), MAX_PRIORITY_MARKUP)
) )
assert overpriced == (), ( assert overpriced == (), (
"a priority rate is a premium on the standard rate, so one below it or far above it was likely copied from " "a priority rate is a premium on the standard rate, so one below it or far above it was likely copied from "

View file

@ -1033,6 +1033,10 @@ _COST_MAP_ROW_SCHEMA: Final = {
"google_maps_grounding_cost_per_query": {"type": "number"}, "google_maps_grounding_cost_per_query": {"type": "number"},
"input_cost_per_audio_token": {"type": "number"}, "input_cost_per_audio_token": {"type": "number"},
"input_cost_per_audio_token_flex": {"type": "number"}, "input_cost_per_audio_token_flex": {"type": "number"},
"input_cost_per_audio_token_above_200k_tokens": {"type": "number"},
"input_cost_per_audio_token_above_200k_tokens_flex": {"type": "number"},
"input_cost_per_audio_token_above_200k_tokens_priority": {"type": "number"},
"input_cost_per_audio_token_above_200k_tokens_batches": {"type": "number"},
"input_cost_per_image_token": {"type": "number"}, "input_cost_per_image_token": {"type": "number"},
"input_cost_per_character": {"type": "number"}, "input_cost_per_character": {"type": "number"},
"input_cost_per_character_above_128k_tokens": {"type": "number"}, "input_cost_per_character_above_128k_tokens": {"type": "number"},
@ -1044,6 +1048,7 @@ _COST_MAP_ROW_SCHEMA: Final = {
"input_cost_per_token_above_100k_tokens_batches": {"type": "number"}, "input_cost_per_token_above_100k_tokens_batches": {"type": "number"},
"input_cost_per_token_above_200k_tokens": {"type": "number"}, "input_cost_per_token_above_200k_tokens": {"type": "number"},
"input_cost_per_token_above_200k_tokens_batches": {"type": "number"}, "input_cost_per_token_above_200k_tokens_batches": {"type": "number"},
"input_cost_per_token_above_200k_tokens_flex": {"type": "number"},
"input_cost_per_token_above_256k_tokens": {"type": "number"}, "input_cost_per_token_above_256k_tokens": {"type": "number"},
"input_cost_per_token_above_272k_tokens": {"type": "number"}, "input_cost_per_token_above_272k_tokens": {"type": "number"},
"input_cost_per_token_above_512k_tokens": {"type": "number"}, "input_cost_per_token_above_512k_tokens": {"type": "number"},
@ -1143,6 +1148,7 @@ _COST_MAP_ROW_SCHEMA: Final = {
"output_cost_per_image_4K": {"type": "number"}, "output_cost_per_image_4K": {"type": "number"},
"output_cost_per_image_token": {"type": "number"}, "output_cost_per_image_token": {"type": "number"},
"output_cost_per_image_token_batches": {"type": "number"}, "output_cost_per_image_token_batches": {"type": "number"},
"output_cost_per_image_token_priority": {"type": "number"},
"output_cost_per_video_token": {"type": "number"}, "output_cost_per_video_token": {"type": "number"},
"output_cost_per_pixel": {"type": "number"}, "output_cost_per_pixel": {"type": "number"},
"output_cost_per_second": {"type": "number"}, "output_cost_per_second": {"type": "number"},
@ -1159,6 +1165,7 @@ _COST_MAP_ROW_SCHEMA: Final = {
"output_cost_per_token_above_128k_tokens": {"type": "number"}, "output_cost_per_token_above_128k_tokens": {"type": "number"},
"output_cost_per_token_above_200k_tokens": {"type": "number"}, "output_cost_per_token_above_200k_tokens": {"type": "number"},
"output_cost_per_token_above_200k_tokens_batches": {"type": "number"}, "output_cost_per_token_above_200k_tokens_batches": {"type": "number"},
"output_cost_per_token_above_200k_tokens_flex": {"type": "number"},
"output_cost_per_token_above_256k_tokens": {"type": "number"}, "output_cost_per_token_above_256k_tokens": {"type": "number"},
"output_cost_per_token_above_272k_tokens": {"type": "number"}, "output_cost_per_token_above_272k_tokens": {"type": "number"},
"output_cost_per_token_above_512k_tokens": {"type": "number"}, "output_cost_per_token_above_512k_tokens": {"type": "number"},
@ -1447,6 +1454,27 @@ def test_aaamodel_prices_and_context_window_json_is_valid():
raise AssertionError(error_message) raise AssertionError(error_message)
def test_cost_map_schema_accepts_vertex_modality_and_context_tiers() -> None:
row: Final = {
"litellm_provider": "vertex_ai",
"mode": "chat",
"input_cost_per_token": 1e-6,
"output_cost_per_token": 2e-6,
"input_cost_per_token_above_200k_tokens_flex": 3e-6,
"output_cost_per_token_above_200k_tokens_flex": 4e-6,
"input_cost_per_token_above_200k_tokens_batches": 3e-6,
"output_cost_per_token_above_200k_tokens_batches": 4e-6,
"input_cost_per_audio_token_above_200k_tokens": 5e-6,
"input_cost_per_audio_token_above_200k_tokens_flex": 6e-6,
"input_cost_per_audio_token_above_200k_tokens_priority": 7e-6,
"input_cost_per_audio_token_above_200k_tokens_batches": 8e-6,
"output_cost_per_image_token_priority": 9e-6,
"output_cost_per_image_token_batches": 10e-6,
}
assert Draft7Validator(_COST_MAP_ROW_SCHEMA).is_valid({"synthetic-vertex-tier-model": row})
def test_cost_map_schema_accepts_12hr_cache_write_rates_for_batch_and_ultrafast_tiers() -> None: def test_cost_map_schema_accepts_12hr_cache_write_rates_for_batch_and_ultrafast_tiers() -> None:
row: Final = { row: Final = {
"litellm_provider": "openai", "litellm_provider": "openai",
@ -11102,7 +11130,6 @@ def test_get_provider_audio_transcription_config_resolves_for_every_provider() -
assert isinstance(configs[LlmProviders.OPENAI], litellm.OpenAIWhisperAudioTranscriptionConfig) assert isinstance(configs[LlmProviders.OPENAI], litellm.OpenAIWhisperAudioTranscriptionConfig)
@pytest.mark.parametrize( @pytest.mark.parametrize(
("custom_llm_provider", "model"), ("custom_llm_provider", "model"),
[ [

View file

@ -35935,6 +35935,14 @@ export interface components {
input_cost_per_audio_per_second_above_128k_tokens?: number | null; input_cost_per_audio_per_second_above_128k_tokens?: number | null;
/** Input Cost Per Audio Token */ /** Input Cost Per Audio Token */
input_cost_per_audio_token?: number | null; input_cost_per_audio_token?: number | null;
/** Input Cost Per Audio Token Above 200K Tokens */
input_cost_per_audio_token_above_200k_tokens?: number | null;
/** Input Cost Per Audio Token Above 200K Tokens Batches */
input_cost_per_audio_token_above_200k_tokens_batches?: number | null;
/** Input Cost Per Audio Token Above 200K Tokens Flex */
input_cost_per_audio_token_above_200k_tokens_flex?: number | null;
/** Input Cost Per Audio Token Above 200K Tokens Priority */
input_cost_per_audio_token_above_200k_tokens_priority?: number | null;
/** Input Cost Per Audio Token Batches */ /** Input Cost Per Audio Token Batches */
input_cost_per_audio_token_batches?: number | null; input_cost_per_audio_token_batches?: number | null;
/** Input Cost Per Audio Token Flex */ /** Input Cost Per Audio Token Flex */
@ -35973,6 +35981,8 @@ export interface components {
input_cost_per_token_above_200k_tokens?: number | null; input_cost_per_token_above_200k_tokens?: number | null;
/** Input Cost Per Token Above 200K Tokens Batches */ /** Input Cost Per Token Above 200K Tokens Batches */
input_cost_per_token_above_200k_tokens_batches?: number | null; input_cost_per_token_above_200k_tokens_batches?: number | null;
/** Input Cost Per Token Above 200K Tokens Flex */
input_cost_per_token_above_200k_tokens_flex?: number | null;
/** Input Cost Per Token Above 200K Tokens Priority */ /** Input Cost Per Token Above 200K Tokens Priority */
input_cost_per_token_above_200k_tokens_priority?: number | null; input_cost_per_token_above_200k_tokens_priority?: number | null;
/** Input Cost Per Token Above 272K Tokens */ /** Input Cost Per Token Above 272K Tokens */
@ -36080,6 +36090,8 @@ export interface components {
output_cost_per_image_token?: number | null; output_cost_per_image_token?: number | null;
/** Output Cost Per Image Token Batches */ /** Output Cost Per Image Token Batches */
output_cost_per_image_token_batches?: number | null; output_cost_per_image_token_batches?: number | null;
/** Output Cost Per Image Token Priority */
output_cost_per_image_token_priority?: number | null;
/** Output Cost Per Pixel */ /** Output Cost Per Pixel */
output_cost_per_pixel?: number | null; output_cost_per_pixel?: number | null;
/** Output Cost Per Reasoning Token */ /** Output Cost Per Reasoning Token */
@ -36114,6 +36126,8 @@ export interface components {
output_cost_per_token_above_200k_tokens?: number | null; output_cost_per_token_above_200k_tokens?: number | null;
/** Output Cost Per Token Above 200K Tokens Batches */ /** Output Cost Per Token Above 200K Tokens Batches */
output_cost_per_token_above_200k_tokens_batches?: number | null; output_cost_per_token_above_200k_tokens_batches?: number | null;
/** Output Cost Per Token Above 200K Tokens Flex */
output_cost_per_token_above_200k_tokens_flex?: number | null;
/** Output Cost Per Token Above 200K Tokens Priority */ /** Output Cost Per Token Above 200K Tokens Priority */
output_cost_per_token_above_200k_tokens_priority?: number | null; output_cost_per_token_above_200k_tokens_priority?: number | null;
/** Output Cost Per Token Above 272K Tokens */ /** Output Cost Per Token Above 272K Tokens */
@ -51574,6 +51588,14 @@ export interface components {
input_cost_per_audio_per_second_above_128k_tokens?: number | null; input_cost_per_audio_per_second_above_128k_tokens?: number | null;
/** Input Cost Per Audio Token */ /** Input Cost Per Audio Token */
input_cost_per_audio_token?: number | null; input_cost_per_audio_token?: number | null;
/** Input Cost Per Audio Token Above 200K Tokens */
input_cost_per_audio_token_above_200k_tokens?: number | null;
/** Input Cost Per Audio Token Above 200K Tokens Batches */
input_cost_per_audio_token_above_200k_tokens_batches?: number | null;
/** Input Cost Per Audio Token Above 200K Tokens Flex */
input_cost_per_audio_token_above_200k_tokens_flex?: number | null;
/** Input Cost Per Audio Token Above 200K Tokens Priority */
input_cost_per_audio_token_above_200k_tokens_priority?: number | null;
/** Input Cost Per Audio Token Batches */ /** Input Cost Per Audio Token Batches */
input_cost_per_audio_token_batches?: number | null; input_cost_per_audio_token_batches?: number | null;
/** Input Cost Per Audio Token Flex */ /** Input Cost Per Audio Token Flex */
@ -51612,6 +51634,8 @@ export interface components {
input_cost_per_token_above_200k_tokens?: number | null; input_cost_per_token_above_200k_tokens?: number | null;
/** Input Cost Per Token Above 200K Tokens Batches */ /** Input Cost Per Token Above 200K Tokens Batches */
input_cost_per_token_above_200k_tokens_batches?: number | null; input_cost_per_token_above_200k_tokens_batches?: number | null;
/** Input Cost Per Token Above 200K Tokens Flex */
input_cost_per_token_above_200k_tokens_flex?: number | null;
/** Input Cost Per Token Above 200K Tokens Priority */ /** Input Cost Per Token Above 200K Tokens Priority */
input_cost_per_token_above_200k_tokens_priority?: number | null; input_cost_per_token_above_200k_tokens_priority?: number | null;
/** Input Cost Per Token Above 272K Tokens */ /** Input Cost Per Token Above 272K Tokens */
@ -51719,6 +51743,8 @@ export interface components {
output_cost_per_image_token?: number | null; output_cost_per_image_token?: number | null;
/** Output Cost Per Image Token Batches */ /** Output Cost Per Image Token Batches */
output_cost_per_image_token_batches?: number | null; output_cost_per_image_token_batches?: number | null;
/** Output Cost Per Image Token Priority */
output_cost_per_image_token_priority?: number | null;
/** Output Cost Per Pixel */ /** Output Cost Per Pixel */
output_cost_per_pixel?: number | null; output_cost_per_pixel?: number | null;
/** Output Cost Per Reasoning Token */ /** Output Cost Per Reasoning Token */
@ -51753,6 +51779,8 @@ export interface components {
output_cost_per_token_above_200k_tokens?: number | null; output_cost_per_token_above_200k_tokens?: number | null;
/** Output Cost Per Token Above 200K Tokens Batches */ /** Output Cost Per Token Above 200K Tokens Batches */
output_cost_per_token_above_200k_tokens_batches?: number | null; output_cost_per_token_above_200k_tokens_batches?: number | null;
/** Output Cost Per Token Above 200K Tokens Flex */
output_cost_per_token_above_200k_tokens_flex?: number | null;
/** Output Cost Per Token Above 200K Tokens Priority */ /** Output Cost Per Token Above 200K Tokens Priority */
output_cost_per_token_above_200k_tokens_priority?: number | null; output_cost_per_token_above_200k_tokens_priority?: number | null;
/** Output Cost Per Token Above 272K Tokens */ /** Output Cost Per Token Above 272K Tokens */