We recommend using Tavus’s Full Pipeline in its entirety for the lowest latency and most optimized multimodal experience. Integrations like LiveKit Agent or Pipecat only provide rendering, while our Full Pipeline includes perception, turn-taking, and rendering for complete conversational intelligence. The Livekit integration also does not support interactions (“app messages”) like echo messages.

Tavus enables AI developers to create realistic video avatars powered by state-of-the-art speech synthesis, perception, and rendering pipelines. Through its integration with the LiveKit Agents application, you can seamlessly add conversational avatars to real-time voice AI systems.

Prerequisites

Make sure you have the following before starting:

  • LiveKit Voice Assistant Python App

Integration Guide

1

Step 1: Setup and Authentication

  1. Install the plugin from PyPI:
pip install "livekit-agents[tavus]~=1.0"
  1. Set TAVUS_API_KEY in your .env file.
2

Step 2: Configure Replica and Persona

  1. Create a persona with LiveKit support using the Tavus API:
curl --request POST \
  --url https://tavusapi.com/v2/personas \
  -H "Content-Type: application/json" \
  -H "x-api-key: <your-api-key>" \
  -d '{
  "persona_name": "Customer Service Agent",
  "pipeline_mode": "echo",
  "layers": {
    "transport": {
            "transport_type": "livekit"
    }
  }
}'
  • Replace <api_key> with your actual Tavus API key.
  • Set pipeline_mode to echo.
  • Set transport_type to livekit.
  1. Save your the persona_id.
  2. Choose a replica from the Stock Library or browse available options on the Tavus Platform.

We recommend using Phoenix-3 PRO Replicas, which are optimized for low-latency, real-time applications.

3

Step 3: Add AvatarSession to AgentSession

In your LiveKit Python app, create a tavus.AvatarSession alongside your AgentSession:

from livekit import agents
from livekit.agents import AgentSession, RoomOutputOptions
from livekit.plugins import tavus

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

    session = AgentSession(
        # Add STT, LLM, TTS, and other components here
    )

    avatar = tavus.AvatarSession(
        replica_id="your-replica-id",
        persona_id="your-persona-id",
        # Optional: avatar_participant_name="Tavus-avatar-agent"
    )

    await avatar.start(session, room=ctx.room)

    await session.start(
        room=ctx.room,
        room_output_options=RoomOutputOptions(
            audio_enabled=False  # Tavus handles audio separately
        )
    )
ParameterDescription
replica_id (string)ID of the Tavus replica to render and speak through
persona_id (string)ID of the persona with the correct pipeline and transport configuration
avatar_participant_name (string, optional)Display name for the avatar participant in the room. Defaults to Tavus-avatar-agent

Try out the integration using this sample app.