turkish-stt
Real-time, low-latency speech-to-text (STT) for Turkish — on the CPU.
Turkish-only · streaming · CPU-native · runs on the edge. A compact 66 M-parameter causal streaming model, built for voice agents, call centers, and on-device transcription where a GPU is not an option — no API key, no cloud, no GPU.
- 🇹🇷 Turkish-first — every parameter serves one language, not ~100
- ⚡ Streaming — partial results as you speak (~320 ms), no 30-second windows
- 🖥️ CPU-native — RTF 0.128 on a single CPU thread (~8× faster than real time)
- 🔌 Tiny — ~68 MB; runs on a Raspberry-Pi-class device
- 🏷️ Entity/brand aware — tuned for Turkish brands, models, and numbers
Installation
pip install "turkish-stt>=1,<2" # this line: model v1 (mihuai/turkish-stt)
1.0.0 is the stable release of the v1 model (same code and weights as 0.1.1). The newer model ships as 2.0.0 —
mihuai/turkish-stt-66m-v2, installed by a plainpip install turkish-stt.
Usage
import mihu_stt
# one-shot: transcribe a file (16 kHz mono, or anything soundfile reads)
text = mihu_stt.transcribe("audio.wav")
print(text)
# timed segments, cut at detected turn ends — for subtitles or a searchable transcript
for seg in mihu_stt.transcribe_segments("audio.wav"):
print(seg["start"], seg["end"], seg["text"])
Streaming — feed audio as it arrives and read an updating transcript, with turn-end detection built in:
import mihu_stt
stt = mihu_stt.StreamingSTT()
# pcm16 = 16-bit PCM bytes from your mic / phone line
text, is_final = stt.accept_pcm16(pcm16, sample_rate=16000)
# `text` updates while speech continues; `is_final` turns True at end-of-utterance
Model weights download automatically from Hugging Face
(mihuai/turkish-stt) the first time and are cached.
Try it on your microphone
examples/microphone.py is a ~60-line live transcriber — partial text updates as
you speak, each turn commits with a ✓ when the model detects end-of-utterance:
pip install turkish-stt sounddevice
python examples/microphone.py # default input device
python examples/microphone.py --list-devices # or pick one: --device 1
Transcribe a file, export the transcript
examples/export_transcript.py turns any audio file into a plain-text
transcript or timed subtitles — the format follows the output extension:
python examples/export_transcript.py meeting.wav # -> meeting.txt
python examples/export_transcript.py meeting.wav -o subs.srt # .srt / .vtt / .json
1
00:00:00,000 --> 00:00:05,280
Aracınızın periyodik bakımı tamamlandı. Dilerseniz kapınıza teslim ediyoruz
Integrations
Drop-in adapters for the common voice-agent stacks (see examples/):
LiveKit Agents — examples/livekit_stt.py:
from livekit.agents import AgentSession
from livekit_stt import MihuSTT
session = AgentSession(stt=MihuSTT(), llm=..., tts=...)
Pipecat — examples/pipecat_stt.py:
from pipecat_stt import MihuSTTService
pipeline = Pipeline([transport.input(), vad, MihuSTTService(), llm, tts, transport.output()])
Benchmarks
Measured in-house under one matched Turkish normalization. Real-human held-out FLEURS-TR (743 clips) and a second real-human set MediaSpeech-TR (200-clip subset), both audited absent from training. Latency on a single CPU thread (AMD EPYC 7282).
| System | Class | Params | FLEURS WER | MediaSpeech WER | CPU RTF |
|---|---|---|---|---|---|
| turkish-stt | streaming · CPU | 66 M | 13.90% | 15.89% | 0.128 |
| Vosk-TR | streaming · CPU | ~50 M | 34.09% | 31.02% | 0.138 |
| Whisper small | offline · GPU | 244 M | 15.12% | — | 1.098 |
| Whisper large-v3 | offline · GPU | 1.5 B | 7.08% | — | 6.095 |
Among streaming, CPU-deployable systems turkish-stt more than halves Vosk's error on both real-human sets, matches the four-times-larger offline Whisper-small, and is the only option that is real-time on CPU — it also degrades more gracefully than Vosk under additive noise. A detailed technical report — full methodology, ablations, latency/concurrency study, and the leakage audits — is being prepared and will be shared.
Reproduce the numbers
The evaluation set, references, and scripts are in eval/ — including the text (n-gram) and acoustic
(chromaprint) contamination audits used to verify the held-out sets are absent from training.
pip install "turkish-stt[eval]"
python eval/run_eval.py --data-dir eval/tts-synthetic
License
mihu Community License — free for research, personal, and limited commercial use. See LICENSE
for the full terms. Weights are released under the same license on Hugging Face.
Metadata
Release files for turkish-stt 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| turkish_stt-1.0.0.tar.gz | 10.6 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| turkish_stt-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.0 kB
Release files / turkish_stt-1.0.0.tar.gz
| Download URL | turkish_stt-1.0.0.tar.gz |
|---|---|
| Size | 10.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
52d8608948ac78de3cc7b5e11212df084ebd023bfe04825f449e525f1e019ac4
|
|
BLAKE2b-256 checksum How to use checksums |
288e1a5bc94cccb3bb2ca059a562b66953f00290bc1c8f31e9bf95ac9d993af3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.
Transparency logRelease files / turkish_stt-1.0.0-py3-none-any.whl
| Download URL | turkish_stt-1.0.0-py3-none-any.whl |
|---|---|
| Size | 10.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
15dddd42b50fd4b9f54f8eea15fd20fc0efdb5a8963b98844111290921ebe287
|
|
BLAKE2b-256 checksum How to use checksums |
9cd5f222d5f42c80181937d079c9073d8a514b76154295310038823b1a0df69b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.
Transparency logSecurity for turkish-stt 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for turkish_stt-1.0.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 19, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.