invoke-ai/InvokeAI · error · ExternalProviderRequestError

Seedream response contained no images

Error message

Seedream response contained no images

What it means

Raised when a Seedream generation response contained a valid "data" list but produced no usable images and no per-item error objects were collected — i.e. the list was empty or its entries were silently skipped (non-dict items). It means the provider succeeded at the HTTP level but returned nothing usable.

Solutions

  1. Log the raw response body to see whether "data" was empty or held unexpected item shapes
  2. Retry the generation request — empty payloads are often transient provider-side issues
  3. Update the provider client if the Seedream API changed its item structure so items are no longer plain dicts
  4. Contact the provider / check status page if empty responses persist
Defensive patterns

Strategy: retry

Type guard

def has_images(data_items: object) -> bool:
    return isinstance(data_items, list) and any(isinstance(i, dict) for i in data_items)

Try / catch

for attempt in range(3):
    try:
        return provider.generate(request)
    except ExternalProviderRequestError as e:
        if "no images" in str(e) and attempt < 2:
            time.sleep(2 ** attempt)
            continue
        raise

Prevention

When it happens

Trigger: generate() called when the response "data" array is an empty list, or contains only non-dict entries that are skipped by the `isinstance(item, dict)` guard, with no item errors recorded.

Common situations: Provider intermittently returning empty payloads; unusual model versions that return empty data on soft failures; parsing assumptions broken by an API change that alters item structure (items no longer dicts).

Related errors


AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29). Data as JSON: /api/errors/1d15cc4fee5440f2. Report an issue: GitHub.

Appendix: source

Thrown at invokeai/app/services/external_generation/providers/seedream.py:146

                error_payload = item["error"]
                item_errors.append(
                    error_payload if isinstance(error_payload, dict) else {"message": str(error_payload)}
                )
                continue
            encoded = item.get("b64_json")
            if not encoded:
                continue
            image = decode_image_base64(encoded)
            generated_images.append(ExternalGeneratedImage(image=image, seed=request.seed))

        if not generated_images:
            if item_errors:
                first = item_errors[0]
                message = first.get("message") if isinstance(first, dict) else None
                raise ExternalProviderRequestError(
                    f"Seedream returned no images. Provider reported: {message or item_errors}"
                )
            raise ExternalProviderRequestError("Seedream response contained no images")

        provider_metadata: dict[str, object] = {"model": model_id}
        if item_errors:
            provider_metadata["partial_failures"] = item_errors
            self._logger.warning(
                "Seedream returned %d image(s) with %d partial failure(s): %s",
                len(generated_images),
                len(item_errors),
                item_errors,
            )

        return ExternalGenerationResult(
            images=generated_images,
            seed_used=request.seed,
            provider_metadata=provider_metadata,
        )

View on GitHub (pinned to 0b6a024f2f)