BerriAI/litellm · warning · Exception

Error logging request payload. Payload=none.

Error message

Error logging request payload. Payload=none.

What it means

The Langsmith logger expects a pre-built 'standard_logging_object' in kwargs; when it is None it raises before building the run payload. LiteLLM normally constructs this standard logging payload earlier in the request pipeline, so its absence means the logging hook was invoked outside the normal litellm call flow or the payload was stripped.

Source

Thrown at litellm/integrations/langsmith.py:202

        self,
        kwargs,
        response_obj,
        start_time,
        end_time,
        credentials: LangsmithCredentialsObject,
    ):
        try:
            _litellm_params: Final = kwargs.get("litellm_params", {}) or {}
            metadata = _litellm_params.get("metadata", {}) or {}

            fields: Final = self._extract_metadata_fields(metadata, credentials)
            verbose_logger.debug(
                "Langsmith Logging - project_name: %s, run_name %s", fields["project_name"], fields["run_name"]
            )

            payload: Final[StandardLoggingPayload | None] = kwargs.get("standard_logging_object", None)
            if payload is None:
                raise Exception("Error logging request payload. Payload=none.")

            metadata = payload["metadata"]
            extra_metadata: Final = self._build_extra_metadata(dict(metadata))
            inputs: Final = {**payload, "metadata": self._redact_metadata(dict(metadata))}
            outputs: Final = self._build_outputs_with_usage(payload)

            data: Final = {
                "name": fields["run_name"],
                "run_type": "llm",
                "inputs": inputs,
                "outputs": outputs,
                "session_name": fields["project_name"],
                "start_time": payload["startTime"],
                "end_time": payload["endTime"],
                "tags": payload["request_tags"],
                "extra": extra_metadata,
            }

View on GitHub (pinned to 6c2dcb801b)

Solutions

  1. If calling the logger directly, build a StandardLoggingPayload first (via litellm's standard logging payload helpers or by running a real completion) and put it under kwargs['standard_logging_object']
  2. Prefer integration tests that go through litellm.completion with callbacks enabled instead of invoking the logger manually
  3. Inspect kwargs just before the callback fires to confirm which layer removed the payload
  4. Update to a matching litellm version if custom middleware was written against an older payload key

Example fix

# before
logger.log_success_event(kwargs={"litellm_params": {}}, ...)  # Exception: Payload=none.

# after
kwargs = {
    "standard_logging_object": build_standard_logging_payload(...),
    "litellm_params": {"metadata": {}},
}
logger.log_success_event(kwargs=kwargs, ...)
Defensive patterns

Strategy: try-catch

Validate before calling

def has_standard_logging_object(kwargs: dict) -> bool:
    return kwargs.get("standard_logging_object") is not None

Try / catch

try:
    logger.log_success_event(kwargs, response_obj, start, end)
except Exception as e:
    if "Payload=none" in str(e):
        pass  # logging hook called outside normal pipeline; skip, do not fail the request
    else:
        raise

Prevention

When it happens

Trigger: Calling LangsmithLogger's log method directly (unit tests or custom instrumentation) without a standard_logging_object in kwargs; invoking success callbacks on a hand-built kwargs dict; middleware that drops 'standard_logging_object' from kwargs before logging.

Common situations: Teams unit-testing custom callback wiring by fabricating kwargs; forks that call internal logging APIs; version changes that rename or move the standard logging payload construction before callbacks run.

Related errors


AI-assisted analysis of BerriAI/litellm@6c2dcb801b (2026-08-15). Data as JSON: /api/errors/0404ba482f0a307c. Report an issue: GitHub.