diff --git a/litellm/litellm_core_utils/llm_cost_calc/utils.py b/litellm/litellm_core_utils/llm_cost_calc/utils.py index bdbaee00c19..19e3f624268 100644 --- a/litellm/litellm_core_utils/llm_cost_calc/utils.py +++ b/litellm/litellm_core_utils/llm_cost_calc/utils.py @@ -1,6 +1,7 @@ # What is this? ## Helper utilities for cost_per_token() +import re from collections.abc import Mapping from dataclasses import dataclass from types import MappingProxyType @@ -72,6 +73,19 @@ def _get_token_detail_value(details: object, key: str) -> int | None: return value if isinstance(value, int) else None +_IMAGE_SIZE_PATTERN: Final = re.compile(r"\d+(?:x|-x-)\d+") + + +def _requested_image_param(optional_params: Mapping[str, object] | None, key: str) -> str | None: + value: Final = None if optional_params is None else optional_params.get(key) + return value if isinstance(value, str) else None + + +def _requested_image_size(optional_params: Mapping[str, object] | None) -> str | None: + value: Final = _requested_image_param(optional_params, "size") + return value if value is not None and _IMAGE_SIZE_PATTERN.fullmatch(value) else None + + def get_web_search_requests(server_tool_use: Any) -> int | None: """ Tolerantly read ``web_search_requests`` from a ``server_tool_use`` value @@ -1311,12 +1325,13 @@ class CostCalculatorUtils: cost_calculator as vertex_ai_image_cost_calculator, ) - if size is None: - size = completion_response.size or "1024-x-1024" - if quality is None: - quality = completion_response.quality or "standard" - if n is None: - n = len(completion_response.data) if completion_response.data else 0 + resolved_size: Final = ( + size or completion_response.size or _requested_image_size(optional_params) or "1024-x-1024" + ) + resolved_quality: Final = ( + quality or completion_response.quality or _requested_image_param(optional_params, "quality") or "standard" + ) + resolved_n: Final = n if n is not None else (len(completion_response.data) if completion_response.data else 0) if custom_llm_provider == litellm.LlmProviders.VERTEX_AI.value: if isinstance(completion_response, ImageResponse): @@ -1328,7 +1343,7 @@ class CostCalculatorUtils: if isinstance(completion_response, ImageResponse): return bedrock_image_cost_calculator( model=model, - size=size, + size=resolved_size, image_response=completion_response, optional_params=optional_params, ) @@ -1424,19 +1439,19 @@ class CostCalculatorUtils: # Fall through to default for DALL-E models return default_image_cost_calculator( model=model, - quality=quality, + quality=resolved_quality, custom_llm_provider=custom_llm_provider, - n=n, - size=size, + n=resolved_n, + size=resolved_size, optional_params=optional_params, ) else: return default_image_cost_calculator( model=model, - quality=quality, + quality=resolved_quality, custom_llm_provider=custom_llm_provider, - n=n, - size=size, + n=resolved_n, + size=resolved_size, optional_params=optional_params, ) return 0.0 diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index aa33e0d5010..b9415c17d81 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -15216,6 +15216,29 @@ "supports_tool_choice": true, "supports_vision": false }, + "databricks/databricks-glm-5-3-flash": { + "litellm_provider": "databricks", + "max_input_tokens": 1048576, + "max_output_tokens": 131072, + "max_tokens": 131072, + "metadata": { + "notes": "Databricks has not published pay-per-token DBU rates for this model yet (not on the foundation-model-serving pricing page as of 2026-08-27), so cost fields are omitted until rates are published." + }, + "mode": "chat", + "source": "https://docs.databricks.com/aws/en/machine-learning/foundation-model-apis/supported-models", + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true + }, "databricks/databricks-gpt-5": { "cache_creation_input_token_cost": 1.24999e-06, "cache_read_input_token_cost": 1.2502e-07, @@ -22971,9 +22994,9 @@ "input_cost_per_audio_token": 1.5e-06, "input_cost_per_token": 1.5e-06, "litellm_provider": "gemini", - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_tokens": 65535, + "max_input_tokens": 131072, + "max_output_tokens": 65536, + "max_tokens": 65536, "mode": "chat", "output_cost_per_reasoning_token": 9e-06, "output_cost_per_token": 9e-06, @@ -22981,7 +23004,7 @@ "rpm": 2000, "source": "https://ai.google.dev/gemini-api/docs/pricing", "supported_endpoints": [ - "/v1/chat/completions" + "/v1beta/interactions" ], "supported_modalities": [ "text", @@ -30807,6 +30830,7 @@ "supports_tool_choice": true }, "mistral/codestral-2508": { + "cache_read_input_token_cost": 3e-08, "input_cost_per_token": 3e-07, "litellm_provider": "mistral", "max_input_tokens": 128000, @@ -30821,6 +30845,7 @@ "supports_tool_choice": true }, "mistral/codestral-latest": { + "cache_read_input_token_cost": 3e-08, "input_cost_per_token": 3e-07, "litellm_provider": "mistral", "max_input_tokens": 128000, @@ -30828,11 +30853,11 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 9e-07, - "supports_assistant_prefill": true, - "supports_response_schema": true, - "supports_tool_choice": true, "source": "https://docs.mistral.ai/models/model-cards/codestral-25-08", - "supports_function_calling": true + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true }, "mistral/codestral-mamba-latest": { "input_cost_per_token": 2.5e-07, @@ -31312,6 +31337,7 @@ "mode": "embedding" }, "mistral/codestral-embed": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 8192, @@ -31319,6 +31345,7 @@ "mode": "embedding" }, "mistral/codestral-embed-2505": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 8192, @@ -31368,6 +31395,7 @@ "supports_tool_choice": true }, "mistral/mistral-large-latest": { + "cache_read_input_token_cost": 5e-08, "input_cost_per_token": 5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31383,6 +31411,7 @@ "supports_vision": true }, "mistral/mistral-large-3": { + "cache_read_input_token_cost": 5e-08, "input_cost_per_token": 5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31398,6 +31427,7 @@ "supports_vision": true }, "mistral/mistral-large-2512": { + "cache_read_input_token_cost": 5e-08, "input_cost_per_token": 5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31468,6 +31498,7 @@ "supports_vision": true }, "mistral/mistral-medium-2604": { + "cache_read_input_token_cost": 1.5e-07, "input_cost_per_token": 1.5e-06, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31484,6 +31515,7 @@ "supports_vision": true }, "mistral/mistral-medium-latest": { + "cache_read_input_token_cost": 1.5e-07, "input_cost_per_token": 1.5e-06, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31516,6 +31548,7 @@ "supports_vision": true }, "mistral/mistral-medium-3-5": { + "cache_read_input_token_cost": 1.5e-07, "input_cost_per_token": 1.5e-06, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31545,6 +31578,7 @@ "supports_tool_choice": true }, "mistral/mistral-small-latest": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31555,9 +31589,9 @@ "source": "https://docs.mistral.ai/models/model-cards/mistral-small-4-0-26-03", "supports_assistant_prefill": true, "supports_function_calling": true, + "supports_reasoning": true, "supports_response_schema": true, "supports_tool_choice": true, - "supports_reasoning": true, "supports_vision": true }, "mistral/mistral-small-3-2-2506": { @@ -31577,6 +31611,7 @@ "supports_vision": true }, "mistral/ministral-3-3b-2512": { + "cache_read_input_token_cost": 1e-08, "input_cost_per_token": 1e-07, "litellm_provider": "mistral", "max_input_tokens": 131072, @@ -31592,6 +31627,7 @@ "supports_vision": true }, "mistral/ministral-3-8b-2512": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31607,6 +31643,7 @@ "supports_vision": true }, "mistral/ministral-3-14b-2512": { + "cache_read_input_token_cost": 2e-08, "input_cost_per_token": 2e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31622,6 +31659,7 @@ "supports_vision": true }, "mistral/ministral-8b-2512": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31637,6 +31675,7 @@ "supports_vision": true }, "mistral/ministral-8b-latest": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31844,6 +31883,24 @@ "supports_tool_choice": true, "supports_web_search": true }, + "moonshot/kimi-k2.7-code": { + "cache_read_input_token_cost": 1.9e-07, + "input_cost_per_token": 9.5e-07, + "litellm_provider": "moonshot", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "output_cost_per_token": 4e-06, + "source": "https://platform.kimi.ai/docs/pricing/chat-k27-code", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_video_input": true, + "supports_vision": true + }, "moonshot/kimi-k2-turbo-preview": { "cache_read_input_token_cost": 1.5e-07, "deprecation_date": "2026-05-25", @@ -44611,6 +44668,22 @@ "supports_reasoning": true, "supports_tool_choice": true }, + "zai/glm-5.3-flash": { + "cache_creation_input_token_cost": 0, + "cache_read_input_token_cost": 3e-08, + "input_cost_per_token": 1.5e-07, + "output_cost_per_token": 5e-07, + "litellm_provider": "zai", + "max_input_tokens": 1048576, + "max_output_tokens": 128000, + "mode": "chat", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "source": "https://docs.z.ai/guides/overview/pricing", + "supports_vision": true + }, "zai/glm-5.1": { "cache_creation_input_token_cost": 0, "cache_read_input_token_cost": 2.6e-07, @@ -51300,10 +51373,10 @@ "mode": "responses", "output_cost_per_token": 2.5e-06, "source": "https://docs.x.ai/docs/models", - "supports_function_calling": true, + "supports_function_calling": false, "supports_prompt_caching": true, "supports_reasoning": true, - "supports_tool_choice": true, + "supports_tool_choice": false, "supports_vision": true, "supports_web_search": true, "input_cost_per_token_above_200k_tokens": 2.5e-06, @@ -51497,6 +51570,7 @@ "web_search_billing_unit": "per_query" }, "mistral/mistral-small-2603": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -54172,5 +54246,318 @@ "supports_reasoning": true, "supports_vision": true, "source": "https://deepinfra.com/pricing" + }, + "gemini/gemini-omni-1.1-flash": { + "input_cost_per_audio_token": 1.5e-06, + "input_cost_per_token": 1.5e-06, + "litellm_provider": "gemini", + "max_input_tokens": 131072, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_reasoning_token": 9e-06, + "output_cost_per_token": 9e-06, + "output_cost_per_video_token": 1.75e-05, + "rpm": 2000, + "source": "https://ai.google.dev/gemini-api/docs/pricing", + "supported_endpoints": [ + "/v1beta/interactions" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "video" + ], + "supports_audio_input": true, + "supports_reasoning": true, + "supports_system_messages": true, + "supports_video_input": true, + "supports_vision": true, + "tpm": 800000 + }, + "xai/grok-4.20": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_prompt_caching": true, + "supports_response_schema": true + }, + "xai/grok-4.20-reasoning": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_prompt_caching": true, + "supports_response_schema": true + }, + "xai/grok-4.20-reasoning-latest": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_prompt_caching": true, + "supports_response_schema": true + }, + "xai/grok-imagine-image": { + "input_cost_per_image": 0.02, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "xai/grok-imagine-image-2026-03-02": { + "input_cost_per_image": 0.02, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "xai/grok-imagine-image-quality": { + "input_cost_per_image": 0.05, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "xai/grok-imagine-image-quality-20260403": { + "input_cost_per_image": 0.05, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "xai/grok-imagine-image-quality-latest": { + "input_cost_per_image": 0.05, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "xai/grok-imagine-image-pro": { + "input_cost_per_image": 0.05, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ], + "deprecation_date": "2026-05-15" + }, + "xai/grok-imagine-image-2.0": { + "input_cost_per_image": 0.06, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "low/1024-x-1024/grok-imagine-image-2.0": { + "input_cost_per_image": 0.04, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "xai/grok-4.20-non-reasoning": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_response_schema": true + }, + "xai/grok-4.20-non-reasoning-latest": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_response_schema": true + }, + "xai/grok-4.20-multi-agent": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "responses", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/responses" + ], + "supports_function_calling": false, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": false, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_response_schema": true + }, + "xai/grok-4.20-multi-agent-latest": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "responses", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/responses" + ], + "supports_function_calling": false, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": false, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_response_schema": true } } diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index aa33e0d5010..b9415c17d81 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -15216,6 +15216,29 @@ "supports_tool_choice": true, "supports_vision": false }, + "databricks/databricks-glm-5-3-flash": { + "litellm_provider": "databricks", + "max_input_tokens": 1048576, + "max_output_tokens": 131072, + "max_tokens": 131072, + "metadata": { + "notes": "Databricks has not published pay-per-token DBU rates for this model yet (not on the foundation-model-serving pricing page as of 2026-08-27), so cost fields are omitted until rates are published." + }, + "mode": "chat", + "source": "https://docs.databricks.com/aws/en/machine-learning/foundation-model-apis/supported-models", + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true + }, "databricks/databricks-gpt-5": { "cache_creation_input_token_cost": 1.24999e-06, "cache_read_input_token_cost": 1.2502e-07, @@ -22971,9 +22994,9 @@ "input_cost_per_audio_token": 1.5e-06, "input_cost_per_token": 1.5e-06, "litellm_provider": "gemini", - "max_input_tokens": 1048576, - "max_output_tokens": 65535, - "max_tokens": 65535, + "max_input_tokens": 131072, + "max_output_tokens": 65536, + "max_tokens": 65536, "mode": "chat", "output_cost_per_reasoning_token": 9e-06, "output_cost_per_token": 9e-06, @@ -22981,7 +23004,7 @@ "rpm": 2000, "source": "https://ai.google.dev/gemini-api/docs/pricing", "supported_endpoints": [ - "/v1/chat/completions" + "/v1beta/interactions" ], "supported_modalities": [ "text", @@ -30807,6 +30830,7 @@ "supports_tool_choice": true }, "mistral/codestral-2508": { + "cache_read_input_token_cost": 3e-08, "input_cost_per_token": 3e-07, "litellm_provider": "mistral", "max_input_tokens": 128000, @@ -30821,6 +30845,7 @@ "supports_tool_choice": true }, "mistral/codestral-latest": { + "cache_read_input_token_cost": 3e-08, "input_cost_per_token": 3e-07, "litellm_provider": "mistral", "max_input_tokens": 128000, @@ -30828,11 +30853,11 @@ "max_tokens": 128000, "mode": "chat", "output_cost_per_token": 9e-07, - "supports_assistant_prefill": true, - "supports_response_schema": true, - "supports_tool_choice": true, "source": "https://docs.mistral.ai/models/model-cards/codestral-25-08", - "supports_function_calling": true + "supports_assistant_prefill": true, + "supports_function_calling": true, + "supports_response_schema": true, + "supports_tool_choice": true }, "mistral/codestral-mamba-latest": { "input_cost_per_token": 2.5e-07, @@ -31312,6 +31337,7 @@ "mode": "embedding" }, "mistral/codestral-embed": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 8192, @@ -31319,6 +31345,7 @@ "mode": "embedding" }, "mistral/codestral-embed-2505": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 8192, @@ -31368,6 +31395,7 @@ "supports_tool_choice": true }, "mistral/mistral-large-latest": { + "cache_read_input_token_cost": 5e-08, "input_cost_per_token": 5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31383,6 +31411,7 @@ "supports_vision": true }, "mistral/mistral-large-3": { + "cache_read_input_token_cost": 5e-08, "input_cost_per_token": 5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31398,6 +31427,7 @@ "supports_vision": true }, "mistral/mistral-large-2512": { + "cache_read_input_token_cost": 5e-08, "input_cost_per_token": 5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31468,6 +31498,7 @@ "supports_vision": true }, "mistral/mistral-medium-2604": { + "cache_read_input_token_cost": 1.5e-07, "input_cost_per_token": 1.5e-06, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31484,6 +31515,7 @@ "supports_vision": true }, "mistral/mistral-medium-latest": { + "cache_read_input_token_cost": 1.5e-07, "input_cost_per_token": 1.5e-06, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31516,6 +31548,7 @@ "supports_vision": true }, "mistral/mistral-medium-3-5": { + "cache_read_input_token_cost": 1.5e-07, "input_cost_per_token": 1.5e-06, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31545,6 +31578,7 @@ "supports_tool_choice": true }, "mistral/mistral-small-latest": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31555,9 +31589,9 @@ "source": "https://docs.mistral.ai/models/model-cards/mistral-small-4-0-26-03", "supports_assistant_prefill": true, "supports_function_calling": true, + "supports_reasoning": true, "supports_response_schema": true, "supports_tool_choice": true, - "supports_reasoning": true, "supports_vision": true }, "mistral/mistral-small-3-2-2506": { @@ -31577,6 +31611,7 @@ "supports_vision": true }, "mistral/ministral-3-3b-2512": { + "cache_read_input_token_cost": 1e-08, "input_cost_per_token": 1e-07, "litellm_provider": "mistral", "max_input_tokens": 131072, @@ -31592,6 +31627,7 @@ "supports_vision": true }, "mistral/ministral-3-8b-2512": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31607,6 +31643,7 @@ "supports_vision": true }, "mistral/ministral-3-14b-2512": { + "cache_read_input_token_cost": 2e-08, "input_cost_per_token": 2e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31622,6 +31659,7 @@ "supports_vision": true }, "mistral/ministral-8b-2512": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31637,6 +31675,7 @@ "supports_vision": true }, "mistral/ministral-8b-latest": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -31844,6 +31883,24 @@ "supports_tool_choice": true, "supports_web_search": true }, + "moonshot/kimi-k2.7-code": { + "cache_read_input_token_cost": 1.9e-07, + "input_cost_per_token": 9.5e-07, + "litellm_provider": "moonshot", + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "output_cost_per_token": 4e-06, + "source": "https://platform.kimi.ai/docs/pricing/chat-k27-code", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_video_input": true, + "supports_vision": true + }, "moonshot/kimi-k2-turbo-preview": { "cache_read_input_token_cost": 1.5e-07, "deprecation_date": "2026-05-25", @@ -44611,6 +44668,22 @@ "supports_reasoning": true, "supports_tool_choice": true }, + "zai/glm-5.3-flash": { + "cache_creation_input_token_cost": 0, + "cache_read_input_token_cost": 3e-08, + "input_cost_per_token": 1.5e-07, + "output_cost_per_token": 5e-07, + "litellm_provider": "zai", + "max_input_tokens": 1048576, + "max_output_tokens": 128000, + "mode": "chat", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "source": "https://docs.z.ai/guides/overview/pricing", + "supports_vision": true + }, "zai/glm-5.1": { "cache_creation_input_token_cost": 0, "cache_read_input_token_cost": 2.6e-07, @@ -51300,10 +51373,10 @@ "mode": "responses", "output_cost_per_token": 2.5e-06, "source": "https://docs.x.ai/docs/models", - "supports_function_calling": true, + "supports_function_calling": false, "supports_prompt_caching": true, "supports_reasoning": true, - "supports_tool_choice": true, + "supports_tool_choice": false, "supports_vision": true, "supports_web_search": true, "input_cost_per_token_above_200k_tokens": 2.5e-06, @@ -51497,6 +51570,7 @@ "web_search_billing_unit": "per_query" }, "mistral/mistral-small-2603": { + "cache_read_input_token_cost": 1.5e-08, "input_cost_per_token": 1.5e-07, "litellm_provider": "mistral", "max_input_tokens": 262144, @@ -54172,5 +54246,318 @@ "supports_reasoning": true, "supports_vision": true, "source": "https://deepinfra.com/pricing" + }, + "gemini/gemini-omni-1.1-flash": { + "input_cost_per_audio_token": 1.5e-06, + "input_cost_per_token": 1.5e-06, + "litellm_provider": "gemini", + "max_input_tokens": 131072, + "max_output_tokens": 65536, + "max_tokens": 65536, + "mode": "chat", + "output_cost_per_reasoning_token": 9e-06, + "output_cost_per_token": 9e-06, + "output_cost_per_video_token": 1.75e-05, + "rpm": 2000, + "source": "https://ai.google.dev/gemini-api/docs/pricing", + "supported_endpoints": [ + "/v1beta/interactions" + ], + "supported_modalities": [ + "text", + "image", + "audio", + "video" + ], + "supported_output_modalities": [ + "text", + "video" + ], + "supports_audio_input": true, + "supports_reasoning": true, + "supports_system_messages": true, + "supports_video_input": true, + "supports_vision": true, + "tpm": 800000 + }, + "xai/grok-4.20": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_prompt_caching": true, + "supports_response_schema": true + }, + "xai/grok-4.20-reasoning": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_prompt_caching": true, + "supports_response_schema": true + }, + "xai/grok-4.20-reasoning-latest": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_reasoning": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_prompt_caching": true, + "supports_response_schema": true + }, + "xai/grok-imagine-image": { + "input_cost_per_image": 0.02, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "xai/grok-imagine-image-2026-03-02": { + "input_cost_per_image": 0.02, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "xai/grok-imagine-image-quality": { + "input_cost_per_image": 0.05, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "xai/grok-imagine-image-quality-20260403": { + "input_cost_per_image": 0.05, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "xai/grok-imagine-image-quality-latest": { + "input_cost_per_image": 0.05, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "xai/grok-imagine-image-pro": { + "input_cost_per_image": 0.05, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ], + "deprecation_date": "2026-05-15" + }, + "xai/grok-imagine-image-2.0": { + "input_cost_per_image": 0.06, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "low/1024-x-1024/grok-imagine-image-2.0": { + "input_cost_per_image": 0.04, + "litellm_provider": "xai", + "mode": "image_generation", + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/images/generations" + ], + "supported_modalities": [ + "text", + "image" + ], + "supported_output_modalities": [ + "image" + ] + }, + "xai/grok-4.20-non-reasoning": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_response_schema": true + }, + "xai/grok-4.20-non-reasoning-latest": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "chat", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_tool_choice": true, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_response_schema": true + }, + "xai/grok-4.20-multi-agent": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "responses", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/responses" + ], + "supports_function_calling": false, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": false, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_response_schema": true + }, + "xai/grok-4.20-multi-agent-latest": { + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 1.25e-06, + "litellm_provider": "xai", + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, + "mode": "responses", + "output_cost_per_token": 2.5e-06, + "source": "https://docs.x.ai/docs/models", + "supported_endpoints": [ + "/v1/responses" + ], + "supports_function_calling": false, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_tool_choice": false, + "supports_vision": true, + "supports_web_search": true, + "input_cost_per_token_above_200k_tokens": 2.5e-06, + "output_cost_per_token_above_200k_tokens": 5e-06, + "cache_read_input_token_cost_above_200k_tokens": 4e-07, + "supports_response_schema": true } } diff --git a/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py b/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py index 8ccd8235739..3c4121977de 100644 --- a/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py +++ b/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py @@ -27,6 +27,7 @@ from litellm.types.utils import ( ) from litellm.litellm_core_utils.llm_cost_calc.utils import ( + CostCalculatorUtils, PromptTokensDetailsResult, TokenTypeCostBreakdown, _calculate_input_cost, @@ -3872,3 +3873,76 @@ def test_generic_cost_per_token_grok_46_long_context(_local_model_cost_map): ) assert prompt_cost == pytest.approx(200_000 * 4e-06 + 50_000 * 1e-06) assert completion_cost == pytest.approx(1_000 * 1.2e-05) + + +@pytest.mark.parametrize( + ("response_quality", "requested_quality", "expected_cost"), + [ + (None, "low", 0.04), + (None, None, 0.06), + ("high", "low", 0.08), + ], +) +def test_route_image_generation_cost_falls_back_to_requested_quality( + monkeypatch, response_quality, requested_quality, expected_cost +): + def tier(cost): + return {"litellm_provider": "xai", "mode": "image_generation", "input_cost_per_image": cost} + + monkeypatch.setattr( + litellm, + "model_cost", + { + "xai/grok-imagine-image-2.0": tier(0.06), + "low/1024-x-1024/grok-imagine-image-2.0": tier(0.04), + "high/1024-x-1024/grok-imagine-image-2.0": tier(0.08), + }, + ) + response = ImageResponse(data=[ImageObject(url="https://example.com/image.png")], quality=response_quality) + optional_params = {} if requested_quality is None else {"quality": requested_quality} + + cost = CostCalculatorUtils.route_image_generation_cost_calculator( + model="xai/grok-imagine-image-2.0", + completion_response=response, + custom_llm_provider="xai", + optional_params=optional_params, + call_type="image_generation", + ) + + assert cost == expected_cost + + +@pytest.mark.parametrize( + ("requested_size", "expected_cost"), + [ + ("1536x1024", 0.05), + ("1536-x-1024", 0.05), + ("auto", 0.04), + (None, 0.04), + ], +) +def test_route_image_generation_cost_falls_back_to_requested_size(monkeypatch, requested_size, expected_cost): + def tier(cost): + return {"litellm_provider": "xai", "mode": "image_generation", "input_cost_per_image": cost} + + monkeypatch.setattr( + litellm, + "model_cost", + { + "xai/grok-imagine-image-2.0": tier(0.06), + "low/1024-x-1024/grok-imagine-image-2.0": tier(0.04), + "low/1536-x-1024/grok-imagine-image-2.0": tier(0.05), + }, + ) + response = ImageResponse(data=[ImageObject(url="https://example.com/image.png")]) + optional_params = {"quality": "low", **({} if requested_size is None else {"size": requested_size})} + + cost = CostCalculatorUtils.route_image_generation_cost_calculator( + model="xai/grok-imagine-image-2.0", + completion_response=response, + custom_llm_provider="xai", + optional_params=optional_params, + call_type="image_generation", + ) + + assert cost == expected_cost diff --git a/tests/test_litellm/test_utils.py b/tests/test_litellm/test_utils.py index 92033251b13..488ee0d7c60 100644 --- a/tests/test_litellm/test_utils.py +++ b/tests/test_litellm/test_utils.py @@ -1051,6 +1051,7 @@ def test_aaamodel_prices_and_context_window_json_is_valid(): "/v1/audio/speech", "/v1/ocr", "/vertex_ai/live", + "/v1beta/interactions", ], }, },