v0.2.25

QuentinFuxa/WhisperLiveKitv0.2.25Aug 1, 2026by QuentinFuxa

AI Summary

This release introduces a new FunASR SenseVoiceSmall backend supporting multiple languages and improves Docker image security with SBOM attestations. It also fixes critical bugs in qwen3 diarization and enhances error handling for invalid session parameters.

Key Highlights

  • New FunASR backend supporting Mandarin, Cantonese, English, Japanese, and Korean.
  • Docker images now include SBOM attestations and pinned provenance mode.
  • Fixed qwen3 diarization to prevent updates from stopping after the first line.
  • Invalid parameters now trigger structured errors instead of handshake failures.

New Features

  • FunASR SenseVoiceSmall backend with per-session language overrides.
  • SBOM attestations on published Docker images.
  • Structured error responses for invalid per-session parameters.
  • Improved CLI commands for funasr model management.

Full Release Notes

A FunASR backend, and diarization unbroken for qwen3.

## Added
- FunASR SenseVoiceSmall backend (`--backend funasr`): auto, Mandarin, Cantonese, English, Japanese and Korean on the LocalAgreement policy, with fail-closed timestamp validation and per-session language overrides. Install with the `funasr` extra. (#385, thanks @LauraGPT)
- Published Docker images now carry SBOM attestations, and the provenance mode is pinned explicitly. (#390, thanks @kobihikri)

## Fixed
- qwen3 backends with `--diarization` silently stopped emitting updates as soon as the first line was diarized: the qwen3 package's own token type lacked the helpers the alignment needs. Tokens are now normalized to WhisperLiveKit's `ASRToken` at the factory boundary. (#389, thanks @OookTheLibrarian)
- Diarization span corruption in `concatenate_diar_segments`.
- `--language yue --buffer-trimming sentence` crashed on a bare assert even though the sentence tokenizer supports Cantonese. (#392)
- Invalid per-session parameters (such as an unsupported `?language=`) now produce a structured error and close code 4400 on the WebSocket endpoints, and HTTP 400 on the REST endpoint, instead of an unexplained handshake failure. (#393)
- `wlk pull funasr` and `wlk rm funasr` explain that funasr manages its own model cache instead of exiting 1 silently. (#394)