{"record":{"id":"4ce45188a4740c3c","repo":"sgl-project/sglang","slug":"the-quantization-config-must-be-a-subclass-of-qua","errorCode":null,"errorMessage":"The quantization config must be a subclass of `QuantizationConfig`.","messagePattern":"The quantization config must be a subclass of `QuantizationConfig`\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/layers/quantization/__init__.py","lineNumber":82,"sourceCode":"def register_quantization_config(quantization: str):\n    \"\"\"Register a customized vllm quantization config.\n\n    When a quantization method is not supported by vllm, you can register a customized\n    quantization config to support it.\n\n    Args:\n        quantization (str): The quantization method name.\n\n\n    \"\"\"  # noqa: E501\n\n    def _wrapper(quant_config_cls):\n        if quantization in QUANTIZATION_METHODS:\n            raise ValueError(\n                f\"The quantization method `{quantization}` is already exists.\"\n            )\n        if not issubclass(quant_config_cls, QuantizationConfig):\n            raise ValueError(\n                \"The quantization config must be a subclass of \" \"`QuantizationConfig`.\"\n            )\n        _CUSTOMIZED_METHOD_TO_QUANT_CONFIG[quantization] = quant_config_cls\n        QUANTIZATION_METHODS.append(quantization)\n        return quant_config_cls\n\n    return _wrapper\n\n\ndef get_quantization_config(quantization: str) -> type[QuantizationConfig]:\n    if quantization not in QUANTIZATION_METHODS:\n        raise ValueError(f\"Invalid quantization method: {quantization}\")\n\n    method_to_config: dict[str, type[QuantizationConfig]] = {}\n    # Update the `method_to_config` with customized quantization methods.\n    method_to_config.update(_CUSTOMIZED_METHOD_TO_QUANT_CONFIG)\n\n    return method_to_config[quantization]","sourceCodeStart":64,"sourceCodeEnd":100,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/layers/quantization/__init__.py#L64-L100","documentation":"The register_quantization decorator requires the decorated class to be a subclass of QuantizationConfig. Passing an arbitrary class fails this isinstance check because the framework needs the QuantizationConfig interface (get_config_filenames, from_config, etc.) to serve the method.","triggerScenarios":"Decorating a class that does not inherit from QuantizationConfig with @register_quantization(...), e.g. a plain dataclass or a subclass of a different config base.","commonSituations":"Writing a custom quant backend without reading the base-class contract; refactoring a config class so it accidentally loses its QuantizationConfig parent; multiple inheritance ordering issues.","solutions":["Make your class inherit from QuantizationConfig (directly or via an existing subclass)","Implement the required abstract methods such as from_config and get_config_filenames","If you meant to register an existing config type, decorate the actual QuantizationConfig subclass"],"exampleFix":"// before\n@register_quantization(\"my_quant\")\nclass MyConfig:  # not a QuantizationConfig\n    ...\n\n// after\nfrom sglang...quantization import QuantizationConfig\n\n@register_quantization(\"my_quant\")\nclass MyConfig(QuantizationConfig):\n    ...","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"def is_quant_config(cls: type) -> bool:\n    import inspect\n    from ...quantization import QuantizationConfig\n    return inspect.isclass(cls) and issubclass(cls, QuantizationConfig)","tryCatchPattern":null,"preventionTips":["Always subclass QuantizationConfig","Run issubclass check in tests for custom quant configs"],"tags":["quantization","type-validation","subclass","config"],"backgroundTag":"invalid-subclass-registration","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}