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.
This commit is contained in:
Dawid Łaziński 2026-04-20 23:31:08 +02:00
parent 7e6f4f3306
commit 63b4a7962b
No known key found for this signature in database
6 changed files with 16 additions and 4 deletions

View file

@ -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(

View file

@ -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(

View file

@ -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,

View file

@ -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

View file

@ -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,

View file

@ -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