microsoft/VibeVoice · error · ValueError

Unsupported tokenizer type for {language_model_pretrained_na

Error message

Unsupported tokenizer type for {language_model_pretrained_name}. Supported types: Qwen, Llama, Gemma.

What it means

VibeVoiceStreamingProcessor.from_pretrained uses the same tokenizer-selection logic as the non-streaming processor: a case-insensitive 'qwen' substring check on language_model_pretrained_name, with a single implemented branch. The advertised 'Supported types: Qwen, Llama, Gemma' does not match the code — only Qwen actually loads.

Source

Thrown at vibevoice/processor/vibevoice_streaming_processor.py:101

                config = {
                    "speech_tok_compress_ratio": 3200,
                    "db_normalize": True,
                }
        
        # Extract main processor parameters
        speech_tok_compress_ratio = config.get("speech_tok_compress_ratio", 3200)
        db_normalize = config.get("db_normalize", True)
        
        # Load tokenizer - try from model path first, then fall back to Qwen        
        language_model_pretrained_name = config.get("language_model_pretrained_name", None) or kwargs.pop("language_model_pretrained_name", "Qwen/Qwen2.5-1.5B")
        logger.info(f"Loading tokenizer from {language_model_pretrained_name}")
        if 'qwen' in language_model_pretrained_name.lower():
            tokenizer = VibeVoiceTextTokenizerFast.from_pretrained(
                language_model_pretrained_name,
                **kwargs
            )
        else:
            raise ValueError(f"Unsupported tokenizer type for {language_model_pretrained_name}. Supported types: Qwen, Llama, Gemma.")
        
        # Load audio processor
        if "audio_processor" in config:
            # Create audio processor from config
            audio_config = config["audio_processor"]
            audio_processor = VibeVoiceTokenizerProcessor(
                sampling_rate=audio_config.get("sampling_rate", 24000),
                normalize_audio=audio_config.get("normalize_audio", True),
                target_dB_FS=audio_config.get("target_dB_FS", -25),
                eps=audio_config.get("eps", 1e-6),
            )
        else:
            # Create default audio processor
            audio_processor = VibeVoiceTokenizerProcessor()
        
        # Create and return the processor
        return cls(
            tokenizer=tokenizer,

View on GitHub (pinned to 94da20d98b)

Solutions

  1. Set language_model_pretrained_name to a Qwen repo id (default 'Qwen/Qwen2.5-1.5B') or keep 'qwen' in the local path name.
  2. Symlink or rename local fine-tune directories so the substring check passes.
  3. Subclass and extend the branch if a different tokenizer family is genuinely required.

Example fix

# before
proc = VibeVoiceStreamingProcessor.from_pretrained('/srv/models/vibevoice-1.5B',
    language_model_pretrained_name='/srv/models/lm')

# after
proc = VibeVoiceStreamingProcessor.from_pretrained('/srv/models/vibevoice-1.5B',
    language_model_pretrained_name='Qwen/Qwen2.5-1.5B')
Defensive patterns

Strategy: validation

Validate before calling

name = config.get('language_model_pretrained_name') or 'Qwen/Qwen2.5-1.5B'
if 'qwen' not in name.lower():
    name = 'Qwen/Qwen2.5-1.5B'  # or fail loudly: raise ValueError(...)
processor = VibeVoiceStreamingProcessor.from_pretrained(
    ..., language_model_pretrained_name=name)

Type guard

def is_qwen_tokenizer_name(name: str) -> bool:
    return isinstance(name, str) and 'qwen' in name.lower()

Try / catch

try:
    proc = VibeVoiceStreamingProcessor.from_pretrained(model_path)
except ValueError as e:
    if 'Unsupported tokenizer type' in str(e):
        proc = VibeVoiceStreamingProcessor.from_pretrained(
            model_path, language_model_pretrained_name='Qwen/Qwen2.5-1.5B')
    else:
        raise

Prevention

When it happens

Trigger: Constructing the streaming processor with language_model_pretrained_name lacking 'qwen': Llama/Gemma repo ids, or a local directory like '/srv/models/lm' that contains a Qwen tokenizer but no 'qwen' in the path.

Common situations: Switching an inference server from VibeVoiceProcessor to VibeVoiceStreamingProcessor while reusing a renamed local checkpoint path; on-prem mirrors that strip the org name.

Related errors


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