Skip to main content

SIP and audio streaming transport for AI voice agents (pure Rust)

Project description

Agent Transport

PyPI npm Build Python Build Node Test License: MIT

Transport library (SIP/RTP & Audio Streaming) for voice AI agents to be used with frameworks like LiveKit Agents and Pipecat.

Agent Transport provides signaling and media primitives that AI agent frameworks need to make and receive voice calls. The core is written in Rust for efficient, low-jitter packet processing — audio pacing, RTP handling, and jitter buffering. Framework adapters for LiveKit Agents and Pipecat are provided as drop-in plugins. Bindings in Python and TypeScript/Node.js are also available for other use cases.

Transports

SIP/RTP — Register with any SIP provider, make and receive calls over RTP. G.711 codecs (PCMU/PCMA), DTMF (RFC 2833), NAT traversal (TCP signaling with Via alias, STUN for RTP), hold/unhold, call transfer. No server required, directly connect with telephony providers over SIP like Plivo.

Audio Streaming — Websocket based audio streaming that works with cloud telephony providers like Plivo that support bidirectional audio streaming.

Both transports produce and consume the same AudioFrame format (int16 PCM, 16kHz mono), so agent code works identically regardless of transport.

Framework Adapters

LiveKit Agents

Same AgentSession pipeline -- add ctx.session = session to wire SIP/audio stream transport:

SIP/RTP:

# LiveKit WebRTC                                # Agent Transport SIP/RTP
from livekit.agents import AgentServer,         from agent_transport.sip.livekit import
    JobProcess                                      AgentServer, JobProcess
server = AgentServer()                          server = AgentServer(sip_username=..., sip_password=...)

def prewarm(proc: JobProcess):                  def prewarm(proc: JobProcess):
    proc.userdata["vad"] = silero.VAD.load()        proc.userdata["vad"] = silero.VAD.load()
server.setup_fnc = prewarm                      server.setup_fnc = prewarm

@server.rtc_session()                           @server.sip_session()
async def entrypoint(ctx):                      async def entrypoint(ctx):
    session = AgentSession(                         session = AgentSession(
        vad=ctx.proc.userdata["vad"], ...)              vad=ctx.proc.userdata["vad"], ...)
    await session.start(                            ctx.session = session
        agent=Assistant(),                          await session.start(
        room=ctx.room)                                  agent=Assistant(), room=ctx.room)
cli.run_app(server)                             server.run()

Audio Streaming:

# LiveKit WebRTC                                # Agent Transport AudioStream
from livekit.agents import AgentServer,         from agent_transport.audio_stream.livekit import
    JobProcess                                      AudioStreamServer, JobProcess
server = AgentServer()                          server = AudioStreamServer(listen_addr="0.0.0.0:8765")

def prewarm(proc: JobProcess):                  def prewarm(proc: JobProcess):
    proc.userdata["vad"] = silero.VAD.load()        proc.userdata["vad"] = silero.VAD.load()
server.setup_fnc = prewarm                      server.setup_fnc = prewarm

@server.rtc_session()                           @server.audio_stream_session()
async def entrypoint(ctx):                      async def entrypoint(ctx):
    session = AgentSession(                         session = AgentSession(
        vad=ctx.proc.userdata["vad"], ...)              vad=ctx.proc.userdata["vad"], ...)
    await session.start(                            ctx.session = session
        agent=Assistant(),                          await session.start(
        room=ctx.room)                                  agent=Assistant(), room=ctx.room)
cli.run_app(server)                             server.run()

Full examples: sip_agent.py · sip_multi_agent.py · audio_stream_agent.py · audio_stream_multi_agent.py

See LiveKit SIP Transport docs for recording, Prometheus metrics, outbound API, and full reference.

Pipecat

Same Pipeline — swap transport, everything else stays identical. Audio pacing moves from Python to Rust:

# Pipecat + Plivo (Python audio pacing)          # Agent Transport (Rust audio pacing)
from pipecat.serializers.plivo import             from agent_transport.audio_stream.pipecat \
    PlivoFrameSerializer                              .serializers.plivo import PlivoFrameSerializer
from pipecat.transports.websocket.fastapi import  from agent_transport.audio_stream.pipecat \
    FastAPIWebsocketTransport                         .transports.websocket import WebsocketServerTransport

serializer = PlivoFrameSerializer(                serializer = PlivoFrameSerializer(
    stream_id=..., call_id=...,                       auth_id=..., auth_token=...)
    auth_id=..., auth_token=...)                  server = WebsocketServerTransport(
transport = FastAPIWebsocketTransport(                serializer=serializer)
    websocket=ws, params=Params(
        serializer=serializer))                   @server.handler()
                                                  async def run_bot(transport):
pipeline = Pipeline([                                 pipeline = Pipeline([
    transport.input(), stt, llm, tts,                     transport.input(), stt, llm, tts,
    transport.output()])                                   transport.output()])
task = PipelineTask(pipeline)                         task = PipelineTask(pipeline)

@transport.event_handler("on_client_connected")       @transport.event_handler("on_client_connected")
async def on_connected(transport, client):            async def on_connected(transport):
    await task.queue_frames([LLMRunFrame()])               await task.queue_frames([LLMRunFrame()])

await PipelineRunner().run(task)                      await PipelineRunner().run(task)

                                                  server.run()

Also available for SIP/RTP: from agent_transport.sip.pipecat import SipTransport

Full examples: audio_stream_agent.py · sip_agent.py

Installation

Python

For LiveKit Agents

