| --- |
| license: apache-2.0 |
| base_model: Trelis/tiron |
| pipeline_tag: automatic-speech-recognition |
| library_name: whisper.cpp |
| tags: |
| - automatic-speech-recognition |
| - whisper |
| - whisper-large-v3 |
| - speaker-diarization |
| - meeting-transcription |
| - crispasr |
| - ggml |
| - gguf |
| language: |
| - en |
| --- |
| |
| # tiron β multi-speaker meeting ASR (GGML for CrispASR) |
|
|
| GGML conversions of [**`Trelis/tiron`**](https://huggingface.co/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**](https://github.com/CrispStrobe/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: |
| |
| ```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`](https://huggingface.co/Trelis/tiron) β Apache-2.0. |
| - **Reference harness:** [`TrelisResearch/tiron`](https://github.com/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. |
| |