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 LR
    A[Cellular Provider] -->|SIP Trunk| B[Asterisk PBX]
    B -->|ARI + Media| C[Voxtra]
    C --> D[STT]
    C --> E[LLM]
    C --> F[TTS]

    D -->|transcript| E
    E -->|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


VoxtraThe 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.3.0.tar.gz (122.8 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.3.0-py3-none-any.whl (79.7 kB view details)

Uploaded Python 3

File details

Details for the file voxtra-0.3.0.tar.gz.

File metadata

  • Download URL: voxtra-0.3.0.tar.gz
  • Upload date:
  • Size: 122.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for voxtra-0.3.0.tar.gz
Algorithm Hash digest
SHA256 d05903f6dcd41bdb6f6a97cc6439cbc9b5a00a4143f6016a4ae6c3bfbf11d540
MD5 6a8767c727dd4794df32249d5d1ccbb5
BLAKE2b-256 c0e12bd56964ec28d10c938d069c0929ddb7923161b49fbdc05c47aa35dfa4a9

See more details on using hashes here.

File details

Details for the file voxtra-0.3.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for voxtra-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1da6a5b165546c951412fa3f0c22f6b760e186e075585ec586a15f9cbc1e2b89
MD5 757b6f77b03305265535148cd2b37c15
BLAKE2b-256 e1836096ec7350e39359c5cbb34a857292b4901eb6bfbb7de3e3b0e1ff8a1a27

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