{"record":{"id":"978ae3901c65462e","repo":"sgl-project/sglang","slug":"expected-basictransformerblock-got-type-transfor","errorCode":null,"errorMessage":"Expected BasicTransformerBlock, got {type(transformer).__name__}.","messagePattern":"Expected BasicTransformerBlock, got (.+?)\\.","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/models/dits/hunyuan3d_paint.py","lineNumber":168,"sourceCode":"            encoder_hidden_states=encoder_hidden_states,\n            attention_mask=encoder_attention_mask,\n        )\n        return hidden_states + self.transformer.ff(\n            self.transformer.norm3(hidden_states)\n        )\n\n\ndef _replace_transformer_blocks(\n    unet: StableDiffusionUNet2DConditionModel,\n    *,\n    use_multiview_attention: bool,\n    use_reference_attention: bool,\n    is_turbo: bool,\n) -> None:\n    def replace(model: Transformer2DModel, layer_name: str) -> None:\n        transformer = model.transformer_blocks[0]\n        if not isinstance(transformer, BasicTransformerBlock):\n            raise TypeError(\n                f\"Expected BasicTransformerBlock, got {type(transformer).__name__}.\"\n            )\n        model.transformer_blocks[0] = Hunyuan3DPaintTransformerBlock(\n            transformer,\n            layer_name,\n            use_multiview_attention=use_multiview_attention,\n            use_reference_attention=use_reference_attention,\n            is_turbo=is_turbo,\n        )\n\n    for block_index, block in enumerate(unet.down_blocks):\n        if not isinstance(block, CrossAttnDownBlock2D):\n            continue\n        for attention_index, attention in enumerate(block.attentions):\n            replace(attention, f\"down_{block_index}_{attention_index}_0\")\n\n    mid_block = unet.mid_block\n    if not isinstance(mid_block, UNetMidBlock2DCrossAttn):","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/models/dits/hunyuan3d_paint.py#L150-L186","documentation":"During _replace_transformer_blocks, the replace() helper expects the first transformer block of each attention module to be a diffusers BasicTransformerBlock so it can wrap it into a Hunyuan3DPaintTransformerBlock. If the checkpoint/module already uses a different block type, a TypeError is raised.","triggerScenarios":"Calling _replace_transformer_blocks on a UNet whose attentions' transformer_blocks[0] is not BasicTransformerBlock — e.g. a custom/different diffusers version's block class, an already-replaced block, or a non-SD2 UNet.","commonSituations":"diffusers version drift changing the block class; running the replacement twice on the same UNet; using a UNet architecture other than the expected Stable Diffusion 2.x one.","solutions":["Use the diffusers version this code was developed against (check the repo's requirements/pin)","Make sure you call _replace_transformer_blocks only once per UNet","Verify you are loading the expected SD2.x UNet architecture, not a custom variant"],"exampleFix":"# before\n_replace_transformer_blocks(custom_unet, ...)  # custom blocks\n\n# after\nunet = UNet2DConditionModel.from_pretrained(\"stabilityai/stable-diffusion-2-1\", subfolder=\"unet\")\n_replace_transformer_blocks(unet, ...)","handlingStrategy":"type-guard","validationCode":"from diffusers.models.transformers.transformer_2d import BasicTransformerBlock\nassert isinstance(model.transformer_blocks[0], BasicTransformerBlock), type(model.transformer_blocks[0])","typeGuard":"def is_basic_transformer_block(model) -> bool:\n    from diffusers.models.transformers.transformer_2d import BasicTransformerBlock\n    return isinstance(model.transformer_blocks[0], BasicTransformerBlock)","tryCatchPattern":null,"preventionTips":["Pin the diffusers version from the repo requirements","Replace blocks once, then mark the model (e.g. attribute flag) to prevent double replacement","Add an isinstance smoke check before running the full pipeline"],"tags":["initialization","diffusers","type-mismatch"],"backgroundTag":"unexpected-block-type","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}