This project uses uv as the package manager. All commands run from the repository root.
make install # Install all dependencies with dev extras (uv sync --all-extras --dev)make format # Format code with ruff
make lint # Run ruff linter
make lint-fix # Run ruff linter and auto-fix issues
make type-check # Run mypy type checker (strict mode)
make check # Run all checks (format-check, lint, type-check)uv run pytest # Run all tests
uv run pytest tests/test_tools.py # Run a single test file
uv run pytest tests/test_tools.py -k "test_name" # Run specific test
cd tests && make unit-tests # Run unit tests that doesn't require cloud accountspython myagent.py console # Terminal mode with local audio I/O (no server needed)
python myagent.py dev # Development mode with hot reload (connects to LiveKit)
python myagent.py start # Production mode
python myagent.py connect --room <room> --identity <id> # Connect to existing roommake link-rtc # Link to local python-rtc with downloaded FFI artifacts
make link-rtc-local # Build and link local rust SDK from source (requires cargo)
make unlink-rtc # Restore PyPI version
make status # Show current linking status
make doctor # Check development environment health- AgentServer (formerly known as Worker) (
worker.py): Main process coordinating job scheduling, launches agents for user sessions - JobContext (
job.py): Context provided to entrypoint functions for connecting to LiveKit rooms - Agent (
voice/agent.py): LLM-based application with instructions, tools, and model integrations - AgentSession (
voice/agent_session.py): Container managing interactions between agents and end users
livekit-agents/livekit/agents/
βββ voice/ # Core voice agent: AgentSession, Agent, room I/O, transcription
βββ llm/ # LLM integration: chat context, tool definitions, MCP support
βββ stt/ # Speech-to-text with fallback and stream adapters
βββ tts/ # Text-to-speech with fallback and stream pacing
βββ ipc/ # Inter-process communication for distributed job execution
βββ cli/ # CLI commands (console, dev, start, connect)
βββ inference/ # Remote model inference (LLM, STT, TTS)
βββ telemetry/ # OpenTelemetry traces and Prometheus metrics
βββ utils/ # Audio processing, codecs, HTTP, async utilities
livekit-plugins/ # 50+ provider plugins (openai, anthropic, google, deepgram, etc.)
tests/ # Test suite with mock implementations (fake_stt.py, fake_vad.py)
examples/ # Example agents and use cases
Plugins in livekit-plugins/ provide STT, TTS, LLM, and specialized services. Each plugin is a separate package following the pattern livekit-plugins-<provider>. Plugins register via the Plugin base class in plugin.py.
STT, TTS, LLM, Realtime models have provider-agnostic interfaces with:
- Base classes defining the interface (
stt/stt.py,tts/tts.py,llm/llm.py,llm/realtime.py) - Fallback adapters for resilience
- Stream adapters for different streaming patterns
- Worker receives job request from LiveKit server
- Job is dispatched to process/thread pool (
ipc/proc_pool.py) - Entrypoint function receives
JobContext - Agent connects to room via
ctx.connect() AgentSessionmanages the conversation lifecycle
LIVEKIT_URL: WebSocket URL of LiveKit serverLIVEKIT_API_KEY: API key for authenticationLIVEKIT_API_SECRET: API secret for authentication- Provider-specific keys:
OPENAI_API_KEY,DEEPGRAM_API_KEY,ANTHROPIC_API_KEY, etc.
- Line length: 100 characters
- Python 3.9+ compatibility required
- Google-style docstrings
- Strict mypy type checking enabled
- Use
make checkandmake fixbefore committing