{"record":{"id":"0dd0f73eb0a9c46d","repo":"Stability-AI/generative-models","slug":"unknown-merge-strategy-self-merge-strategy","errorCode":null,"errorMessage":"unknown merge strategy {self.merge_strategy}","messagePattern":"unknown merge strategy (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sgm/modules/autoencoding/temporal_ae.py","lineNumber":52,"sourceCode":"            dims=3,\n            use_scale_shift_norm=False,\n            use_conv=False,\n            up=False,\n            down=False,\n            kernel_size=video_kernel_size,\n            use_checkpoint=False,\n            skip_t_emb=True,\n        )\n\n        self.merge_strategy = merge_strategy\n        if self.merge_strategy == \"fixed\":\n            self.register_buffer(\"mix_factor\", torch.Tensor([alpha]))\n        elif self.merge_strategy == \"learned\":\n            self.register_parameter(\n                \"mix_factor\", torch.nn.Parameter(torch.Tensor([alpha]))\n            )\n        else:\n            raise ValueError(f\"unknown merge strategy {self.merge_strategy}\")\n\n    def get_alpha(self, bs):\n        if self.merge_strategy == \"fixed\":\n            return self.mix_factor\n        elif self.merge_strategy == \"learned\":\n            return torch.sigmoid(self.mix_factor)\n        else:\n            raise NotImplementedError()\n\n    def forward(self, x, temb, skip_video=False, timesteps=None):\n        if timesteps is None:\n            timesteps = self.timesteps\n\n        b, c, h, w = x.shape\n\n        x = super().forward(x, temb)\n\n        if not skip_video:","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/Stability-AI/generative-models/blob/e8cd657656fa5d61688191730d0e03242bf4ed44/sgm/modules/autoencoding/temporal_ae.py#L34-L70","documentation":"VideoTransformerBlock validates merge_strategy in __init__ and only 'fixed' (buffer) and 'learned' (parameter) are accepted; any other string raises ValueError at construction time.","triggerScenarios":"Instantiating VideoTransformerBlock with merge_strategy set to anything other than 'fixed' or 'learned', e.g. a config typo like 'fixed_with_decay' or 'average'.","commonSituations":"YAML/JSON config typos for temporal autoencoder attention blocks; copying older config keys into a newer code version that renamed allowed values.","solutions":["Set merge_strategy to 'fixed' or 'learned' in the block config","Fix the typo in the config key value","Check the class __init__ signature for the default ('learned') and rely on it"],"exampleFix":"// before\nVideoTransformerBlock(in_channels=320, merge_strategy=\"average\")\n// after\nVideoTransformerBlock(in_channels=320, merge_strategy=\"learned\")","handlingStrategy":"validation","validationCode":"VALID = {\"fixed\", \"learned\"}\nassert merge_strategy in VALID, f\"merge_strategy must be one of {VALID}, got {merge_strategy!r}\"","typeGuard":"def is_valid_merge_strategy(s) -> bool:\n    return s in (\"fixed\", \"learned\")","tryCatchPattern":"try:\n    block = VideoTransformerBlock(in_channels=320, merge_strategy=cfg.strategy)\nexcept ValueError as e:\n    logger.error(\"bad merge_strategy in config, falling back to 'learned'\")\n    block = VideoTransformerBlock(in_channels=320, merge_strategy=\"learned\")","preventionTips":["Keep merge_strategy values in a shared constants module","Validate model configs against a JSON/YAML schema before construction","Use the default value instead of hand-typing strategy strings"],"tags":["python","config","value-error"],"backgroundTag":"invalid-enum-value","analyzedSha":"e8cd657656fa5d61688191730d0e03242bf4ed44","analyzedAt":"2026-08-29T11:23:43.234Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}