microsoft/VibeVoice · error · ValueError

Unsupported mixer layer: {mixer_layer}

Error message

Unsupported mixer layer: {mixer_layer}

What it means

The SEANet-style attention block (modular_vibevoice_tokenizer.py:661) supports only specific mixer layers — the branches above handle e.g. 'conv'/'attention' and 'depthwise_conv' — and any other mixer_layer string raises ValueError. The default from config is 'conv' (getattr(config, 'mixer_layer', 'conv')).

Source

Thrown at vibevoice/modular/modular_vibevoice_tokenizer.py:661

        if mixer_layer == 'conv':
            self.mixer = Convlayer(dim, dim, groups=kwargs.get('groups', 1),
                                kernel_size=kernel_size, 
                                pad_mode=kwargs.get('pad_mode', 'reflect'), 
                                norm=kwargs.get('norm', 'none'), 
                                causal=kwargs.get('causal', True), 
                                bias=kwargs.get('bias', True),
                                )
        elif mixer_layer == 'depthwise_conv':
            self.mixer = Convlayer(dim, dim, groups=dim,
                                kernel_size=kernel_size, 
                                pad_mode=kwargs.get('pad_mode', 'reflect'), 
                                norm=kwargs.get('norm', 'none'), 
                                causal=kwargs.get('causal', True), 
                                bias=kwargs.get('bias', True),
                                )
        else:
            raise ValueError(f"Unsupported mixer layer: {mixer_layer}")
        
        self.ffn = FFN(
            dim, 
            kwargs.get('ffn_expansion', 4) * dim, 
            bias=kwargs.get('bias', False),
        )
        self.drop_path = nn.Identity() if drop_path <= 0. else nn.modules.DropPath(drop_path)

        if layer_scale_init_value > 0:
            self.gamma = nn.Parameter(layer_scale_init_value * torch.ones((dim)), requires_grad=True)
            self.ffn_gamma = nn.Parameter(layer_scale_init_value * torch.ones((dim)), requires_grad=True)
        else:
            self.gamma = None
            self.ffn_gamma = None

    def forward(self, x):
        # mixer
        residual = x

View on GitHub (pinned to 94da20d98b)

Solutions

  1. Set mixer_layer to one of the implemented values ('conv' or 'depthwise_conv'; check the branch chain at that site).
  2. Read the config from a known-good checkpoint instead of authoring it by hand.
  3. If a new mixer is required, add an elif branch constructing your mixer before the raise.
  4. Print/validate config.mixer_layer against the supported set at config-load time.

Example fix

# before
cfg["mixer_layer"] = "depthwiseconv"  # typo -> ValueError

# after
cfg["mixer_layer"] = "depthwise_conv"  # exact supported spelling
Defensive patterns

Strategy: validation

Validate before calling

SUPPORTED_MIXERS = {"conv", "depthwise_conv"}
mixer = getattr(config, "mixer_layer", "conv")
assert mixer in SUPPORTED_MIXERS, f"mixer_layer must be one of {SUPPORTED_MIXERS}, got {mixer!r}"

Type guard

def is_supported_mixer(m: object) -> bool:
    return m in ("conv", "depthwise_conv")

Prevention

When it happens

Trigger: Building the tokenizer with config.mixer_layer set to an unsupported value such as 'mlp', 'gru', 'fft', or a typo like 'depthwiseconv'.

Common situations: Editing tokenizer config JSON to try new architectures; configs ported from other audio codebases with different mixer naming; missing value falling through to a custom string.

Related errors


AI-assisted analysis of microsoft/VibeVoice@94da20d98b (2026-08-15). Data as JSON: /api/errors/7b9b45c71448419e. Report an issue: GitHub.