{"record":{"id":"a08613827fe1318a","repo":"sgl-project/sglang","slug":"sana-wm-generator-list-must-not-be-empty","errorCode":null,"errorMessage":"SANA-WM generator list must not be empty.","messagePattern":"SANA-WM generator list must not be empty\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/sana_wm/base.py","lineNumber":1165,"sourceCode":"        if isinstance(encoded, torch.Tensor):\n            return encoded\n        raise TypeError(\n            \"Unsupported VAE encode output for SANA-WM first-frame conditioning: \"\n            f\"{type(encoded).__name__}\"\n        )\n\n    def _prepare_noise_latents(\n        self,\n        shape: tuple,\n        dtype: torch.dtype,\n        device: torch.device,\n        generator: (\n            torch.Generator | list[torch.Generator] | tuple[torch.Generator, ...]\n        ),\n    ) -> torch.Tensor:\n        if isinstance(generator, (list, tuple)):\n            if not generator:\n                raise ValueError(\"SANA-WM generator list must not be empty.\")\n            if len(generator) == 1:\n                return randn_tensor(\n                    shape, generator=generator[0], device=device, dtype=dtype\n                )\n            if len(generator) != shape[0]:\n                raise ValueError(\n                    \"SANA-WM generator list length must match latent batch size; \"\n                    f\"got {len(generator)} generators for batch {shape[0]}.\"\n                )\n            sample_shape = (1, *shape[1:])\n            return torch.cat(\n                [\n                    randn_tensor(\n                        sample_shape,\n                        generator=sample_generator,\n                        device=device,\n                        dtype=dtype,\n                    )","sourceCodeStart":1147,"sourceCodeEnd":1183,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/sana_wm/base.py#L1147-L1183","documentation":"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.","triggerScenarios":"Passing generator=[] (e.g. an empty per-batch generator list built from an empty request list) into the latent-init path.","commonSituations":"Building generators as [g for _ in requests] when requests is empty; upstream filtering removed all generators before the call.","solutions":["Pass None to use the default generator instead of an empty list","Or pass a single generator, which is applied to the whole batch","Guard: generators or None"],"exampleFix":"# before\ngens = [make_gen(s) for s in seeds if s is not None]  # may be []\n# after\ngens = [make_gen(s) for s in seeds if s is not None] or None","handlingStrategy":"validation","validationCode":"generator = generator if (generator is None or len(generator) > 0) else None","typeGuard":"def generator_ok(g) -> bool:\n    return g is None or not isinstance(g, (list, tuple)) or len(g) >= 1","tryCatchPattern":null,"preventionTips":["Coerce empty generator lists to None at the boundary","Never build generator lists from possibly-empty seed sources"],"tags":["generator","noise","validation","sana-wm"],"backgroundTag":"empty-collection-argument","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}