v0.2.12

tt-a1i/archifyv0.2.12Aug 5, 2026by andimarafioti

AI Summary

The final planned release in the 0.2.x line before larger changes, introducing WebRTC support, smarter endpointing with Smart Turn v3.2, and direct audio input for audio-capable LLMs.

Key Highlights

  • Smart Turn v3.2 enables quantized CPU models for smarter turn-taking and endpointing.
  • WebRTC transport added for the OpenAI Realtime API alongside WebSocket support.
  • Direct audio input for LLMs via `--stt none` and explicit audio model selection.
  • Optional remote-LLM proxy exposes backends through `/v1/responses` or `/v1/chat/completions`.

Breaking Changes

  • Renamed raw PCM WebSocket mode from `--mode websocket` to `--mode raw-websocket`.

New Features

  • WebRTC support via `pip install "speech-to-speech[webrtc]"`
  • Remote LLM proxy with streaming passthrough
  • Qwen3-TTS GGML features including voice-reference caching
  • Session updated event handling
  • Improved browser demo with device selection and user attribution

Full Release Notes


`speech-to-speech` 0.2.12 is the final planned release in the 0.2.x line before
the next round of larger changes. It brings smarter turn-taking, WebRTC support,
direct audio input for audio-capable LLMs, more complete OpenAI Realtime protocol
behavior, and a significantly improved browser demo.

### Highlights

