From ebd6d36cd95f5c6b7dfb67796f60a5aa07f9ecc0 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Sat, 21 Feb 2026 13:12:14 -0800 Subject: [PATCH] fix(logging): resolve cache_hit before hidden_params short-circuit in _response_cost_calculator Cached responses carry response_cost in _hidden_params from the original call. _response_cost_calculator was returning that pre-computed cost before checking cache_hit, so cached responses were billed instead of returning 0.0. Fix: move cache_hit resolution and early-return to top of the function. Regression introduced in bdf01fa283 (fix mypy error). --- litellm/litellm_core_utils/litellm_logging.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/litellm/litellm_core_utils/litellm_logging.py b/litellm/litellm_core_utils/litellm_logging.py index e3e4492098d..258df1bb900 100644 --- a/litellm/litellm_core_utils/litellm_logging.py +++ b/litellm/litellm_core_utils/litellm_logging.py @@ -1394,6 +1394,12 @@ class Logging(LiteLLMLoggingBaseClass): used for consistent cost calculation across response headers + logging integrations. """ + if cache_hit is None: + cache_hit = self.model_call_details.get("cache_hit", False) + + if cache_hit is True: + return 0.0 + if isinstance(result, BaseModel) and hasattr(result, "_hidden_params"): hidden_params = getattr(result, "_hidden_params", {}) if (