{"record":{"id":"1bd558501bbd1b8a","repo":"sgl-project/sglang","slug":"sana-wm-stage-1-expects-exactly-one-gemma-2-text-e","errorCode":null,"errorMessage":"SANA-WM stage-1 expects exactly one Gemma-2 text encoder.","messagePattern":"SANA-WM stage-1 expects exactly one Gemma-2 text encoder\\.","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":691,"sourceCode":"            dim=0,\n        )\n        index[seq_dim] = select\n        return tensor[tuple(index)]\n\n    @staticmethod\n    def _seq_lens_from_masks(masks: list[torch.Tensor | None]) -> list[list[int]]:\n        seq_lens = []\n        for mask in masks:\n            if mask is None:\n                seq_lens.append([])\n            else:\n                seq_lens.append([int(x) for x in mask.long().sum(dim=-1).tolist()])\n        return seq_lens\n\n    @torch.no_grad()\n    def forward(self, batch: Req, server_args: ServerArgs) -> Req:\n        if len(self.text_encoders) != 1:\n            raise ValueError(\n                \"SANA-WM stage-1 expects exactly one Gemma-2 text encoder.\"\n            )\n        assert batch.prompt is not None\n\n        max_length = self._text_encoder_max_length(server_args)\n        chi_prompt = self._chi_prompt(server_args)\n        prompt_text = batch.prompt\n        if isinstance(prompt_text, str):\n            prompt_text = [prompt_text]\n        else:\n            prompt_text = list(prompt_text)\n\n        tokenizer = self.tokenizers[0]\n        if chi_prompt:\n            prompt_text = [chi_prompt + text for text in prompt_text]\n            max_length_all = len(tokenizer.encode(chi_prompt)) + max_length - 2\n        else:\n            max_length_all = max_length","sourceCodeStart":673,"sourceCodeEnd":709,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/sana_wm/base.py#L673-L709","documentation":"Raised by the stage-1 forward when self.text_encoders does not contain exactly one entry. SANA-WM's first stage is hardwired to a single Gemma-2 text encoder for prompt embedding.","triggerScenarios":"Configuring the pipeline with zero text encoders (missing/failed model load) or multiple text encoders, then running a request through the SANA-WM stage-1 forward.","commonSituations":"Model config lists multiple encoders (e.g. adding a second text tower) or the Gemma-2 encoder failed to register during init; misconfigured encoder list in server args.","solutions":["Ensure exactly one Gemma-2 text encoder is loaded/registered for the stage","Check encoder loading logs for silent failures leaving the list empty","Fix the model config to include only the Gemma-2 text encoder for stage 1"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"assert len(stage.text_encoders) == 1, f'got {len(stage.text_encoders)} text encoders'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Assert encoder count during pipeline init, not per request","Log which encoders registered at startup"],"tags":["model-config","text-encoder","sana-wm"],"backgroundTag":"model-configuration-mismatch","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}