Spaces:
Sleeping
title: Uzbek STT
emoji: ποΈ
colorFrom: green
colorTo: indigo
sdk: docker
app_port: 7860
pinned: false
license: apache-2.0
Uzbek Speech-to-Text β a deployable service
An end-to-end Uzbek speech-to-text service: a documented REST API, a demo UI, and an honest multi-engine benchmark β deployed to a live public URL on a $0 budget (no paid server, no paid API, no GPU). Built to demonstrate shipping and operating software, not just writing it.
Live demo: coming with the M1 deploy β
https://huggingface.co/spaces/bintuulugbek/Uzbek-STTAPI docs:/docson the same URL.
Why this project
Uzbek is an underserved language for speech tech. This project takes verified open Uzbek ASR models and wraps them in production-grade engineering: a clean FastAPI service, a swappable engine seam, problem+json errors, and a reproducible benchmark with real WER/CER numbers measured by us (not quoted from model cards).
Architecture
flowchart TD
U[User: mic / upload / API call] -->|audio| FE[Gradio UI '/']
U -->|POST audio| API[FastAPI '/api/*']
FE --> SVC[TranscriptionService]
API --> SVC
SVC --> SEAM[Engine seam - Protocol]
SEAM --> E1[whisper-small-uz FAST]
SEAM --> E2[rubaistt_v2_medium ACCURATE]
API --> DOCS[OpenAPI '/docs']
subgraph Offline [Benchmark - offline]
BM[harness] --> SEAM
BM --> E3[xls-r-uzbek benchmark-only]
BM --> M[(metrics.csv + plots)]
end
subgraph Deploy [HF Spaces - Docker SDK - FREE]
API
FE
DOCS
end
The $0 stack
| Need | Free tool |
|---|---|
| API + demo hosting | Hugging Face Spaces (Docker SDK, free CPU, 16 GB) |
| Models | Hugging Face Hub (Apache-2.0 Uzbek ASR) |
| Benchmark data | FLEURS uz_uz test split |
| Code | GitHub |
Engines
| Role | Model | Deployed |
|---|---|---|
| Fast (default) | BlueRaccoon/whisper-small-uz |
β |
| Accurate | islomov/rubaistt_v2_medium |
β |
| Benchmark baseline | lucio/xls-r-uzbek-cv8 |
offline only |
API
| Endpoint | Purpose |
|---|---|
GET /api/health |
readiness (engines loaded) |
POST /api/transcribe |
transcribe audio β text + word timings |
GET /api/examples |
bundled FLEURS clips |
POST /api/transcribe_example |
transcribe a bundled clip + live WER |
GET /api/benchmark |
latest WER/CER per engine |
Errors follow RFC 9457 (application/problem+json). All times are integer milliseconds.
Why there's no login
Deliberate: this is a public evaluation demo with no user data to protect. Auth would only add friction. Abuse is bounded by per-IP rate limiting + upload-size and duration caps instead.
Roadmap
- M1 β deployable skeleton: live
/health+/docson HF Spaces - M2 β fast engine wired: real Uzbek transcription via
/api/transcribe - M3 β Gradio UI (4 tabs) + one-click FLEURS examples with live WER
- M4 β 3-engine benchmark on FLEURS + error dashboard
- M5 β docs polish
- v2 β long-audio chunking
Local development
pip install -e ".[dev]"
uvicorn app.main:app --reload --port 7860
# open http://localhost:7860/docs
License
Apache-2.0. All deployed models are Apache-2.0. This is original work; it follows common FastAPI architectural conventions but contains no third-party application code.