Catalog PyPI
PACKAGE EXPLORERView in registry

aavaaz

PyPI

Aavaaz — production-grade speech-to-text platform built on WhisperLive

diarizationreal-timespeech-to-texttranscriptionwhisper
Versions collected1
Direct dependencies12From release 0.9.0
Last observed20 Oct, 17:06 UTC

README

Version 0.9.0 documentation

Aavaaz

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.

Features

CategoryCapabilities
TranscriptionReal-time WebSocket streaming, REST API (OpenAI-compatible), batch inference, multichannel audio
IntelligenceSpeaker diarization, sentiment analysis, topic detection, entity extraction, summarization
Post-processingSmart formatting, PII redaction, profanity filtering, noise reduction, utterance/paragraph segmentation
PlatformWebhook delivery, transcript search & tagging, storage backends (local/S3), ACL/auth, GDPR compliance, Prometheus metrics
DeploymentDocker, Helm charts, Terraform (AWS), serverless (Lambda), Modal (GPU), GPU auto-detection, model caching, SSE streaming

Quick Start

# 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

Option 2: Using 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.12 explicitly when creating the virtualenv. On Fedora: sudo dnf install python3.12

Option 3: Local Development Install

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]"

Option 4: Using 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

Note on Storage

The full ML stack (torch, onnxruntime, torchaudio) requires ~20GB disk space. If you hit disk quota errors, consider:

  • Using uv which is faster and handles large downloads better
  • Installing on a machine with more space
  • Using serverless deployments (AWS Lambda / Modal) instead of local

Requirements Files

  • requirements/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)

Architecture

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                       │    │
│  └─────────────────────────────────┘    │
└─────────────────────────────────────────┘

Advanced Features

Word-Level Timestamps

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}
    ]
  }]
}

Custom Vocabulary / Hotwords

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.

Speaker Diarization

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}

Authentication

Protect both REST API and WebSocket connections with a shared API key:

aavaaz serve --model large-v3 --api-key "my-secret-key"
  • REST API: Requires Authorization: Bearer my-secret-key header
  • WebSocket: Requires either Authorization: Bearer my-secret-key header or ?token=my-secret-key query parameter

Unauthenticated connections receive HTTP 401 before any GPU resources are allocated.

Rate Limiting

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.

Auto-Reconnect

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 Inference

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

Prometheus Metrics

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.

SSE Streaming

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.

Plugin System

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.

Scaling Guide

Single GPU

aavaaz serve --model large-v3 --batch-inference

Multi-GPU (Docker Compose)

services:
  aavaaz:
    image: collabora/aavaaz:latest
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]
    ports:
      - "9090:9090"
      - "8000:8000"

Kubernetes (Helm)

helm install aavaaz deploy/helm/aavaaz \
  --set model=large-v3 \
  --set replicas=3 \
  --set gpu.enabled=true

AWS (Terraform)

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.

AWS Lambda (Serverless)

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.

Modal (GPU Serverless)

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.

Development

git clone git@github.com:collabora/aavaaz.git
cd aavaaz
pip install -e ".[dev]"
pytest

License

MPL-2.0

Downloads & popularity

1downloads
1-day window · source-reported counts14 Oct 2026
1890
2026-07-18: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-07-18–2026-07-182026-07-19: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-07-19–2026-07-192026-07-20: 2 · observed 2026-10-20T19:23:01.7977542Z · period 2026-07-20–2026-07-202026-07-21: 2 · observed 2026-10-20T19:23:01.7977542Z · period 2026-07-21–2026-07-212026-07-23: 2 · observed 2026-10-20T19:23:01.7977542Z · period 2026-07-23–2026-07-232026-07-25: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-07-25–2026-07-252026-07-27: 2 · observed 2026-10-20T19:23:01.7977542Z · period 2026-07-27–2026-07-272026-07-29: 11 · observed 2026-10-20T19:23:01.7977542Z · period 2026-07-29–2026-07-292026-08-01: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-01–2026-08-012026-08-02: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-02–2026-08-022026-08-03: 6 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-03–2026-08-032026-08-04: 3 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-04–2026-08-042026-08-06: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-06–2026-08-062026-08-08: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-08–2026-08-082026-08-09: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-09–2026-08-092026-08-13: 2 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-13–2026-08-132026-08-14: 4 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-14–2026-08-142026-08-17: 4 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-17–2026-08-172026-08-18: 18 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-18–2026-08-182026-08-20: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-20–2026-08-202026-08-23: 5 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-23–2026-08-232026-08-24: 9 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-24–2026-08-242026-08-26: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-26–2026-08-262026-08-27: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-27–2026-08-272026-08-29: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-29–2026-08-292026-08-31: 3 · observed 2026-10-20T19:23:01.7977542Z · period 2026-08-31–2026-08-312026-09-01: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-01–2026-09-012026-09-03: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-03–2026-09-032026-09-06: 2 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-06–2026-09-062026-09-07: 4 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-07–2026-09-072026-09-08: 2 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-08–2026-09-082026-09-09: 2 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-09–2026-09-092026-09-10: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-10–2026-09-102026-09-12: 3 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-12–2026-09-122026-09-14: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-14–2026-09-142026-09-18: 2 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-18–2026-09-182026-09-22: 2 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-22–2026-09-222026-09-26: 2 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-26–2026-09-262026-09-27: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-27–2026-09-272026-09-28: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-28–2026-09-282026-09-30: 3 · observed 2026-10-20T19:23:01.7977542Z · period 2026-09-30–2026-09-302026-10-03: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-10-03–2026-10-032026-10-06: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-10-06–2026-10-062026-10-07: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-10-07–2026-10-072026-10-08: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-10-08–2026-10-082026-10-09: 5 · observed 2026-10-20T19:23:01.7977542Z · period 2026-10-09–2026-10-092026-10-10: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-10-10–2026-10-102026-10-11: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-10-11–2026-10-112026-10-13: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-10-13–2026-10-132026-10-14: 1 · observed 2026-10-20T19:23:01.7977542Z · period 2026-10-14–2026-10-14
18 Jul14 Oct

