Skip to main content
Using an agent? Install the Latitude skills and let it handle the setup below. latitude-setup instruments your app or agent harness, verifies traces arrive, creates a temporary account if you don’t have one yet (no signup), and ends by building your first Artifact.

Overview

This guide shows you how to send traces from a LiveKit Agents application to Latitude. No Latitude account yet? Your agent can create a temporary one and do this whole setup with the latitude-setup skill, no signup. LiveKit Agents ships with built-in OpenTelemetry support and owns its own tracer provider. Instead of bootstrapping telemetry with the Latitude class, you attach a LatitudeSpanProcessor to LiveKit’s provider — Latitude then receives the same spans LiveKit emits for LLM, agent, and tool activity. This works the same way for the Python (livekit-agents) and Node.js (@livekit/agents) SDKs.
You’ll keep building your LiveKit agent exactly as you do today. Latitude observes the LLM spans the framework already produces.

Requirements

  • A Latitude account and API key, or none yet: your agent can create a temporary account with the latitude-setup skill, no signup
  • A Latitude project slug
  • A project that uses LiveKit Agents (livekit-agents or @livekit/agents)

Steps

1

Install

2

Register the span processor

Build a tracer provider, add the LatitudeSpanProcessor, and hand the provider to LiveKit inside your entrypoint.

STT → LLM → TTS

LiveKit Agents runs the full voice pipeline — speech-to-text, an LLM turn, and text-to-speech — inside AgentSession. LiveKit emits OpenTelemetry spans for each stage; Latitude receives them through LatitudeSpanProcessor.

What gets traced

By default, Latitude’s smart filter forwards LLM spans only. To include STT, TTS, and VAD spans in every trace, disable the filter when creating the processor:
LiveKit serializes conversation content in lk.* attributes. Latitude parses those alongside gen_ai.* metadata — STT transcripts in audio_content items are normalized to text parts.
Using ElevenLabs as the TTS/STT plugin inside LiveKit? Instrument LiveKit on this page — not the ElevenLabs Agents guide.

What you get

LLM turns (default)

LiveKit’s LLM spans carry both gen_ai.* metadata and the conversation content in custom lk.* attributes. Latitude parses both, so each LLM turn shows up with:
  • Model and provider — from gen_ai.request.model / gen_ai.provider.name
  • Token usage and latency — input/output tokens, time-to-first-token
  • Input messages — the chat context (system prompt, user turns, prior tool calls and results)
  • Output messages — the assistant response text and any tool calls the model emitted
  • Tool definitions — the function tools available to the agent
Audio in the chat context (e.g. STT transcripts in audio_content items) is normalized to text parts in Latitude.

Seeing Your Traces

Once connected, traces appear automatically in Latitude:
  1. Open your project in the Latitude dashboard
  2. Each agent turn shows the LLM call with its input/output conversation
  3. Token usage and latency are aggregated at every level

See what was captured

Once a real run has landed, your agent builds your first Artifact: a single HTML page, in the Latitude look, with everything the telemetry captured from that session: model calls, tool calls, tokens, cost, timing, and the conversation as the model saw it. It is the fastest way to check the integration end to end and to see what Latitude will have to work with. The latitude-setup skill does this as its last step from its bundled first-artifact.html template, filling the page with the values the latitude CLI returns for the trace, and adds a Claim your workspace button when the account is temporary. If you set things up by hand, the same template and instructions live in the skills repo. Prompt, if you need to ask for it: