mirror of
https://github.com/BerriAI/litellm.git
synced 2026-11-12 08:42:18 +00:00
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:
parent
65950dba8b
commit
62f85afacf
10 changed files with 555 additions and 173 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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}"]
|
||||
|
|
|
|||
|
|
@ -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 "
|
||||
|
|
|
|||
|
|
@ -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"),
|
||||
[
|
||||
|
|
|
|||
28
ui/litellm-dashboard/src/lib/http/schema.d.ts
generated
vendored
28
ui/litellm-dashboard/src/lib/http/schema.d.ts
generated
vendored
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue