Agents

LiveWire

LiveKit-compatible agents powered by SignalWire infrastructure

View as MarkdownOpen in Claude

LiveWire is a compatibility layer that lets developers familiar with livekit-agents use the same class and function names while running on SignalWire infrastructure. Change your import path and your existing code runs on SignalWire with no other modifications.

# Before (livekit-agents)
from livekit.agents import Agent, AgentSession, function_tool
# After (SignalWire LiveWire)
from signalwire.livewire import Agent, AgentSession, function_tool

SignalWire’s control plane handles STT, TTS, VAD, and turn detection automatically. Pipeline plugin parameters (stt, tts, vad, turn_detection) are accepted for API compatibility but are no-ops. LiveWire logs an informational message the first time each no-op parameter is used.

Quick Start

from signalwire.livewire import (
Agent,
AgentSession,
AgentServer,
JobContext,
JobProcess,
function_tool,
run_app,
)
@function_tool
def lookup_order(order_id: str) -> str:
"""Look up the status of a customer order."""
return f"Order {order_id} shipped yesterday."
server = AgentServer()
@server.rtc_session()
async def entrypoint(ctx: JobContext):
agent = Agent(
instructions="You are a helpful order-status assistant.",
tools=[lookup_order],
)
session = AgentSession()
await session.start(agent, room=ctx.room)
run_app(server)

Namespace Aliases

LiveWire provides namespace objects that mirror common livekit-agents import paths:

AliasContentsMirrors
voiceAgent, AgentSessionlivekit.agents.voice
llm_nstool (alias for function_tool), ToolError, ChatContextlivekit.agents.llm
cli_nsrun_applivekit.agents.cli
inferenceSTT, LLM, TTSlivekit.agents.inference
from signalwire.livewire import voice, llm_ns, inference
agent = voice.Agent(instructions="Hello")
session = voice.AgentSession(llm=inference.LLM(model="gpt-4o"))

Learn More