{"record":{"id":"6a472e8dda39a2c0","repo":"sgl-project/sglang","slug":"unknown-speculative-algorithm-name-name","errorCode":null,"errorMessage":"Unknown speculative algorithm name: {name}","messagePattern":"Unknown speculative algorithm name: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/speculative/spec_info.py","lineNumber":61,"sourceCode":"    STANDALONE = auto()\n    NGRAM = auto()\n    NONE = auto()\n\n    @classmethod\n    def from_string(\n        cls, name: Optional[str]\n    ) -> Union[SpeculativeAlgorithm, CustomSpecAlgo]:\n        if name is None:\n            return cls.NONE\n        upper = name.upper()\n        try:\n            return cls[upper]\n        except KeyError:\n            pass\n        spec = _get_registered_spec(upper)\n        if spec is not None:\n            return spec\n        raise ValueError(f\"Unknown speculative algorithm name: {name}\")\n\n    @classmethod\n    def register(\n        cls,\n        name: str,\n        *,\n        supports_overlap: bool = False,\n        validate_server_args: Optional[ServerArgsValidator] = None,\n        spec_class: Type[CustomSpecAlgo] = CustomSpecAlgo,\n    ) -> Callable[[WorkerFactory], WorkerFactory]:\n        \"\"\"Decorator to register a plugin speculative algorithm. The factory\n        takes ``server_args`` and returns the worker class. Pass a\n        ``CustomSpecAlgo`` subclass via ``spec_class`` to override any\n        ``is_*()`` / ``create_worker`` method.\n\n        Example:\n            @SpeculativeAlgorithm.register(\"MY_SPEC\", supports_overlap=False)\n            def _factory(server_args):","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/speculative/spec_info.py#L43-L79","documentation":"SpeculativeAlgorithm.from_string maps a --speculative-algorithm CLI string to an enum/registered algorithm. If the name matches neither a built-in enum member (uppercased) nor a plugin-registered algorithm, it raises ValueError.","triggerScenarios":"Passing a typo'd or unsupported algorithm name to --speculative-algorithm, e.g. 'ealg' instead of 'EAGLE', or a plugin name whose registering module was never imported.","commonSituations":"Typos in server args, outdated algorithm names after renames, or missing plugin entry point / missing import of the module calling register_algorithm.","solutions":["Check spelling against the SpeculativeAlgorithm enum members and registered plugin names","If a plugin algorithm, ensure its module is imported (entry point 'sglang.platform_plugins' or explicit import) before from_string runs","List valid names: [m.name for m in SpeculativeAlgorithm] plus registry keys"],"exampleFix":"// before\n--speculative-algorithm EAGLE3X  # typo\n// after\n--speculative-algorithm EAGLE3","handlingStrategy":"validation","validationCode":"from sglang.srt.speculative.spec_info import SpeculativeAlgorithm\nname = 'EAGLE3'\nvalid = {m.name for m in SpeculativeAlgorithm}\nassert name in valid, f'{name} not in {sorted(valid)}'","typeGuard":"def is_known_algorithm(name: str) -> bool:\n    upper = name.upper()\n    try:\n        SpeculativeAlgorithm[upper]\n        return True\n    except KeyError:\n        return _get_registered_spec(upper) is not None","tryCatchPattern":"try:\n    algo = SpeculativeAlgorithm.from_string(name)\nexcept ValueError as e:\n    raise SystemExit(f'Bad --speculative-algorithm: {e}') from e","preventionTips":["Validate the algorithm name at config-parse time, fail fast before model load","Import plugin modules that register algorithms before parsing args"],"tags":["speculative-decoding","configuration","enum-lookup"],"backgroundTag":"invalid-enum-value","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}