File size: 4,551 Bytes
9fb8a95 272e46f 9fb8a95 272e46f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | ---
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.
|