tiron — multi-speaker meeting ASR (GGML for CrispASR)
GGML conversions of Trelis/tiron
(Apache-2.0) — a Whisper large-v3 model fine-tuned to transcribe multi-speaker
meetings and emit inline <|speakerN|> speaker markers, so a single forward
pass produces both the words and who said them.
These files run on CrispASR, whose
whisper backend implements tiron's speaker-vocabulary detection, constrained
decode, windowing, and cross-window speaker linking. They will not work with
stock whisper.cpp — the speaker-token grammar and diarization are
CrispASR-specific.
Files
file
quant
size
notes
tiron-f16.bin
F16
3.1 GB
full precision; reference-exact token stream
tiron-q4_k.bin
Q4_K
889 MB
recommended default; ~3.5× smaller, negligible WER change
Legacy GGML .bin (whisper format), quantized with CrispASR's
crispasr-legacy-quantize. tiron-q4_k.bin is the registry default
(crispasr --backend tiron -m auto auto-downloads it).
What it is
A drop-in WhisperForConditionalGeneration — Whisper large-v3 (128-mel, 32
encoder + 32 decoder layers, 1280-d) with an extended 51904-token vocabulary:
<|speaker1|>…<|speaker8|> (ids 51866–51873) plus <|nospeech|>. Speaker
indices are window-local (the first talker in each 30 s window is always
<|speaker1|>), so "speaker1" in one window is not necessarily the same person as
"speaker1" in another — see Diarization below.
Usage (CrispASR)
Auto-download the default (q4_k) and transcribe with inline speaker markers:
Constrained decode. Not plain greedy (which loses ~5 cpWER) — a port of the
upstream harness's grammar: step 0 forces <|speaker1|>/<|nospeech|>; a
speaker tag forces an opening timestamp; text runs to a closing timestamp; a
closing timestamp then allows EOS, another opening timestamp (same speaker
continues), or the next speaker slot. no_repeat_ngram_size=15. Per-speaker
timelines are non-monotonic, so whisper's "timestamps must increase" seek rule
is disabled for the speaker vocabulary.
Windowing. A 0.75 s onset pad, fixed non-overlapping 30 s windows, and an
RMS silent-window gate — driven exactly as the reference engine.py.
Diarization (--diarize). CrispASR promotes the window-local indices to
stable meeting-level SPEAKER_NN identities by clustering per-(window, local-speaker) voiceprints (TitaNet / ECAPA embeddings + agglomerative cosine),
with a within-window must-link "spine". This is speaker diarization —
grouping speakers within a recording — not identification against any external
roster or database.
Validation
The CrispASR C++ decode was validated byte-exact against the Python reference
(tools/reference_backends/tiron.py) on the F16 model — identical token streams
per window — and the q4_k output matches at 1.000 decoded-word overlap.
This conversion: Apache-2.0. These are quantized GGML re-encodings of the
Trelis weights for the whisper.cpp/CrispASR runtime; all credit for the model
goes to Trelis Research. See the base model card for training data and details.
Limitations
English meeting audio; up to 8 concurrent speaker slots per 30 s window.
Requires a CrispASR build with tiron decode support; incompatible with stock
whisper.cpp.
Window-local speaker indices are only promoted to consistent identities when
--diarize is enabled; without it, treat <|speakerN|> as window-scoped.