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

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

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.5-cp39-abi3-win_arm64.whl (5.7 MB view details)

Uploaded CPython 3.9+Windows ARM64

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

Uploaded CPython 3.9+Windows x86-64

agent_transport-0.1.5-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.5-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.5-cp39-abi3-macosx_11_0_arm64.whl (5.7 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

agent_transport-0.1.5-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.5-cp39-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for agent_transport-0.1.5-cp39-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 9c52ffb3a919fd3cc4f1be10e3f6019f5541908af6be85aa7661ed3877c6923e
MD5 0cbd5dc7f48a28ead63c3d4b4b82eefb
BLAKE2b-256 7668ac790bdaa448f58ea05ef05673e98a5bce87aab262824eac1ca5115fe6d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_transport-0.1.5-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.5-cp39-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for agent_transport-0.1.5-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 92b47ea7f6aea297c746e80efb424bb993b15ada69bc095f01454a355664fbb4
MD5 00ac2ce2285067d79298c1f6cf3d0805
BLAKE2b-256 bb74c9f0578d362c809eda3af28bfe392023b240daca990e75dff48e55565611

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_transport-0.1.5-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.5-cp39-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for agent_transport-0.1.5-cp39-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 44ab91e879f31dfd158d26fc93df1cc6792959bddaffdc3cd84a069649df43b8
MD5 139bcaff95ccc24fc8f405fbef4215e3
BLAKE2b-256 626c4e2ce7c14847c762b61729c94a2b1bc3ba6a5b3dba2173f6867ead2a1962

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_transport-0.1.5-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.5-cp39-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for agent_transport-0.1.5-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e31630309b99e1750b98da6a766449fb96d38d435ee7d969b8d7955515b11da3
MD5 a9fee0c1e4f931ae5f858992441589af
BLAKE2b-256 62f77c3cf01885975ebd7fc2116cf24cb9443114162c09b7cef8e973602e2c8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_transport-0.1.5-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.5-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for agent_transport-0.1.5-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 38d5f91132ed37b4c3a243980129d02a13d257a4d6732815e4c0ca4e34a788a2
MD5 73cae2032c34e35c20b5269ae54f2975
BLAKE2b-256 d027585d273753ccc93bedd122dc1e961aef2a88e6a80cd4c8f711c9519d66dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_transport-0.1.5-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.5-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for agent_transport-0.1.5-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 28938e24b9b2a63d296f8269bf09e89fff223524514096bca0ef75019a3dabac
MD5 f2d3ef4fe72cfd3224eb447c3494213f
BLAKE2b-256 87058e4a573b7722a04b898e15288f8f1cf36e3738778e20c1602ea0c24c5f57

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_transport-0.1.5-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