langflow-ai/langflow · error · HTTPException

Empty result while {operation} ({provider_label}).

Error message

Empty result while {operation} ({provider_label}).

What it means

500 from BaseDeploymentMapper.parse_adapter_slot when slot.parse(raw) raises AdapterPayloadMissingError — the adapter/provider returned an empty/absent payload where a structured one was required. Like 455, this is an adapter-boundary failure (not user input): the provider call technically succeeded but produced nothing parseable. slot_name and provider are logged server-side.

Source

Thrown at src/backend/base/langflow/api/v1/mappers/deployments/base.py:941

        operation: str = "this operation",
    ) -> Any:
        """Parse a non-user-supplied adapter-boundary payload, raising 500 on failure.

        Use for adapter/provider results and mapper-built payloads headed to the adapter.
        Failures are internal errors — the user cannot fix them.
        ``slot_name`` is logged for debugging but not exposed to the user.
        See ``parse_api_request_slot`` for user-supplied input.
        """
        provider_label = self.get_provider_label()
        if slot is None:
            logger.error("Payload slot '%s' is not configured for %s", slot_name, provider_label)
            msg = f"The {provider_label} integration is not configured for {operation}."
            raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=msg)
        try:
            return slot.parse(raw)
        except AdapterPayloadMissingError as exc:
            logger.error("Empty adapter payload for slot '%s' (%s)", slot_name, provider_label)
            raise HTTPException(
                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
                detail=f"Empty result while {operation} ({provider_label}).",
            ) from exc
        except AdapterPayloadValidationError as exc:
            detail = exc.format_first_error()
            logger.error("Invalid adapter payload for slot '%s' (%s): %s", slot_name, provider_label, detail)
            raise HTTPException(
                status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
                detail=f"Unexpected result while {operation} ({provider_label}): {detail}",
            ) from exc

    def parse_api_request_slot(
        self,
        *,
        slot: PayloadSlot[Any] | None,
        slot_name: str,
        raw: Any,
        outer_payload: Any | None = None,

View on GitHub (pinned to 976ec789d2)

Solutions

  1. Check server log 'Empty adapter payload for slot ...' to identify which provider call emptied out
  2. Retry after a short delay — propagation races self-heal
  3. Verify the resource actually exists on the provider side (list it via the provider console/API)
  4. If persistent, the provider response shape changed — update the adapter
Defensive patterns

Strategy: retry

Try / catch

for attempt in range(3):
    try:
        return await list_provider_deployments(client)
    except httpx.HTTPStatusError as e:
        if e.response.status_code == 500 and "Empty result while" in e.response.json()["detail"]:
            await asyncio.sleep(2 * (attempt + 1))  # propagation race — back off and retry
            continue
        raise

Prevention

When it happens

Trigger: Provider API returns 200 with an empty body / empty result list for a list/deployment operation; adapter deserializes a response into an empty object; pagination edge returning zero items where one is mandatory.

Common situations: Remote deployment not yet propagated (read-after-write race on the provider), provider outage returning empty 200s, API version drift where the response shape changed to empty.

Related errors


AI-assisted analysis of langflow-ai/langflow@976ec789d2 (2026-08-14). Data as JSON: /api/errors/9e5f317f5b995fb4. Report an issue: GitHub.