From 387982fcbf07a4c63eb877fb531790d33161b0df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabr=C3=ADcio=20Ceschin?= Date: Tue, 4 Nov 2025 22:20:35 -0500 Subject: [PATCH] Fix langfuse input tokens logic for cached tokens (#16203) * Update langfuse.py Fixing issue with input_tokens and cache_read_tokens * Clarify input token calculation in langfuse.py Add comment to clarify input token calculation based on Langfuse documentation. --- litellm/integrations/langfuse/langfuse.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/litellm/integrations/langfuse/langfuse.py b/litellm/integrations/langfuse/langfuse.py index a067d28524..b71cba6204 100644 --- a/litellm/integrations/langfuse/langfuse.py +++ b/litellm/integrations/langfuse/langfuse.py @@ -688,16 +688,19 @@ class LangFuseLogger: "completion_tokens": _usage_obj.completion_tokens, "total_cost": cost if self._supports_costs() else None, } + cache_read_input_tokens = _usage_obj.get( + "cache_read_input_tokens", 0 + ) + # According to langfuse documentation: "the input value must be reduced by the number of cache_read_input_tokens" + input_tokens = _usage_obj.prompt_tokens - cache_read_input_tokens usage_details = LangfuseUsageDetails( - input=_usage_obj.prompt_tokens, + input=input_tokens, output=_usage_obj.completion_tokens, total=_usage_obj.total_tokens, cache_creation_input_tokens=_usage_obj.get( "cache_creation_input_tokens", 0 ), - cache_read_input_tokens=_usage_obj.get( - "cache_read_input_tokens", 0 - ), + cache_read_input_tokens=cache_read_input_tokens, ) generation_name = clean_metadata.pop("generation_name", None)