Skip to main content

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 plain pip 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)

Source distribution for turkish-stt 1.0.0
File Size Uploaded Provenance
turkish_stt-1.0.0.tar.gz 10.6 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for turkish-stt 1.0.0
File Interpreter ABI Platform
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page