pip install "agent-transport[livekit]"

For Pipecat

pip install "agent-transport[pipecat]"

Minimum versions: livekit-agents>=1.5, pipecat-ai>=0.0.108

Node.js

For LiveKit Agents

npm install agent-transport @livekit/agents @livekit/rtc-node

Building from source

Examples

Example Description
livekit/sip_agent.py SIP voice agent with tool calling, turn detection, preemptive generation
livekit/sip_agent.ts TypeScript SIP agent with tool calling, turn detection, metrics
livekit/sip_multi_agent.py Multi-agent with greeter -> sales/support handoff and tool calling
livekit/sip_multi_agent.ts TypeScript multi-agent with class inheritance and llm.handoff()
livekit/audio_stream_agent.py LiveKit agent over Plivo audio streaming
livekit/audio_stream_agent.ts TypeScript agent over Plivo audio streaming
livekit/audio_stream_multi_agent.py Audio streaming multi-agent with handoff and tool calling
livekit/audio_stream_multi_agent.ts TypeScript audio streaming multi-agent
pipecat/sip_agent.py Pipecat pipeline over SIP/RTP with VAD
pipecat/sip_multi_agent.py Pipecat multi-agent with greeter → sales/support handoff
pipecat/audio_stream_agent.py Pipecat over Plivo audio streaming with Rust recorder + mixer
pipecat/audio_stream_multi_agent.py Pipecat audio streaming multi-agent with handoff
cli/phone.py Interactive CLI softphone with mic/speaker, DTMF, mute, hold/unhold

See also: Feature Flags & CLI Phone docs

Releasing

Publishing is label-driven. Bump the version, add release-python-sdk or release-node-sdk label to your PR, and merge — CI handles the rest. Python and Node releases are independent.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

agent_transport-0.1.10-cp39-abi3-win_arm64.whl (5.7 MB view details)

Uploaded CPython 3.9+Windows ARM64

agent_transport-0.1.10-cp39-abi3-win_amd64.whl (5.8 MB view details)

Uploaded CPython 3.9+Windows x86-64

agent_transport-0.1.10-cp39-abi3-manylinux_2_28_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ x86-64

agent_transport-0.1.10-cp39-abi3-manylinux_2_28_aarch64.whl (6.0 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

agent_transport-0.1.10-cp39-abi3-macosx_11_0_arm64.whl (5.8 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

agent_transport-0.1.10-cp39-abi3-macosx_10_12_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file agent_transport-0.1.10-cp39-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for agent_transport-0.1.10-cp39-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 af0ed75f7724bf453bffe01332e6ffc575a021763ff30f59fadb4e7ac58108f1
MD5 9d2528df610e814c78cfb38055dd3b2c
BLAKE2b-256 86c29771d7ae8d462e24fdd2ebb4bfe40b5d7126b9f37f8162050fc26600000c

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_transport-0.1.10-cp39-abi3-win_arm64.whl:

Publisher: publish-python.yml on plivo-labs/agent-transport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agent_transport-0.1.10-cp39-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for agent_transport-0.1.10-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 28c7fa1a8634cd72cff81d205500ccdf998b7a8907cfabfc711773458281062f
MD5 841d853549c4f931ca87b911b360e30a
BLAKE2b-256 cc09047c1b863b0c2d868ff1550110324be85535f4e54f894d4389c1e8a2ef18

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_transport-0.1.10-cp39-abi3-win_amd64.whl:

Publisher: publish-python.yml on plivo-labs/agent-transport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agent_transport-0.1.10-cp39-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for agent_transport-0.1.10-cp39-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 28715b1062605b79b612275be8bb9bff14b3f3ea08793cfcbc5ea9b303513cfa
MD5 d1e54a309a48c4358c252f2837db2081
BLAKE2b-256 fb87db2d2d2b08fb627ec0e9969b089aa02f1c7cde2d9ff2b4a3440b9c374c4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_transport-0.1.10-cp39-abi3-manylinux_2_28_x86_64.whl:

Publisher: publish-python.yml on plivo-labs/agent-transport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agent_transport-0.1.10-cp39-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for agent_transport-0.1.10-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cec7d5a980588392673f72dce8b749692f1484c0729a93446fbdd05782413500
MD5 d4d4c47dd3f97930027824b84ed54072
BLAKE2b-256 1578b251681f52348f0a6e2154413fd08b2f47e9edba49069be16209460e6c0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_transport-0.1.10-cp39-abi3-manylinux_2_28_aarch64.whl:

Publisher: publish-python.yml on plivo-labs/agent-transport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agent_transport-0.1.10-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for agent_transport-0.1.10-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 10b688207a757531cddcde6c7e21a2167a1f12621cccff62bd76e69b3e7a18a0
MD5 5c3eee5d0ffc017c78de0f0a5b28dec0
BLAKE2b-256 680797f6f1b6efc4ce7bfae9ed983fcd991ca6159672f7363eec98e1473d54bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_transport-0.1.10-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: publish-python.yml on plivo-labs/agent-transport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agent_transport-0.1.10-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for agent_transport-0.1.10-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6762395f42fdca2a3e774dd738c11b76b221ee0590a3db302eb6954cbbd4480f
MD5 72649858317ff043e6ae99670db5345a
BLAKE2b-256 481ee42aca0db287ae152e6e6127e6dff75e48f48f8abfd73a22d371d95fe8a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_transport-0.1.10-cp39-abi3-macosx_10_12_x86_64.whl:

Publisher: publish-python.yml on plivo-labs/agent-transport

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page