From 63b4a7962bf0c02a62037048c991a805a229da69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20=C5=81azi=C5=84ski?= Date: Mon, 20 Apr 2026 23:31:08 +0200 Subject: [PATCH] fix(pass-through): use logging_obj fallback for passthrough_logging_payload in non-streaming paths passthrough_logging_payload is a named parameter of pass_through_async_success_handler and is therefore consumed from **kwargs before reaching provider handlers. All non-streaming kwargs.get('passthrough_logging_payload') calls returned None, making _apply_spend_logs_metadata a no-op on every non-streaming path. Fix: add logging_obj.model_call_details.get('passthrough_logging_payload') fallback in base, anthropic, cohere, openai (first path), gemini, and vertex handlers. The streaming path already uses _seed_streaming_kwargs_from_logging_obj which reads from the same logging_obj.model_call_details source. --- .../anthropic_passthrough_logging_handler.py | 1 + .../base_passthrough_logging_handler.py | 1 + .../cohere_passthrough_logging_handler.py | 5 ++++- .../gemini_passthrough_logging_handler.py | 4 +++- .../openai_passthrough_logging_handler.py | 5 ++++- .../vertex_passthrough_logging_handler.py | 4 +++- 6 files changed, 16 insertions(+), 4 deletions(-) diff --git a/litellm/proxy/pass_through_endpoints/llm_provider_handlers/anthropic_passthrough_logging_handler.py b/litellm/proxy/pass_through_endpoints/llm_provider_handlers/anthropic_passthrough_logging_handler.py index 1ca1c7bfb64..f5d2c70c26a 100644 --- a/litellm/proxy/pass_through_endpoints/llm_provider_handlers/anthropic_passthrough_logging_handler.py +++ b/litellm/proxy/pass_through_endpoints/llm_provider_handlers/anthropic_passthrough_logging_handler.py @@ -147,6 +147,7 @@ class AnthropicPassthroughLoggingHandler: kwargs["model"] = model passthrough_logging_payload: Optional[PassthroughStandardLoggingPayload] = ( # type: ignore kwargs.get("passthrough_logging_payload") + or logging_obj.model_call_details.get("passthrough_logging_payload") ) if passthrough_logging_payload: user = AnthropicPassthroughLoggingHandler._get_user_from_metadata( diff --git a/litellm/proxy/pass_through_endpoints/llm_provider_handlers/base_passthrough_logging_handler.py b/litellm/proxy/pass_through_endpoints/llm_provider_handlers/base_passthrough_logging_handler.py index 0c9433fbf0d..7de024669e5 100644 --- a/litellm/proxy/pass_through_endpoints/llm_provider_handlers/base_passthrough_logging_handler.py +++ b/litellm/proxy/pass_through_endpoints/llm_provider_handlers/base_passthrough_logging_handler.py @@ -161,6 +161,7 @@ class BasePassthroughLoggingHandler(ABC): kwargs["model"] = model passthrough_logging_payload: Optional[PassthroughStandardLoggingPayload] = ( # type: ignore kwargs.get("passthrough_logging_payload") + or logging_obj.model_call_details.get("passthrough_logging_payload") ) if passthrough_logging_payload: user = self._get_user_from_metadata( diff --git a/litellm/proxy/pass_through_endpoints/llm_provider_handlers/cohere_passthrough_logging_handler.py b/litellm/proxy/pass_through_endpoints/llm_provider_handlers/cohere_passthrough_logging_handler.py index 374051de058..832b8764f93 100644 --- a/litellm/proxy/pass_through_endpoints/llm_provider_handlers/cohere_passthrough_logging_handler.py +++ b/litellm/proxy/pass_through_endpoints/llm_provider_handlers/cohere_passthrough_logging_handler.py @@ -131,7 +131,10 @@ class CoherePassthroughLoggingHandler(BasePassthroughLoggingHandler): # Extract user information for tracking passthrough_logging_payload: Optional[ PassthroughStandardLoggingPayload - ] = kwargs.get("passthrough_logging_payload") + ] = ( + kwargs.get("passthrough_logging_payload") + or logging_obj.model_call_details.get("passthrough_logging_payload") + ) if passthrough_logging_payload: user = handler_instance._get_user_from_metadata( passthrough_logging_payload=passthrough_logging_payload, diff --git a/litellm/proxy/pass_through_endpoints/llm_provider_handlers/gemini_passthrough_logging_handler.py b/litellm/proxy/pass_through_endpoints/llm_provider_handlers/gemini_passthrough_logging_handler.py index 8c518ad200d..ca4cd13e44f 100644 --- a/litellm/proxy/pass_through_endpoints/llm_provider_handlers/gemini_passthrough_logging_handler.py +++ b/litellm/proxy/pass_through_endpoints/llm_provider_handlers/gemini_passthrough_logging_handler.py @@ -250,7 +250,9 @@ class GeminiPassthroughLoggingHandler: from .base_passthrough_logging_handler import BasePassthroughLoggingHandler # noqa: PLC0415 BasePassthroughLoggingHandler._apply_spend_logs_metadata( - kwargs, kwargs.get("passthrough_logging_payload") + kwargs, + kwargs.get("passthrough_logging_payload") + or logging_obj.model_call_details.get("passthrough_logging_payload"), ) # pretty print standard logging object diff --git a/litellm/proxy/pass_through_endpoints/llm_provider_handlers/openai_passthrough_logging_handler.py b/litellm/proxy/pass_through_endpoints/llm_provider_handlers/openai_passthrough_logging_handler.py index 7c64156c05d..98fc5c2dea3 100644 --- a/litellm/proxy/pass_through_endpoints/llm_provider_handlers/openai_passthrough_logging_handler.py +++ b/litellm/proxy/pass_through_endpoints/llm_provider_handlers/openai_passthrough_logging_handler.py @@ -369,7 +369,10 @@ class OpenAIPassthroughLoggingHandler(BasePassthroughLoggingHandler): # Extract user information for tracking passthrough_logging_payload: Optional[ PassthroughStandardLoggingPayload - ] = kwargs.get("passthrough_logging_payload") + ] = ( + kwargs.get("passthrough_logging_payload") + or logging_obj.model_call_details.get("passthrough_logging_payload") + ) if passthrough_logging_payload: user = handler_instance._get_user_from_metadata( passthrough_logging_payload=passthrough_logging_payload, diff --git a/litellm/proxy/pass_through_endpoints/llm_provider_handlers/vertex_passthrough_logging_handler.py b/litellm/proxy/pass_through_endpoints/llm_provider_handlers/vertex_passthrough_logging_handler.py index 3c837a42e8a..ce1e928dad7 100644 --- a/litellm/proxy/pass_through_endpoints/llm_provider_handlers/vertex_passthrough_logging_handler.py +++ b/litellm/proxy/pass_through_endpoints/llm_provider_handlers/vertex_passthrough_logging_handler.py @@ -554,7 +554,9 @@ class VertexPassthroughLoggingHandler: from litellm.proxy.pass_through_endpoints.llm_provider_handlers.base_passthrough_logging_handler import BasePassthroughLoggingHandler # noqa: PLC0415 BasePassthroughLoggingHandler._apply_spend_logs_metadata( - kwargs, kwargs.get("passthrough_logging_payload") + kwargs, + kwargs.get("passthrough_logging_payload") + or logging_obj.model_call_details.get("passthrough_logging_payload"), ) # pretty print standard logging object