#373·VibeVoice

VibeVoice-ASR (4-bit MLX) decoder degenerates into infinite "Yes. Yes." loop on a 36-min recording

Author: port8080Created Apr 28, 2026Updated Jun 30, 2026

When transcribing a 36-minute, 4-speaker English audio file with the mlx-community/VibeVoice-ASR-4bit port (via mlx-audio), the autoregressive decoder degenerates near the end of the recording into an infinite repetition of the token sequence Yes. Yes. Yes. ....

The loop continues until --max-tokens is hit, leaving the inner JSON string unterminated and unparseable.

  • Same recording fails identically with --max-tokens 16384 and --max-tokens 32768. Both runs end with the same "Yes."-spam tail.

  • 24 of 25 other recordings in the same batch (1 single-speaker monologues through 33-min 4-speaker conversations) transcribed cleanly with no repetition-degeneracy.

  • The first ~17 minutes of the failing recording transcribe correctly (124 valid segments, speakers diarized as expected). The breakdown happens in the tail.

    Environment

    OS macOS 26.4.1 arm64 (Apple Silicon, M5)
    Python 3.12.13
    mlx 0.31.2
    mlx-metal 0.31.2
    mlx-audio 0.4.2
    transformers 5.6.2
    numpy 2.4.4
    Model mlx-community/VibeVoice-ASR-4bit

    Repro command

    python -m mlx_audio.stt.generate \
      --model mlx-community/VibeVoice-ASR-4bit \                                                                                             
      --audio <36-min-recording.mp3> \
      --output-path /tmp/vv-out \                                                                                                            
      --format json --max-tokens 32768                              
    

    Expected

    Complete the transcription with valid segmented JSON, or emit an EOS token and stop gracefully.

    Actual

    Outer JSON parses, but the inner text field (a JSON-stringified array of {Start, End, Speaker, Content} segments) is truncated
    mid-string at the --max-tokens ceiling:

    PARSE FAILED: Unterminated string starting at: line 1 column 22668 (char 22667)
    Inner tail: ...Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes. Yes. ...
    

    60+ consecutive Yes. tokens before the cutoff.

    Audio file

    I cannot attach the audio publicly (it's customer-tier data under our compliance policy). I have the file locally and am happy to email
    it to a maintainer privately. To verify identity if shared:

    • Size: 34,585,389 bytes (~33 MB)
    • Duration: ~36 minutes, 4 speakers, English conversation

Notes

  • Salvaging the head of the broken JSON yields valid segments up to ~17 min into the recording, with speakers diarized correctly. The
    model is doing the right thing up until the loop starts; whatever triggers the repetition is in the tail.