Skip to main content

pipecat-sonex

SonexLabs TTS for pipecat-ai real-time voice pipelines.

PyPI Python License: MIT


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 is optional — leave it unset and Panini auto-detects from the input text. 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 "" Optional. 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"))  # 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

pipecat_sonex-0.2.5.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

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

pipecat_sonex-0.2.5-py3-none-any.whl (11.4 kB view details)

Uploaded Python 3

File details

Details for the file pipecat_sonex-0.2.5.tar.gz.

File metadata

  • Download URL: pipecat_sonex-0.2.5.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

Hashes for pipecat_sonex-0.2.5.tar.gz
Algorithm Hash digest
SHA256 2401a48e620e0b2865ae68be4a702592cbb3a1dfb34ecf832b01b2bbbd6edd23
MD5 587a3009f5d723acdfc7c0417951ed3b
BLAKE2b-256 d2424e96b65f1667fd03b83652f838edf6f7199c82e119f35e4e460b2c78e849

See more details on using hashes here.

File details

Details for the file pipecat_sonex-0.2.5-py3-none-any.whl.

File metadata

  • Download URL: pipecat_sonex-0.2.5-py3-none-any.whl
  • Upload date:
  • Size: 11.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.12

File hashes

Hashes for pipecat_sonex-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 ec8785a02563d6c0d7639ad08c625baf78a3773f7522158ac8376e2c85f2aff0
MD5 8bc5f32042869361b4b74f2c88034004
BLAKE2b-256 edf6557d0ffbeb838d75be8b7e1f9c3da8261cbbdd45cad35d842400d3ff116f

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