{"record":{"id":"0e8e36cd6ba18bde","repo":"sgl-project/sglang","slug":"subclasses-of-basedit-must-define-attr-class-v","errorCode":null,"errorMessage":"Subclasses of BaseDiT must define '{attr}' class variable","messagePattern":"Subclasses of BaseDiT must define '(.+?)' class variable","errorType":"validation","errorClass":"AttributeError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/models/dits/base.py","lineNumber":65,"sourceCode":"        AttentionBackendEnum.VIDEO_SPARSE_ATTN,\n        AttentionBackendEnum.SPARSE_VIDEO_GEN_2_ATTN,\n        AttentionBackendEnum.VMOBA_ATTN,\n        AttentionBackendEnum.SAGE_ATTN_3,\n        AttentionBackendEnum.LASER_ATTN,\n        AttentionBackendEnum.BLOCK_SPARSE_ATTN,\n        AttentionBackendEnum.RAIN_FUSION_ATTN,\n    }\n\n    def __init_subclass__(cls) -> None:\n        required_class_attrs = [\n            \"_fsdp_shard_conditions\",\n            \"param_names_mapping\",\n            \"_compile_conditions\",\n        ]\n        super().__init_subclass__()\n        for attr in required_class_attrs:\n            if not hasattr(cls, attr):\n                raise AttributeError(\n                    f\"Subclasses of BaseDiT must define '{attr}' class variable\"\n                )\n\n    def __init__(self, config: DiTConfig, hf_config: dict[str, Any], **kwargs) -> None:\n        super().__init__()\n        # `config.arch_config` contains static model metadata. Runtime\n        # capabilities remain class attributes on the model implementation.\n        self.config: DiTArchConfig = config.arch_config\n        self.prefix = config.prefix\n        self.hf_config = hf_config\n        if not self.supported_attention_backends:\n            raise ValueError(\n                f\"Subclass {self.__class__.__name__} must define _supported_attention_backends\"\n            )\n\n    @abstractmethod\n    def forward(\n        self,","sourceCodeStart":47,"sourceCodeEnd":83,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/models/dits/base.py#L47-L83","documentation":"BaseDiT uses __init_subclass__ to enforce that every DiT model implementation declares a set of required class-level attributes (e.g. param_names_mapping, _compile_conditions). Defining a subclass without these attributes raises AttributeError at class-definition time, i.e. at import of the module containing the subclass, not at instantiation.","triggerScenarios":"Creating any class that inherits from BaseDiT without defining all names in required_class_attrs (e.g. missing param_names_mapping or _compile_conditions). The error fires the moment the subclass statement is executed (import time).","commonSituations":"Adding a new DiT model to sglang's multimodal_gen runtime and forgetting boilerplate class attributes; copying an older model implementation that predates a newly-added required attribute after a version upgrade.","solutions":["Add the missing attribute(s) named in the message as class variables on your BaseDiT subclass, e.g. param_names_mapping = (...) and _compile_conditions = ...","Copy the full attribute set from an existing model implementation (e.g. cosmos3video.py or another dits/ model) and adapt values","Check base.py's required_class_attrs list to see the complete set of required names"],"exampleFix":"// before\nclass MyDiT(BaseDiT):\n    ...\n// after\nclass MyDiT(BaseDiT):\n    param_names_mapping = {...}\n    _compile_conditions = ...\n    ...","handlingStrategy":"validation","validationCode":"from sglang.multimodal_gen.runtime.models.dits.base import BaseDiT\nREQUIRED = [\"param_names_mapping\", \"_compile_conditions\"]\ndef check_dit_subclass(cls):\n    missing = [a for a in REQUIRED if not hasattr(cls, a)]\n    assert not missing, f\"missing class attrs: {missing}\"\n    return True","typeGuard":"def is_valid_dit_subclass(cls) -> bool:\n    return isinstance(cls, type) and issubclass(cls, BaseDiT) and all(\n        hasattr(cls, a) for a in (\"param_names_mapping\", \"_compile_conditions\")\n    )","tryCatchPattern":null,"preventionTips":["Copy a known-good model file as the template when adding a new DiT","Add a registration-time unit test that imports every model module so subclass contract errors surface in CI"],"tags":["sglang","dit","subclass-contract","class-attribute","import-time"],"backgroundTag":"missing-required-attribute","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}