Skip to main content

Open voice infrastructure for AI agents โ€” bridging telephony and AI

Project description

Voxtra

Open voice infrastructure for AI agents.

Built by Rexplore Research Labs


Voxtra is a Python framework that bridges telephony infrastructure (Asterisk, FreeSWITCH, LiveKit) with AI voice agents (STT, LLM, TTS). It lets developers build AI-powered call centers without needing to understand telecom internals.

Architecture

graph TD
    A["๐Ÿ“ก Cellular Provider (Airtel / TNM / etc.)"] -->|SIP Trunk| B["๐Ÿ“ž Asterisk (PBX / Call Routing)"]
    B -->|ARI + Media Stream| C["๐Ÿ”— Voxtra (Voice AI Bridge)"]
    C --> D["๐ŸŽ™๏ธ STT โ€” Deepgram"]
    C --> E["๐Ÿง  LLM โ€” OpenAI / Claude"]
    C --> F["๐Ÿ”Š TTS โ€” ElevenLabs"]

    D -->|User transcript| E
    E -->|Agent response| F
    F -->|Audio| C

    style A fill:#4a90d9,stroke:#333,color:#fff
    style B fill:#e67e22,stroke:#333,color:#fff
    style C fill:#2ecc71,stroke:#333,color:#fff
    style D fill:#9b59b6,stroke:#333,color:#fff
    style E fill:#e74c3c,stroke:#333,color:#fff
    style F fill:#1abc9c,stroke:#333,color:#fff

Layer Design

Layer Package Responsibility
Core voxtra.app, voxtra.router, voxtra.session App lifecycle, routing, call sessions
Telephony voxtra.telephony Asterisk ARI, LiveKit, FreeSWITCH adapters
Media voxtra.media Audio frames, WebSocket/RTP transport, codecs
AI voxtra.ai STT, TTS, LLM, VAD provider abstractions
Pipeline voxtra.core.pipeline Real-time STT โ†’ LLM โ†’ TTS orchestration

Quick Start

Installation

From PyPI:

pip install voxtra

With provider extras:

pip install voxtra[asterisk,deepgram,openai,elevenlabs]

From GitHub (latest development version):

pip install git+https://github.com/rexplore-ai/voxtra.git

From source (for development):

git clone https://github.com/rexplore-ai/voxtra.git
cd voxtra
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"

Code-First Usage

from voxtra import VoxtraApp

app = VoxtraApp.from_yaml("voxtra.yaml")

@app.route(extension="1000")
async def support_call(session):
    await session.answer()
    await session.say("Hello, welcome to support. How can I help you?")
    text = await session.listen()
    reply = await session.agent.respond(text)
    await session.say(reply.text)
    await session.hangup()

app.run()

Config-First Usage

Create voxtra.yaml:

app_name: my-call-center

telephony:
  provider: asterisk
  asterisk:
    base_url: http://localhost:8088
    username: asterisk
    password: secret
    app_name: voxtra

media:
  transport: websocket
  codec: ulaw
  sample_rate: 8000

ai:
  stt:
    provider: deepgram
    api_key: ${DEEPGRAM_API_KEY}
    model: nova-2
  llm:
    provider: openai
    api_key: ${OPENAI_API_KEY}
    model: gpt-4o
    system_prompt: "You are a helpful voice assistant for a call center."
  tts:
    provider: elevenlabs
    api_key: ${ELEVENLABS_API_KEY}
    voice_id: your-voice-id

routes:
  - extension: "1000"
    agent: support_agent

Then run:

voxtra start

Asterisk Integration

Voxtra connects to Asterisk via ARI (Asterisk REST Interface). Add this to your Asterisk dialplan:

[voxtra-inbound]
exten => _X.,1,Stasis(voxtra)
 same => n,Hangup()

Supported Providers

Telephony

  • Asterisk (ARI) โ€” Production ready
  • LiveKit (SIP) โ€” Planned
  • FreeSWITCH โ€” Planned

Speech-to-Text

  • Deepgram (streaming)
  • More coming soon

LLM / Agents

  • OpenAI (GPT-4o, streaming)
  • LangGraph integration planned

Text-to-Speech

  • ElevenLabs (streaming)
  • More coming soon

Project Structure

