Observed since 20 Oct, 17:06 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Aavaaz — production-grade speech-to-text platform built on WhisperLive
Production-grade speech-to-text platform built on WhisperLive.
Aavaaz (आवाज़, "voice" in Hindi) is an open source extension of WhisperLive with enterprise features that compete with Deepgram, ElevenLabs, and AssemblyAI.
| Category | Capabilities |
|---|---|
| Transcription | Real-time WebSocket streaming, REST API (OpenAI-compatible), batch inference, multichannel audio |
| Intelligence | Speaker diarization, sentiment analysis, topic detection, entity extraction, summarization |
| Post-processing | Smart formatting, PII redaction, profanity filtering, noise reduction, utterance/paragraph segmentation |
| Platform | Webhook delivery, transcript search & tagging, storage backends (local/S3), ACL/auth, GDPR compliance, Prometheus metrics |
| Deployment | Docker, Helm charts, Terraform (AWS), serverless (Lambda), Modal (GPU), GPU auto-detection, model caching, SSE streaming |
# Create a virtualenv (Python 3.12 required)
python3.12 -m venv .venv && source .venv/bin/activate
# Install aavaaz with WhisperLive + ML stack
pip install "aavaaz[whisper]"
# Start the server
aavaaz serve --model large-v3
# Transcribe a file
aavaaz transcribe audio.wav
uv (Fast & Reproducible)# Install uv: https://docs.astral.sh/uv/
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create venv with Python 3.12 (required; 3.14 not yet supported by ML deps)
uv venv .venv --python python3.12
source .venv/bin/activate
# Install from PyPI
uv pip install "aavaaz[whisper]"
# Start the server
aavaaz serve --model large-v3
# Transcribe a file
aavaaz transcribe audio.wav
Fedora 43+ / Python 3.14 note: The ML stack (PyTorch, faster-whisper) does not yet publish wheels for Python 3.14. Use
python3.12explicitly when creating the virtualenv. On Fedora:sudo dnf install python3.12
git clone git@github.com:collabora/aavaaz.git
cd aavaaz
python3.12 -m venv .venv && source .venv/bin/activate
# Local editable install
pip install -e .
# With WhisperLive + dev tooling
pip install -e ".[whisper,dev]"
pip with Requirements Files# Create a virtualenv (Python 3.12 required)
python3.12 -m venv .venv && source .venv/bin/activate
# Install base + ML stack (large ~20GB download for torch/onnx)
pip install -r requirements/whisper.txt
# Or install just base (fast, no ML):
# pip install -r requirements/base.txt
# Start the server (requires ML stack)
aavaaz serve --model large-v3
# Transcribe a file
aavaaz transcribe audio.wav
# OpenAI-compatible REST endpoint
curl -X POST http://localhost:8000/v1/audio/transcriptions \
-F file=@audio.wav -F model=large-v3
The full ML stack (torch, onnxruntime, torchaudio) requires ~20GB disk space. If you hit disk quota errors, consider:
uv which is faster and handles large downloads betterrequirements/base.txt — Core dependencies only (fastapi, uvicorn, boto3)requirements/whisper.txt — Full ML stack (torch, whisper-live>=0.9.0, etc)requirements/dev.txt — Development tools (pytest, ruff, etc)Aavaaz uses WhisperLive as its transcription engine and extends it via the plugin system:
┌─────────────────────────────────────────┐
│ Aavaaz Server │
│ ┌─────────────────────────────────┐ │
│ │ REST API / WebSocket / Web UI │ │
│ └──────────────┬──────────────────┘ │
│ ┌──────────────┴──────────────────┐ │
│ │ Plugin Pipeline │ │
│ │ diarization → formatting → │ │
│ │ PII redaction → intelligence │ │
│ └──────────────┬──────────────────┘ │
│ ┌──────────────┴──────────────────┐ │
│ │ WhisperLive Core Engine │ │
│ │ faster-whisper / TensorRT / │ │
│ │ OpenVINO │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
Enable per-word timing and confidence scores in transcription segments:
from aavaaz import AavaazServer
server = AavaazServer()
server.serve(word_timestamps=True)
When enabled, each segment includes a words array:
{
"segments": [{
"start": "0.000", "end": "2.500", "text": "Hello world",
"words": [
{"word": "Hello", "start": "0.000", "end": "0.800", "probability": 0.95},
{"word": " world", "start": "0.900", "end": "2.500", "probability": 0.88}
]
}]
}
Boost recognition of specific terms (product names, acronyms, domain jargon):
from aavaaz import AavaazServer
server = AavaazServer()
server.serve(hotwords="Aavaaz,TensorRT,OpenVINO")
The hotwords parameter is a comma-separated string passed directly to faster-whisper's keyword boosting. Also available in the REST API via the hotwords form field.
Real-time speaker identification using pyannote.audio embeddings:
pip install pyannote.audio
from aavaaz import AavaazServer
server = AavaazServer()
server.serve(enable_diarization=True, max_speakers=4)
When enabled, completed segments include a speaker field:
{"start": "0.000", "end": "2.500", "text": "Hello", "speaker": "SPEAKER_00", "completed": true}
Protect both REST API and WebSocket connections with a shared API key:
aavaaz serve --model large-v3 --api-key "my-secret-key"
Authorization: Bearer my-secret-key headerAuthorization: Bearer my-secret-key header or ?token=my-secret-key query parameterUnauthenticated connections receive HTTP 401 before any GPU resources are allocated.
Limit REST API requests per client IP (sliding 60-second window):
aavaaz serve --model large-v3 --rate-limit-rpm 60
Clients exceeding the limit receive HTTP 429.
Automatically reconnect when the WebSocket connection drops unexpectedly:
from whisper_live.client import TranscriptionClient
client = TranscriptionClient(
"localhost", 9090,
max_retries=5,
retry_delay=3,
)
Batch multiple client sessions into single GPU calls for higher throughput:
aavaaz serve --model large-v3 --batch-inference --batch-max-size 8 --batch-window-ms 50
Monitor server health with a Prometheus /metrics endpoint:
aavaaz serve --model large-v3 --metrics-port 9091
Tracks active connections, transcription latency, segment counts, and error rates.
Stream transcription results via Server-Sent Events from the REST API:
curl -X POST http://localhost:8000/v1/audio/transcriptions \
-F file=@audio.wav -F stream=true
Returns real-time segment events as text/event-stream.
Extend the transcription pipeline with custom post-processors:
from aavaaz.plugins import PluginRegistry
registry = PluginRegistry()
registry.register("my_plugin", my_post_processor_fn, priority=50)
server = AavaazServer(plugin_registry=registry)
server.serve()
Plugins receive each transcription segment and can modify, enrich, or filter it before delivery to the client.
aavaaz serve --model large-v3 --batch-inference
services:
aavaaz:
image: collabora/aavaaz:latest
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
ports:
- "9090:9090"
- "8000:8000"
helm install aavaaz deploy/helm/aavaaz \
--set model=large-v3 \
--set replicas=3 \
--set gpu.enabled=true
cd deploy/terraform
terraform init
terraform apply -var="model=large-v3" -var="api_key=my-secret"
Provisions VPC, ALB, ECS with GPU instances (g5.xlarge), ECR, and CloudWatch. See deploy/terraform/README.md for full options.
For batch file transcription without managing servers:
Production role: Lambda is the batch transcription path.
# Build and push the Lambda container image
docker build -f Dockerfile.lambda --build-arg WHISPER_MODEL=small -t aavaaz-lambda .
# Deploy infrastructure
cd deploy/terraform-lambda
terraform init
terraform apply
# Upload audio — transcript appears automatically in the output bucket
aws s3 cp recording.wav s3://$(terraform output -raw audio_input_bucket)/
# Or use the REST API
curl -X POST $(terraform output -raw api_endpoint) \
-H "Content-Type: application/json" \
-d '{"audio_url": "s3://my-bucket/recording.wav"}'
See docs/SERVERLESS.md for full configuration, model selection, cost estimates, and limitations.
Deploy on Modal for on-demand GPU transcription with zero infrastructure:
Production role: Modal is used for live WebSocket transcription (deploy/modal/app_live.py).
The deploy/modal/app.py endpoint is an optional GPU batch API.
cd deploy/modal
pip install modal
modal setup
modal deploy app_live.py
# Optional: deploy the GPU batch API endpoint
# modal deploy app.py
# Transcribe
# Live websocket URL is exposed by app_live.py deployment output.
Auto-scales to zero when idle, GPU containers spin up in seconds. See docs/MODAL.md for full configuration.
git clone git@github.com:collabora/aavaaz.git
cd aavaaz
pip install -e ".[dev]"
pytest
pypistats · 50 observations shown. Missing days are unknown. Source category: overall: without mirrors.
| Date / source period | Value | Observed at |
|---|---|---|
| 2026-10-14 – 2026-10-14 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-10-13 – 2026-10-13 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-10-11 – 2026-10-11 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-10-10 – 2026-10-10 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-10-09 – 2026-10-09 | 5 | 2026-10-20T19:23:01.7977542Z |
| 2026-10-08 – 2026-10-08 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-10-07 – 2026-10-07 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-10-06 – 2026-10-06 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-10-03 – 2026-10-03 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-30 – 2026-09-30 | 3 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-28 – 2026-09-28 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-27 – 2026-09-27 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-26 – 2026-09-26 | 2 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-22 – 2026-09-22 | 2 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-18 – 2026-09-18 | 2 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-14 – 2026-09-14 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-12 – 2026-09-12 | 3 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-10 – 2026-09-10 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-09 – 2026-09-09 | 2 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-08 – 2026-09-08 | 2 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-07 – 2026-09-07 | 4 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-06 – 2026-09-06 | 2 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-03 – 2026-09-03 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-09-01 – 2026-09-01 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-31 – 2026-08-31 | 3 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-29 – 2026-08-29 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-27 – 2026-08-27 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-26 – 2026-08-26 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-24 – 2026-08-24 | 9 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-23 – 2026-08-23 | 5 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-20 – 2026-08-20 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-18 – 2026-08-18 | 18 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-17 – 2026-08-17 | 4 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-14 – 2026-08-14 | 4 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-13 – 2026-08-13 | 2 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-09 – 2026-08-09 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-08 – 2026-08-08 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-06 – 2026-08-06 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-04 – 2026-08-04 | 3 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-03 – 2026-08-03 | 6 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-02 – 2026-08-02 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-08-01 – 2026-08-01 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-07-29 – 2026-07-29 | 11 | 2026-10-20T19:23:01.7977542Z |
| 2026-07-27 – 2026-07-27 | 2 | 2026-10-20T19:23:01.7977542Z |
| 2026-07-25 – 2026-07-25 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-07-23 – 2026-07-23 | 2 | 2026-10-20T19:23:01.7977542Z |
| 2026-07-21 – 2026-07-21 | 2 | 2026-10-20T19:23:01.7977542Z |
| 2026-07-20 – 2026-07-20 | 2 | 2026-10-20T19:23:01.7977542Z |
| 2026-07-19 – 2026-07-19 | 1 | 2026-10-20T19:23:01.7977542Z |
| 2026-07-18 – 2026-07-18 | 1 | 2026-10-20T19:23:01.7977542Z |
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.9.0 | 3 Jun 2026 | 12 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 17:06 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:217456b5333fb5859eb0f7b192b41001216959354428af00206ee4bd7197b624