Stability-AI/generative-models · error · ValueError

unknown merge strategy {merge_strategy}

Error message

unknown merge strategy {merge_strategy}

What it means

The factor/merge mechanism in spacetime_attention.py supports a fixed set of merge_strategy values (e.g. 'learned', 'fixed', 'fixed_with_images'); an unrecognized strategy raises ValueError(f"unknown merge strategy {merge_strategy}") during attention module construction.

Source

Thrown at sgm/modules/spacetime_attention.py:248

        time_embed_dim = self.in_channels * 4
        self.time_mix_time_embed = nn.Sequential(
            linear(self.in_channels, time_embed_dim),
            nn.SiLU(),
            linear(time_embed_dim, self.in_channels),
        )

        self.time_mix_legacy = time_mix_legacy
        if self.time_mix_legacy:
            if merge_strategy == "fixed":
                self.register_buffer("mix_factor", torch.Tensor([merge_factor]))
            elif merge_strategy == "learned" or merge_strategy == "learned_with_images":
                self.register_parameter(
                    "mix_factor", torch.nn.Parameter(torch.Tensor([merge_factor]))
                )
            elif merge_strategy == "fixed_with_images":
                self.mix_factor = None
            else:
                raise ValueError(f"unknown merge strategy {merge_strategy}")

            self.get_alpha_fn = partial(
                get_alpha,
                merge_strategy,
                self.mix_factor,
                apply_sigmoid=apply_sigmoid_to_merge,
                is_attn=True,
            )
        else:
            self.time_mixer = AlphaBlender(
                alpha=merge_factor, merge_strategy=merge_strategy
            )

    def forward(
        self,
        x: torch.Tensor,
        context: Optional[torch.Tensor] = None,
        # cam: Optional[torch.Tensor] = None,

View on GitHub (pinned to e8cd657656)

Solutions

  1. Set merge_strategy to one of the supported strings ('learned', 'fixed', or 'fixed_with_images')
  2. Check the class __init__ defaults around spacetime_attention.py:248 to see the accepted values
  3. Fix the typo/whitespace in the config key value

Example fix

// before
merge_strategy: learnned
// after
merge_strategy: learned
Defensive patterns

Strategy: validation

Validate before calling

VALID_STRATEGIES = {'learned', 'fixed', 'fixed_with_images'}
strategy = attn_params.get('merge_strategy', 'learned')
if strategy not in VALID_STRATEGIES:
    raise ValueError(f"merge_strategy must be one of {sorted(VALID_STRATEGIES)}, got {strategy!r}")

Try / catch

try:
    model = load_model_from_config(cfg, ckpt)
except ValueError as e:
    if 'unknown merge strategy' in str(e):
        cfg['params']['transformer_params']['merge_strategy'] = 'learned'
        model = load_model_from_config(cfg, ckpt)
    else:
        raise

Prevention

When it happens

Trigger: Passing merge_strategy set to any value outside the supported set ('learned', 'fixed', 'fixed_with_images'), e.g. 'learned_with_images', 'mean', null/None, or a missing param that defaults badly.

Common situations: Typos in the YAML config; reusing video_attention configs from a different repo version with extra strategies added; accidentally omitting merge_strategy so None flows through.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of Stability-AI/generative-models@e8cd657656 (2026-08-29). Data as JSON: /api/errors/848f0bd1d0d39989. Report an issue: GitHub.