pypistats · 50 observations shown. Missing days are unknown. Source category: overall: without mirrors.

View observed values
Date / source periodValueObserved at
2026-10-14 – 2026-10-1412026-10-20T19:23:01.7977542Z
2026-10-13 – 2026-10-1312026-10-20T19:23:01.7977542Z
2026-10-11 – 2026-10-1112026-10-20T19:23:01.7977542Z
2026-10-10 – 2026-10-1012026-10-20T19:23:01.7977542Z
2026-10-09 – 2026-10-0952026-10-20T19:23:01.7977542Z
2026-10-08 – 2026-10-0812026-10-20T19:23:01.7977542Z
2026-10-07 – 2026-10-0712026-10-20T19:23:01.7977542Z
2026-10-06 – 2026-10-0612026-10-20T19:23:01.7977542Z
2026-10-03 – 2026-10-0312026-10-20T19:23:01.7977542Z
2026-09-30 – 2026-09-3032026-10-20T19:23:01.7977542Z
2026-09-28 – 2026-09-2812026-10-20T19:23:01.7977542Z
2026-09-27 – 2026-09-2712026-10-20T19:23:01.7977542Z
2026-09-26 – 2026-09-2622026-10-20T19:23:01.7977542Z
2026-09-22 – 2026-09-2222026-10-20T19:23:01.7977542Z
2026-09-18 – 2026-09-1822026-10-20T19:23:01.7977542Z
2026-09-14 – 2026-09-1412026-10-20T19:23:01.7977542Z
2026-09-12 – 2026-09-1232026-10-20T19:23:01.7977542Z
2026-09-10 – 2026-09-1012026-10-20T19:23:01.7977542Z
2026-09-09 – 2026-09-0922026-10-20T19:23:01.7977542Z
2026-09-08 – 2026-09-0822026-10-20T19:23:01.7977542Z
2026-09-07 – 2026-09-0742026-10-20T19:23:01.7977542Z
2026-09-06 – 2026-09-0622026-10-20T19:23:01.7977542Z
2026-09-03 – 2026-09-0312026-10-20T19:23:01.7977542Z
2026-09-01 – 2026-09-0112026-10-20T19:23:01.7977542Z
2026-08-31 – 2026-08-3132026-10-20T19:23:01.7977542Z
2026-08-29 – 2026-08-2912026-10-20T19:23:01.7977542Z
2026-08-27 – 2026-08-2712026-10-20T19:23:01.7977542Z
2026-08-26 – 2026-08-2612026-10-20T19:23:01.7977542Z
2026-08-24 – 2026-08-2492026-10-20T19:23:01.7977542Z
2026-08-23 – 2026-08-2352026-10-20T19:23:01.7977542Z
2026-08-20 – 2026-08-2012026-10-20T19:23:01.7977542Z
2026-08-18 – 2026-08-18182026-10-20T19:23:01.7977542Z
2026-08-17 – 2026-08-1742026-10-20T19:23:01.7977542Z
2026-08-14 – 2026-08-1442026-10-20T19:23:01.7977542Z
2026-08-13 – 2026-08-1322026-10-20T19:23:01.7977542Z
2026-08-09 – 2026-08-0912026-10-20T19:23:01.7977542Z
2026-08-08 – 2026-08-0812026-10-20T19:23:01.7977542Z
2026-08-06 – 2026-08-0612026-10-20T19:23:01.7977542Z
2026-08-04 – 2026-08-0432026-10-20T19:23:01.7977542Z
2026-08-03 – 2026-08-0362026-10-20T19:23:01.7977542Z
2026-08-02 – 2026-08-0212026-10-20T19:23:01.7977542Z
2026-08-01 – 2026-08-0112026-10-20T19:23:01.7977542Z
2026-07-29 – 2026-07-29112026-10-20T19:23:01.7977542Z
2026-07-27 – 2026-07-2722026-10-20T19:23:01.7977542Z
2026-07-25 – 2026-07-2512026-10-20T19:23:01.7977542Z
2026-07-23 – 2026-07-2322026-10-20T19:23:01.7977542Z
2026-07-21 – 2026-07-2122026-10-20T19:23:01.7977542Z
2026-07-20 – 2026-07-2022026-10-20T19:23:01.7977542Z
2026-07-19 – 2026-07-1912026-10-20T19:23:01.7977542Z
2026-07-18 – 2026-07-1812026-10-20T19:23:01.7977542Z

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.9.03 Jun 202612

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
collabora/aavaaz

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 17:06 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:217456b5333fb5859eb0f7b192b41001216959354428af00206ee4bd7197b624