CoolFace
Modelpublic

cstr/tiron-GGML

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes
Model Card

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

filequantsizenotes
tiron-f16.binF163.1 GBfull precision; reference-exact token stream
tiron-q4_k.binQ4_K889 MBrecommended 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:

bash
crispasr --backend tiron -m auto -f meeting.wav

Or point at a local file:

bash
crispasr --backend tiron -m tiron-q4_k.bin -f meeting.wav

Add meeting-level speaker labels (SPEAKER_00, SPEAKER_01, …) by turning on diarization, which clusters voiceprints across windows:

bash
crispasr --backend tiron -m tiron-q4_k.bin -f meeting.wav --diarize

How it works

  • —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.

Attribution & license

  • —Base model: `Trelis/tiron` — Apache-2.0.
  • —Reference harness: `TrelisResearch/tiron` — Apache-2.0.
  • —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.