{"record":{"id":"1beab887e8ea4921","repo":"sgl-project/sglang","slug":"deepstack-visual-indexes-exists-but-deepstack-merg-1beab8","errorCode":null,"errorMessage":"deepstack_visual_indexes exists but deepstack_merger_list is missing.","messagePattern":"deepstack_visual_indexes exists but deepstack_merger_list is missing\\.","errorType":"error_code","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/multimodal/vit_cuda_graph_runner.py","lineNumber":244,"sourceCode":"                            rotary_pos_emb_sin=rotary_pos_emb_sin,\n                            output_ws=self.block_ws[graph_key],\n                        )\n                    else:\n                        y = blk(\n                            y,\n                            cu_seqlens=cu_seq_len_ws,\n                            rotary_pos_emb_cos=rotary_pos_emb_cos,\n                            rotary_pos_emb_sin=rotary_pos_emb_sin,\n                            output_ws=self.block_ws[graph_key],\n                        )\n\n                # Optional deepstack support (Qwen3-VL)\n                if (\n                    self._deepstack_visual_indexes\n                    and layer_num in self._deepstack_visual_indexes\n                ):\n                    if self._deepstack_merger_list is None:\n                        raise RuntimeError(\n                            \"deepstack_visual_indexes exists but deepstack_merger_list is missing.\"\n                        )\n                    deepstack_out = self._deepstack_merger_list[deepstack_capture_idx](\n                        y\n                    )\n                    deepstack_outs.append(deepstack_out)\n                    deepstack_capture_idx += 1\n\n            main_out = vit.merger(y)\n\n            if deepstack_outs:\n                self.block_output[graph_key] = torch.cat(\n                    [main_out] + deepstack_outs, dim=1\n                )\n            else:\n                self.block_output[graph_key] = main_out\n\n        self.block_graphs[graph_key] = graph","sourceCodeStart":226,"sourceCodeEnd":262,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/multimodal/vit_cuda_graph_runner.py#L226-L262","documentation":"For models with deepstack (Qwen3-VL style), the runner was given per-layer deepstack_visual_indexes but no corresponding deepstack_merger_list modules, so it cannot compute deepstack outputs during graph capture. This indicates inconsistent construction arguments.","triggerScenarios":"Instantiating the ViT cuda-graph runner with deepstack_visual_indexes non-empty while passing deepstack_merger_list=None (or forgetting to pass it).","commonSituations":"Adding deepstack support piecemeal; a model adapter supplying visual indexes but its merger modules failing to load; refactors that renamed the merger-list kwarg so it silently defaults to None.","solutions":["Pass the full merger module list (deepstack_merger_list=[...]) matching the deepstack layers","If deepstack is not intended, clear deepstack_visual_indexes so the branch is skipped","Verify the model adapter wires both parameters from the same config source"],"exampleFix":"# before\nrunner = VitCudaGraphRunner(..., deepstack_visual_indexes=idx, deepstack_merger_list=None)\n# after\nrunner = VitCudaGraphRunner(..., deepstack_visual_indexes=idx, deepstack_merger_list=mergers)","handlingStrategy":"validation","validationCode":"if deepstack_visual_indexes:\n    assert deepstack_merger_list is not None, 'deepstack_merger_list required'","typeGuard":"def deepstack_args_consistent(indexes, mergers) -> bool:\n    return not indexes or mergers is not None","tryCatchPattern":null,"preventionTips":["Derive deepstack_visual_indexes and deepstack_merger_list from the same model config object","Add a constructor-level invariant test for runner args"],"tags":["multimodal","vit","deepstack","cuda-graph","config-mismatch"],"backgroundTag":"missing-required-parameter","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}