turkish-stt

Real-time, low-latency speech-to-text (STT) for Turkish.

Built for developers β€” download, integrate, ship. Turkish-only Β· streaming Β· CPU-friendly Β· runs on the edge. First community release.

Model: 66 M parameters Β· ~68 MB (int8) / ~264 MB (fp32) β€” small enough to sit on an edge device.


What it does

turkish-stt transcribes Turkish speech as it is spoken β€” low-latency and CPU-friendly, running in real time on an ordinary CPU (no GPU and no cloud required). It is built for real-time use cases such as IoT and edge devices, voice assistants, call centers, live captioning, and dictation.

Highlights

  • πŸ‡ΉπŸ‡· Turkish-first β€” a single-language model, strong on natural and conversational Turkish
  • ⚑ Streaming β€” emits partial results while you speak; very low latency
  • πŸš€ Super fast β€” RTF 0.128 on a single CPU thread, ~8Γ— faster than real time
  • πŸ–₯️ CPU-friendly β€” runs faster than real time without special hardware
  • 🏷️ Entity/brand aware β€” robust on proper nouns, brands, and numbers
  • πŸ”Œ Lightweight β€” easy to embed into voice-agent stacks

Why it's built this way. turkish-stt is deliberately focused: Turkish-only (every parameter serves one language, not ~100 languages), CPU-friendly (no GPU or cloud required), and super fast (real-time streaming, even on edge devices like a Raspberry Pi). That single-purpose focus is exactly what lets a compact 66 M model stay accurate on Turkish while running anywhere.

