pipecat-sonex
SonexLabs TTS for pipecat-ai real-time voice pipelines.
pipecat-sonex provides SonexTTSService — a pipecat-native TTS service that connects any pipecat pipeline to the SonexLabs Panini TTS API.
SonexTTSService extends pipecat's official TTSService base class, so it works exactly like CartesiaTTSService, ElevenLabsTTSService, and other first-party services:
- The base class handles sentence aggregation, LLM token buffering, interruption recovery, TTSStartedFrame / TTSStoppedFrame, and metrics.
- You only need to configure credentials and voice.
- Voice and language can be changed mid-conversation via
TTSUpdateSettingsFrame.
Streaming and connection reuse
Requests go to SonexLabs' /v1/speech/stream endpoint, so audio is delivered as chunked HTTP as soon as each sentence is generated instead of waiting for the full utterance, reducing time-to-first-audio. The underlying aiohttp.ClientSession uses a TCPConnector with keepalive_timeout set, so connections are pooled and reused across requests rather than reconnecting for every sentence.
Installation
pip install pipecat-sonex
# or
uv add pipecat-sonex
Quick start
1. List available voices
curl https://api.sonexlabs.com/v1/voices \
-H "Authorization: Bearer $SONEX_API_KEY"
Copy a voice_id from the response — it is required.
2. Add to your pipeline
from pipecat_sonex import SonexTTSService
tts = SonexTTSService(
api_key="vsk_...",
voice="9b8fsavyez", # Diya (English), from GET /v1/voices — required, no default
language="en", # optional, leave unset to auto-detect
)
For telephony (Twilio/Exotel/Vobiz), pass sample_rate=8000 — see Constructor parameters.
Drop it into any pipeline the same way as any other pipecat TTS service:
pipeline = Pipeline([
transport.input(),
stt,
context_aggregator.user(),
llm,
tts, # ← SonexTTSService here
transport.output(),
context_aggregator.assistant(),
])
Constructor parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
api_key |
str |
— | SonexLabs API key (vsk_...) |
voice |
str |
— | Required. Voice ID from GET /v1/voices |
language |
str |
"" |
Language code ("en", "hi", "te", …). Leave unset to auto-detect. |
speed |
float |
1.0 |
Speech rate multiplier (practical range: 0.75–1.5) |
sample_rate |
int |
24000 |
Pipeline output rate in Hz. Not sent to the API — Panini always returns audio at its native rate; pipecat resamples to this value. Use 8000 for Twilio/Exotel telephony. |
endpoint |
str |
https://api.sonexlabs.com |
API base URL |
settings |
SonexTTSSettings |
None |
Runtime-updatable settings (takes precedence) |
Runtime settings update
Change voice or language mid-conversation:
from pipecat.frames.frames import TTSUpdateSettingsFrame
from pipecat_sonex import SonexTTSSettings
await task.queue_frames([
TTSUpdateSettingsFrame(delta=SonexTTSSettings(voice="lkwlapu6ab", language="hi")) # Priya, from GET /v1/voices
])
Examples
All examples are in the examples/ directory. Copy .env.example to .env and fill in your credentials before running.
WebRTC + OpenAI LLM
Full browser-to-server voice bot using SmallWebRTC transport:
pip install "pipecat-ai[openai,deepgram,silero,webrtc]" pipecat-sonex python-dotenv fastapi uvicorn
python examples/webrtc_openai.py
# Open http://localhost:7860 and click Connect
Twilio telephony
pip install "pipecat-ai[openai,deepgram,silero,twilio]" pipecat-sonex python-dotenv fastapi uvicorn
python examples/telephony_twilio.py
# Expose with ngrok, point Twilio webhook to https://<host>/incoming-call
Exotel telephony
pip install "pipecat-ai[openai,deepgram,silero]" pipecat-sonex python-dotenv fastapi uvicorn
python examples/telephony_exotel.py
# Expose with ngrok, set Exotel Passthru URL to wss://<host>/ws/exotel
Vobiz telephony
VobizFrameSerializer is bundled in pipecat_sonex.vobiz — no extra package needed:
pip install "pipecat-ai[openai,deepgram,silero]" pipecat-sonex python-dotenv fastapi uvicorn
python examples/telephony_vobiz.py
# Set Vobiz WebSocket URL to wss://<host>/ws/vobiz
LiveKit
For a LiveKit room-based voice bot example, see the separate pipecat-sonex-livekit repo.
API reference
See the full API documentation at docs.sonexlabs.com/api-reference.
License
MIT — see LICENSE.
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 pipecat_sonex-0.2.4.tar.gz.
File metadata
- Download URL: pipecat_sonex-0.2.4.tar.gz
- Upload date:
- Size: 15.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4819c0608ff0dcdfe58a2d471d80ae47e182596be1079b90cf8cd353f3e8c1f
|
|
| MD5 |
fc6c92e2264401fdfc15a118b98606a9
|
|
| BLAKE2b-256 |
ceff30cabf6399f8fdfa2c5755634b1ef115564d1a175535cdd0a4a06ca4a8da
|
File details
Details for the file pipecat_sonex-0.2.4-py3-none-any.whl.
File metadata
- Download URL: pipecat_sonex-0.2.4-py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4d4e45679605b2b49bf2fdf37c32398ab52b571bd94abbe20c3e854fbd69190
|
|
| MD5 |
183ee13e9b718133f49a62192c2d57ee
|
|
| BLAKE2b-256 |
a2b6257ddf7e93a824a6cc09e101a3993ba0b825bfc73c0154cc7ed4fff75c3a
|