What's Changed
- Add support for Deepgram's Flux TTS API (v2/speak) integration by @dg-edcharbeneau in #6511
- fix(cerebras): expose max_completion_tokens by @ryanl-cerebras in #6685
- Make every example a uv workspace member by @u9g in #6649
- feat(bland): add Bland TTS plugin by @rv-blandai in #6554
- voice: forward agent_false_interruption over the RemoteSession by @theomonnom in #6691
- plugins/phonic: expose more realtime config options by @arunwpm-work in #6687
- fix(tts): give each fallback recovery path its own task slot by @LHMQ878 in #6683
- tests: assert which session events the host forwards, not how many by @theomonnom in #6693
- fix(livekit-agents): forward the STT hooks through MultiSpeakerAdapter by @LHMQ878 in #6679
- fix(google): release the genai client when the LLM or Gemini TTS closes by @LHMQ878 in #6686
- fix(exceptions): name the underlying cause when an LLM/TTS/STT connection fails by @u9g in #6696
- feat(openai): add gpt-5.5 to model registry by @xtreme-sameer-vohra in #6263
- feat(google): accept a credentials object on STT and TTS by @biztex in #6618
- Feat/anam support ai disclosure by @sr-anam in #6695
- fix(soniox): report RECOGNITION_USAGE on every frame by @vadimatmurphy in #6585
- fix(voice): keep the run open while a tool holds the floor by @longcw in #6694
- feat(metrics): broadcast llm tps + ttfs by @Bobronium in #6373
- fix(amd): start SIP detection timeout after answer by @chenghao-mou in #6580
- fix(deepgram): use punctuated_word for word-level transcripts by @mdylan2 in #6699
- feat(eot): let a cloud TurnDetector opt out of the local fallback by @theomonnom in #6719
- (expressive mode): remove extra space after stripping tag by @tinalenguyen in #6717
- fix(audio): don't report a stopped playback as a decode error by @longcw in #6723
- fix(aws): gate audio frames during text block sends to prevent Nova Sonic ValidationException by @lanazhang in #6720
- feat(openai): support context hints in STT by @longcw in #6705
- fix(deepgram): end_time should be the last word, not the first by @mdylan2 in #6712
- fix(tts): probe a skipped provider for recovery on the streamed path by @biztex in #6684
- fix(ipc): report actual consumed memory instead of RSS by @Bobronium in #6082
- feat(voice): add session_host to AgentSession.start() by @theomonnom in #6725
- fix(ipc): don't raise from is_alive after the inference process is closed by @RGB-loop in #6732
- feat(baseten): add Qwen3-ASR STT and Qwen3-TTS support, and language_options for Whisper STT by @A-K-Erol in #6700
- feat(fishaudio): enable quality-guard on all TTS requests by @cshape in #6734
- (core): support duplicate tool policy specification by @tinalenguyen in #6610
- fix(xai): emit one final user transcript per turn by @longcw in #6729
- feat(inference): log gateway quota headers when LLM requests hit a 429 by @adrian-cowham in #6736
- feat(expressive): expose expressive mode and add expressive_agent example by @theomonnom in #6698
- livekit-agents@1.6.9 by @github-actions[bot] in #6753
New Contributors
- @dg-edcharbeneau made their first contribution in #6511
- @rv-blandai made their first contribution in #6554
- @LHMQ878 made their first contribution in #6683
- @mdylan2 made their first contribution in #6699
- @RGB-loop made their first contribution in #6732
- @A-K-Erol made their first contribution in #6700
Full Changelog: https://github.com/livekit/agents/compare/livekit-agents@1.6.8...livekit-agents@1.6.9