{"record":{"id":"867ebc0f394a4401","repo":"sgl-project/sglang","slug":"no-kernels-registered-for-op-op-r","errorCode":null,"errorMessage":"No kernels registered for op {op!r}","messagePattern":"No kernels registered for op (.+?)","errorType":"exception","errorClass":"KeyError","httpStatus":null,"severity":"error","filePath":"python/sglang/kernels/selector.py","lineNumber":59,"sourceCode":"    Parameters\n    ----------\n    op:\n        Operator id, ``\"<group>.<name>\"``.\n    backend:\n        Required only when ``op`` has more than one backend *usable on the\n        current device*; selects which one. Otherwise optional.\n\n    Raises\n    ------\n    KeyError\n        If ``op`` is unknown, or if ``backend`` is requested but not registered.\n    ValueError\n        If ``op`` has multiple device-eligible backends and ``backend`` is not\n        given, or if none are eligible on this platform.\n    \"\"\"\n    specs = registry.get(op)\n    if not specs:\n        raise KeyError(f\"No kernels registered for op {op!r}\")\n\n    if backend is not None:\n        for spec in specs:\n            if spec.backend == backend:\n                return spec\n        raise KeyError(f\"No '{backend.value}' backend registered for op {op!r}\")\n\n    if len(specs) == 1:\n        return specs[0]\n\n    # Multiple backends: hard-filter by device eligibility.\n    platform = _platform()\n    eligible = [s for s in specs if s.is_available(platform)]\n    if len(eligible) == 1:\n        return eligible[0]\n    if not eligible:\n        raise ValueError(\n            f\"op {op!r} has no backend usable on device {platform.device.value!r} \"","sourceCodeStart":41,"sourceCodeEnd":77,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/kernels/selector.py#L41-L77","documentation":"Raised by sglang's kernel registry (select_kernel) when the requested operation name has no KernelSpec entries registered at all. The registry is a dict keyed by op name; a lookup for an unregistered or misspelled op returns nothing and this KeyError fires. It is a programmer/API-usage error, not an environment error.","triggerScenarios":"Calling select_kernel(op) or the internal _resolve() with an op string that was never registered via the kernels registry — e.g. a typo ('moe_align' vs 'moe_aliged_sorted_ids'), or a newly-introduced op whose registration decorator/entry was never executed (module not imported).","commonSituations":"Using an op name from a newer/older sglang version where the op doesn't exist yet; forgetting to import the module that registers the kernel; unit tests (test_unknown_op_or_backend_raises) exercise this path deliberately.","solutions":["Check the exact spelling of the op constant against the registry keys (inspect via the kernels registry API or grep for the registration).","Ensure the module containing the kernel's @register decorator is imported before select_kernel is called.","If the op genuinely does not exist in your sglang version, upgrade/downgrade to a version that registers it, or register your own KernelSpec."],"exampleFix":"// before\nspec = select_kernel(\"fused_moe6\")  # typo\n\n// after\nfrom sglang.kernels.registry import registry\nprint(list(registry.keys()))  # find the correct op name\nspec = select_kernel(correct_op_name)","handlingStrategy":"validation","validationCode":"from sglang.kernels.selector import select_kernel\nfrom sglang.kernels.registry import registry\n\ndef op_registered(op) -> bool:\n    return op in registry and len(registry[op]) > 0","typeGuard":null,"tryCatchPattern":"try:\n    spec = select_kernel(op)\nexcept KeyError as e:\n    raise ValueError(f\"Unsupported kernel op; registered: {sorted(registry)}\") from e","preventionTips":["Derive op names from the registry's own keys/constants rather than string literals.","Import kernel registration modules before resolving ops.","Add a startup assertion listing required ops and fail early."],"tags":["kernels","registry","invalid-argument","sglang"],"backgroundTag":"unknown-op-or-key-not-registered","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}