Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

ZRT: Zero Runtime Python SDK

PyPI version Python versions

Serverless voice AI agents for Python. Write the agent in real Python with your own STT, LLM, and TTS providers. Zero Runtime runs the live speech‑to‑speech pipeline (turn detection, denoising, interruptions) at low latency in the cloud.

You write the agent. We run the runtime. No media servers, no GPUs, no autoscaling.

Self‑hosted frameworks No‑code platforms Zero Runtime
Real Python + custom tools ❌ (dashboard)
Run media servers / GPUs / scaling you operate it ✅ managed serverless
Bring any provider + your own keys limited

Install

pip install zrt

Requires Python 3.10+.

Quickstart

Get your auth token from app.zeroruntime.ai.

export ZRT_AUTH_TOKEN=<your-token>
export DEEPGRAM_API_KEY=<key>    # speech-to-text
export GOOGLE_API_KEY=<key>      # LLM (Gemini)
export CARTESIA_API_KEY=<key>    # text-to-speech
# agent.py
import zrt
from zrt import Agent, Pipeline, Room, function_tool
from zrt.plugins import CartesiaTTS, DeepgramSTT, GoogleLLM, SileroVAD, TurnDetector

AGENT_ID = "assistant"

class Assistant(Agent):
    def __init__(self) -> None:
        super().__init__(
            name="Assistant",
            agent_id=AGENT_ID,
            instructions=(
                "You are a friendly voice assistant. Keep replies short and natural. "
                "When asked about the weather, call the get_weather tool."
            ),
            pipeline=Pipeline(
                stt=DeepgramSTT(model="nova-2-conversationalai"),
                llm=GoogleLLM(model="gemini-3-flash-preview", thinking_budget=0),
                tts=CartesiaTTS(model="sonic-3.5"),
                vad=SileroVAD(),
                turn_detector=TurnDetector(model="echo-large"),
            ),
        )

    async def on_enter(self) -> None:
        await self.session.say("Hi! I'm your assistant. Ask me about the weather in any city.")

    async def on_exit(self) -> None:
        await self.session.say("Thanks for calling. Goodbye!")

    @function_tool
    async def get_weather(self, city: str) -> dict:
        """Get the current weather for a city.

        Args:
            city: Name of the city to look up.
        """
        return {"city": city, "temperature_c": 28, "condition": "Sunny", "humidity": 55}


def invoke_agent() -> None:
    """Start a session once the agent is registered (fired by serve's on_ready)."""
    zrt.invoke(AGENT_ID, room=Room(playground=True))

if __name__ == "__main__":
    zrt.serve(Assistant, on_ready=invoke_agent)
python agent.py

serve() registers the agent under its agent_id and serves a session to each caller; once it's ready, on_ready fires invoke() to start a playground session and print a link you can open to talk to it.

Pass your Agent class (or any callable that returns a fresh agent) — recommended. serve() then builds a new agent + pipeline per call, so concurrent calls stay isolated.

Concepts

Building block What it is
Agent Your behavior: instructions, tools, and what it says on enter/exit.
Pipeline STT (hear) → LLM (think) → TTS (speak), plus optional VAD, turn detection, denoising.
serve(Agent) Register your agent (pass the class) and serve a session to each caller.
invoke(agent_id, …) Start a session on demand (e.g. an outbound call).

Add a @function_tool method to your agent and the LLM calls it (with your typed args) whenever it needs to. Methods are auto-registered; for tools defined outside the agent, pass them via tools=[...].

Providers

Mix and match. Swap any stage in a line:

  • STT: Deepgram, AssemblyAI, Google, Azure, Sarvam, and more.
  • LLM: OpenAI, Google Gemini, Anthropic Claude, Groq, Cerebras, xAI Grok, Sarvam, and more.
  • TTS: Cartesia, ElevenLabs, Google, Azure, Deepgram, and more.
  • Realtime (speech‑to‑speech): OpenAI Realtime, Gemini Live, and more.
  • Turn detection: Echo · VAD: Silero · Denoise: RNNoise

Resources


© 2026 Zujo Tech Pvt Ltd. All rights reserved.

Download files

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

Source Distribution

zrt-0.1.2rc1.tar.gz (216.7 kB view details)

Uploaded Source

Built Distribution

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

zrt-0.1.2rc1-py3-none-any.whl (269.1 kB view details)

Uploaded Python 3

File details

Details for the file zrt-0.1.2rc1.tar.gz.

File metadata

  • Download URL: zrt-0.1.2rc1.tar.gz
  • Upload date:
  • Size: 216.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for zrt-0.1.2rc1.tar.gz
Algorithm Hash digest
SHA256 632444170020fe9c6ddda801b636a937b9c99675abbaf04f04eef612c102f16f
MD5 162b2d61ad5b11960c69441d592050cf
BLAKE2b-256 2e26a95662dc52fcc96375a22e86a3ee520bce1d54aaa76302d4b8e88744ef0e

See more details on using hashes here.

File details

Details for the file zrt-0.1.2rc1-py3-none-any.whl.

File metadata

  • Download URL: zrt-0.1.2rc1-py3-none-any.whl
  • Upload date:
  • Size: 269.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for zrt-0.1.2rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 89025f97ce48eadfd6d508af93688f9004b8fe348dff06694ad4526da144fd40
MD5 2a4f5707f37687d17cfe242b364337d5
BLAKE2b-256 cb0878de62456d685aae684afe50095ca3dc84e3751d089bfc56362ac24b3396

See more details on using hashes here.

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