{"record":{"id":"9cc759c063700eb4","repo":"sgl-project/sglang","slug":"unsupported-sana-wm-cam-update-rule-self-cam-upd","errorCode":null,"errorMessage":"Unsupported SANA-WM cam_update_rule: {self.cam_update_rule}","messagePattern":"Unsupported SANA-WM cam_update_rule: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/models/dits/sana_wm_components.py","lineNumber":1891,"sourceCode":"        out_dim = heads * head_dim\n        assert (\n            out_dim == in_dim\n        ), f\"in_dim ({in_dim}) must equal heads*head_dim ({out_dim})\"\n        self.in_dim = in_dim\n        self.out_dim = out_dim\n        self.heads = heads\n        self.dim = head_dim\n        self.eps = eps\n        self.softmax_main = softmax_main\n        self.update_rule = update_rule\n        self.cam_update_rule = cam_update_rule\n        self.chunk_gdn_chunk_size = chunk_gdn_chunk_size\n        self.use_chunked_softmax_attention = use_chunked_softmax_attention\n        self.gdn_backend = gdn_backend\n        if self.update_rule not in (\"torch_chunk\", \"torch_recurrent\"):\n            raise ValueError(f\"Unsupported SANA-WM update_rule: {self.update_rule}\")\n        if self.cam_update_rule not in (\"torch_chunk\", \"torch_recurrent\"):\n            raise ValueError(\n                f\"Unsupported SANA-WM cam_update_rule: {self.cam_update_rule}\"\n            )\n        if self.gdn_backend not in (\"auto\", \"torch\", \"triton\"):\n            raise ValueError(\n                \"Unsupported SANA-WM gdn_backend: \"\n                f\"{self.gdn_backend}. Expected one of auto, torch, triton.\"\n            )\n\n        # Fused QKV + output proj (proj shared with cam branch).\n        self.qkv = nn.Linear(in_dim, 3 * out_dim, bias=False)\n        self.proj = nn.Linear(out_dim, out_dim, bias=True)\n\n        if qk_norm:\n            self.q_norm = _RMSNorm(in_dim, eps=1e-5)\n            self.k_norm = _RMSNorm(in_dim, eps=1e-5)\n            self.q_norm_cam = _RMSNorm(in_dim, eps=1e-5)\n            self.k_norm_cam = _RMSNorm(in_dim, eps=1e-5)\n        else:","sourceCodeStart":1873,"sourceCodeEnd":1909,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/models/dits/sana_wm_components.py#L1873-L1909","documentation":"The camera-branch GDN update rule (cam_update_rule) must be 'torch_chunk' or 'torch_recurrent'. This is validated separately from update_rule at block construction.","triggerScenarios":"Building the SANA-WM GDN block with cam_update_rule set to anything other than the two supported values (e.g. 'none', 'triton', 'recurrent').","commonSituations":"Config written for the main update_rule copied to cam_update_rule with a shortened name; disabling camera branch by setting cam_update_rule='none' (not supported).","solutions":["Set cam_update_rule to 'torch_chunk' or 'torch_recurrent'","To disable the camera branch, omit camera_conditions at forward time rather than hacking cam_update_rule","Validate config enums before model construction"],"exampleFix":"# before\nGDNBlock(dim, cam_update_rule=\"recurrent\")\n# after\nGDNBlock(dim, cam_update_rule=\"torch_recurrent\")","handlingStrategy":"validation","validationCode":"assert cam_update_rule in (\"torch_chunk\", \"torch_recurrent\"), cam_update_rule","typeGuard":"def valid_cam_update_rule(r: str) -> bool: return r in (\"torch_chunk\", \"torch_recurrent\")","tryCatchPattern":null,"preventionTips":["There is no 'none' option; disable camera by omitting camera_conditions"],"tags":["sana-wm","gdn","camera-branch","invalid-enum"],"backgroundTag":"invalid-argument-value","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}