From 2c4eb693ed92a1fe933794b3c8cf3cc0e6b905d9 Mon Sep 17 00:00:00 2001 From: mateo Date: Thu, 3 Sep 2026 19:53:58 +0000 Subject: [PATCH] fix(model_prices): absorb Baseten GLM-5.3 and OpenRouter live prices, fix Bedrock Qwen3 Coder 480B input price and Gemini Live image price Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- ...odel_prices_and_context_window_backup.json | 253 ++++++++++-------- model_prices_and_context_window.json | 253 ++++++++++-------- .../test_get_model_cost_map.py | 52 +++- .../test_baseten_glm_5_3_model_metadata.py | 154 +++++++++++ tests/test_litellm/test_utils.py | 8 +- 5 files changed, 487 insertions(+), 233 deletions(-) create mode 100644 tests/test_litellm/test_baseten_glm_5_3_model_metadata.py diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 724929a48f5..a6f3095e974 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -22968,7 +22968,8 @@ "search_context_size_medium": 0.035, "search_context_size_high": 0.035 }, - "gemini_native_audio": true + "gemini_native_audio": true, + "input_cost_per_image_token": 3e-06 }, "gemini-live-2.5-flash-preview-native-audio-09-2025": { "cache_read_input_token_cost": 7.5e-08, @@ -37637,7 +37638,7 @@ "cache_creation_input_token_cost_above_200k_tokens": 7.5e-06, "cache_read_input_token_cost_above_200k_tokens": 6e-07, "litellm_provider": "openrouter", - "max_input_tokens": 1000000, + "max_input_tokens": 200000, "max_output_tokens": 64000, "max_tokens": 64000, "mode": "chat", @@ -37733,24 +37734,24 @@ "supports_tool_choice": true }, "openrouter/deepseek/deepseek-chat": { - "input_cost_per_token": 1.4e-07, + "input_cost_per_token": 3.2e-07, "litellm_provider": "openrouter", "max_input_tokens": 65536, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 2.8e-07, + "output_cost_per_token": 8.9e-07, "supports_prompt_caching": true, "supports_tool_choice": true }, "openrouter/deepseek/deepseek-chat-v3-0324": { - "input_cost_per_token": 1.4e-07, + "input_cost_per_token": 2.5e-07, "litellm_provider": "openrouter", "max_input_tokens": 65536, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 2.8e-07, + "output_cost_per_token": 1e-06, "supports_prompt_caching": true, "supports_tool_choice": true }, @@ -37770,7 +37771,7 @@ "supports_tool_choice": true }, "openrouter/deepseek/deepseek-v3.2": { - "input_cost_per_token": 2.8e-07, + "input_cost_per_token": 2.69e-07, "input_cost_per_token_cache_hit": 2.8e-08, "litellm_provider": "openrouter", "max_input_tokens": 163840, @@ -37785,14 +37786,14 @@ "supports_tool_choice": true }, "openrouter/deepseek/deepseek-v3.2-exp": { - "input_cost_per_token": 2e-07, + "input_cost_per_token": 2.7e-07, "input_cost_per_token_cache_hit": 2e-08, "litellm_provider": "openrouter", "max_input_tokens": 163840, "max_output_tokens": 163840, "max_tokens": 163840, "mode": "chat", - "output_cost_per_token": 4e-07, + "output_cost_per_token": 4.1e-07, "supports_assistant_prefill": true, "supports_function_calling": true, "supports_prompt_caching": true, @@ -37800,14 +37801,14 @@ "supports_tool_choice": true }, "openrouter/deepseek/deepseek-r1": { - "input_cost_per_token": 5.5e-07, + "input_cost_per_token": 7e-07, "input_cost_per_token_cache_hit": 1.4e-07, "litellm_provider": "openrouter", "max_input_tokens": 65336, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 2.19e-06, + "output_cost_per_token": 2.5e-06, "supports_assistant_prefill": true, "supports_function_calling": true, "supports_prompt_caching": true, @@ -37903,8 +37904,8 @@ "input_cost_per_token": 1.25e-06, "litellm_provider": "openrouter", "max_input_tokens": 1048576, - "max_output_tokens": 65536, - "max_tokens": 65536, + "max_output_tokens": 65535, + "max_tokens": 65535, "mode": "chat", "output_cost_per_token": 1e-05, "supports_audio_output": true, @@ -38119,19 +38120,19 @@ "supports_vision": true }, "openrouter/gryphe/mythomax-l2-13b": { - "input_cost_per_token": 1.875e-06, + "input_cost_per_token": 6e-08, "litellm_provider": "openrouter", "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 1.875e-06, + "output_cost_per_token": 6e-08, "supports_tool_choice": true }, "openrouter/mancer/weaver": { - "input_cost_per_token": 5.625e-06, + "input_cost_per_token": 4e-07, "litellm_provider": "openrouter", "max_tokens": 2000, "mode": "chat", - "output_cost_per_token": 5.625e-06, + "output_cost_per_token": 7.5e-07, "supports_tool_choice": true, "max_input_tokens": 8000, "max_output_tokens": 2000 @@ -38161,13 +38162,13 @@ }, "openrouter/mistralai/devstral-2512": { "input_cost_per_image": 0, - "input_cost_per_token": 1.5e-07, + "input_cost_per_token": 4e-07, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 6e-07, + "output_cost_per_token": 2e-06, "supports_function_calling": true, "supports_prompt_caching": false, "supports_tool_choice": true, @@ -38240,54 +38241,54 @@ "max_output_tokens": 8191 }, "openrouter/mistralai/mistral-large": { - "input_cost_per_token": 8e-06, + "input_cost_per_token": 2e-06, "litellm_provider": "openrouter", "max_tokens": 8191, "mode": "chat", - "output_cost_per_token": 2.4e-05, + "output_cost_per_token": 6e-06, "supports_tool_choice": true, "max_input_tokens": 128000, "max_output_tokens": 8191 }, "openrouter/mistralai/mistral-small-3.1-24b-instruct": { - "input_cost_per_token": 1e-07, + "input_cost_per_token": 3.51e-07, "litellm_provider": "openrouter", "max_tokens": 131072, "mode": "chat", - "output_cost_per_token": 3e-07, + "output_cost_per_token": 5.55e-07, "supports_tool_choice": true, "max_input_tokens": 131072, "max_output_tokens": 131072 }, "openrouter/mistralai/mistral-small-3.2-24b-instruct": { - "input_cost_per_token": 1e-07, + "input_cost_per_token": 7.5e-08, "litellm_provider": "openrouter", "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 3e-07, + "output_cost_per_token": 2e-07, "supports_tool_choice": true, "max_input_tokens": 128000, "max_output_tokens": 128000 }, "openrouter/mistralai/mixtral-8x22b-instruct": { - "input_cost_per_token": 6.5e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "openrouter", "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 6.5e-07, + "output_cost_per_token": 6e-06, "supports_tool_choice": true, "max_input_tokens": 65536, "max_output_tokens": 65536 }, "openrouter/moonshotai/kimi-k2.5": { - "cache_read_input_token_cost": 1e-07, - "input_cost_per_token": 6e-07, + "cache_read_input_token_cost": 7e-08, + "input_cost_per_token": 4.5e-07, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 262144, "max_tokens": 262144, "mode": "chat", - "output_cost_per_token": 3e-06, + "output_cost_per_token": 2.25e-06, "source": "https://openrouter.ai/moonshotai/kimi-k2.5", "supports_function_calling": true, "supports_tool_choice": true, @@ -38295,7 +38296,7 @@ "supports_vision": true }, "openrouter/nvidia/nemotron-3.5-lightning": { - "input_cost_per_token": 5e-08, + "input_cost_per_token": 8e-08, "litellm_provider": "openrouter", "max_input_tokens": 262144, "mode": "chat", @@ -38600,13 +38601,13 @@ "supports_vision": true }, "openrouter/openai/gpt-oss-120b": { - "input_cost_per_token": 1.8e-07, + "input_cost_per_token": 3.7e-08, "litellm_provider": "openrouter", "max_input_tokens": 131072, "max_output_tokens": 32768, "max_tokens": 32768, "mode": "chat", - "output_cost_per_token": 8e-07, + "output_cost_per_token": 1.7e-07, "source": "https://openrouter.ai/openai/gpt-oss-120b", "supports_function_calling": true, "supports_parallel_function_calling": true, @@ -38615,13 +38616,13 @@ "supports_tool_choice": true }, "openrouter/openai/gpt-oss-20b": { - "input_cost_per_token": 2e-08, + "input_cost_per_token": 3e-08, "litellm_provider": "openrouter", "max_input_tokens": 131072, "max_output_tokens": 32768, "max_tokens": 32768, "mode": "chat", - "output_cost_per_token": 1e-07, + "output_cost_per_token": 1.3e-07, "source": "https://openrouter.ai/openai/gpt-oss-20b", "supports_function_calling": true, "supports_parallel_function_calling": true, @@ -38681,13 +38682,13 @@ "source": "https://openrouter.ai/openai/o3-mini-high" }, "openrouter/qwen/qwen-2.5-coder-32b-instruct": { - "input_cost_per_token": 1.8e-07, + "input_cost_per_token": 6.6e-07, "litellm_provider": "openrouter", "max_input_tokens": 33792, "max_output_tokens": 33792, "max_tokens": 33792, "mode": "chat", - "output_cost_per_token": 1.8e-07, + "output_cost_per_token": 1e-06, "supports_tool_choice": true }, "openrouter/qwen/qwen-vl-plus": { @@ -38702,50 +38703,50 @@ "supports_vision": true }, "openrouter/qwen/qwen3-coder": { - "input_cost_per_token": 2.2e-07, + "input_cost_per_token": 3e-07, "litellm_provider": "openrouter", "max_input_tokens": 262100, "max_output_tokens": 262100, "max_tokens": 262100, "mode": "chat", - "output_cost_per_token": 9.5e-07, + "output_cost_per_token": 1e-06, "source": "https://openrouter.ai/qwen/qwen3-coder", "supports_tool_choice": true, "supports_function_calling": true }, "openrouter/qwen/qwen3-coder-plus": { - "input_cost_per_token": 1e-06, + "input_cost_per_token": 6.5e-07, "litellm_provider": "openrouter", "max_input_tokens": 997952, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 5e-06, + "output_cost_per_token": 3.25e-06, "source": "https://openrouter.ai/qwen/qwen3-coder-plus", "supports_function_calling": true, "supports_reasoning": true, "supports_tool_choice": true }, "openrouter/qwen/qwen3-235b-a22b-2507": { - "input_cost_per_token": 7.1e-08, + "input_cost_per_token": 8.75e-08, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 262144, "max_tokens": 262144, "mode": "chat", - "output_cost_per_token": 1e-07, + "output_cost_per_token": 3.5e-07, "source": "https://openrouter.ai/qwen/qwen3-235b-a22b-2507", "supports_function_calling": true, "supports_tool_choice": true }, "openrouter/qwen/qwen3-235b-a22b-thinking-2507": { - "input_cost_per_token": 1.1e-07, + "input_cost_per_token": 2.3e-07, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 262144, "max_tokens": 262144, "mode": "chat", - "output_cost_per_token": 6e-07, + "output_cost_per_token": 2.3e-06, "source": "https://openrouter.ai/qwen/qwen3-235b-a22b-thinking-2507", "supports_function_calling": true, "supports_reasoning": true, @@ -38772,7 +38773,7 @@ "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 2e-06, + "output_cost_per_token": 1.25e-06, "source": "https://openrouter.ai/qwen/qwen3.5-35b-a3b", "supports_function_calling": true, "supports_reasoning": true, @@ -38780,13 +38781,13 @@ "supports_vision": true }, "openrouter/qwen/qwen3.5-27b": { - "input_cost_per_token": 3e-07, + "input_cost_per_token": 1.95e-07, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 2.4e-06, + "output_cost_per_token": 1.56e-06, "source": "https://openrouter.ai/qwen/qwen3.5-27b", "supports_function_calling": true, "supports_reasoning": true, @@ -38794,13 +38795,13 @@ "supports_vision": true }, "openrouter/qwen/qwen3.5-122b-a10b": { - "input_cost_per_token": 4e-07, + "input_cost_per_token": 2.9e-07, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 2e-06, + "output_cost_per_token": 2.4e-06, "source": "https://openrouter.ai/qwen/qwen3.5-122b-a10b", "supports_function_calling": true, "supports_reasoning": true, @@ -38808,13 +38809,13 @@ "supports_vision": true }, "openrouter/qwen/qwen3.5-flash-02-23": { - "input_cost_per_token": 1e-07, + "input_cost_per_token": 6.5e-08, "litellm_provider": "openrouter", "max_input_tokens": 1000000, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 4e-07, + "output_cost_per_token": 2.6e-07, "source": "https://openrouter.ai/qwen/qwen3.5-flash-02-23", "supports_function_calling": true, "supports_reasoning": true, @@ -38822,14 +38823,14 @@ "supports_vision": true }, "openrouter/qwen/qwen3.5-plus-02-15": { - "input_cost_per_token": 4e-07, + "input_cost_per_token": 2.6e-07, "input_cost_per_token_above_256k_tokens": 5e-07, "litellm_provider": "openrouter", "max_input_tokens": 1000000, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 2.4e-06, + "output_cost_per_token": 1.56e-06, "output_cost_per_token_above_256k_tokens": 3e-06, "source": "https://openrouter.ai/qwen/qwen3.5-plus-02-15", "supports_function_calling": true, @@ -38838,13 +38839,13 @@ "supports_vision": true }, "openrouter/qwen/qwen3.5-397b-a17b": { - "input_cost_per_token": 6e-07, + "input_cost_per_token": 5.5e-07, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 3.6e-06, + "output_cost_per_token": 3.5e-06, "source": "https://openrouter.ai/qwen/qwen3.5-397b-a17b", "supports_function_calling": true, "supports_reasoning": true, @@ -38863,11 +38864,11 @@ "supports_tool_choice": true }, "openrouter/undi95/remm-slerp-l2-13b": { - "input_cost_per_token": 1.875e-06, + "input_cost_per_token": 4.5e-07, "litellm_provider": "openrouter", "max_tokens": 4096, "mode": "chat", - "output_cost_per_token": 1.875e-06, + "output_cost_per_token": 6.5e-07, "supports_tool_choice": true, "max_input_tokens": 6144, "max_output_tokens": 4096 @@ -38887,13 +38888,13 @@ "supports_web_search": true }, "openrouter/z-ai/glm-4.6": { - "input_cost_per_token": 4e-07, + "input_cost_per_token": 5.5e-07, "litellm_provider": "openrouter", "max_input_tokens": 202800, "max_output_tokens": 131000, "max_tokens": 131000, "mode": "chat", - "output_cost_per_token": 1.75e-06, + "output_cost_per_token": 2.2e-06, "source": "https://openrouter.ai/z-ai/glm-4.6", "supports_function_calling": true, "supports_prompt_caching": true, @@ -38931,10 +38932,10 @@ "supports_prompt_caching": true }, "openrouter/xiaomi/mimo-v2.5-pro": { - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, + "input_cost_per_token": 4.35e-07, + "output_cost_per_token": 8.7e-07, "cache_creation_input_token_cost": 0.0, - "cache_read_input_token_cost": 2e-07, + "cache_read_input_token_cost": 3.6e-09, "litellm_provider": "openrouter", "max_input_tokens": 1048576, "max_output_tokens": 16384, @@ -38948,10 +38949,10 @@ "supports_prompt_caching": true }, "openrouter/xiaomi/mimo-v2.5": { - "input_cost_per_token": 4e-07, - "output_cost_per_token": 2e-06, + "input_cost_per_token": 1.4e-07, + "output_cost_per_token": 2.8e-07, "cache_creation_input_token_cost": 0.0, - "cache_read_input_token_cost": 8e-08, + "cache_read_input_token_cost": 2.8e-09, "litellm_provider": "openrouter", "max_input_tokens": 1048576, "max_output_tokens": 131072, @@ -38968,9 +38969,9 @@ }, "openrouter/z-ai/glm-4.7": { "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.5e-06, + "output_cost_per_token": 1.75e-06, "cache_creation_input_token_cost": 0.0, - "cache_read_input_token_cost": 0.0, + "cache_read_input_token_cost": 8e-08, "litellm_provider": "openrouter", "max_input_tokens": 202752, "max_output_tokens": 64000, @@ -38984,10 +38985,10 @@ "supports_assistant_prefill": true }, "openrouter/z-ai/glm-4.7-flash": { - "input_cost_per_token": 7e-08, + "input_cost_per_token": 6e-08, "output_cost_per_token": 4e-07, "cache_creation_input_token_cost": 0.0, - "cache_read_input_token_cost": 0.0, + "cache_read_input_token_cost": 1e-08, "litellm_provider": "openrouter", "max_input_tokens": 200000, "max_output_tokens": 32000, @@ -39000,22 +39001,22 @@ "supports_prompt_caching": false }, "openrouter/z-ai/glm-5": { - "input_cost_per_token": 8e-07, + "input_cost_per_token": 6e-07, "litellm_provider": "openrouter", "max_input_tokens": 202752, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 2.56e-06, + "output_cost_per_token": 1.92e-06, "source": "https://openrouter.ai/z-ai/glm-5", "supports_function_calling": true, "supports_reasoning": true, "supports_tool_choice": true }, "openrouter/z-ai/glm-5.1": { - "input_cost_per_token": 1.05e-06, - "output_cost_per_token": 3.5e-06, - "cache_read_input_token_cost": 5.25e-07, + "input_cost_per_token": 9.66e-07, + "output_cost_per_token": 3.036e-06, + "cache_read_input_token_cost": 1.794e-07, "cache_creation_input_token_cost": 0.0, "litellm_provider": "openrouter", "max_input_tokens": 202752, @@ -39029,10 +39030,10 @@ "supports_tool_choice": true }, "openrouter/minimax/minimax-m2.1": { - "input_cost_per_token": 2.7e-07, + "input_cost_per_token": 3e-07, "output_cost_per_token": 1.2e-06, "cache_creation_input_token_cost": 0.0, - "cache_read_input_token_cost": 0.0, + "cache_read_input_token_cost": 3e-08, "litellm_provider": "openrouter", "max_input_tokens": 204000, "max_output_tokens": 64000, @@ -39046,9 +39047,9 @@ "supports_computer_use": false }, "openrouter/minimax/minimax-m2.5": { - "input_cost_per_token": 3e-07, - "output_cost_per_token": 1.1e-06, - "cache_read_input_token_cost": 1.5e-07, + "input_cost_per_token": 2.7e-07, + "output_cost_per_token": 1.08e-06, + "cache_read_input_token_cost": 2.7e-08, "litellm_provider": "openrouter", "max_input_tokens": 196608, "max_output_tokens": 65536, @@ -39947,7 +39948,7 @@ "supports_reasoning": true }, "qwen.qwen3-coder-480b-a35b-v1:0": { - "input_cost_per_token": 2.2e-07, + "input_cost_per_token": 4.5e-07, "litellm_provider": "bedrock_converse", "max_input_tokens": 262000, "max_output_tokens": 65536, @@ -39957,7 +39958,8 @@ "supports_function_calling": true, "supports_reasoning": true, "supports_tool_choice": true, - "supports_native_structured_output": true + "supports_native_structured_output": true, + "source": "https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonBedrock/current/us-east-1/index.json" }, "qwen.qwen3-235b-a22b-2507-v1:0": { "input_cost_per_token": 2.2e-07, @@ -52852,7 +52854,7 @@ "max_input_tokens": 1048576, "max_output_tokens": 8192, "max_tokens": 8192, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 2e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -52878,7 +52880,7 @@ "max_input_tokens": 1048576, "max_output_tokens": 8192, "max_tokens": 8192, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 2e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -52904,7 +52906,7 @@ "max_input_tokens": 1048576, "max_output_tokens": 8192, "max_tokens": 8192, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 2e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -52932,7 +52934,7 @@ "max_input_tokens": 131072, "max_output_tokens": 65536, "max_tokens": 65536, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 4.5e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -52963,7 +52965,7 @@ "max_input_tokens": 1048576, "max_output_tokens": 8192, "max_tokens": 8192, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 2e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -52991,7 +52993,7 @@ "max_input_tokens": 1048576, "max_output_tokens": 8192, "max_tokens": 8192, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 2e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -53019,7 +53021,7 @@ "max_input_tokens": 1048576, "max_output_tokens": 8192, "max_tokens": 8192, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 2e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -53049,7 +53051,7 @@ "max_input_tokens": 131072, "max_output_tokens": 65536, "max_tokens": 65536, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 4.5e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -59463,7 +59465,8 @@ "supports_audio_input": false, "cache_read_input_token_cost": 1e-06, "supports_prompt_caching": true, - "cache_creation_input_token_cost": 1.25e-05 + "cache_creation_input_token_cost": 1.25e-05, + "prompt_cache_min_tokens": 512 }, "openrouter/anthropic/claude-fable-5.1": { "input_cost_per_token": 1e-05, @@ -59483,7 +59486,8 @@ "supports_audio_input": false, "cache_read_input_token_cost": 2.5e-07, "supports_prompt_caching": true, - "cache_creation_input_token_cost": 1.25e-05 + "cache_creation_input_token_cost": 1.25e-05, + "prompt_cache_min_tokens": 512 }, "openrouter/anthropic/claude-opus-4.8": { "input_cost_per_token": 5e-06, @@ -59549,8 +59553,8 @@ "output_cost_per_token": 9e-06, "litellm_provider": "openrouter", "max_input_tokens": 1048576, - "max_output_tokens": 65536, - "max_tokens": 65536, + "max_output_tokens": 65535, + "max_tokens": 65535, "mode": "chat", "source": "https://openrouter.ai/google/gemini-3.5-flash", "supports_function_calling": true, @@ -59662,7 +59666,7 @@ "input_cost_per_token": 1.25e-06, "output_cost_per_token": 1e-05, "litellm_provider": "openrouter", - "max_input_tokens": 400000, + "max_input_tokens": 272000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -59681,7 +59685,7 @@ "input_cost_per_token": 1.75e-06, "output_cost_per_token": 1.4e-05, "litellm_provider": "openrouter", - "max_input_tokens": 400000, + "max_input_tokens": 272000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -59719,7 +59723,7 @@ "input_cost_per_token": 7.5e-07, "output_cost_per_token": 4.5e-06, "litellm_provider": "openrouter", - "max_input_tokens": 400000, + "max_input_tokens": 272000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -59738,7 +59742,7 @@ "input_cost_per_token": 2e-07, "output_cost_per_token": 1.25e-06, "litellm_provider": "openrouter", - "max_input_tokens": 400000, + "max_input_tokens": 272000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -59776,7 +59780,7 @@ "input_cost_per_token": 2e-07, "output_cost_per_token": 1.2e-06, "litellm_provider": "openrouter", - "max_input_tokens": 1050000, + "max_input_tokens": 922000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -59795,7 +59799,7 @@ "input_cost_per_token": 2e-06, "output_cost_per_token": 1.2e-05, "litellm_provider": "openrouter", - "max_input_tokens": 1050000, + "max_input_tokens": 922000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -59852,9 +59856,9 @@ "input_cost_per_token": 1.25e-06, "output_cost_per_token": 2.5e-06, "litellm_provider": "openrouter", - "max_input_tokens": 2000000, - "max_output_tokens": 1800000, - "max_tokens": 1800000, + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, "mode": "chat", "source": "https://openrouter.ai/x-ai/grok-4.20", "supports_function_calling": true, @@ -59871,9 +59875,9 @@ "input_cost_per_token": 1.25e-06, "output_cost_per_token": 2.5e-06, "litellm_provider": "openrouter", - "max_input_tokens": 2000000, - "max_output_tokens": 1800000, - "max_tokens": 1800000, + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, "mode": "chat", "source": "https://openrouter.ai/x-ai/grok-4.20-multi-agent", "supports_function_calling": false, @@ -59891,8 +59895,8 @@ "output_cost_per_token": 2.5e-06, "litellm_provider": "openrouter", "max_input_tokens": 1000000, - "max_output_tokens": 900000, - "max_tokens": 900000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, "mode": "chat", "source": "https://openrouter.ai/x-ai/grok-4.3", "supports_function_calling": true, @@ -59910,8 +59914,8 @@ "output_cost_per_token": 6e-06, "litellm_provider": "openrouter", "max_input_tokens": 500000, - "max_output_tokens": 450000, - "max_tokens": 450000, + "max_output_tokens": 500000, + "max_tokens": 500000, "mode": "chat", "source": "https://openrouter.ai/x-ai/grok-4.5", "supports_function_calling": true, @@ -59929,8 +59933,8 @@ "output_cost_per_token": 6e-06, "litellm_provider": "openrouter", "max_input_tokens": 500000, - "max_output_tokens": 450000, - "max_tokens": 450000, + "max_output_tokens": 500000, + "max_tokens": 500000, "mode": "chat", "source": "https://openrouter.ai/x-ai/grok-4.6", "supports_function_calling": true, @@ -59948,8 +59952,8 @@ "output_cost_per_token": 2e-06, "litellm_provider": "openrouter", "max_input_tokens": 256000, - "max_output_tokens": 230400, - "max_tokens": 230400, + "max_output_tokens": 256000, + "max_tokens": 256000, "mode": "chat", "source": "https://openrouter.ai/x-ai/grok-build-0.1", "supports_function_calling": true, @@ -59961,5 +59965,26 @@ "supports_audio_input": false, "cache_read_input_token_cost": 2e-07, "supports_prompt_caching": true + }, + "baseten/zai-org/GLM-5.3": { + "cache_read_input_token_cost": 1.4e-07, + "input_cost_per_token": 1.4e-06, + "litellm_provider": "baseten", + "max_input_tokens": 1048576, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "source": "https://www.baseten.co/pricing/", + "supported_modalities": [ + "text" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true } } diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 724929a48f5..a6f3095e974 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -22968,7 +22968,8 @@ "search_context_size_medium": 0.035, "search_context_size_high": 0.035 }, - "gemini_native_audio": true + "gemini_native_audio": true, + "input_cost_per_image_token": 3e-06 }, "gemini-live-2.5-flash-preview-native-audio-09-2025": { "cache_read_input_token_cost": 7.5e-08, @@ -37637,7 +37638,7 @@ "cache_creation_input_token_cost_above_200k_tokens": 7.5e-06, "cache_read_input_token_cost_above_200k_tokens": 6e-07, "litellm_provider": "openrouter", - "max_input_tokens": 1000000, + "max_input_tokens": 200000, "max_output_tokens": 64000, "max_tokens": 64000, "mode": "chat", @@ -37733,24 +37734,24 @@ "supports_tool_choice": true }, "openrouter/deepseek/deepseek-chat": { - "input_cost_per_token": 1.4e-07, + "input_cost_per_token": 3.2e-07, "litellm_provider": "openrouter", "max_input_tokens": 65536, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 2.8e-07, + "output_cost_per_token": 8.9e-07, "supports_prompt_caching": true, "supports_tool_choice": true }, "openrouter/deepseek/deepseek-chat-v3-0324": { - "input_cost_per_token": 1.4e-07, + "input_cost_per_token": 2.5e-07, "litellm_provider": "openrouter", "max_input_tokens": 65536, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 2.8e-07, + "output_cost_per_token": 1e-06, "supports_prompt_caching": true, "supports_tool_choice": true }, @@ -37770,7 +37771,7 @@ "supports_tool_choice": true }, "openrouter/deepseek/deepseek-v3.2": { - "input_cost_per_token": 2.8e-07, + "input_cost_per_token": 2.69e-07, "input_cost_per_token_cache_hit": 2.8e-08, "litellm_provider": "openrouter", "max_input_tokens": 163840, @@ -37785,14 +37786,14 @@ "supports_tool_choice": true }, "openrouter/deepseek/deepseek-v3.2-exp": { - "input_cost_per_token": 2e-07, + "input_cost_per_token": 2.7e-07, "input_cost_per_token_cache_hit": 2e-08, "litellm_provider": "openrouter", "max_input_tokens": 163840, "max_output_tokens": 163840, "max_tokens": 163840, "mode": "chat", - "output_cost_per_token": 4e-07, + "output_cost_per_token": 4.1e-07, "supports_assistant_prefill": true, "supports_function_calling": true, "supports_prompt_caching": true, @@ -37800,14 +37801,14 @@ "supports_tool_choice": true }, "openrouter/deepseek/deepseek-r1": { - "input_cost_per_token": 5.5e-07, + "input_cost_per_token": 7e-07, "input_cost_per_token_cache_hit": 1.4e-07, "litellm_provider": "openrouter", "max_input_tokens": 65336, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 2.19e-06, + "output_cost_per_token": 2.5e-06, "supports_assistant_prefill": true, "supports_function_calling": true, "supports_prompt_caching": true, @@ -37903,8 +37904,8 @@ "input_cost_per_token": 1.25e-06, "litellm_provider": "openrouter", "max_input_tokens": 1048576, - "max_output_tokens": 65536, - "max_tokens": 65536, + "max_output_tokens": 65535, + "max_tokens": 65535, "mode": "chat", "output_cost_per_token": 1e-05, "supports_audio_output": true, @@ -38119,19 +38120,19 @@ "supports_vision": true }, "openrouter/gryphe/mythomax-l2-13b": { - "input_cost_per_token": 1.875e-06, + "input_cost_per_token": 6e-08, "litellm_provider": "openrouter", "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 1.875e-06, + "output_cost_per_token": 6e-08, "supports_tool_choice": true }, "openrouter/mancer/weaver": { - "input_cost_per_token": 5.625e-06, + "input_cost_per_token": 4e-07, "litellm_provider": "openrouter", "max_tokens": 2000, "mode": "chat", - "output_cost_per_token": 5.625e-06, + "output_cost_per_token": 7.5e-07, "supports_tool_choice": true, "max_input_tokens": 8000, "max_output_tokens": 2000 @@ -38161,13 +38162,13 @@ }, "openrouter/mistralai/devstral-2512": { "input_cost_per_image": 0, - "input_cost_per_token": 1.5e-07, + "input_cost_per_token": 4e-07, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 6e-07, + "output_cost_per_token": 2e-06, "supports_function_calling": true, "supports_prompt_caching": false, "supports_tool_choice": true, @@ -38240,54 +38241,54 @@ "max_output_tokens": 8191 }, "openrouter/mistralai/mistral-large": { - "input_cost_per_token": 8e-06, + "input_cost_per_token": 2e-06, "litellm_provider": "openrouter", "max_tokens": 8191, "mode": "chat", - "output_cost_per_token": 2.4e-05, + "output_cost_per_token": 6e-06, "supports_tool_choice": true, "max_input_tokens": 128000, "max_output_tokens": 8191 }, "openrouter/mistralai/mistral-small-3.1-24b-instruct": { - "input_cost_per_token": 1e-07, + "input_cost_per_token": 3.51e-07, "litellm_provider": "openrouter", "max_tokens": 131072, "mode": "chat", - "output_cost_per_token": 3e-07, + "output_cost_per_token": 5.55e-07, "supports_tool_choice": true, "max_input_tokens": 131072, "max_output_tokens": 131072 }, "openrouter/mistralai/mistral-small-3.2-24b-instruct": { - "input_cost_per_token": 1e-07, + "input_cost_per_token": 7.5e-08, "litellm_provider": "openrouter", "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 3e-07, + "output_cost_per_token": 2e-07, "supports_tool_choice": true, "max_input_tokens": 128000, "max_output_tokens": 128000 }, "openrouter/mistralai/mixtral-8x22b-instruct": { - "input_cost_per_token": 6.5e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "openrouter", "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 6.5e-07, + "output_cost_per_token": 6e-06, "supports_tool_choice": true, "max_input_tokens": 65536, "max_output_tokens": 65536 }, "openrouter/moonshotai/kimi-k2.5": { - "cache_read_input_token_cost": 1e-07, - "input_cost_per_token": 6e-07, + "cache_read_input_token_cost": 7e-08, + "input_cost_per_token": 4.5e-07, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 262144, "max_tokens": 262144, "mode": "chat", - "output_cost_per_token": 3e-06, + "output_cost_per_token": 2.25e-06, "source": "https://openrouter.ai/moonshotai/kimi-k2.5", "supports_function_calling": true, "supports_tool_choice": true, @@ -38295,7 +38296,7 @@ "supports_vision": true }, "openrouter/nvidia/nemotron-3.5-lightning": { - "input_cost_per_token": 5e-08, + "input_cost_per_token": 8e-08, "litellm_provider": "openrouter", "max_input_tokens": 262144, "mode": "chat", @@ -38600,13 +38601,13 @@ "supports_vision": true }, "openrouter/openai/gpt-oss-120b": { - "input_cost_per_token": 1.8e-07, + "input_cost_per_token": 3.7e-08, "litellm_provider": "openrouter", "max_input_tokens": 131072, "max_output_tokens": 32768, "max_tokens": 32768, "mode": "chat", - "output_cost_per_token": 8e-07, + "output_cost_per_token": 1.7e-07, "source": "https://openrouter.ai/openai/gpt-oss-120b", "supports_function_calling": true, "supports_parallel_function_calling": true, @@ -38615,13 +38616,13 @@ "supports_tool_choice": true }, "openrouter/openai/gpt-oss-20b": { - "input_cost_per_token": 2e-08, + "input_cost_per_token": 3e-08, "litellm_provider": "openrouter", "max_input_tokens": 131072, "max_output_tokens": 32768, "max_tokens": 32768, "mode": "chat", - "output_cost_per_token": 1e-07, + "output_cost_per_token": 1.3e-07, "source": "https://openrouter.ai/openai/gpt-oss-20b", "supports_function_calling": true, "supports_parallel_function_calling": true, @@ -38681,13 +38682,13 @@ "source": "https://openrouter.ai/openai/o3-mini-high" }, "openrouter/qwen/qwen-2.5-coder-32b-instruct": { - "input_cost_per_token": 1.8e-07, + "input_cost_per_token": 6.6e-07, "litellm_provider": "openrouter", "max_input_tokens": 33792, "max_output_tokens": 33792, "max_tokens": 33792, "mode": "chat", - "output_cost_per_token": 1.8e-07, + "output_cost_per_token": 1e-06, "supports_tool_choice": true }, "openrouter/qwen/qwen-vl-plus": { @@ -38702,50 +38703,50 @@ "supports_vision": true }, "openrouter/qwen/qwen3-coder": { - "input_cost_per_token": 2.2e-07, + "input_cost_per_token": 3e-07, "litellm_provider": "openrouter", "max_input_tokens": 262100, "max_output_tokens": 262100, "max_tokens": 262100, "mode": "chat", - "output_cost_per_token": 9.5e-07, + "output_cost_per_token": 1e-06, "source": "https://openrouter.ai/qwen/qwen3-coder", "supports_tool_choice": true, "supports_function_calling": true }, "openrouter/qwen/qwen3-coder-plus": { - "input_cost_per_token": 1e-06, + "input_cost_per_token": 6.5e-07, "litellm_provider": "openrouter", "max_input_tokens": 997952, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 5e-06, + "output_cost_per_token": 3.25e-06, "source": "https://openrouter.ai/qwen/qwen3-coder-plus", "supports_function_calling": true, "supports_reasoning": true, "supports_tool_choice": true }, "openrouter/qwen/qwen3-235b-a22b-2507": { - "input_cost_per_token": 7.1e-08, + "input_cost_per_token": 8.75e-08, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 262144, "max_tokens": 262144, "mode": "chat", - "output_cost_per_token": 1e-07, + "output_cost_per_token": 3.5e-07, "source": "https://openrouter.ai/qwen/qwen3-235b-a22b-2507", "supports_function_calling": true, "supports_tool_choice": true }, "openrouter/qwen/qwen3-235b-a22b-thinking-2507": { - "input_cost_per_token": 1.1e-07, + "input_cost_per_token": 2.3e-07, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 262144, "max_tokens": 262144, "mode": "chat", - "output_cost_per_token": 6e-07, + "output_cost_per_token": 2.3e-06, "source": "https://openrouter.ai/qwen/qwen3-235b-a22b-thinking-2507", "supports_function_calling": true, "supports_reasoning": true, @@ -38772,7 +38773,7 @@ "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 2e-06, + "output_cost_per_token": 1.25e-06, "source": "https://openrouter.ai/qwen/qwen3.5-35b-a3b", "supports_function_calling": true, "supports_reasoning": true, @@ -38780,13 +38781,13 @@ "supports_vision": true }, "openrouter/qwen/qwen3.5-27b": { - "input_cost_per_token": 3e-07, + "input_cost_per_token": 1.95e-07, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 2.4e-06, + "output_cost_per_token": 1.56e-06, "source": "https://openrouter.ai/qwen/qwen3.5-27b", "supports_function_calling": true, "supports_reasoning": true, @@ -38794,13 +38795,13 @@ "supports_vision": true }, "openrouter/qwen/qwen3.5-122b-a10b": { - "input_cost_per_token": 4e-07, + "input_cost_per_token": 2.9e-07, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 2e-06, + "output_cost_per_token": 2.4e-06, "source": "https://openrouter.ai/qwen/qwen3.5-122b-a10b", "supports_function_calling": true, "supports_reasoning": true, @@ -38808,13 +38809,13 @@ "supports_vision": true }, "openrouter/qwen/qwen3.5-flash-02-23": { - "input_cost_per_token": 1e-07, + "input_cost_per_token": 6.5e-08, "litellm_provider": "openrouter", "max_input_tokens": 1000000, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 4e-07, + "output_cost_per_token": 2.6e-07, "source": "https://openrouter.ai/qwen/qwen3.5-flash-02-23", "supports_function_calling": true, "supports_reasoning": true, @@ -38822,14 +38823,14 @@ "supports_vision": true }, "openrouter/qwen/qwen3.5-plus-02-15": { - "input_cost_per_token": 4e-07, + "input_cost_per_token": 2.6e-07, "input_cost_per_token_above_256k_tokens": 5e-07, "litellm_provider": "openrouter", "max_input_tokens": 1000000, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 2.4e-06, + "output_cost_per_token": 1.56e-06, "output_cost_per_token_above_256k_tokens": 3e-06, "source": "https://openrouter.ai/qwen/qwen3.5-plus-02-15", "supports_function_calling": true, @@ -38838,13 +38839,13 @@ "supports_vision": true }, "openrouter/qwen/qwen3.5-397b-a17b": { - "input_cost_per_token": 6e-07, + "input_cost_per_token": 5.5e-07, "litellm_provider": "openrouter", "max_input_tokens": 262144, "max_output_tokens": 65536, "max_tokens": 65536, "mode": "chat", - "output_cost_per_token": 3.6e-06, + "output_cost_per_token": 3.5e-06, "source": "https://openrouter.ai/qwen/qwen3.5-397b-a17b", "supports_function_calling": true, "supports_reasoning": true, @@ -38863,11 +38864,11 @@ "supports_tool_choice": true }, "openrouter/undi95/remm-slerp-l2-13b": { - "input_cost_per_token": 1.875e-06, + "input_cost_per_token": 4.5e-07, "litellm_provider": "openrouter", "max_tokens": 4096, "mode": "chat", - "output_cost_per_token": 1.875e-06, + "output_cost_per_token": 6.5e-07, "supports_tool_choice": true, "max_input_tokens": 6144, "max_output_tokens": 4096 @@ -38887,13 +38888,13 @@ "supports_web_search": true }, "openrouter/z-ai/glm-4.6": { - "input_cost_per_token": 4e-07, + "input_cost_per_token": 5.5e-07, "litellm_provider": "openrouter", "max_input_tokens": 202800, "max_output_tokens": 131000, "max_tokens": 131000, "mode": "chat", - "output_cost_per_token": 1.75e-06, + "output_cost_per_token": 2.2e-06, "source": "https://openrouter.ai/z-ai/glm-4.6", "supports_function_calling": true, "supports_prompt_caching": true, @@ -38931,10 +38932,10 @@ "supports_prompt_caching": true }, "openrouter/xiaomi/mimo-v2.5-pro": { - "input_cost_per_token": 1e-06, - "output_cost_per_token": 3e-06, + "input_cost_per_token": 4.35e-07, + "output_cost_per_token": 8.7e-07, "cache_creation_input_token_cost": 0.0, - "cache_read_input_token_cost": 2e-07, + "cache_read_input_token_cost": 3.6e-09, "litellm_provider": "openrouter", "max_input_tokens": 1048576, "max_output_tokens": 16384, @@ -38948,10 +38949,10 @@ "supports_prompt_caching": true }, "openrouter/xiaomi/mimo-v2.5": { - "input_cost_per_token": 4e-07, - "output_cost_per_token": 2e-06, + "input_cost_per_token": 1.4e-07, + "output_cost_per_token": 2.8e-07, "cache_creation_input_token_cost": 0.0, - "cache_read_input_token_cost": 8e-08, + "cache_read_input_token_cost": 2.8e-09, "litellm_provider": "openrouter", "max_input_tokens": 1048576, "max_output_tokens": 131072, @@ -38968,9 +38969,9 @@ }, "openrouter/z-ai/glm-4.7": { "input_cost_per_token": 4e-07, - "output_cost_per_token": 1.5e-06, + "output_cost_per_token": 1.75e-06, "cache_creation_input_token_cost": 0.0, - "cache_read_input_token_cost": 0.0, + "cache_read_input_token_cost": 8e-08, "litellm_provider": "openrouter", "max_input_tokens": 202752, "max_output_tokens": 64000, @@ -38984,10 +38985,10 @@ "supports_assistant_prefill": true }, "openrouter/z-ai/glm-4.7-flash": { - "input_cost_per_token": 7e-08, + "input_cost_per_token": 6e-08, "output_cost_per_token": 4e-07, "cache_creation_input_token_cost": 0.0, - "cache_read_input_token_cost": 0.0, + "cache_read_input_token_cost": 1e-08, "litellm_provider": "openrouter", "max_input_tokens": 200000, "max_output_tokens": 32000, @@ -39000,22 +39001,22 @@ "supports_prompt_caching": false }, "openrouter/z-ai/glm-5": { - "input_cost_per_token": 8e-07, + "input_cost_per_token": 6e-07, "litellm_provider": "openrouter", "max_input_tokens": 202752, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 2.56e-06, + "output_cost_per_token": 1.92e-06, "source": "https://openrouter.ai/z-ai/glm-5", "supports_function_calling": true, "supports_reasoning": true, "supports_tool_choice": true }, "openrouter/z-ai/glm-5.1": { - "input_cost_per_token": 1.05e-06, - "output_cost_per_token": 3.5e-06, - "cache_read_input_token_cost": 5.25e-07, + "input_cost_per_token": 9.66e-07, + "output_cost_per_token": 3.036e-06, + "cache_read_input_token_cost": 1.794e-07, "cache_creation_input_token_cost": 0.0, "litellm_provider": "openrouter", "max_input_tokens": 202752, @@ -39029,10 +39030,10 @@ "supports_tool_choice": true }, "openrouter/minimax/minimax-m2.1": { - "input_cost_per_token": 2.7e-07, + "input_cost_per_token": 3e-07, "output_cost_per_token": 1.2e-06, "cache_creation_input_token_cost": 0.0, - "cache_read_input_token_cost": 0.0, + "cache_read_input_token_cost": 3e-08, "litellm_provider": "openrouter", "max_input_tokens": 204000, "max_output_tokens": 64000, @@ -39046,9 +39047,9 @@ "supports_computer_use": false }, "openrouter/minimax/minimax-m2.5": { - "input_cost_per_token": 3e-07, - "output_cost_per_token": 1.1e-06, - "cache_read_input_token_cost": 1.5e-07, + "input_cost_per_token": 2.7e-07, + "output_cost_per_token": 1.08e-06, + "cache_read_input_token_cost": 2.7e-08, "litellm_provider": "openrouter", "max_input_tokens": 196608, "max_output_tokens": 65536, @@ -39947,7 +39948,7 @@ "supports_reasoning": true }, "qwen.qwen3-coder-480b-a35b-v1:0": { - "input_cost_per_token": 2.2e-07, + "input_cost_per_token": 4.5e-07, "litellm_provider": "bedrock_converse", "max_input_tokens": 262000, "max_output_tokens": 65536, @@ -39957,7 +39958,8 @@ "supports_function_calling": true, "supports_reasoning": true, "supports_tool_choice": true, - "supports_native_structured_output": true + "supports_native_structured_output": true, + "source": "https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonBedrock/current/us-east-1/index.json" }, "qwen.qwen3-235b-a22b-2507-v1:0": { "input_cost_per_token": 2.2e-07, @@ -52852,7 +52854,7 @@ "max_input_tokens": 1048576, "max_output_tokens": 8192, "max_tokens": 8192, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 2e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -52878,7 +52880,7 @@ "max_input_tokens": 1048576, "max_output_tokens": 8192, "max_tokens": 8192, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 2e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -52904,7 +52906,7 @@ "max_input_tokens": 1048576, "max_output_tokens": 8192, "max_tokens": 8192, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 2e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -52932,7 +52934,7 @@ "max_input_tokens": 131072, "max_output_tokens": 65536, "max_tokens": 65536, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 4.5e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -52963,7 +52965,7 @@ "max_input_tokens": 1048576, "max_output_tokens": 8192, "max_tokens": 8192, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 2e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -52991,7 +52993,7 @@ "max_input_tokens": 1048576, "max_output_tokens": 8192, "max_tokens": 8192, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 2e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -53019,7 +53021,7 @@ "max_input_tokens": 1048576, "max_output_tokens": 8192, "max_tokens": 8192, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 2e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -53049,7 +53051,7 @@ "max_input_tokens": 131072, "max_output_tokens": 65536, "max_tokens": 65536, - "mode": "chat", + "mode": "realtime", "output_cost_per_audio_token": 1.2e-05, "output_cost_per_token": 4.5e-06, "source": "https://ai.google.dev/gemini-api/docs/pricing", @@ -59463,7 +59465,8 @@ "supports_audio_input": false, "cache_read_input_token_cost": 1e-06, "supports_prompt_caching": true, - "cache_creation_input_token_cost": 1.25e-05 + "cache_creation_input_token_cost": 1.25e-05, + "prompt_cache_min_tokens": 512 }, "openrouter/anthropic/claude-fable-5.1": { "input_cost_per_token": 1e-05, @@ -59483,7 +59486,8 @@ "supports_audio_input": false, "cache_read_input_token_cost": 2.5e-07, "supports_prompt_caching": true, - "cache_creation_input_token_cost": 1.25e-05 + "cache_creation_input_token_cost": 1.25e-05, + "prompt_cache_min_tokens": 512 }, "openrouter/anthropic/claude-opus-4.8": { "input_cost_per_token": 5e-06, @@ -59549,8 +59553,8 @@ "output_cost_per_token": 9e-06, "litellm_provider": "openrouter", "max_input_tokens": 1048576, - "max_output_tokens": 65536, - "max_tokens": 65536, + "max_output_tokens": 65535, + "max_tokens": 65535, "mode": "chat", "source": "https://openrouter.ai/google/gemini-3.5-flash", "supports_function_calling": true, @@ -59662,7 +59666,7 @@ "input_cost_per_token": 1.25e-06, "output_cost_per_token": 1e-05, "litellm_provider": "openrouter", - "max_input_tokens": 400000, + "max_input_tokens": 272000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -59681,7 +59685,7 @@ "input_cost_per_token": 1.75e-06, "output_cost_per_token": 1.4e-05, "litellm_provider": "openrouter", - "max_input_tokens": 400000, + "max_input_tokens": 272000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -59719,7 +59723,7 @@ "input_cost_per_token": 7.5e-07, "output_cost_per_token": 4.5e-06, "litellm_provider": "openrouter", - "max_input_tokens": 400000, + "max_input_tokens": 272000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -59738,7 +59742,7 @@ "input_cost_per_token": 2e-07, "output_cost_per_token": 1.25e-06, "litellm_provider": "openrouter", - "max_input_tokens": 400000, + "max_input_tokens": 272000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -59776,7 +59780,7 @@ "input_cost_per_token": 2e-07, "output_cost_per_token": 1.2e-06, "litellm_provider": "openrouter", - "max_input_tokens": 1050000, + "max_input_tokens": 922000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -59795,7 +59799,7 @@ "input_cost_per_token": 2e-06, "output_cost_per_token": 1.2e-05, "litellm_provider": "openrouter", - "max_input_tokens": 1050000, + "max_input_tokens": 922000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", @@ -59852,9 +59856,9 @@ "input_cost_per_token": 1.25e-06, "output_cost_per_token": 2.5e-06, "litellm_provider": "openrouter", - "max_input_tokens": 2000000, - "max_output_tokens": 1800000, - "max_tokens": 1800000, + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, "mode": "chat", "source": "https://openrouter.ai/x-ai/grok-4.20", "supports_function_calling": true, @@ -59871,9 +59875,9 @@ "input_cost_per_token": 1.25e-06, "output_cost_per_token": 2.5e-06, "litellm_provider": "openrouter", - "max_input_tokens": 2000000, - "max_output_tokens": 1800000, - "max_tokens": 1800000, + "max_input_tokens": 1000000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, "mode": "chat", "source": "https://openrouter.ai/x-ai/grok-4.20-multi-agent", "supports_function_calling": false, @@ -59891,8 +59895,8 @@ "output_cost_per_token": 2.5e-06, "litellm_provider": "openrouter", "max_input_tokens": 1000000, - "max_output_tokens": 900000, - "max_tokens": 900000, + "max_output_tokens": 1000000, + "max_tokens": 1000000, "mode": "chat", "source": "https://openrouter.ai/x-ai/grok-4.3", "supports_function_calling": true, @@ -59910,8 +59914,8 @@ "output_cost_per_token": 6e-06, "litellm_provider": "openrouter", "max_input_tokens": 500000, - "max_output_tokens": 450000, - "max_tokens": 450000, + "max_output_tokens": 500000, + "max_tokens": 500000, "mode": "chat", "source": "https://openrouter.ai/x-ai/grok-4.5", "supports_function_calling": true, @@ -59929,8 +59933,8 @@ "output_cost_per_token": 6e-06, "litellm_provider": "openrouter", "max_input_tokens": 500000, - "max_output_tokens": 450000, - "max_tokens": 450000, + "max_output_tokens": 500000, + "max_tokens": 500000, "mode": "chat", "source": "https://openrouter.ai/x-ai/grok-4.6", "supports_function_calling": true, @@ -59948,8 +59952,8 @@ "output_cost_per_token": 2e-06, "litellm_provider": "openrouter", "max_input_tokens": 256000, - "max_output_tokens": 230400, - "max_tokens": 230400, + "max_output_tokens": 256000, + "max_tokens": 256000, "mode": "chat", "source": "https://openrouter.ai/x-ai/grok-build-0.1", "supports_function_calling": true, @@ -59961,5 +59965,26 @@ "supports_audio_input": false, "cache_read_input_token_cost": 2e-07, "supports_prompt_caching": true + }, + "baseten/zai-org/GLM-5.3": { + "cache_read_input_token_cost": 1.4e-07, + "input_cost_per_token": 1.4e-06, + "litellm_provider": "baseten", + "max_input_tokens": 1048576, + "max_output_tokens": 262144, + "max_tokens": 262144, + "mode": "chat", + "output_cost_per_token": 4.4e-06, + "source": "https://www.baseten.co/pricing/", + "supported_modalities": [ + "text" + ], + "supported_output_modalities": [ + "text" + ], + "supports_function_calling": true, + "supports_prompt_caching": true, + "supports_response_schema": true, + "supports_tool_choice": true } } diff --git a/tests/test_litellm/litellm_core_utils/test_get_model_cost_map.py b/tests/test_litellm/litellm_core_utils/test_get_model_cost_map.py index a374e03d1c7..18185126775 100644 --- a/tests/test_litellm/litellm_core_utils/test_get_model_cost_map.py +++ b/tests/test_litellm/litellm_core_utils/test_get_model_cost_map.py @@ -9,7 +9,6 @@ import os import pytest - from litellm.litellm_core_utils.fallback_generalizations import ( get_fallback_generalization_rules, match_capability_generalizations, @@ -248,6 +247,57 @@ def test_azure_ai_claude_1m_context_entries(cost_map: dict): assert cost_map[model]["max_input_tokens"] == 200000, model +# OpenRouter headline rates from GET https://openrouter.ai/api/v1/models. +# These were the catalog values that disagreed with that API (and, for the +# two spotlight models, the public model pages that their source fields cite). +_OPENROUTER_LIVE_COSTS = { + "openrouter/qwen/qwen3.5-plus-02-15": (2.6e-07, 1.56e-06, None), + "openrouter/openai/gpt-oss-120b": (3.7e-08, 1.7e-07, None), + "openrouter/qwen/qwen3-coder-plus": (6.5e-07, 3.25e-06, None), + "openrouter/qwen/qwen3.5-flash-02-23": (6.5e-08, 2.6e-07, None), + "openrouter/qwen/qwen3.5-27b": (1.95e-07, 1.56e-06, None), + "openrouter/gryphe/mythomax-l2-13b": (6e-08, 6e-08, None), + "openrouter/mancer/weaver": (4e-07, 7.5e-07, None), + "openrouter/xiaomi/mimo-v2.5-pro": (4.35e-07, 8.7e-07, 3.6e-09), + "openrouter/moonshotai/kimi-k2.5": (4.5e-07, 2.25e-06, 7e-08), + "openrouter/z-ai/glm-5": (6e-07, 1.92e-06, None), +} + +_OPENROUTER_STALE_COSTS = { + "openrouter/qwen/qwen3.5-plus-02-15": (4e-07, 2.4e-06), + "openrouter/openai/gpt-oss-120b": (1.8e-07, 8e-07), + "openrouter/gryphe/mythomax-l2-13b": (1.875e-06, 1.875e-06), +} + + +@pytest.mark.parametrize( + "cost_map", + [_load_root_cost_map(), GetModelCostMap.load_local_model_cost_map()], + ids=["root", "bundled_backup"], +) +def test_openrouter_catalog_costs_match_live_headline_rates(cost_map: dict): + """openrouter/* spend tracking reads these catalog fields. The values must + stay aligned with OpenRouter's published headline rate, not the stale + figures that over/under-counted by up to 30x. Both maps are checked so + the root file and bundled backup cannot drift apart.""" + control = cost_map["openrouter/anthropic/claude-opus-5"] + assert control["input_cost_per_token"] == 5e-06 + assert control["output_cost_per_token"] == 2.5e-05 + assert control["cache_read_input_token_cost"] == 5e-07 + + for model, (inp, out, cache) in _OPENROUTER_LIVE_COSTS.items(): + entry = cost_map[model] + assert entry["input_cost_per_token"] == inp, model + assert entry["output_cost_per_token"] == out, model + if cache is not None: + assert entry["cache_read_input_token_cost"] == cache, model + + for model, (stale_in, stale_out) in _OPENROUTER_STALE_COSTS.items(): + entry = cost_map[model] + assert entry["input_cost_per_token"] != stale_in, model + assert entry["output_cost_per_token"] != stale_out, model + + def test_get_model_cost_map_stamps_loaded_at(monkeypatch): """The load time feeds each pod's reload-due decision; a load that does not stamp it would make manual reload requests race the proxy's startup""" diff --git a/tests/test_litellm/test_baseten_glm_5_3_model_metadata.py b/tests/test_litellm/test_baseten_glm_5_3_model_metadata.py new file mode 100644 index 00000000000..98a8cf026ec --- /dev/null +++ b/tests/test_litellm/test_baseten_glm_5_3_model_metadata.py @@ -0,0 +1,154 @@ +import json +from pathlib import Path + +import pytest + +import litellm +from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider +from litellm.types.utils import PromptTokensDetailsWrapper, Usage +from litellm.utils import supports_function_calling, supports_prompt_caching + +REPO_ROOT = Path(__file__).parents[2] +MAIN_PATH = REPO_ROOT / "model_prices_and_context_window.json" +BACKUP_PATH = REPO_ROOT / "litellm" / "model_prices_and_context_window_backup.json" + +MODEL = "baseten/zai-org/GLM-5.3" + +INPUT_COST = 1.4e-06 +CACHED_INPUT_COST = 1.4e-07 +OUTPUT_COST = 4.4e-06 + + +def _load(path): + with open(path) as f: + return json.load(f) + + +@pytest.fixture +def local_model_cost_map(monkeypatch): + """Force get_model_info to resolve against the in-repo cost map instead of the + remote one fetched at import time, which still carries the pre-merge registry.""" + monkeypatch.setenv("LITELLM_LOCAL_MODEL_COST_MAP", "True") + monkeypatch.setattr(litellm, "model_cost", litellm.get_model_cost_map(url="")) + litellm.get_model_info.cache_clear() + yield + litellm.get_model_info.cache_clear() + + +def test_baseten_glm_5_3_specs(): + info = _load(MAIN_PATH).get(MODEL) + assert info is not None, f"{MODEL} missing from model_prices_and_context_window.json" + + assert info["litellm_provider"] == "baseten" + assert info["mode"] == "chat" + + assert info["input_cost_per_token"] == INPUT_COST + assert info["output_cost_per_token"] == OUTPUT_COST + assert info["cache_read_input_token_cost"] == CACHED_INPUT_COST + + assert info["max_input_tokens"] == 1048576 + assert info["max_output_tokens"] == 262144 + assert info["max_tokens"] == 262144 + + assert info["supports_function_calling"] is True + assert info["supports_prompt_caching"] is True + assert info["supports_response_schema"] is True + assert info["supports_tool_choice"] is True + assert info["supported_modalities"] == ["text"] + assert info["supported_output_modalities"] == ["text"] + + routed_model, provider, _, _ = get_llm_provider(model=MODEL) + assert routed_model == "zai-org/GLM-5.3" + assert provider == "baseten" + + +def test_baseten_glm_5_3_capabilities_are_visible_to_callers(local_model_cost_map): + """The entry advertises prompt caching and tool calling, so the helpers every + caller checks before sending a request must say so too.""" + assert supports_prompt_caching(model=MODEL) is True + assert supports_function_calling(model=MODEL) is True + + info = litellm.get_model_info(model="zai-org/GLM-5.3", custom_llm_provider="baseten") + assert info["max_input_tokens"] == 1048576 + assert info["max_output_tokens"] == 262144 + + +def test_cached_prompt_tokens_bill_at_the_cached_rate(local_model_cost_map): + """A cache hit reports its reused tokens under prompt_tokens_details, and those + tokens cost a tenth of the input rate, not the full rate and not nothing.""" + usage = Usage( + prompt_tokens=21010, + completion_tokens=100, + total_tokens=21110, + prompt_tokens_details=PromptTokensDetailsWrapper(cached_tokens=20992), + ) + + prompt_cost, completion_cost = litellm.cost_per_token( + model=MODEL, usage_object=usage, custom_llm_provider="baseten" + ) + + assert prompt_cost == pytest.approx(18 * INPUT_COST + 20992 * CACHED_INPUT_COST) + assert completion_cost == pytest.approx(100 * OUTPUT_COST) + + +def test_backup_matches_main(): + """Ensure the bundled (backup) cost map stays in sync with the canonical file. + + Both keys are asserted present first: comparing two ``.get`` results alone passes + just as happily when neither file has the entry at all, which is the exact state + this test exists to catch. + """ + main_cost = _load(MAIN_PATH) + backup_cost = _load(BACKUP_PATH) + + assert MODEL in main_cost, f"{MODEL} missing from model_prices_and_context_window.json" + assert MODEL in backup_cost, f"{MODEL} missing from model_prices_and_context_window_backup.json" + assert backup_cost[MODEL] == main_cost[MODEL], f"{MODEL} differs between main and backup model cost maps" + + +def test_entry_advertises_only_what_the_baseten_path_accepts(local_model_cost_map): + """The entry must not claim a capability whose request parameter BasetenConfig + refuses. + + ``BasetenConfig.get_supported_openai_params`` returns one hardcoded list for every + Baseten model, and it carries neither ``parallel_tool_calls`` nor + ``reasoning_effort``. Baseten's own Model API does take ``reasoning_effort``, but + litellm's Baseten path drops it (``drop_params=True``) or raises + ``UnsupportedParamsError`` (``drop_params=False``), so declaring + ``supports_parallel_function_calling``, ``supports_reasoning`` or + ``reasoning_effort_levels`` here would advertise a level the gateway then refuses to + send. Wiring those params through the Baseten config is separate work; until it + lands, the registry stays honest. + """ + supported = litellm.get_supported_openai_params(model="zai-org/GLM-5.3", custom_llm_provider="baseten") + assert supported is not None + + entry = _load(MAIN_PATH)[MODEL] + + capability_to_param = { + "supports_function_calling": "tools", + "supports_tool_choice": "tool_choice", + "supports_response_schema": "response_format", + "supports_parallel_function_calling": "parallel_tool_calls", + "supports_reasoning": "reasoning_effort", + } + for capability, param in capability_to_param.items(): + if entry.get(capability): + assert param in supported, f"{MODEL} advertises {capability} but baseten drops/rejects {param}" + + assert "reasoning_effort_levels" not in entry, ( + "reasoning_effort_levels advertises accepted reasoning_effort values, which the Baseten path does not accept" + ) + assert "thinking_always_on" not in entry, ( + "thinking_always_on is only read by AnthropicModelInfo._is_always_on_thinking_model, " + "which no Baseten route reaches" + ) + + with pytest.raises(litellm.UnsupportedParamsError): + litellm.utils.get_optional_params( + model="zai-org/GLM-5.3", + custom_llm_provider="baseten", + parallel_tool_calls=True, + reasoning_effort="high", + drop_params=False, + ) diff --git a/tests/test_litellm/test_utils.py b/tests/test_litellm/test_utils.py index 99c69d6bc31..5575c4328a2 100644 --- a/tests/test_litellm/test_utils.py +++ b/tests/test_litellm/test_utils.py @@ -2779,7 +2779,7 @@ def test_model_info_for_openrouter_kimi_k2_5(): Model properties from OpenRouter API: - context_length: 262144 - - pricing: prompt=$0.0000006, completion=$0.000003, input_cache_read=$0.0000001 + - pricing: prompt=$0.00000045, completion=$0.00000225, input_cache_read=$0.00000007 - modality: text+image->text (supports vision) - supports: tool_choice, tools (function calling) """ @@ -2804,9 +2804,9 @@ def test_model_info_for_openrouter_kimi_k2_5(): assert model_info["max_tokens"] == 262144 # Verify pricing - assert model_info["input_cost_per_token"] == 6e-07 - assert model_info["output_cost_per_token"] == 3e-06 - assert model_info["cache_read_input_token_cost"] == 1e-07 + assert model_info["input_cost_per_token"] == 4.5e-07 + assert model_info["output_cost_per_token"] == 2.25e-06 + assert model_info["cache_read_input_token_cost"] == 7e-08 # Verify capabilities assert model_info["supports_vision"] is True