{"record":{"id":"13839df5238b5eb8","repo":"sgl-project/sglang","slug":"no-backend-value-backend-registered-for-op-op","errorCode":null,"errorMessage":"No '{backend.value}' backend registered for op {op!r}","messagePattern":"No '(.+?)' backend registered for op (.+?)","errorType":"exception","errorClass":"KeyError","httpStatus":null,"severity":"error","filePath":"python/sglang/kernels/registry.py","lineNumber":56,"sourceCode":"                        f\"{other.target!r} != {spec.target!r}\"\n                    )\n                return spec\n        existing.append(spec)\n        return spec\n\n    def get(self, op: str) -> List[KernelSpec]:\n        \"\"\"All registered specs for ``op`` (empty list if none).\"\"\"\n        return list(self._by_op.get(op, ()))\n\n    def get_backend(self, op: str, backend: KernelBackend) -> KernelSpec:\n        \"\"\"The spec for ``op`` provided by ``backend``.\n\n        Raises ``KeyError`` if no such implementation is registered.\n        \"\"\"\n        for spec in self._by_op.get(op, ()):\n            if spec.backend == backend:\n                return spec\n        raise KeyError(f\"No '{backend.value}' backend registered for op {op!r}\")\n\n    def has(self, op: str) -> bool:\n        return bool(self._by_op.get(op))\n\n    def ops(self) -> List[str]:\n        \"\"\"Sorted list of all registered operator ids.\"\"\"\n        return sorted(self._by_op.keys())\n\n    def all_specs(self) -> List[KernelSpec]:\n        specs: List[KernelSpec] = []\n        for op in self.ops():\n            specs.extend(self._by_op[op])\n        return specs\n\n\n# Process-wide registry. Group packages register into this instance on import.\nregistry = KernelRegistry()\n","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/kernels/registry.py#L38-L74","documentation":"Registry.get_backend(op, backend) found no registered implementation for the requested op under the given backend, so collective/kernel dispatch cannot proceed.","triggerScenarios":"Requesting e.g. Backend.TRITON for an op that only registered a Backend.CUDA implementation, or dispatching an op whose registration module was never imported (lazy import missing).","commonSituations":"Custom/allreduce init paths (initialize_model_parallel, custom allreduce node checks) querying backends before the registering module is imported; adding a new op id but forgetting to register it for all queried backends.","solutions":["Ensure the module containing the registration is imported before get_backend (add to the package's registration entry point).","Register the op for the backend being requested, or fall back to another registered backend via registry.has/ops().","Check for typos in the op id string."],"exampleFix":"// before\nspec = registry.get_backend('my_op', Backend.CUDA)  # never registered\n// after\nfrom sglang.kernels.ops import my_op  # triggers registration\nspec = registry.get_backend('my_op', Backend.CUDA)","handlingStrategy":"fallback","validationCode":"if not registry.has(op):\n    import sglang.kernels.ops  # ensure registrations ran","typeGuard":null,"tryCatchPattern":"try:\n    spec = registry.get_backend(op, backend)\nexcept KeyError:\n    spec = registry.get_backend(op, fallback_backend)","preventionTips":["Import op registration modules eagerly from the package __init__.","Use registry.has(op) before dispatching; check op id spelling."],"tags":["kernel-registry","missing-registration"],"backgroundTag":"missing-backend-registration","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}