{"record":{"id":"9ff606cd71bf7649","repo":"sgl-project/sglang","slug":"unsupported-topk-mode-topk-mode","errorCode":null,"errorMessage":"Unsupported topk_mode {topk_mode}","messagePattern":"Unsupported topk_mode (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/models/vaes/hunyuan3d_vae.py","lineNumber":806,"sourceCode":"                batch_queries = repeat(queries, \"p c -> b p c\", b=batch_size)\n                logits = geo_decoder(\n                    queries=batch_queries.to(latents.dtype), latents=latents\n                )\n                batch_logits.append(logits)\n            grid_logits = torch.cat(batch_logits, dim=1)\n            next_logits[nidx] = grid_logits[0, ..., 0]\n            grid_logits = next_logits.unsqueeze(0)\n        grid_logits[grid_logits == -10000.0] = float(\"nan\")\n\n        return grid_logits\n\n\nclass FlashVDMVolumeDecoding:\n    \"\"\"Flash VDM volume decoder with adaptive KV selection.\"\"\"\n\n    def __init__(self, topk_mode=\"mean\"):\n        if topk_mode not in [\"mean\", \"merge\"]:\n            raise ValueError(f\"Unsupported topk_mode {topk_mode}\")\n\n        if topk_mode == \"mean\":\n            self.processor = FlashVDMCrossAttentionProcessor()\n        else:\n            self.processor = FlashVDMTopMCrossAttentionProcessor()\n\n    @torch.no_grad()\n    def __call__(\n        self,\n        latents: torch.FloatTensor,\n        geo_decoder: CrossAttentionDecoder,\n        bounds: Union[Tuple[float], List[float], float] = 1.01,\n        num_chunks: int = 10000,\n        mc_level: float = 0.0,\n        octree_resolution: int = None,\n        min_resolution: int = 63,\n        mini_grid_num: int = 4,\n        enable_pbar: bool = True,","sourceCodeStart":788,"sourceCodeEnd":824,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/models/vaes/hunyuan3d_vae.py#L788-L824","documentation":"FlashVDMVolumeDecoding selects a cross-attention processor strategy based on topk_mode: 'mean' uses the standard FlashVDM processor, anything other than 'mean'/'merge' has no implementation, so __init__ rejects it.","triggerScenarios":"Constructing FlashVDMVolumeDecoding(topk_mode='max'), 'topk', 'sum', or any string other than 'mean'/'merge'; commonly from a config key typed incorrectly or from a newer spec introducing an unimplemented mode.","commonSituations":"YAML/config typo (e.g. 'mean '** with trailing space, or wrong case 'Mean'); porting settings from another FlashVDM implementation that supports more modes; version lag where the mode exists upstream but not here.","solutions":["Use topk_mode='mean' (FlashVDMCrossAttentionProcessor) or 'merge' (FlashVDMTopMCrossAttentionProcessor)","Strip/normalize the config string (whitespace, casing) before passing it","Upgrade if you need an additional mode added in a newer version"],"exampleFix":"# before\ndec = FlashVDMVolumeDecoding(topk_mode=\"max\")\n# after\ndec = FlashVDMVolumeDecoding(topk_mode=\"mean\")","handlingStrategy":"validation","validationCode":"mode = str(topk_mode).strip().lower()\nif mode not in (\"mean\", \"merge\"):\n    mode = \"mean\"\ndec = FlashVDMVolumeDecoding(topk_mode=mode)","typeGuard":"def is_valid_topk_mode(m: str) -> bool:\n    return str(m).strip().lower() in (\"mean\", \"merge\")","tryCatchPattern":null,"preventionTips":["Normalize config strings (strip/lower) before passing enum-like values","Keep an enum literal in your config layer instead of free-form strings"],"tags":["flashvdm","topk","hunyuan3d","config","value-error"],"backgroundTag":"unsupported-config-value","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}