{"record":{"id":"be88a9202fdd0278","repo":"sgl-project/sglang","slug":"enable-linear-replayssm-requires-mamba-radix-c","errorCode":null,"errorMessage":"--enable-linear-replayssm requires --mamba-radix-cache-strategy no_buffer (the default); the extra_buffer ping-pong donation path is not yet supported (follow-up). Got --mamba-radix-cache-strategy={cfg.mamba_radix_cache_strategy!r}.","messagePattern":"--enable-linear-replayssm requires --mamba-radix-cache-strategy no_buffer \\(the default\\); the extra_buffer ping-pong donation path is not yet supported \\(follow-up\\)\\. Got --mamba-radix-cache-strategy=(.+?)\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/server_args.py","lineNumber":6945,"sourceCode":"        # Slice 2b only wires the no_buffer mamba scheduler strategy (the\n        # default). The extra_buffer strategy donates the track snapshot via\n        # `donate_mamba_ping_pong_slot` with a separate ping-pong slot swap that\n        # does NOT route through MambaPool.copy_from, so the ReplaySSM ring\n        # cursor of the donated/kept slot would not be reset there. Handling\n        # that donation path is a follow-up; for now require no_buffer.\n        if cfg.enable_linear_replayssm:\n            if decode not in {\"triton\", \"helion\"}:\n                raise ValueError(\n                    \"--enable-linear-replayssm requires Triton, or Helion for \"\n                    \"KDA, as the linear-attn decode backend; got \"\n                    f\"--linear-attn-decode-backend={decode!r}.\"\n                )\n            from sglang.srt.arg_groups.overrides import (\n                mamba_extra_buffer_of,\n            )\n\n            if mamba_extra_buffer_of(resolved_view(self)):\n                raise ValueError(\n                    \"--enable-linear-replayssm requires --mamba-radix-cache-strategy \"\n                    \"no_buffer (the default); the extra_buffer ping-pong \"\n                    \"donation path is not yet supported (follow-up). Got \"\n                    f\"--mamba-radix-cache-strategy={cfg.mamba_radix_cache_strategy!r}.\"\n                )\n            if cfg.disaggregation_mode != \"null\":\n                # The disaggregated decode pool (HybridMambaDecodeReqToTokenPool)\n                # is not wired for the ReplaySSM ring, so the flag would silently\n                # no-op there; disagg also runs a different cache/coordination\n                # flow that is not yet validated for ReplaySSM (follow-up).\n                raise ValueError(\n                    \"--enable-linear-replayssm is not supported under PD \"\n                    \"disaggregation yet (follow-up). Got \"\n                    f\"--disaggregation-mode={cfg.disaggregation_mode!r}.\"\n                )\n            if cfg.linear_replayssm_cache_len < 1:\n                raise ValueError(\n                    \"--linear-replayssm-cache-len must be >= 1, got \"","sourceCodeStart":6927,"sourceCodeEnd":6963,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/server_args.py#L6927-L6963","documentation":"ReplaySSM requires --mamba-radix-cache-strategy no_buffer (the default). The extra_buffer ping-pong slot donation path does not route slot resets through MambaPool.copy_from, so the ReplaySSM ring cursor of donated slots would not be reset — hence it is rejected until that path is implemented.","triggerScenarios":"--enable-linear-replayssm with a mamba radix cache strategy that implies an extra buffer (mamba_extra_buffer_of(...) is true, e.g. strategy set to a buffered/donating mode).","commonSituations":"Users enabling mamba radix-cache buffer strategies for cache reuse on hybrid GDN/KDA models and also turning on ReplaySSM; carrying over tuned hybrid-cache flags from non-ReplaySSM runs.","solutions":["Set --mamba-radix-cache-strategy no_buffer (or remove the override to use the default)","Or disable --enable-linear-replayssm until the donation path is supported (follow-up work)"],"exampleFix":"# before\n--enable-linear-replayssm --mamba-radix-cache-strategy extra_buffer\n# after\n--enable-linear-replayssm --mamba-radix-cache-strategy no_buffer","handlingStrategy":"validation","validationCode":"def validate(strategy, enable_replayssm):\n    return not enable_replayssm or strategy == \"no_buffer\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Don't carry hybrid-cache tuning flags into ReplaySSM runs","Track which flags imply extra buffers before combining with replay features"],"tags":["sglang","replayssm","mamba-radix-cache","config-conflict"],"backgroundTag":"unsupported-feature-combination","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}