livekit-agents@1.8.0
livekit/agentslivekit-agents@1.8.0Sep 5, 2026by tinalenguyen
AI Summary
A major update introducing full OpenTelemetry GenAI semantic conventions, in-process PII stripping, and comprehensive improvements across STT and TTS providers including ElevenLabs, AWS, and Google.
Key Highlights
- Full OpenTelemetry GenAI semantic conventions support for Langfuse and Datadog.
- In-process PII stripping ensures content never reaches third-party exporters.
- New plugins: Vakyam TTS, AssemblyAI universal-3-6-pro, and Phonic tool exports.
- Removed deprecated Hedra avatar plugin.
- New metrics for token usage and operation duration.
Breaking Changes
- Conversation content events (gen_ai.user.message, etc.) removed in favor of attributes.
- Realtime inference moved from 'agent_turn' to a new 'realtime_inference' child span.
- gen_ai.provider.name is normalized to registry spelling.
- Custom llm_node attribution only applies if the LLM served the request.
- PII stripping now happens in-process before every exporter.
- gen_ai.usage.input_cached_tokens behavior reversed.
- telemetry._chat_ctx_to_otel_events() removed.
New Features
- OTel GenAI semantic conventions and metrics.
- Configurable PII stripping via environment variables or API.
- New request/response and usage attributes.
- Twilio connector warm transfer feature.
- New STT models (AssemblyAI universal-3-6-pro).
Full Release Notes
## OpenTelemetry Changes (#7104)
Spans, metrics, and logs now follow the OTel GenAI semantic conventions, so
Langfuse, Datadog Agent Observability, and other GenAI-aware backends read
LiveKit traces natively. PII filtering also moved in-process.
**Migration Notes**
| Before | After |
|---|---|
| event `gen_ai.system.message` | attribute `gen_ai.system_instructions` |
| events `gen_ai.user.message`, `gen_ai.assistant.message`, `gen_ai.tool.message` | attribute `gen_ai.input.messages` |
| event `gen_ai.choice` (`role`/`content`/`tool_calls`) | attributes `gen_ai.output.messages` + `gen_ai.response.finish_reasons` |
| realtime `gen_ai.*` on the `agent_turn` span | on the new `realtime_inference` child span |
| realtime `gen_ai.operation.name = "chat"` | `= "generate_content"` |
| `gen_ai.provider.name = "api.openai.com"`, `"AWS Bedrock"`, `"google"` | `"openai"`, `"aws.bedrock"`, `"gcp.gen_ai"` |
| custom `llm_node` always tagged with the configured model/provider | tagged only when that LLM served the call; otherwise the node span records the convention itself |
| PII stripped at LiveKit Cloud's collector | stripped in-process; under project redaction content never reaches any exporter, Cloud included |
| `telemetry._chat_ctx_to_otel_events(chat_ctx)` | `telemetry.gen_ai.to_system_instructions()` / `to_input_messages()` / `to_output_messages()` |
| `telemetry.utils._redaction_enabled()` | `telemetry.utils.redaction_enabled(span_attributes=None)` |
**Breaking**
- Conversation content is no longer emitted as span events — `gen_ai.system.message`,
`gen_ai.user.message`, `gen_ai.assistant.message`, `gen_ai.tool.message` and
`gen_ai.choice` are gone, replaced by the attributes in the table above (JSON,
part-based format). Dashboards and processors reading the events see nothing.
- Realtime inference moved off `agent_turn` onto a new `realtime_inference` child span,
so queries reading realtime token usage from `agent_turn` return nothing. Its
`gen_ai.operation.name` also changed from `chat` to `generate_content`.
- `gen_ai.provider.name` is normalized to the registry spelling. Providers outside the
registry are unchanged. Update any group-by on the old values.
- A custom `llm_node` is no longer credited with the configured model and provider
unless that LLM actually served the request; a node calling a third-party engine is
left unattributed and records the convention on its own span instead.
- When the project mandates redaction, content attributes are now stripped in-process
before every exporter, LiveKit Cloud included — previously the local pass scrubbed
only exception details and Cloud's collector handled the rest.
- `gen_ai.usage.input_cached_tokens` is emitted again on the pipeline path (reversing
#6852) and reasoning tokens go out under both `gen_ai.usage.reasoning.output_tokens`
and `gen_ai.usage.reasoning_tokens`. A backend summing both spellings double-counts.
- `telemetry._chat_ctx_to_otel_events()` removed; `telemetry.utils._redaction_enabled()`
is now `redaction_enabled(span_attributes=None)`.
**Added**
- Request/response attributes: `gen_ai.request.stream`, `gen_ai.output.type`,
`gen_ai.conversation.id`, `gen_ai.response.{id,model,finish_reasons,time_to_first_chunk}`.
- Usage attributes: `gen_ai.usage.cache_write.input_tokens`, `.reasoning.output_tokens`
and the per-modality `.{text,audio,image}.*` counts.
- `execute_tool` spans carry `gen_ai.tool.{name,type,call.id,call.arguments,call.result,description}`;
turns carry `gen_ai.agent.name`, sessions `gen_ai.workflow.name`.
- `error.type` on failures, set even when redaction is on.
- Metrics `gen_ai.client.token.usage`, `gen_ai.client.operation.duration`,
`gen_ai.client.operation.time_to_first_chunk`, `gen_ai.invoke_agent.duration`,
`gen_ai.execute_tool.duration`, alongside the existing `lk.agents.*`.
- `OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=0` (or
`telemetry.gen_ai.set_capture_content(False)`) omits message payloads, tool
definitions and tool arguments/results. Content capture is on by default.
- `set_tracer_provider(..., allow_pii=False)` / `LIVEKIT_TELEMETRY_ALLOW_PII=0` strips
conversational content in-process before third-party exporters. PII is allowed by
default.
## What's Changed
* fix(llm): tolerate unparseable stored tool-call arguments in Anthropic/Google/AWS formatters by @PranavMishra28 in https://github.com/livekit/agents/pull/6321
* aws: omit temperature/topP for Bedrock models that reject them by @rrfunde in https://github.com/livekit/agents/pull/6947
* fix(tests): settle genai client finalizers in the test that owns them by @helin-mktech in https://github.com/livekit/agents/pull/6882
* fix(gradium): update parameters by @timpratim in https://github.com/livekit/agents/pull/7014
* fix(xai): reject FileSearch plus collections_search or file_search by @mehrdroid in https://github.com/livekit/agents/pull/6998
* fix(aws): import AsyncBedrockRuntimeClient for bedrock-runtime 0.10+ by @libaojiang in https://github.com/livekit/agents/pull/7002
* chore: remove unused segment_uuid and speech_uuid helpers by @detail-app[bot] in https://github.com/livekit/agents/pull/7021
* fix: handle RoomIO microphone track replacement by @chenghao-mou in https://github.com/livekit/agents/pull/6744
* fix(openai): handle incomplete Responses events by @dawNotPoi in https://github.com/livekit/agents/pull/7024
* fix: correctly handle SIGTERM/SIGINT even when sync functions block by @davidzhao in https://github.com/livekit/agents/pull/7034
* avoid shutting down third-party otel providers by @davidzhao in https://github.com/livekit/agents/pull/7033
* fix(mistralai): support assistant-ending chat contexts by @mikemikimike in https://github.com/livekit/agents/pull/7036
* feat(deepgram): add numerals, profanity_filter, and redact options to STTv2 (Flux) by @vadimatmurphy in https://github.com/livekit/agents/pull/6993
* fix(openai): close the STT's websocket connection pool by @Rehansanjay in https://github.com/livekit/agents/pull/7023
* fix: retry connection pool prewarm after failure by @jstar0 in https://github.com/livekit/agents/pull/6969
* fix(plugins): redact API keys from rejected websocket handshakes by @aniketwaghh in https://github.com/livekit/agents/pull/7032
* fix(elevenlabs): don't forward re-sent partial transcripts by @captainbanan in https://github.com/livekit/agents/pull/6922
* fix: transcription_delay reported as ~0 with the default VAD by @davidzhao in https://github.com/livekit/agents/pull/6557
* feat(ultravox): implement say() via ForcedAgentMessage by @ssgutierrez42 in https://github.com/livekit/agents/pull/7001
* fix: disable default AGC with noise cancellation by @chenghao-mou in https://github.com/livekit/agents/pull/7064
* refactor(hotel_receptionist): split scenarios into scoped and open-ended files by @u9g in https://github.com/livekit/agents/pull/7065
* feat(google): support custom prompt config for STT chirp_3 by @kechako in https://github.com/livekit/agents/pull/7055
* fix(simplismart): close the streams the STT collects by @Rehansanjay in https://github.com/livekit/agents/pull/7012
* feat(metrics): expose reasoning_tokens in LLM metrics and traces by @s-hamdananwar in https://github.com/livekit/agents/pull/7068
* docs: add --audio_eot to documented CI unit gate command by @detail-app[bot] in https://github.com/livekit/agents/pull/7070
* fix(voice): flush recorder resampler tails at run end by @dajiaohuang in https://github.com/livekit/agents/pull/7047
* fix(aws): pin the CRT transport for Nova Sonic by @longcw in https://github.com/livekit/agents/pull/7076
* fix(voice): cancel parked preemptive generation before pausing the activity by @uuzzrm in https://github.com/livekit/agents/pull/6865
* fix(avatar): recover DataStreamAudioReceiver from a lost stream trailer by @jasper-face-up in https://github.com/livekit/agents/pull/7007
* Bump livekit 1.1.17 by @cnderrauber in https://github.com/livekit/agents/pull/7078
* feat: twilio connector warm transfer by @anunaym14 in https://github.com/livekit/agents/pull/6283
* fix: resolve transcript-only amd greetings at eot by @chenghao-mou in https://github.com/livekit/agents/pull/7026
* fix(cartesia): ignore stale frames from previous contexts on pooled websockets by @Panmax in https://github.com/livekit/agents/pull/7081
* feat(elevenlabs): add secondary_languages for Scribe v2 realtime STT by @tinalenguyen in https://github.com/livekit/agents/pull/7086
* fix(llm): keep falsy tool return values in make_function_call_output by @Osamaali313 in https://github.com/livekit/agents/pull/6551
* fix(google): don't let closing the TTS input generator mask the real error by @avionicharshit-byte in https://github.com/livekit/agents/pull/7041
* fix(aws): restore Transcribe STT on transcribe-streaming 0.11 by @longcw in https://github.com/livekit/agents/pull/7094
* fix(google): route Gemma 4 thinking through thinking_level by @longcw in https://github.com/livekit/agents/pull/7095
* fix(inworld): keep a reference to the prewarm task and cancel it on close by @Rehansanjay in https://github.com/livekit/agents/pull/7050
* chore(deps): update dependency nltk to v3.10.3 [security] by @renovate[bot] in https://github.com/livekit/agents/pull/7091
* feat(assemblyai): add universal-3-6-pro streaming model by @dlange-aai in https://github.com/livekit/agents/pull/7100
* Remove deprecated Hedra avatar plugin by @bcherry in https://github.com/livekit/agents/pull/7084
* feat(phonic): add update_options for mid-session config changes by @arunwpm-work in https://github.com/livekit/agents/pull/7089
* chore(lint): enable RUF006 so dangling asyncio tasks fail CI by @Rehansanjay in https://github.com/livekit/agents/pull/7054
* tests: stop room tests hanging on macOS by @longcw in https://github.com/livekit/agents/pull/6857
* feat: add Vakyam TTS plugin by @Adithya-Sakaray in https://github.com/livekit/agents/pull/7009
* fix(hotel_receptionist): stop a restaurant modification silently resizing the party by @u9g in https://github.com/livekit/agents/pull/6806
* chore(inference): remove ElevenLabs models after the gateway brownout by @chenghao-mou in https://github.com/livekit/agents/pull/7106
* feat(assemblyai): surface end_of_turn_confidence on SpeechData.metadata by @gsharp-aai in https://github.com/livekit/agents/pull/7107
* fix(voice): stop the recorder writing over audio still in the resampler by @longcw in https://github.com/livekit/agents/pull/7079
* fix: timestamp say transcripts at speech start by @chenghao-mou in https://github.com/livekit/agents/pull/7110
* fix: restore endpointing overlap when agent speech resumes by @chenghao-mou in https://github.com/livekit/agents/pull/6939
* fix: exclude agent speech from dynamic endpointing pauses by @chenghao-mou in https://github.com/livekit/agents/pull/7061
* fix: preserve forkserver copy-on-write sharing by @chenghao-mou in https://github.com/livekit/agents/pull/7120
* feat(phonic): export LiveKit tools for the Responses API by @elizabeth-phonic in https://github.com/livekit/agents/pull/7112
* fix: release stale transcript gates and playout pauses by @chenghao-mou in https://github.com/livekit/agents/pull/7083
* fix: restore speaking state when releasing playout pause by @chenghao-mou in https://github.com/livekit/agents/pull/7087
* feat(telemetry): full OTel GenAI semantic conventions + in-process PII stripping by @theomonnom in https://github.com/livekit/agents/pull/7104
* livekit-agents@1.8.0 by @github-actions[bot] in https://github.com/livekit/agents/pull/7123
## New Contributors
* @PranavMishra28 made their first contribution in https://github.com/livekit/agents/pull/6321
* @rrfunde made their first contribution in https://github.com/livekit/agents/pull/6947
* @helin-mktech made their first contribution in https://github.com/livekit/agents/pull/6882
* @timpratim made their first contribution in https://github.com/livekit/agents/pull/7014
* @mehrdroid made their first contribution in https://github.com/livekit/agents/pull/6998
* @libaojiang made their first contribution in https://github.com/livekit/agents/pull/7002
* @dawNotPoi made their first contribution in https://github.com/livekit/agents/pull/7024
* @Rehansanjay made their first contribution in https://github.com/livekit/agents/pull/7023
* @jstar0 made their first contribution in https://github.com/livekit/agents/pull/6969
* @aniketwaghh made their first contribution in https://github.com/livekit/agents/pull/7032
* @dajiaohuang made their first contribution in https://github.com/livekit/agents/pull/7047
* @jasper-face-up made their first contribution in https://github.com/livekit/agents/pull/7007
* @Osamaali313 made their first contribution in https://github.com/livekit/agents/pull/6551
* @avionicharshit-byte made their first contribution in https://github.com/livekit/agents/pull/7041
* @Adithya-Sakaray made their first contribution in https://github.com/livekit/agents/pull/7009
* @elizabeth-phonic made their first contribution in https://github.com/livekit/agents/pull/7112
**Full Changelog**: https://github.com/livekit/agents/compare/livekit-agents@1.7.1...livekit-agents@1.8.0