{"record":{"id":"d4350d45d8b56bf4","repo":"sgl-project/sglang","slug":"invalid-attention-metadata-values-sparsity-should-d4350d","errorCode":null,"errorMessage":"Invalid attention metadata values.Sparsity should be in [0, 1), skip_first_steps should be non-negative.Got sparsity={sparsity}, skip_first_steps={skip_first_steps}","messagePattern":"Invalid attention metadata values\\.Sparsity should be in \\[0, 1\\), skip_first_steps should be non-negative\\.Got sparsity=(.+?), skip_first_steps=(.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/layers/attention/backends/rain_fusion_attn.py","lineNumber":74,"sourceCode":"\nclass RainFusionAttentionMetadataBuilder(AttentionMetadataBuilder):\n    def __init__(self) -> None:\n        pass\n\n    def prepare(self) -> None:\n        pass\n\n    def build(\n        self,\n        current_timestep: int,\n        skip_first_steps: int,\n        sparsity: float,\n        raw_latent_shape: list[int],\n        patch_size: tuple[int, int, int],\n        **kwargs: dict[str, Any],\n    ) -> RainFusionAttentionMetadata:\n        if not (skip_first_steps >= 0 and 0.0 <= sparsity < 1.0):\n            raise ValueError(\n                (\n                    \"Invalid attention metadata values.\"\n                    f\"Sparsity should be in [0, 1), skip_first_steps should be non-negative.\"\n                    f\"Got sparsity={sparsity}, skip_first_steps={skip_first_steps}\"\n                )\n            )\n\n        if sparsity == 0.0:\n            logger.warning(\n                (\n                    \"Sparsity is set to 0.0, which means no tokens will be dropped.\"\n                    \"For better performance use Laser Attention or increase sparsity.\"\n                )\n            )\n\n        latent_shape = raw_latent_shape[-3:]\n        latent_shape = [latent_shape[i] // patch_size[i] for i in range(3)]\n","sourceCodeStart":56,"sourceCodeEnd":92,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/layers/attention/backends/rain_fusion_attn.py#L56-L92","documentation":"RainFusionAttentionMetadata.build validates that sparsity is in [0, 1) and skip_first_steps is non-negative before constructing metadata; bad values would produce an invalid sparse attention pattern, so it fails immediately.","triggerScenarios":"Calling RainFusionAttentionMetadata.build with sparsity >= 1.0, negative sparsity, or negative skip_first_steps.","commonSituations":"RainFusion (video/diffusion sparse attention) configs specifying density where sparsity is expected; negative skip_first_steps meant as 'no skip'; hand-tuned YAML with typos.","solutions":["Correct the values: 0.0 <= sparsity < 1.0 and skip_first_steps >= 0","Convert density to sparsity with sparsity = 1 - density if the config uses density","Validate both values at config-parse time before build() is called"],"exampleFix":"# before\nmeta = RainFusionAttentionMetadata.build(sparsity=1.2, skip_first_steps=0, ...)\n# after\nmeta = RainFusionAttentionMetadata.build(sparsity=0.2, skip_first_steps=0, ...)","handlingStrategy":"validation","validationCode":"assert 0.0 <= sparsity < 1.0 and skip_first_steps >= 0, \"invalid RainFusion sparsity args\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate sparse-attn config ranges where YAML is parsed","Convert density to sparsity explicitly"],"tags":["rain-fusion","sparse-attention","metadata","validation","value-out-of-range"],"backgroundTag":"argument-out-of-range","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}