github livekit/agents livekit-agents@1.8.10

3 hours ago

Recording bitrate control

You can use constant-bitrate recording to avoid misleading duration estimates in players such as QuickLook, or match Egress’s 128 kb/s encoding. RecorderIO now lets you set the bitrate and encoding mode; defaults are unchanged.

RecorderIO(agent_session=session, bit_rate=128_000, constant_bit_rate=True)

New providers and models

  • Reson8: new STT plugin for batch and realtime transcription, including server-side turn detection.
  • Mistral Voxtral 3: adds voxtral-mini-transcribe-3, voxtral-small-transcribe-3, voxtral-mini-transcribe-realtime-3, and voxtral-mini-tts-3, plus 36 TTS voice presets.
  • Inworld: adds inworld-tts-2-flash through the plugin and LiveKit Inference.
  • AssemblyAI: adds typed LiveKit Inference TTS support for assemblyai and assemblyai/assemblyai-tts-1.

Breaking changes

  • Mistral: api_mode is now ignored; migrate Chat Completions usage to Conversations. For recognize(), explicitly select a batch model; replace removed known IDs voxtral-mini-latest and voxtral-mini-2507. Without VAD or server-side turn detection, standalone realtime streams need stream.flush().

Behavior changes

  • Mistral: now requires mistralai>=3.5.0,<4.0.0; defaults move to Voxtral 3 STT/TTS and mistral-small-latest. Silero is no longer loaded automatically.
  • TTS defaults: AssemblyAI now uses Audrey; Inworld uses inworld-tts-2.
  • Streaming STT: detects stalled connections and limits retries without processing progress so fallback can proceed.
  • Worker health: returns 503 before registration and after disconnections exceed the 30-second grace period.

STT flushing, language overrides, token accounting, translation startup, avatar errors, and noise cancellation are more reliable.

What's Changed

  • fix(google): count Gemini thinking tokens in LLM completion_tokens by @ninglinLiu in #7891
  • fix(hume): reject instant_mode without a voice in update_options by @ShivamSharma43 in #8090
  • fix(tokenize): keep runs like ?! and !!! in one sentence by @ANDROIDHASSAN in #8116
  • fix(gladia): require translation target languages in update_options by @ShivamSharma43 in #8091
  • fix(tests): replace TCP port check with HTTP readiness probe in livekit_server fixture by @Lothnic in #6094
  • fix(fal, mistralai): don't persist the per-call language passed to recognize() by @ShivamSharma43 in #8054
  • fix(stt): stop per-call language leaking in openai/elevenlabs, forward deepgram options to open streams by @Atharvsinh-codez in #7828
  • fix(worker): return 503 from health until RegisterWorkerResponse by @ninglinLiu in #8093
  • fix(inference): detect a silently dropped Inference STT socket instead of hanging by @regalmoix in #8023
  • feat(openai): add TTS sample rate option by @rosetta-livekit-bot[bot] in #8122
  • fix(llm): drop the dangling openai.responses entry from _provider_format.all by @ShivamSharma43 in #8008
  • fix(anthropic): send user as metadata.user_id by @omChauhanDev in #7970
  • feat(voice): add bit_rate and constant_bit_rate options to RecorderIO by @ANDROIDHASSAN in #7740
  • Detect stalled STT connections and limit recovery retries by @davidzhao in #8123
  • fix(beta): stop unset_track from stalling TranslationRoomIO startup by @RaphaelFakhri in #8115
  • feat(assemblyai): default the TTS voice to Audrey by @dlange-aai in #8132
  • feat(reson8): add STT plugin with server-side turn detection by @phillip-kil in #7187
  • Add docstrings to the xAI realtime model by @aryeila in #8141
  • fix(deepgram): Drop the language hint the model cannot take, and add it for nova-3 multi by @adrian-cowham in #8079
  • feat: send up existing jobs during worker connection migration by @davidzhao in #8135
  • fix(bithuman): don't retry 4xx when starting a session, and keep the provider's error by @sidxh in #7500
  • feat(inference): Type and gate language_hint for Deepgram Nova-3 by @adrian-cowham in #8072
  • docs(plugins): fix environment variables in the neuphonic and rtzr READMEs by @ninglinLiu in #8151
  • fix(baseten): flush buffered audio with end_audio when Whisper STT input ends by @A-K-Erol in #8144
  • chore(examples): remove provider-specific examples by @tinalenguyen in #8154
  • feat(inworld): add inworld-tts-2-flash and move the default off TTS-1.5 by @shawnfeldman in #8047
  • synthesia: optionally start the avatar in the background (wait_for_avatar=False) by @atharvapatil-synth in #8146
  • fix(assemblyai): don't cap language_codes at 10 on universal-3-6-pro by @tinalenguyen in #8178
  • feat(simli): send Trinity-2 session options and the plain face ID by @Antonyesk601 in #8174
  • docs(microsoft-ai): drop stale smoke script references by @detail-app[bot] in #8182
  • feat(mistralai): add Voxtral 3 TTS support by @jeanprbt in #8164
  • feat(mistralai): add Voxtral 3 STT support by @jeanprbt in #8136
  • refactor(mistralai): use the Conversations API only for the LLM by @jeanprbt in #8169
  • feat(inference): Type AssemblyAI TTS models and options by @tinalenguyen in #8181
  • feat(mistralai): expose the Conversations API store option on the LLM by @tinalenguyen in #8187
  • chore(deps): update dependency nltk to v3.10.4 [security] by @renovate[bot] in #8186
  • chore(krisp): bump livekit-plugins-krisp-internal to 0.2.2 by @lukasIO in #8198
  • livekit-agents@1.8.10 by @github-actions[bot] in #8206

New Contributors

Full Changelog: https://github.com/livekit/agents/compare/livekit-agents@1.8.9...livekit-agents@1.8.10

Don't miss a new agents release

NewReleases is sending notifications on new releases.