Model reference · open weights
turkish-stt is an open-weight audio or speech model from mihuai.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the mihuai/turkish-stt-66m-v2 model card, 2026-10-26
What it is
| Released by | mihuai |
|---|---|
| Released | 2026-10-19 |
From the model card
🇹🇷 Türkçe · Damga (Turkish ITN/TN) · Previous version (v1)
Real-time, low-latency speech-to-text (STT) for Turkish — second release.
Turkish-only · streaming · CPU-friendly · runs on the edge. Same size and architecture as
mihuai/turkish-stt (v1), retrained: about 28% fewer word errors
on FLEURS-TR (standard normalization; about 34% with Damga normalization) at identical speed.
Model: 66 M parameters · ~68 MB (int8) · streaming Zipformer transducer · 16 kHz mono
v1 (turkish-stt) | v2 (turkish-stt-66m-v2) | Change | |
|---|---|---|---|
| FLEURS-TR WER — standard normalization | 13.90 | 10.06 | −28% |
| FLEURS-TR WER — Damga normalization | 9.38 | 6.21 | −34% |
| Parameters / int8 size | 66 M / ~68 MB | 66 M / ~68 MB | same |
| Latency, throughput | — | unchanged (same architecture) | same |
Measured in-house with the same audio, decoder settings and eval/score.py.
turkish-stt-66m-v2 transcribes Turkish speech as it is spoken — partial results arrive while the speaker is still talking, on an ordinary CPU (no GPU, no cloud). It is built for real-time use cases: voice agents, call centers, live captioning, dictation, IoT and edge devices.
Highlights
Every number below was measured in-house on the same audio with one scoring script
(eval/score.py). No figures are taken from external publications; every system,
including Whisper, was run by us under identical conditions.
| Model | Class | WER % (standard) | WER % (Damga) | CER % (Damga) |
|---|---|---|---|---|
| Whisper large-v3 | offline · GPU | 7.82 | 4.48 | 1.11 |
| Whisper large-v3-turbo | offline · GPU | 8.26 | 4.84 | 1.22 |
| turkish-stt-66m-v2 | streaming · CPU | 10.06 | 6.21 | 1.70 |
| turkish-stt (v1) | streaming · CPU | 13.90 | 9.38 | 2.50 |
| Whisper small | offline · GPU | 17.41 | 13.27 | 3.18 |
Whisper: Hugging Face transformers, fp16, language="turkish", greedy.
turkish-stt-66m-v2 and v1: int8, streaming, modified_beam_search (4 paths), one CPU thread.
What this means. v2 cuts v1's word errors by roughly 28–34% (depending on normalization) and is clearly ahead of Whisper small, while staying a streaming, CPU-only model at a fraction of Whisper's size. The much larger offline Whisper large-v3 / turbo (about 1.5 B / 0.8 B parameters, 12–24× larger) still lead on read speech, but they cannot stream and are slower than real time on a CPU.
WER depends heavily on how text is normalized before comparison, so we report two:
BasicTextNormalizer (lower-case, punctuation → space). It is
language-agnostic and widely used, so it is the column to compare against other published numbers.
It counts formatting differences as errors: 17 vs on yedi, Ay'ın vs ayın, hâlâ vs hala.17 = on yedi), then Turkish-aware lower-casing (I/ı, İ/i), apostrophes removed and circumflex
folded. It answers "was the word recognized?" — which is what matters when the transcript goes to
an LLM or a voice agent.The model's output is never altered by either; normalization is applied only at scoring time, to the reference and the hypothesis alike.
| Dataset | Domain | WER % |
|---|---|---|
| FLEURS-TR | read speech | 6.21 |
| MediaSpeech-TR | broadcast media | 10.95 |
v2 has exactly the same architecture and size as v1, so speed is unchanged. Timings below were measured on the shared architecture (AMD EPYC 7282, one CPU thread, FLEURS-TR clips):
| Model | CPU RTF | CPU p50 ms | CPU p95 ms | GPU RTF (RTX 4090) |
|---|---|---|---|---|
| turkish-stt-66m-v2 (int8) | 0.128 | 1619 | 2437 | CPU-only |
| Whisper small | 1.098 | 12923 | 18540 | 0.0252 |
| Whisper large-v3 | 6.095 | 70258 | 97979 | 0.0400 |
| Whisper large-v3-turbo | 4.296 | 52760 | 55969 | 0.0180 |
RTF = decode time ÷ audio duration (below 1.0 = faster than real time). On one 16-core CPU box turkish-stt-66m-v2 sustains about 25× real-time throughput (≈10–20 concurrent live streams); Whisper is slower than real time on CPU even for a single stream.
The easiest way is the turkish-stt package
(GitHub) — 2.0.0 and later load this model; weights download on first use.
pip install turkish-stt # 2.0.0+ — this model
pip install "turkish-stt[itn]" # + Damga, for written-form output
import mihu_stt
mihu_stt.transcribe("audio.wav") # "Toplam yüz elli lira ödedim."
mihu_stt.transcribe("audio.wav", itn=True) # "Toplam 150 TL ödedim." (Damga)
for seg in mihu_stt.transcribe_segments("audio.wav", itn=True): # subtitles / timed transcript
print(seg["start"], seg["end"], seg["text"])
stt = mihu_stt.StreamingSTT(itn=True) # live: microphone, phone line
text, is_final = stt.accept_pcm16(pcm16, sample_rate=16000)
LiveKit / Pipecat adapters, a microphone CLI and subtitle export are in the [GitHub repo](https://github.com/mih
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.