From 0203cb1e1ef9b569d64862712d81e409b69e726c Mon Sep 17 00:00:00 2001 From: Vladimir Sitnikov Date: Wed, 11 Nov 2026 09:06:42 +0300 Subject: [PATCH] docs: document GigaAM Multilingual Large CTC on the GigaAM model page PR #251 added a converter for gigaam-multilingual-large-ctc but updated only the porting docs. The user-facing page docs/models/gigaam.md still described the family as four Russian-only v3 variants, so a reader looking for Kazakh, Kyrgyz, Uzbek, or English found no way to get the model. The page now names the variant in the intro and in "Choosing a variant", and a new section gives its languages, output, the convert, quantize, and run commands, the --language behavior, and the quant parity checked on Metal. Claims that held only for v3 (shared encoder, pre-built GGUFs) are scoped to v3, and the input-limits section says the 25 s window is unverified for this variant. The variant stays out of the README and the catalog tables: those are rendered from catalog/, and the variant has no published GGUF, WER, or benchmark yet. Part of #87. Assisted-by: Claude Opus 5.5 --- docs/models/gigaam.md | 62 ++++++++++++++++++++++++++++++++++++++-- docs/tools/conversion.md | 4 ++- 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/docs/models/gigaam.md b/docs/models/gigaam.md index e5311242..20f38cb5 100644 --- a/docs/models/gigaam.md +++ b/docs/models/gigaam.md @@ -8,6 +8,11 @@ trained either end-to-end on cased+punctuated text or on lowercased no-punctuation text with a 33-entry character vocabulary. The four shipped variants are the four cells of that 2×2. +A fifth variant, `gigaam-multilingual-large-ctc`, comes from +[`ai-sage/GigaAM-Multilingual`](https://huggingface.co/ai-sage/GigaAM-Multilingual), +transcribes five languages, and is not published yet; see +[GigaAM Multilingual Large CTC](#gigaam-multilingual-large-ctc). + For the architecture deep-dive, validation contract, and porting notes, see the family doc at [`docs/porting/families/gigaam.md`](../porting/families/gigaam.md). @@ -26,7 +31,11 @@ see the family doc at output is normalized for downstream ASR scoring pipelines that expect this convention. Higher raw WER than the e2e variants because errors on case/punctuation are no longer absorbed by tokenization. -- The encoder is structurally identical across the four variants but +- **Russian, English, Kazakh, Kyrgyz, or Uzbek.** + `gigaam-multilingual-large-ctc` — lowercase charwise output with no + punctuation. No pre-built GGUF; convert it yourself, see + [GigaAM Multilingual Large CTC](#gigaam-multilingual-large-ctc). +- The encoder is structurally identical across the four v3 variants but the weights are per-variant fine-tuned — you cannot swap heads at runtime. @@ -45,10 +54,51 @@ for the full quant matrix. | `gigaam-v3-ctc` | 221M | ru | 272 MB | FLEURS ru (WER) | 8.42% | token timestamps | [gigaam-v3-ctc.md](gigaam-v3-ctc.md) | -Pre-built GGUFs for every variant and quant are hosted under +Pre-built GGUFs for every v3 variant and quant are hosted under [`handy-computer` on Hugging Face](https://huggingface.co/handy-computer); each per-variant doc has direct download links. +## GigaAM Multilingual Large CTC + +`gigaam-multilingual-large-ctc` is the `large_ctc` branch of +[`ai-sage/GigaAM-Multilingual`](https://huggingface.co/ai-sage/GigaAM-Multilingual). +It transcribes Russian, English, Kazakh, Kyrgyz, and Uzbek into lowercase +text with no punctuation. The encoder has 24 layers at d_model=1024, larger +than the v3 encoder, and the CTC head decodes a 70-character vocabulary. + +The variant is not in the table above: no GGUF is published, and its WER +and benchmarks have not been measured. Conversion and numerical validation +at F32 pass; the [family doc](../porting/families/gigaam.md#gigaam-multilingual-large-ctc) +has the validation results. + +Convert, quantize, and run: + +```bash +uv run --project scripts/envs/gigaam \ + scripts/convert-gigaam.py ai-sage/GigaAM-Multilingual \ + --repo-id gigaam-multilingual-large-ctc + +build/bin/transcribe-quantize \ + models/gigaam-multilingual-large-ctc/gigaam-multilingual-large-ctc-F32.gguf \ + models/gigaam-multilingual-large-ctc/gigaam-multilingual-large-ctc-Q8_0.gguf \ + --quant Q8_0 + +build/bin/transcribe-cli \ + -m models/gigaam-multilingual-large-ctc/gigaam-multilingual-large-ctc-Q8_0.gguf \ + samples/fleurs-en.wav +``` + +The converter downloads a 2.3 GB snapshot at the commit pinned in +`scripts/lib/gigaam_hf.py` and writes a 2.3 GB (2341378624 bytes) F32 GGUF. +It accepts only the repo id `ai-sage/GigaAM-Multilingual`, not a local +directory. + +The model takes no language input. `--language` accepts `ru`, `en`, `kk`, +`ky`, and `uz` and leaves the transcript unchanged; any other code fails +with `run: unsupported language`. On the clips checked with Metal, Q5_K_M +and larger quantizations match the reference transcript; Q4_K_M changes one +letter on one Kazakh clip. + ## Input limits GigaAM is trained for utterances up to about **25 seconds**. Longer audio is @@ -57,6 +107,10 @@ stitched into one sequence for a single greedy decode. There is no practical length limit, and the encoder workspace does not grow with input length. Audio up to 25 s is encoded in one pass. See the [input-length contract](../input-limits.md). +The runtime applies the same 25 s window to `gigaam-multilingual-large-ctc`. +The port records no training length for this variant, and no clip longer +than 25 s has been compared with the reference. + ## Quick start Pick a variant and run: @@ -88,3 +142,7 @@ streaming, VAD, speaker diarization, languages other than Russian. Long-form input is windowed internally rather than through upstream's `transcribe_longform` PyAnnote-VAD chunking. See the family doc for the full runtime contract. + +`gigaam-multilingual-large-ctc` has the same capabilities and gaps, except +that it transcribes the five languages listed in +[its section](#gigaam-multilingual-large-ctc). diff --git a/docs/tools/conversion.md b/docs/tools/conversion.md index 130eac37..2cebf87c 100644 --- a/docs/tools/conversion.md +++ b/docs/tools/conversion.md @@ -38,7 +38,9 @@ source format: `voxtral_realtime`, `granite`, `granite_nar`, `moonshine`, `moonshine_streaming`, `qwen3_asr`, `medasr`, `cohere` - **FunASR**: `sensevoice`, `funasr_nano` -- **Author package**: `gigaam` (the upstream `gigaam` pip package) +- **Author package**: `gigaam` (the upstream `gigaam` pip package; GigaAM + Multilingual is built from that package's classes and a pinned Hugging Face + snapshot) Each converter is a single-file script with inline documentation of its tensor catalog, hparam map, and layout transforms. No base class. See