Skip to main content

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
from zrt import serve, invoke, Room
from zrt.agents import Agent, Pipeline, function_tool
from zrt.plugins.deepgram import DeepgramSTT
from zrt.plugins.google import GoogleLLM
from zrt.plugins.cartesia import CartesiaTTS

AGENT_ID = "assistant"


class Assistant(Agent):
    def __init__(self):
        super().__init__(
            instructions="You are a friendly voice assistant. Keep replies short.",
            agent_id=AGENT_ID,
            pipeline=Pipeline(
                stt=DeepgramSTT(),
                llm=GoogleLLM(model="gemini-2.5-flash"),
                tts=CartesiaTTS(),
            ),
        )

    async def on_enter(self):
        await self.session.say("Hi! How can I help?")

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

        Args:
            city: City name
        """
        return {"city": city, "temp_c": 22}


def on_ready() -> None:
    # Registration confirmed; start a playground session and print a join link.
    info = invoke(AGENT_ID, room=Room(playground=True))
    if info.get("playground_url"):
        print(f"Join the playground: {info['playground_url']}")


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

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

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 the agent 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: Namo · 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.0.tar.gz (168.1 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.0-py3-none-any.whl (218.9 kB view details)

Uploaded Python 3

File details

Details for the file zrt-0.1.0.tar.gz.

File metadata

  • Download URL: zrt-0.1.0.tar.gz
  • Upload date:
  • Size: 168.1 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.0.tar.gz
Algorithm Hash digest
SHA256 3ecc4170c991a6dbc5c3eb0050c873926ba38fe583a97c3a477e177fe78e0da9
MD5 55e0e47816db0d4eef660ac033608ef6
BLAKE2b-256 0aa0d9b7765fed6df10c91ed7b9119016b932ea29ba7370c7c409ead9be0f4a5

See more details on using hashes here.

File details

Details for the file zrt-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: zrt-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 218.9 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 caab4afffbe8b7459b08e6c438225a38356ddb3ea18c3f69c1f82ee40b48400c
MD5 ee7ce3aff3471db0a6d89e73859ca131
BLAKE2b-256 06f14aa0a12115d4f2be53fc811c7c99676e8d45d9e322542cd97c8bb3496aa1

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