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

Uploaded CPython 3.9+Windows ARM64

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

Uploaded CPython 3.9+Windows x86-64

agent_transport-0.1.8-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.8-cp39-abi3-manylinux_2_28_aarch64.whl (5.9 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.28+ ARM64

agent_transport-0.1.8-cp39-abi3-macosx_11_0_arm64.whl (5.7 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

agent_transport-0.1.8-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.8-cp39-abi3-win_arm64.whl.

File metadata

File hashes

Hashes for agent_transport-0.1.8-cp39-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 0d7b639e33f3db165741c94a0bc8cd4a2df0f8e8ca17261f8c415d6c3a1da085
MD5 3d4bc0ccc15a076e018e72769b80ff03
BLAKE2b-256 edcf10769ec8016aa9254f0bfeb4c87e5c88eb3d7479171b1822bf9d5120230b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for agent_transport-0.1.8-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 a95fccfcbf16b1e23ac3fec4ac81f7275a2339cdc71d92ae20b8e8a6cec11ab8
MD5 543417b05470b93dda29624ca8669a1e
BLAKE2b-256 a0af15bdccfeb34c5d58833c42f3b82ff9049704b587a3ecac40c1d040a8a08c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for agent_transport-0.1.8-cp39-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c2e576aef9dca58b021ba7b370b78748d4ae951b65624258d5582387f0d03507
MD5 7eaa5ea421a01ffffcdf035d20968d55
BLAKE2b-256 e10a989af6ff966e089f4afaf579f995a491d8acdb74766db592567fb46b26df

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for agent_transport-0.1.8-cp39-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 545fb1341afcab806553a21508d367b9e1477f469fda3082ba0ad2b7beb6aed2
MD5 2e4e224b6dedfa0652c97c580945ef55
BLAKE2b-256 2acd2f23d66a637cd545d9d19d48821342780f79bafdc152e2371514a9b984fa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for agent_transport-0.1.8-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5b4515fcbf9c208846b74881cefe6faa8132a4329443f8354f78f1cea5e5c59c
MD5 636d4f8c4b8853fcbf43f7b92fcd68d9
BLAKE2b-256 184c8e56c178ca50d9659000cb60bb684ed95da5a327c563ec1dbdf36feb77d4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for agent_transport-0.1.8-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 76909a37461d5db52d9638c12f9f77952a6946f1d9bb17e75da7582c5f1a936e
MD5 4c9f2265f7bef6ec7383a82c0b03dc36
BLAKE2b-256 34dc79d10eae17d48020ed2984c85ca4ef22a371885ba392e13c0f36b843d4fd

See more details on using hashes here.

Provenance

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