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,
get_batch_cost_rates,
get_billable_input_tokens,
get_cost_per_unit,
get_modality_token_cost_key,
get_regional_uplift_multiplier,
get_service_tier_cost_key,
get_token_type_cost_breakdown,
@ -3186,8 +3188,12 @@ def _batch_rate(
"input_cost_per_video_token_batches",
],
fallback: float,
*,
prompt_tokens: int = 0,
) -> 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
@ -3337,7 +3343,8 @@ def _batch_prompt_cost(
)
return (
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)
+ 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)

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(
model_info: ModelInfo,
modality_cost_key: str,
tokens: int,
prompt_base_cost: float,
service_tier: str | None,
*,
prompt_tokens: int = 0,
threshold_is_inclusive: bool = False,
) -> float:
"""
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
`_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 = tiered_key if model_info.get(tiered_key) is not None else modality_cost_key
if model_info.get(cost_key) is None:
cost_key: Final = get_modality_token_cost_key(
model_info,
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 calculate_cost_component(model_info, cost_key, tokens)
@ -1230,6 +1264,9 @@ def _calculate_input_cost(
cache_creation_cost: float,
cache_creation_cost_by_ttl: Mapping[str, float],
service_tier: str | None = None,
*,
prompt_tokens: int = 0,
threshold_is_inclusive: bool = False,
) -> float:
"""
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_base_cost,
service_tier,
prompt_tokens=prompt_tokens,
threshold_is_inclusive=threshold_is_inclusive,
)
### IMAGE TOKEN COST
@ -1618,6 +1657,8 @@ def generic_cost_per_token(
cache_creation_cost=base_costs.cache_creation_rate,
cache_creation_cost_by_ttl=base_costs.cache_creation_rates_by_ttl,
service_tier=service_tier,
prompt_tokens=usage.prompt_tokens,
threshold_is_inclusive=_uses_inclusive_token_thresholds(custom_llm_provider),
)
## CALCULATE OUTPUT COST
@ -1675,11 +1716,9 @@ def generic_cost_per_token(
## IMAGE COST
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)
_output_cost_per_image_token = (
_output_cost_per_image_token if _output_cost_per_image_token is not None else completion_base_cost
)
completion_cost += float(image_tokens) * _output_cost_per_image_token
image_cost_key: Final = get_service_tier_cost_key("output_cost_per_image_token", service_tier)
image_rate: Final = get_cost_per_unit(resolved_model_info, image_cost_key, None)
completion_cost += float(image_tokens) * (completion_base_cost if image_rate is None else image_rate)
## VIDEO COST
if not is_text_tokens_total and video_tokens and video_tokens > 0:

View file