How it works (from the user's side)

  1. You feed the model an audio stream (microphone or phone line).
  2. It listens chunk by chunk and emits a partial transcript while speech continues.
  3. As sentences complete, the transcript finalizes β€” no waiting, fully streaming.
  4. The output is plain text you can wire directly into voice-agent / call-center flows.

In short: audio in β†’ real-time Turkish text out. Super fast β€” the fastest accurate system that runs on CPU in our benchmarks, ~8Γ— faster than real time on a single CPU core (see Benchmarks).

Benchmarks

Every number below was measured in-house β€” we do not quote published figures. All systems were run on the same two machines, over the same audio, with one identical scoring pipeline. Nothing is estimated; where a configuration is impractical to run it is labelled as such, not filled in.

Test machines

CPU box GPU box
Accelerator β€” (CPU only) NVIDIA RTX 4090 24 GB (driver 560.35.03, CUDA 12.6)
CPU AMD EPYC 7282 Β· 16-core AMD EPYC 7F72 Β· 24-core / 48-thread
OS Ubuntu 22.04.3 LTS (kernel 6.8) Ubuntu 22.04.3 LTS (kernel 6.8)

These are the rented benchmark hosts, not deployment requirements. All CPU timings use a single thread (num_threads=1) and turkish-stt's int8 footprint is only ~68 MB β€” the host's core count and RAM are irrelevant, and the same model runs on a Raspberry-Pi-class device.

turkish-stt and Vosk are CPU-only streaming models (no GPU build); the Whisper family is timed on GPU (fp16) where it is actually usable, and also on CPU (int8, one thread) for reference.

1. Latency (single stream)

RTF (real-time factor) = decode time Γ· audio duration. Below 1.0 = faster than the audio plays. p50 / p95 = median and 95th-percentile wall-clock per clip. CPU column is single-thread (num_threads=1); GPU column is fp16 on the RTX 4090. FLEURS-TR clips, 16 kHz mono.

Model CPU RTF CPU p50 CPU p95 GPU RTF GPU p50 GPU p95
turkish-stt (int8) 0.128 1619 2437 CPU-only β€” β€”
Vosk-TR 0.138 1519 3495 CPU-only β€” β€”
Whisper small 1.098 12923 18540 0.0252 285 541
Whisper large-v3 6.095 70258 97979 0.0400 446 851
Whisper large-v3-turbo 4.296 52760 55969 0.0180 207 315

What this means. On a single CPU thread, turkish-stt runs at RTF 0.128 β€” ~8Γ— faster than real time β€” and is the only accurate option that stays real-time on CPU alongside Vosk. Every Whisper model is slower than real time on CPU (RTF 1.1–6.1: it cannot keep pace with the audio and needs a GPU in practice). On a GPU the Whisper family is very fast, but that is a different, more expensive hardware class β€” turkish-stt is built to avoid the GPU entirely.

2. Concurrency (many streams at once)

Here C = number of audio streams transcribed simultaneously on one machine (one shared model). Throughput Γ—real-time = total seconds of audio processed per second of wall-clock, across all streams.

CPU box (EPYC 7282):

Model C=1 C=10 C=100
turkish-stt 9.2Γ— 25.3Γ— 17.7Γ—
Vosk-TR 8.9Γ— 42.2Γ— 20.9Γ—
Whisper small 1.0Γ— 1.1Γ— impractical
Whisper large-v3 / turbo impractical impractical impractical

GPU box (RTX 4090, fp16):

Model C=1 C=10 C=100
Whisper small 36.8Γ— 54.2Γ— 54.0Γ—
Whisper large-v3 27.0Γ— 29.2Γ— 28.9Γ—
Whisper large-v3-turbo 62.2Γ— 60.9Γ— 65.6Γ—

What this means. On CPU, turkish-stt sustains ~25 concurrent real-time streams on a single box, while Whisper cannot serve even one (it is already slower than real time at C=1, so higher C is not run). Vosk pushes slightly more raw throughput at high C β€” because its lighter decoding is cheaper per stream β€” but at more than double the word-error rate (see below). Whisper reaches high throughput only on a GPU. Note that throughput drops from C=10 to C=100 on CPU: 100 threads over 16 cores over-subscribe the machine, so the practical sweet spot is ~10–20 concurrent streams per CPU box. Per-stream latency also rises with C (queuing), but accuracy does not change β€” the transcript is identical at any C.

3. Accuracy (WER / CER)

Accuracy is a property of the model, so it is the same on CPU or GPU and at any concurrency. Our primary benchmark is FLEURS-TR β€” the Turkish test split of Google's public FLEURS (743 clips of genuine human read speech the model never trained on). Every hypothesis and reference passes through one identical normalization before scoring β€” Turkish-aware lower-casing (dotted/dotless Δ°/Δ±, plus Ş/ş, Ğ/ğ, Ü/ΓΌ, Γ–/ΓΆ, Γ‡/Γ§), punctuation removal, and digit ↔ word unification ("3" = "ΓΌΓ§"). Then WER (word error rate) and CER (character error rate) are computed β€” lower is better. All systems were run in-house on the same audio under the same normalization.

FLEURS-TR (743 clips) β€” real human speech:

Model Class WER % CER %
Whisper large-v3 offline Β· GPU 7.08 1.50
Whisper large-v3-turbo offline Β· GPU 7.75 1.66
turkish-stt streaming Β· CPU 13.90 3.10
Whisper small offline Β· GPU 15.12 3.49
Vosk-TR streaming Β· CPU 34.09 10.31

What this means. Among streaming, CPU-deployable systems β€” the class turkish-stt actually competes in β€” it more than halves Vosk's error (13.90% vs 34.09% WER), at a comparable size. The much larger offline Whisper large/turbo lead on general read speech (they have ~20Γ— the parameters and far more data), but they cannot stream and are not real-time on CPU. turkish-stt occupies the practical sweet spot: Whisper-small-level accuracy while being streaming, CPU-native, and a fraction of the size.

Domain / entity accuracy. On a separate held-out automotive brand-entity set, turkish-stt reaches 88% brand-word accuracy versus 68% for Whisper large-v3 β€” it is purpose-built to get Turkish brand and entity names right.

Reproducible synthetic probe. As a fully-reproducible, shareable check we also evaluate on 81 diverse Turkish sentences generated on-the-fly by mihu's own TTS on EU servers (voice: Aysu), where turkish-stt scores 15.37% WER / 3.57% CER β€” in line with its FLEURS-TR result (~14%), i.e. the model behaves consistently on synthetic and real speech. The audio, reference transcripts, and eval script are published under eval/ so anyone can reproduce the number exactly (verified with sherpa-onnx 1.13.4). Note: this is synthetic (TTS) speech, provided only as a self-contained reproducibility check; the real-human FLEURS-TR numbers above are the primary benchmark.

Primary benchmark is public: google/fleurs (tr_tr test). All accuracy numbers are for the streaming model at int8, computed under the matched normalization above.

Test data & reproducibility

The primary benchmark uses a public, held-out Turkish test set β€” audio the model never trained on β€” so anyone can reproduce it without our private data. No in-house recordings are used for the real-speech evaluation.

Dataset Split Clips Type Source License
FLEURS-TR tr_tr test 743 (full) real human read speech, 16 kHz google/fleurs (Hugging Face) CC-BY-4.0
TTS-synthetic probe β€” 81 synthetic (mihu TTS, Aysu), shared under eval/ generated on-the-fly β€”

To reproduce: transcribe each clip, then apply one identical normalization to both hypothesis and reference β€” Turkish-aware lower-casing (dotted/dotless Δ°/Δ±, plus Ş/ş, Ğ/ğ, Ü/ΓΌ, Γ–/ΓΆ, Γ‡/Γ§), punctuation removal, and digit ↔ word unification ("3" ⇄ "ΓΌΓ§") β€” and compute WER/CER (e.g. with jiwer; see eval/run_eval.py). Latency and concurrency are reported on the two machines listed under Test machines; accuracy is machine- and concurrency-independent.

Usage

Install the package β€” the model weights and the sherpa-onnx runtime are pulled in automatically on first use. Runs on the CPU, no GPU or cloud:

pip install turkish-stt

One-shot β€” transcribe a file (or a numpy array):

import mihu_stt

text = mihu_stt.transcribe("audio.wav")   # 16 kHz mono
print(text)

Streaming β€” feed audio chunk by chunk and read partial results live, with automatic turn-end detection (microphone, phone call, or a LiveKit / Pipecat pipeline):

from mihu_stt import StreamingSTT

stt = StreamingSTT()
for chunk in mic_frames():                    # 16 kHz mono float32 [-1,1] (or PCM16 bytes)
    text, is_final = stt.accept_float32(chunk)
    print(("final:" if is_final else "partial:"), text)

Ready-made LiveKit and Pipecat integrations ship in the code repository under examples/.

Use cases

  • Edge & IoT β€” on-device Turkish STT on single-board computers (e.g. Raspberry Pi), embedded devices, and offline/private deployments (small int8 footprint, real-time CPU inference, no GPU or cloud required)
  • Voice assistants and telephone voice agents
  • Call-center live transcription
  • Live captioning / dictation
  • Turkish voice interfaces

License

mihu Community License β€” see LICENSE for full terms.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support