src/voxtra/
โ”œโ”€โ”€ app.py                  # VoxtraApp โ€” main entry point
โ”œโ”€โ”€ session.py              # CallSession โ€” per-call handle
โ”œโ”€โ”€ router.py               # Decorator-based call routing
โ”œโ”€โ”€ events.py               # Event system
โ”œโ”€โ”€ config.py               # Pydantic config models
โ”œโ”€โ”€ middleware.py            # Event middleware
โ”œโ”€โ”€ exceptions.py           # Custom exceptions
โ”œโ”€โ”€ types.py                # Shared types
โ”œโ”€โ”€ core/
โ”‚   โ””โ”€โ”€ pipeline.py         # STT โ†’ LLM โ†’ TTS pipeline
โ”œโ”€โ”€ telephony/
โ”‚   โ”œโ”€โ”€ base.py             # TelephonyAdapter ABC
โ”‚   โ”œโ”€โ”€ asterisk/           # Asterisk ARI adapter
โ”‚   โ””โ”€โ”€ livekit/            # LiveKit adapter (stub)
โ”œโ”€โ”€ media/
โ”‚   โ”œโ”€โ”€ audio.py            # AudioFrame, codec conversion
โ”‚   โ”œโ”€โ”€ base.py             # MediaTransport ABC
โ”‚   โ”œโ”€โ”€ websocket.py        # WebSocket transport
โ”‚   โ””โ”€โ”€ buffer.py           # Audio buffering
โ””โ”€โ”€ ai/
    โ”œโ”€โ”€ stt/                # Speech-to-Text providers
    โ”œโ”€โ”€ tts/                # Text-to-Speech providers
    โ”œโ”€โ”€ llm/                # LLM / Agent providers
    โ””โ”€โ”€ vad/                # Voice Activity Detection

Documentation

  • Architecture โ€” Deep-dive into every layer, component, data flow, and design decision
  • Contributing โ€” How to set up dev environment, add providers, submit PRs, and code standards

Development

git clone git@github.com:rexplore-ai/voxtra.git
cd voxtra
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest

Roadmap

  • Core abstractions (VoxtraApp, Router, CallSession, Events)
  • Asterisk ARI adapter
  • AI provider interfaces (STT, TTS, LLM, VAD)
  • WebSocket media transport
  • Voice pipeline (STT โ†’ LLM โ†’ TTS)
  • End-to-end Asterisk + AI demo
  • LiveKit adapter
  • FreeSWITCH adapter
  • LangGraph agent integration
  • Multi-agent handoff
  • Dashboard / Admin API
  • Conversation analytics

Contributors

Thanks to everyone who has contributed to Voxtra!

Patrick Byamasu

Patrick Byamasu โ€” Creator & Lead Maintainer

Want to contribute? Check out our Contributing Guide.

License

Apache 2.0 โ€” See LICENSE


Voxtra โ€” The LangGraph of AI Telephony Built by Rexplore Research Labs

Project details


Download files

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

Source Distribution

voxtra-0.1.0b2.tar.gz (85.7 kB view details)

Uploaded Source

Built Distribution

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

voxtra-0.1.0b2-py3-none-any.whl (56.2 kB view details)

Uploaded Python 3

File details

Details for the file voxtra-0.1.0b2.tar.gz.

File metadata

  • Download URL: voxtra-0.1.0b2.tar.gz
  • Upload date:
  • Size: 85.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for voxtra-0.1.0b2.tar.gz
Algorithm Hash digest
SHA256 e3a45855be1647e205e8be9458d2dee43516446d91f181af11553f321674b24e
MD5 84bd59e9d498b2127ce6f96efe337907
BLAKE2b-256 f43a11f279ad8a2ea22333131bdf5715e3693b4685f3c83702e86c865d589233

See more details on using hashes here.

File details

Details for the file voxtra-0.1.0b2-py3-none-any.whl.

File metadata

  • Download URL: voxtra-0.1.0b2-py3-none-any.whl
  • Upload date:
  • Size: 56.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for voxtra-0.1.0b2-py3-none-any.whl
Algorithm Hash digest
SHA256 7908312fae4e53be1bb9bc870418c812b17cfd507334ff80e5d9893f6ebfc8ae
MD5 249ffed6dbd8a506c774a15e608225e1
BLAKE2b-256 1d14ee474c91e0309bfec11557b9a4fd81d0ad910564bea3fc0f230980206140

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