- **Smarter endpointing with Smart Turn v3.2.** Realtime mode now enables the
  quantized CPU Smart Turn model by default to distinguish completed turns from
  mid-thought pauses while speculative STT and LLM work continues. Use
  `--no_smart_turn` to retain Silero-only endpointing. ([#192](https://github.com/huggingface/speech-to-speech/pull/192))
- **WebRTC transport for the OpenAI Realtime API.** Install the new `webrtc`
  extra to use SDP negotiation at `POST /v1/realtime/calls`, RTP audio, and the
  `oai-events` data channel alongside the existing WebSocket transport. Both
  transports share the same pipeline pool, event dispatch, cancellation, and
  interruption behavior. ([#352](https://github.com/huggingface/speech-to-speech/pull/352))
- **Direct audio input for audio-capable LLMs.** Run with `--stt none`, the
  Chat Completions backend, and an explicitly selected audio-capable model to
  send completed VAD audio directly to the model. Audio history, cancellation,
  tool calls, usage accounting, and provider failures are handled transactionally.
  ([#298](https://github.com/huggingface/speech-to-speech/pull/298))
- **Optional remote-LLM proxy.** `--enable_llm_proxy` exposes the configured
  remote backend through the matching `/v1/responses` or
  `/v1/chat/completions` path, with streaming passthrough and usage accounting.
  The engine deliberately does not authenticate or throttle these routes, so
  standalone deployments must keep them on a trusted network or behind an
  authenticated gateway. ([#368](https://github.com/huggingface/speech-to-speech/pull/368))

### Realtime, demo, and backend improvements

- The browser demo can select microphone and speaker devices, start with a
  configurable assistant greeting, forward signed-in Hugging Face identity for
  session allocation, show user-turn lifecycle feedback, and replay the exact
  captured user audio locally. ([#376](https://github.com/huggingface/speech-to-speech/pull/376),
  [#389](https://github.com/huggingface/speech-to-speech/pull/389),
  [#390](https://github.com/huggingface/speech-to-speech/pull/390))
- Qwen3-TTS GGML users can select quantization, load local talker and codec GGUF
  files, configure voice-reference caching, and reuse precomputed `.spk` and
  `.rvq` references. ([#403](https://github.com/huggingface/speech-to-speech/pull/403))
- Successful `session.update` requests now receive the expected
  `session.updated` event with the effective session configuration.
  ([#413](https://github.com/huggingface/speech-to-speech/pull/413),
  [#417](https://github.com/huggingface/speech-to-speech/pull/417),
  [#418](https://github.com/huggingface/speech-to-speech/pull/418))
- Language prompting now covers every language reported by the bundled STT
  handlers, including the full default Parakeet TDT language set.
  ([#395](https://github.com/huggingface/speech-to-speech/pull/395))
- A new guide documents a local Gemma 4 12B Realtime setup on Apple Silicon,
  including native-audio bypass, memory tuning, cancellation, barge-in, and
  troubleshooting. ([#422](https://github.com/huggingface/speech-to-speech/pull/422))

### Reliability and security

- Session teardown now preserves drain sentinels, releases capacity after setup
  failures, quarantines stuck pipeline units, reports them through `/v1/pool`,
  and prevents stale teardown signals from releasing the wrong session.
  ([#358](https://github.com/huggingface/speech-to-speech/pull/358))
- Speculative turn tracking no longer resurrects untracked revisions after a
  reset or LRU eviction, preventing reused turn IDs from suppressing responses.
  ([#391](https://github.com/huggingface/speech-to-speech/pull/391))
- Both MLX Audio Whisper and Lightning Whisper MLX now use the global MLX lock,
  preventing Metal command-buffer crashes when STT overlaps other MLX work on
  Apple Silicon. ([#379](https://github.com/huggingface/speech-to-speech/pull/379),
  [#387](https://github.com/huggingface/speech-to-speech/pull/387))
- Optional handler imports no longer reconfigure the host application's root
  logger, and setup/cleanup output now uses module loggers.
  ([#409](https://github.com/huggingface/speech-to-speech/pull/409))
- NLTK is upgraded to 3.10.0 to address CVE-2026-54293 / GHSA-p4gq-832x-fm9v.
  ([#400](https://github.com/huggingface/speech-to-speech/pull/400))

### Breaking change

The raw PCM WebSocket mode is now named `raw-websocket`. Commands using
`--mode websocket` must change to `--mode raw-websocket`; the old value is no
longer accepted. Realtime mode is unchanged and still supports both WebSocket
and WebRTC transports. ([#401](https://github.com/huggingface/speech-to-speech/pull/401))

### Packaging notes

- Smart Turn adds `huggingface-hub` and `onnxruntime` as standard dependencies.
- WebRTC support is available through `pip install "speech-to-speech[webrtc]"`.
- The Smart Turn model is downloaded from the Hugging Face Hub on first use
  unless a local model path is supplied.

### All merged changes

- Fix stuck pipeline units in session teardown by @A-Mahla in [#358](https://github.com/huggingface/speech-to-speech/pull/358)
- Add WebRTC transport for the OpenAI Realtime API by @A-Mahla in [#352](https://github.com/huggingface/speech-to-speech/pull/352)
- Bump the actions group with 2 updates by @dependabot in [#364](https://github.com/huggingface/speech-to-speech/pull/364)
- Add mic/speaker device selectors to the demo Settings UI by @dcolley in [#376](https://github.com/huggingface/speech-to-speech/pull/376)
- Acquire the global MLX lock in MLXAudioWhisperSTTHandler by @Hotragn in [#379](https://github.com/huggingface/speech-to-speech/pull/379)
- Add demo startup greeting and HF user attribution by @andimarafioti in [#389](https://github.com/huggingface/speech-to-speech/pull/389)
- Update star history chart by @andimarafioti in [#393](https://github.com/huggingface/speech-to-speech/pull/393)
- Add an LLM proxy for remote LLM backends by @A-Mahla in [#368](https://github.com/huggingface/speech-to-speech/pull/368)
- Add GitHub Trending achievement badge by @andimarafioti in [#398](https://github.com/huggingface/speech-to-speech/pull/398)
- Acquire the MLX lock in LightningWhisperSTTHandler by @varunsahni18 in [#387](https://github.com/huggingface/speech-to-speech/pull/387)
- Stop SpeculativeTurnTracker from committing untracked turns by @ztcools in [#391](https://github.com/huggingface/speech-to-speech/pull/391)
- Give every STT language an LLM language name by @Hotragn in [#395](https://github.com/huggingface/speech-to-speech/pull/395)
- Refine the GitHub Trending badge by @andimarafioti in [#399](https://github.com/huggingface/speech-to-speech/pull/399)
- Upgrade NLTK to 3.10.0 by @andimarafioti in [#400](https://github.com/huggingface/speech-to-speech/pull/400)
- Rename raw PCM mode to `raw-websocket` by @andimarafioti in [#401](https://github.com/huggingface/speech-to-speech/pull/401)
- Add user audio replay to the Realtime demo by @andimarafioti in [#390](https://github.com/huggingface/speech-to-speech/pull/390)
- Add missing Qwen3-TTS GGML features by @andimarafioti in [#403](https://github.com/huggingface/speech-to-speech/pull/403)
- Avoid configuring the root logger when importing optional handlers by @salignatmoandal in [#409](https://github.com/huggingface/speech-to-speech/pull/409)
- Add audio-input LLM STT bypass by @andimarafioti in [#298](https://github.com/huggingface/speech-to-speech/pull/298)
- Send `session.updated` after `session.update` by @hrqiang in [#413](https://github.com/huggingface/speech-to-speech/pull/413)
- Fix the `session.updated` event contract by @andimarafioti in [#417](https://github.com/huggingface/speech-to-speech/pull/417)
- Integrate the `session.updated` work by @andimarafioti in [#418](https://github.com/huggingface/speech-to-speech/pull/418)
- Refresh the star history chart by @andimarafioti in [#419](https://github.com/huggingface/speech-to-speech/pull/419)
- Document the Gemma 4 12B Realtime setup by @andimarafioti in [#422](https://github.com/huggingface/speech-to-speech/pull/422)
- Bump the actions group with 3 updates by @dependabot in [#406](https://github.com/huggingface/speech-to-speech/pull/406)
- Integrate Smart Turn v3.2 endpointing by @andimarafioti in [#192](https://github.com/huggingface/speech-to-speech/pull/192)

### New contributors

Thank you to @dcolley, @Hotragn, @varunsahni18, @ztcools,
@salignatmoandal, and @hrqiang for their first contributions to the project.

**Full changelog:** https://github.com/huggingface/speech-to-speech/compare/v0.2.11...v0.2.12