Python SDK for the Vakyam Text-to-Speech API
Project description
VakyamAI Python SDK
Python SDK for the Vakyam Text-to-Speech API.
This package intentionally exposes only the public TTS API surface:
GET /v1/voicesPOST /v1/tts/generatePOST /v1/tts/streamWS /v1/tts/websocket
API-key management and health endpoints are server/dashboard concerns and are not included.
Install
pip install vakyamai
For local development from this repository:
pip install -e ".[dev]"
Examples
All examples use the production API URL by default. Set your API key first:
export VAKYAM_API_KEY="vak_live_..."
Then run:
python examples/env_key_usage.py
python examples/synthesize.py
python examples/error_handling.py
python examples/async_streaming.py
python examples/async_websocket.py
Available examples:
- env_key_usage.py: create a client from
VAKYAM_API_KEY - synthesize.py: generate an MP3 file from text
- error_handling.py: handle typed SDK/API errors
- async_streaming.py: stream PCM bytes asynchronously
- async_websocket.py: synthesize one sentence over async WebSocket
Initialize
from vakyamai import VakyamAI
Vakyam = VakyamAI(
api_key="vak_live_...",
base_url="http://127.0.0.1:8000", # omit for production
)
For safety, http:// base URLs are accepted only for localhost by default. Use
allow_insecure_base_url=True only on trusted development networks.
By default, the SDK reads configuration from the environment:
export VAKYAM_API_KEY="vak_live_..."
Then create the client without arguments:
from vakyamai import VakyamAI
Vakyam = VakyamAI()
Precedence:
api_key=passed in code overridesVAKYAM_API_KEY- the SDK uses
https://api.vakyam.aiby default base_url=is available only as an explicit development/test override
List Voices
voices = Vakyam.voices.list(group_by="language")
print(voices)
Use the returned voice_name and language code in synthesis requests.
Generate Speech
response = Vakyam.tts.generate(
text="வணக்கம், நான் வாக்யம் AI பேசுகிறேன்.",
model_id="raaga-v1",
voice_name="Meera",
language="ta-IN",
output_format="mp3",
sample_rate=24000,
speed=1.0,
voice_strength=2.0,
)
response.save("speech.mp3")
print(response.duration_seconds, response.characters_used)
response.audio contains decoded audio bytes. response.audio_base64 preserves the raw API field.
sample_rate accepts 8000, 16000, 24000, or 48000; the default is 24000.
voice_strength controls voice conditioning strength from 1.0 to 3.0; the default is 2.0.
Supported languages are ta-IN, hi-IN, mr-IN, te-IN, en-IN, gu-IN, bn-IN, and kn-IN.
Supported output formats are mp3, wav, pcm, and mulaw.
HTTP Streaming
with open("speech.pcm", "wb") as file:
for chunk in Vakyam.tts.stream(
text="வணக்கம்.",
model_id="raaga-v1",
voice_name="Meera",
language="ta-IN",
output_format="pcm",
sample_rate=24000,
voice_strength=2.0,
):
file.write(chunk)
To collect the full stream and response metadata:
streamed = Vakyam.tts.stream_to_bytes(
text="வணக்கம்.",
model_id="raaga-v1",
voice_name="Meera",
language="ta-IN",
sample_rate=24000,
voice_strength=2.0,
)
streamed.save("speech.pcm")
print(streamed.metadata.characters_used)
Async streaming is available through AsyncVakyamAI:
from vakyamai import AsyncVakyamAI
async with AsyncVakyamAI() as Vakyam:
async for chunk in Vakyam.tts.stream(
text="வணக்கம்.",
model_id="raaga-v1",
voice_name="Meera",
language="ta-IN",
output_format="pcm",
sample_rate=24000,
voice_strength=2.0,
):
...
AsyncVakyamAI is intentionally focused on streaming APIs. Use VakyamAI for
voices.list() and non-streaming tts.generate().
WebSocket
with Vakyam.tts.websocket(
model_id="raaga-v1",
voice_name="Meera",
language="ta-IN",
output_format="pcm",
sample_rate=24000,
voice_strength=2.0,
) as ws:
result = ws.synthesize("நான் சரியாக இருக்கிறேன்.")
result.save("sentence.pcm")
The WebSocket API expects one complete sentence or utterance at a time.
Idle WebSocket sessions close after 60 seconds without an incoming message by
default. Calling ws.ping() sends a client ping and resets the server idle timer.
Async WebSocket usage:
from vakyamai import AsyncVakyamAI
async with AsyncVakyamAI() as Vakyam:
async with Vakyam.tts.websocket(
model_id="raaga-v1",
voice_name="Meera",
language="ta-IN",
output_format="pcm",
sample_rate=24000,
voice_strength=2.0,
) as ws:
result = await ws.synthesize("நான் சரியாக இருக்கிறேன்.")
result.save("sentence.pcm")
Errors
The SDK maps the API error envelope into typed exceptions:
from vakyamai import RateLimitError, ValidationError
try:
Vakyam.tts.generate(
text="...",
model_id="raaga-v1",
voice_name="Meera",
language="ta-IN",
sample_rate=24000,
voice_strength=2.0,
)
except RateLimitError as exc:
print(exc.retry_after_seconds)
except ValidationError as exc:
print(exc.code, exc.message)
Common exception classes:
AuthenticationErrorInsufficientCreditsErrorConcurrencyLimitErrorRateLimitErrorServiceUnavailableErrorValidationErrorAPIErrorAPIConnectionError
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
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 vakyamai-0.1.0.tar.gz.
File metadata
- Download URL: vakyamai-0.1.0.tar.gz
- Upload date:
- Size: 11.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0bf3596d22012bed996bb74431fc6085bb6959babaa48ca5602b3c9b353c1044
|
|
| MD5 |
218b74099f52f04590a681045bff4c14
|
|
| BLAKE2b-256 |
ec943d68c65165a83c8928808061fcf4e6684180159fbdbe0058c1a83bc11658
|
File details
Details for the file vakyamai-0.1.0-py3-none-any.whl.
File metadata
- Download URL: vakyamai-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eedcafd5dbfe80c28ed66be30a5e1ecec754c1acd0a5a899e8149a00657e60dd
|
|
| MD5 |
5c22914205d7e9b450179b02515c178d
|
|
| BLAKE2b-256 |
3bc4b391c38672714172697dd08b29435ad2e9b597db56e79fcbea19cb675c72
|