sgl-project/sglang · error · ValueError

SANA-WM generator list must not be empty.

Error message

SANA-WM generator list must not be empty.

What it means

Raised by _prepare_noise_latents when the generator argument is a list/tuple of length 0 — per-sample noise generators were requested but none supplied.

Source

Thrown at python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/sana_wm/base.py:1165

        if isinstance(encoded, torch.Tensor):
            return encoded
        raise TypeError(
            "Unsupported VAE encode output for SANA-WM first-frame conditioning: "
            f"{type(encoded).__name__}"
        )

    def _prepare_noise_latents(
        self,
        shape: tuple,
        dtype: torch.dtype,
        device: torch.device,
        generator: (
            torch.Generator | list[torch.Generator] | tuple[torch.Generator, ...]
        ),
    ) -> torch.Tensor:
        if isinstance(generator, (list, tuple)):
            if not generator:
                raise ValueError("SANA-WM generator list must not be empty.")
            if len(generator) == 1:
                return randn_tensor(
                    shape, generator=generator[0], device=device, dtype=dtype
                )
            if len(generator) != shape[0]:
                raise ValueError(
                    "SANA-WM generator list length must match latent batch size; "
                    f"got {len(generator)} generators for batch {shape[0]}."
                )
            sample_shape = (1, *shape[1:])
            return torch.cat(
                [
                    randn_tensor(
                        sample_shape,
                        generator=sample_generator,
                        device=device,
                        dtype=dtype,
                    )

View on GitHub (pinned to 0132848349)

Solutions

  1. Pass None to use the default generator instead of an empty list
  2. Or pass a single generator, which is applied to the whole batch
  3. Guard: generators or None

Example fix

# before
gens = [make_gen(s) for s in seeds if s is not None]  # may be []
# after
gens = [make_gen(s) for s in seeds if s is not None] or None
Defensive patterns

Strategy: validation

Validate before calling

generator = generator if (generator is None or len(generator) > 0) else None

Type guard

def generator_ok(g) -> bool:
    return g is None or not isinstance(g, (list, tuple)) or len(g) >= 1

Prevention

When it happens

Trigger: Passing generator=[] (e.g. an empty per-batch generator list built from an empty request list) into the latent-init path.

Common situations: Building generators as [g for _ in requests] when requests is empty; upstream filtering removed all generators before the call.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/a08613827fe1318a. Report an issue: GitHub.