VibeVoice-ASR (4-bit MLX) decoder degenerates into infinite "Yes. Yes." loop on a 36-min recording
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 16384and--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 mlx0.31.2 mlx-metal0.31.2 mlx-audio0.4.2 transformers5.6.2 numpy2.4.4 Model mlx-community/VibeVoice-ASR-4bitRepro 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 32768Expected
Complete the transcription with valid segmented JSON, or emit an EOS token and stop gracefully.
Actual
Outer JSON parses, but the inner
textfield (a JSON-stringified array of{Start, End, Speaker, Content}segments) is truncated
mid-string at the--max-tokensceiling: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.
Source: microsoft/VibeVoice