{"record":{"id":"52fbe9123fe37fb2","repo":"sgl-project/sglang","slug":"sana-wm-generator-list-length-must-match-latent-ba","errorCode":null,"errorMessage":"SANA-WM generator list length must match latent batch size; got {len(generator)} generators for batch {shape[0]}.","messagePattern":"SANA-WM generator list length must match latent batch size; got (.+?) generators for batch (.+?)\\.","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":1171,"sourceCode":"\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                    )\n                    for sample_generator in generator\n                ],\n                dim=0,\n            )\n        return randn_tensor(shape, generator=generator, device=device, dtype=dtype)\n","sourceCodeStart":1153,"sourceCodeEnd":1189,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/sana_wm/base.py#L1153-L1189","documentation":"Raised by _prepare_noise_latents when a list of generators has length > 1 but != latent batch size shape[0]. Per-sample reproducible noise requires one generator per sample.","triggerScenarios":"Passing e.g. 3 generators for a latent tensor with batch 4 (or 2 for batch 1, which is not the single-generator shortcut).","commonSituations":"Request batch size changed after generators were built; seeds list filtered/deduplicated; off-by-one when slicing a generator list.","solutions":["Build exactly one generator per sample: len(generators) == batch_size","Or pass a single generator to share across the whole batch","Derive generators from the same source that determined shape[0]"],"exampleFix":"# before\ngens = gens[:3]  # batch is 4\n# after\ngens = [g for _, g in zip(range(batch), gens)]  # match batch size","handlingStrategy":"validation","validationCode":"assert not isinstance(generator, (list, tuple)) or len(generator) in (1, shape[0])","typeGuard":"def generators_match(g, batch: int) -> bool:\n    return not isinstance(g, (list, tuple)) or len(g) in (1, batch)","tryCatchPattern":null,"preventionTips":["Derive generator count from the same batch size used to build latents","Prefer a single generator unless per-sample reproducibility is required"],"tags":["generator","batch-size","noise","sana-wm"],"backgroundTag":"length-mismatch","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}