From b757bb68f9c9c49fe76672594560ef1fd8d5980e Mon Sep 17 00:00:00 2001 From: Cole McIntosh <82463175+colesmcintosh@users.noreply.github.com> Date: Mon, 14 Jul 2025 17:37:17 -0600 Subject: [PATCH] fix: add implicit caching cost calculation for Gemini 2.x models (#12585) Added cache_read_input_token_cost (25% of regular input cost) to all 39 Gemini 2.x models to properly support implicit context caching cost calculations. Previously, cached tokens were being charged at full price instead of the discounted rate. Fixes #11156 --- ...odel_prices_and_context_window_backup.json | 162 +++++++++++++----- model_prices_and_context_window.json | 162 +++++++++++++----- tests/test_litellm/test_cost_calculator.py | 72 ++++++++ 3 files changed, 312 insertions(+), 84 deletions(-) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 40c4ba9edf..514cd9b169 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -318,8 +318,8 @@ "max_tokens": 131072, "max_input_tokens": 131072, "max_output_tokens": 16384, - "input_cost_per_token": 0.000003, - "output_cost_per_token": 0.00001, + "input_cost_per_token": 3e-06, + "output_cost_per_token": 1e-05, "litellm_provider": "watsonx", "mode": "chat", "supports_function_calling": true, @@ -6831,7 +6831,9 @@ ], "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini-2.0-pro-exp-02-05": { "max_tokens": 8192, @@ -6872,7 +6874,9 @@ ], "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini-2.0-flash-exp": { "max_tokens": 8192, @@ -6918,7 +6922,9 @@ "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", "supports_tool_choice": true, "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.75e-08, + "supports_prompt_caching": true }, "gemini-2.0-flash-001": { "max_tokens": 8192, @@ -6954,7 +6960,9 @@ "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", "deprecation_date": "2026-02-05", "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.75e-08, + "supports_prompt_caching": true }, "gemini-2.0-flash-thinking-exp": { "max_tokens": 8192, @@ -7000,7 +7008,9 @@ "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supports_tool_choice": true, "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini-2.0-flash-thinking-exp-01-21": { "max_tokens": 65536, @@ -7046,7 +7056,9 @@ "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supports_tool_choice": true, "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini-2.5-pro": { "max_tokens": 65535, @@ -7087,7 +7099,9 @@ "text" ], "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.5-pro-exp-03-25": { "max_tokens": 65535, @@ -7129,7 +7143,9 @@ "text" ], "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini/gemini-2.5-pro": { "max_tokens": 65535, @@ -7172,7 +7188,9 @@ "text" ], "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.5-flash": { "max_tokens": 65535, @@ -7217,7 +7235,9 @@ "supports_url_context": true, "tpm": 8000000, "rpm": 100000, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 7.5e-08, + "supports_prompt_caching": true }, "gemini-2.5-flash": { "max_tokens": 65535, @@ -7260,7 +7280,9 @@ "supports_parallel_function_calling": true, "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 7.5e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.5-flash-preview-tts": { "max_tokens": 65535, @@ -7298,7 +7320,9 @@ "audio" ], "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.75e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.5-flash-preview-05-20": { "max_tokens": 65535, @@ -7341,7 +7365,9 @@ "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 7.5e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.5-flash-preview-04-17": { "max_tokens": 65535, @@ -7383,7 +7409,9 @@ ], "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_web_search": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.75e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.5-flash-lite-preview-06-17": { "max_tokens": 65535, @@ -7428,7 +7456,9 @@ "supports_parallel_function_calling": true, "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini-2.5-flash-preview-05-20": { "max_tokens": 65535, @@ -7471,7 +7501,9 @@ "supports_parallel_function_calling": true, "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 7.5e-08, + "supports_prompt_caching": true }, "gemini-2.5-flash-preview-04-17": { "max_tokens": 65535, @@ -7513,7 +7545,9 @@ "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_parallel_function_calling": true, "supports_web_search": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.75e-08, + "supports_prompt_caching": true }, "gemini-2.5-flash-lite-preview-06-17": { "max_tokens": 65535, @@ -7556,7 +7590,9 @@ "supports_parallel_function_calling": true, "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini-2.0-flash": { "max_tokens": 8192, @@ -7593,7 +7629,9 @@ "source": "https://ai.google.dev/pricing#2_0flash", "supports_parallel_function_calling": true, "supports_web_search": true, - "supports_url_context": true + "supports_url_context": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini-2.0-flash-lite": { "max_input_tokens": 1048576, @@ -7626,7 +7664,9 @@ "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supports_tool_choice": true, "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 1.875e-08, + "supports_prompt_caching": true }, "gemini-2.0-flash-lite-001": { "max_input_tokens": 1048576, @@ -7660,7 +7700,9 @@ "supports_tool_choice": true, "deprecation_date": "2026-02-25", "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 1.875e-08, + "supports_prompt_caching": true }, "gemini-2.5-pro-preview-06-05": { "max_tokens": 65535, @@ -7703,7 +7745,9 @@ "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_parallel_function_calling": true, "supports_web_search": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini-2.5-pro-preview-05-06": { "max_tokens": 65535, @@ -7749,7 +7793,9 @@ "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_parallel_function_calling": true, "supports_web_search": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini-2.5-pro-preview-03-25": { "max_tokens": 65535, @@ -7792,7 +7838,9 @@ "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_parallel_function_calling": true, "supports_web_search": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini-2.0-flash-preview-image-generation": { "max_tokens": 8192, @@ -7828,7 +7876,9 @@ "supports_tool_choice": true, "source": "https://ai.google.dev/pricing#2_0flash", "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini-2.5-pro-preview-tts": { "max_tokens": 65535, @@ -7861,7 +7911,9 @@ ], "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.0-pro-exp-02-05": { "max_tokens": 8192, @@ -7900,7 +7952,9 @@ "supports_response_schema": true, "supports_tool_choice": true, "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-preview-image-generation": { "max_tokens": 8192, @@ -7937,7 +7991,9 @@ ], "supports_tool_choice": true, "source": "https://ai.google.dev/pricing#2_0flash", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash": { "max_tokens": 8192, @@ -7975,7 +8031,9 @@ "supports_tool_choice": true, "source": "https://ai.google.dev/pricing#2_0flash", "supports_web_search": true, - "supports_url_context": true + "supports_url_context": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-lite": { "max_input_tokens": 1048576, @@ -8009,7 +8067,9 @@ "text" ], "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.0-flash-lite", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 1.875e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-001": { "max_tokens": 8192, @@ -8045,7 +8105,9 @@ "image" ], "source": "https://ai.google.dev/pricing#2_0flash", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.5-pro-preview-tts": { "max_tokens": 65535, @@ -8079,7 +8141,9 @@ "audio" ], "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.5-pro-preview-06-05": { "max_tokens": 65535, @@ -8118,7 +8182,9 @@ "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.5-pro-preview-05-06": { "max_tokens": 65535, @@ -8157,7 +8223,9 @@ "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.5-pro-preview-03-25": { "max_tokens": 65535, @@ -8195,7 +8263,9 @@ ], "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", "supports_web_search": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-exp": { "max_tokens": 8192, @@ -8242,7 +8312,9 @@ ], "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supports_tool_choice": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-lite-preview-02-05": { "max_tokens": 8192, @@ -8277,7 +8349,9 @@ "text" ], "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash-lite", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 1.875e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-thinking-exp": { "max_tokens": 8192, @@ -8324,7 +8398,9 @@ ], "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supports_tool_choice": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-thinking-exp-01-21": { "max_tokens": 8192, @@ -8371,7 +8447,9 @@ ], "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supports_tool_choice": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini/gemma-3-27b-it": { "max_tokens": 8192, @@ -16068,4 +16146,4 @@ "mode": "chat", "source": "https://platform.moonshot.ai/docs/pricing" } -} +} \ No newline at end of file diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 40c4ba9edf..514cd9b169 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -318,8 +318,8 @@ "max_tokens": 131072, "max_input_tokens": 131072, "max_output_tokens": 16384, - "input_cost_per_token": 0.000003, - "output_cost_per_token": 0.00001, + "input_cost_per_token": 3e-06, + "output_cost_per_token": 1e-05, "litellm_provider": "watsonx", "mode": "chat", "supports_function_calling": true, @@ -6831,7 +6831,9 @@ ], "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini-2.0-pro-exp-02-05": { "max_tokens": 8192, @@ -6872,7 +6874,9 @@ ], "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini-2.0-flash-exp": { "max_tokens": 8192, @@ -6918,7 +6922,9 @@ "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", "supports_tool_choice": true, "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.75e-08, + "supports_prompt_caching": true }, "gemini-2.0-flash-001": { "max_tokens": 8192, @@ -6954,7 +6960,9 @@ "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", "deprecation_date": "2026-02-05", "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.75e-08, + "supports_prompt_caching": true }, "gemini-2.0-flash-thinking-exp": { "max_tokens": 8192, @@ -7000,7 +7008,9 @@ "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supports_tool_choice": true, "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini-2.0-flash-thinking-exp-01-21": { "max_tokens": 65536, @@ -7046,7 +7056,9 @@ "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supports_tool_choice": true, "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini-2.5-pro": { "max_tokens": 65535, @@ -7087,7 +7099,9 @@ "text" ], "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.5-pro-exp-03-25": { "max_tokens": 65535, @@ -7129,7 +7143,9 @@ "text" ], "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini/gemini-2.5-pro": { "max_tokens": 65535, @@ -7172,7 +7188,9 @@ "text" ], "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.5-flash": { "max_tokens": 65535, @@ -7217,7 +7235,9 @@ "supports_url_context": true, "tpm": 8000000, "rpm": 100000, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 7.5e-08, + "supports_prompt_caching": true }, "gemini-2.5-flash": { "max_tokens": 65535, @@ -7260,7 +7280,9 @@ "supports_parallel_function_calling": true, "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 7.5e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.5-flash-preview-tts": { "max_tokens": 65535, @@ -7298,7 +7320,9 @@ "audio" ], "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.75e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.5-flash-preview-05-20": { "max_tokens": 65535, @@ -7341,7 +7365,9 @@ "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 7.5e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.5-flash-preview-04-17": { "max_tokens": 65535, @@ -7383,7 +7409,9 @@ ], "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_web_search": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.75e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.5-flash-lite-preview-06-17": { "max_tokens": 65535, @@ -7428,7 +7456,9 @@ "supports_parallel_function_calling": true, "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini-2.5-flash-preview-05-20": { "max_tokens": 65535, @@ -7471,7 +7501,9 @@ "supports_parallel_function_calling": true, "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 7.5e-08, + "supports_prompt_caching": true }, "gemini-2.5-flash-preview-04-17": { "max_tokens": 65535, @@ -7513,7 +7545,9 @@ "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_parallel_function_calling": true, "supports_web_search": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.75e-08, + "supports_prompt_caching": true }, "gemini-2.5-flash-lite-preview-06-17": { "max_tokens": 65535, @@ -7556,7 +7590,9 @@ "supports_parallel_function_calling": true, "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini-2.0-flash": { "max_tokens": 8192, @@ -7593,7 +7629,9 @@ "source": "https://ai.google.dev/pricing#2_0flash", "supports_parallel_function_calling": true, "supports_web_search": true, - "supports_url_context": true + "supports_url_context": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini-2.0-flash-lite": { "max_input_tokens": 1048576, @@ -7626,7 +7664,9 @@ "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supports_tool_choice": true, "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 1.875e-08, + "supports_prompt_caching": true }, "gemini-2.0-flash-lite-001": { "max_input_tokens": 1048576, @@ -7660,7 +7700,9 @@ "supports_tool_choice": true, "deprecation_date": "2026-02-25", "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 1.875e-08, + "supports_prompt_caching": true }, "gemini-2.5-pro-preview-06-05": { "max_tokens": 65535, @@ -7703,7 +7745,9 @@ "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_parallel_function_calling": true, "supports_web_search": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini-2.5-pro-preview-05-06": { "max_tokens": 65535, @@ -7749,7 +7793,9 @@ "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_parallel_function_calling": true, "supports_web_search": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini-2.5-pro-preview-03-25": { "max_tokens": 65535, @@ -7792,7 +7838,9 @@ "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview", "supports_parallel_function_calling": true, "supports_web_search": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini-2.0-flash-preview-image-generation": { "max_tokens": 8192, @@ -7828,7 +7876,9 @@ "supports_tool_choice": true, "source": "https://ai.google.dev/pricing#2_0flash", "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini-2.5-pro-preview-tts": { "max_tokens": 65535, @@ -7861,7 +7911,9 @@ ], "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", "supports_parallel_function_calling": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.0-pro-exp-02-05": { "max_tokens": 8192, @@ -7900,7 +7952,9 @@ "supports_response_schema": true, "supports_tool_choice": true, "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-preview-image-generation": { "max_tokens": 8192, @@ -7937,7 +7991,9 @@ ], "supports_tool_choice": true, "source": "https://ai.google.dev/pricing#2_0flash", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash": { "max_tokens": 8192, @@ -7975,7 +8031,9 @@ "supports_tool_choice": true, "source": "https://ai.google.dev/pricing#2_0flash", "supports_web_search": true, - "supports_url_context": true + "supports_url_context": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-lite": { "max_input_tokens": 1048576, @@ -8009,7 +8067,9 @@ "text" ], "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.0-flash-lite", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 1.875e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-001": { "max_tokens": 8192, @@ -8045,7 +8105,9 @@ "image" ], "source": "https://ai.google.dev/pricing#2_0flash", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 2.5e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.5-pro-preview-tts": { "max_tokens": 65535, @@ -8079,7 +8141,9 @@ "audio" ], "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.5-pro-preview-06-05": { "max_tokens": 65535, @@ -8118,7 +8182,9 @@ "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.5-pro-preview-05-06": { "max_tokens": 65535, @@ -8157,7 +8223,9 @@ "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", "supports_web_search": true, "supports_url_context": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.5-pro-preview-03-25": { "max_tokens": 65535, @@ -8195,7 +8263,9 @@ ], "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview", "supports_web_search": true, - "supports_pdf_input": true + "supports_pdf_input": true, + "cache_read_input_token_cost": 3.125e-07, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-exp": { "max_tokens": 8192, @@ -8242,7 +8312,9 @@ ], "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supports_tool_choice": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-lite-preview-02-05": { "max_tokens": 8192, @@ -8277,7 +8349,9 @@ "text" ], "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash-lite", - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 1.875e-08, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-thinking-exp": { "max_tokens": 8192, @@ -8324,7 +8398,9 @@ ], "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supports_tool_choice": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini/gemini-2.0-flash-thinking-exp-01-21": { "max_tokens": 8192, @@ -8371,7 +8447,9 @@ ], "source": "https://cloud.google.com/vertex-ai/generative-ai/docs/learn/models#gemini-2.0-flash", "supports_tool_choice": true, - "supports_web_search": true + "supports_web_search": true, + "cache_read_input_token_cost": 0.0, + "supports_prompt_caching": true }, "gemini/gemma-3-27b-it": { "max_tokens": 8192, @@ -16068,4 +16146,4 @@ "mode": "chat", "source": "https://platform.moonshot.ai/docs/pricing" } -} +} \ No newline at end of file diff --git a/tests/test_litellm/test_cost_calculator.py b/tests/test_litellm/test_cost_calculator.py index aa109f04c2..314c3069b4 100644 --- a/tests/test_litellm/test_cost_calculator.py +++ b/tests/test_litellm/test_cost_calculator.py @@ -411,3 +411,75 @@ def test_bedrock_cost_calculator_comparison_with_without_cache(): assert cost_with_cache < cost_no_cache print(f"Cost without cache: {cost_no_cache}") print(f"Cost with cache: {cost_with_cache}") + + +def test_gemini_25_implicit_caching_cost(): + """ + Test that Gemini 2.5 models correctly calculate costs with implicit caching. + + This test reproduces the issue from #11156 where cached tokens should receive + a 75% discount. + """ + from litellm import completion_cost + from litellm.types.utils import ( + Choices, + Message, + ModelResponse, + PromptTokensDetailsWrapper, + Usage, + ) + + # Create a mock response similar to the one in the issue + litellm_model_response = ModelResponse( + id="test-response", + created=1750733889, + model="gemini/gemini-2.5-flash-preview-04-17", + object="chat.completion", + system_fingerprint=None, + choices=[ + Choices( + finish_reason="stop", + index=0, + message=Message( + content="Understood. This is a test message to check the response from the Gemini model.", + role="assistant", + tool_calls=None, + function_call=None, + ), + ) + ], + usage=Usage( + total_tokens=15050, + prompt_tokens=15033, + completion_tokens=17, + prompt_tokens_details=PromptTokensDetailsWrapper( + audio_tokens=None, + cached_tokens=14316, # This is cachedContentTokenCount from Gemini + ), + completion_tokens_details=None, + ), + ) + + # Calculate the cost + result = completion_cost( + completion_response=litellm_model_response, + model="gemini/gemini-2.5-flash-preview-04-17", + ) + + # From the issue: + # input: $0.15 / 1000000 tokens + # output: $0.60 / 1000000 tokens + # With caching: 0.15*0.25*(14316/1000000)+0.15*((15033-14316)/1000000)+0.6*(17/1000000) = 0.0006546 + + # Breakdown: + # - Cached tokens: 14316 * 0.15/1M * 0.25 = 0.00053685 + # - Non-cached tokens: (15033-14316) * 0.15/1M = 717 * 0.15/1M = 0.00010755 + # - Output tokens: 17 * 0.6/1M = 0.00001020 + # Total: 0.00053685 + 0.00010755 + 0.00001020 = 0.0006546 + + expected_cost = 0.0006546 + + # Allow for small floating point differences + assert abs(result - expected_cost) < 1e-8, f"Expected cost {expected_cost}, but got {result}" + + print(f"✓ Gemini 2.5 implicit caching cost calculation is correct: ${result:.8f}")