What's Changed
Warning
console and dev modes are deprecated in favor of lk agent (#6656). Existing workflows that shell out to python agent.py console or python agent.py dev should migrate to the lk agent CLI.
Important
Inference Ink-2 speech onset fix (#6630) — if you rely on the STT model for interruption detection without a local VAD, upgrade for this fix. Previously the provider's speech-onset signal was delayed until first non-empty interim transcript, so STT interruptions could be delayed on Ink-2 via Inference. Setups with a local VAD in the pipeline are unaffected.
Features
- feat(core): add user transcription timeout by @chenghao-mou in #6182
- feat(voice): auto-disable realtime server-side turn detection by @longcw in #6495
- feat(cli): deprecate console and dev modes in favor of
lk agentby @u9g in #6656 - feat(elevenlabs): support previous_text on realtime STT by @tulanisahil1-beep in #6534
- feat(smallestai): add endpointing, keyword boosting, format, and sentence timestamps to Smallest STT by @harshitajain165 in #6565
- (xai stt): expose vad_threshold, smart_turn, smart_turn_timeout, and keyterm params by @ajayarora1235 in #6587
- (cartesia stt): expose ink-2 turn-detection thresholds and keyterm params by @ajayarora1235 in #6594
- (inference): type Cartesia turn-detection params in CartesiaOptions by @ajayarora1235 in #6597
- (inference openai llm): set default reasoning to none by @tinalenguyen in #6609
- Update Cerebras models and default by @ryanl-cerebras in #6593
- plugins/phonic: add configs_for_tools for per-tool behavior overrides by @arunwpm-work in #6634
- (expressive mode): refactor options, remove prompt presets by @tinalenguyen in #6406
- (expressive mode): register inference replaces presets by @cshape in #6632
- (expressive mode): add fish audio by @cshape in #6631
- (expressive mode): remove unconditional bracket stripping by @tinalenguyen in #6590
- feat(inference): let the gateway mint the avatar worker token by @shawnfeldman in #6575
- add agent id and deployment resource attrs by @jmcclanahan in #6570
- feat(deps): relax opentelemetry constraint to >=1.39.0,<2 by @biztex in #6552
- chore(krisp): adjust default noise_suppression_level by @lukasIO in #6640
Bug Fixes
- fix: defer interim interruptions to local VAD by @chenghao-mou in #6599
- fix(voice): retain concrete language for turn detection by @Oxygen56 in #6531
- fix(openai realtime): treat create_response=False as client-side turn taking by @longcw in #6642
- fix(inference): report Ink-2 speech onset when the provider detects it by @russellmartin-livekit in #6630
- fix(inference): don't claim word alignment for models that send none by @russellmartin-livekit in #6629
- fix(stt): send the turn commit when a flush yields no buffered audio by @chenghao-mou in #6598
- fix: account for STT fallback transcript alignment by @chenghao-mou in #6633
- fix(voice): tolerate formatting changes in preemptive transcripts by @swayamg20 in #6667
- fix(elevenlabs): populate SpeechData.confidence from Scribe logprobs by @captainbanan in #6461
- fix(sarvam): saaras:v3 does not support the config/prompt message by @biztex in #6617
- fix(aws): emit streaming STT usage metrics by @swayamg20 in #6653
- fix(voice): avoid dropping turns and resuming early while a speech is paused by @longcw in #6662
- fix(voice): place a realtime user turn where the turn began by @u9g in #6616
- fix(voice): reset tool call created_at at execution start in realtime replies by @u9g in #6615
- fix(room_io): don't re-fire playback_started on resume by @longcw in #6636
- fix(google): release the genai client when the realtime session closes by @biztex in #6643
- voice: strip markdown emphasis in CJK text by @longcw in #6560
- fix(llm): apply tool defaults across all schema shapes; keep response formats sentinel-free by @u9g in #6444
- "ValueError: EOF while parsing a string" during tool calls by @AlvaroBalbin in #6382
- fix(llm): tolerate list-shaped streaming delta content in strip_thinking_tokens by @biztex in #6625
- fix(workflows): return corrective instructions as tool output instead of generate_reply by @u9g in #6372
- fix(anthropic): disable vendor SDK retries by default by @axelray-dev in #6604
- fix(aws): count cached tokens in Bedrock's prompt_tokens by @arthi-arumugam-git in #6663
- fix: disable AEC warmup for outbound SIP calls by @chenghao-mou in #6608
- fix(livekit-agents): propagate prewarm through the STT fallback and stream adapters by @fxhxdxd in #6583
- fix(livekit-agents): forward prewarm to the primary LLM in the fallback adapter by @fxhxdxd in #6582
- bithuman: skip the SDK dependency on Python 3.14 by @longcw in #6561
- bithuman: fail closed on Python versions the SDK has no build for by @u9g in #6614
- fix(examples): pass LemonSlice avatar options via extra_kwargs by @shawnfeldman in #6574
- fix(evals): avoid overriding judge reasoning by @inickt in #6566
Other
- Add homepage voice agent example by @ShayneP in #6422
- docs: correct krisp noise_suppression_level default to 75 by @detail-app[bot] in #6651
- fix(scripts): type-check for linux on every host OS, matching CI by @biztex in #6623
- bump livekit sdk to 1.1.14 by @theomonnom in #6654
- livekit-agents@1.6.8 by @github-actions[bot] in #6659
New Contributors
- @tulanisahil1-beep made their first contribution in #6534
- @AlvaroBalbin made their first contribution in #6382
- @biztex made their first contribution in #6552
- @Oxygen56 made their first contribution in #6531
- @ajayarora1235 made their first contribution in #6587
- @fxhxdxd made their first contribution in #6583
- @ryanl-cerebras made their first contribution in #6593
- @axelray-dev made their first contribution in #6604
- @arthi-arumugam-git made their first contribution in #6663
- @swayamg20 made their first contribution in #6653
- @captainbanan made their first contribution in #6461
Full Changelog: https://github.com/livekit/agents/compare/livekit-agents@1.6.7...livekit-agents@1.6.8