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 โ 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10c7f8828f67bdd66b493211e6aeebdd014492511444fc16c14508644d3c9093
|
|
| MD5 |
425a375d004c778e764c181d9bc15632
|
|
| BLAKE2b-256 |
1cc98e225ea5f1279f68d71918ef3332d51064f61d59fa54aa3b6194bba4d99b
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
892d43ad1dbf1a6b46194f5dd5b2cd1f919e978e3461a6405b3e0e92fe112387
|
|
| MD5 |
7f724a720b7d6a6b10987fab7717893e
|
|
| BLAKE2b-256 |
04bca9703ad0152ec4b66a4bc417514066d8c0040ca9e462502372b09be68c4f
|