Skip to main content

LiveKit instrumentation

LiveKit span processor, egress recording to R2, and platform.ref.* attributes for Parlot session resolve.

Integration checklist

Two steps are required for full Parlot behavior.

1. configure() at import (required)

Call before constructing AgentSession — patches AgentSession.__init__, sets up OTLP export to PARLOT_ENDPOINT, and installs turn/handoff/close event hooks.

from parlot.instrumentation.livekit import configure

configure()

Optional: agent_id= for canonical deployment identity and version= for deployment version. See Concepts.

Reliable patterns for LiveKit job processes:

configure(agent_id="restaurant-agent", version="0.1.0")

or set PARLOT_AGENT_VERSION=0.1.0 at deploy/runtime.

2. await ctx.connect() before session.start() (required)

async def entrypoint(ctx: JobContext):
await ctx.connect()

session = AgentSession(...)
await session.start(agent=..., room=ctx.room)

Without ctx.connect() you may still see basic telemetry if you pass room=ctx.room, but you will not get room audio recording or a reliable room_sid for UI linking.

Environment

Set PARLOT_ENDPOINT and PARLOT_API_KEY (org-scoped; mint in Settings → API Keys).

Recording policy precedence: job metadata → configure(record=…) → Settings → Recording via bootstrap.

Optional: PARLOT_CAPTURE_CONTENT=false to suppress prompt/response text in spans.

Deeper guide

Recording, webhooks, bootstrap, and platform settings: LiveKit integration.