microsoft/VibeVoice · error · ValueError

Unsupported decoder model type: {decoder_config.get('model_t

Error message

Unsupported decoder model type: {decoder_config.get('model_type', '')}

What it means

In VibeVoiceConfig.__init__ (non-streaming, vibevoice/modular/configuration_vibevoice.py:241), when decoder_config is passed as a dict its model_type must be exactly 'qwen2'; anything else raises ValueError. The library hard-wires Qwen2Config as the only supported decoder backbone, so this error is a config-shape guard, not a runtime failure.

Source

Thrown at vibevoice/modular/configuration_vibevoice.py:241

        if semantic_tokenizer_config is None:
            self.semantic_tokenizer_config = self.sub_configs["semantic_tokenizer_config"]()
        elif isinstance(semantic_tokenizer_config, dict):
            semantic_tokenizer_config["model_type"] = "vibevoice_semantic_tokenizer"
            self.semantic_tokenizer_config = self.sub_configs["semantic_tokenizer_config"](**semantic_tokenizer_config)
        elif isinstance(semantic_tokenizer_config, VibeVoiceSemanticTokenizerConfig):
            # If an instance of the config class is provided
            self.semantic_tokenizer_config = semantic_tokenizer_config

        if decoder_config is None:
            self.decoder_config = self.sub_configs["decoder_config"]()
        elif isinstance(decoder_config, dict):
            # If a dictionary is provided, instantiate the config class with it
            # self.decoder_config = self.sub_configs["decoder_config"](**decoder_config)
            if decoder_config.get("model_type", '') == "qwen2":
                self.decoder_config = Qwen2Config(**decoder_config)
            else:
                raise ValueError(f"Unsupported decoder model type: {decoder_config.get('model_type', '')}")
        elif isinstance(decoder_config, (Qwen2Config,)):
            # If an instance of the config class is provided
            self.decoder_config = decoder_config

        if diffusion_head_config is None:
            self.diffusion_head_config = self.sub_configs["diffusion_head_config"]()
        elif isinstance(diffusion_head_config, dict):
            diffusion_head_config["model_type"] = "vibevoice_diffusion_head"
            self.diffusion_head_config = self.sub_configs["diffusion_head_config"](**diffusion_head_config)
        elif isinstance(diffusion_head_config, VibeVoiceDiffusionHeadConfig):
            # If an instance of the config class is provided
            self.diffusion_head_config = diffusion_head_config

        # other parameters
        self.acoustic_vae_dim = getattr(self.acoustic_tokenizer_config, 'vae_dim', 64)
        self.semantic_vae_dim = getattr(self.semantic_tokenizer_config, 'vae_dim', 128)

        super().__init__(**kwargs)

View on GitHub (pinned to 94da20d98b)

Solutions

  1. Set decoder_config.model_type to 'qwen2' (the only supported decoder) in the dict or config.json.
  2. If you meant a different decoder, you must implement/register a matching branch in configuration_vibevoice.py — no other type is accepted.
  3. Regenerate config.json from_pretrained on the original checkpoint instead of editing it by hand.
  4. Check for silent corruption: json.load the config and inspect decoder_config['model_type'] before loading.

Example fix

# before
VibeVoiceConfig(decoder_config={"model_type": "qwen3", "hidden_size": 896})

# after
VibeVoiceConfig(decoder_config={"model_type": "qwen2", "hidden_size": 896})
Defensive patterns

Strategy: validation

Validate before calling

SUPPORTED_DECODERS = {"qwen2"}
if isinstance(decoder_config, dict) and decoder_config.get("model_type") not in SUPPORTED_DECODERS:
    raise SystemExit(f"decoder_config.model_type must be one of {SUPPORTED_DECODERS}")

Type guard

def is_supported_decoder(cfg: dict) -> bool:
    return isinstance(cfg, dict) and cfg.get("model_type") == "qwen2"

Try / catch

try:
    VibeVoiceConfig(decoder_config=decoder_config)
except ValueError as e:
    decoder_config = {**decoder_config, "model_type": "qwen2"}
    VibeVoiceConfig(decoder_config=decoder_config)

Prevention

When it happens

Trigger: Constructing VibeVoiceConfig(decoder_config={'model_type': 'qwen3', ...}), omitting model_type, or loading a saved config.json whose decoder_config.model_type was edited to another architecture.

Common situations: Hand-editing config.json to swap the decoder for a newer Qwen variant; merging configs from a different model family; a fine-tune export that rewrote model_type.

Related errors


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