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.0b1.tar.gz (84.3 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.0b1-py3-none-any.whl (56.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: voxtra-0.1.0b1.tar.gz
  • Upload date:
  • Size: 84.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for voxtra-0.1.0b1.tar.gz
Algorithm Hash digest
SHA256 10c7f8828f67bdd66b493211e6aeebdd014492511444fc16c14508644d3c9093
MD5 425a375d004c778e764c181d9bc15632
BLAKE2b-256 1cc98e225ea5f1279f68d71918ef3332d51064f61d59fa54aa3b6194bba4d99b

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for voxtra-0.1.0b1-py3-none-any.whl
Algorithm Hash digest
SHA256 892d43ad1dbf1a6b46194f5dd5b2cd1f919e978e3461a6405b3e0e92fe112387
MD5 7f724a720b7d6a6b10987fab7717893e
BLAKE2b-256 04bca9703ad0152ec4b66a4bc417514066d8c0040ca9e462502372b09be68c4f

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