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
- Set decoder_config.model_type to 'qwen2' (the only supported decoder) in the dict or config.json.
- If you meant a different decoder, you must implement/register a matching branch in configuration_vibevoice.py — no other type is accepted.
- Regenerate config.json from_pretrained on the original checkpoint instead of editing it by hand.
- 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
- Never hand-edit decoder model_type in config.json
- Diff configs against the upstream checkpoint
- Validate config dicts before constructor calls
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
- Unsupported decoder model type: {decoder_config.get('model_t
- Unsupported mixer layer: {mixer_layer}
- Unsupported norm type: {layernorm}
- Multiple voice presets match the speaker name '{speaker_name
- MODEL_PATH not set in environment
AI-assisted analysis of microsoft/VibeVoice@94da20d98b (2026-08-15).
Data as JSON: /api/errors/65bda38b91ea6f9f.
Report an issue: GitHub.