@ -29951,21 +29951,38 @@
},
"gemini-2.5-flash": {
"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",
"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_flex": 3e-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_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_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",
"max_input_tokens": 1048576,
"max_output_tokens": 65535,
"mode": "chat",
"output_cost_per_reasoning_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",
"successor_model": "gemini-3.8-flash",
"supported_endpoints": [
"/v1/chat/completions",
"/v1/completions",
@ -29982,6 +29999,7 @@
],
"supports_audio_output": false,
"supports_function_calling": true,
"supports_image_size": false,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
@ -29991,23 +30009,7 @@
"supports_tool_choice": true,
"supports_url_context": true,
"supports_vision": 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
"supports_web_search": true
},
"gemini-2.5-flash-image": {
"deprecation_date": "2027-03-15",
@ -30083,6 +30085,7 @@
"output_cost_per_image": 0.134,
"output_cost_per_image_token": 0.00012,
"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_above_200k_tokens": 1.8e-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_token": 0.00012,
"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_priority": 2.16e-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_token": 6e-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_batches": 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_token": 6e-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_batches": 1.5e-06,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
@ -30268,8 +30274,6 @@
"web_search_billing_unit": "per_query"
},
"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_batches": 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_token": 3e-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_batches": 7.5e-07,
"output_cost_per_token_flex": 7.5e-07,
@ -30366,19 +30371,28 @@
},
"gemini-3.1-flash-lite": {
"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",
"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_batches": 1.25e-08,
"cache_read_input_token_cost_flex": 1.25e-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_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_batches": 1.25e-07,
"input_cost_per_token_flex": 1.25e-07,
"input_cost_per_token_priority": 4.5e-07,
"input_cost_per_audio_token_priority": 9e-07,
"litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576,
"max_output_tokens": 65536,
@ -30388,7 +30402,10 @@
"output_cost_per_token_batches": 7.5e-07,
"output_cost_per_token_flex": 7.5e-07,
"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",
"successor_model": "gemini-3.5-flash-lite",
"supported_endpoints": [
"/v1/chat/completions",
"/v1/completions",
@ -30406,6 +30423,7 @@
"supports_audio_input": true,
"supports_audio_output": false,
"supports_function_calling": true,
"supports_native_streaming": true,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
@ -30417,16 +30435,7 @@
"supports_video_input": true,
"supports_vision": true,
"supports_web_search": true,
"supports_native_streaming": true,
"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
"web_search_billing_unit": "per_query"
},
"gemini-3.5-flash-lite": {
"deprecation_date": "2027-07-21",
@ -30526,21 +30535,38 @@
},
"gemini-2.5-flash-lite": {
"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",
"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_flex": 1e-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_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_batches": 5e-08,
"input_cost_per_token_flex": 5e-08,
"input_cost_per_token_priority": 1.8e-07,
"litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576,
"max_output_tokens": 65535,
"mode": "chat",
"output_cost_per_reasoning_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",
"successor_model": "gemini-3.8-flash",
"supported_endpoints": [
"/v1/chat/completions",
"/v1/completions",
@ -30557,6 +30583,7 @@
],
"supports_audio_output": false,
"supports_function_calling": true,
"supports_image_size": false,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
@ -30566,23 +30593,7 @@
"supports_tool_choice": true,
"supports_url_context": true,
"supports_vision": 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
"supports_web_search": true
},
"gemini-2.5-flash-lite-preview-09-2025": {
"cache_read_input_token_cost": 1e-08,
@ -30863,11 +30874,13 @@
"search_free_requests": {"count": 10000, "period": "day", "shared_group": "gemini-2.5-pro"},
"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_flex": 1.25e-06,
"input_cost_per_token_above_200k_tokens_priority": 4.5e-06,
"input_cost_per_token_batches": 6.25e-07,
"input_cost_per_token_flex": 6.25e-07,
"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_flex": 7.5e-06,
"output_cost_per_token_above_200k_tokens_priority": 2.7e-05,
"output_cost_per_token_batches": 5e-06,
"output_cost_per_token_flex": 5e-06,
@ -30883,6 +30896,7 @@
"input_cost_per_token": 2e-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_flex": 2e-06,
"input_cost_per_token_above_200k_tokens_priority": 7.2e-06,
"input_cost_per_token_batches": 1e-06,
"input_cost_per_token_flex": 1e-06,
@ -30895,6 +30909,7 @@
"output_cost_per_token": 1.2e-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_flex": 9e-06,
"output_cost_per_token_above_200k_tokens_priority": 3.24e-05,
"output_cost_per_token_batches": 6e-06,
"output_cost_per_token_flex": 6e-06,
@ -31042,11 +31057,17 @@
},
"vertex_ai/gemini-3-flash-preview": {
"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_priority": 9e-08,
"google_maps_grounding_cost_per_query": 0.014,
"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_flex": 5e-07,
"input_cost_per_audio_token_priority": 1.8e-06,
"input_cost_per_token": 5e-07,
"input_cost_per_token_batches": 2.5e-07,
@ -31061,7 +31082,7 @@
"output_cost_per_token_flex": 1.5e-06,
"output_cost_per_token_priority": 5.4e-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"},
"search_free_requests": {"count":5000,"period":"month","shared_group":"gemini-3"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supported_endpoints": [
"/v1/chat/completions",
@ -31284,8 +31305,6 @@
"google_maps_grounding_cost_per_query": 0.014
},
"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_batches": 3.75e-08,
"cache_read_input_token_cost_flex": 3.75e-08,
@ -31307,7 +31326,7 @@
"prompt_cache_min_tokens": 4096.0,
"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"},
"search_free_requests": {"count":5000,"period":"month","shared_group":"gemini-3"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supported_endpoints": [
"/v1/chat/completions",
@ -31392,8 +31411,6 @@
"supports_native_streaming": true
},
"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,
"input_cost_per_audio_token": 3e-06,
"input_cost_per_image_token": 1e-06,
@ -31439,6 +31456,7 @@
"input_cost_per_token": 2e-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_flex": 2e-06,
"input_cost_per_token_above_200k_tokens_priority": 7.2e-06,
"input_cost_per_token_batches": 1e-06,
"input_cost_per_token_flex": 1e-06,
@ -31451,6 +31469,7 @@
"output_cost_per_token": 1.2e-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_flex": 9e-06,
"output_cost_per_token_above_200k_tokens_priority": 3.24e-05,
"output_cost_per_token_batches": 6e-06,
"output_cost_per_token_flex": 6e-06,
@ -33332,11 +33351,17 @@
},
"gemini-3-flash-preview": {
"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_priority": 9e-08,
"google_maps_grounding_cost_per_query": 0.014,
"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_flex": 5e-07,
"input_cost_per_audio_token_priority": 1.8e-06,
"input_cost_per_token": 5e-07,
"input_cost_per_token_batches": 2.5e-07,
@ -33352,7 +33377,7 @@
"output_cost_per_token_flex": 1.5e-06,
"output_cost_per_token_priority": 5.4e-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"},
"search_free_requests": {"count":5000,"period":"month","shared_group":"gemini-3"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supported_endpoints": [
"/v1/chat/completions",
@ -33607,8 +33632,6 @@
"google_maps_grounding_cost_per_query": 0.014
},
"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_batches": 3.75e-08,
"cache_read_input_token_cost_flex": 3.75e-08,
@ -33629,7 +33652,7 @@
"output_cost_per_token_priority": 6.75e-06,
"prompt_cache_min_tokens": 4096.0,
"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"},
"search_free_requests": {"count":5000,"period":"month","shared_group":"gemini-3"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supported_endpoints": [
"/v1/chat/completions",
@ -53876,6 +53899,7 @@
"output_cost_per_image": 0.134,
"output_cost_per_image_token": 0.00012,
"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_above_200k_tokens": 1.8e-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_token": 0.00012,
"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_priority": 2.16e-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_token": 6e-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_batches": 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_token": 6e-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_batches": 1.5e-06,
"supports_reasoning": false,
@ -53986,8 +54013,6 @@
},
"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_batches": 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_token": 3e-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_batches": 7.5e-07,
"output_cost_per_token_flex": 7.5e-07,
@ -54084,19 +54110,28 @@
},
"vertex_ai/gemini-3.1-flash-lite": {
"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",
"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_batches": 1.25e-08,
"cache_read_input_token_cost_flex": 1.25e-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_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_batches": 1.25e-07,
"input_cost_per_token_flex": 1.25e-07,
"input_cost_per_token_priority": 4.5e-07,
"input_cost_per_audio_token_priority": 9e-07,
"litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576,
"max_output_tokens": 65536,
@ -54107,7 +54142,10 @@
"output_cost_per_token_flex": 7.5e-07,
"output_cost_per_token_priority": 2.7e-06,
"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",
"successor_model": "vertex_ai/gemini-3.5-flash-lite",
"supported_endpoints": [
"/v1/chat/completions",
"/v1/completions",
@ -54125,6 +54163,7 @@
"supports_audio_input": true,
"supports_audio_output": false,
"supports_function_calling": true,
"supports_native_streaming": true,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
@ -54136,16 +54175,7 @@
"supports_video_input": true,
"supports_vision": true,
"supports_web_search": true,
"supports_native_streaming": true,
"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
"web_search_billing_unit": "per_query"
},
"vertex_ai/gemini-3.5-flash-lite": {
"deprecation_date": "2027-07-21",
@ -77226,6 +77256,7 @@
"output_cost_per_image": 0.0336,
"output_cost_per_image_token": 3e-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_batches": 3.75e-06,
"output_cost_per_token_priority": 1.35e-05,
@ -77272,6 +77303,7 @@
"output_cost_per_image": 0.0336,
"output_cost_per_image_token": 3e-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_batches": 3.75e-06,
"output_cost_per_token_priority": 1.35e-05,
@ -78395,8 +78427,6 @@
"web_search_billing_unit": "per_query"
},
"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_batches": 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_audio_token: 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_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
@ -408,10 +412,12 @@ class ModelInfoBase(ProviderSpecificModelInfo, total=False):
input_cost_per_token_batches: 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_flex: 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]
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_flex: 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: Required[float | None]
@ -444,6 +450,7 @@ class ModelInfoBase(ProviderSpecificModelInfo, total=False):
output_cost_per_pixel: ReadOnly[float | None]
output_cost_per_image_token: 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_vector_size: int | 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_audio_token: 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_token_cache_hit: 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_ultrafast: 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_272k_tokens_batches: 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_ultrafast: 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_272k_tokens_batches: float | None = None
output_cost_per_character_above_128k_tokens: float | None = None
output_cost_per_image: 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_priority: float | None = None
output_cost_per_video_token: float | None = None
output_cost_per_reasoning_token: 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_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_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_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),
@ -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"
),
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"
),
@ -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"
),
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"
),
@ -7526,6 +7544,7 @@ def get_model_info_helper(
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_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_vector_size=_model_info.get("output_vector_size", None),
citation_cost_per_token=_model_info.get("citation_cost_per_token", None),

View file

@ -29951,21 +29951,38 @@
},
"gemini-2.5-flash": {
"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",
"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_flex": 3e-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_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_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",
"max_input_tokens": 1048576,
"max_output_tokens": 65535,
"mode": "chat",
"output_cost_per_reasoning_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",
"successor_model": "gemini-3.8-flash",
"supported_endpoints": [
"/v1/chat/completions",
"/v1/completions",
@ -29982,6 +29999,7 @@
],
"supports_audio_output": false,
"supports_function_calling": true,
"supports_image_size": false,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
@ -29991,23 +30009,7 @@
"supports_tool_choice": true,
"supports_url_context": true,
"supports_vision": 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
"supports_web_search": true
},
"gemini-2.5-flash-image": {
"deprecation_date": "2027-03-15",
@ -30083,6 +30085,7 @@
"output_cost_per_image": 0.134,
"output_cost_per_image_token": 0.00012,
"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_above_200k_tokens": 1.8e-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_token": 0.00012,
"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_priority": 2.16e-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_token": 6e-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_batches": 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_token": 6e-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_batches": 1.5e-06,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
@ -30268,8 +30274,6 @@
"web_search_billing_unit": "per_query"
},
"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_batches": 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_token": 3e-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_batches": 7.5e-07,
"output_cost_per_token_flex": 7.5e-07,
@ -30366,19 +30371,28 @@
},
"gemini-3.1-flash-lite": {
"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",
"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_batches": 1.25e-08,
"cache_read_input_token_cost_flex": 1.25e-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_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_batches": 1.25e-07,
"input_cost_per_token_flex": 1.25e-07,
"input_cost_per_token_priority": 4.5e-07,
"input_cost_per_audio_token_priority": 9e-07,
"litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576,
"max_output_tokens": 65536,
@ -30388,7 +30402,10 @@
"output_cost_per_token_batches": 7.5e-07,
"output_cost_per_token_flex": 7.5e-07,
"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",
"successor_model": "gemini-3.5-flash-lite",
"supported_endpoints": [
"/v1/chat/completions",
"/v1/completions",
@ -30406,6 +30423,7 @@
"supports_audio_input": true,
"supports_audio_output": false,
"supports_function_calling": true,
"supports_native_streaming": true,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
@ -30417,16 +30435,7 @@
"supports_video_input": true,
"supports_vision": true,
"supports_web_search": true,
"supports_native_streaming": true,
"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
"web_search_billing_unit": "per_query"
},
"gemini-3.5-flash-lite": {
"deprecation_date": "2027-07-21",
@ -30526,21 +30535,38 @@
},
"gemini-2.5-flash-lite": {
"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",
"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_flex": 1e-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_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_batches": 5e-08,
"input_cost_per_token_flex": 5e-08,
"input_cost_per_token_priority": 1.8e-07,
"litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576,
"max_output_tokens": 65535,
"mode": "chat",
"output_cost_per_reasoning_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",
"successor_model": "gemini-3.8-flash",
"supported_endpoints": [
"/v1/chat/completions",
"/v1/completions",
@ -30557,6 +30583,7 @@
],
"supports_audio_output": false,
"supports_function_calling": true,
"supports_image_size": false,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
@ -30566,23 +30593,7 @@
"supports_tool_choice": true,
"supports_url_context": true,
"supports_vision": 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
"supports_web_search": true
},
"gemini-2.5-flash-lite-preview-09-2025": {
"cache_read_input_token_cost": 1e-08,
@ -30863,11 +30874,13 @@
"search_free_requests": {"count": 10000, "period": "day", "shared_group": "gemini-2.5-pro"},
"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_flex": 1.25e-06,
"input_cost_per_token_above_200k_tokens_priority": 4.5e-06,
"input_cost_per_token_batches": 6.25e-07,
"input_cost_per_token_flex": 6.25e-07,
"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_flex": 7.5e-06,
"output_cost_per_token_above_200k_tokens_priority": 2.7e-05,
"output_cost_per_token_batches": 5e-06,
"output_cost_per_token_flex": 5e-06,
@ -30883,6 +30896,7 @@
"input_cost_per_token": 2e-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_flex": 2e-06,
"input_cost_per_token_above_200k_tokens_priority": 7.2e-06,
"input_cost_per_token_batches": 1e-06,
"input_cost_per_token_flex": 1e-06,
@ -30895,6 +30909,7 @@
"output_cost_per_token": 1.2e-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_flex": 9e-06,
"output_cost_per_token_above_200k_tokens_priority": 3.24e-05,
"output_cost_per_token_batches": 6e-06,
"output_cost_per_token_flex": 6e-06,
@ -31042,11 +31057,17 @@
},
"vertex_ai/gemini-3-flash-preview": {
"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_priority": 9e-08,
"google_maps_grounding_cost_per_query": 0.014,
"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_flex": 5e-07,
"input_cost_per_audio_token_priority": 1.8e-06,
"input_cost_per_token": 5e-07,
"input_cost_per_token_batches": 2.5e-07,
@ -31061,7 +31082,7 @@
"output_cost_per_token_flex": 1.5e-06,
"output_cost_per_token_priority": 5.4e-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"},
"search_free_requests": {"count":5000,"period":"month","shared_group":"gemini-3"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supported_endpoints": [
"/v1/chat/completions",
@ -31284,8 +31305,6 @@
"google_maps_grounding_cost_per_query": 0.014
},
"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_batches": 3.75e-08,
"cache_read_input_token_cost_flex": 3.75e-08,
@ -31307,7 +31326,7 @@
"prompt_cache_min_tokens": 4096.0,
"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"},
"search_free_requests": {"count":5000,"period":"month","shared_group":"gemini-3"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supported_endpoints": [
"/v1/chat/completions",
@ -31392,8 +31411,6 @@
"supports_native_streaming": true
},
"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,
"input_cost_per_audio_token": 3e-06,
"input_cost_per_image_token": 1e-06,
@ -31439,6 +31456,7 @@
"input_cost_per_token": 2e-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_flex": 2e-06,
"input_cost_per_token_above_200k_tokens_priority": 7.2e-06,
"input_cost_per_token_batches": 1e-06,
"input_cost_per_token_flex": 1e-06,
@ -31451,6 +31469,7 @@
"output_cost_per_token": 1.2e-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_flex": 9e-06,
"output_cost_per_token_above_200k_tokens_priority": 3.24e-05,
"output_cost_per_token_batches": 6e-06,
"output_cost_per_token_flex": 6e-06,
@ -33332,11 +33351,17 @@
},
"gemini-3-flash-preview": {
"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_priority": 9e-08,
"google_maps_grounding_cost_per_query": 0.014,
"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_flex": 5e-07,
"input_cost_per_audio_token_priority": 1.8e-06,
"input_cost_per_token": 5e-07,
"input_cost_per_token_batches": 2.5e-07,
@ -33352,7 +33377,7 @@
"output_cost_per_token_flex": 1.5e-06,
"output_cost_per_token_priority": 5.4e-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"},
"search_free_requests": {"count":5000,"period":"month","shared_group":"gemini-3"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supported_endpoints": [
"/v1/chat/completions",
@ -33607,8 +33632,6 @@
"google_maps_grounding_cost_per_query": 0.014
},
"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_batches": 3.75e-08,
"cache_read_input_token_cost_flex": 3.75e-08,
@ -33629,7 +33652,7 @@
"output_cost_per_token_priority": 6.75e-06,
"prompt_cache_min_tokens": 4096.0,
"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"},
"search_free_requests": {"count":5000,"period":"month","shared_group":"gemini-3"},
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supported_endpoints": [
"/v1/chat/completions",
@ -53876,6 +53899,7 @@
"output_cost_per_image": 0.134,
"output_cost_per_image_token": 0.00012,
"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_above_200k_tokens": 1.8e-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_token": 0.00012,
"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_priority": 2.16e-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_token": 6e-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_batches": 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_token": 6e-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_batches": 1.5e-06,
"supports_reasoning": false,
@ -53986,8 +54013,6 @@
},
"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_batches": 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_token": 3e-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_batches": 7.5e-07,
"output_cost_per_token_flex": 7.5e-07,
@ -54084,19 +54110,28 @@
},
"vertex_ai/gemini-3.1-flash-lite": {
"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",
"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_batches": 1.25e-08,
"cache_read_input_token_cost_flex": 1.25e-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_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_batches": 1.25e-07,
"input_cost_per_token_flex": 1.25e-07,
"input_cost_per_token_priority": 4.5e-07,
"input_cost_per_audio_token_priority": 9e-07,
"litellm_provider": "vertex_ai-language-models",
"max_input_tokens": 1048576,
"max_output_tokens": 65536,
@ -54107,7 +54142,10 @@
"output_cost_per_token_flex": 7.5e-07,
"output_cost_per_token_priority": 2.7e-06,
"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",
"successor_model": "vertex_ai/gemini-3.5-flash-lite",
"supported_endpoints": [
"/v1/chat/completions",
"/v1/completions",
@ -54125,6 +54163,7 @@
"supports_audio_input": true,
"supports_audio_output": false,
"supports_function_calling": true,
"supports_native_streaming": true,
"supports_parallel_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
@ -54136,16 +54175,7 @@
"supports_video_input": true,
"supports_vision": true,
"supports_web_search": true,
"supports_native_streaming": true,
"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
"web_search_billing_unit": "per_query"
},
"vertex_ai/gemini-3.5-flash-lite": {
"deprecation_date": "2027-07-21",
@ -77226,6 +77256,7 @@
"output_cost_per_image": 0.0336,
"output_cost_per_image_token": 3e-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_batches": 3.75e-06,
"output_cost_per_token_priority": 1.35e-05,
@ -77272,6 +77303,7 @@
"output_cost_per_image": 0.0336,
"output_cost_per_image_token": 3e-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_batches": 3.75e-06,
"output_cost_per_token_priority": 1.35e-05,
@ -78395,8 +78427,6 @@
"web_search_billing_unit": "per_query"
},
"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_batches": 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.litellm_core_utils.logging_worker import GLOBAL_LOGGING_WORKER
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_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:
return (
(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"
MIN_PRIORITY_MARKUP: Final = 1.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:
@ -312,7 +316,7 @@ def test_priority_rates_stay_within_a_premium_of_their_standard_rate(path: Path)
overpriced: Final = tuple(
f"{name}.{key} is {markup:.1f}x its standard rate"
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 == (), (
"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"},
"input_cost_per_audio_token": {"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_character": {"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_200k_tokens": {"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_272k_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_token": {"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_pixel": {"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_200k_tokens": {"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_272k_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)
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:
row: Final = {
"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)
@pytest.mark.parametrize(
("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 Token */
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?: number | null;
/** 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 Batches */
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?: number | null;
/** 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 Batches */
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?: number | null;
/** 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 Batches */
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?: number | null;
/** 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 Token */
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?: number | null;
/** 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 Batches */
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?: number | null;
/** 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 Batches */
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?: number | null;
/** 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 Batches */
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?: number | null;
/** Output Cost Per Token Above 272K Tokens */