--- 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-STT` > **API docs:** `/docs` on 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 ```mermaid 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 - [x] **M1** — deployable skeleton: live `/health` + `/docs` on 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 ```bash 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.