From 2e4b38ca8480a84a2fcf0ef2c92a98bd9d680e0b Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Fri, 11 Sep 2026 20:21:17 -0700 Subject: [PATCH 01/24] add FLEURS WER analysis experiments --- scripts/hf_cards/backfill_identity.py | 161 +++++++ scripts/wer/build_db.py | 517 ++++++++++++++++++++++ scripts/wer/by_language.py | 156 +++++++ scripts/wer/gguf_header.py | 154 +++++++ scripts/wer/languages.py | 162 +++++++ scripts/wer/perf_lookup.py | 92 ++++ scripts/wer/quant_delta.py | 189 ++++++++ scripts/wer/recommend.py | 102 +++++ scripts/wer/remote/fleurs_full_matrix.py | 534 +++++++++++++++++++++++ scripts/wer/remote/fleurs_matrix.py | 347 +++++++++++++++ scripts/wer/score_matrix.py | 184 ++++++++ 11 files changed, 2598 insertions(+) create mode 100644 scripts/hf_cards/backfill_identity.py create mode 100644 scripts/wer/build_db.py create mode 100644 scripts/wer/by_language.py create mode 100644 scripts/wer/gguf_header.py create mode 100644 scripts/wer/languages.py create mode 100644 scripts/wer/perf_lookup.py create mode 100644 scripts/wer/quant_delta.py create mode 100644 scripts/wer/recommend.py create mode 100644 scripts/wer/remote/fleurs_full_matrix.py create mode 100644 scripts/wer/remote/fleurs_matrix.py create mode 100644 scripts/wer/score_matrix.py diff --git a/scripts/hf_cards/backfill_identity.py b/scripts/hf_cards/backfill_identity.py new file mode 100644 index 00000000..8a7d0abc --- /dev/null +++ b/scripts/hf_cards/backfill_identity.py @@ -0,0 +1,161 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# dependencies = ["pyyaml", "requests"] +# /// +"""backfill_identity.py — write family + params into the hf_card specs. + +The GGUF already knows both. `general.architecture` is the family string the +loader dispatches on, and the parameter count is the sum of the tensor +shapes. Neither was ever copied into the card, so nothing downstream could +group the Moonshine variants, or sort by model size. + +Weights for most models are no longer on this disk (converted, uploaded, +deleted), so anything missing locally is read from the Hub over a range +request: a couple of MB per model rather than the whole file. From here on +the fields belong in the card when it is authored, in porting-5-quants or +porting-8-ship, where the GGUF is guaranteed to be at hand. + + uv run scripts/hf_cards/backfill_identity.py # dry run + uv run scripts/hf_cards/backfill_identity.py --write + uv run scripts/hf_cards/backfill_identity.py --local-only +""" +from __future__ import annotations + +import argparse +import pathlib +import re +import sys + +import requests +import yaml + +REPO = pathlib.Path(__file__).resolve().parents[2] +CARDS = REPO / "scripts" / "hf_cards" +MODELS = REPO / "models" + +sys.path.insert(0, str(REPO / "scripts" / "wer")) +from gguf_header import hf_token, identity, identity_remote # noqa: E402 + +# Smallest first: the header is identical across quants, so fetch the file +# whose bulk we are least likely to touch if a header turns out to be large. +QUANT_ORDER = ["Q4_K_M", "Q5_K_M", "Q6_K", "Q8_0", "F16", "BF16", "F32"] + + +def norm(s: str) -> str: + return re.sub(r"[^a-z0-9]", "", s.lower()) + + +def local_gguf(slug: str) -> pathlib.Path | None: + dirs = {norm(p.name): p for p in MODELS.glob("*") if p.is_dir()} + d = dirs.get(norm(slug)) + if not d: + return None + files = sorted(d.glob("*.gguf"), key=lambda p: p.stat().st_size) + return files[0] if files else None + + +def remote_gguf(repo: str) -> str | None: + """Pick one GGUF filename from a Hub repo listing.""" + h = {} + tok = hf_token() + if tok: + h["Authorization"] = f"Bearer {tok}" + r = requests.get(f"https://huggingface.co/api/models/{repo}", + headers=h, timeout=30) + if not r.ok: + return None + names = [s["rfilename"] for s in r.json().get("siblings", []) + if s["rfilename"].endswith(".gguf")] + for q in QUANT_ORDER: + for n in names: + if n.endswith(f"-{q}.gguf"): + return n + return names[0] if names else None + + +def insert_fields(text: str, family: str, params: str) -> str | None: + """Add the two lines after the licence block, leaving the rest as is. + + A yaml round-trip would drop every comment in the file, and these specs + are commented documents, so the edit is textual and anchored.""" + if re.search(r"^family:", text, re.M): + return None + m = None + for pat in (r"^license_link:.*$", r"^license_name:.*$", + r"^license_display:.*$", r"^license:.*$"): + found = list(re.finditer(pat, text, re.M)) + if found: + m = found[-1] + break + if not m: + return None + add = (f"\n\n# Identity, read from the GGUF: general.architecture, and the\n" + f"# parameter count summed from the tensor shapes.\n" + f"family: {family}\nparams: {params}") + return text[:m.end()] + add + text[m.end():] + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--write", action="store_true", + help="edit the specs (default is a dry run)") + ap.add_argument("--local-only", action="store_true", + help="skip models whose weights are not on this disk") + ap.add_argument("--only", default="", + help="comma-separated card stems, for a targeted run") + args = ap.parse_args() + only = {norm(s) for s in args.only.split(",") if s.strip()} + + filled, failed, already = [], [], 0 + for card in sorted(CARDS.glob("*.yaml")): + if only and norm(card.stem) not in only: + continue + spec = yaml.safe_load(card.read_text()) or {} + if spec.get("family"): + already += 1 + continue + path, where = local_gguf(card.stem), "local" + try: + if path: + info = identity(path) + src = path.name + elif args.local_only or not spec.get("target_repo"): + failed.append((card.stem, "no local GGUF")) + continue + else: + repo = spec["target_repo"] + name = remote_gguf(repo) + if not name: + failed.append((card.stem, f"no GGUF in {repo}")) + continue + info = identity_remote(repo, name) + where, src = "hub", f"{repo}/{name}" + except Exception as e: # noqa: BLE001 + failed.append((card.stem, f"{type(e).__name__}: {e}")) + continue + if not info["family"]: + failed.append((card.stem, "no general.architecture in the header")) + continue + params = f"{round(info['params'] / 1e6)}M" + print(f" {card.stem:38s} {where:6s} family={info['family']:20s} " + f"params={params:>7s} ({src})") + filled.append((card, info["family"], params)) + + if args.write: + for card, family, params in filled: + new = insert_fields(card.read_text(), family, params) + if new: + card.write_text(new) + + print(f"\n{len(filled)} card(s) {'written' if args.write else 'to write'}, " + f"{already} already had it, {len(failed)} failed") + for stem, why in failed: + print(f" FAIL {stem}: {why}") + if not args.write and filled: + print("\ndry run; pass --write to apply") + return 1 if failed else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/wer/build_db.py b/scripts/wer/build_db.py new file mode 100644 index 00000000..4a09ea2a --- /dev/null +++ b/scripts/wer/build_db.py @@ -0,0 +1,517 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# dependencies = ["pyyaml"] +# /// +"""build_db.py — assemble reports/wer/wer.db from the published artifacts. + +A DERIVED INDEX, never a store: dropped and rebuilt from scratch on every +run, nothing hand-edited in it. The sources of truth stay where they are: + + reports/wer/*.score.json scored cells from the FLEURS sweep + docs/models/*.md the published speed tables + scripts/hf_cards/*.yaml licence, quants, capabilities, family + scripts/wer/languages.py BCP-47 -> name + script + scripts/wer/ingest.py BCP-47 -> FLEURS config + +The point is the joins. Accuracy lives in one place, speed in another, +licence and download size in a third, and no single file lets you ask +"which models cover these languages, under this error rate, above this +speed, under this size". One table does. + +WHAT GOES IN. Only the current sweep: FLEURS, the batched timestamps-off +recipe, full splits. No reference or bring-up rows, no subsets, no +LibriSpeech, no numbers from older recipes. The recipe is therefore a +constant of the whole database and lives in `meta` rather than on every +row; when a second recipe matters, that is the moment to add a column. +Models are here because they have a result, and everything else is pruned +to them: a model with no measurement, a language nothing references, and a +quant of a model nobody scored are all absent by construction. + +Speed comes from the per-model markdown docs rather than the `perf:` block +in the cards, because the docs keep the two axes the block averages away: +quant and sample. The card number is the mean of the doc's Q8_0 columns +(verified: whisper-large-v3 m4-max metal 23.6 is the mean of jfk 21.6 and +dots 25.7). Three models publish no table of their own and take a +sibling's, which is what `perf.measured_on` records. + +Foreign keys are on and the NOT NULLs are meant: a hole is a build failure, +not a row of nulls for the site to work around. +""" +from __future__ import annotations + +import ast +import glob +import json +import pathlib +import re +import sqlite3 +import sys +from datetime import datetime, timezone + +import yaml + +REPO = pathlib.Path(__file__).resolve().parents[2] +WER = REPO / "reports" / "wer" +DOCS = REPO / "docs" / "models" +CARDS = REPO / "scripts" / "hf_cards" +MODELS = REPO / "models" +DB = WER / "wer.db" + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from languages import LANGUAGES # noqa: E402 +from score_matrix import CELL_SCORE_ARGS # noqa: E402 +from gguf_header import identity # noqa: E402 + +SCHEMA = """ +PRAGMA user_version = 4; + +CREATE TABLE meta(key TEXT PRIMARY KEY, value TEXT); + +CREATE TABLE languages( + lang TEXT PRIMARY KEY, + name TEXT NOT NULL, + script TEXT NOT NULL -- ISO 15924: Latn, Cyrl, Hans ... +); + +CREATE TABLE datasets( + dataset TEXT PRIMARY KEY, -- fleurs-de + source TEXT NOT NULL, -- fleurs | librispeech | common-voice ... + config TEXT NOT NULL, -- the source's own selector: de_de + lang TEXT NOT NULL REFERENCES languages(lang) +); + +CREATE TABLE models( + model TEXT PRIMARY KEY, + family TEXT NOT NULL, -- loader family from the GGUF header + params_m REAL NOT NULL, -- millions, summed from tensor shapes + license TEXT, + license_display TEXT, + upstream_repo TEXT, + upstream_commit TEXT, + streaming INTEGER, + translate INTEGER, + lang_detect INTEGER, + diarize INTEGER, + timestamps TEXT -- none | segment | word | token +); + +CREATE TABLE model_languages( + model TEXT REFERENCES models(model), + lang TEXT REFERENCES languages(lang), -- the RAW code the card claims; + -- see language_aliases to join + -- it against measured results + PRIMARY KEY(model, lang) +); + +-- FLEURS_LANGS (scripts/wer/ingest.py) is many-to-one: tl/fil both mean +-- fil_ph, no/nb both mean nb_no, zh/zh-cn both mean cmn_hans_cn. The sweep +-- measures and names ONE spelling per config (fleurs_full_matrix.py's +-- canonical_codes()); a model's card can claim any of the others (Whisper +-- says tl/no, Fun-ASR says tl, Nemotron says nb). Without this table a join +-- from model_languages to datasets/results on lang silently drops those +-- models for that language. Derived from FLEURS_LANGS, not hand-maintained: +-- see language_alias_pairs() below. Nynorsk (nn) is deliberately absent -- +-- it has no FLEURS config to alias to, and that absence is the honest +-- answer ("no benchmark exists"), not a bug to paper over. +CREATE TABLE language_aliases( + alias TEXT PRIMARY KEY REFERENCES languages(lang), + canonical TEXT NOT NULL REFERENCES languages(lang) +); + +-- The join surface most callers actually want: a model's claimed languages, +-- resolved to the spelling datasets/results use. model_languages itself +-- stays raw so the card's original claim is never lost. +CREATE VIEW model_languages_canonical AS +SELECT model, COALESCE(a.canonical, ml.lang) AS lang +FROM model_languages ml +LEFT JOIN language_aliases a ON a.alias = ml.lang; + +CREATE TABLE quants( + model TEXT REFERENCES models(model), + quant TEXT, + filename TEXT NOT NULL, + size_gb REAL NOT NULL, + PRIMARY KEY(model, quant) +); + +CREATE TABLE results( + dataset TEXT REFERENCES datasets(dataset), + model TEXT REFERENCES models(model), + quant TEXT NOT NULL, + metric TEXT NOT NULL CHECK(metric IN ('wer','cer')), + err_pct REAL NOT NULL CHECK(err_pct >= 0), + ci_lo REAL, + ci_hi REAL, + n_utts INTEGER NOT NULL CHECK(n_utts > 0), + note TEXT, + PRIMARY KEY(dataset, model, quant) +); + +CREATE TABLE rigs( + rig TEXT PRIMARY KEY, -- m4-max, ryzen-4750u, m4 + display TEXT NOT NULL +); + +CREATE TABLE perf( + model TEXT REFERENCES models(model), + rig TEXT REFERENCES rigs(rig), + backend TEXT NOT NULL, -- metal | vulkan | cpu + quant TEXT NOT NULL, + sample TEXT NOT NULL, -- jfk | dots | ru + sample_s REAL NOT NULL, -- so an app can weight or average + xrt REAL NOT NULL, -- x realtime over mel+encode+decode + -- The checkpoint the number was actually measured on. Usually the + -- model itself; for a fine-tune that publishes no table of its own it + -- is the sibling, which may not be a row here (Breeze carries + -- whisper-large-v2's numbers and whisper-large-v2 has no FLEURS + -- result). Deliberately not a foreign key for that reason. + measured_on TEXT NOT NULL, + PRIMARY KEY(model, rig, backend, quant, sample) +); +""" + +# --- what the sweep is ------------------------------------------------- + +SOURCE = "fleurs" +VARIANT = "b8" # the filename tag for the batched sweep +BATCH_SIZE = 8 +TIMESTAMPS = "none" + +# Dtype presets that are real shipped files. REF (a framework reference run) +# and CPP (an early bring-up run) occupy the same slot in a filename without +# being shipped quants, and are not sweep rows. +# +# Results are restricted to Q8_0 and Q5_K_M FOR NOW: the 2026-09-02 full +# FLEURS sweep only generated those two, so every other preset (F32, BF16, +# F16, Q6_K, Q4_K_M) is leftover from an earlier, narrower quant probe -- +# 8 languages at most, sometimes 1 -- on a different engine build. Mixing +# those into the same results table reads as a quant comparison it isn't: +# voxtral-realtime's Q6_K/Q4_K_M rows were still on the pre-patch offline +# delay while its Q8_0/Q5_K_M rows were the delay-30 re-run, so the "quant +# cost" was actually a decode-setting difference. Widen this once the other +# presets get the same full-matrix treatment. +QUANTS = ("Q8_0", "Q5_K_M") +EXCLUDED_QUANTS = ("REF", "CPP") + +NAME = re.compile( + rf"^(?P.+?)-(?P{'|'.join(QUANTS + EXCLUDED_QUANTS)})" + rf"(?P(?:-[A-Za-z0-9]+)*)\.(?P.+)\.score\.json$") + +# --- the published speed tables ---------------------------------------- + +# Heading in docs/models/*.md -> rig id. The 4750U is spelled three ways +# across the docs; they are one machine. +RIG_HEADINGS = { + "apple m4 max": "m4-max", + "apple m4": "m4", + "amd ryzen 7 pro 4750u": "ryzen-4750u", + "amd ryzen 7 4750u pro": "ryzen-4750u", + "amd ryzen 7 pro 4750u (vega 8 igpu)": "ryzen-4750u", +} +RIG_DISPLAY = {"m4-max": "Apple M4 Max", "m4": "Apple M4", + "ryzen-4750u": "AMD Ryzen 7 PRO 4750U"} + +# Models with no speed table of their own, and the sibling whose numbers +# they carry. Both are fine-tunes of the named checkpoint at identical +# shape, and both already publish exactly its figures in their own card; +# recording it here makes that visible in the data instead of implied. +# (Breeze is handled without an entry: its card's transcribe_docs_url +# already points at whisper-large-v2.md.) +PERF_INHERITS = { + "parakeet-primeline": "parakeet-tdt-0.6b-v3", + "cohere-transcribe-arabic-07-2026": "cohere-transcribe-03-2026", +} + + +def norm(s: str) -> str: + return re.sub(r"[^a-z0-9]", "", s.lower()) + + +def fleurs_map() -> dict[str, str]: + src = (REPO / "scripts/wer/ingest.py").read_text() + body = re.search(r"FLEURS_LANGS: dict\[str, str\] = \{(.*?)\n\}", src, re.S).group(1) + return ast.literal_eval("{" + re.sub(r"#.*", "", body) + "}") + + +def language_alias_pairs(fleurs: dict[str, str], measured: set[str], + claimed: set[str]) -> list[tuple[str, str]]: + """(alias, canonical) for every code whose FLEURS config was measured + under a DIFFERENT spelling than a card claims it under. + + FLEURS_LANGS is many-to-one (fil/tl -> fil_ph, nb/no -> nb_no, + zh/zh-cn -> cmn_hans_cn) and the sweep names one spelling per config, so + grouping fleurs by config and picking whichever code is actually in + `measured` gives the same canonical spelling the datasets/results tables + already use -- no second, hand-typed copy of the tl/no/zh-cn decisions. + + A pair is only emitted when the alias is actually claimed by some + surviving card and the canonical spelling was actually measured; + aliasing a spelling nothing references or nothing was measured for + would add a row with no query it helps.""" + by_cfg: dict[str, list[str]] = {} + for code, cfg in fleurs.items(): + by_cfg.setdefault(cfg, []).append(code) + pairs = [] + for codes in by_cfg.values(): + canonical = next((c for c in codes if c in measured), None) + if canonical is None: + continue + pairs += [(c, canonical) for c in codes if c != canonical and c in claimed] + return pairs + + +def size_to_gb(s) -> float | None: + if not isinstance(s, str): + return None + m = re.match(r"([\d.]+)\s*(GB|MB)", s.strip(), re.I) + if not m: + return None + v = float(m.group(1)) + return round(v / 1024, 4) if m.group(2).upper() == "MB" else v + + +def params_m(v) -> float | None: + if not isinstance(v, str): + return None + m = re.match(r"([\d.]+)\s*([MB])", v.strip(), re.I) + if not m: + return None + n = float(m.group(1)) + return round(n * 1000, 1) if m.group(2).upper() == "B" else n + + +def read_cell(d: dict) -> tuple[str, float, float, float, int] | None: + """(metric, err_pct, ci_lo, ci_hi, n) from a score.json, either shape. + + score.py grew the metric-neutral keys when CER routing landed; older + artifacts carry only wer/wer_pct.""" + if d.get("metric") in ("wer", "cer") and d.get("error_rate_pct") is not None: + return (d["metric"], d["error_rate_pct"], + round(d.get("error_rate_ci_lo", 0) * 100, 2), + round(d.get("error_rate_ci_hi", 0) * 100, 2), d["n"]) + for legacy in ("wer", "cer"): + if d.get(f"{legacy}_pct") is not None: + return (legacy, d[f"{legacy}_pct"], + round(d.get(f"{legacy}_ci_lo", 0) * 100, 2), + round(d.get(f"{legacy}_ci_hi", 0) * 100, 2), d["n"]) + return None + + +def sweep_cells() -> list[dict]: + """Every score.json that belongs to the sweep, parsed. + + A file qualifies on four counts: the dataset is FLEURS in a language we + can name, the filename carries the sweep's recipe tag, the quant is a + shipped preset, and the cell covers the full split. The last is checked + after the fact, since "full" is the largest n seen for that language.""" + out = [] + for p in sorted(WER.glob("*.score.json")): + m = NAME.match(p.name) + if not m or m.group("quant") in EXCLUDED_QUANTS: + continue + parts = m.group("rest").split(".") + dataset, tags = parts[0], parts[1:] + if tags != [VARIANT] or not dataset.startswith(f"{SOURCE}-"): + continue + lang = dataset[len(SOURCE) + 1:] + if lang not in LANGUAGES: + continue # subset ids like fleurs-ru-508 + cell = read_cell(json.loads(p.read_text())) + if cell is None: + continue + metric, err, lo, hi, n = cell + out.append({"dataset": dataset, "lang": lang, "model": m.group("model"), + "quant": m.group("quant"), "metric": metric, "err": err, + "lo": lo, "hi": hi, "n": n}) + full = {} + for c in out: + full[c["dataset"]] = max(full.get(c["dataset"], 0), c["n"]) + return [c for c in out if c["n"] == full[c["dataset"]]] + + +def doc_perf(doc: pathlib.Path) -> list[tuple]: + """(rig, backend, quant, sample, sample_s, xrt) from a doc's tables. + + Two table shapes appear across docs/models/*.md: + A) `| Backend | Sample | Q... | Q... |` -- backend is a column, one + table covers every backend for that rig. + B) a `**Backend**` line followed by `| Sample | Q... | Q... |` -- the + AMD 4750U tables use this shape (one table per backend, since the + quant set sometimes differs, e.g. Vulkan-only wide vs CPU-only). + Sample cells are `name (11.0s)` or `name (11.0 s)` -- both appear.""" + t = doc.read_text() + section = re.search(r"^## Performance\s*$(.*?)(?=^## |\Z)", t, re.M | re.S) + if not section: + return [] + rows, rig, quants, backend = [], None, [], None + for line in section.group(1).splitlines(): + head = re.match(r"^### (.+?)\s*$", line) + if head: + rig = RIG_HEADINGS.get(head.group(1).strip().lower()) + backend, quants = None, [] + continue + bold = re.match(r"^\*\*(.+?)\*\*\s*$", line) + if bold: + backend, quants = bold.group(1).split()[0].lower(), [] + continue + cols = re.match(r"^\|\s*Backend\s*\|\s*Sample\s*\|(.+)\|\s*$", line) + if cols: + quants, backend = [c.strip() for c in cols.group(1).split("|") if c.strip()], None + continue + cols_b = re.match(r"^\|\s*Sample\s*\|(.+)\|\s*$", line) + if cols_b and backend: + quants = [c.strip() for c in cols_b.group(1).split("|") if c.strip()] + continue + if not rig or not line.startswith("|"): + continue + cells = [c.strip() for c in line.strip().strip("|").split("|")] + if backend is not None: + sample_cell, value_cells, row_backend = cells[0], cells[1:], backend + else: + if len(cells) < 3: + continue + sample_cell, value_cells, row_backend = cells[1], cells[2:], cells[0].lower() + sm = re.match(r"([\w.-]+)\s*\(([\d.]+)\s*s\)", sample_cell) + if not sm: + continue + for quant, cell in zip(quants, value_cells): + x = re.search(r"\(([\d.]+)\s*[x×]\)", cell) + if x: + rows.append((rig, row_backend, quant, sm.group(1), + float(sm.group(2)), float(x.group(1)))) + return rows + + +def main() -> int: + fleurs = fleurs_map() + cards = {norm(pathlib.Path(p).stem): (pathlib.Path(p), yaml.safe_load(open(p).read()) or {}) + for p in glob.glob(str(CARDS / "*.yaml"))} + + cells = sweep_cells() + if not cells: + print("no sweep cells found", file=sys.stderr) + return 1 + models = sorted({c["model"] for c in cells}) + langs = sorted({c["lang"] for c in cells}) + + DB.unlink(missing_ok=True) + con = sqlite3.connect(DB) + con.execute("PRAGMA foreign_keys = ON") + con.executescript(SCHEMA) + + # Languages: the measured ones plus every code the surviving cards + # claim, so a coverage question has a name to render. + wanted = set(langs) + for m in models: + _, c = cards.get(norm(m), (None, {})) + wanted |= {str(l) for l in (c.get("languages") or []) if str(l) in LANGUAGES} + con.executemany("INSERT INTO languages VALUES (?,?,?)", + [(l, LANGUAGES[l][0], LANGUAGES[l][1]) for l in sorted(wanted)]) + + alias_pairs = language_alias_pairs(fleurs, measured=set(langs), claimed=wanted) + con.executemany("INSERT INTO language_aliases VALUES (?,?)", sorted(alias_pairs)) + + con.executemany("INSERT INTO datasets VALUES (?,?,?,?)", + [(f"{SOURCE}-{l}", SOURCE, fleurs[l], l) for l in langs]) + + missing_card = [] + for m in models: + path, c = cards.get(norm(m), (None, {})) + family, pm = c.get("family"), params_m(c.get("params")) + if not family or pm is None: + # No card, or a card without identity. The GGUF is the source + # for both either way, so read it directly rather than dropping + # measured cells over missing paperwork. + missing_card.append(m) + d = {norm(p.name): p for p in MODELS.glob("*") if p.is_dir()}.get(norm(m)) + files = sorted(d.glob("*.gguf"), key=lambda p: p.stat().st_size) if d else [] + if not files: + print(f"error: {m} has no card identity and no local GGUF; " + f"run scripts/hf_cards/backfill_identity.py", file=sys.stderr) + return 1 + info = identity(files[0]) + family, pm = info["family"], round(info["params"] / 1e6, 1) + caps = c.get("capabilities") or {} + con.execute("INSERT INTO models VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", + (m, family, pm, c.get("license"), c.get("license_display"), + c.get("hf_repo"), c.get("upstream_commit"), + int(bool(caps.get("streaming"))), int(bool(caps.get("translate"))), + int(bool(caps.get("lang_detect"))), int(bool(caps.get("diarize"))), + caps.get("timestamps"))) + for lg in (c.get("languages") or []): + if str(lg) in wanted: + con.execute("INSERT OR REPLACE INTO model_languages VALUES (?,?)", + (m, str(lg))) + for q in (c.get("quants") or []): + gb = size_to_gb(q.get("size")) + if q.get("name") and q.get("filename") and gb is not None: + con.execute("INSERT OR REPLACE INTO quants VALUES (?,?,?,?)", + (m, q["name"], q["filename"], gb)) + + con.executemany("INSERT INTO rigs VALUES (?,?)", sorted(RIG_DISPLAY.items())) + + # Speed, from each model's published doc. A model with no table of its + # own carries a sibling's numbers, named in measured_on. + # A doc benches the model it is named after, which is not always the + # model reading it: breeze-asr-25's card points at whisper-large-v2.md. + # Built over every card, not just the sweep, so the attribution stays + # right even when the sibling has no result of its own. + doc_owner = {} # doc filename -> the model it benches + for key, (path, c) in cards.items(): + doc = (c.get("transcribe_docs_url") or "").rsplit("/", 1)[-1] + if doc and norm(pathlib.Path(doc).stem) == norm(path.stem): + doc_owner[doc] = next((m for m in models if norm(m) == key), path.stem) + n_perf = 0 + for m in models: + source_model = PERF_INHERITS.get(m, m) + path, c = cards.get(norm(source_model), (None, {})) + if not c.get("transcribe_docs_url"): + continue + doc = c["transcribe_docs_url"].rsplit("/", 1)[-1] + rows = doc_perf(DOCS / doc) + measured_on = doc_owner.get(doc, source_model) + for rig, backend, quant, sample, sample_s, xrt in rows: + con.execute("INSERT OR REPLACE INTO perf VALUES (?,?,?,?,?,?,?,?)", + (m, rig, backend, quant, sample, sample_s, xrt, + measured_on)) + n_perf += 1 + + con.executemany("INSERT INTO results VALUES (?,?,?,?,?,?,?,?,?)", + [(c["dataset"], c["model"], c["quant"], c["metric"], c["err"], + c["lo"], c["hi"], c["n"], + CELL_SCORE_ARGS.get((c["model"], c["lang"]), (None, None))[1]) + for c in cells]) + + con.executemany("INSERT INTO meta VALUES (?,?)", [ + ("generated", datetime.now(timezone.utc).isoformat(timespec="seconds")), + ("rebuild", "uv run scripts/wer/build_db.py (drops and recreates; " + "never hand-edit)"), + ("dataset_scope", "google/fleurs test split, full splits only"), + ("recipe_batch_size", str(BATCH_SIZE)), + ("recipe_timestamps", TIMESTAMPS), + ("perf_metric", "x realtime over mel+encode+decode, from the tables " + "in docs/models/*.md"), + ]) + con.commit() + + for t in ("languages", "language_aliases", "datasets", "models", + "model_languages", "quants", "results", "rigs", "perf"): + n = con.execute(f"SELECT count(*) FROM {t}").fetchone()[0] + print(f" {t:16s} {n:>5}") + no_perf = [r[0] for r in con.execute( + "SELECT model FROM models WHERE model NOT IN (SELECT model FROM perf)")] + inherited = con.execute( + "SELECT count(DISTINCT model) FROM perf WHERE measured_on <> model").fetchone()[0] + print(f"\n{inherited} model(s) carry a sibling's speed numbers") + if missing_card: + print(f"no hf_card, identity read from the GGUF: {', '.join(missing_card)}") + if no_perf: + print(f"no speed numbers: {', '.join(no_perf)}") + print(f"\n{DB}") + con.close() + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/wer/by_language.py b/scripts/wer/by_language.py new file mode 100644 index 00000000..9bd45e34 --- /dev/null +++ b/scripts/wer/by_language.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python3 +"""by_language.py — pivot the FLEURS results into a language-centric view. + +The database is keyed by (dataset, model, quant), which answers "how does +this model do everywhere". The recommendation question is the transpose: +"for someone who speaks X, what are the options". + +Reads reports/wer/wer.db, so the numbers, the language names and the speed +figures all come from the same index the site queries. Run build_db.py +first; this script computes nothing that is not in the database. + +Emits reports/wer/fleurs_by_language.json plus a readable markdown table. + +Per language it records every measured model ranked by error rate, with the +95% CI on each cell. Rank 1 is the lowest measured error rate and nothing +more: two adjacent rows whose CIs overlap heavily are not distinguishable +by this table, and it makes no claim that they are. +""" +from __future__ import annotations + +import argparse +import json +import pathlib +import sqlite3 +import sys +from datetime import datetime, timezone + +REPO = pathlib.Path(__file__).resolve().parents[2] +WER = REPO / "reports" / "wer" +DB = WER / "wer.db" + +# The speed column: one number per machine, at the quant being tabulated, +# on the short sample, taking the fastest backend that machine publishes. +RIGS = ["m4-max", "ryzen-4750u"] +SAMPLE = "jfk" + + +def speed(con: sqlite3.Connection, quant: str) -> dict[str, dict[str, float]]: + """{model: {rig: xrt}} at this quant, fastest backend, short sample. + + Falls back to whichever sample a model publishes when it has no jfk + row, which is the GigaAM case (benched on a Russian clip).""" + out: dict[str, dict[str, float]] = {} + for model, rig, xrt in con.execute( + "SELECT model, rig, max(xrt) FROM perf WHERE quant = ? AND sample = ? " + "GROUP BY model, rig", (quant, SAMPLE) + ): + out.setdefault(model, {})[rig] = xrt + for model, rig, xrt in con.execute( + "SELECT model, rig, max(xrt) FROM perf WHERE quant = ? GROUP BY model, rig", + (quant,) + ): + out.setdefault(model, {}).setdefault(rig, xrt) + return out + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--db", default=str(DB)) + ap.add_argument("--out", default=str(WER / "fleurs_by_language")) + ap.add_argument("--quant", default="Q8_0") + args = ap.parse_args() + + db = pathlib.Path(args.db) + if not db.exists(): + print(f"error: {db} not found; run scripts/wer/build_db.py first", + file=sys.stderr) + return 2 + con = sqlite3.connect(db) + con.row_factory = sqlite3.Row + meta = dict(con.execute("SELECT key, value FROM meta")) + perf = speed(con, args.quant) + + langs: dict[str, dict] = {} + for r in con.execute( + "SELECT d.lang, l.name AS language, r.model, r.metric, r.err_pct, " + " r.ci_lo, r.ci_hi, r.n_utts, r.note " + "FROM results r " + "JOIN datasets d ON d.dataset = r.dataset " + "JOIN languages l ON l.lang = d.lang " + "WHERE d.source = 'fleurs' AND r.quant = ? " + "ORDER BY d.lang, r.err_pct", (args.quant,) + ): + e = perf.get(r["model"], {}) + langs.setdefault(r["lang"], {"name": r["language"], "models": []}) + langs[r["lang"]]["models"].append({ + "model": r["model"], "name": r["language"], "pct": r["err_pct"], + "ci": [r["ci_lo"], r["ci_hi"]], "metric": r["metric"], + "n": r["n_utts"], "note": r["note"], + "m4_max_rt": e.get("m4-max"), "r4750u_rt": e.get("ryzen-4750u"), + }) + + out: dict[str, dict] = {} + for lang, cell in sorted(langs.items()): + rows = cell["models"] + for i, r in enumerate(rows, 1): + r["rank"] = i + out[lang] = { + "name": cell["name"], "metric": rows[0]["metric"], + "n_utts": rows[0]["n"], "n_models": len(rows), + "best": rows[0]["model"], "best_pct": rows[0]["pct"], + "models": rows, + } + + payload = { + "generated": datetime.now(timezone.utc).isoformat(timespec="seconds"), + "dataset": meta.get("dataset_scope", "google/fleurs test split"), + "quant": args.quant, + "batch_size": int(meta.get("recipe_batch_size", 8)), + "timestamps": meta.get("recipe_timestamps", "none"), + "n_languages": len(out), + "n_cells": sum(v["n_models"] for v in out.values()), + "languages": out, + } + jpath = pathlib.Path(args.out).with_suffix(".json") + jpath.write_text(json.dumps(payload, indent=1, ensure_ascii=False)) + + lines = [ + f"# FLEURS by language ({args.quant}, batch " + f"{payload['batch_size']}, timestamps {payload['timestamps']})", "", + f"{payload['n_languages']} languages, {payload['n_cells']} " + "measurements. Rank is by measured error rate; where two CIs overlap " + "the ordering between them is not meaningful.", "", + f"Speed columns are the published realtime multiplier at " + f"{args.quant} on the `{SAMPLE}` sample, fastest backend per machine, " + "from the tables in `docs/models/*.md`. Blank means that model " + "publishes no bench on that machine.", "", + "Error rates use the metric named in each heading and are NOT " + "comparable across languages, only within one.", "", + ] + for lang, v in out.items(): + lines.append(f"## {lang} - {v['name']} " + f"({v['metric'].upper()}, n={v['n_utts']}, " + f"{v['n_models']} models)") + lines += ["", "| # | model | err% | 95% CI | M4 Max | 4750U |", + "|--:|---|--:|---|--:|--:|"] + for r in v["models"]: + note = f" ({r['note']})" if r["note"] else "" + m4 = f"{r['m4_max_rt']:.0f}x" if r.get("m4_max_rt") else "" + rz = f"{r['r4750u_rt']:.0f}x" if r.get("r4750u_rt") else "" + lines.append(f"| {r['rank']} | {r['model']}{note} | " + f"{r['pct']:.2f} | {r['ci'][0]:.2f}-{r['ci'][1]:.2f} " + f"| {m4} | {rz} |") + lines.append("") + mpath = pathlib.Path(args.out).with_suffix(".md") + mpath.write_text("\n".join(lines)) + + print(f"{payload['n_languages']} languages, {payload['n_cells']} cells") + print(f" {jpath}") + print(f" {mpath}") + con.close() + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/wer/gguf_header.py b/scripts/wer/gguf_header.py new file mode 100644 index 00000000..70febe33 --- /dev/null +++ b/scripts/wer/gguf_header.py @@ -0,0 +1,154 @@ +#!/usr/bin/env python3 +"""gguf_header.py — read a GGUF's identity without downloading the weights. + +Two of the things the index needs about a model, its loader family and its +parameter count, are stamped in the GGUF and nowhere else. Most of the +shipped models are no longer on this disk: they were converted, uploaded, +and the local copy deleted. Downloading a multi-GB file to read a header is +absurd, so this parses the header out of the first few MB over an HTTP +range request instead. + +The header is: magic, version, counts, the key/value block, then one info +record per tensor (name, dims, type, offset) before the tensor data starts. +Everything this module wants lives in that prefix. Only the KV block's size +varies much, because a tokenizer's token list is stored there, so the +fetcher grows its window when a read runs past the end rather than guessing +a size up front. + + from gguf_header import identity + identity(pathlib.Path("models/whisper-tiny/whisper-tiny-F32.gguf")) + identity_remote("handy-computer/whisper-medium-gguf", "whisper-medium-Q8_0.gguf") +""" +from __future__ import annotations + +import math +import os +import pathlib +import struct + +# GGUF metadata value types, from the spec's gguf_metadata_value_type enum. +(UINT8, INT8, UINT16, INT16, UINT32, INT32, FLOAT32, BOOL, STRING, ARRAY, + UINT64, INT64, FLOAT64) = range(13) + +FIXED = {UINT8: 1, INT8: 1, UINT16: 2, INT16: 2, UINT32: 4, INT32: 4, + FLOAT32: 4, BOOL: 1, UINT64: 8, INT64: 8, FLOAT64: 8} + + +class Window: + """A growable byte window over a file or a remote object.""" + + def __init__(self, fetch, initial: int = 1 << 20): + self._fetch = fetch # fetch(offset, length) -> bytes + self._buf = fetch(0, initial) + self.pos = 0 + + def _need(self, end: int) -> None: + while end > len(self._buf): + more = max(len(self._buf), end - len(self._buf)) + chunk = self._fetch(len(self._buf), more) + if not chunk: + raise EOFError(f"ran past the end of the object at {end}") + self._buf += chunk + + def take(self, n: int) -> bytes: + self._need(self.pos + n) + out = self._buf[self.pos:self.pos + n] + self.pos += n + return out + + def u32(self) -> int: + return struct.unpack(" int: + return struct.unpack(" str: + return self.take(self.u64()).decode("utf-8", errors="replace") + + def skip_value(self, vtype: int) -> None: + """Advance past one metadata value without materialising it.""" + if vtype in FIXED: + self.take(FIXED[vtype]) + elif vtype == STRING: + self.take(self.u64()) + elif vtype == ARRAY: + elem, n = self.u32(), self.u64() + if elem in FIXED: + self.take(FIXED[elem] * n) + else: + for _ in range(n): + self.skip_value(elem) + else: + raise ValueError(f"unknown GGUF value type {vtype}") + + +def _parse(win: Window) -> dict: + if win.take(4) != b"GGUF": + raise ValueError("not a GGUF file") + version = win.u32() + n_tensors, n_kv = win.u64(), win.u64() + + wanted = {"general.architecture", "general.basename", "general.size_label"} + kv: dict[str, str] = {} + for _ in range(n_kv): + key = win.string() + vtype = win.u32() + if key in wanted and vtype == STRING: + kv[key] = win.string() + else: + win.skip_value(vtype) + + params = 0 + for _ in range(n_tensors): + win.string() # tensor name + dims = [win.u64() for _ in range(win.u32())] + win.u32() # ggml type + win.u64() # offset into the data blob + params += math.prod(dims) + + return {"version": version, "n_tensors": n_tensors, + "family": kv.get("general.architecture"), + "basename": kv.get("general.basename"), + "size_label": kv.get("general.size_label"), + "params": params, "params_m": round(params / 1e6, 1)} + + +def identity(path: pathlib.Path) -> dict: + """Identity from a local GGUF, reading only as much as the header needs.""" + with open(path, "rb") as f: + def fetch(offset: int, length: int) -> bytes: + f.seek(offset) + return f.read(length) + return _parse(Window(fetch)) + + +def hf_token() -> str | None: + tok = os.environ.get("HF_TOKEN") + if tok: + return tok + p = pathlib.Path("~/.cache/huggingface/token").expanduser() + return p.read_text().strip() if p.exists() else None + + +def identity_remote(repo: str, filename: str, revision: str = "main") -> dict: + """Identity from a GGUF on the Hub, over HTTP range requests. + + Costs a few MB rather than the whole file. Works on private repos when a + token is available, which is the normal case for handy-computer/*.""" + import requests + + url = f"https://huggingface.co/{repo}/resolve/{revision}/{filename}" + headers = {} + tok = hf_token() + if tok: + headers["Authorization"] = f"Bearer {tok}" + session = requests.Session() + + def fetch(offset: int, length: int) -> bytes: + h = dict(headers, Range=f"bytes={offset}-{offset + length - 1}") + r = session.get(url, headers=h, timeout=60) + if r.status_code not in (200, 206): + raise RuntimeError(f"{repo}/{filename}: HTTP {r.status_code}") + return r.content + + return _parse(Window(fetch)) diff --git a/scripts/wer/languages.py b/scripts/wer/languages.py new file mode 100644 index 00000000..c8c19739 --- /dev/null +++ b/scripts/wer/languages.py @@ -0,0 +1,162 @@ +#!/usr/bin/env python3 +"""languages.py — the canonical BCP-47 code table for the WER tooling. + +One table, three consumers: the language names in reports, the `languages` +table in fleurs.db, and the script column used to explain script-fold +scoring (the Traditional-vs-Simplified case on Breeze/zh is a fact about +script, not a free-text note). + +It covers every code that appears ANYWHERE: benchmarked FLEURS languages, +FLEURS configs not yet benchmarked, and languages a model card merely +claims. Coverage a card asserts but that nothing has measured is still a +language the site has to be able to name. + +Names are checked in as literals rather than resolved from a locale library +at runtime, so the tooling keeps its no-dependency property and the names +stay what a user would call the language. Generated once from CLDR via +langcodes, then the names already in use were kept verbatim so no report +churns. Edit by hand; regeneration is not part of any build. + +Scripts are ISO 15924. For the three codes where the script is genuinely +contested, the FLEURS config name settles it (cmn_hans_cn -> Hans, +yue_hant_hk -> Hant); everything else is the CLDR likely-script. +""" +from __future__ import annotations + +# code -> (English name, ISO 15924 script) +LANGUAGES: dict[str, tuple[str, str]] = { + 'af': ('Afrikaans', 'Latn'), + 'am': ('Amharic', 'Ethi'), + 'ar': ('Arabic', 'Arab'), + 'as': ('Assamese', 'Beng'), + 'ast': ('Asturian', 'Latn'), + 'az': ('Azerbaijani', 'Latn'), + 'ba': ('Bashkir', 'Cyrl'), + 'be': ('Belarusian', 'Cyrl'), + 'bg': ('Bulgarian', 'Cyrl'), + 'bn': ('Bangla', 'Beng'), + 'bo': ('Tibetan', 'Tibt'), + 'br': ('Breton', 'Latn'), + 'bs': ('Bosnian', 'Latn'), + 'ca': ('Catalan', 'Latn'), + 'ceb': ('Cebuano', 'Latn'), + 'ckb': ('Central Kurdish', 'Arab'), + 'cs': ('Czech', 'Latn'), + 'cy': ('Welsh', 'Latn'), + 'da': ('Danish', 'Latn'), + 'de': ('German', 'Latn'), + 'el': ('Greek', 'Grek'), + 'en': ('English', 'Latn'), + 'es': ('Spanish', 'Latn'), + 'et': ('Estonian', 'Latn'), + 'eu': ('Basque', 'Latn'), + 'fa': ('Persian', 'Arab'), + 'ff': ('Fula', 'Latn'), + 'fi': ('Finnish', 'Latn'), + 'fil': ('Filipino', 'Latn'), + 'fo': ('Faroese', 'Latn'), + 'fr': ('French', 'Latn'), + 'ga': ('Irish', 'Latn'), + 'gl': ('Galician', 'Latn'), + 'gu': ('Gujarati', 'Gujr'), + 'ha': ('Hausa', 'Latn'), + 'haw': ('Hawaiian', 'Latn'), + 'he': ('Hebrew', 'Hebr'), + 'hi': ('Hindi', 'Deva'), + 'hr': ('Croatian', 'Latn'), + 'ht': ('Haitian Creole', 'Latn'), + 'hu': ('Hungarian', 'Latn'), + 'hy': ('Armenian', 'Armn'), + 'id': ('Indonesian', 'Latn'), + 'ig': ('Igbo', 'Latn'), + 'is': ('Icelandic', 'Latn'), + 'it': ('Italian', 'Latn'), + 'ja': ('Japanese', 'Jpan'), + 'jv': ('Javanese', 'Latn'), + 'jw': ('Javanese', 'Latn'), + 'ka': ('Georgian', 'Geor'), + 'kam': ('Kamba', 'Latn'), + 'kea': ('Kabuverdianu', 'Latn'), + 'kk': ('Kazakh', 'Cyrl'), + 'km': ('Khmer', 'Khmr'), + 'kn': ('Kannada', 'Knda'), + 'ko': ('Korean', 'Kore'), + 'ky': ('Kyrgyz', 'Cyrl'), + 'la': ('Latin', 'Latn'), + 'lb': ('Luxembourgish', 'Latn'), + 'lg': ('Ganda', 'Latn'), + 'ln': ('Lingala', 'Latn'), + 'lo': ('Lao', 'Laoo'), + 'lt': ('Lithuanian', 'Latn'), + 'luo': ('Luo (Kenya and Tanzania)', 'Latn'), + 'lv': ('Latvian', 'Latn'), + 'mg': ('Malagasy', 'Latn'), + 'mi': ('Māori', 'Latn'), + 'mk': ('Macedonian', 'Cyrl'), + 'ml': ('Malayalam', 'Mlym'), + 'mn': ('Mongolian', 'Cyrl'), + 'mr': ('Marathi', 'Deva'), + 'ms': ('Malay', 'Latn'), + 'mt': ('Maltese', 'Latn'), + 'my': ('Burmese', 'Mymr'), + 'nb': ('Norwegian Bokmal', 'Latn'), + 'ne': ('Nepali', 'Deva'), + 'nl': ('Dutch', 'Latn'), + 'nn': ('Norwegian Nynorsk', 'Latn'), + 'no': ('Norwegian', 'Latn'), + 'nso': ('Northern Sotho', 'Latn'), + 'ny': ('Nyanja', 'Latn'), + 'oc': ('Occitan', 'Latn'), + 'om': ('Oromo', 'Latn'), + 'or': ('Odia', 'Orya'), + 'pa': ('Punjabi', 'Guru'), + 'pl': ('Polish', 'Latn'), + 'ps': ('Pashto', 'Arab'), + 'pt': ('Portuguese', 'Latn'), + 'ro': ('Romanian', 'Latn'), + 'ru': ('Russian', 'Cyrl'), + 'sa': ('Sanskrit', 'Deva'), + 'sd': ('Sindhi', 'Arab'), + 'si': ('Sinhala', 'Sinh'), + 'sk': ('Slovak', 'Latn'), + 'sl': ('Slovenian', 'Latn'), + 'sn': ('Shona', 'Latn'), + 'so': ('Somali', 'Latn'), + 'sq': ('Albanian', 'Latn'), + 'sr': ('Serbian', 'Cyrl'), + 'su': ('Sundanese', 'Latn'), + 'sv': ('Swedish', 'Latn'), + 'sw': ('Swahili', 'Latn'), + 'ta': ('Tamil', 'Taml'), + 'te': ('Telugu', 'Telu'), + 'tg': ('Tajik', 'Cyrl'), + 'th': ('Thai', 'Thai'), + 'tk': ('Turkmen', 'Latn'), + 'tl': ('Filipino', 'Latn'), + 'tr': ('Turkish', 'Latn'), + 'tt': ('Tatar', 'Cyrl'), + 'uk': ('Ukrainian', 'Cyrl'), + 'umb': ('Umbundu', 'Latn'), + 'ur': ('Urdu', 'Arab'), + 'uz': ('Uzbek', 'Latn'), + 'vi': ('Vietnamese', 'Latn'), + 'wo': ('Wolof', 'Latn'), + 'xh': ('Xhosa', 'Latn'), + 'yi': ('Yiddish', 'Hebr'), + 'yo': ('Yoruba', 'Latn'), + 'yue': ('Cantonese', 'Hant'), + 'zh': ('Mandarin Chinese', 'Hans'), + 'zh-cn': ('Chinese (China)', 'Hans'), + 'zu': ('Zulu', 'Latn'), +} + + +def name(code: str) -> str: + """English name, falling back to the code itself for anything unknown.""" + row = LANGUAGES.get(code) + return row[0] if row else code + + +def script(code: str) -> str | None: + row = LANGUAGES.get(code) + return (row[1] or None) if row else None diff --git a/scripts/wer/perf_lookup.py b/scripts/wer/perf_lookup.py new file mode 100644 index 00000000..9f0267d7 --- /dev/null +++ b/scripts/wer/perf_lookup.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +"""perf_lookup.py — realtime-speed numbers per model, per rig. + +Source of truth is the `perf:` block in scripts/hf_cards/.yaml, which +is already structured (rig -> backend -> xRT) and covers nearly every model. +docs/models/*.md carries the same benches as prose tables and is used only +as a fallback for models whose card lacks the block. + +An earlier version of this script parsed the markdown exclusively and got +three things wrong that the card block makes impossible: the 4750U heading +is spelled two different ways across docs, gigaam benches on a `ru` sample +rather than `jfk`, and several models' docs are named differently from the +model. Prefer the structured field. +""" +from __future__ import annotations + +import json +import pathlib +import re +import sys + +REPO = pathlib.Path(__file__).resolve().parents[2] +CARDS = REPO / "scripts" / "hf_cards" +DOCS = REPO / "docs" / "models" + +RIGS = {"m4_max": "m4-max", "r4750u": "ryzen-4750u"} +# Accelerated backend first, CPU as the fallback figure. +BACKENDS = {"m4_max": ["metal", "cpu"], "r4750u": ["vulkan", "cpu"]} + + +def norm(s: str) -> str: + return re.sub(r"[^a-z0-9]", "", s.lower()) + + +def card_perf(path: pathlib.Path) -> dict: + text = path.read_text() + m = re.search(r"^perf:\n((?:[ \t]+.*\n|\n)*?)(?=^\S)", text, re.M) + if not m: + return {} + out: dict[str, dict] = {} + rig = None + for line in m.group(1).splitlines(): + if not line.strip(): + continue + h = re.match(r"^ ([\w.-]+):\s*$", line) + if h: + rig = h.group(1) + out[rig] = {} + continue + b = re.match(r"^ (\w+):\s*([\d.]+)", line) + if b and rig: + out[rig][b.group(1)] = float(b.group(2)) + return out + + +def build(models: list[str]) -> dict[str, dict]: + by_norm = {norm(p.stem): p for p in CARDS.glob("*.yaml")} + out: dict[str, dict] = {} + for m in models: + p = by_norm.get(norm(m)) + if not p: + continue + blocks = card_perf(p) + entry: dict = {} + for key, rig in RIGS.items(): + rb = blocks.get(rig, {}) + for backend in BACKENDS[key]: + if backend in rb: + entry[key] = rb[backend] + entry[f"{key}_backend"] = backend + break + if entry: + entry["measured"] = True + entry["source"] = f"hf_cards/{p.name}" + out[m] = entry + return out + + +if __name__ == "__main__": + models = json.loads((REPO / "reports/wer/fleurs_matrix.json").read_text())["models"] + perf = build(models) + print(f"{len(perf)}/{len(models)} models have perf in their hf_card\n") + print(f"{'model':34s} {'M4 Max':>9} {'4750U':>9}") + for m in models: + e = perf.get(m) + if not e: + continue + f = lambda v: f"{v:.1f}x" if v is not None else "-" + print(f"{m:34s} {f(e.get('m4_max')):>9} {f(e.get('r4750u')):>9}" + f" {e.get('m4_max_backend','')}/{e.get('r4750u_backend','')}") + missing = [m for m in models if m not in perf] + print(f"\nno card perf: {', '.join(missing) if missing else 'none'}") diff --git a/scripts/wer/quant_delta.py b/scripts/wer/quant_delta.py new file mode 100644 index 00000000..4adae4e7 --- /dev/null +++ b/scripts/wer/quant_delta.py @@ -0,0 +1,189 @@ +#!/usr/bin/env python3 +"""quant_delta.py — paired Q8_0-vs-lower-quant degradation on FLEURS. + +Why paired: a quant A/B runs both arms over the SAME utterances, so the two +error rates are highly correlated. Comparing their independent confidence +intervals throws that correlation away and is badly underpowered; the +repo's single-run noise floor (~0.3pp) then swamps deltas that are in fact +perfectly resolvable. Resampling the shared utterance set once and +recomputing both arms on that same resample keeps the pairing and measures +the delta directly. + +Usage: + uv run scripts/wer/quant_delta.py --quants Q5_K_M,Q4_K_M +""" +from __future__ import annotations + +import argparse +import glob +import json +import pathlib +import random +import statistics +import sys +from collections import defaultdict + +REPO = pathlib.Path(__file__).resolve().parents[2] +WER = REPO / "reports" / "wer" + +# Architecture family, for the "does quant sensitivity track architecture" +# question. Conformer CTC/RNNT keep their conv stacks in F32/F16 (no +# quantized im2col in ggml), so they are expected to be the robust end. +FAMILY = { + "whisper-large-v3": "enc-dec (tied embed)", + "canary-1b-v2": "enc-dec", + "parakeet-tdt-0.6b-v3": "RNNT conformer", + "Qwen3-ASR-1.7B": "LLM decoder (tied embed)", + "Fun-ASR-MLT-Nano-2512": "enc-dec (small)", + "Voxtral-Mini-4B-Realtime-2602": "LLM decoder", +} + + +def per_utt(model: str, quant: str, lang: str) -> tuple[dict, str] | None: + """{utt_id: (errors, ref_len)} plus the metric actually used.""" + hits = glob.glob(str(WER / f"{model}-{quant}.fleurs-{lang}.b8.score.json")) + if not hits: + return None + d = json.loads(pathlib.Path(hits[0]).read_text()) + metric = "cer" if d.get("cer") is not None and d.get("wer") is None else \ + ("cer" if lang in {"zh", "yue", "ja", "ko", "th"} else "wer") + out = {} + empty = 0 + for u in d.get("per_utterance", []): + rate = u.get(metric) + if rate is None: + return None + ref = u["ref"] + n = len(ref.split()) if metric == "wer" else len(ref.replace(" ", "")) + if not u.get("hyp", "").strip(): + empty += 1 + if n: + out[u["id"]] = (rate * n, n) + return (out, metric, empty) if out else None + + +def agg(d: dict, ids: list[str]) -> float: + e = sum(d[i][0] for i in ids) + n = sum(d[i][1] for i in ids) + return 100.0 * e / n if n else float("nan") + + +def paired_delta(base: dict, cand: dict, n_boot: int = 2000, seed: int = 42): + """(base_err, cand_err, rel_delta_pct, lo, hi, n_utts) at 95%. + + rel_delta is (cand-base)/base in percent. CI is on that ratio, from a + paired resample of the shared utterances.""" + ids = sorted(set(base) & set(cand)) + if len(ids) < 30: + return None + b0, c0 = agg(base, ids), agg(cand, ids) + rng = random.Random(seed) + rels = [] + for _ in range(n_boot): + s = [ids[rng.randrange(len(ids))] for _ in ids] + b, c = agg(base, s), agg(cand, s) + if b > 0: + rels.append(100.0 * (c - b) / b) + rels.sort() + lo = rels[int(0.025 * len(rels))] + hi = rels[int(0.975 * len(rels))] + return b0, c0, 100.0 * (c0 - b0) / b0, lo, hi, len(ids) + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--quants", default="Q5_K_M,Q4_K_M") + ap.add_argument("--base", default="Q8_0") + ap.add_argument("--pairs-file", default="") + args = ap.parse_args() + quants = [q.strip() for q in args.quants.split(",") if q.strip()] + + # Discover cells from what actually scored, so a partially-complete + # sweep still reports. + cells = defaultdict(set) + for p in glob.glob(str(WER / "*.fleurs-*.b8.score.json")): + name = pathlib.Path(p).name + for q in quants: + if f"-{q}.fleurs-" in name: + model = name.split(f"-{q}.fleurs-")[0] + lang = name.split(".fleurs-")[1].split(".")[0] + cells[model].add(lang) + + if not cells: + print("no scored cells found for quants " + ",".join(quants)) + return 1 + + rows = [] + print(f"{'model':30} {'lang':5} {'met':4} {'quant':8} " + f"{'Q8_0':>7} {'cand':>7} {'rel%':>8} {'95% CI':>18} {'n':>5}") + print("-" * 104) + for model in sorted(cells): + for lang in sorted(cells[model]): + base = per_utt(model, args.base, lang) + if not base: + print(f"{model:30} {lang:5} -- no {args.base} baseline") + continue + for q in quants: + cand = per_utt(model, q, lang) + if not cand: + continue + if cand[1] != base[1]: + print(f"{model:30} {lang:5} !! metric mismatch") + continue + r = paired_delta(base[0], cand[0]) + if not r: + continue + b0, c0, rel, lo, hi, n = r + sig = "" if (lo <= 0 <= hi) else (" *" if rel > 0 else " +") + # An empty hypothesis scores 100% and is a generation failure, + # not transcription damage. If the empty count moves between + # quants the WER delta is partly measuring that, so surface it + # rather than let it sit inside the aggregate unlabelled. + de = cand[2] - base[2] + if base[2] or cand[2]: + sig += f" [empty {base[2]}->{cand[2]}]" + print(f"{model:30} {lang:5} {base[1]:4} {q:8} " + f"{b0:7.2f} {c0:7.2f} {rel:+8.2f} " + f"[{lo:+7.2f},{hi:+7.2f}] {n:5}{sig}") + rows.append(dict(model=model, lang=lang, metric=base[1], + quant=q, base=b0, cand=c0, rel=rel, + lo=lo, hi=hi, n=n, + family=FAMILY.get(model, "?"), + is_en=(lang == "en"), + empty_base=base[2], empty_cand=cand[2], + empty_delta=de)) + print("\n * = degradation excludes zero (real) + = improvement excludes zero") + + out = WER / "quant_delta.json" + out.write_text(json.dumps(rows, indent=1)) + + # Aggregates: the two questions that drove the sweep. + for q in quants: + sub = [r for r in rows if r["quant"] == q] + if not sub: + continue + en = [r["rel"] for r in sub if r["is_en"]] + non = [r["rel"] for r in sub if not r["is_en"]] + print(f"\n=== {q} ===") + if en: + print(f" English n={len(en):3} mean rel {statistics.mean(en):+6.2f}% " + f"max {max(en):+6.2f}%") + if non: + print(f" non-English n={len(non):3} mean rel {statistics.mean(non):+6.2f}% " + f"max {max(non):+6.2f}%") + sigbad = [r for r in sub if r["lo"] > 0] + print(f" cells with a REAL (CI-excluding-zero) degradation: " + f"{len(sigbad)}/{len(sub)}") + byf = defaultdict(list) + for r in sub: + byf[r["family"]].append(r["rel"]) + print(" by architecture family:") + for f, v in sorted(byf.items(), key=lambda x: -statistics.mean(x[1])): + print(f" {f:28} n={len(v):3} mean {statistics.mean(v):+6.2f}% " + f"max {max(v):+6.2f}%") + print(f"\nwrote {out}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/wer/recommend.py b/scripts/wer/recommend.py new file mode 100644 index 00000000..56270f68 --- /dev/null +++ b/scripts/wer/recommend.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 +"""recommend.py — rank models for a given set of languages. + +Answers the question the FLEURS matrix exists to answer: someone speaks +these N languages, which single model should they run? + +Ranking is the geometric mean of per-language error rates, which is the +right average here because error rates are ratios: a model that halves the +error on one language and doubles it on another should come out neutral, +which an arithmetic mean does not give you. + +Coverage is enforced, not interpolated. The matrix is ragged (whisper +covers 40 languages, canary-180m covers 4), so a model is only ranked if +it has a measured cell for EVERY requested language. Averaging a model +over the subset it happens to support would systematically flatter +narrow models. + +Cells come from reports/wer/wer.db, the same table the markdown report +renders from, so a recommendation and the published table cannot disagree +about what a model scored. Run build_db.py first. +""" +from __future__ import annotations + +import argparse +import math +import pathlib +import sqlite3 +import sys + +REPO = pathlib.Path(__file__).resolve().parents[2] +DB = REPO / "reports" / "wer" / "wer.db" + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--languages", required=True, + help="comma-separated, e.g. en,de,ja") + ap.add_argument("--db", default=str(DB)) + ap.add_argument("--source", default="fleurs", + help="dataset family to rank within (default: fleurs)") + ap.add_argument("--quant", default="Q8_0") + ap.add_argument("--top", type=int, default=10) + args = ap.parse_args() + + db = pathlib.Path(args.db) + if not db.exists(): + print(f"error: {db} not found; run scripts/wer/build_db.py first", + file=sys.stderr) + return 2 + con = sqlite3.connect(db) + cells, models, have_langs = {}, set(), set() + for model, lang, pct_, metric in con.execute( + "SELECT r.model, d.lang, r.err_pct, r.metric FROM results r " + "JOIN datasets d ON d.dataset = r.dataset " + "WHERE d.source = ? AND r.quant = ?", (args.source, args.quant) + ): + cells[f"{model}|{lang}"] = {"pct": pct_, "metric": metric} + models.add(model) + have_langs.add(lang) + + want = [l.strip() for l in args.languages.split(",") if l.strip()] + missing = [l for l in want if l not in have_langs] + if missing: + print(f"not measured on {args.source}/{args.quant}: {missing}", + file=sys.stderr) + print(f"available: {' '.join(sorted(have_langs))}", file=sys.stderr) + return 2 + + ranked, skipped = [], [] + for m in sorted(models): + got = [(l, cells.get(f"{m}|{l}")) for l in want] + if any(v is None for _, v in got): + have = [l for l, v in got if v is not None] + skipped.append((m, len(have))) + continue + rates = [v["pct"] for _, v in got] + # Geometric mean; a 0.0 would annihilate it, so floor at 0.01%. + gm = math.exp(sum(math.log(max(r, 0.01)) for r in rates) / len(rates)) + ranked.append((gm, m, dict(got))) + ranked.sort() + + metrics = {cells[f"{ranked[0][1]}|{l}"]["metric"] for l in want} if ranked else set() + print(f"languages: {' '.join(want)}") + if len(metrics) > 1: + print(f"NOTE: mixes {'/'.join(sorted(metrics))} across languages. Both are " + f"error rates so the ranking holds, but the geometric mean is " + f"not in a single unit.") + print(f"{len(ranked)} models cover all {len(want)}; " + f"{len(skipped)} lack at least one\n") + w = max((len(m) for _, m, _ in ranked[:args.top]), default=10) + print(f"{'model':{w}s} {'geomean':>8} " + "".join(f"{l:>8}" for l in want)) + for gm, m, got in ranked[:args.top]: + print(f"{m:{w}s} {gm:>8.2f} " + + "".join(f"{got[l]['pct']:>8.2f}" for l in want)) + if skipped: + print(f"\nexcluded for coverage: " + + ", ".join(f"{m} ({n}/{len(want)})" for m, n in sorted(skipped))) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/wer/remote/fleurs_full_matrix.py b/scripts/wer/remote/fleurs_full_matrix.py new file mode 100644 index 00000000..d438cb91 --- /dev/null +++ b/scripts/wer/remote/fleurs_full_matrix.py @@ -0,0 +1,534 @@ +#!/usr/bin/env python3 +"""fleurs_full_matrix.py — every supported model over every language it claims. + +`fleurs_matrix.py` answers "which model should a user pick for the languages +they speak", so its columns are a fixed union defined by the specialist +models and every model is measured over the same columns. This script answers +a different question: "what is each model's WER on each language it actually +advertises". The plan is therefore fully ragged — whisper contributes 82 +columns that no other model can fill — and it covers the shipped quants +rather than one. + +Two quants ship in the plan: + Q8_0 every ASR model, always. It is the default shipped quant. + Q5_K_M only where the Q8_0 download is over 1 GB, where a smaller quant + is worth shipping, plus explicit borderline additions. + +What this does that `fleurs_matrix.py` does not: + - canonicalizes alias language codes, so `no`/`nb`, `tl`/`fil` and + `zh`/`zh-cn` resolve to ONE column and ONE ingest rather than two; + - skips (model, quant, language) cells already scored at the matrix batch + size, reading reports/wer/ directly rather than a cache; + - carries a per-model GPU, because the 24B does not fit in 24 GB. + +Usage: + uv run scripts/wer/remote/fleurs_full_matrix.py --plan + uv run scripts/wer/remote/fleurs_full_matrix.py --preflight # ingest only + uv run scripts/wer/remote/fleurs_full_matrix.py --run --cap 120 +""" +from __future__ import annotations + +import argparse +import json +import os +import pathlib +import re +import subprocess +import sys +import threading +import time +import urllib.request +from collections import defaultdict +from concurrent.futures import ThreadPoolExecutor + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) + +from model_specs import resolve_model # noqa: E402 +from fleurs_matrix import ( # noqa: E402 + TAG_OVERRIDE_MODELS, + card_langs, + fleurs_langs, + locale_for, + spend_today, + MAX_BLIND_DISPATCHES, +) + +REPO = pathlib.Path(__file__).resolve().parents[3] +CARDS = REPO / "scripts" / "hf_cards" +REPORTS = REPO / "reports" / "wer" + +# The batch size the matrix is measured at. Cells run at another batch size +# are NOT counted as generated: docs/tools/wer.md measures batching as WER-neutral +# to within ~0.08pp, but a matrix that silently mixes recipes cannot be +# defended later, and the affected cells are all sub-cent models. +MATRIX_BATCH = 8 + +QUANT_NAMES = ("BF16", "F16", "F32", "Q8_0", "Q6_K", "Q5_K_M", "Q4_K_M") + +# Q5_K_M is swept where the Q8_0 download exceeds this, in bytes. +Q5_MIN_Q8_BYTES = 1_000_000_000 + +# Models under the threshold that still get a Q5_K_M sweep. Both sit just +# under 1 GB at Q8_0 and are cheap to add: turbo is a flagship users actually +# pick, and MOSS is the only diarizing model in the matrix. +Q5_EXTRA_MODELS = ("whisper-large-v3-turbo", "moss-transcribe-diarize") + +# GPU placement. Sized on the quant file, but the file is NOT the working set: +# an L4 advertises 24 GB and reports 22563 MiB usable, and the runtime needs +# room for the KV cache, activations and any repacked weights on top of the +# tensors themselves. Voxtral-Small-24B Q5_K_M (17.14 GB on disk) OOMs on an L4 +# asking for a further 8800 MiB for its packed gate/up buffer, so the headroom +# needed is at least ~1.5x the file. Anything over 13 GB goes to the 48 GB part. +BIG_GPU = "L40S" +BIG_GPU_MIN_BYTES = 13_000_000_000 + +# hf_cards that are not transcription models, so have no WER row. +NON_ASR_PIPELINES = {"voice-activity-detection"} + +SIZE_CACHE = REPO / "reports" / "wer" / "_gguf_sizes.json" + + +# -------- card + Hub metadata --------------------------------------------- + +def all_cards() -> list[str]: + return sorted(p.stem for p in CARDS.glob("*.yaml")) + + +def card_field(model: str, key: str) -> str | None: + txt = (CARDS / f"{model}.yaml").read_text() + m = re.search(rf"^{re.escape(key)}:\s*(\S+)", txt, re.M) + return m.group(1) if m else None + + +def hf_token() -> str | None: + tok = os.environ.get("HF_TOKEN") + if tok: + return tok + p = pathlib.Path("~/.cache/huggingface/token").expanduser() + return p.read_text().strip() if p.exists() else None + + +def gguf_sizes(models: list[str], refresh: bool = False) -> dict[str, dict[str, int]]: + """{model: {gguf filename: size in bytes}} from the Hub. + + The quant rule keys off the real download size, not the hf_card's `size:` + string. The card is hand-maintained prose ("1.0 GB" for a 1.05 GB file), + and rounding decides membership for models sitting on the threshold. + Cached on disk because this is a plan-time input, not a run-time one.""" + cache: dict[str, dict[str, int]] = {} + if SIZE_CACHE.exists() and not refresh: + cache = json.loads(SIZE_CACHE.read_text()) + todo = [m for m in models if m not in cache] + if todo: + tok = hf_token() + + def one(model: str) -> tuple[str, dict[str, int]]: + repo = card_field(model, "target_repo") + if not repo: + return model, {} + req = urllib.request.Request( + f"https://huggingface.co/api/models/{repo}?blobs=true") + if tok: + req.add_header("Authorization", f"Bearer {tok}") + try: + d = json.load(urllib.request.urlopen(req, timeout=60)) + except Exception as e: + print(f"[WARN] {model}: Hub query failed ({e})", file=sys.stderr) + return model, {} + return model, {s["rfilename"]: s.get("size") or 0 + for s in d.get("siblings", []) + if s["rfilename"].endswith(".gguf")} + + with ThreadPoolExecutor(16) as ex: + for model, files in ex.map(one, todo): + cache[model] = files + SIZE_CACHE.parent.mkdir(parents=True, exist_ok=True) + SIZE_CACHE.write_text(json.dumps(cache, indent=1, sort_keys=True)) + return cache + + +def quant_size(files: dict[str, int], quant: str) -> int: + for fn, sz in files.items(): + stem = fn[:-5] if fn.endswith(".gguf") else fn + if stem.endswith(f"-{quant}"): + return sz or 0 + return 0 + + +# -------- language canonicalization --------------------------------------- + +def canonical_codes(FL: dict[str, str], measured: set[str]) -> dict[str, str]: + """FLEURS config -> the ONE bare code used to ingest and name it. + + FLEURS_LANGS is many-to-one: `no` and `nb` both mean nb_no, `tl` and `fil` + both mean fil_ph, `zh` and `zh-cn` both mean cmn_hans_cn. The dataset id + (and therefore the manifest path, the Volume entry and every report + filename) is derived from the bare code, so leaving both in the plan + ingests the same audio twice and splits one language across two columns. + Prefer a code already on disk so this run's reports file alongside the + existing ones.""" + by_cfg: dict[str, list[str]] = defaultdict(list) + for code, cfg in FL.items(): + by_cfg[cfg].append(code) + out = {} + for cfg, codes in by_cfg.items(): + prior = sorted(c for c in codes if c in measured) + out[cfg] = prior[0] if prior else sorted(codes, key=lambda c: (len(c), c))[0] + return out + + +def volume_manifest_langs() -> set[str] | None: + """FLEURS languages whose manifest exists on the Modal /data Volume. + + This, not the local reports directory, is what "already ingested" means: + `prefetch` writes manifests to the Volume the GPU cells read, and a + language can be fully ingested there while nothing local mentions it. + Returns None if the Volume cannot be listed, so the caller can tell + "nothing ingested" apart from "could not check".""" + try: + out = subprocess.run(["modal", "volume", "ls", "transcribe-data", "/wer"], + capture_output=True, text=True, timeout=120) + except (OSError, subprocess.SubprocessError): + return None + if out.returncode != 0: + return None + return set(re.findall(r"fleurs-([a-z-]+)\.manifest\.jsonl", out.stdout)) + + +# -------- what is already done -------------------------------------------- + +def generated_cells(FL: dict[str, str], canon: dict[str, str]) -> set[tuple[str, str, str]]: + """{(gguf base, quant, canonical language)} already generated at MATRIX_BATCH. + + Keyed on the hyp .jsonl, NOT the .score.json. Generation is the expensive, + remote, non-repeatable half; scoring is local, free and re-runnable, and + normally lags a sweep by however long it takes to get round to it. Keying + on the score would make every generated-but-unscored cell look unrun and + re-dispatch GPU work that is already sitting on disk. + + Parsed from reports/wer/ rather than from a run cache: the cache keys on + dispatch parameters and does not survive a recipe or filename change, + while the hyp IS the artifact the matrix is built from. + + The language field has to be matched against the known FLEURS codes rather + than split on a delimiter. Older reports carry a `-timestamps_none` suffix + directly after the language, so a greedy split reads the language of + `moonshine-base-ar-Q8_0.fleurs-ar-timestamps_none.score.json` as + `ar-timestamps_none` and the cell looks unrun.""" + codes = sorted(FL, key=len, reverse=True) + done: set[tuple[str, str, str]] = set() + for p in REPORTS.glob("*.fleurs-*.jsonl"): + m = re.match(r"(.+?)\.fleurs-(.+?)\.jsonl$", p.name) + if not m: + continue + stem, tail = m.group(1), m.group(2) + if stem.endswith("-REF"): # framework reference, not our engine + continue + lang = next((c for c in codes + if tail == c or tail.startswith(c + ".") or tail.startswith(c + "-")), + None) + if lang is None: + continue + rest = tail[len(lang):].lstrip(".-") + # Derived runs, not full-split matrix cells: utterance subsets + # (ru-512), filtered rescorings, and streaming-mode variants. + if re.match(r"^\d", rest) or "filtered" in rest or "stream" in rest: + continue + if rest != f"b{MATRIX_BATCH}": + continue + quant = next((q for q in QUANT_NAMES if stem.endswith("-" + q)), None) + if not quant: + continue + done.add((stem[:-(len(quant) + 1)], quant, canon.get(FL[lang], lang))) + return done + + +# -------- plan ------------------------------------------------------------- + +def build_plan(only: set[str] | None, skip_done: bool, + refresh_sizes: bool) -> tuple[list[dict], dict]: + FL = fleurs_langs() + models = [m for m in all_cards() + if (CARDS / f"{m}.yaml").exists() + and card_field(m, "pipeline_tag") not in NON_ASR_PIPELINES] + if only: + unknown = only - set(models) + if unknown: + sys.exit(f"--only names unknown or non-ASR models: {sorted(unknown)}") + models = [m for m in models if m in only] + + sizes = gguf_sizes(models, refresh=refresh_sizes) + measured = {p.name.split(".fleurs-")[1].split(".")[0] + for p in REPORTS.glob("*.fleurs-*.jsonl")} + canon = canonical_codes(FL, {c for c in measured if c in FL}) + done = generated_cells(FL, canon) if skip_done else set() + + plan: list[dict] = [] + stats = {"models": len(models), "columns": set(), "skipped": 0} + for model in models: + # Which files this model means is the CARD's business, not the repo + # listing's: `sweep` resolves through resolve_model, and a repo can + # ship more than one variant of the same quant. multitalker publishes + # both a plain and a bundle/ tree, so picking off the listing can size + # and name the wrong artifact from the one that actually runs. + try: + _repo, pinned = resolve_model(REPO, model) + except SystemExit as e: + print(f"[WARN] {model}: {e}, skipping", file=sys.stderr) + continue + listing = sizes.get(model, {}) + files = {fn: listing.get(fn, next( + (s for f, s in listing.items() if f.rsplit("/", 1)[-1] == fn), 0)) + for fn in (pinned or [])} + base = None + for fn in files: + stem = fn[:-5] + q = next((x for x in QUANT_NAMES if stem.endswith("-" + x)), None) + if q: + base = stem.rsplit("/", 1)[-1][:-(len(q) + 1)] + break + if base is None: + print(f"[WARN] {model}: no quantized GGUF pinned, skipping", + file=sys.stderr) + continue + + q8 = quant_size(files, "Q8_0") + quants = ["Q8_0"] + if quant_size(files, "Q5_K_M") and ( + q8 > Q5_MIN_Q8_BYTES or model in Q5_EXTRA_MODELS): + quants.append("Q5_K_M") + + # One column per FLEURS config the card claims, keeping the model's + # own tag: the CLI validates --language against the GGUF's + # general.languages, which is not always the canonical code. + cols: dict[str, str] = {} + for code in card_langs(model): + cfg = FL.get(code) + if cfg: + cols.setdefault(canon[cfg], code) + + for quant in quants: + gpu = BIG_GPU if quant_size(files, quant) > BIG_GPU_MIN_BYTES else "L4" + for lang, tag in sorted(cols.items()): + if model in TAG_OVERRIDE_MODELS: + tag = locale_for(tag) + if tag is None: + continue + stats["columns"].add(lang) + if (base, quant, lang) in done: + stats["skipped"] += 1 + continue + plan.append({"model": model, "quant": quant, "lang": lang, + "tag": tag, "gpu": gpu}) + stats["columns"] = sorted(stats["columns"]) + stats["measured_langs"] = sorted(c for c in measured if c in FL) + return plan, stats + + +def group_invocations(plan: list[dict]) -> list[dict]: + """One `sweep` call per (language, tag, quant, gpu). + + `sweep` takes a single --dataset, --language, --quants and --gpu, so those + four fields are what a container fan-out can share; the models that agree + on all four ride together.""" + groups: dict[tuple[str, str, str, str], list[str]] = defaultdict(list) + for r in plan: + groups[(r["lang"], r["tag"], r["quant"], r["gpu"])].append(r["model"]) + return [{"lang": l, "tag": t, "quant": q, "gpu": g, "models": sorted(ms)} + for (l, t, q, g), ms in sorted(groups.items())] + + +# -------- dispatch --------------------------------------------------------- + +def run_prefetch(langs: list[str], jobs: int) -> int: + cmd = ["modal", "run", "scripts/wer/remote/modal_sweep.py::prefetch", + "--datasets", ",".join(f"fleurs:{l}" for l in langs), + "--jobs", str(jobs)] + print("$ " + " ".join(cmd)) + return subprocess.run(cmd, cwd=REPO).returncode + + +def run_invocation(inv: dict, batch: int, logdir: pathlib.Path) -> int: + log = logdir / f"{inv['lang']}-{inv['tag']}.{inv['quant']}.{inv['gpu']}.log" + cmd = [ + "modal", "run", "scripts/wer/remote/modal_sweep.py::sweep", + "--models", ",".join(inv["models"]), + "--dataset", f"fleurs:{inv['lang']}", + "--quants", inv["quant"], + "--batch-sizes", str(batch), + "--gpu", inv["gpu"], + "--language", inv["tag"], + ] + with open(log, "w") as f: + f.write("$ " + " ".join(cmd) + "\n\n") + f.flush() + return subprocess.run(cmd, cwd=REPO, stdout=f, + stderr=subprocess.STDOUT).returncode + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--plan", action="store_true", help="print the plan, run nothing") + ap.add_argument("--preflight", action="store_true", + help="ingest every manifest the plan needs and exit; CPU only") + ap.add_argument("--run", action="store_true") + ap.add_argument("--only", default="", help="comma-separated hf_card slugs") + ap.add_argument("--skip", default="", + help="comma-separated hf_card slugs to EXCLUDE. Cells " + "already scored for a skipped model are left on disk; " + "this stops further spend on it, it does not retract " + "measurements already paid for.") + ap.add_argument("--quants", default="", help="restrict to these quants") + ap.add_argument("--langs", default="", help="restrict to these canonical languages") + ap.add_argument("--cap", type=float, default=120.0, + help="stop DISPATCHING once THIS RUN has added this many " + "dollars. Incremental, not an absolute daily total: " + "Modal bills by UTC day, so a long sweep started in " + "the afternoon crosses midnight UTC and an absolute " + "cap silently resets to a fresh budget mid-run.") + ap.add_argument("--batch", type=int, default=MATRIX_BATCH) + ap.add_argument("--jobs", type=int, default=4) + ap.add_argument("--no-skip-done", action="store_true", + help="re-run cells whose hyp already exists at the matrix " + "batch size (use when an engine change invalidates " + "them, e.g. the voxtral offline-delay default)") + ap.add_argument("--refresh-sizes", action="store_true", + help="re-query GGUF sizes from the Hub instead of the cache") + ap.add_argument("--logdir", default=None) + args = ap.parse_args() + + only = {m.strip() for m in args.only.split(",") if m.strip()} or None + plan, stats = build_plan(only, not args.no_skip_done, args.refresh_sizes) + if args.skip: + drop = {m.strip() for m in args.skip.split(",") if m.strip()} + unknown = drop - {r["model"] for r in plan} + plan = [r for r in plan if r["model"] not in drop] + if unknown: + print(f"note: --skip named {sorted(unknown)}, which the plan does " + f"not contain (already complete, or not an ASR card)") + if args.quants: + keep = {q.strip() for q in args.quants.split(",") if q.strip()} + plan = [r for r in plan if r["quant"] in keep] + if args.langs: + keep = {l.strip() for l in args.langs.split(",") if l.strip()} + plan = [r for r in plan if r["lang"] in keep] + + invs = group_invocations(plan) + need = sorted({r["lang"] for r in plan}) + on_volume = volume_manifest_langs() + # `measured_langs` says which languages this laptop has reports for, which + # is the right tiebreak for naming but says nothing about what the cells + # can read. Fall back to it only when the Volume cannot be listed. + ingested = on_volume if on_volume is not None else set(stats["measured_langs"]) + new = [l for l in need if l not in ingested] + + print(f"models : {stats['models']}") + print(f"columns : {len(stats['columns'])} FLEURS languages") + print(f"cells to run : {len(plan)} (skipped {stats['skipped']} already " + f"generated at b{MATRIX_BATCH})") + print(f"invocations : {len(invs)}") + print(f"quants : {sorted({r['quant'] for r in plan})}") + print(f"gpus : {sorted({r['gpu'] for r in plan})}") + src = "Modal volume" if on_volume is not None else "local reports (volume unreachable)" + print(f"manifests : {len(need)} needed, {len(new)} not yet ingested " + f"[per {src}]") + if new: + print(f" to ingest : {' '.join(new)}") + + if args.plan: + by_model: dict[tuple[str, str], list[str]] = defaultdict(list) + for r in plan: + by_model[(r["model"], r["quant"])].append(r["lang"]) + print() + for (m, q), ls in sorted(by_model.items()): + print(f" {m:<40} {q:<7} {len(ls):>3} langs") + return 0 + + if args.preflight: + if not need: + print("\nnothing to ingest") + return 0 + print(f"\ningesting {len(need)} manifest(s) (CPU only, no GPU cost)") + return run_prefetch(need, args.jobs) + + if not args.run: + print("\n(nothing dispatched; pass --plan, --preflight or --run)") + return 0 + + if new: + sys.exit(f"refusing to dispatch: {len(new)} manifest(s) have never been " + f"ingested. Run --preflight first so a Hub-side failure costs " + f"CPU seconds rather than a dispatched GPU sweep.") + + logdir = pathlib.Path(args.logdir) if args.logdir else \ + REPORTS / "_fleurs_full_matrix_logs" + logdir.mkdir(parents=True, exist_ok=True) + start_spend = spend_today() + if start_spend < 0: + sys.exit("cannot read Modal billing; refusing to dispatch without a " + "spend baseline to measure the cap against") + print(f"\nspend at start: ${start_spend:.2f} (UTC day) " + f"budget for this run: ${args.cap:.2f}") + print(f"logs: {logdir}\n") + + state = {"done": 0, "held": [], "stop": False, "blind": 0, + "baseline": start_spend} + lock = threading.Lock() + + def dispatch(inv: dict) -> None: + # Checked at dispatch time so in-flight invocations always finish. + with lock: + if state["stop"]: + state["held"].append(inv) + return + spend = spend_today() + # Measured against this run's own baseline. A negative delta means + # the UTC day rolled over mid-sweep, so re-baseline rather than + # treating the reset as free budget. + if spend >= 0 and spend < start_spend: + print(f"[note] UTC billing day rolled over " + f"(${start_spend:.2f} -> ${spend:.2f}); re-baselining") + state["baseline"] = spend + used = spend - state["baseline"] if spend >= 0 else -1.0 + if spend < 0: + state["blind"] += 1 + print(f"[WARN] billing query failed " + f"({state['blind']}/{MAX_BLIND_DISPATCHES})") + if state["blind"] >= MAX_BLIND_DISPATCHES: + state["stop"] = True + state["held"].append(inv) + print("[HOLD] no billing reading; refusing to continue blind.") + return + else: + state["blind"] = 0 + if used >= args.cap: + state["stop"] = True + state["held"].append(inv) + print(f"[HOLD] this run has added ${used:.2f} >= " + f"budget ${args.cap:.2f}") + return + t0 = time.time() + rc = run_invocation(inv, args.batch, logdir) + with lock: + state["done"] += 1 + print(f"[{state['done']}/{len(invs)}] fleurs:{inv['lang']} " + f"tag={inv['tag']} {inv['quant']} {inv['gpu']} " + f"n={len(inv['models'])} rc={rc} {time.time() - t0:.0f}s", flush=True) + + # First invocation alone: it warms the sm_XX CUDA build, and concurrent + # no-op builds would race on one build dir. + dispatch(invs[0]) + if len(invs) > 1 and not state["stop"]: + with ThreadPoolExecutor(max_workers=max(1, args.jobs)) as ex: + list(ex.map(dispatch, invs[1:])) + + end_spend = spend_today() + print(f"\ndispatched {state['done']}/{len(invs)}; this run added " + f"${end_spend - state['baseline']:.2f} (UTC day now ${end_spend:.2f})") + if state["held"]: + print("held:", " ".join(f"{h['lang']}/{h['quant']}" for h in state["held"])) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/wer/remote/fleurs_matrix.py b/scripts/wer/remote/fleurs_matrix.py new file mode 100644 index 00000000..4e7ac8fb --- /dev/null +++ b/scripts/wer/remote/fleurs_matrix.py @@ -0,0 +1,347 @@ +#!/usr/bin/env python3 +"""fleurs_matrix.py — drive the cross-model FLEURS WER matrix on Modal. + +Builds the (model, language) run plan from the hf_cards' own `languages:` +lists, groups it into `modal_sweep.py::sweep` invocations, and dispatches +them under a spend cap read from Modal's billing API. + +Why a driver instead of one sweep call: `sweep` applies a single +`--language` to every cell in the invocation and takes one `--dataset`, so +the matrix needs one invocation per (language, language-tag) pair. Models +mostly agree on bare BCP-47 codes, but a few disagree on aliases (whisper +says `tl`/`no` where fun-asr says `fil` and nemotron says `nb`), which is +why the plan carries a per-model tag rather than assuming the ingest code. + +Usage: + uv run scripts/wer/remote/fleurs_matrix.py --plan # print, run nothing + uv run scripts/wer/remote/fleurs_matrix.py --run --cap 60 +""" +from __future__ import annotations + +import argparse +import ast +import json +import pathlib +import re +import subprocess +import sys +import threading +import time +from collections import defaultdict +from concurrent.futures import ThreadPoolExecutor + +REPO = pathlib.Path(__file__).resolve().parents[3] + +CORE_MODELS = [ + "parakeet-unified-en-0.6b", "nemotron-3.5-asr-streaming-0.6b", + "parakeet-tdt-0.6b-v3", "qwen3-asr-0.6b", "qwen3-asr-1.7b", + "sensevoice-small", "gigaam-v3-e2e-rnnt", "canary-180m-flash", + "canary-1b-v2", "cohere-transcribe-03-2026", "whisper-large-v3-turbo", + "whisper-large-v3", "whisper-medium", "voxtral-mini-4b-realtime-2602", + "breeze-asr-25", +] + +# Phase 2: dispatched only if the cap still has room after the core matrix. +EXTRA_MODELS = [ + "fun-asr-mlt-nano-2512", # 31 languages, no published numbers anywhere + "whisper-small", # weak-hardware floor across the union + "parakeet-primeline", # German specialist +] + + +def fleurs_langs() -> dict[str, str]: + """BCP-47 -> FLEURS config, parsed out of ingest.py (which imports numpy, + so this reads the literal rather than importing the module).""" + src = (REPO / "scripts/wer/ingest.py").read_text() + body = re.search(r"FLEURS_LANGS: dict\[str, str\] = \{(.*?)\n\}", src, re.S).group(1) + return ast.literal_eval("{" + re.sub(r"#.*", "", body) + "}") + + +# Models whose accepted --language tag is NOT the bare code its hf_card +# advertises. The CLI validates the hint against the GGUF's general.languages +# and nemotron's converter writes locales there ("ar-AR"), while its card +# advertises the deduped bare codes ("ar"), so a bare tag is rejected with +# UNSUPPORTED_LANGUAGE before resolve_prompt_id ever runs. +TAG_OVERRIDE_MODELS = {"nemotron-3.5-asr-streaming-0.6b": "parakeet"} + + +def parakeet_prompt_locales() -> list[str]: + """The nemotron locale list, read from the converter that writes it. + + Parsed rather than copied so the two can't drift: convert-parakeet.py is + what stamps general.languages into the GGUF the CLI validates against. + """ + src = (REPO / "scripts/convert-parakeet.py").read_text() + i = src.index('"nemotron-3.5-asr-streaming-0.6b"') + block = src[i:src.index('"lang_detect"', i)] + m = re.search(r'"languages":\s*\[(.*?)\]', block, re.S) + return re.findall(r'"([a-z]{2}-[A-Z]{2})"', m.group(1)) + + +def locale_for(bare: str) -> str | None: + """Bare code -> the first matching locale in converter order. + + Order matters and is deliberate: the list leads with the regional variant + FLEURS itself ships (en-US, es-US for es_419, pt-BR for pt_br, fr-FR), so + first-match also picks the closest regional match rather than an arbitrary + one.""" + for loc in parakeet_prompt_locales(): + if loc.split("-")[0] == bare: + return loc + return None + + +def card_langs(model: str) -> list[str]: + txt = (REPO / "scripts/hf_cards" / f"{model}.yaml").read_text() + m = re.search(r"^languages:\n((?:\s+-\s+\S+\n)+)", txt, re.M) + return [x.strip('"') for x in re.findall(r"-\s+(\S+)", m.group(1))] if m else [] + + +def build_plan(models: list[str]) -> tuple[list[dict], dict[str, str]]: + """Return (plan rows, {fleurs_config: canonical ingest code}). + + The union is defined by the CORE specialist models only, and deliberately + not by `models`. Two reasons: whisper's 99-language list would otherwise + pull in languages no candidate can be compared against, and a phase-2 + model must not widen the language set after the core matrix has already + run, or the late-added rows would cover languages the core rows never + measured. Extras therefore add rows, never columns.""" + FL = fleurs_langs() + specialists = [m for m in CORE_MODELS if not m.startswith("whisper")] + union: dict[str, str] = {} + for m in specialists: + for l in card_langs(m): + if l in FL: + union.setdefault(FL[l], l) + plan = [] + for m in models: + have = card_langs(m) + for cfg, code in sorted(union.items()): + tag = next((l for l in have if FL.get(l) == cfg), None) + if not tag: + continue + if m in TAG_OVERRIDE_MODELS: + tag = locale_for(tag) + if tag is None: # advertised bare code with no locale + continue + plan.append({"model": m, "lang": code, "tag": tag}) + return plan, union + + +def plan_from_pairs(pairs: dict[str, list[str]]) -> list[dict]: + """Ragged plan: an explicit {card_slug: [bare lang codes]} mapping. + + Unlike build_plan this does NOT compute a union. Each model carries its + own language list, which is what a quantization probe wants: the + comparison is within-model across quants, so models need a spread of + easy-to-hard languages from their own supported set, not a shared column + set. Tag resolution is identical to build_plan's so alias models + (whisper's tl/no vs fil/nb) and locale models resolve the same way. + """ + FL = fleurs_langs() + plan = [] + for m, langs in sorted(pairs.items()): + have = card_langs(m) + for code in langs: + cfg = FL.get(code) + if cfg is None: + sys.exit(f"{m}: {code!r} is not a FLEURS language") + tag = next((l for l in have if FL.get(l) == cfg), None) + if not tag: + sys.exit(f"{m}: card does not advertise {code!r} " + f"(fleurs config {cfg})") + if m in TAG_OVERRIDE_MODELS: + tag = locale_for(tag) + if tag is None: + sys.exit(f"{m}: no locale for {code!r}") + plan.append({"model": m, "lang": code, "tag": tag}) + return plan + + +def group_invocations(plan: list[dict]) -> list[dict]: + """One invocation per (ingest language, language tag). Models that agree + on the tag share a container fan-out.""" + groups: dict[tuple[str, str], list[str]] = defaultdict(list) + for r in plan: + groups[(r["lang"], r["tag"])].append(r["model"]) + return [{"lang": lang, "tag": tag, "models": sorted(ms)} + for (lang, tag), ms in sorted(groups.items())] + + +def spend_today(attempts: int = 3) -> float: + """Actual workspace spend for today from Modal's billing API. + + Returns -1.0 only after `attempts` consecutive failures. The query is + occasionally flaky (seen once mid-sweep), and a single blip must not be + allowed to look like a budget reading.""" + for i in range(attempts): + try: + out = subprocess.run( + ["modal", "billing", "report", "--for", "today", "--json"], + capture_output=True, text=True, timeout=120) + if out.returncode == 0: + return sum(float(r["Cost"]) for r in json.loads(out.stdout)) + except Exception: + pass + if i + 1 < attempts: + time.sleep(5 * (i + 1)) + return -1.0 + + +# Consecutive failed billing reads tolerated before dispatch stops. A few +# blips are normal; flying blind through a whole sweep is not. +MAX_BLIND_DISPATCHES = 3 + + +def run_invocation(inv: dict, gpu: str, batch: int, logdir: pathlib.Path, + quants: str = "Q8_0") -> int: + qtag = quants.replace(',', '+') + log = logdir / f"{inv['lang']}-{inv['tag']}.{qtag}.log" + cmd = [ + "modal", "run", "scripts/wer/remote/modal_sweep.py::sweep", + "--models", ",".join(inv["models"]), + "--dataset", f"fleurs:{inv['lang']}", + "--quants", quants, + "--batch-sizes", str(batch), + "--gpu", gpu, + "--language", inv["tag"], + ] + with open(log, "w") as f: + f.write(f"$ {' '.join(cmd)}\n\n") + f.flush() + return subprocess.run(cmd, cwd=REPO, stdout=f, stderr=subprocess.STDOUT).returncode + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--plan", action="store_true", help="print the plan and exit") + ap.add_argument("--run", action="store_true") + ap.add_argument("--extras", action="store_true", help="include phase-2 models") + ap.add_argument("--only", default="", + help="comma-separated models to actually dispatch. The " + "language union is still computed from CORE_MODELS, " + "so this runs a subset of models over the same " + "columns the core matrix used.") + ap.add_argument("--cap", type=float, default=60.0, + help="stop DISPATCHING once today's spend exceeds this " + "(in-flight invocations always finish)") + ap.add_argument("--quants", default="Q8_0", + help="comma-separated quant substrings passed to " + "modal_sweep (e.g. Q5_K_M,Q4_K_M)") + ap.add_argument("--pairs-file", default="", + help="JSON {card_slug: [lang,...]} for a ragged plan. " + "Bypasses the union; --only/--extras do not apply.") + ap.add_argument("--gpu", default="L4") + ap.add_argument("--batch", type=int, default=8) + ap.add_argument("--jobs", type=int, default=3, + help="invocations in flight at once. The first is always " + "run alone: it warms the CUDA build, and concurrent " + "no-op builds would race on the same build dir.") + ap.add_argument("--logdir", default=None) + args = ap.parse_args() + + if args.pairs_file: + pairs = json.loads(pathlib.Path(args.pairs_file).read_text()) + plan = plan_from_pairs(pairs) + models = sorted(pairs) + union = {r["lang"]: r["lang"] for r in plan} + else: + models = CORE_MODELS + (EXTRA_MODELS if args.extras else []) + plan, union = build_plan(models) + if args.only and not args.pairs_file: + keep = {m.strip() for m in args.only.split(",") if m.strip()} + unknown = keep - set(models) + if unknown: + sys.exit(f"--only names models not in the plan: {sorted(unknown)}") + plan = [r for r in plan if r["model"] in keep] + models = [m for m in models if m in keep] + invs = group_invocations(plan) + + print(f"models : {len(models)}") + print(f"languages : {len(union)}") + print(f"runs : {len(plan)}") + print(f"invocations : {len(invs)}") + nq = len([q for q in args.quants.split(",") if q.strip()]) + print(f"quants : {args.quants} ({nq} per run)") + print(f"cells : {len(plan) * nq}") + print(f"est audio-h : {len(plan) * nq * 2.4:.0f}") + print(f"est cost : ${len(plan) * nq * 2.4 * 0.051:.0f} (upper bound; " + f"whisper-large-v3 rate applied to every model)") + if args.plan: + for inv in invs: + print(f" fleurs:{inv['lang']:<4} tag={inv['tag']:<4} " + f"n={len(inv['models']):>2} {' '.join(inv['models'])}") + return 0 + if not args.run: + print("\n(nothing dispatched; pass --run)") + return 0 + + logdir = pathlib.Path(args.logdir) if args.logdir else \ + REPO / "reports" / "wer" / "_fleurs_matrix_logs" + logdir.mkdir(parents=True, exist_ok=True) + start_spend = spend_today() + print(f"\nspend at start: ${start_spend:.2f} cap: ${args.cap:.2f}") + print(f"logs: {logdir}\n") + + state = {"done": 0, "held": [], "stop": False, "blind": 0} + lock = threading.Lock() + + def dispatch(i: int, inv: dict) -> None: + # Cap is checked at DISPATCH time, so anything already running is + # allowed to finish. That matches "don't kill in-flight work, just + # stop starting new work". + with lock: + if state["stop"]: + state["held"].append(inv) + return + spend = spend_today() + if spend < 0: + # Budget visibility lost. Tolerate a couple of blips, but do + # NOT keep dispatching indefinitely against an unknown spend: + # a guard that fails open forever is not a guard. + state["blind"] += 1 + print(f"[WARN] billing query failed " + f"({state['blind']}/{MAX_BLIND_DISPATCHES}); " + f"dispatching fleurs:{inv['lang']}/{inv['tag']} " + f"without a spend reading") + if state["blind"] >= MAX_BLIND_DISPATCHES: + state["stop"] = True + state["held"].append(inv) + print(f"[HOLD] no billing reading for " + f"{MAX_BLIND_DISPATCHES} dispatches; refusing to " + f"continue blind. Re-run once billing responds.") + return + else: + state["blind"] = 0 + if spend >= args.cap: + state["stop"] = True + state["held"].append(inv) + print(f"[HOLD] spend ${spend:.2f} >= cap ${args.cap:.2f}; " + f"holding fleurs:{inv['lang']}/{inv['tag']} and the rest") + return + t0 = time.time() + rc = run_invocation(inv, args.gpu, args.batch, logdir, args.quants) + with lock: + state["done"] += 1 + print(f"[{state['done']}/{len(invs)}] fleurs:{inv['lang']} " + f"tag={inv['tag']} models={len(inv['models'])} rc={rc} " + f"{time.time() - t0:.0f}s spend=${spend:.2f}", flush=True) + + # First invocation alone: warms the sm_XX build so the rest hit a cached + # binary instead of racing concurrent cmake/ninja runs on one build dir. + dispatch(1, invs[0]) + if len(invs) > 1 and not state["stop"]: + with ThreadPoolExecutor(max_workers=max(1, args.jobs)) as ex: + list(ex.map(lambda t: dispatch(*t), + [(i, inv) for i, inv in enumerate(invs[1:], 2)])) + done, held = state["done"], state["held"] + + final = spend_today() + print(f"\ndispatched {done}/{len(invs)} invocations; spend today ${final:.2f}") + if held: + print("held:", " ".join(f"{h['lang']}/{h['tag']}" for h in held)) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/wer/score_matrix.py b/scripts/wer/score_matrix.py new file mode 100644 index 00000000..6dbbbdd7 --- /dev/null +++ b/scripts/wer/score_matrix.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python3 +"""score_matrix.py — score every FLEURS hyp file and assemble the model x +language matrix. + +Scoring is driven from the filename's dataset id, NOT from the report +header. score.py infers the language from the header when --language is +omitted, and a header stamped "auto" (any model run without an explicit +language tag) silently falls back to the English normalizer and WER, which +would score Japanese with the wrong metric and look plausible. Passing +--language explicitly for every file removes that failure mode. + +Usage: + uv run scripts/wer/score_matrix.py # score + print matrix + uv run scripts/wer/score_matrix.py --no-score # re-read existing scores +""" +from __future__ import annotations + +import argparse +import json +import pathlib +import re +import subprocess +import sys +from collections import defaultdict + +REPO = pathlib.Path(__file__).resolve().parents[2] +WER_DIR = REPO / "reports" / "wer" + +# Hyp files look like .[.b8][.ts-..][...].jsonl +NAME = re.compile(r"^(?P.+?)\.fleurs-(?P[a-z-]+?)" + r"(?P(?:\.b\d+|\.ts-\w+|\.stream\d+ms|\.r\d+|" + r"\.filtered|-timestamps_\w+)*)\.jsonl$") + +QUANT = re.compile(r"-(F32|BF16|F16|Q8_0|Q6_K|Q5_K_M|Q4_K_M|REF)$") + +# Cells that need extra score.py arguments to be measured at all, with the +# reason. Breeze emits Traditional Chinese while FLEURS cmn_hans_cn refs are +# Simplified; folding both sides with OpenCC turns a 35% script mismatch into +# an 8.10% transcription measurement (which matches the number in its own +# hf_card). The fold is applied to reference and hypothesis alike, so it can +# only remove a script difference, never flatter the model on content. +CELL_SCORE_ARGS = { + ("Breeze-ASR-25", "zh"): ( + ["--script-fold", "t2s"], + "OpenCC t2s fold (Traditional model vs Simplified refs)", + ), + # Diarizing models emit `[start][Sxx]text[end]` around every turn. FLEURS + # references are plain single-speaker text, so without --dediarize the + # speaker and timestamp markup is scored as inserted words and the model + # looks far worse than it transcribes. A lang of None applies to every + # language the model is measured on, since this is a property of the + # model's output format rather than of any one language. + ("MOSS-Transcribe-Diarize", None): ( + ["--dediarize"], + "strip [start][Sxx]...[end] turn markup (diarizing model)", + ), + ("multitalker-parakeet-streaming-0.6b-v1", None): ( + ["--dediarize"], + "strip [start][Sxx]...[end] turn markup (diarizing model)", + ), +} + + +def parse(path: pathlib.Path) -> tuple[str, str, str] | None: + m = NAME.match(path.name) + if not m: + return None + slug = m.group("slug") + qm = QUANT.search(slug) + model, quant = (slug[:qm.start()], qm.group(1)) if qm else (slug, "?") + return model, quant, m.group("lang") + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--no-score", action="store_true", + help="skip score.py; read existing .score.json only") + ap.add_argument("--rescore", action="store_true", + help="re-run score.py even for hyps whose .score.json is " + "already newer than the hyp file") + ap.add_argument("--quant", default="Q8_0") + ap.add_argument("--out", default="") + args = ap.parse_args() + # The output path must carry the quant. --quant changes WHAT is scored; + # without this the destination stayed "fleurs_matrix" for every quant, so + # scoring a probe quant silently overwrote the Q8_0 matrix with a handful + # of cells. Q8_0 keeps the bare name so existing callers and the DB + # builder are unaffected. The separator is "_" not ".": with_suffix() + # below would treat a ".Q5_K_M" tail as the suffix and replace it, + # collapsing the path straight back onto fleurs_matrix.tsv. + if not args.out: + args.out = str(WER_DIR / ("fleurs_matrix" if args.quant == "Q8_0" + else f"fleurs_matrix_{args.quant}")) + + files = sorted(p for p in WER_DIR.glob("*.fleurs-*.jsonl") + if not p.name.endswith(".score.json")) + cells: dict[tuple[str, str], dict] = {} + langs: set[str] = set() + failures = [] + + for p in files: + got = parse(p) + if not got: + continue + model, quant, lang = got + if args.quant and quant != args.quant: + continue + score_path = p.with_suffix(".score.json") + # Rescoring every file on every run costs minutes once the matrix is + # a few hundred cells, and score.py is deterministic, so a score that + # is newer than its hyp file is already current. --rescore forces it + # (e.g. after a score.py or normalizer change). + current = (score_path.exists() + and score_path.stat().st_mtime >= p.stat().st_mtime) + extra, extra_why = CELL_SCORE_ARGS.get( + (model, lang), CELL_SCORE_ARGS.get((model, None), ([], None))) + if not args.no_score and not (current and not args.rescore): + r = subprocess.run( + ["uv", "run", "scripts/wer/score.py", str(p), + "--language", lang, *extra], + cwd=REPO, capture_output=True, text=True) + if r.returncode != 0: + failures.append((p.name, r.stderr.strip().split("\n")[-1][:120])) + continue + if not score_path.exists(): + continue + d = json.loads(score_path.read_text()) + langs.add(lang) + cells[(model, lang)] = { + "metric": d["metric"], "pct": d["error_rate_pct"], + "note": extra_why, + "ci_lo": round(d["error_rate_ci_lo"] * 100, 2), + "ci_hi": round(d["error_rate_ci_hi"] * 100, 2), "n": d["n"], + } + + models = sorted({m for m, _ in cells}) + cols = sorted(langs) + out = pathlib.Path(args.out) + with open(out.with_suffix(".tsv"), "w") as f: + f.write("model\t" + "\t".join(cols) + "\n") + for m in models: + row = [f"{cells[(m, l)]['pct']:.2f}" if (m, l) in cells else "" + for l in cols] + f.write(m + "\t" + "\t".join(row) + "\n") + json.dump({"cells": {f"{m}|{l}": v for (m, l), v in cells.items()}, + "models": models, "languages": cols}, + open(out.with_suffix(".json"), "w"), indent=1) + + print(f"{len(cells)} cells, {len(models)} models, {len(cols)} languages " + f"(quant={args.quant})") + print(f" {out.with_suffix('.tsv')}") + + # A cell scored on fewer utterances than its language's full split is a + # leftover from a subset run (a --n-utts smoke test, or an interrupted + # sweep). Its error rate is not comparable to the full-split cells beside + # it, and nothing in the filename says so, so surface it loudly rather + # than letting it sit in the matrix looking like a real measurement. + full = defaultdict(int) + for (m, l), v in cells.items(): + full[l] = max(full[l], v["n"]) + partial = [(m, l, v["n"], full[l]) for (m, l), v in sorted(cells.items()) + if v["n"] < full[l]] + if partial: + print(f"\n!! {len(partial)} PARTIAL cells (subset runs; not comparable):") + for m, l, n, fn in partial: + print(f" {m} / {l}: n={n} vs {fn} for the full split") + for (m, l), (_, why) in CELL_SCORE_ARGS.items(): + # l is None for model-wide rules, which cover every language the model + # was measured on, so expand it rather than looking up a (m, None) key + # that can never be in `cells`. + for lang in ([l] if l is not None else + sorted(cl for (cm, cl) in cells if cm == m)): + if (m, lang) in cells: + print(f" note: {m} / {lang} scored with {why} " + f"-> {cells[(m, lang)]['pct']:.2f}%") + if failures: + print(f"\n{len(failures)} scoring failures:") + for n, e in failures[:10]: + print(f" {n}: {e}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) From ec1b15be64a3093120be6660295c67750aca15a7 Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sat, 12 Sep 2026 16:10:23 +0800 Subject: [PATCH 02/24] more wip --- catalog/README.md | 43 +++ catalog/_format.py | 77 +++++ catalog/_schema.json | 427 ++++++++++++++++++++++++++ catalog/parakeet-unified-en-0.6b.json | 70 +++++ catalog/whisper-large-v3-turbo.json | 76 +++++ scripts/catalog/check.py | 119 +++++++ scripts/catalog/db.py | 126 ++++++++ scripts/catalog/generate.py | 326 ++++++++++++++++++++ scripts/catalog/gguf_kv.py | 151 +++++++++ 9 files changed, 1415 insertions(+) create mode 100644 catalog/README.md create mode 100644 catalog/_format.py create mode 100644 catalog/_schema.json create mode 100644 catalog/parakeet-unified-en-0.6b.json create mode 100644 catalog/whisper-large-v3-turbo.json create mode 100755 scripts/catalog/check.py create mode 100755 scripts/catalog/db.py create mode 100755 scripts/catalog/generate.py create mode 100755 scripts/catalog/gguf_kv.py diff --git a/catalog/README.md b/catalog/README.md new file mode 100644 index 00000000..945cf76b --- /dev/null +++ b/catalog/README.md @@ -0,0 +1,43 @@ +# `catalog/` + +One file per shipped variant: `catalog/.json`. Everything we publish +about a model — what it is, what it supports, what it measured — and nothing +else. + +``` +catalog/ + _schema.json the contract; every field has a description + _format.py the formatter (four rules, no judgement calls) + .json one record per shipped variant +``` + +## What belongs in a record + +A key earns its place only if it is **published to a user**, **read by a gate**, +or **provenance for one of those**. + +- **Bring-up detail stays out.** Dtype distributions, tokenizer summaries, + forward maps, tolerance rationale, upstream's own benchmark claims, and what + upstream *advertises* a model can do all live in `intake.json` and the family + doc. A number published here is one we measured; a capability published here + is one this port implements. +- **No editorial judgement.** Which quant or preset someone *should* pick is a + recommendation, and recommendations are made elsewhere. +- **No permanently-null fields.** A field nothing populates is removed until + something populates it. A field that is null because the harness does not + stamp it yet — `engine_sha` on accuracy rows — stays, because that is a + tracked gap rather than a dead column. +- **Full splits only.** A benchmark row is a complete, named, reproducible + split. Subset runs are bring-up evidence; they can back a capability's + `verified` flag but never publish a number here. +- **Every capability is listed**, supported or not, so the whole surface is + visible at a glance and every model renders the same table rows. + +Records are machine-assembled from artifacts, never hand-typed. The porting +skills own which stage writes what. + +## Formatting + +```bash +uv run catalog/_format.py catalog/*.json +``` diff --git a/catalog/_format.py b/catalog/_format.py new file mode 100644 index 00000000..2c0babd0 --- /dev/null +++ b/catalog/_format.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +"""Canonical formatter for the catalog records. Four rules, no judgement calls: + + 1. An element of a ROW array (downloads, accuracy_benchmarks, speed_benchmarks, + and a streaming capability's presets) is exactly one line. A row is a table + row; expanding it across eighteen lines is what makes a 164-cell sweep + unreadable. + 2. A member of a ROW object (capabilities) is one line, unless it carries a + table of its own -- then it expands and its table follows rule 1. + 3. An array of scalars wraps at 78 columns. + 4. Everything else is fully expanded, one member per line, like `jq --indent 2`. + +Rules 1 and 2 key off names that only carry this meaning at the top level of a +record, so they are applied ONLY to the record's own sections -- never inside +_schema.json, where the same words are subschema keys. + + uv run catalog/_format.py catalog/*.json +""" +import json, pathlib, sys + +WRAP = 78 +ROW_ARRAYS = {"downloads", "accuracy_benchmarks", "speed_benchmarks"} +ROW_OBJECTS = {"capabilities"} +NESTED_ROW_ARRAYS = {"presets"} + + +def compact(o): + return json.dumps(o, separators=(",", ":"), ensure_ascii=False) + + +def has_table(v): + return any(isinstance(x, list) and any(isinstance(y, dict) for y in x) + for x in v.values()) if isinstance(v, dict) else False + + +def fmt(o, ind=0, *, row=False, row_object=False, top=False): + pad = " " * ind + if row and not isinstance(o, list): + return compact(o) + if isinstance(o, list): + if not o: + return "[]" + if all(not isinstance(x, (dict, list)) for x in o): + c = compact(o) + if len(c) + ind <= WRAP: + return c + lines, cur = [], pad + " " + for i, x in enumerate(o): + add = json.dumps(x, ensure_ascii=False) + ("," if i < len(o) - 1 else "") + if len(cur) + len(add) + 1 > WRAP and cur.strip(): + lines.append(cur.rstrip()) + cur = pad + " " + cur += add + " " + lines.append(cur.rstrip()) + return "[\n" + "\n".join(lines) + "\n" + pad + "]" + items = [pad + " " + fmt(x, ind + 2, row=row) for x in o] + return "[\n" + ",\n".join(items) + "\n" + pad + "]" + if isinstance(o, dict): + if not o: + return "{}" + items = [] + for k, v in o.items(): + key = json.dumps(k, ensure_ascii=False) + if row_object and isinstance(v, dict) and not has_table(v): + items.append(f"{pad} {key}: {compact(v)}") + else: + items.append(f"{pad} {key}: " + fmt( + v, ind + 2, + row=(top and k in ROW_ARRAYS) or k in NESTED_ROW_ARRAYS, + row_object=top and k in ROW_OBJECTS)) + return "{\n" + ",\n".join(items) + "\n" + pad + "}" + return compact(o) + + +for p in map(pathlib.Path, sys.argv[1:]): + p.write_text(fmt(json.loads(p.read_text()), top=True) + "\n") + print(f"{p} {len(p.read_text().splitlines()):>4} lines") diff --git a/catalog/_schema.json b/catalog/_schema.json new file mode 100644 index 00000000..12bfd581 --- /dev/null +++ b/catalog/_schema.json @@ -0,0 +1,427 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "transcribe-catalog-v1", + "title": "transcribe.cpp model catalog record", + "description": "", + "type": "object", + "required": [ + "schema", "variant", "family", "display_name", "params", "license", + "upstream_repo", "published_repo", "languages", "long_form_strategy", + "capabilities", "downloads", "accuracy_benchmarks", "speed_benchmarks" + ], + "properties": { + "schema": { + "const": "transcribe-catalog-v1" + }, + "variant": { + "type": "string", + "description": "The model slug. Must equal the stem of scripts/hf_cards/.yaml and docs/models/.md.", + "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$" + }, + "family": { + "type": "string", + "description": "Loader family (the GGUF's general.architecture)" + }, + "display_name": { + "type": "string" + }, + "params": { + "type": "integer", + "description": "Exact parameter count, summed from GGUF tensor shapes." + }, + "architecture_pattern": { + "type": ["string","null"], + "description": "One of the patterns in docs/porting/0-porting.md. Groups models for readers." + }, + "license": { + "type": "object", + "required": ["spdx","display"], + "properties": { + "spdx": { + "type": "string" + }, + "display": { + "type": "string" + } + } + }, + "upstream_repo": { + "type": "string", + "description": "The upstream model this port derives from. Which upstream commit was converted is a bring-up fact and lives in intake.json." + }, + "published_repo": { + "type": ["string","null"], + "description": "Our GGUF repo. null until published." + }, + "languages": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "description": "Languages this port transcribes, in the spellings it advertises." + }, + "language_tag_form": { + "enum": ["bare-bcp47","locale","mixed"], + "description": "What the --language argument accepts. nemotron validates the hint against locales (ar-AR) while its card advertises bare codes, so a caller passing the advertised spelling is rejected with UNSUPPORTED_LANGUAGE. A consumer needs this before it can call the model at all." + }, + "language_aliases": { + "type": "object", + "description": "{advertised spelling: canonical code}, for the languages this model names differently from everyone else (whisper says tl and no where the rest of the world says fil and nb). Lets a caller holding a canonical code find the tag this model wants.", + "additionalProperties": { + "type": "string" + } + }, + "encoder_window_s": { + "type": ["number","null"], + "description": "Fixed encoder window, if the architecture has one (whisper 30 s)." + }, + "long_form_strategy": { + "enum": ["chunked-unbounded","hard-cap","soft-window"], + "description": "Which bucket in docs/input-limits.md this family falls into." + }, + "max_audio_s": { + "type": ["number","null"], + "description": "Usable ceiling, mirroring transcribe_capabilities::max_audio_ms. null = no practical limit." + }, + "max_output_tokens": { + "type": ["integer","null"] + }, + "capabilities": { + "type": "object", + "additionalProperties": false, + "description": "What this port supports. Every capability in the vocabulary is listed on every record, supported or not, so a reviewer sees the whole surface at a glance and every model renders into the same table rows. `supported` comes from the loader's own capability surface (transcribe_capabilities, read from the GGUF) rather than being hand-written -- hand-writing it is how moss-transcribe-diarize shipped as diarize:false. `verified` says whether we ran it and watched it work, and only applies when supported; the Stage 8 gate sets it and refuses sign-off while anything supported is unverified. Why something is unverified is a bring-up question and lives in the family doc's Capability Validation table. An unsupported capability carries no payload and no verified flag -- there is nothing to verify.", + "properties": { + "transcribe": { + "$ref": "#/$defs/capability", + "description": "Speech to text in the source language." + }, + "translate": { + "$ref": "#/$defs/capability", + "description": "Speech in one language to text in another. The direction set IS the capability -- whisper does any-source to English only, canary translates between its 25 languages. Mirrors what the loader reads from stt.translation.target_languages / .pairs.", + "properties": { + "targets": { + "type": ["array","null"], + "items": { + "type": "string" + }, + "description": "Targets reachable from any supported source. null when the model gates on explicit pairs." + }, + "pairs": { + "type": ["array","null"], + "items": { + "oneOf": [ + { + "type": "string", + "description": "The GGUF's own form, e.g. 'en>fr'." + }, + { + "type": "object", + "required": ["from","to"], + "properties": { + "from": { + "type": "string" + }, + "to": { + "type": "string" + } + } + } + ] + }, + "description": "Explicit source->target pairs, when the model accepts only a fixed set. Carried in whichever form stt.translation.pairs uses." + } + } + }, + "lang_detect": { + "$ref": "#/$defs/capability", + "description": "Identifies the spoken language without a hint. A model without this needs a separate LID step in front of it.", + "properties": { + "over": { + "type": ["array","null"], + "items": { + "type": "string" + }, + "description": "The set detection works over. null means the model's full language list." + } + } + }, + "timestamps": { + "$ref": "#/$defs/capability", + "description": "Timestamp granularities this port emits, mirroring transcribe_capabilities::max_timestamp_kind. Not always what upstream offers -- whisper exposes word-level alignment upstream while this port ships segment.", + "properties": { + "granularities": { + "type": "array", + "minItems": 1, + "items": { + "enum": ["segment","word","token"] + } + } + } + }, + "streaming": { + "$ref": "#/$defs/capability", + "description": "Incremental transcription over a live stream. The shipped latency presets ARE the capability: parakeet-unified publishes six whose accuracy spans 1.40% to 5.76% WER.", + "properties": { + "mode": { + "type": ["string","null"], + "description": "buffered | cache-aware | native." + }, + "presets": {"type":["array","null"],"items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"left_ms":{"type":["number","null"]},"chunk_ms":{"type":["number","null"]},"right_ms":{"type":["number","null"]},"lookahead_ms":{"type":["number","null"],"description":"Audio that must be buffered before a chunk's tokens emit. The number a user feels."},"is_default":{"type":["boolean","null"]}}}} + } + }, + "diarize": { + "$ref": "#/$defs/capability", + "description": "Speaker-attributed output. Note the scoring consequence: a diarizing model emits turn markup plain references do not contain, so its transcription accuracy must be scored under a dediarizing recipe.", + "properties": { + "max_speakers": { + "type": ["integer","null"] + }, + "granularity": { + "type": ["string","null"], + "description": "turn | frame." + }, + "markup": { + "type": ["string","null"], + "description": "Literal shape of the attribution, e.g. '[start][Sxx]text[end]'." + } + } + }, + "batching": { + "$ref": "#/$defs/capability", + "description": "Explicit parallel run_batch() fast path, byte-identical to single-stream." + }, + "punctuation": { + "$ref": "#/$defs/capability", + "description": "Emits punctuation. Reserved and deferred. Optional until the transcription-style work lands: absent means not yet determined, which is different from supported:false." + }, + "casing": { + "$ref": "#/$defs/capability", + "description": "Emits mixed case. Reserved and deferred. Optional until the transcription-style work lands: absent means not yet determined, which is different from supported:false." + }, + "itn": { + "$ref": "#/$defs/capability", + "description": "Inverse text normalisation -- '25' rather than 'twenty five'. Reserved and deferred. Optional until the transcription-style work lands: absent means not yet determined, which is different from supported:false." + } + }, + "required": [ + "transcribe", "translate", "lang_detect", "timestamps", "streaming", + "diarize", "batching" + ] + }, + "downloads": { + "type": "array", + "minItems": 1, + "description": "The GGUF files we publish.", + "items": { + "type": "object", + "required": ["quant","filename","size_bytes"], + "properties": { + "quant": { + "type": "string" + }, + "filename": { + "type": "string", + "description": "Cached from the Hub listing and verified against it, not authored." + }, + "size_bytes": { + "type": ["integer","null"], + "minimum": 1, + "description": "Exact blob size. Prose units are a rendering concern -- the card's '845 MB' is 845 MiB mislabelled, and the sweep's 1 GB quant threshold keys off the real number." + } + } + } + }, + "accuracy_benchmarks": { + "type": "array", + "description": "One row per measured cell. Full dataset splits only -- a subset run is a bring-up artifact, not a published benchmark. Identity first, result second, provenance last, so the left of every row reads 'what ran and what did it score'. The artifact a row came from is reconstructible from the row itself, so no path is stored.", + "items": { + "type": "object", + "required": [ + "dataset", "split", "language", "quant", "metric", "err_pct", + "ci95", "n_utts", "recipe", "engine_sha" + ], + "properties": { + "dataset": { + "type": "string", + "description": "Dataset id as scripts/wer/ingest.py knows it." + }, + "split": { + "type": "string", + "description": "The full split measured. Named and reproducible; never an ad-hoc selection." + }, + "language": { + "type": "string", + "description": "Canonical code, not the model's own spelling." + }, + "quant": { + "type": "string", + "description": "MUST appear in downloads[]." + }, + "metric": { + "enum": ["wer","cer","der","cpwer","accuracy"], + "description": "CER for zh/yue/ja/ko/th; der/cpwer for diarization; accuracy for LID." + }, + "err_pct": { + "type": "number", + "minimum": 0 + }, + "ci95": { + "type": "array", + "minItems": 2, + "maxItems": 2, + "items": { + "type": ["number","null"] + }, + "description": "Bootstrap 95% interval, percent. A null pair when none was produced -- never 0.0." + }, + "n_utts": { + "type": "integer", + "minimum": 1 + }, + "recipe": { + "type": "string", + "description": "Key in catalog/_recipes.json. Rows under different recipes are not comparable." + }, + "engine_sha": { + "type": ["string","null"], + "description": "transcribe.cpp commit that produced the hypotheses." + }, + "measured_on": { + "type": ["string","null"], + "format": "date" + }, + "errors": { + "type": "object", + "properties": { + "sub": { + "type": "integer" + }, + "del": { + "type": "integer" + }, + "ins": { + "type": "integer" + } + }, + "description": "Error composition. Deletion-heavy means dropping audio; insertion-heavy means hallucinating." + }, + "empty_hyp": { + "type": ["integer","null"], + "description": "Utterances that returned nothing. A generation failure, not a transcription error." + }, + "utts_over_50pct": { + "type": ["integer","null"], + "description": "Catastrophic-tail count." + } + } + } + }, + "speed_benchmarks": { + "type": "array", + "description": "One row per measured cell. The bench protocol -- machine coverage, backends, quants, sample durations, iteration and warmup counts, the thermal precondition -- belongs to porting-6-bench and is not restated per row.", + "items": { + "type": "object", + "required": [ + "machine", "backend", "quant", "sample", "sample_duration_s", + "total_ms", "xrt_compute", "engine_sha" + ], + "properties": { + "machine": { + "type": "string", + "description": "Canonical machine slug, as scripts/bench/run.py derives it from the CPU model string. One slug per physical machine is a hard gate, not a lookup table: reports/perf/amd-ryzen-7-4750u-pro is a stale hand-made directory for the same box that auto-detection names amd-ryzen-7-pro-4750u-with-radeon-graphics." + }, + "backend": { + "enum": ["cpu","metal","vulkan","cuda"] + }, + "quant": { + "type": "string", + "description": "MUST appear in downloads[]." + }, + "sample": { + "type": "string", + "description": "Sample id. The set is OPEN: a long-audio sample is new rows, not a schema change." + }, + "sample_duration_s": { + "type": "number", + "description": "Carried per cell so nothing downstream assumes a fixed sample set or has to look the duration up." + }, + "total_ms": { + "type": "number", + "description": "mel + encode + decode, mean over iters after warmup." + }, + "xrt_compute": { + "type": "number", + "description": "sample_duration_s / total. Stored rather than derived because it is the published figure and must not drift with rounding." + }, + "load_ms": { + "type": ["number","null"] + }, + "mel_ms": { + "type": ["number","null"], + "description": "The stage split (mel/encode/decode) is what makes a regression attributable. A single total tells you something got slower and nothing else." + }, + "encode_ms": { + "type": ["number","null"] + }, + "decode_ms": { + "type": ["number","null"] + }, + "engine_sha": { + "type": ["string","null"], + "description": "A perf number without a build is not reproducible." + }, + "measured_on": { + "type": ["string","null"], + "format": "date" + }, + "thermal_gated": { + "type": ["boolean","null"], + "description": "Whether the machine's thermal precondition was met before this block. Not cosmetic: the same parakeet-unified CPU cells measure 8.17x realtime gated and 5.51x ungated, a 48% difference that dwarfs most code changes." + } + } + } + } + }, + "$defs": { + "capability": { + "type": "object", + "required": ["supported"], + "description": "Shared envelope. `verified` is required when supported is true and omitted otherwise.", + "properties": { + "supported": { + "type": "boolean", + "description": "Whether this port has the capability." + }, + "verified": { + "type": "boolean", + "description": "Whether we ran it and observed it working. Set by the Stage 8 gate." + }, + "note": { + "type": "string", + "description": "Only where a consumer would otherwise be surprised -- a gap against what upstream advertises, or a caveat on how it behaves." + } + }, + "allOf": [ + { + "if": { + "properties": { + "supported": { + "const": true + } + }, + "required": ["supported"] + }, + "then": { + "required": ["verified"] + }, + "else": { + "not": { + "required": ["verified"] + } + } + } + ] + } + } +} diff --git a/catalog/parakeet-unified-en-0.6b.json b/catalog/parakeet-unified-en-0.6b.json new file mode 100644 index 00000000..be393fb7 --- /dev/null +++ b/catalog/parakeet-unified-en-0.6b.json @@ -0,0 +1,70 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "parakeet-unified-en-0.6b", + "family": "parakeet", + "display_name": "Parakeet Unified EN 0.6B", + "params": 618330880, + "architecture_pattern": "encoder-transducer", + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/parakeet-unified-en-0.6b", + "published_repo": "handy-computer/parakeet-unified-en-0.6b-gguf", + "languages": ["en"], + "language_tag_form": "bare-bcp47", + "encoder_window_s": null, + "long_form_strategy": "chunked-unbounded", + "max_audio_s": null, + "max_output_tokens": null, + "capabilities": { + "transcribe": {"supported":true,"verified":true}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["token","word"],"verified":false}, + "streaming": { + "supported": true, + "mode": "buffered", + "presets": [ + {"name":"70-1-0","left_ms":5600,"chunk_ms":80,"right_ms":0,"lookahead_ms":80,"is_default":false}, + {"name":"70-1-1","left_ms":5600,"chunk_ms":80,"right_ms":80,"lookahead_ms":160,"is_default":false}, + {"name":"70-2-2","left_ms":5600,"chunk_ms":160,"right_ms":160,"lookahead_ms":320,"is_default":false}, + {"name":"70-2-4","left_ms":5600,"chunk_ms":160,"right_ms":320,"lookahead_ms":480,"is_default":false}, + {"name":"70-7-7","left_ms":5600,"chunk_ms":560,"right_ms":560,"lookahead_ms":1120,"is_default":false}, + {"name":"70-13-13","left_ms":5600,"chunk_ms":1040,"right_ms":1040,"lookahead_ms":2080,"is_default":true} + ], + "verified": true, + "note": "byte-equal transcript vs NeMo speech_to_text_streaming_infer_rnnt.py at the default (70, 13, 13)" + }, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false}, + "punctuation": {"supported":true,"verified":true} + }, + "downloads": [ + {"quant":"F32","filename":"parakeet-unified-en-0.6b-F32.gguf","size_bytes":2473323520}, + {"quant":"F16","filename":"parakeet-unified-en-0.6b-F16.gguf","size_bytes":1239114240}, + {"quant":"Q8_0","filename":"parakeet-unified-en-0.6b-Q8_0.gguf","size_bytes":731357568}, + {"quant":"Q6_K","filename":"parakeet-unified-en-0.6b-Q6_K.gguf","size_bytes":602191232}, + {"quant":"Q5_K_M","filename":"parakeet-unified-en-0.6b-Q5_K_M.gguf","size_bytes":540795264}, + {"quant":"Q4_K_M","filename":"parakeet-unified-en-0.6b-Q4_K_M.gguf","size_bytes":477274496} + ], + "accuracy_benchmarks": [], + "speed_benchmarks": [ + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":844.0,"xrt_compute":13.033,"load_ms":599.8,"mel_ms":20.0,"encode_ms":435.6,"decode_ms":388.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3039.8,"xrt_compute":11.623,"load_ms":324.4,"mel_ms":65.0,"encode_ms":1168.0,"decode_ms":1806.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":834.9,"xrt_compute":13.175,"load_ms":677.6,"mel_ms":22.5,"encode_ms":419.3,"decode_ms":393.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3026.6,"xrt_compute":11.674,"load_ms":393.1,"mel_ms":67.0,"encode_ms":1141.2,"decode_ms":1818.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1179.3,"xrt_compute":9.328,"load_ms":834.4,"mel_ms":19.0,"encode_ms":767.2,"decode_ms":393.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4660.2,"xrt_compute":7.582,"load_ms":817.6,"mel_ms":63.7,"encode_ms":2784.3,"decode_ms":1812.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1346.4,"xrt_compute":8.17,"load_ms":1147.8,"mel_ms":20.4,"encode_ms":925.3,"decode_ms":400.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5214.8,"xrt_compute":6.775,"load_ms":1022.9,"mel_ms":67.0,"encode_ms":3273.0,"decode_ms":1874.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":69.0,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":210.0,"xrt_compute":168.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":71.0,"xrt_compute":155.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":209.0,"xrt_compute":169.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":375.0,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1270.0,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":318.0,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1090.0,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/whisper-large-v3-turbo.json b/catalog/whisper-large-v3-turbo.json new file mode 100644 index 00000000..d937afea --- /dev/null +++ b/catalog/whisper-large-v3-turbo.json @@ -0,0 +1,76 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "whisper-large-v3-turbo", + "family": "whisper", + "display_name": "Whisper large-v3-turbo", + "params": 808866560, + "architecture_pattern": "encoder-decoder-cross-attention", + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "openai/whisper-large-v3-turbo", + "published_repo": "handy-computer/whisper-large-v3-turbo-gguf", + "languages": [ + "en", "zh", "de", "es", "ru", "ko", "fr", "ja", "pt", "tr", "pl", "ca", + "nl", "ar", "sv", "it", "id", "hi", "fi", "vi", "he", "uk", "el", "ms", + "cs", "ro", "da", "hu", "ta", "no", "th", "ur", "hr", "bg", "lt", "la", + "mi", "ml", "cy", "sk", "te", "fa", "lv", "bn", "sr", "az", "sl", "kn", + "et", "mk", "br", "eu", "is", "hy", "ne", "mn", "bs", "kk", "sq", "sw", + "gl", "mr", "pa", "si", "km", "sn", "yo", "so", "af", "oc", "ka", "be", + "tg", "sd", "gu", "am", "yi", "lo", "uz", "fo", "ht", "ps", "tk", "nn", + "mt", "sa", "lb", "my", "bo", "tl", "mg", "as", "tt", "haw", "ln", "ha", + "ba", "jw", "su", "yue" + ], + "language_tag_form": "bare-bcp47", + "language_aliases": { + "tl": "fil", + "no": "nb", + "jw": "jv" + }, + "encoder_window_s": 30.0, + "long_form_strategy": "chunked-unbounded", + "max_audio_s": null, + "max_output_tokens": 448, + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":true,"targets":["en"],"verified":false,"note":"any supported source language to English text only"}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false,"note":"upstream exposes word-level via cross-attention alignment; this port ships segment"}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F16","filename":"whisper-large-v3-turbo-F16.gguf","size_bytes":1625935520}, + {"quant":"Q8_0","filename":"whisper-large-v3-turbo-Q8_0.gguf","size_bytes":886381760}, + {"quant":"Q6_K","filename":"whisper-large-v3-turbo-Q6_K.gguf","size_bytes":692536928}, + {"quant":"Q5_K_M","filename":"whisper-large-v3-turbo-Q5_K_M.gguf","size_bytes":619628128}, + {"quant":"Q4_K_M","filename":"whisper-large-v3-turbo-Q4_K_M.gguf","size_bytes":536069728} + ], + "accuracy_benchmarks": [ + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.0,"ci95":[1.82,2.21],"n_utts":2620,"recipe":"librispeech-ts-segment","engine_sha":null,"measured_on":null,"errors":{"sub":761,"del":183,"ins":117},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.0,"ci95":[1.82,2.2],"n_utts":2620,"recipe":"librispeech-ts-segment","engine_sha":null,"measured_on":null,"errors":{"sub":765,"del":177,"ins":116},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.96,"ci95":[1.78,2.17],"n_utts":2620,"recipe":"librispeech-ts-segment","engine_sha":null,"measured_on":null,"errors":{"sub":762,"del":172,"ins":108},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.0,"ci95":[1.82,2.22],"n_utts":2620,"recipe":"librispeech-ts-segment","engine_sha":null,"measured_on":null,"errors":{"sub":765,"del":167,"ins":131},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.0,"ci95":[1.81,2.21],"n_utts":2620,"recipe":"librispeech-ts-segment","engine_sha":null,"measured_on":null,"errors":{"sub":777,"del":180,"ins":105},"empty_hyp":0,"utts_over_50pct":6} + ], + "speed_benchmarks": [ + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4915.7,"xrt_compute":2.238,"load_ms":348.9,"mel_ms":42.0,"encode_ms":4507.6,"decode_ms":366.2,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":10262.0,"xrt_compute":3.443,"load_ms":361.5,"mel_ms":42.6,"encode_ms":4503.0,"decode_ms":5716.4,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4773.2,"xrt_compute":2.305,"load_ms":547.3,"mel_ms":39.4,"encode_ms":4365.9,"decode_ms":367.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":10160.7,"xrt_compute":3.477,"load_ms":555.3,"mel_ms":44.3,"encode_ms":4395.9,"decode_ms":5720.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":15744.4,"xrt_compute":0.699,"load_ms":419.9,"mel_ms":46.4,"encode_ms":14898.3,"decode_ms":799.7,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":32216.9,"xrt_compute":1.097,"load_ms":423.1,"mel_ms":54.5,"encode_ms":15063.5,"decode_ms":17098.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":19850.7,"xrt_compute":0.554,"load_ms":666.1,"mel_ms":49.1,"encode_ms":18807.3,"decode_ms":994.3,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":40179.2,"xrt_compute":0.879,"load_ms":661.3,"mel_ms":62.1,"encode_ms":18767.6,"decode_ms":21349.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":286.1,"xrt_compute":38.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":649.5,"xrt_compute":54.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":288.7,"xrt_compute":38.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":641.1,"xrt_compute":55.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7600.0,"xrt_compute":1.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15340.0,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5890.0,"xrt_compute":1.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":11870.0,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null} + ] +} diff --git a/scripts/catalog/check.py b/scripts/catalog/check.py new file mode 100755 index 00000000..f5fdcab5 --- /dev/null +++ b/scripts/catalog/check.py @@ -0,0 +1,119 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# dependencies = ["jsonschema", "pyyaml"] +# /// +"""check.py — validate catalog records and diff them against what we publish today. + +Three passes: + schema every record validates against catalog/_schema.json + integrity the gates the schema cannot express -- every benchmarked quant is + published, one slug per physical machine, recipe labels consistent + published every number currently in scripts/hf_cards/*.yaml is either + reproduced by a record or reported as unsourced + +The third pass is the migration's acceptance test: it says, model by model, +how much of what we publish today actually has an artifact behind it. + + uv run scripts/catalog/check.py + uv run scripts/catalog/check.py --dir catalog --published +""" +from __future__ import annotations + +import argparse +import collections +import json +import pathlib +import sys + +import yaml +from jsonschema import Draft202012Validator + +REPO = pathlib.Path(__file__).resolve().parents[2] +CARDS = REPO / "scripts/hf_cards" + + +def load(d: pathlib.Path) -> dict[str, dict]: + return {p.stem: json.loads(p.read_text()) + for p in sorted(d.glob("*.json")) if not p.name.startswith("_")} + + +def schema_pass(records: dict, schema: dict) -> int: + v, bad = Draft202012Validator(schema), 0 + for name, rec in records.items(): + errs = sorted(v.iter_errors(rec), key=lambda e: list(e.path)) + if errs: + bad += 1 + print(f" FAIL {name}: {len(errs)} error(s)") + for e in errs[:4]: + print(f" {'/'.join(map(str, e.path)) or ''}: {e.message[:110]}") + print(f"schema {len(records) - bad}/{len(records)} valid") + return bad + + +def integrity_pass(records: dict) -> int: + bad = 0 + machines: dict[str, set[str]] = collections.defaultdict(set) + for name, rec in records.items(): + published = {d["quant"] for d in rec.get("downloads", [])} + for sect in ("accuracy_benchmarks", "speed_benchmarks"): + missing = {r["quant"] for r in rec.get(sect, []) if r["quant"] not in published} + if missing: + bad += 1 + print(f" FAIL {name}: {sect} references unpublished quant(s) {sorted(missing)}") + for r in rec.get("speed_benchmarks", []): + if r.get("machine"): + machines[r["machine"]].add(name) + recipes = {(r["dataset"], r["recipe"]) for r in rec.get("accuracy_benchmarks", [])} + by_ds = collections.Counter(ds for ds, _ in recipes) + for ds, n in by_ds.items(): + if n > 1: + print(f" warn {name}: {ds} measured under {n} recipes " + f"{sorted(r for d, r in recipes if d == ds)} -- not comparable to each other") + print(f"integrity {len(records) - bad}/{len(records)} clean; " + f"{len(machines)} machine slug(s): {', '.join(sorted(machines))}") + return bad + + +def published_pass(records: dict) -> None: + """What the cards publish today, vs what a record can source.""" + rows, tot_w, got_w, tot_p, got_p = [], 0, 0, 0, 0 + for stem in sorted(p.stem for p in CARDS.glob("*.yaml")): + card = yaml.safe_load((CARDS / f"{stem}.yaml").read_text()) or {} + rec = records.get(stem) + card_w = {q["name"]: q.get("wer") for q in (card.get("quants") or []) if q.get("wer")} + card_p = sum(len(v) for v in (card.get("perf") or {}).values()) + have_w = {r["quant"] for r in (rec or {}).get("accuracy_benchmarks", [])} + have_p = len({(r["machine"], r["backend"], r["quant"]) for r in + (rec or {}).get("speed_benchmarks", [])}) + tot_w += len(card_w); got_w += len(set(card_w) & have_w) + tot_p += card_p; got_p += min(card_p, have_p) + if len(card_w) != len(set(card_w) & have_w) or card_p > have_p: + rows.append((stem, f"{len(set(card_w) & have_w)}/{len(card_w)}", + f"{min(card_p, have_p)}/{card_p}")) + print(f"published WER cells sourced {got_w}/{tot_w}; perf cells sourced {got_p}/{tot_p}") + if rows: + print(f"\n {'variant':42s} {'wer':>9} {'perf':>9}") + for stem, w, p in rows: + print(f" {stem:42s} {w:>9} {p:>9}") + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--dir", default=str(REPO / "catalog")) + ap.add_argument("--published", action="store_true", help="run the published-vs-sourced diff") + args = ap.parse_args() + d = pathlib.Path(args.dir) + schema = json.loads((REPO / "catalog/_schema.json").read_text()) + records = load(d) + if not records: + print(f"no records in {d}", file=sys.stderr) + return 2 + bad = schema_pass(records, schema) + integrity_pass(records) + if args.published: + published_pass(records) + return 1 if bad else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/catalog/db.py b/scripts/catalog/db.py new file mode 100755 index 00000000..ae009067 --- /dev/null +++ b/scripts/catalog/db.py @@ -0,0 +1,126 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# /// +"""db.py — fold catalog records into build/catalog.db. + +A derived index, never a store: dropped and rebuilt on every run, nothing +hand-edited in it, and it never writes anywhere the WER tooling reads. Because +the input is already structured, this is a fold with no parsers -- which is the +whole point of the records existing. + + uv run scripts/catalog/db.py + uv run scripts/catalog/db.py --out build/catalog.db +""" +from __future__ import annotations + +import argparse +import json +import pathlib +import sqlite3 +import sys +from datetime import datetime, timezone + +REPO = pathlib.Path(__file__).resolve().parents[2] + +SCHEMA = """ +PRAGMA user_version = 1; +CREATE TABLE meta(key TEXT PRIMARY KEY, value TEXT); +CREATE TABLE models( + variant TEXT PRIMARY KEY, family TEXT NOT NULL, display_name TEXT, + params INTEGER, license TEXT, upstream_repo TEXT, published_repo TEXT, + long_form_strategy TEXT, max_audio_s REAL); +CREATE TABLE languages( + variant TEXT REFERENCES models(variant), lang TEXT, + PRIMARY KEY(variant, lang)); +CREATE TABLE capabilities( + variant TEXT REFERENCES models(variant), capability TEXT, + supported INTEGER NOT NULL, verified INTEGER, note TEXT, + PRIMARY KEY(variant, capability)); +CREATE TABLE downloads( + variant TEXT REFERENCES models(variant), quant TEXT, + filename TEXT NOT NULL, size_bytes INTEGER, + PRIMARY KEY(variant, quant)); +CREATE TABLE accuracy( + variant TEXT REFERENCES models(variant), dataset TEXT, split TEXT, + language TEXT, quant TEXT, metric TEXT NOT NULL, + err_pct REAL NOT NULL, ci_lo REAL, ci_hi REAL, n_utts INTEGER NOT NULL, + recipe TEXT NOT NULL, engine_sha TEXT, measured_on TEXT, + sub INTEGER, del_ INTEGER, ins INTEGER, empty_hyp INTEGER, + PRIMARY KEY(variant, dataset, split, language, quant, recipe)); +CREATE TABLE speed( + variant TEXT REFERENCES models(variant), machine TEXT, backend TEXT, + quant TEXT, sample TEXT, sample_duration_s REAL, + total_ms REAL NOT NULL, xrt REAL NOT NULL, + load_ms REAL, mel_ms REAL, encode_ms REAL, decode_ms REAL, + engine_sha TEXT, measured_on TEXT, thermal_gated INTEGER, + PRIMARY KEY(variant, machine, backend, quant, sample)); +""" + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--dir", default=str(REPO / "catalog")) + ap.add_argument("--out", default=str(REPO / "build" / "catalog.db")) + args = ap.parse_args() + + records = [json.loads(p.read_text()) + for p in sorted(pathlib.Path(args.dir).glob("*.json")) + if not p.name.startswith("_")] + if not records: + print("no records", file=sys.stderr) + return 2 + + out = pathlib.Path(args.out) + out.parent.mkdir(parents=True, exist_ok=True) + out.unlink(missing_ok=True) + con = sqlite3.connect(out) + con.execute("PRAGMA foreign_keys = ON") + con.executescript(SCHEMA) + + for r in records: + v = r["variant"] + con.execute("INSERT INTO models VALUES (?,?,?,?,?,?,?,?,?)", + (v, r.get("family"), r.get("display_name"), r.get("params"), + (r.get("license") or {}).get("spdx"), r.get("upstream_repo"), + r.get("published_repo"), r.get("long_form_strategy"), + r.get("max_audio_s"))) + con.executemany("INSERT OR IGNORE INTO languages VALUES (?,?)", + [(v, l) for l in r.get("languages", [])]) + con.executemany("INSERT INTO capabilities VALUES (?,?,?,?,?)", + [(v, k, int(bool(c.get("supported"))), + None if c.get("verified") is None else int(c["verified"]), + c.get("note")) for k, c in (r.get("capabilities") or {}).items()]) + con.executemany("INSERT INTO downloads VALUES (?,?,?,?)", + [(v, d["quant"], d["filename"], d.get("size_bytes")) + for d in r.get("downloads", [])]) + con.executemany("INSERT OR REPLACE INTO accuracy VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", + [(v, a["dataset"], a["split"], a["language"], a["quant"], a["metric"], + a["err_pct"], (a.get("ci95") or [None, None])[0], + (a.get("ci95") or [None, None])[1], a["n_utts"], a["recipe"], + a.get("engine_sha"), a.get("measured_on"), + (a.get("errors") or {}).get("sub"), (a.get("errors") or {}).get("del"), + (a.get("errors") or {}).get("ins"), a.get("empty_hyp")) + for a in r.get("accuracy_benchmarks", [])]) + con.executemany("INSERT OR REPLACE INTO speed VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", + [(v, s["machine"], s["backend"], s["quant"], s["sample"], + s["sample_duration_s"], s["total_ms"], s["xrt_compute"], + s.get("load_ms"), s.get("mel_ms"), s.get("encode_ms"), + s.get("decode_ms"), s.get("engine_sha"), s.get("measured_on"), + None if s.get("thermal_gated") is None else int(s["thermal_gated"])) + for s in r.get("speed_benchmarks", [])]) + + con.executemany("INSERT INTO meta VALUES (?,?)", [ + ("generated", datetime.now(timezone.utc).isoformat(timespec="seconds")), + ("source", "catalog/*.json"), + ("rebuild", "uv run scripts/catalog/db.py (drops and recreates; never hand-edit)")]) + con.commit() + for t in ("models", "languages", "capabilities", "downloads", "accuracy", "speed"): + print(f" {t:14s} {con.execute(f'SELECT count(*) FROM {t}').fetchone()[0]:>6}") + print(f"\n{out}") + con.close() + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/catalog/generate.py b/scripts/catalog/generate.py new file mode 100755 index 00000000..bd399442 --- /dev/null +++ b/scripts/catalog/generate.py @@ -0,0 +1,326 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# dependencies = ["pyyaml", "requests"] +# /// +"""generate.py — build catalog/.json from artifacts. + +The catalog is downstream of artifacts, always. This reads what exists and +writes a record; it never copies a number out of prose. A section with no +artifact behind it comes out empty, and the coverage report says so. + + uv run scripts/catalog/generate.py # every variant + uv run scripts/catalog/generate.py --variant whisper-large-v3-turbo + uv run scripts/catalog/generate.py --no-network # skip Hub reads + +Sources, in order of authority: + the GGUF header family, params, languages, capability surface + reports/perf/ speed rows + reports/wer/ accuracy rows (full splits only) + the Hub API published file names and exact sizes + scripts/hf_cards/ licence and repo names ONLY, until those move +""" +from __future__ import annotations + +import argparse +import glob +import json +import os +import pathlib +import re +import sys +import urllib.request + +import yaml + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +from gguf_kv import hf_token, read_local, read_remote # noqa: E402 + +REPO = pathlib.Path(__file__).resolve().parents[2] +CARDS, WER, PERF = REPO / "scripts/hf_cards", REPO / "reports/wer", REPO / "reports/perf" +OUT = REPO / "catalog" +CACHE = REPO / "build" / "catalog-cache.json" + +QUANTS = ("F32", "BF16", "F16", "Q8_0", "Q6_K", "Q5_K_M", "Q4_K_M") +# Derived runs, never publication rows: utterance subsets, streaming modes, +# rescorings, and the reference/bring-up presets. +DERIVED = re.compile(r"\.stream\d|\.r\d+$|\.filtered|notrimpad|trimflash|-timestamps_") +NOT_A_QUANT = ("REF", "CPP") + + +def norm(s: str) -> str: + return re.sub(r"[^a-z0-9]", "", s.lower()) + + +def cache() -> dict: + return json.loads(CACHE.read_text()) if CACHE.exists() else {} + + +def cache_put(d: dict) -> None: + CACHE.parent.mkdir(parents=True, exist_ok=True) + CACHE.write_text(json.dumps(d, indent=1, sort_keys=True)) + + +# ---------------------------------------------------------------- sources + +def hub_files(repo: str, c: dict, network: bool) -> dict[str, int]: + """{filename: size_bytes} for the GGUFs in a Hub repo.""" + if repo in c.get("hub", {}): + return c["hub"][repo] + if not network: + return {} + req = urllib.request.Request(f"https://huggingface.co/api/models/{repo}?blobs=true") + tok = hf_token() + if tok: + req.add_header("Authorization", f"Bearer {tok}") + try: + d = json.load(urllib.request.urlopen(req, timeout=60)) + except Exception as e: # noqa: BLE001 + print(f" [warn] Hub query failed for {repo}: {e}", file=sys.stderr) + return {} + files = {s["rfilename"]: s.get("size") or 0 for s in d.get("siblings", []) + if s["rfilename"].endswith(".gguf")} + c.setdefault("hub", {})[repo] = files + return files + + +def gguf_kv(slug: str, repo: str, files: dict, c: dict, network: bool) -> dict: + """Capability surface + identity, from a local GGUF if present else the Hub.""" + key = f"{repo}|{slug}" + if key in c.get("gguf", {}): + return c["gguf"][key] + local = sorted((REPO / "models").glob(f"*/{slug}-*.gguf"), key=lambda p: p.stat().st_size) + kv = None + if local: + try: + kv = read_local(local[0]) + except Exception as e: # noqa: BLE001 + print(f" [warn] local GGUF unreadable ({e})", file=sys.stderr) + if kv is None and network and files: + smallest = min(files, key=lambda f: files[f] or 1 << 62) + try: + kv = read_remote(repo, smallest) + except Exception as e: # noqa: BLE001 + print(f" [warn] Hub GGUF read failed ({e})", file=sys.stderr) + if kv is None: + return {} + c.setdefault("gguf", {})[key] = kv + return kv + + +def recipe_label(score_path: pathlib.Path) -> str: + """A deterministic label for the knobs run.py stamped into the hyp header. + + Read from the artifact, never asserted: a row's recipe is whatever actually + ran. The label is a canonical rendering of the stamped knobs, so two runs + with the same knobs always land on the same label. + """ + hyp = pathlib.Path(str(score_path).replace(".score.json", ".jsonl")) + knobs = {} + if hyp.exists(): + try: + with open(hyp) as f: + first = json.loads(f.readline()) + knobs = first.get("recipe") or {} + except Exception: # noqa: BLE001 + knobs = {} + ts = knobs.get("timestamps", "none") + bs = knobs.get("batch_size", 1) + if not knobs: # fall back to the filename's own tags + name = score_path.name + ts = "segment" if ".ts-segment" in name else "none" + m = re.search(r"\.b(\d+)\.", name) + bs = int(m.group(1)) if m else 1 + return f"{'ts-' + ts if ts != 'none' else 'standard'}" + (f".b{bs}" if bs != 1 else "") + + +def accuracy_rows(slug: str) -> list[dict]: + rows = [] + for p in sorted(WER.glob(f"{slug}-*.score.json")): + stem = p.name[:-len(".score.json")] + model_part, _, rest = stem.partition(".") + q = next((x for x in QUANTS + NOT_A_QUANT if model_part.endswith("-" + x)), None) + if q is None or q in NOT_A_QUANT or model_part[:-(len(q) + 1)] != slug: + continue + if DERIVED.search(rest): + continue + dataset_id = rest.split(".")[0] + if dataset_id.startswith("fleurs-"): + lang = dataset_id[len("fleurs-"):] + if not re.fullmatch(r"[a-z]{2,3}(-[a-z]{2,4})?", lang): + continue # subset ids like fleurs-ru-508 + dataset, split = "fleurs", "test" + elif dataset_id.startswith("librispeech-"): + dataset, split, lang = "librispeech", dataset_id[len("librispeech-"):], "en" + else: + continue + d = json.loads(p.read_text()) + pu = d.get("per_utterance") or [] + err = d.get("error_rate_pct", d.get("wer_pct")) + if err is None: + continue + lo = d.get("error_rate_ci_lo", d.get("wer_ci_lo")) + hi = d.get("error_rate_ci_hi", d.get("wer_ci_hi")) + rows.append({ + "dataset": dataset, "split": split, "language": lang, "quant": q, + "metric": d.get("metric", "wer"), "err_pct": err, + "ci95": [round(lo * 100, 2) if lo is not None else None, + round(hi * 100, 2) if hi is not None else None], + "n_utts": d["n"], "recipe": recipe_label(p), + "engine_sha": None, "measured_on": None, + "errors": {"sub": d["substitutions"], "del": d["deletions"], "ins": d["insertions"]}, + "empty_hyp": sum(1 for u in pu if not (u.get("hyp") or "").strip()) if pu else None, + "utts_over_50pct": sum(1 for u in pu if (u.get(d.get("metric", "wer")) or 0) > 0.5) + if pu else None, + }) + return sorted(rows, key=lambda r: (r["dataset"], r["language"], + QUANTS.index(r["quant"]))) + + +def speed_rows(variant: str) -> list[dict]: + rows = [] + for p in sorted(PERF.glob(f"*/*_{variant}_*.json")): + if "_uncooled_backup" in str(p): + continue + d = json.loads(p.read_text()) + machine = d.get("machine", {}).get("slug") + for r in d.get("runs", []): + s = r.get("summary") or {} + if "total_ms" not in s or "quant" not in r or "sample" not in r: + continue # bench reports predating the per-run quant/sample fields + rows.append({ + "machine": machine, "backend": d["backend"], "quant": r["quant"].upper(), + "sample": r["sample"], "sample_duration_s": round(r["sample_duration_s"], 3), + "total_ms": round(s["total_ms"]["mean"], 1), + "xrt_compute": r.get("rtf_compute_mean"), + "load_ms": round(r["load_ms"], 1), + "mel_ms": round(s["mel_ms"]["mean"], 1), + "encode_ms": round(s["encode_ms"]["mean"], 1), + "decode_ms": round(s["decode_ms"]["mean"], 1), + "engine_sha": d.get("git_sha"), "measured_on": d["timestamp"][:10], + "thermal_gated": None, + }) + # One row per cell: a later bench of the same cell supersedes an earlier one. + best: dict[tuple, dict] = {} + for r in rows: + best[(r["machine"], r["backend"], r["quant"], r["sample"])] = r + return sorted(best.values(), key=lambda r: (r["machine"], r["backend"], + QUANTS.index(r["quant"]), + r["sample_duration_s"])) + + +def capabilities(kv: dict, card: dict) -> dict: + """Derived from the GGUF's own capability surface; the card is not consulted. + + An absent KV means the loader's default, which is false -- the "information + gap, not a claim" rule. verified is left false for every row: only a Stage 4 + Capability Validation observation may set it. + """ + def cap(flag: bool, **extra) -> dict: + return {"supported": True, **extra, "verified": False} if flag else {"supported": False} + + ts_kinds = [] + if kv.get("stt.capability.word_timestamps"): + ts_kinds.append("word") + if kv.get("stt.capability.timestamps"): + ts_kinds.append("segment") + out = { + "transcribe": {"supported": True, "verified": False}, + "translate": cap(bool(kv.get("stt.capability.translate")), + targets=kv.get("stt.translation.target_languages"), + pairs=kv.get("stt.translation.pairs")), + "lang_detect": cap(bool(kv.get("stt.capability.lang_detect"))), + "timestamps": cap(bool(ts_kinds), granularities=ts_kinds or None), + "streaming": cap(bool(kv.get("stt.capability.streaming"))), + "diarize": cap(bool(kv.get("stt.capability.speaker_diarization")), + max_speakers=kv.get("stt.sortformer.max_speakers")), + "batching": {"supported": True, "verified": False}, + } + for k, v in out.items(): # drop null payload keys + out[k] = {kk: vv for kk, vv in v.items() if vv is not None} + return out + + +# ---------------------------------------------------------------- assembly + +def build(stem: str, c: dict, network: bool) -> tuple[dict, dict]: + card = yaml.safe_load((CARDS / f"{stem}.yaml").read_text()) or {} + quants = card.get("quants") or [] + slug = quants[0]["filename"].rsplit("-", 1)[0] if quants else stem + repo = card.get("target_repo") or "" + files = hub_files(repo, c, network) if repo else {} + kv = gguf_kv(slug, repo, files, c, network) + + downloads = [] + for fn, size in files.items(): + q = next((x for x in QUANTS if fn.endswith(f"-{x}.gguf")), None) + if q: + downloads.append({"quant": q, "filename": fn.rsplit("/", 1)[-1], "size_bytes": size}) + downloads.sort(key=lambda d: QUANTS.index(d["quant"])) + + rec = {"schema": "transcribe-catalog-v1", "variant": stem, + "family": kv.get("general.architecture") or card.get("family"), + "display_name": card.get("display_name") or stem, + "params": kv.get("_params"), + "license": {"spdx": card.get("license"), "display": card.get("license_display")}, + "upstream_repo": card.get("hf_repo"), "published_repo": repo, + "languages": kv.get("general.languages") or [str(x) for x in (card.get("languages") or [])], + "language_tag_form": None, + "long_form_strategy": None, + "capabilities": capabilities(kv, card), + "downloads": downloads, + "accuracy_benchmarks": accuracy_rows(slug), + "speed_benchmarks": speed_rows(stem)} + rec = {k: v for k, v in rec.items() if v is not None} + + stamped = any(k.startswith("stt.capability.") for k in kv) + cov = {"variant": stem, "gguf": bool(kv), "caps": stamped, "downloads": len(downloads), + "accuracy": len(rec["accuracy_benchmarks"]), "speed": len(rec["speed_benchmarks"])} + return rec, cov + + +def main() -> int: + ap = argparse.ArgumentParser() + ap.add_argument("--variant", default="", help="one hf_card stem (default: all)") + ap.add_argument("--no-network", action="store_true") + ap.add_argument("--out", default=str(OUT)) + args = ap.parse_args() + + stems = ([args.variant] if args.variant + else sorted(p.stem for p in CARDS.glob("*.yaml"))) + out_dir = pathlib.Path(args.out) + out_dir.mkdir(parents=True, exist_ok=True) + c, rows = cache(), [] + for stem in stems: + try: + rec, cov = build(stem, c, not args.no_network) + except Exception as e: # noqa: BLE001 + print(f" [FAIL] {stem}: {type(e).__name__}: {e}", file=sys.stderr) + continue + (out_dir / f"{stem}.json").write_text(json.dumps(rec, indent=2, ensure_ascii=False) + "\n") + rows.append(cov) + cache_put(c) + + print(f"\n{'variant':42s} {'gguf':>5} {'caps':>5} {'files':>6} {'acc':>5} {'speed':>6}") + for r in rows: + print(f"{r['variant']:42s} {'yes' if r['gguf'] else 'NO':>5} " + f"{'yes' if r['caps'] else 'NO':>5} {r['downloads']:>6} " + f"{r['accuracy']:>5} {r['speed']:>6}") + blind = [r["variant"] for r in rows if r["gguf"] and not r["caps"]] + if blind: + print(f"\n!! {len(blind)} variant(s) whose GGUF carries NO stt.capability.* key, so every " + f"capability below transcribe reads as unsupported. Their converter never stamped " + f"them and the family load() hardcodes the answer instead -- these must come from " + f"transcribe_model_get_capabilities(), not the header:") + for b in blind: + print(f" {b}") + n = len(rows) + print(f"\n{n} record(s). identity from GGUF: {sum(1 for r in rows if r['gguf'])}/{n}; " + f"with accuracy rows: {sum(1 for r in rows if r['accuracy'])}/{n}; " + f"with speed rows: {sum(1 for r in rows if r['speed'])}/{n}") + print(f"wrote {out_dir}/") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/catalog/gguf_kv.py b/scripts/catalog/gguf_kv.py new file mode 100755 index 00000000..42a32de7 --- /dev/null +++ b/scripts/catalog/gguf_kv.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python3 +"""Read selected GGUF metadata without downloading the weights. + +The header -- magic, counts, the KV block, then one info record per tensor -- +is the first few MB of the file, so a local read touches only that prefix and a +remote read is a couple of HTTP range requests rather than a multi-GB download. + +Returns the keys the catalog needs: architecture and parameter count for +identity, and the capability surface the loader itself dispatches on +(stt.capability.*, general.languages, stt.translation.*). +""" +from __future__ import annotations + +import math +import os +import pathlib +import struct + +(UINT8, INT8, UINT16, INT16, UINT32, INT32, FLOAT32, BOOL, STRING, ARRAY, + UINT64, INT64, FLOAT64) = range(13) +FIXED = {UINT8: 1, INT8: 1, UINT16: 2, INT16: 2, UINT32: 4, INT32: 4, + FLOAT32: 4, BOOL: 1, UINT64: 8, INT64: 8, FLOAT64: 8} + +WANTED = { + "general.architecture", "general.basename", "general.size_label", + "general.languages", "stt.variant", + "stt.capability.translate", "stt.capability.lang_detect", + "stt.capability.streaming", "stt.capability.speaker_diarization", + "stt.capability.timestamps", "stt.capability.word_timestamps", + "stt.translation.target_languages", "stt.translation.pairs", + "stt.sortformer.max_speakers", + "stt.parakeet.encoder.att_chunk_left_choices", + "stt.parakeet.encoder.att_chunk_chunk_choices", + "stt.parakeet.encoder.att_chunk_right_choices", +} + + +class Window: + def __init__(self, fetch, initial: int = 1 << 20): + self._fetch, self._buf, self.pos = fetch, fetch(0, initial), 0 + + def _need(self, end: int) -> None: + while end > len(self._buf): + chunk = self._fetch(len(self._buf), max(len(self._buf), end - len(self._buf))) + if not chunk: + raise EOFError(f"ran past the end of the object at {end}") + self._buf += chunk + + def take(self, n: int) -> bytes: + self._need(self.pos + n) + out = self._buf[self.pos:self.pos + n] + self.pos += n + return out + + def u32(self): return struct.unpack(" None: + if vtype in FIXED: + self.take(FIXED[vtype]) + elif vtype == STRING: + self.take(self.u64()) + elif vtype == ARRAY: + elem, n = self.u32(), self.u64() + if elem in FIXED: + self.take(FIXED[elem] * n) + else: + for _ in range(n): + self.skip_value(elem) + else: + raise ValueError(f"unknown GGUF value type {vtype}") + + +def _parse(win: Window) -> dict: + if win.take(4) != b"GGUF": + raise ValueError("not a GGUF file") + win.u32() # version + n_tensors, n_kv = win.u64(), win.u64() + kv: dict = {} + for _ in range(n_kv): + key = win.string() + vtype = win.u32() + if key in WANTED: + kv[key] = win.value(vtype) + else: + win.skip_value(vtype) + params = 0 + for _ in range(n_tensors): + win.string() + dims = [win.u64() for _ in range(win.u32())] + win.u32() + win.u64() + params += math.prod(dims) + kv["_params"] = params + kv["_n_tensors"] = n_tensors + return kv + + +def read_local(path: pathlib.Path) -> dict: + with open(path, "rb") as f: + def fetch(offset: int, length: int) -> bytes: + f.seek(offset) + return f.read(length) + return _parse(Window(fetch)) + + +def hf_token() -> str | None: + tok = os.environ.get("HF_TOKEN") + if tok: + return tok + p = pathlib.Path("~/.cache/huggingface/token").expanduser() + return p.read_text().strip() if p.exists() else None + + +def read_remote(repo: str, filename: str, revision: str = "main") -> dict: + import requests + url = f"https://huggingface.co/{repo}/resolve/{revision}/{filename}" + headers = {} + tok = hf_token() + if tok: + headers["Authorization"] = f"Bearer {tok}" + session = requests.Session() + + def fetch(offset: int, length: int) -> bytes: + r = session.get(url, headers=dict(headers, Range=f"bytes={offset}-{offset + length - 1}"), + timeout=60) + if r.status_code not in (200, 206): + raise RuntimeError(f"{repo}/{filename}: HTTP {r.status_code}") + return r.content + + return _parse(Window(fetch)) From 114abf10ef15214f6887feb70542267496f11ed4 Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sat, 12 Sep 2026 03:29:55 -0700 Subject: [PATCH 03/24] add a bunch of catalog files --- README.md | 2 +- catalog/README.md | 43 -- catalog/_format.py | 18 +- catalog/_schema.json | 32 +- catalog/breeze-asr-25.json | 78 +++ catalog/canary-180m-flash.json | 64 +++ catalog/canary-1b-flash.json | 68 +++ catalog/canary-1b-v2.json | 130 +++++ catalog/canary-1b.json | 68 +++ catalog/canary-qwen-2.5b.json | 61 ++ catalog/cohere-transcribe-03-2026.json | 88 +++ catalog/cohere-transcribe-arabic-07-2026.json | 61 ++ .../diar_streaming_sortformer_4spk-v2.1.json | 45 ++ catalog/fun-asr-mlt-nano-2512.json | 118 ++++ catalog/fun-asr-nano-2512.json | 63 +++ catalog/gigaam-v3-ctc.json | 52 ++ catalog/gigaam-v3-e2e-ctc.json | 52 ++ catalog/gigaam-v3-e2e-rnnt.json | 52 ++ catalog/gigaam-v3-rnnt.json | 52 ++ catalog/granite-4.0-1b-speech.json | 73 +++ catalog/granite-speech-4.1-2b-nar.json | 73 +++ catalog/granite-speech-4.1-2b-plus.json | 71 +++ catalog/granite-speech-4.1-2b.json | 73 +++ catalog/medasr.json | 65 +++ catalog/moonshine-base-ar.json | 46 ++ catalog/moonshine-base-ja.json | 46 ++ catalog/moonshine-base-ko.json | 46 ++ catalog/moonshine-base-uk.json | 46 ++ catalog/moonshine-base-vi.json | 46 ++ catalog/moonshine-base-zh.json | 46 ++ catalog/moonshine-base.json | 46 ++ catalog/moonshine-streaming-medium.json | 46 ++ catalog/moonshine-streaming-small.json | 46 ++ catalog/moonshine-streaming-tiny.json | 46 ++ catalog/moonshine-tiny-ar.json | 46 ++ catalog/moonshine-tiny-ja.json | 46 ++ catalog/moonshine-tiny-ko.json | 46 ++ catalog/moonshine-tiny-uk.json | 46 ++ catalog/moonshine-tiny-vi.json | 46 ++ catalog/moonshine-tiny-zh.json | 46 ++ catalog/moonshine-tiny.json | 46 ++ catalog/moss-transcribe-diarize.json | 64 +++ ...ultitalker-parakeet-streaming-0.6b-v1.json | 61 ++ catalog/nemotron-3.5-asr-streaming-0.6b.json | 115 ++++ .../nemotron-speech-streaming-en-0.6b.json | 74 +++ catalog/parakeet-ctc-0.6b.json | 64 +++ catalog/parakeet-ctc-1.1b.json | 63 +++ catalog/parakeet-primeline.json | 88 +++ catalog/parakeet-rnnt-0.6b.json | 69 +++ catalog/parakeet-rnnt-1.1b.json | 67 +++ catalog/parakeet-tdt-0.6b-v2.json | 68 +++ catalog/parakeet-tdt-0.6b-v3.json | 121 ++++ catalog/parakeet-tdt-1.1b.json | 67 +++ catalog/parakeet-tdt_ctc-1.1b.json | 69 +++ catalog/parakeet-tdt_ctc-110m.json | 66 +++ catalog/parakeet-unified-en-0.6b.json | 56 +- catalog/qwen3-asr-0.6b.json | 96 ++++ catalog/qwen3-asr-1.7b.json | 140 +++++ catalog/sensevoice-small.json | 65 +++ catalog/voxtral-mini-3b-2507.json | 75 +++ catalog/voxtral-mini-4b-realtime-2602.json | 103 ++++ catalog/voxtral-small-24b-2507.json | 63 +++ catalog/whisper-base.en.json | 67 +++ catalog/whisper-base.json | 158 ++++++ catalog/whisper-large-v2.json | 167 ++++++ catalog/whisper-large-v3-turbo.json | 253 +++++++-- catalog/whisper-large-v3.json | 253 +++++++++ catalog/whisper-large.json | 168 ++++++ catalog/whisper-medium.en.json | 68 +++ catalog/whisper-medium.json | 157 +++++ catalog/whisper-small.en.json | 69 +++ catalog/whisper-small.json | 158 ++++++ catalog/whisper-tiny.en.json | 70 +++ catalog/whisper-tiny.json | 162 ++++++ .../cohere-transcribe-arabic-07-2026.md | 184 ++++++ docs/models/cohere.md | 77 +++ docs/models/moonshine.md | 21 + docs/porting/families/cohere.md | 13 +- .../intake.json | 169 ++++++ scripts/catalog/check.py | 50 +- scripts/catalog/db.py | 354 +++++++++--- scripts/catalog/generate.py | 326 ----------- scripts/catalog/gguf_kv.py | 151 ----- scripts/convert-cohere.py | 24 +- scripts/convert-funasr_nano.py | 5 +- scripts/convert-gigaam.py | 5 +- scripts/convert-parakeet.py | 4 +- scripts/hf_cards/backfill_identity.py | 161 ------ .../cohere-transcribe-arabic-07-2026.yaml | 99 ++++ scripts/wer/build_db.py | 517 ----------------- scripts/wer/by_language.py | 156 ----- scripts/wer/gguf_header.py | 154 ----- scripts/wer/languages.py | 162 ------ scripts/wer/perf_lookup.py | 92 --- scripts/wer/quant_delta.py | 189 ------- scripts/wer/recommend.py | 102 ---- scripts/wer/remote/fleurs_full_matrix.py | 534 ------------------ scripts/wer/remote/fleurs_matrix.py | 347 ------------ .../wer/run_reference_cohere_transformers.py | 238 ++++++++ scripts/wer/score_matrix.py | 184 ------ 100 files changed, 6666 insertions(+), 3340 deletions(-) delete mode 100644 catalog/README.md create mode 100644 catalog/breeze-asr-25.json create mode 100644 catalog/canary-180m-flash.json create mode 100644 catalog/canary-1b-flash.json create mode 100644 catalog/canary-1b-v2.json create mode 100644 catalog/canary-1b.json create mode 100644 catalog/canary-qwen-2.5b.json create mode 100644 catalog/cohere-transcribe-03-2026.json create mode 100644 catalog/cohere-transcribe-arabic-07-2026.json create mode 100644 catalog/diar_streaming_sortformer_4spk-v2.1.json create mode 100644 catalog/fun-asr-mlt-nano-2512.json create mode 100644 catalog/fun-asr-nano-2512.json create mode 100644 catalog/gigaam-v3-ctc.json create mode 100644 catalog/gigaam-v3-e2e-ctc.json create mode 100644 catalog/gigaam-v3-e2e-rnnt.json create mode 100644 catalog/gigaam-v3-rnnt.json create mode 100644 catalog/granite-4.0-1b-speech.json create mode 100644 catalog/granite-speech-4.1-2b-nar.json create mode 100644 catalog/granite-speech-4.1-2b-plus.json create mode 100644 catalog/granite-speech-4.1-2b.json create mode 100644 catalog/medasr.json create mode 100644 catalog/moonshine-base-ar.json create mode 100644 catalog/moonshine-base-ja.json create mode 100644 catalog/moonshine-base-ko.json create mode 100644 catalog/moonshine-base-uk.json create mode 100644 catalog/moonshine-base-vi.json create mode 100644 catalog/moonshine-base-zh.json create mode 100644 catalog/moonshine-base.json create mode 100644 catalog/moonshine-streaming-medium.json create mode 100644 catalog/moonshine-streaming-small.json create mode 100644 catalog/moonshine-streaming-tiny.json create mode 100644 catalog/moonshine-tiny-ar.json create mode 100644 catalog/moonshine-tiny-ja.json create mode 100644 catalog/moonshine-tiny-ko.json create mode 100644 catalog/moonshine-tiny-uk.json create mode 100644 catalog/moonshine-tiny-vi.json create mode 100644 catalog/moonshine-tiny-zh.json create mode 100644 catalog/moonshine-tiny.json create mode 100644 catalog/moss-transcribe-diarize.json create mode 100644 catalog/multitalker-parakeet-streaming-0.6b-v1.json create mode 100644 catalog/nemotron-3.5-asr-streaming-0.6b.json create mode 100644 catalog/nemotron-speech-streaming-en-0.6b.json create mode 100644 catalog/parakeet-ctc-0.6b.json create mode 100644 catalog/parakeet-ctc-1.1b.json create mode 100644 catalog/parakeet-primeline.json create mode 100644 catalog/parakeet-rnnt-0.6b.json create mode 100644 catalog/parakeet-rnnt-1.1b.json create mode 100644 catalog/parakeet-tdt-0.6b-v2.json create mode 100644 catalog/parakeet-tdt-0.6b-v3.json create mode 100644 catalog/parakeet-tdt-1.1b.json create mode 100644 catalog/parakeet-tdt_ctc-1.1b.json create mode 100644 catalog/parakeet-tdt_ctc-110m.json create mode 100644 catalog/qwen3-asr-0.6b.json create mode 100644 catalog/qwen3-asr-1.7b.json create mode 100644 catalog/sensevoice-small.json create mode 100644 catalog/voxtral-mini-3b-2507.json create mode 100644 catalog/voxtral-mini-4b-realtime-2602.json create mode 100644 catalog/voxtral-small-24b-2507.json create mode 100644 catalog/whisper-base.en.json create mode 100644 catalog/whisper-base.json create mode 100644 catalog/whisper-large-v2.json create mode 100644 catalog/whisper-large-v3.json create mode 100644 catalog/whisper-large.json create mode 100644 catalog/whisper-medium.en.json create mode 100644 catalog/whisper-medium.json create mode 100644 catalog/whisper-small.en.json create mode 100644 catalog/whisper-small.json create mode 100644 catalog/whisper-tiny.en.json create mode 100644 catalog/whisper-tiny.json create mode 100644 docs/models/cohere-transcribe-arabic-07-2026.md create mode 100644 docs/models/cohere.md create mode 100644 reports/porting/cohere/cohere-transcribe-arabic-07-2026/intake.json delete mode 100755 scripts/catalog/generate.py delete mode 100755 scripts/catalog/gguf_kv.py delete mode 100644 scripts/hf_cards/backfill_identity.py create mode 100644 scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml delete mode 100644 scripts/wer/build_db.py delete mode 100644 scripts/wer/by_language.py delete mode 100644 scripts/wer/gguf_header.py delete mode 100644 scripts/wer/languages.py delete mode 100644 scripts/wer/perf_lookup.py delete mode 100644 scripts/wer/quant_delta.py delete mode 100644 scripts/wer/recommend.py delete mode 100644 scripts/wer/remote/fleurs_full_matrix.py delete mode 100644 scripts/wer/remote/fleurs_matrix.py create mode 100644 scripts/wer/run_reference_cohere_transformers.py delete mode 100644 scripts/wer/score_matrix.py diff --git a/README.md b/README.md index 8cb42c29..7085f450 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ C/C++ speech-to-text inference library. Runs diverse STT model families via [GGU | Moonshine | `moonshine-tiny`, `moonshine-base` | [docs/models/moonshine.md](docs/models/moonshine.md) | | Moonshine Streaming | `moonshine-streaming-{tiny,small,medium}` | [docs/models/moonshine-streaming.md](docs/models/moonshine-streaming.md) | | Qwen3-ASR | `qwen3-asr-0.6b`, `qwen3-asr-1.7b` | [docs/models/qwen3-asr.md](docs/models/qwen3-asr.md) | -| Cohere Transcribe | `cohere-transcribe-03-2026` | [docs/models/cohere-transcribe-03-2026.md](docs/models/cohere-transcribe-03-2026.md) | +| Cohere Transcribe | `cohere-transcribe-03-2026` (14 languages), `cohere-transcribe-arabic-07-2026` (Arabic dialects + code-switching) | [docs/models/cohere.md](docs/models/cohere.md) | | SenseVoice | `sensevoice-small` | [docs/models/sensevoice-small.md](docs/models/sensevoice-small.md) | | FunASR Nano | `fun-asr-nano-2512`, `fun-asr-mlt-nano-2512` | [docs/models/fun-asr-nano.md](docs/models/fun-asr-nano.md) | | Nemotron Speech Streaming | `nemotron-speech-streaming-en-0.6b` | [docs/models/nemotron-speech-streaming-en-0.6b.md](docs/models/nemotron-speech-streaming-en-0.6b.md) | diff --git a/catalog/README.md b/catalog/README.md deleted file mode 100644 index 945cf76b..00000000 --- a/catalog/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# `catalog/` - -One file per shipped variant: `catalog/.json`. Everything we publish -about a model — what it is, what it supports, what it measured — and nothing -else. - -``` -catalog/ - _schema.json the contract; every field has a description - _format.py the formatter (four rules, no judgement calls) - .json one record per shipped variant -``` - -## What belongs in a record - -A key earns its place only if it is **published to a user**, **read by a gate**, -or **provenance for one of those**. - -- **Bring-up detail stays out.** Dtype distributions, tokenizer summaries, - forward maps, tolerance rationale, upstream's own benchmark claims, and what - upstream *advertises* a model can do all live in `intake.json` and the family - doc. A number published here is one we measured; a capability published here - is one this port implements. -- **No editorial judgement.** Which quant or preset someone *should* pick is a - recommendation, and recommendations are made elsewhere. -- **No permanently-null fields.** A field nothing populates is removed until - something populates it. A field that is null because the harness does not - stamp it yet — `engine_sha` on accuracy rows — stays, because that is a - tracked gap rather than a dead column. -- **Full splits only.** A benchmark row is a complete, named, reproducible - split. Subset runs are bring-up evidence; they can back a capability's - `verified` flag but never publish a number here. -- **Every capability is listed**, supported or not, so the whole surface is - visible at a glance and every model renders the same table rows. - -Records are machine-assembled from artifacts, never hand-typed. The porting -skills own which stage writes what. - -## Formatting - -```bash -uv run catalog/_format.py catalog/*.json -``` diff --git a/catalog/_format.py b/catalog/_format.py index 2c0babd0..cb14237c 100644 --- a/catalog/_format.py +++ b/catalog/_format.py @@ -15,6 +15,7 @@ _schema.json, where the same words are subschema keys. uv run catalog/_format.py catalog/*.json + uv run catalog/_format.py --check catalog/*.json """ import json, pathlib, sys @@ -72,6 +73,17 @@ def fmt(o, ind=0, *, row=False, row_object=False, top=False): return compact(o) -for p in map(pathlib.Path, sys.argv[1:]): - p.write_text(fmt(json.loads(p.read_text()), top=True) + "\n") - print(f"{p} {len(p.read_text().splitlines()):>4} lines") +check = "--check" in sys.argv[1:] +paths = [pathlib.Path(arg) for arg in sys.argv[1:] if arg != "--check"] +bad = 0 +for p in paths: + current = p.read_text() + rendered = fmt(json.loads(current), top=True) + "\n" + if check: + if current != rendered: + bad += 1 + print(f"needs formatting: {p}", file=sys.stderr) + else: + p.write_text(rendered) + print(f"{p} {len(rendered.splitlines()):>4} lines") +sys.exit(1 if bad else 0) diff --git a/catalog/_schema.json b/catalog/_schema.json index 12bfd581..6719a359 100644 --- a/catalog/_schema.json +++ b/catalog/_schema.json @@ -6,8 +6,9 @@ "type": "object", "required": [ "schema", "variant", "family", "display_name", "params", "license", - "upstream_repo", "published_repo", "languages", "long_form_strategy", - "capabilities", "downloads", "accuracy_benchmarks", "speed_benchmarks" + "upstream_repo", "upstream_commit", "published_repo", "languages", + "long_form_strategy", "capabilities", "downloads", "accuracy_benchmarks", + "speed_benchmarks" ], "properties": { "schema": { @@ -47,7 +48,11 @@ }, "upstream_repo": { "type": "string", - "description": "The upstream model this port derives from. Which upstream commit was converted is a bring-up fact and lives in intake.json." + "description": "The upstream model this port derives from." + }, + "upstream_commit": { + "type": "string", + "description": "The upstream revision used to produce the published GGUFs." }, "published_repo": { "type": ["string","null"], @@ -172,7 +177,7 @@ }, "diarize": { "$ref": "#/$defs/capability", - "description": "Speaker-attributed output. Note the scoring consequence: a diarizing model emits turn markup plain references do not contain, so its transcription accuracy must be scored under a dediarizing recipe.", + "description": "Speaker-attributed output. A diarizing model emits turn markup plain references do not contain, so transcription scoring must remove that markup.", "properties": { "max_speakers": { "type": ["integer","null"] @@ -234,12 +239,12 @@ }, "accuracy_benchmarks": { "type": "array", - "description": "One row per measured cell. Full dataset splits only -- a subset run is a bring-up artifact, not a published benchmark. Identity first, result second, provenance last, so the left of every row reads 'what ran and what did it score'. The artifact a row came from is reconstructible from the row itself, so no path is stored.", + "description": "One row per measured cell. Full dataset splits only -- a subset run is a bring-up artifact, not a published benchmark. Identity first and result second, so every row reads 'what ran and what did it score'.", "items": { "type": "object", "required": [ "dataset", "split", "language", "quant", "metric", "err_pct", - "ci95", "n_utts", "recipe", "engine_sha" + "ci95", "n_utts", "batch_size", "timestamps", "engine_sha" ], "properties": { "dataset": { @@ -279,9 +284,14 @@ "type": "integer", "minimum": 1 }, - "recipe": { - "type": "string", - "description": "Key in catalog/_recipes.json. Rows under different recipes are not comparable." + "batch_size": { + "type": ["integer","null"], + "minimum": 1, + "description": "Decode batch size. null when the surviving publication does not record it." + }, + "timestamps": { + "enum": ["none","segment","word","token",null], + "description": "Timestamp mode used while decoding. null when the surviving publication does not record it." }, "engine_sha": { "type": ["string","null"], @@ -347,8 +357,8 @@ "description": "Carried per cell so nothing downstream assumes a fixed sample set or has to look the duration up." }, "total_ms": { - "type": "number", - "description": "mel + encode + decode, mean over iters after warmup." + "type": ["number","null"], + "description": "mel + encode + decode, mean over iters after warmup. null for legacy rows where only rounded xRT survives." }, "xrt_compute": { "type": "number", diff --git a/catalog/breeze-asr-25.json b/catalog/breeze-asr-25.json new file mode 100644 index 00000000..5e295521 --- /dev/null +++ b/catalog/breeze-asr-25.json @@ -0,0 +1,78 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "breeze-asr-25", + "family": "whisper", + "display_name": "breeze-asr-25", + "params": 1543321440, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "MediaTek-Research/Breeze-ASR-25", + "upstream_commit": "cffe7ccb404d025296a00758d0a33468bec3a9d0", + "published_repo": "handy-computer/Breeze-ASR-25-gguf", + "languages": [ + "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", + "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", + "fo", "fr", "gl", "gu", "haw", "ha", "he", "hi", "hr", "ht", "hu", "hy", + "id", "is", "it", "ja", "jw", "ka", "kk", "km", "kn", "ko", "la", "lb", + "ln", "lo", "lt", "lv", "mg", "mi", "mk", "ml", "mn", "mr", "ms", "mt", + "my", "ne", "nl", "nn", "no", "oc", "pa", "pl", "ps", "pt", "ro", "ru", + "sa", "sd", "si", "sk", "sl", "sn", "so", "sq", "sr", "su", "sv", "sw", + "ta", "te", "tg", "th", "tk", "tl", "tr", "tt", "uk", "ur", "uz", "vi", + "yi", "yo", "zh" + ], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":true,"targets":["en"],"verified":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"Breeze-ASR-25-BF16.gguf","size_bytes":3096013408}, + {"quant":"F16","filename":"Breeze-ASR-25-F16.gguf","size_bytes":3106458208}, + {"quant":"Q8_0","filename":"Breeze-ASR-25-Q8_0.gguf","size_bytes":1667964224}, + {"quant":"Q6_K","filename":"Breeze-ASR-25-Q6_K.gguf","size_bytes":1296353280}, + {"quant":"Q5_K_M","filename":"Breeze-ASR-25-Q5_K_M.gguf","size_bytes":1160366080}, + {"quant":"Q4_K_M","filename":"Breeze-ASR-25-Q4_K_M.gguf","size_bytes":996526080} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.14,"ci95":[3.7,4.61],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":416,"del":96,"ins":90},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.16,"ci95":[3.72,4.6],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":420,"del":96,"ins":89},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.1,"ci95":[7.28,8.94],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1239,"del":1415,"ins":233},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":8.07,"ci95":[7.26,8.9],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1237,"del":1410,"ins":231},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.29,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.29,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.27,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.29,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.25,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.26,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"BF16","metric":"cer","err_pct":8.12,"ci95":[null,null],"n_utts":945,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"F16","metric":"cer","err_pct":8.11,"ci95":[null,null],"n_utts":945,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q6_K","metric":"cer","err_pct":8.12,"ci95":[null,null],"n_utts":945,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":8.12,"ci95":[null,null],"n_utts":945,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q4_K_M","metric":"cer","err_pct":8.08,"ci95":[null,null],"n_utts":945,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/canary-180m-flash.json b/catalog/canary-180m-flash.json new file mode 100644 index 00000000..7b8883eb --- /dev/null +++ b/catalog/canary-180m-flash.json @@ -0,0 +1,64 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "canary-180m-flash", + "family": "canary", + "display_name": "canary-180m-flash", + "params": 189083776, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/canary-180m-flash", + "upstream_commit": "b12ab41", + "published_repo": "handy-computer/canary-180m-flash-gguf", + "languages": ["en","de","es","fr"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":true,"targets":["en","de","es","fr"],"pairs":["en>de","de>en","en>es","es>en","en>fr","fr>en"],"verified":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"canary-180m-flash-F32.gguf","size_bytes":756498112}, + {"quant":"F16","filename":"canary-180m-flash-F16.gguf","size_bytes":381632192}, + {"quant":"Q8_0","filename":"canary-180m-flash-Q8_0.gguf","size_bytes":218447552}, + {"quant":"Q6_K","filename":"canary-180m-flash-Q6_K.gguf","size_bytes":176291520}, + {"quant":"Q5_K_M","filename":"canary-180m-flash-Q5_K_M.gguf","size_bytes":158704320}, + {"quant":"Q4_K_M","filename":"canary-180m-flash-Q4_K_M.gguf","size_bytes":139223744} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":7.33,"ci95":[6.67,8.0],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":977,"del":182,"ins":212},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.98,"ci95":[5.26,6.78],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":227,"ins":95},"empty_hyp":4,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.54,"ci95":[5.92,7.18],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":959,"del":154,"ins":412},"empty_hyp":1,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":8.53,"ci95":[7.78,9.34],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1049,"del":205,"ins":281},"empty_hyp":1,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.94,"ci95":[1.78,2.11],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":135,"ins":129},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.94,"ci95":[1.78,2.11],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":135,"ins":129},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.93,"ci95":[1.77,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":761,"del":138,"ins":126},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.93,"ci95":[1.77,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":138,"ins":123},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.9,"ci95":[1.74,2.07],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":750,"del":137,"ins":122},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.93,"ci95":[1.76,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":139,"ins":115},"empty_hyp":0,"utts_over_50pct":4} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":161.6,"xrt_compute":68.073,"load_ms":145.4,"mel_ms":1.7,"encode_ms":74.0,"decode_ms":85.9,"engine_sha":"8c583b2","measured_on":"2026-05-08","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":73.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":88.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":67.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":80.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":138.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":161.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":127.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":152.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":21.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":18.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":24.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":37.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":34.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/canary-1b-flash.json b/catalog/canary-1b-flash.json new file mode 100644 index 00000000..49b9b5f8 --- /dev/null +++ b/catalog/canary-1b-flash.json @@ -0,0 +1,68 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "canary-1b-flash", + "family": "canary", + "display_name": "canary-1b-flash", + "params": 890042496, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/canary-1b-flash", + "upstream_commit": "a9a55e0", + "published_repo": "handy-computer/canary-1b-flash-gguf", + "languages": ["en","de","es","fr"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":true,"targets":["en","de","es","fr"],"pairs":["en>de","de>en","en>es","es>en","en>fr","fr>en"],"verified":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"canary-1b-flash-F32.gguf","size_bytes":3560372000}, + {"quant":"F16","filename":"canary-1b-flash-F16.gguf","size_bytes":1785657120}, + {"quant":"Q8_0","filename":"canary-1b-flash-Q8_0.gguf","size_bytes":1048131360}, + {"quant":"Q6_K","filename":"canary-1b-flash-Q6_K.gguf","size_bytes":857603872}, + {"quant":"Q5_K_M","filename":"canary-1b-flash-Q5_K_M.gguf","size_bytes":769563424}, + {"quant":"Q4_K_M","filename":"canary-1b-flash-Q4_K_M.gguf","size_bytes":677141280} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.13,"ci95":[5.5,6.77],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":824,"del":162,"ins":162},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":6.11,"ci95":[5.5,6.71],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":830,"del":156,"ins":158},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.75,"ci95":[4.14,5.51],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":408,"del":225,"ins":59},"empty_hyp":4,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.17,"ci95":[4.45,6.07],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":422,"del":262,"ins":69},"empty_hyp":6,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.73,"ci95":[5.99,7.54],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":911,"del":242,"ins":417},"empty_hyp":6,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":6.8,"ci95":[6.07,7.6],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":924,"del":226,"ins":435},"empty_hyp":5,"utts_over_50pct":11}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":7.22,"ci95":[6.47,8.05],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":854,"del":150,"ins":295},"empty_hyp":1,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":7.4,"ci95":[6.65,8.22],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":878,"del":152,"ins":302},"empty_hyp":1,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.62,"ci95":[1.41,1.86],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":569,"del":196,"ins":96},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.62,"ci95":[1.41,1.86],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":569,"del":196,"ins":96},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.62,"ci95":[1.41,1.86],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":568,"del":196,"ins":96},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.65,"ci95":[1.42,1.9],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":562,"del":214,"ins":97},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.64,"ci95":[1.43,1.87],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":581,"del":189,"ins":99},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.59,"ci95":[1.41,1.8],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":586,"del":160,"ins":98},"empty_hyp":0,"utts_over_50pct":3} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":252.6,"xrt_compute":43.553,"load_ms":513.8,"mel_ms":0.9,"encode_ms":174.8,"decode_ms":76.9,"engine_sha":"8c583b2","measured_on":"2026-05-08","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":25.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":101.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":98.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":95.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":103.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":14.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/canary-1b-v2.json b/catalog/canary-1b-v2.json new file mode 100644 index 00000000..45d1e07e --- /dev/null +++ b/catalog/canary-1b-v2.json @@ -0,0 +1,130 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "canary-1b-v2", + "family": "canary", + "display_name": "canary-1b-v2", + "params": 980046848, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/canary-1b-v2", + "upstream_commit": "87bc526", + "published_repo": "handy-computer/canary-1b-v2-gguf", + "languages": [ + "bg", "hr", "cs", "da", "nl", "en", "et", "fi", "fr", "de", "el", "hu", + "it", "lv", "lt", "mt", "pl", "pt", "ro", "sk", "sl", "es", "sv", "ru", + "uk" + ], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":true,"targets":["bg","hr","cs","da","nl","en","et","fi","fr","de","el","hu","it","lt","mt","pl","pt","ro","sk","sl","es","sv","ru","uk"],"pairs":["en>bg","bg>en","en>hr","hr>en","en>cs","cs>en","en>da","da>en","en>nl","nl>en","en>et","et>en","en>fi","fi>en","en>fr","fr>en","en>de","de>en","en>el","el>en","en>hu","hu>en","en>it","it>en","en>lt","lt>en","en>mt","mt>en","en>pl","pl>en","en>pt","pt>en","en>ro","ro>en","en>sk","sk>en","en>sl","sl>en","en>es","es>en","en>sv","sv>en","en>ru","ru>en","en>uk","uk>en"],"verified":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"canary-1b-v2-F32.gguf","size_bytes":3920657120}, + {"quant":"F16","filename":"canary-1b-v2-F16.gguf","size_bytes":1966111456}, + {"quant":"Q8_0","filename":"canary-1b-v2-Q8_0.gguf","size_bytes":1144290016}, + {"quant":"Q6_K","filename":"canary-1b-v2-Q6_K.gguf","size_bytes":931986144}, + {"quant":"Q5_K_M","filename":"canary-1b-v2-Q5_K_M.gguf","size_bytes":836664032}, + {"quant":"Q4_K_M","filename":"canary-1b-v2-Q4_K_M.gguf","size_bytes":735476448} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":9.22,"ci95":[8.43,10.04],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1026,"del":172,"ins":108},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q5_K_M","metric":"wer","err_pct":9.1,"ci95":[8.36,9.88],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1029,"del":166,"ins":95},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":8.56,"ci95":[7.91,9.23],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":960,"del":113,"ins":99},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q5_K_M","metric":"wer","err_pct":8.8,"ci95":[8.11,9.48],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":984,"del":115,"ins":106},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":11.34,"ci95":[10.73,11.93],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1746,"del":268,"ins":271},"empty_hyp":1,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q5_K_M","metric":"wer","err_pct":11.56,"ci95":[10.91,12.18],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1786,"del":279,"ins":266},"empty_hyp":1,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.46,"ci95":[4.05,4.89],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":646,"del":128,"ins":60},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.53,"ci95":[4.12,4.93],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":657,"del":126,"ins":64},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":26.02,"ci95":[25.01,26.98],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3740,"del":120,"ins":88},"empty_hyp":0,"utts_over_50pct":38}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q6_K","metric":"wer","err_pct":25.93,"ci95":[24.93,26.91],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3725,"del":120,"ins":90},"empty_hyp":0,"utts_over_50pct":37}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":25.99,"ci95":[25.0,27.0],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3727,"del":129,"ins":88},"empty_hyp":0,"utts_over_50pct":36}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q4_K_M","metric":"wer","err_pct":26.57,"ci95":[25.54,27.57],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3791,"del":145,"ins":96},"empty_hyp":0,"utts_over_50pct":42}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.47,"ci95":[4.03,4.95],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":450,"del":129,"ins":71},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":4.43,"ci95":[3.99,4.91],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":440,"del":133,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.51,"ci95":[4.07,4.97],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":447,"del":130,"ins":79},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":4.64,"ci95":[4.19,5.12],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":459,"del":137,"ins":80},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.1,"ci95":[2.78,3.44],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":547,"del":100,"ins":75},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q6_K","metric":"wer","err_pct":3.13,"ci95":[2.81,3.47],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":549,"del":103,"ins":77},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.1,"ci95":[2.79,3.43],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":546,"del":104,"ins":73},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q4_K_M","metric":"wer","err_pct":3.09,"ci95":[2.8,3.42],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":539,"del":104,"ins":78},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":12.72,"ci95":[12.04,13.43],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1423,"del":170,"ins":299},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q5_K_M","metric":"wer","err_pct":12.88,"ci95":[12.19,13.62],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1428,"del":173,"ins":316},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":8.86,"ci95":[8.21,9.55],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1045,"del":113,"ins":153},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q6_K","metric":"wer","err_pct":8.84,"ci95":[8.19,9.54],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1045,"del":112,"ins":151},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q5_K_M","metric":"wer","err_pct":8.91,"ci95":[8.27,9.59],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1057,"del":111,"ins":150},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q4_K_M","metric":"wer","err_pct":9.14,"ci95":[8.48,9.81],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1083,"del":105,"ins":164},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.09,"ci95":[4.61,5.59],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":681,"del":133,"ins":102},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q6_K","metric":"wer","err_pct":4.94,"ci95":[4.46,5.41],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":671,"del":127,"ins":91},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":4.82,"ci95":[4.33,5.32],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":654,"del":130,"ins":84},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q4_K_M","metric":"wer","err_pct":5.16,"ci95":[4.7,5.64],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":699,"del":146,"ins":84},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":8.4,"ci95":[7.81,9.01],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1192,"del":162,"ins":137},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q5_K_M","metric":"wer","err_pct":8.68,"ci95":[8.1,9.29],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1226,"del":172,"ins":143},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":13.06,"ci95":[12.39,13.8],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1731,"del":235,"ins":264},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q5_K_M","metric":"wer","err_pct":13.45,"ci95":[12.74,14.21],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1780,"del":230,"ins":286},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.1,"ci95":[2.77,3.46],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":511,"del":65,"ins":83},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.97,"ci95":[2.67,3.31],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":492,"del":63,"ins":77},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":13.45,"ci95":[12.74,14.16],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2046,"del":130,"ins":129},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q5_K_M","metric":"wer","err_pct":13.52,"ci95":[12.78,14.21],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2071,"del":130,"ins":115},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":10.41,"ci95":[9.79,11.09],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1315,"del":120,"ins":170},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q6_K","metric":"wer","err_pct":10.39,"ci95":[9.76,11.07],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1321,"del":112,"ins":168},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q5_K_M","metric":"wer","err_pct":10.54,"ci95":[9.92,11.19],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1342,"del":114,"ins":169},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q4_K_M","metric":"wer","err_pct":10.57,"ci95":[9.93,11.27],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1355,"del":120,"ins":155},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":19.75,"ci95":[17.99,22.38],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3410,"del":377,"ins":604},"empty_hyp":0,"utts_over_50pct":25}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q5_K_M","metric":"wer","err_pct":18.97,"ci95":[18.01,19.84],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3399,"del":412,"ins":407},"empty_hyp":0,"utts_over_50pct":23}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":6.28,"ci95":[5.63,6.98],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":389,"del":77,"ins":61},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":6.4,"ci95":[5.7,7.09],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":395,"del":76,"ins":66},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":6.88,"ci95":[6.32,7.44],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":800,"del":103,"ins":87},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q6_K","metric":"wer","err_pct":6.8,"ci95":[6.26,7.38],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":793,"del":106,"ins":80},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q5_K_M","metric":"wer","err_pct":6.96,"ci95":[6.37,7.59],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":793,"del":118,"ins":91},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q4_K_M","metric":"wer","err_pct":7.22,"ci95":[6.66,7.84],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":844,"del":98,"ins":97},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":4.5,"ci95":[4.04,5.01],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":705,"del":106,"ins":156},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":4.51,"ci95":[4.05,4.98],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":710,"del":101,"ins":157},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":6.87,"ci95":[6.35,7.38],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1076,"del":209,"ins":143},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q5_K_M","metric":"wer","err_pct":6.84,"ci95":[6.32,7.33],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1085,"del":205,"ins":133},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":7.83,"ci95":[7.24,8.48],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":992,"del":89,"ins":102},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":7.93,"ci95":[7.35,8.58],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1000,"del":92,"ins":106},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":6.84,"ci95":[6.14,7.54],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":797,"del":170,"ins":76},"empty_hyp":3,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q5_K_M","metric":"wer","err_pct":6.88,"ci95":[6.17,7.58],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":794,"del":175,"ins":80},"empty_hyp":3,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":12.76,"ci95":[11.35,14.61],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1500,"del":191,"ins":417},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q6_K","metric":"wer","err_pct":12.9,"ci95":[11.47,14.78],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1526,"del":187,"ins":418},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q5_K_M","metric":"wer","err_pct":12.93,"ci95":[11.5,14.78],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1538,"del":188,"ins":409},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q4_K_M","metric":"wer","err_pct":13.28,"ci95":[11.89,15.15],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1576,"del":203,"ins":414},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":9.74,"ci95":[9.06,10.44],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1148,"del":211,"ins":139},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q5_K_M","metric":"wer","err_pct":9.52,"ci95":[8.86,10.21],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1132,"del":203,"ins":130},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":10.58,"ci95":[9.87,11.27],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1283,"del":138,"ins":99},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q5_K_M","metric":"wer","err_pct":10.98,"ci95":[10.26,11.67],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1328,"del":148,"ins":102},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.92,"ci95":[1.78,2.08],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":757,"del":167,"ins":96},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.92,"ci95":[1.78,2.08],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":757,"del":167,"ins":96},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.91,"ci95":[1.76,2.07],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":751,"del":166,"ins":97},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.94,"ci95":[1.79,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":755,"del":171,"ins":101},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.93,"ci95":[1.78,2.08],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":759,"del":169,"ins":93},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.91,"ci95":[1.76,2.07],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":748,"del":163,"ins":102},"empty_hyp":0,"utts_over_50pct":5} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":277.2,"xrt_compute":39.679,"load_ms":267.3,"mel_ms":0.9,"encode_ms":174.8,"decode_ms":101.6,"engine_sha":"8c583b2","measured_on":"2026-05-08","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":21.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":24.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":87.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":90.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":88.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":14.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":13.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/canary-1b.json b/catalog/canary-1b.json new file mode 100644 index 00000000..07bfd97f --- /dev/null +++ b/catalog/canary-1b.json @@ -0,0 +1,68 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "canary-1b", + "family": "canary", + "display_name": "canary-1b", + "params": 1021477920, + "license": { + "spdx": "cc-by-nc-4.0", + "display": "CC-BY-NC-4.0" + }, + "upstream_repo": "nvidia/canary-1b", + "upstream_commit": "1698acf", + "published_repo": "handy-computer/canary-1b-gguf", + "languages": ["en","de","es","fr"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":true,"targets":["en","de","es","fr"],"pairs":["en>de","de>en","en>es","es>en","en>fr","fr>en"],"verified":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"canary-1b-F32.gguf","size_bytes":4086100544}, + {"quant":"F16","filename":"canary-1b-F16.gguf","size_bytes":2047537728}, + {"quant":"Q8_0","filename":"canary-1b-Q8_0.gguf","size_bytes":1162740288}, + {"quant":"Q6_K","filename":"canary-1b-Q6_K.gguf","size_bytes":934167616}, + {"quant":"Q5_K_M","filename":"canary-1b-Q5_K_M.gguf","size_bytes":837694272}, + {"quant":"Q4_K_M","filename":"canary-1b-Q4_K_M.gguf","size_bytes":729686848} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.45,"ci95":[5.83,7.08],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":860,"del":163,"ins":185},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":6.53,"ci95":[5.9,7.17],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":859,"del":167,"ins":197},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.44,"ci95":[4.0,4.89],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":453,"del":122,"ins":71},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.48,"ci95":[4.01,4.92],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":459,"del":124,"ins":69},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.06,"ci95":[5.52,6.66],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":890,"del":104,"ins":420},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":5.99,"ci95":[5.45,6.6],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":878,"del":107,"ins":412},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":7.44,"ci95":[6.79,8.13],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":924,"del":114,"ins":300},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":7.44,"ci95":[6.81,8.16],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":913,"del":121,"ins":305},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.55,"ci95":[1.41,1.69],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":619,"del":112,"ins":92},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.55,"ci95":[1.41,1.69],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":619,"del":112,"ins":92},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.55,"ci95":[1.41,1.7],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":617,"del":115,"ins":91},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.57,"ci95":[1.43,1.71],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":623,"del":113,"ins":95},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.57,"ci95":[1.44,1.72],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":627,"del":113,"ins":95},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.55,"ci95":[1.41,1.7],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":627,"del":100,"ins":97},"empty_hyp":0,"utts_over_50pct":4} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":561.2,"xrt_compute":19.6,"load_ms":270.3,"mel_ms":3.5,"encode_ms":200.8,"decode_ms":356.9,"engine_sha":"8c583b2","measured_on":"2026-05-08","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":20.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":25.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":37.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":55.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/canary-qwen-2.5b.json b/catalog/canary-qwen-2.5b.json new file mode 100644 index 00000000..d9046523 --- /dev/null +++ b/catalog/canary-qwen-2.5b.json @@ -0,0 +1,61 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "canary-qwen-2.5b", + "family": "canary_qwen", + "display_name": "canary-qwen-2.5b", + "params": 2533757456, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/canary-qwen-2.5b", + "upstream_commit": "b1469e1bba1cfe140205529c79c434ca47180960", + "published_repo": "handy-computer/canary-qwen-2.5b-gguf", + "languages": ["en"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"canary-qwen-2.5b-BF16.gguf","size_bytes":5076107136}, + {"quant":"F16","filename":"canary-qwen-2.5b-F16.gguf","size_bytes":5076972928}, + {"quant":"Q8_0","filename":"canary-qwen-2.5b-Q8_0.gguf","size_bytes":2797548928}, + {"quant":"Q6_K","filename":"canary-qwen-2.5b-Q6_K.gguf","size_bytes":2208697728}, + {"quant":"Q5_K_M","filename":"canary-qwen-2.5b-Q5_K_M.gguf","size_bytes":1983729024}, + {"quant":"Q4_K_M","filename":"canary-qwen-2.5b-Q4_K_M.gguf","size_bytes":1737575808} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.58,"ci95":[3.19,4.0],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":321,"del":115,"ins":85},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.79,"ci95":[3.37,4.22],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":339,"del":120,"ins":92},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.63,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":633,"del":123,"ins":110},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.63,"ci95":[1.48,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":631,"del":123,"ins":110},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.63,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":631,"del":122,"ins":110},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.63,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":630,"del":125,"ins":112},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.63,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":625,"del":127,"ins":113},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.63,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":643,"del":107,"ins":115},"empty_hyp":0,"utts_over_50pct":3} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":47.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":45.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/cohere-transcribe-03-2026.json b/catalog/cohere-transcribe-03-2026.json new file mode 100644 index 00000000..5e20a09a --- /dev/null +++ b/catalog/cohere-transcribe-03-2026.json @@ -0,0 +1,88 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "cohere-transcribe-03-2026", + "family": "cohere_asr", + "display_name": "cohere-transcribe-03-2026", + "params": 2049026832, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "CohereLabs/cohere-transcribe-03-2026", + "upstream_commit": "76b8b23", + "published_repo": "handy-computer/cohere-transcribe-03-2026-gguf", + "languages": ["en","fr","de","es","it","pt","nl","pl","el","ar","ja","zh","vi","ko"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"cohere-transcribe-03-2026-BF16.gguf","size_bytes":4105263104}, + {"quant":"F16","filename":"cohere-transcribe-03-2026-F16.gguf","size_bytes":4106644992}, + {"quant":"Q8_0","filename":"cohere-transcribe-03-2026-Q8_0.gguf","size_bytes":2410655232}, + {"quant":"Q6_K","filename":"cohere-transcribe-03-2026-Q6_K.gguf","size_bytes":1972524544}, + {"quant":"Q5_K_M","filename":"cohere-transcribe-03-2026-Q5_K_M.gguf","size_bytes":1770270208}, + {"quant":"Q4_K_M","filename":"cohere-transcribe-03-2026-Q4_K_M.gguf","size_bytes":1558162944} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":13.6,"ci95":[12.12,15.16],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":727,"del":305,"ins":88},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":13.62,"ci95":[12.14,15.21],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":737,"del":299,"ins":86},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":5.06,"ci95":[4.53,5.65],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":571,"del":292,"ins":84},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.79,"ci95":[4.32,5.29],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":568,"del":252,"ins":77},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":8.96,"ci95":[8.23,9.73],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1071,"del":218,"ins":71},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":8.94,"ci95":[8.24,9.7],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1055,"del":232,"ins":70},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.08,"ci95":[4.56,5.59],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":456,"del":181,"ins":103},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.05,"ci95":[4.54,5.53],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":458,"del":180,"ins":97},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.97,"ci95":[3.56,4.39],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":589,"del":234,"ins":103},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.83,"ci95":[3.44,4.25],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":597,"del":197,"ins":98},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.23,"ci95":[4.72,5.77],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":658,"del":175,"ins":108},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":5.23,"ci95":[4.73,5.77],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":177,"ins":104},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.24,"ci95":[2.86,3.61],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":417,"del":176,"ins":95},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":3.36,"ci95":[2.98,3.78],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":421,"del":197,"ins":95},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":5.13,"ci95":[4.48,5.84],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":871,"del":670,"ins":133},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":5.17,"ci95":[4.53,5.89],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":875,"del":678,"ins":135},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":6.57,"ci95":[5.5,7.65],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":485,"del":591,"ins":85},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":6.49,"ci95":[5.44,7.57],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":482,"del":592,"ins":73},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":7.16,"ci95":[6.15,8.15],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":350,"del":195,"ins":56},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":7.23,"ci95":[6.21,8.25],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":349,"del":204,"ins":54},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":6.15,"ci95":[5.51,6.85],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":607,"del":203,"ins":75},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q5_K_M","metric":"wer","err_pct":6.34,"ci95":[5.68,7.05],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":624,"del":214,"ins":74},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":5.18,"ci95":[4.71,5.66],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":714,"del":239,"ins":159},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":5.03,"ci95":[4.59,5.5],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":721,"del":200,"ins":159},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":7.39,"ci95":[6.8,7.98],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1324,"del":422,"ins":178},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q5_K_M","metric":"wer","err_pct":7.31,"ci95":[6.7,7.87],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1341,"del":387,"ins":175},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":11.18,"ci95":[10.19,12.21],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1769,"del":2036,"ins":180},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":11.03,"ci95":[10.07,12.01],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1761,"del":1998,"ins":174},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.27,"ci95":[1.13,1.41],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":510,"del":77,"ins":86},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.25,"ci95":[1.12,1.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":506,"del":74,"ins":85},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.24,"ci95":[1.11,1.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":501,"del":75,"ins":83},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.26,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.26,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.27,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.25,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/cohere-transcribe-arabic-07-2026.json b/catalog/cohere-transcribe-arabic-07-2026.json new file mode 100644 index 00000000..4e0d2d6a --- /dev/null +++ b/catalog/cohere-transcribe-arabic-07-2026.json @@ -0,0 +1,61 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "cohere-transcribe-arabic-07-2026", + "family": "cohere_asr", + "display_name": "cohere-transcribe-arabic-07-2026", + "params": 2049026832, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "CohereLabs/cohere-transcribe-arabic-07-2026", + "upstream_commit": "0a8193c", + "published_repo": "handy-computer/cohere-transcribe-arabic-07-2026-gguf", + "languages": ["en","ar"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"cohere-transcribe-arabic-07-2026-BF16.gguf","size_bytes":4105263008}, + {"quant":"F16","filename":"cohere-transcribe-arabic-07-2026-F16.gguf","size_bytes":4106644896}, + {"quant":"Q8_0","filename":"cohere-transcribe-arabic-07-2026-Q8_0.gguf","size_bytes":2410655136}, + {"quant":"Q6_K","filename":"cohere-transcribe-arabic-07-2026-Q6_K.gguf","size_bytes":1972524448}, + {"quant":"Q5_K_M","filename":"cohere-transcribe-arabic-07-2026-Q5_K_M.gguf","size_bytes":1770270112}, + {"quant":"Q4_K_M","filename":"cohere-transcribe-arabic-07-2026-Q4_K_M.gguf","size_bytes":1558162848} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ar","quant":"BF16","metric":"wer","err_pct":11.02,"ci95":[9.64,12.53],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":527,"del":286,"ins":95},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"F16","metric":"wer","err_pct":11.0,"ci95":[9.6,12.5],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":525,"del":286,"ins":95},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":11.06,"ci95":[9.62,12.6],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":515,"del":293,"ins":103},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q6_K","metric":"wer","err_pct":11.07,"ci95":[9.63,12.59],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":517,"del":289,"ins":106},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":10.95,"ci95":[9.5,12.49],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":517,"del":298,"ins":87},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q4_K_M","metric":"wer","err_pct":11.18,"ci95":[9.78,12.67],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":526,"del":288,"ins":107},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.88,"ci95":[4.25,5.61],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":396,"del":222,"ins":93},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.88,"ci95":[4.25,5.57],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":402,"del":215,"ins":93},"empty_hyp":0,"utts_over_50pct":1} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/diar_streaming_sortformer_4spk-v2.1.json b/catalog/diar_streaming_sortformer_4spk-v2.1.json new file mode 100644 index 00000000..08175145 --- /dev/null +++ b/catalog/diar_streaming_sortformer_4spk-v2.1.json @@ -0,0 +1,45 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "diar_streaming_sortformer_4spk-v2.1", + "family": "sortformer", + "display_name": "diar_streaming_sortformer_4spk-v2.1", + "params": 117711368, + "license": { + "spdx": "other", + "display": "NVIDIA Open Model License" + }, + "upstream_repo": "nvidia/diar_streaming_sortformer_4spk-v2.1", + "upstream_commit": "fafaab5", + "published_repo": "handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf", + "languages": ["en"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":true,"verified":false}, + "diarize": {"supported":true,"max_speakers":4,"verified":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"diar_streaming_sortformer_4spk-v2.1-F32.gguf","size_bytes":470910560}, + {"quant":"F16","filename":"diar_streaming_sortformer_4spk-v2.1-F16.gguf","size_bytes":236606560}, + {"quant":"Q8_0","filename":"diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf","size_bytes":139310336} + ], + "accuracy_benchmarks": [ + {"dataset":"ami","split":"ihm-test","language":"en","quant":"F32","metric":"der","err_pct":14.59,"ci95":[null,null],"n_utts":16,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"ami","split":"ihm-test","language":"en","quant":"F16","metric":"der","err_pct":14.23,"ci95":[null,null],"n_utts":16,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"ami","split":"ihm-test","language":"en","quant":"Q8_0","metric":"der","err_pct":14.73,"ci95":[null,null],"n_utts":16,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":136.3,"xrt_compute":80.679,"load_ms":66.4,"mel_ms":0.0,"encode_ms":136.3,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"F16","sample":"dots","sample_duration_s":35.332,"total_ms":794.2,"xrt_compute":44.487,"load_ms":68.5,"mel_ms":0.0,"encode_ms":794.2,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":108.8,"xrt_compute":101.092,"load_ms":49.4,"mel_ms":0.0,"encode_ms":108.8,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":684.9,"xrt_compute":51.588,"load_ms":49.9,"mel_ms":0.0,"encode_ms":684.9,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":68.2,"xrt_compute":161.226,"load_ms":155.2,"mel_ms":0.0,"encode_ms":68.2,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"dots","sample_duration_s":35.332,"total_ms":316.0,"xrt_compute":111.806,"load_ms":68.4,"mel_ms":0.0,"encode_ms":316.0,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":63.8,"xrt_compute":172.416,"load_ms":104.6,"mel_ms":0.0,"encode_ms":63.8,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":317.9,"xrt_compute":111.157,"load_ms":50.4,"mel_ms":0.0,"encode_ms":317.9,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null} + ] +} diff --git a/catalog/fun-asr-mlt-nano-2512.json b/catalog/fun-asr-mlt-nano-2512.json new file mode 100644 index 00000000..b529e8ab --- /dev/null +++ b/catalog/fun-asr-mlt-nano-2512.json @@ -0,0 +1,118 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "fun-asr-mlt-nano-2512", + "family": "funasr_nano", + "display_name": "fun-asr-mlt-nano-2512", + "params": 829791840, + "license": { + "spdx": "other", + "display": "FunASR Model Open Source License Agreement v1.1" + }, + "upstream_repo": "FunAudioLLM/Fun-ASR-MLT-Nano-2512", + "upstream_commit": "cf67a938bf2829959d08fdfb84e186eff02a67ff", + "published_repo": "handy-computer/Fun-ASR-MLT-Nano-2512-gguf", + "languages": [ + "zh", "en", "yue", "ja", "ko", "vi", "id", "th", "ms", "tl", "ar", "hi", + "bg", "hr", "cs", "da", "nl", "et", "fi", "el", "hu", "ga", "lv", "lt", + "mt", "pl", "pt", "ro", "sk", "sl", "sv" + ], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"Fun-ASR-MLT-Nano-2512-BF16.gguf","size_bytes":1667504192}, + {"quant":"F16","filename":"Fun-ASR-MLT-Nano-2512-F16.gguf","size_bytes":1667504192}, + {"quant":"Q8_0","filename":"Fun-ASR-MLT-Nano-2512-Q8_0.gguf","size_bytes":891271232}, + {"quant":"Q6_K","filename":"Fun-ASR-MLT-Nano-2512-Q6_K.gguf","size_bytes":690744384}, + {"quant":"Q5_K_M","filename":"Fun-ASR-MLT-Nano-2512-Q5_K_M.gguf","size_bytes":631129152}, + {"quant":"Q4_K_M","filename":"Fun-ASR-MLT-Nano-2512-Q4_K_M.gguf","size_bytes":556975168} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":25.79,"ci95":[24.27,27.42],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1640,"del":354,"ins":130},"empty_hyp":0,"utts_over_50pct":34}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":84.98,"ci95":[81.46,89.45],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9508,"del":1740,"ins":794},"empty_hyp":0,"utts_over_50pct":595}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":53.56,"ci95":[51.65,55.84],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5732,"del":818,"ins":784},"empty_hyp":0,"utts_over_50pct":347}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":69.93,"ci95":[68.45,71.45],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10311,"del":3005,"ins":780},"empty_hyp":0,"utts_over_50pct":772}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":103.55,"ci95":[101.64,105.6],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11505,"del":3410,"ins":797},"empty_hyp":0,"utts_over_50pct":642}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.9,"ci95":[4.4,5.48],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":470,"del":124,"ins":120},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":5.0,"ci95":[4.52,5.55],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":481,"del":130,"ins":117},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.79,"ci95":[4.5,7.85],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":520,"del":135,"ins":188},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":5.45,"ci95":[4.69,6.31],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":489,"del":184,"ins":120},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":64.22,"ci95":[62.44,66.21],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7260,"del":839,"ins":1457},"empty_hyp":0,"utts_over_50pct":650}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":68.16,"ci95":[66.48,69.98],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7877,"del":845,"ins":1361},"empty_hyp":0,"utts_over_50pct":723}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":15.62,"ci95":[14.78,16.63],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2605,"del":798,"ins":726},"empty_hyp":0,"utts_over_50pct":32}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q6_K","metric":"wer","err_pct":15.18,"ci95":[14.41,16.05],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2658,"del":636,"ins":718},"empty_hyp":0,"utts_over_50pct":22}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q5_K_M","metric":"wer","err_pct":16.22,"ci95":[15.33,17.21],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2634,"del":914,"ins":739},"empty_hyp":0,"utts_over_50pct":37}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q4_K_M","metric":"wer","err_pct":16.43,"ci95":[15.59,17.33],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2798,"del":762,"ins":781},"empty_hyp":0,"utts_over_50pct":30}, + {"dataset":"fleurs","split":"test","language":"ga","quant":"Q8_0","metric":"wer","err_pct":100.08,"ci95":[97.48,103.28],"n_utts":842,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16222,"del":3744,"ins":1403},"empty_hyp":0,"utts_over_50pct":842}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":43.96,"ci95":[39.95,48.08],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3846,"del":3867,"ins":532},"empty_hyp":0,"utts_over_50pct":150}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":61.07,"ci95":[58.92,63.35],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8406,"del":1701,"ins":733},"empty_hyp":0,"utts_over_50pct":556}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":113.21,"ci95":[110.7,116.12],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15267,"del":1093,"ins":2972},"empty_hyp":0,"utts_over_50pct":904}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":7.52,"ci95":[6.85,8.23],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":744,"del":120,"ins":156},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q6_K","metric":"wer","err_pct":7.73,"ci95":[7.03,8.51],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":770,"del":130,"ins":148},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q5_K_M","metric":"wer","err_pct":7.8,"ci95":[7.1,8.61],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":760,"del":150,"ins":148},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q4_K_M","metric":"wer","err_pct":8.64,"ci95":[7.91,9.47],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":881,"del":132,"ins":159},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":2.32,"ci95":[2.01,2.65],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":492,"del":146,"ins":118},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q6_K","metric":"cer","err_pct":2.29,"ci95":[1.98,2.6],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":507,"del":127,"ins":114},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":2.34,"ci95":[2.03,2.67],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":505,"del":136,"ins":123},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q4_K_M","metric":"cer","err_pct":2.94,"ci95":[2.58,3.3],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":641,"del":196,"ins":122},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.2,"ci95":[4.21,6.29],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":348,"del":547,"ins":25},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":78.42,"ci95":[76.74,80.45],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11034,"del":1321,"ins":1081},"empty_hyp":0,"utts_over_50pct":919}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":56.71,"ci95":[55.13,58.29],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7277,"del":685,"ins":780},"empty_hyp":0,"utts_over_50pct":489}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":9.92,"ci95":[9.01,10.83],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1079,"del":231,"ins":154},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":91.71,"ci95":[90.91,92.56],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16103,"del":3659,"ins":626},"empty_hyp":0,"utts_over_50pct":923}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":42.97,"ci95":[41.38,44.61],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2713,"del":483,"ins":412},"empty_hyp":0,"utts_over_50pct":112}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":59.34,"ci95":[57.63,61.19],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6800,"del":881,"ins":856},"empty_hyp":0,"utts_over_50pct":453}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":28.24,"ci95":[26.85,29.59],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4407,"del":979,"ins":678},"empty_hyp":0,"utts_over_50pct":141}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q6_K","metric":"wer","err_pct":30.17,"ci95":[27.78,33.46],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4491,"del":946,"ins":1041},"empty_hyp":0,"utts_over_50pct":149}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":30.11,"ci95":[28.6,31.69],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4606,"del":1162,"ins":697},"empty_hyp":0,"utts_over_50pct":153}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q4_K_M","metric":"wer","err_pct":49.2,"ci95":[46.85,51.78],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6400,"del":3372,"ins":792},"empty_hyp":0,"utts_over_50pct":390}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":74.39,"ci95":[72.46,76.44],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12052,"del":2025,"ins":1396},"empty_hyp":0,"utts_over_50pct":744}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":64.01,"ci95":[62.69,65.28],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8171,"del":904,"ins":683},"empty_hyp":0,"utts_over_50pct":586}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":75.22,"ci95":[73.63,76.87],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9891,"del":1916,"ins":615},"empty_hyp":0,"utts_over_50pct":726}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":75.36,"ci95":[72.22,79.42],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9020,"del":1094,"ins":1482},"empty_hyp":0,"utts_over_50pct":604}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":7.99,"ci95":[7.2,8.97],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3432,"del":1708,"ins":2651},"empty_hyp":0,"utts_over_50pct":19}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q6_K","metric":"cer","err_pct":8.08,"ci95":[7.2,9.07],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3627,"del":1636,"ins":2614},"empty_hyp":0,"utts_over_50pct":21}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q5_K_M","metric":"cer","err_pct":8.53,"ci95":[7.71,9.57],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3714,"del":1994,"ins":2608},"empty_hyp":0,"utts_over_50pct":26}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q4_K_M","metric":"cer","err_pct":11.04,"ci95":[9.88,12.33],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4811,"del":2566,"ins":3391},"empty_hyp":0,"utts_over_50pct":46}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":8.32,"ci95":[7.7,8.9],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1585,"del":210,"ins":371},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":12.72,"ci95":[11.82,13.59],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3249,"del":224,"ins":216},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q6_K","metric":"cer","err_pct":12.87,"ci95":[12.0,13.84],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3300,"del":221,"ins":211},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q5_K_M","metric":"cer","err_pct":12.91,"ci95":[12.03,13.88],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3304,"del":223,"ins":217},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q4_K_M","metric":"cer","err_pct":14.56,"ci95":[13.58,15.66],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3738,"del":255,"ins":230},"empty_hyp":0,"utts_over_50pct":23}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.64,"ci95":[7.7,9.55],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1274,"del":1484,"ins":322},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q6_K","metric":"cer","err_pct":8.79,"ci95":[7.8,9.66],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1311,"del":1492,"ins":332},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":8.59,"ci95":[7.65,9.49],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1266,"del":1491,"ins":306},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q4_K_M","metric":"cer","err_pct":9.27,"ci95":[8.26,10.18],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1475,"del":1500,"ins":332},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.69,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.77,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.89,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":66.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":70.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/fun-asr-nano-2512.json b/catalog/fun-asr-nano-2512.json new file mode 100644 index 00000000..e51d9c65 --- /dev/null +++ b/catalog/fun-asr-nano-2512.json @@ -0,0 +1,63 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "fun-asr-nano-2512", + "family": "funasr_nano", + "display_name": "fun-asr-nano-2512", + "params": 829791840, + "license": { + "spdx": "other", + "display": "FunASR Model Open Source License Agreement v1.1" + }, + "upstream_repo": "FunAudioLLM/Fun-ASR-Nano-2512", + "upstream_commit": "a7088d620f755dcdca575b63db184c3ad55b2865", + "published_repo": "handy-computer/Fun-ASR-Nano-2512-gguf", + "languages": ["zh","en","ja"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"Fun-ASR-Nano-2512-BF16.gguf","size_bytes":1667503872}, + {"quant":"F16","filename":"Fun-ASR-Nano-2512-F16.gguf","size_bytes":1667503872}, + {"quant":"Q8_0","filename":"Fun-ASR-Nano-2512-Q8_0.gguf","size_bytes":891270912}, + {"quant":"Q6_K","filename":"Fun-ASR-Nano-2512-Q6_K.gguf","size_bytes":690744064}, + {"quant":"Q5_K_M","filename":"Fun-ASR-Nano-2512-Q5_K_M.gguf","size_bytes":631128832}, + {"quant":"Q4_K_M","filename":"Fun-ASR-Nano-2512-Q4_K_M.gguf","size_bytes":556974848} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.49,"ci95":[4.91,6.04],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":522,"del":126,"ins":151},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":8.5,"ci95":[7.86,9.22],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1976,"del":401,"ins":398},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.59,"ci95":[7.7,9.43],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1273,"del":1476,"ins":315},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.59,"ci95":[7.59,9.53],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1273,"del":1476,"ins":312},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.78,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.79,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.79,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.78,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.82,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.92,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":86.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":73.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/gigaam-v3-ctc.json b/catalog/gigaam-v3-ctc.json new file mode 100644 index 00000000..0aeffb92 --- /dev/null +++ b/catalog/gigaam-v3-ctc.json @@ -0,0 +1,52 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "gigaam-v3-ctc", + "family": "gigaam", + "display_name": "gigaam-v3-ctc", + "params": 220718498, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "ai-sage/GigaAM-v3", + "upstream_commit": "15ef3b5", + "published_repo": "handy-computer/gigaam-v3-ctc-gguf", + "languages": ["ru"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["token"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"gigaam-v3-ctc-F32.gguf","size_bytes":882913216}, + {"quant":"F16","filename":"gigaam-v3-ctc-F16.gguf","size_bytes":448750528}, + {"quant":"Q8_0","filename":"gigaam-v3-ctc-Q8_0.gguf","size_bytes":271803328}, + {"quant":"Q6_K","filename":"gigaam-v3-ctc-Q6_K.gguf","size_bytes":226091968}, + {"quant":"Q5_K_M","filename":"gigaam-v3-ctc-Q5_K_M.gguf","size_bytes":204563392}, + {"quant":"Q4_K_M","filename":"gigaam-v3-ctc-Q4_K_M.gguf","size_bytes":182150080} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ru","quant":"F32","metric":"wer","err_pct":8.42,"ci95":[7.66,9.16],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":925,"del":104,"ins":242},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"F16","metric":"wer","err_pct":8.42,"ci95":[7.66,9.16],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":925,"del":104,"ins":242},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.4,"ci95":[7.65,9.16],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":923,"del":105,"ins":241},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q6_K","metric":"wer","err_pct":8.38,"ci95":[7.64,9.14],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":921,"del":105,"ins":240},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":8.29,"ci95":[7.55,9.02],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":908,"del":103,"ins":241},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q4_K_M","metric":"wer","err_pct":8.42,"ci95":[7.67,9.15],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":926,"del":105,"ins":240},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.42,"ci95":[7.64,9.15],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":924,"del":104,"ins":243},"empty_hyp":0,"utts_over_50pct":6} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":142.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/gigaam-v3-e2e-ctc.json b/catalog/gigaam-v3-e2e-ctc.json new file mode 100644 index 00000000..b2d5d08e --- /dev/null +++ b/catalog/gigaam-v3-e2e-ctc.json @@ -0,0 +1,52 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "gigaam-v3-e2e-ctc", + "family": "gigaam", + "display_name": "gigaam-v3-e2e-ctc", + "params": 220889985, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "ai-sage/GigaAM-v3", + "upstream_commit": "cec030b", + "published_repo": "handy-computer/gigaam-v3-e2e-ctc-gguf", + "languages": ["ru"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["token"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"gigaam-v3-e2e-ctc-F32.gguf","size_bytes":883603552}, + {"quant":"F16","filename":"gigaam-v3-e2e-ctc-F16.gguf","size_bytes":449098336}, + {"quant":"Q8_0","filename":"gigaam-v3-e2e-ctc-Q8_0.gguf","size_bytes":272151136}, + {"quant":"Q6_K","filename":"gigaam-v3-e2e-ctc-Q6_K.gguf","size_bytes":226439776}, + {"quant":"Q5_K_M","filename":"gigaam-v3-e2e-ctc-Q5_K_M.gguf","size_bytes":204911200}, + {"quant":"Q4_K_M","filename":"gigaam-v3-e2e-ctc-Q4_K_M.gguf","size_bytes":182497888} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ru","quant":"F32","metric":"wer","err_pct":5.5,"ci95":[4.99,6.08],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":699,"del":84,"ins":48},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"F16","metric":"wer","err_pct":5.5,"ci95":[4.99,6.08],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":699,"del":84,"ins":48},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.5,"ci95":[4.98,6.07],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":699,"del":83,"ins":48},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q6_K","metric":"wer","err_pct":5.56,"ci95":[5.03,6.14],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":704,"del":84,"ins":52},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":5.58,"ci95":[5.04,6.15],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":705,"del":86,"ins":51},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.53,"ci95":[5.01,6.07],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":702,"del":84,"ins":49},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q4_K_M","metric":"wer","err_pct":5.57,"ci95":[null,null],"n_utts":775,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":111.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/gigaam-v3-e2e-rnnt.json b/catalog/gigaam-v3-e2e-rnnt.json new file mode 100644 index 00000000..b73d7e3c --- /dev/null +++ b/catalog/gigaam-v3-e2e-rnnt.json @@ -0,0 +1,52 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "gigaam-v3-e2e-rnnt", + "family": "gigaam", + "display_name": "gigaam-v3-e2e-rnnt", + "params": 222518657, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "ai-sage/GigaAM-v3", + "upstream_commit": "ec1dc1f", + "published_repo": "handy-computer/gigaam-v3-e2e-rnnt-gguf", + "languages": ["ru"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["token"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"gigaam-v3-e2e-rnnt-F32.gguf","size_bytes":890138592}, + {"quant":"F16","filename":"gigaam-v3-e2e-rnnt-F16.gguf","size_bytes":452381408}, + {"quant":"Q8_0","filename":"gigaam-v3-e2e-rnnt-Q8_0.gguf","size_bytes":273724832}, + {"quant":"Q6_K","filename":"gigaam-v3-e2e-rnnt-Q6_K.gguf","size_bytes":227953952}, + {"quant":"Q5_K_M","filename":"gigaam-v3-e2e-rnnt-Q5_K_M.gguf","size_bytes":206392736}, + {"quant":"Q4_K_M","filename":"gigaam-v3-e2e-rnnt-Q4_K_M.gguf","size_bytes":183948704} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ru","quant":"F32","metric":"wer","err_pct":5.35,"ci95":[4.85,5.9],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":98,"ins":49},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"F16","metric":"wer","err_pct":5.35,"ci95":[4.85,5.9],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":98,"ins":49},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.36,"ci95":[4.87,5.89],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":97,"ins":51},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q6_K","metric":"wer","err_pct":5.37,"ci95":[4.89,5.9],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":665,"del":98,"ins":48},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":5.42,"ci95":[4.94,5.97],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":672,"del":95,"ins":52},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q4_K_M","metric":"wer","err_pct":5.36,"ci95":[4.84,5.94],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":671,"del":94,"ins":44},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.35,"ci95":[4.85,5.9],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":98,"ins":49},"empty_hyp":0,"utts_over_50pct":1} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":26.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":89.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":88.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/gigaam-v3-rnnt.json b/catalog/gigaam-v3-rnnt.json new file mode 100644 index 00000000..97d716f5 --- /dev/null +++ b/catalog/gigaam-v3-rnnt.json @@ -0,0 +1,52 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "gigaam-v3-rnnt", + "family": "gigaam", + "display_name": "gigaam-v3-rnnt", + "params": 221883426, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "ai-sage/GigaAM-v3", + "upstream_commit": "c7f128b", + "published_repo": "handy-computer/gigaam-v3-rnnt-gguf", + "languages": ["ru"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["token"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"gigaam-v3-rnnt-F32.gguf","size_bytes":887573536}, + {"quant":"F16","filename":"gigaam-v3-rnnt-F16.gguf","size_bytes":451084832}, + {"quant":"Q8_0","filename":"gigaam-v3-rnnt-Q8_0.gguf","size_bytes":273022880}, + {"quant":"Q6_K","filename":"gigaam-v3-rnnt-Q6_K.gguf","size_bytes":227252000}, + {"quant":"Q5_K_M","filename":"gigaam-v3-rnnt-Q5_K_M.gguf","size_bytes":205690784}, + {"quant":"Q4_K_M","filename":"gigaam-v3-rnnt-Q4_K_M.gguf","size_bytes":183246752} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ru","quant":"F32","metric":"wer","err_pct":8.08,"ci95":[7.36,8.78],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":99,"ins":221},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"F16","metric":"wer","err_pct":8.08,"ci95":[7.36,8.78],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":99,"ins":221},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.08,"ci95":[7.35,8.78],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":899,"del":99,"ins":222},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q6_K","metric":"wer","err_pct":8.07,"ci95":[7.35,8.78],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":97,"ins":222},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":8.12,"ci95":[7.38,8.84],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":98,"ins":228},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q4_K_M","metric":"wer","err_pct":8.12,"ci95":[7.4,8.85],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":901,"del":104,"ins":222},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.07,"ci95":[7.34,8.79],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":897,"del":100,"ins":222},"empty_hyp":0,"utts_over_50pct":5} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":105.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":110.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/granite-4.0-1b-speech.json b/catalog/granite-4.0-1b-speech.json new file mode 100644 index 00000000..5cfcd60f --- /dev/null +++ b/catalog/granite-4.0-1b-speech.json @@ -0,0 +1,73 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "granite-4.0-1b-speech", + "family": "granite_speech", + "display_name": "granite-4.0-1b-speech", + "params": 2313228092, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "ibm-granite/granite-4.0-1b-speech", + "upstream_commit": "bd87ab8", + "published_repo": "handy-computer/granite-4.0-1b-speech-gguf", + "languages": ["en","fr","de","es","pt","ja"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"granite-4.0-1b-speech-BF16.gguf","size_bytes":4631640064}, + {"quant":"F16","filename":"granite-4.0-1b-speech-F16.gguf","size_bytes":4632623104}, + {"quant":"Q8_0","filename":"granite-4.0-1b-speech-Q8_0.gguf","size_bytes":2559878848}, + {"quant":"Q6_K","filename":"granite-4.0-1b-speech-Q6_K.gguf","size_bytes":2024967936}, + {"quant":"Q5_K_M","filename":"granite-4.0-1b-speech-Q5_K_M.gguf","size_bytes":1829704544}, + {"quant":"Q4_K_M","filename":"granite-4.0-1b-speech-Q4_K_M.gguf","size_bytes":1602904800} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":7.29,"ci95":[6.71,7.93],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1022,"del":192,"ins":151},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":7.37,"ci95":[6.78,8.01],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1035,"del":192,"ins":153},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.66,"ci95":[4.2,5.15],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":448,"del":115,"ins":116},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.65,"ci95":[4.21,5.14],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":450,"del":112,"ins":115},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":5.91,"ci95":[5.41,6.45],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":925,"del":189,"ins":264},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":6.01,"ci95":[5.51,6.52],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":931,"del":216,"ins":254},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":8.44,"ci95":[7.72,9.24],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1030,"del":201,"ins":288},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":8.76,"ci95":[8.04,9.56],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1066,"del":207,"ins":303},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":6.44,"ci95":[5.86,6.98],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1433,"del":302,"ins":369},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":6.51,"ci95":[5.94,7.03],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1442,"del":310,"ins":373},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":9.6,"ci95":[8.89,10.34],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1362,"del":217,"ins":482},"empty_hyp":0,"utts_over_50pct":19}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":9.6,"ci95":[8.86,10.39],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1376,"del":214,"ins":471},"empty_hyp":0,"utts_over_50pct":19}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.42,"ci95":[1.28,1.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":584,"del":76,"ins":93},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.42,"ci95":[1.29,1.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":586,"del":75,"ins":94},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.44,"ci95":[1.3,1.58],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":591,"del":76,"ins":95},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.41,"ci95":[1.28,1.55],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":582,"del":73,"ins":92},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.42,"ci95":[1.28,1.56],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":581,"del":77,"ins":93},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.48,"ci95":[1.34,1.63],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":602,"del":76,"ins":108},"empty_hyp":0,"utts_over_50pct":2} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1946.6,"xrt_compute":5.651,"load_ms":6159.4,"mel_ms":0.8,"encode_ms":1193.8,"decode_ms":752.1,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":468.0,"xrt_compute":23.502,"load_ms":6236.4,"mel_ms":1.2,"encode_ms":309.2,"decode_ms":157.6,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":43.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":39.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/granite-speech-4.1-2b-nar.json b/catalog/granite-speech-4.1-2b-nar.json new file mode 100644 index 00000000..c1453589 --- /dev/null +++ b/catalog/granite-speech-4.1-2b-nar.json @@ -0,0 +1,73 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "granite-speech-4.1-2b-nar", + "family": "granite_speech_nar", + "display_name": "granite-speech-4.1-2b-nar", + "params": 2254657341, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "ibm-granite/granite-speech-4.1-2b-nar", + "upstream_commit": "99a4df9", + "published_repo": "handy-computer/granite-speech-4.1-2b-nar-gguf", + "languages": ["en","fr","de","es","pt"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"granite-speech-4.1-2b-nar-BF16.gguf","size_bytes":4514736032}, + {"quant":"F16","filename":"granite-speech-4.1-2b-nar-F16.gguf","size_bytes":4515792768}, + {"quant":"Q8_0","filename":"granite-speech-4.1-2b-nar-Q8_0.gguf","size_bytes":2498105472}, + {"quant":"Q6_K","filename":"granite-speech-4.1-2b-nar-Q6_K.gguf","size_bytes":1977417568}, + {"quant":"Q5_K_M","filename":"granite-speech-4.1-2b-nar-Q5_K_M.gguf","size_bytes":1782089344}, + {"quant":"Q4_K_M","filename":"granite-speech-4.1-2b-nar-Q4_K_M.gguf","size_bytes":1560008832} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.07,"ci95":[5.61,6.55],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":886,"del":167,"ins":83},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":5.98,"ci95":[5.55,6.47],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":886,"del":158,"ins":76},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.33,"ci95":[4.6,6.16],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":431,"del":270,"ins":75},"empty_hyp":1,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.41,"ci95":[4.67,6.2],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":433,"del":282,"ins":72},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":4.08,"ci95":[3.71,4.48],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":718,"del":141,"ins":92},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":4.14,"ci95":[3.78,4.53],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":728,"del":149,"ins":88},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":6.76,"ci95":[6.02,7.53],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":891,"del":241,"ins":84},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":6.84,"ci95":[6.1,7.59],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":896,"del":248,"ins":86},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":5.57,"ci95":[5.12,6.08],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":885,"del":134,"ins":177},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":5.6,"ci95":[5.15,6.11],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":899,"del":131,"ins":172},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.29,"ci95":[1.15,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":517,"del":84,"ins":82},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.29,"ci95":[1.15,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":518,"del":82,"ins":82},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.29,"ci95":[1.15,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":520,"del":81,"ins":82},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.29,"ci95":[1.15,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":517,"del":83,"ins":85},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.28,"ci95":[1.15,1.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":513,"del":87,"ins":80},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.34,"ci95":[1.19,1.48],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":538,"del":87,"ins":83},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.25,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.35,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2433.4,"xrt_compute":4.52,"load_ms":1169.8,"mel_ms":0.8,"encode_ms":1443.5,"decode_ms":989.2,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":534.1,"xrt_compute":20.597,"load_ms":1210.1,"mel_ms":0.7,"encode_ms":349.3,"decode_ms":184.0,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":53.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":53.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":56.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":56.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/granite-speech-4.1-2b-plus.json b/catalog/granite-speech-4.1-2b-plus.json new file mode 100644 index 00000000..b5e9c359 --- /dev/null +++ b/catalog/granite-speech-4.1-2b-plus.json @@ -0,0 +1,71 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "granite-speech-4.1-2b-plus", + "family": "granite_speech", + "display_name": "granite-speech-4.1-2b-plus", + "params": 2111899452, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "ibm-granite/granite-speech-4.1-2b-plus", + "upstream_commit": "edd3bf5", + "published_repo": "handy-computer/granite-speech-4.1-2b-plus-gguf", + "languages": ["en","fr","de","es","pt"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["word"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":true,"verified":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"granite-speech-4.1-2b-plus-BF16.gguf","size_bytes":4228988768}, + {"quant":"F16","filename":"granite-speech-4.1-2b-plus-F16.gguf","size_bytes":4229971808}, + {"quant":"Q8_0","filename":"granite-speech-4.1-2b-plus-Q8_0.gguf","size_bytes":2345973152}, + {"quant":"Q6_K","filename":"granite-speech-4.1-2b-plus-Q6_K.gguf","size_bytes":1859821504}, + {"quant":"Q5_K_M","filename":"granite-speech-4.1-2b-plus-Q5_K_M.gguf","size_bytes":1691297088}, + {"quant":"Q4_K_M","filename":"granite-speech-4.1-2b-plus-Q4_K_M.gguf","size_bytes":1489663424} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":8.06,"ci95":[7.46,8.69],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1129,"del":224,"ins":156},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":8.36,"ci95":[7.77,9.0],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1170,"del":237,"ins":157},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.46,"ci95":[3.97,4.94],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":435,"del":114,"ins":100},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.5,"ci95":[4.03,4.98],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":433,"del":120,"ins":102},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.53,"ci95":[5.96,7.12],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1030,"del":202,"ins":291},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":6.5,"ci95":[5.9,7.12],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1026,"del":222,"ins":268},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":8.82,"ci95":[8.11,9.6],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1113,"del":168,"ins":307},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":9.11,"ci95":[8.37,9.88],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1159,"del":163,"ins":317},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":10.61,"ci95":[9.59,11.88],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1498,"del":220,"ins":560},"empty_hyp":0,"utts_over_50pct":18}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":10.96,"ci95":[9.74,12.58],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1541,"del":208,"ins":605},"empty_hyp":0,"utts_over_50pct":20}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.49,"ci95":[1.35,1.64],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":600,"del":81,"ins":110},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.48,"ci95":[1.34,1.63],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":596,"del":81,"ins":109},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.5,"ci95":[1.35,1.64],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":601,"del":81,"ins":111},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.46,"ci95":[1.32,1.61],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":594,"del":79,"ins":103},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.48,"ci95":[1.33,1.63],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":600,"del":80,"ins":106},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.56,"ci95":[1.42,1.72],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":627,"del":86,"ins":116},"empty_hyp":0,"utts_over_50pct":4} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1900.1,"xrt_compute":5.789,"load_ms":5647.8,"mel_ms":0.7,"encode_ms":1209.0,"decode_ms":690.3,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":470.9,"xrt_compute":23.358,"load_ms":5691.2,"mel_ms":0.7,"encode_ms":309.2,"decode_ms":161.0,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":39.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/granite-speech-4.1-2b.json b/catalog/granite-speech-4.1-2b.json new file mode 100644 index 00000000..b69c9e19 --- /dev/null +++ b/catalog/granite-speech-4.1-2b.json @@ -0,0 +1,73 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "granite-speech-4.1-2b", + "family": "granite_speech", + "display_name": "granite-speech-4.1-2b", + "params": 2111899452, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "ibm-granite/granite-speech-4.1-2b", + "upstream_commit": "8f4bb5f", + "published_repo": "handy-computer/granite-speech-4.1-2b-gguf", + "languages": ["en","fr","de","es","pt"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["word"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":true,"verified":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"granite-speech-4.1-2b-BF16.gguf","size_bytes":4631640064}, + {"quant":"F16","filename":"granite-speech-4.1-2b-F16.gguf","size_bytes":4632623104}, + {"quant":"Q8_0","filename":"granite-speech-4.1-2b-Q8_0.gguf","size_bytes":2559878848}, + {"quant":"Q6_K","filename":"granite-speech-4.1-2b-Q6_K.gguf","size_bytes":2024967936}, + {"quant":"Q5_K_M","filename":"granite-speech-4.1-2b-Q5_K_M.gguf","size_bytes":1829704544}, + {"quant":"Q4_K_M","filename":"granite-speech-4.1-2b-Q4_K_M.gguf","size_bytes":1602904800} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.25,"ci95":[5.66,6.88],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":879,"del":169,"ins":122},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":6.12,"ci95":[5.6,6.68],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":889,"del":147,"ins":110},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.14,"ci95":[3.68,4.62],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":384,"del":134,"ins":85},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.16,"ci95":[3.73,4.61],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":393,"del":126,"ins":87},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":5.48,"ci95":[4.99,5.97],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":849,"del":149,"ins":279},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":5.52,"ci95":[5.04,6.03],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":856,"del":152,"ins":280},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":7.61,"ci95":[6.9,8.36],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":922,"del":171,"ins":277},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":7.7,"ci95":[7.0,8.45],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":943,"del":170,"ins":273},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":6.3,"ci95":[5.75,6.88],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1377,"del":331,"ins":350},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":6.59,"ci95":[6.03,7.15],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1460,"del":339,"ins":354},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":9.8,"ci95":[9.08,10.66],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1341,"del":163,"ins":601},"empty_hyp":0,"utts_over_50pct":18}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":9.54,"ci95":[8.86,10.35],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1313,"del":166,"ins":569},"empty_hyp":0,"utts_over_50pct":19}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.31,"ci95":[1.18,1.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":537,"del":63,"ins":94},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.32,"ci95":[1.19,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":538,"del":63,"ins":97},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.32,"ci95":[1.19,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":543,"del":66,"ins":90},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.29,"ci95":[1.16,1.41],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":532,"del":61,"ins":90},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.33,"ci95":[1.19,1.46],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":546,"del":68,"ins":90},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.37,"ci95":[1.24,1.5],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":559,"del":68,"ins":100},"empty_hyp":0,"utts_over_50pct":4} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1958.7,"xrt_compute":5.616,"load_ms":6171.2,"mel_ms":0.7,"encode_ms":1200.7,"decode_ms":757.2,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":467.5,"xrt_compute":23.53,"load_ms":6210.3,"mel_ms":0.7,"encode_ms":308.8,"decode_ms":158.0,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":40.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/medasr.json b/catalog/medasr.json new file mode 100644 index 00000000..4c15a89f --- /dev/null +++ b/catalog/medasr.json @@ -0,0 +1,65 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "medasr", + "family": "medasr", + "display_name": "medasr", + "params": 105316112, + "license": { + "spdx": "other", + "display": "Health AI Developer Foundations" + }, + "upstream_repo": "google/medasr", + "upstream_commit": "ae1e484", + "published_repo": "handy-computer/medasr-gguf", + "languages": ["en"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"medasr-F32.gguf","size_bytes":421301440}, + {"quant":"F16","filename":"medasr-F16.gguf","size_bytes":211455168}, + {"quant":"Q8_0","filename":"medasr-Q8_0.gguf","size_bytes":127712448}, + {"quant":"Q6_K","filename":"medasr-Q6_K.gguf","size_bytes":106094784}, + {"quant":"Q5_K_M","filename":"medasr-Q5_K_M.gguf","size_bytes":94239936}, + {"quant":"Q4_K_M","filename":"medasr-Q4_K_M.gguf","size_bytes":83082432} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":37.48,"ci95":[35.83,39.09],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3705,"del":1440,"ins":311},"empty_hyp":6,"utts_over_50pct":153}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":17.88,"ci95":[17.34,18.45],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7183,"del":1617,"ins":679},"empty_hyp":14,"utts_over_50pct":168}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":17.88,"ci95":[17.34,18.46],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7184,"del":1616,"ins":680},"empty_hyp":14,"utts_over_50pct":168}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":17.86,"ci95":[17.33,18.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7180,"del":1616,"ins":673},"empty_hyp":14,"utts_over_50pct":168}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":17.93,"ci95":[17.4,18.53],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7189,"del":1637,"ins":683},"empty_hyp":13,"utts_over_50pct":166}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":17.91,"ci95":[17.38,18.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7201,"del":1613,"ins":682},"empty_hyp":13,"utts_over_50pct":165}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":18.14,"ci95":[17.6,18.73],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7241,"del":1686,"ins":693},"empty_hyp":13,"utts_over_50pct":166}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":17.88,"ci95":[17.34,18.46],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7184,"del":1616,"ins":681},"empty_hyp":14,"utts_over_50pct":168} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":73.4,"xrt_compute":149.912,"load_ms":96.6,"mel_ms":1.0,"encode_ms":72.2,"decode_ms":0.2,"engine_sha":"d9b8667","measured_on":"2026-06-04","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":163.2,"xrt_compute":216.453,"load_ms":74.0,"mel_ms":3.0,"encode_ms":159.7,"decode_ms":0.5,"engine_sha":"d9b8667","measured_on":"2026-06-04","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":78.0,"xrt_compute":141.004,"load_ms":86.5,"mel_ms":1.0,"encode_ms":76.8,"decode_ms":0.2,"engine_sha":"d9b8667","measured_on":"2026-06-04","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":165.6,"xrt_compute":213.359,"load_ms":58.7,"mel_ms":3.1,"encode_ms":162.1,"decode_ms":0.5,"engine_sha":"d9b8667","measured_on":"2026-06-04","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":57.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":61.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":63.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":394.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":248.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":419.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":290.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":20.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":63.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-base-ar.json b/catalog/moonshine-base-ar.json new file mode 100644 index 00000000..124d21d1 --- /dev/null +++ b/catalog/moonshine-base-ar.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-base-ar", + "family": "moonshine", + "display_name": "moonshine-base-ar", + "params": 61513920, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-base-ar", + "upstream_commit": "264cc18", + "published_repo": "handy-computer/moonshine-base-ar-gguf", + "languages": ["ar"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-base-ar-F32.gguf","size_bytes":247657088}, + {"quant":"F16","filename":"moonshine-base-ar-F16.gguf","size_bytes":131789440}, + {"quant":"Q8_0","filename":"moonshine-base-ar-Q8_0.gguf","size_bytes":77476480} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ar","quant":"F32","metric":"wer","err_pct":24.45,"ci95":[21.6,27.71],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1302,"del":335,"ins":377},"empty_hyp":0,"utts_over_50pct":38}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"F16","metric":"wer","err_pct":24.45,"ci95":[21.6,27.71],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1302,"del":335,"ins":377},"empty_hyp":0,"utts_over_50pct":38}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":24.5,"ci95":[21.63,27.8],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1308,"del":335,"ins":375},"empty_hyp":0,"utts_over_50pct":38}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":24.62,"ci95":[21.58,27.85],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1316,"del":332,"ins":380},"empty_hyp":0,"utts_over_50pct":40} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-base-ja.json b/catalog/moonshine-base-ja.json new file mode 100644 index 00000000..11014f1e --- /dev/null +++ b/catalog/moonshine-base-ja.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-base-ja", + "family": "moonshine", + "display_name": "moonshine-base-ja", + "params": 61513920, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-base-ja", + "upstream_commit": "f9d4e6a", + "published_repo": "handy-computer/moonshine-base-ja-gguf", + "languages": ["ja"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-base-ja-F32.gguf","size_bytes":247657088}, + {"quant":"F16","filename":"moonshine-base-ja-F16.gguf","size_bytes":131789440}, + {"quant":"Q8_0","filename":"moonshine-base-ja-Q8_0.gguf","size_bytes":77476480} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ja","quant":"F32","metric":"cer","err_pct":10.84,"ci95":[9.82,11.93],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2046,"del":765,"ins":727},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"F16","metric":"cer","err_pct":10.81,"ci95":[9.8,11.89],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2048,"del":764,"ins":718},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":10.53,"ci95":[9.62,11.56],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2023,"del":767,"ins":649},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":11.11,"ci95":[10.05,12.36],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2075,"del":750,"ins":803},"empty_hyp":0,"utts_over_50pct":16} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-base-ko.json b/catalog/moonshine-base-ko.json new file mode 100644 index 00000000..4314f24c --- /dev/null +++ b/catalog/moonshine-base-ko.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-base-ko", + "family": "moonshine", + "display_name": "moonshine-base-ko", + "params": 61513920, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-base-ko", + "upstream_commit": "fff6035", + "published_repo": "handy-computer/moonshine-base-ko-gguf", + "languages": ["ko"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-base-ko-F32.gguf","size_bytes":247657088}, + {"quant":"F16","filename":"moonshine-base-ko-F16.gguf","size_bytes":131789440}, + {"quant":"Q8_0","filename":"moonshine-base-ko-Q8_0.gguf","size_bytes":77476480} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ko","quant":"F32","metric":"cer","err_pct":8.0,"ci95":[6.76,9.28],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":700,"del":620,"ins":95},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"F16","metric":"cer","err_pct":8.0,"ci95":[6.76,9.28],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":700,"del":620,"ins":95},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.13,"ci95":[6.88,9.51],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":703,"del":646,"ins":88},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.12,"ci95":[6.89,9.5],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":701,"del":646,"ins":88},"empty_hyp":0,"utts_over_50pct":5} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-base-uk.json b/catalog/moonshine-base-uk.json new file mode 100644 index 00000000..b5019d8f --- /dev/null +++ b/catalog/moonshine-base-uk.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-base-uk", + "family": "moonshine", + "display_name": "moonshine-base-uk", + "params": 61513920, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-base-uk", + "upstream_commit": "a52b2e9", + "published_repo": "handy-computer/moonshine-base-uk-gguf", + "languages": ["uk"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-base-uk-F32.gguf","size_bytes":247657120}, + {"quant":"F16","filename":"moonshine-base-uk-F16.gguf","size_bytes":131789472}, + {"quant":"Q8_0","filename":"moonshine-base-uk-Q8_0.gguf","size_bytes":77476512} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"uk","quant":"F32","metric":"wer","err_pct":14.49,"ci95":[13.45,15.47],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1615,"del":203,"ins":264},"empty_hyp":0,"utts_over_50pct":17}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"F16","metric":"wer","err_pct":14.49,"ci95":[13.45,15.47],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1615,"del":203,"ins":264},"empty_hyp":0,"utts_over_50pct":17}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":14.39,"ci95":[13.36,15.37],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1610,"del":199,"ins":259},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":14.38,"ci95":[13.42,15.32],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1608,"del":194,"ins":265},"empty_hyp":0,"utts_over_50pct":17} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-base-vi.json b/catalog/moonshine-base-vi.json new file mode 100644 index 00000000..1fa6935c --- /dev/null +++ b/catalog/moonshine-base-vi.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-base-vi", + "family": "moonshine", + "display_name": "moonshine-base-vi", + "params": 61513920, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-base-vi", + "upstream_commit": "0ee9ce9", + "published_repo": "handy-computer/moonshine-base-vi-gguf", + "languages": ["vi"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-base-vi-F32.gguf","size_bytes":247657120}, + {"quant":"F16","filename":"moonshine-base-vi-F16.gguf","size_bytes":131789472}, + {"quant":"Q8_0","filename":"moonshine-base-vi-Q8_0.gguf","size_bytes":77476512} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"vi","quant":"F32","metric":"wer","err_pct":9.67,"ci95":[9.06,10.33],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2013,"del":228,"ins":274},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"F16","metric":"wer","err_pct":9.66,"ci95":[9.06,10.33],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2013,"del":227,"ins":274},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.79,"ci95":[9.14,10.46],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2037,"del":229,"ins":281},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.96,"ci95":[9.25,10.79],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2019,"del":295,"ins":277},"empty_hyp":1,"utts_over_50pct":6} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-base-zh.json b/catalog/moonshine-base-zh.json new file mode 100644 index 00000000..0ff29e7e --- /dev/null +++ b/catalog/moonshine-base-zh.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-base-zh", + "family": "moonshine", + "display_name": "moonshine-base-zh", + "params": 61513920, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-base-zh", + "upstream_commit": "1df4f95", + "published_repo": "handy-computer/moonshine-base-zh-gguf", + "languages": ["zh"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-base-zh-F32.gguf","size_bytes":247657088}, + {"quant":"F16","filename":"moonshine-base-zh-F16.gguf","size_bytes":131789440}, + {"quant":"Q8_0","filename":"moonshine-base-zh-Q8_0.gguf","size_bytes":77476480} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"zh","quant":"F32","metric":"cer","err_pct":16.65,"ci95":[14.89,18.64],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2450,"del":1561,"ins":1927},"empty_hyp":0,"utts_over_50pct":47}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"F16","metric":"cer","err_pct":16.65,"ci95":[14.89,18.64],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2450,"del":1561,"ins":1927},"empty_hyp":0,"utts_over_50pct":47}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":17.0,"ci95":[15.14,18.92],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2449,"del":1555,"ins":2057},"empty_hyp":0,"utts_over_50pct":52}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":17.79,"ci95":[15.81,19.77],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2587,"del":1557,"ins":2200},"empty_hyp":0,"utts_over_50pct":59} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-base.json b/catalog/moonshine-base.json new file mode 100644 index 00000000..3cbbb89e --- /dev/null +++ b/catalog/moonshine-base.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-base", + "family": "moonshine", + "display_name": "moonshine-base", + "params": 61513920, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-base", + "upstream_commit": "7a73d8d", + "published_repo": "handy-computer/moonshine-base-gguf", + "languages": ["en"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-base-F32.gguf","size_bytes":247657088}, + {"quant":"F16","filename":"moonshine-base-F16.gguf","size_bytes":131789440}, + {"quant":"Q8_0","filename":"moonshine-base-Q8_0.gguf","size_bytes":77476480} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":12.25,"ci95":[10.67,14.04],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":897,"del":634,"ins":252},"empty_hyp":20,"utts_over_50pct":23}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.28,"ci95":[3.07,3.5],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1291,"del":204,"ins":245},"empty_hyp":2,"utts_over_50pct":19}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.28,"ci95":[3.07,3.5],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1290,"del":204,"ins":244},"empty_hyp":2,"utts_over_50pct":19}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.26,"ci95":[3.04,3.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1285,"del":205,"ins":240},"empty_hyp":2,"utts_over_50pct":18} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-streaming-medium.json b/catalog/moonshine-streaming-medium.json new file mode 100644 index 00000000..78de110d --- /dev/null +++ b/catalog/moonshine-streaming-medium.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-streaming-medium", + "family": "moonshine_streaming", + "display_name": "moonshine-streaming-medium", + "params": 265898113, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-streaming-medium", + "upstream_commit": "57b8436", + "published_repo": "handy-computer/moonshine-streaming-medium-gguf", + "languages": ["en"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":true,"verified":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-streaming-medium-F32.gguf","size_bytes":1065204640}, + {"quant":"F16","filename":"moonshine-streaming-medium-F16.gguf","size_bytes":533781408}, + {"quant":"Q8_0","filename":"moonshine-streaming-medium-Q8_0.gguf","size_bytes":295793568} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.87,"ci95":[6.97,8.85],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":698,"del":301,"ins":147},"empty_hyp":7,"utts_over_50pct":10}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.16,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.16,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.16,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":39.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":37.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":89.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-streaming-small.json b/catalog/moonshine-streaming-small.json new file mode 100644 index 00000000..7439baee --- /dev/null +++ b/catalog/moonshine-streaming-small.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-streaming-small", + "family": "moonshine_streaming", + "display_name": "moonshine-streaming-small", + "params": 140135225, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-streaming-small", + "upstream_commit": "2c03650", + "published_repo": "handy-computer/moonshine-streaming-small-gguf", + "languages": ["en"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":true,"verified":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-streaming-small-F32.gguf","size_bytes":562146912}, + {"quant":"F16","filename":"moonshine-streaming-small-F16.gguf","size_bytes":282092128}, + {"quant":"Q8_0","filename":"moonshine-streaming-small-Q8_0.gguf","size_bytes":198506848} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":8.55,"ci95":[7.84,9.34],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":880,"del":189,"ins":175},"empty_hyp":1,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.54,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":51.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":63.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":58.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":134.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-streaming-tiny.json b/catalog/moonshine-streaming-tiny.json new file mode 100644 index 00000000..bee8b86e --- /dev/null +++ b/catalog/moonshine-streaming-tiny.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-streaming-tiny", + "family": "moonshine_streaming", + "display_name": "moonshine-streaming-tiny", + "params": 44054721, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-streaming-tiny", + "upstream_commit": "f8e9dfd", + "published_repo": "handy-computer/moonshine-streaming-tiny-gguf", + "languages": ["en"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":true,"verified":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-streaming-tiny-F32.gguf","size_bytes":177817696}, + {"quant":"F16","filename":"moonshine-streaming-tiny-F16.gguf","size_bytes":89784416}, + {"quant":"Q8_0","filename":"moonshine-streaming-tiny-Q8_0.gguf","size_bytes":50462816} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":18.18,"ci95":[15.79,22.01],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1732,"del":297,"ins":617},"empty_hyp":1,"utts_over_50pct":25}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":4.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":4.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.52,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":172.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":250.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":100.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":218.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":40.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":69.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":40.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":79.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-tiny-ar.json b/catalog/moonshine-tiny-ar.json new file mode 100644 index 00000000..0680a135 --- /dev/null +++ b/catalog/moonshine-tiny-ar.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-tiny-ar", + "family": "moonshine", + "display_name": "moonshine-tiny-ar", + "params": 27092736, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-tiny-ar", + "upstream_commit": "99e7fee", + "published_repo": "handy-computer/moonshine-tiny-ar-gguf", + "languages": ["ar"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-tiny-ar-F32.gguf","size_bytes":109969088}, + {"quant":"F16","filename":"moonshine-tiny-ar-F16.gguf","size_bytes":59244224}, + {"quant":"Q8_0","filename":"moonshine-tiny-ar-Q8_0.gguf","size_bytes":35466944} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ar","quant":"F32","metric":"wer","err_pct":27.11,"ci95":[24.57,29.98],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1603,"del":343,"ins":287},"empty_hyp":0,"utts_over_50pct":44}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"F16","metric":"wer","err_pct":27.11,"ci95":[24.57,29.98],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1603,"del":343,"ins":287},"empty_hyp":0,"utts_over_50pct":44}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":26.79,"ci95":[24.3,29.6],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1597,"del":344,"ins":266},"empty_hyp":0,"utts_over_50pct":42}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":26.7,"ci95":[24.08,29.47],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1597,"del":339,"ins":263},"empty_hyp":0,"utts_over_50pct":42} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-tiny-ja.json b/catalog/moonshine-tiny-ja.json new file mode 100644 index 00000000..210facec --- /dev/null +++ b/catalog/moonshine-tiny-ja.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-tiny-ja", + "family": "moonshine", + "display_name": "moonshine-tiny-ja", + "params": 27092736, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-tiny-ja", + "upstream_commit": "02ca41b", + "published_repo": "handy-computer/moonshine-tiny-ja-gguf", + "languages": ["ja"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-tiny-ja-F32.gguf","size_bytes":109969088}, + {"quant":"F16","filename":"moonshine-tiny-ja-F16.gguf","size_bytes":59244224}, + {"quant":"Q8_0","filename":"moonshine-tiny-ja-Q8_0.gguf","size_bytes":35466944} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ja","quant":"F32","metric":"cer","err_pct":13.2,"ci95":[12.42,14.14],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3010,"del":699,"ins":601},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"F16","metric":"cer","err_pct":13.2,"ci95":[12.41,14.15],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3010,"del":697,"ins":602},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":13.36,"ci95":[12.52,14.33],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3056,"del":697,"ins":608},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":13.44,"ci95":[12.64,14.35],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3039,"del":712,"ins":638},"empty_hyp":0,"utts_over_50pct":9} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-tiny-ko.json b/catalog/moonshine-tiny-ko.json new file mode 100644 index 00000000..f03039d5 --- /dev/null +++ b/catalog/moonshine-tiny-ko.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-tiny-ko", + "family": "moonshine", + "display_name": "moonshine-tiny-ko", + "params": 27092736, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-tiny-ko", + "upstream_commit": "80995f0", + "published_repo": "handy-computer/moonshine-tiny-ko-gguf", + "languages": ["ko"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-tiny-ko-F32.gguf","size_bytes":109969088}, + {"quant":"F16","filename":"moonshine-tiny-ko-F16.gguf","size_bytes":59244224}, + {"quant":"Q8_0","filename":"moonshine-tiny-ko-Q8_0.gguf","size_bytes":35466944} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ko","quant":"F32","metric":"cer","err_pct":8.97,"ci95":[7.8,10.21],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":930,"del":561,"ins":95},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"F16","metric":"cer","err_pct":8.97,"ci95":[7.8,10.21],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":930,"del":561,"ins":95},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.98,"ci95":[7.79,10.24],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":932,"del":559,"ins":96},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":9.0,"ci95":[7.86,10.19],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":934,"del":561,"ins":96},"empty_hyp":0,"utts_over_50pct":2} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-tiny-uk.json b/catalog/moonshine-tiny-uk.json new file mode 100644 index 00000000..08adeb8a --- /dev/null +++ b/catalog/moonshine-tiny-uk.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-tiny-uk", + "family": "moonshine", + "display_name": "moonshine-tiny-uk", + "params": 27092736, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-tiny-uk", + "upstream_commit": "8cf70f4", + "published_repo": "handy-computer/moonshine-tiny-uk-gguf", + "languages": ["uk"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-tiny-uk-F32.gguf","size_bytes":109969088}, + {"quant":"F16","filename":"moonshine-tiny-uk-F16.gguf","size_bytes":59244224}, + {"quant":"Q8_0","filename":"moonshine-tiny-uk-Q8_0.gguf","size_bytes":35466944} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"uk","quant":"F32","metric":"wer","err_pct":18.83,"ci95":[17.77,20.0],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2075,"del":225,"ins":406},"empty_hyp":0,"utts_over_50pct":36}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"F16","metric":"wer","err_pct":18.82,"ci95":[17.76,19.99],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2074,"del":224,"ins":407},"empty_hyp":0,"utts_over_50pct":36}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":18.89,"ci95":[17.83,20.04],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2081,"del":223,"ins":411},"empty_hyp":0,"utts_over_50pct":40}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":18.76,"ci95":[17.7,19.93],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2065,"del":229,"ins":402},"empty_hyp":0,"utts_over_50pct":40} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-tiny-vi.json b/catalog/moonshine-tiny-vi.json new file mode 100644 index 00000000..0f632b60 --- /dev/null +++ b/catalog/moonshine-tiny-vi.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-tiny-vi", + "family": "moonshine", + "display_name": "moonshine-tiny-vi", + "params": 27092736, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-tiny-vi", + "upstream_commit": "d4d20da", + "published_repo": "handy-computer/moonshine-tiny-vi-gguf", + "languages": ["vi"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-tiny-vi-F32.gguf","size_bytes":109969088}, + {"quant":"F16","filename":"moonshine-tiny-vi-F16.gguf","size_bytes":59244224}, + {"quant":"Q8_0","filename":"moonshine-tiny-vi-Q8_0.gguf","size_bytes":35466944} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"vi","quant":"F32","metric":"wer","err_pct":13.16,"ci95":[12.42,13.96],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2793,"del":227,"ins":404},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"F16","metric":"wer","err_pct":13.17,"ci95":[12.44,13.97],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2793,"del":227,"ins":407},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.16,"ci95":[12.41,13.96],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2791,"del":230,"ins":404},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.37,"ci95":[12.57,14.23],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2801,"del":279,"ins":400},"empty_hyp":1,"utts_over_50pct":13} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-tiny-zh.json b/catalog/moonshine-tiny-zh.json new file mode 100644 index 00000000..7c823694 --- /dev/null +++ b/catalog/moonshine-tiny-zh.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-tiny-zh", + "family": "moonshine", + "display_name": "moonshine-tiny-zh", + "params": 27092736, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-tiny-zh", + "upstream_commit": "3306270", + "published_repo": "handy-computer/moonshine-tiny-zh-gguf", + "languages": ["zh"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-tiny-zh-F32.gguf","size_bytes":109969088}, + {"quant":"F16","filename":"moonshine-tiny-zh-F16.gguf","size_bytes":59244224}, + {"quant":"Q8_0","filename":"moonshine-tiny-zh-Q8_0.gguf","size_bytes":35466944} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"zh","quant":"F32","metric":"cer","err_pct":13.7,"ci95":[12.7,14.68],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2843,"del":1574,"ins":467},"empty_hyp":0,"utts_over_50pct":18}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"F16","metric":"cer","err_pct":13.7,"ci95":[12.7,14.68],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2843,"del":1574,"ins":467},"empty_hyp":0,"utts_over_50pct":18}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":13.78,"ci95":[12.8,14.82],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2846,"del":1581,"ins":487},"empty_hyp":0,"utts_over_50pct":18}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":13.88,"ci95":[12.83,14.93],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2880,"del":1579,"ins":489},"empty_hyp":0,"utts_over_50pct":20} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moonshine-tiny.json b/catalog/moonshine-tiny.json new file mode 100644 index 00000000..bf721e2a --- /dev/null +++ b/catalog/moonshine-tiny.json @@ -0,0 +1,46 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moonshine-tiny", + "family": "moonshine", + "display_name": "moonshine-tiny", + "params": 27092736, + "license": { + "spdx": "mit", + "display": "MIT" + }, + "upstream_repo": "UsefulSensors/moonshine-tiny", + "upstream_commit": "390624e", + "published_repo": "handy-computer/moonshine-tiny-gguf", + "languages": ["en"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"moonshine-tiny-F32.gguf","size_bytes":109969056}, + {"quant":"F16","filename":"moonshine-tiny-F16.gguf","size_bytes":59244192}, + {"quant":"Q8_0","filename":"moonshine-tiny-Q8_0.gguf","size_bytes":35466912} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":14.13,"ci95":[12.44,16.27],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1372,"del":184,"ins":501},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":4.58,"ci95":[4.3,4.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1858,"del":248,"ins":321},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":4.58,"ci95":[4.3,4.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1858,"del":248,"ins":321},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.6,"ci95":[4.32,4.86],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1863,"del":250,"ins":324},"empty_hyp":0,"utts_over_50pct":17} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/moss-transcribe-diarize.json b/catalog/moss-transcribe-diarize.json new file mode 100644 index 00000000..3ef15280 --- /dev/null +++ b/catalog/moss-transcribe-diarize.json @@ -0,0 +1,64 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "moss-transcribe-diarize", + "family": "moss", + "display_name": "moss-transcribe-diarize", + "params": 908529760, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "OpenMOSS-Team/MOSS-Transcribe-Diarize", + "upstream_commit": "d7231bb", + "published_repo": "handy-computer/MOSS-Transcribe-Diarize-gguf", + "languages": ["en","zh"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":true,"verified":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"MOSS-Transcribe-Diarize-BF16.gguf","size_bytes":1826882720}, + {"quant":"F16","filename":"MOSS-Transcribe-Diarize-F16.gguf","size_bytes":1833665696}, + {"quant":"Q8_0","filename":"MOSS-Transcribe-Diarize-Q8_0.gguf","size_bytes":986899616}, + {"quant":"Q6_K","filename":"MOSS-Transcribe-Diarize-Q6_K.gguf","size_bytes":768151712}, + {"quant":"Q5_K_M","filename":"MOSS-Transcribe-Diarize-Q5_K_M.gguf","size_bytes":700313760}, + {"quant":"Q4_K_M","filename":"MOSS-Transcribe-Diarize-Q4_K_M.gguf","size_bytes":617345184} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.13,"ci95":[4.57,5.78],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":453,"del":103,"ins":191},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.3,"ci95":[4.67,6.01],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":457,"del":103,"ins":212},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":9.23,"ci95":[8.2,10.17],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1404,"del":1504,"ins":382},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":9.19,"ci95":[8.2,10.14],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1395,"del":1504,"ins":377},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.08,"ci95":[1.83,2.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":779,"del":204,"ins":118},"empty_hyp":3,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.07,"ci95":[1.82,2.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":778,"del":204,"ins":118},"empty_hyp":3,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.93,"ci95":[1.77,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":770,"del":137,"ins":116},"empty_hyp":2,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.96,"ci95":[1.8,2.12],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":775,"del":142,"ins":121},"empty_hyp":2,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.99,"ci95":[1.82,2.16],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":794,"del":139,"ins":120},"empty_hyp":2,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.59,"ci95":[2.15,3.18],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":837,"del":325,"ins":210},"empty_hyp":6,"utts_over_50pct":13}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.08,"ci95":[1.83,2.4],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":779,"del":204,"ins":118},"empty_hyp":3,"utts_over_50pct":4} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":30.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":28.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/multitalker-parakeet-streaming-0.6b-v1.json b/catalog/multitalker-parakeet-streaming-0.6b-v1.json new file mode 100644 index 00000000..d79ed673 --- /dev/null +++ b/catalog/multitalker-parakeet-streaming-0.6b-v1.json @@ -0,0 +1,61 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "multitalker-parakeet-streaming-0.6b-v1", + "family": "parakeet", + "display_name": "multitalker-parakeet-streaming-0.6b-v1", + "params": 622278145, + "license": { + "spdx": "other", + "display": "NVIDIA Open Model License" + }, + "upstream_repo": "nvidia/multitalker-parakeet-streaming-0.6b-v1", + "upstream_commit": "8749fc7", + "published_repo": "handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":true,"verified":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"multitalker-parakeet-streaming-0.6b-v1-F32.gguf","size_bytes":2489180480}, + {"quant":"F16","filename":"multitalker-parakeet-streaming-0.6b-v1-F16.gguf","size_bytes":1246058304}, + {"quant":"Q8_0","filename":"multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf","size_bytes":734123712}, + {"quant":"Q6_K","filename":"multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf","size_bytes":603878080}, + {"quant":"Q5_K_M","filename":"multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf","size_bytes":541890240}, + {"quant":"Q4_K_M","filename":"multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf","size_bytes":477812416} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.52,"ci95":[5.95,7.12],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":672,"del":172,"ins":105},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.19,"ci95":[2.03,2.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":874,"del":174,"ins":115},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.19,"ci95":[2.03,2.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":871,"del":176,"ins":115},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.18,"ci95":[2.02,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":173,"ins":114},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.2,"ci95":[2.04,2.38],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":875,"del":174,"ins":119},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.18,"ci95":[2.01,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":169,"ins":116},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.18,"ci95":[2.02,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":864,"del":176,"ins":117},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.37,"ci95":[2.2,2.55],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":907,"del":232,"ins":118},"empty_hyp":0,"utts_over_50pct":9} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":191.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":159.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":192.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":164.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":24.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/nemotron-3.5-asr-streaming-0.6b.json b/catalog/nemotron-3.5-asr-streaming-0.6b.json new file mode 100644 index 00000000..a2d49859 --- /dev/null +++ b/catalog/nemotron-3.5-asr-streaming-0.6b.json @@ -0,0 +1,115 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "nemotron-3.5-asr-streaming-0.6b", + "family": "parakeet", + "display_name": "nemotron-3.5-asr-streaming-0.6b", + "params": 637991968, + "license": { + "spdx": "other", + "display": "OpenMDW-1.1" + }, + "upstream_repo": "nvidia/nemotron-3.5-asr-streaming-0.6b", + "upstream_commit": "24b151a", + "published_repo": "handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf", + "languages": [ + "en-US", "en-GB", "es-US", "es-ES", "fr-FR", "fr-CA", "it-IT", "pt-BR", + "pt-PT", "nl-NL", "de-DE", "tr-TR", "ru-RU", "ar-AR", "hi-IN", "ja-JP", + "ko-KR", "vi-VN", "uk-UA", "pl-PL", "sv-SE", "cs-CZ", "nb-NO", "da-DK", + "bg-BG", "fi-FI", "hr-HR", "sk-SK", "zh-CN", "hu-HU", "ro-RO", "et-EE", + "el-GR", "lt-LT", "lv-LV", "mt-MT", "sl-SI", "he-IL", "th-TH", "nn-NO" + ], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"nemotron-3.5-asr-streaming-0.6b-F32.gguf","size_bytes":2552277984}, + {"quant":"F16","filename":"nemotron-3.5-asr-streaming-0.6b-F16.gguf","size_bytes":1277750240}, + {"quant":"Q8_0","filename":"nemotron-3.5-asr-streaming-0.6b-Q8_0.gguf","size_bytes":751094240}, + {"quant":"Q6_K","filename":"nemotron-3.5-asr-streaming-0.6b-Q6_K.gguf","size_bytes":621356512}, + {"quant":"Q5_K_M","filename":"nemotron-3.5-asr-streaming-0.6b-Q5_K_M.gguf","size_bytes":559647200}, + {"quant":"Q4_K_M","filename":"nemotron-3.5-asr-streaming-0.6b-Q4_K_M.gguf","size_bytes":495831520} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":15.93,"ci95":[14.47,17.54],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":322,"ins":121},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":22.02,"ci95":[21.07,23.05],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2369,"del":551,"ins":201},"empty_hyp":0,"utts_over_50pct":27}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":23.0,"ci95":[21.89,24.02],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2543,"del":283,"ins":324},"empty_hyp":0,"utts_over_50pct":37}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":28.51,"ci95":[27.49,29.47],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4354,"del":786,"ins":606},"empty_hyp":1,"utts_over_50pct":88}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":10.33,"ci95":[9.58,11.13],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1373,"del":254,"ins":306},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"en","quant":"F32","metric":"wer","err_pct":7.97,"ci95":[7.33,8.7],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":796,"del":265,"ins":99},"empty_hyp":1,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"en","quant":"F16","metric":"wer","err_pct":7.97,"ci95":[7.33,8.7],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":796,"del":264,"ins":100},"empty_hyp":1,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.88,"ci95":[7.25,8.52],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":808,"del":235,"ins":104},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":8.02,"ci95":[7.39,8.71],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":824,"del":228,"ins":116},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":8.15,"ci95":[7.46,8.88],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":805,"del":282,"ins":99},"empty_hyp":1,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":8.49,"ci95":[7.8,9.23],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":840,"del":289,"ins":107},"empty_hyp":1,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.9,"ci95":[7.23,8.54],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":811,"del":232,"ins":107},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.3,"ci95":[5.75,6.89],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":970,"del":154,"ins":344},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":31.84,"ci95":[30.63,32.85],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3573,"del":513,"ins":652},"empty_hyp":0,"utts_over_50pct":135}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":21.91,"ci95":[20.93,22.94],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2534,"del":394,"ins":314},"empty_hyp":0,"utts_over_50pct":50}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":10.78,"ci95":[10.02,11.57],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1386,"del":201,"ins":352},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":8.61,"ci95":[7.67,9.7],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":810,"del":436,"ins":368},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":26.21,"ci95":[25.13,27.33],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3600,"del":567,"ins":486},"empty_hyp":0,"utts_over_50pct":73}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":32.12,"ci95":[30.89,33.35],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4353,"del":576,"ins":555},"empty_hyp":0,"utts_over_50pct":135}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":5.78,"ci95":[5.24,6.28],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":868,"del":147,"ins":213},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":13.52,"ci95":[12.78,14.27],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3193,"del":816,"ins":404},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.89,"ci95":[7.78,10.06],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":888,"del":582,"ins":101},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":19.24,"ci95":[17.92,20.58],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1072,"del":234,"ins":160},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":13.61,"ci95":[12.47,14.7],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":859,"del":165,"ins":119},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":17.54,"ci95":[16.58,18.5],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1903,"del":243,"ins":377},"empty_hyp":0,"utts_over_50pct":17}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":8.52,"ci95":[7.77,9.34],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1113,"del":145,"ins":572},"empty_hyp":0,"utts_over_50pct":16}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":28.28,"ci95":[27.12,29.36],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4345,"del":917,"ins":621},"empty_hyp":0,"utts_over_50pct":100}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":12.61,"ci95":[11.87,13.4],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1480,"del":156,"ins":268},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":23.25,"ci95":[22.21,24.21],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2870,"del":426,"ins":248},"empty_hyp":3,"utts_over_50pct":36}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":24.32,"ci95":[23.32,25.3],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2776,"del":647,"ins":319},"empty_hyp":0,"utts_over_50pct":40}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":15.4,"ci95":[14.46,16.35],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1482,"del":368,"ins":197},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":14.88,"ci95":[14.02,15.72],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1693,"del":259,"ins":186},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.96,"ci95":[13.09,14.83],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2616,"del":365,"ins":652},"empty_hyp":0,"utts_over_50pct":17}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":18.87,"ci95":[17.82,19.91],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4197,"del":2147,"ins":385},"empty_hyp":0,"utts_over_50pct":28}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.04,"ci95":[2.83,3.24],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1258,"del":200,"ins":153},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.04,"ci95":[2.83,3.24],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1257,"del":202,"ins":153},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.05,"ci95":[2.85,3.26],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1267,"del":197,"ins":154},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.08,"ci95":[2.88,3.28],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1272,"del":204,"ins":157},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.1,"ci95":[2.9,3.3],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1280,"del":203,"ins":159},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.3,"ci95":[3.1,3.51],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1372,"del":219,"ins":161},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.03,"ci95":[2.85,3.21],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1255,"del":198,"ins":152},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.03,"ci95":[2.85,3.21],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1254,"del":199,"ins":152},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.04,"ci95":[2.86,3.23],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1266,"del":192,"ins":153},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.07,"ci95":[2.89,3.26],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1267,"del":202,"ins":158},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.1,"ci95":[2.91,3.3],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1280,"del":206,"ins":158},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.32,"ci95":[3.12,3.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1376,"del":224,"ins":160},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.06,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.28,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":640.5,"xrt_compute":17.174,"load_ms":223.3,"mel_ms":0.7,"encode_ms":521.7,"decode_ms":118.1,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2232.0,"xrt_compute":15.83,"load_ms":232.4,"mel_ms":2.0,"encode_ms":1758.3,"decode_ms":471.7,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":671.6,"xrt_compute":16.379,"load_ms":180.3,"mel_ms":0.8,"encode_ms":552.5,"decode_ms":118.4,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2314.9,"xrt_compute":15.263,"load_ms":177.9,"mel_ms":1.9,"encode_ms":1841.8,"decode_ms":471.2,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":271.9,"xrt_compute":40.454,"load_ms":179.2,"mel_ms":0.8,"encode_ms":153.0,"decode_ms":118.1,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":970.6,"xrt_compute":36.403,"load_ms":195.9,"mel_ms":2.0,"encode_ms":498.2,"decode_ms":470.4,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":273.9,"xrt_compute":40.163,"load_ms":173.1,"mel_ms":0.7,"encode_ms":155.1,"decode_ms":118.1,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":979.9,"xrt_compute":36.059,"load_ms":144.9,"mel_ms":2.0,"encode_ms":504.7,"decode_ms":473.2,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":96.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":98.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":98.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":98.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/nemotron-speech-streaming-en-0.6b.json b/catalog/nemotron-speech-streaming-en-0.6b.json new file mode 100644 index 00000000..5e03a095 --- /dev/null +++ b/catalog/nemotron-speech-streaming-en-0.6b.json @@ -0,0 +1,74 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "nemotron-speech-streaming-en-0.6b", + "family": "parakeet", + "display_name": "nemotron-speech-streaming-en-0.6b", + "params": 618079745, + "license": { + "spdx": "other", + "display": "NVIDIA Open Model License" + }, + "upstream_repo": "nvidia/nemotron-speech-streaming-en-0.6b", + "upstream_commit": "ef3bf40", + "published_repo": "handy-computer/nemotron-speech-streaming-en-0.6b-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":true,"verified":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"nemotron-speech-streaming-en-0.6b-F32.gguf","size_bytes":2472386176}, + {"quant":"F16","filename":"nemotron-speech-streaming-en-0.6b-F16.gguf","size_bytes":1237652608}, + {"quant":"Q8_0","filename":"nemotron-speech-streaming-en-0.6b-Q8_0.gguf","size_bytes":729650176}, + {"quant":"Q6_K","filename":"nemotron-speech-streaming-en-0.6b-Q6_K.gguf","size_bytes":600420352}, + {"quant":"Q5_K_M","filename":"nemotron-speech-streaming-en-0.6b-Q5_K_M.gguf","size_bytes":538989568}, + {"quant":"Q4_K_M","filename":"nemotron-speech-streaming-en-0.6b-Q4_K_M.gguf","size_bytes":475436032} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.43,"ci95":[5.81,7.14],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":624,"del":218,"ins":94},"empty_hyp":2,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.31,"ci95":[2.13,2.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":939,"del":159,"ins":128},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.31,"ci95":[2.13,2.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":939,"del":159,"ins":128},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.31,"ci95":[2.12,2.5],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":935,"del":161,"ins":127},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.29,"ci95":[2.1,2.46],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":935,"del":157,"ins":120},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.34,"ci95":[2.15,2.53],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":952,"del":157,"ins":130},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.38,"ci95":[2.2,2.56],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":960,"del":168,"ins":135},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.32,"ci95":[2.13,2.51],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":941,"del":160,"ins":129},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.32,"ci95":[2.13,2.5],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":941,"del":160,"ins":128},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.32,"ci95":[2.14,2.49],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":944,"del":161,"ins":126},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.31,"ci95":[2.13,2.48],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":943,"del":161,"ins":120},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.33,"ci95":[2.15,2.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":951,"del":150,"ins":135},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.4,"ci95":[2.21,2.58],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":964,"del":175,"ins":132},"empty_hyp":0,"utts_over_50pct":7} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":604.3,"xrt_compute":18.203,"load_ms":212.0,"mel_ms":0.7,"encode_ms":523.1,"decode_ms":80.4,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2049.4,"xrt_compute":17.24,"load_ms":208.6,"mel_ms":1.9,"encode_ms":1748.0,"decode_ms":299.5,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":629.7,"xrt_compute":17.469,"load_ms":154.2,"mel_ms":0.7,"encode_ms":549.5,"decode_ms":79.5,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2144.2,"xrt_compute":16.478,"load_ms":169.8,"mel_ms":1.9,"encode_ms":1843.1,"decode_ms":299.2,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":231.7,"xrt_compute":47.475,"load_ms":179.0,"mel_ms":0.7,"encode_ms":151.4,"decode_ms":79.6,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":797.3,"xrt_compute":44.315,"load_ms":165.7,"mel_ms":2.0,"encode_ms":497.8,"decode_ms":297.6,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":234.0,"xrt_compute":47.006,"load_ms":141.3,"mel_ms":0.7,"encode_ms":154.2,"decode_ms":79.1,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":806.6,"xrt_compute":43.804,"load_ms":134.3,"mel_ms":1.9,"encode_ms":504.6,"decode_ms":300.1,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":160.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/parakeet-ctc-0.6b.json b/catalog/parakeet-ctc-0.6b.json new file mode 100644 index 00000000..6eaef08a --- /dev/null +++ b/catalog/parakeet-ctc-0.6b.json @@ -0,0 +1,64 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "parakeet-ctc-0.6b", + "family": "parakeet", + "display_name": "parakeet-ctc-0.6b", + "params": 608848897, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/parakeet-ctc-0.6b", + "upstream_commit": "ad09ba1", + "published_repo": "handy-computer/parakeet-ctc-0.6b-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["token"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"parakeet-ctc-0.6b-F32.gguf","size_bytes":2435482816}, + {"quant":"F16","filename":"parakeet-ctc-0.6b-F16.gguf","size_bytes":1220181184}, + {"quant":"Q8_0","filename":"parakeet-ctc-0.6b-Q8_0.gguf","size_bytes":722271424}, + {"quant":"Q6_K","filename":"parakeet-ctc-0.6b-Q6_K.gguf","size_bytes":593644736}, + {"quant":"Q5_K_M","filename":"parakeet-ctc-0.6b-Q5_K_M.gguf","size_bytes":532544704}, + {"quant":"Q4_K_M","filename":"parakeet-ctc-0.6b-Q4_K_M.gguf","size_bytes":469302464} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.53,"ci95":[5.06,6.07],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":578,"del":121,"ins":106},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.87,"ci95":[1.71,2.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":770,"del":112,"ins":109},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.87,"ci95":[1.71,2.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":112,"ins":108},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.87,"ci95":[1.71,2.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":111,"ins":110},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.84,"ci95":[1.69,2.0],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":767,"del":107,"ins":104},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.87,"ci95":[1.71,2.04],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":768,"del":111,"ins":115},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.9,"ci95":[1.73,2.06],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":781,"del":109,"ins":115},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.86,"ci95":[1.71,2.02],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":770,"del":109,"ins":109},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.85,"ci95":[1.7,2.01],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":765,"del":108,"ins":109},"empty_hyp":0,"utts_over_50pct":7} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":132.2,"xrt_compute":83.205,"load_ms":372.5,"mel_ms":0.7,"encode_ms":130.7,"decode_ms":0.8,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":430.3,"xrt_compute":82.118,"load_ms":180.0,"mel_ms":1.9,"encode_ms":426.2,"decode_ms":2.2,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":37.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":244.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":185.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":246.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":191.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":24.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":20.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":24.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/parakeet-ctc-1.1b.json b/catalog/parakeet-ctc-1.1b.json new file mode 100644 index 00000000..6c07261a --- /dev/null +++ b/catalog/parakeet-ctc-1.1b.json @@ -0,0 +1,63 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "parakeet-ctc-1.1b", + "family": "parakeet", + "display_name": "parakeet-ctc-1.1b", + "params": 1062626305, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/parakeet-ctc-1.1b", + "upstream_commit": "a707e81", + "published_repo": "handy-computer/parakeet-ctc-1.1b-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["token"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"parakeet-ctc-1.1b-F32.gguf","size_bytes":4250639392}, + {"quant":"F16","filename":"parakeet-ctc-1.1b-F16.gguf","size_bytes":2129368096}, + {"quant":"Q8_0","filename":"parakeet-ctc-1.1b-Q8_0.gguf","size_bytes":1259869216}, + {"quant":"Q6_K","filename":"parakeet-ctc-1.1b-Q6_K.gguf","size_bytes":1035248672}, + {"quant":"Q5_K_M","filename":"parakeet-ctc-1.1b-Q5_K_M.gguf","size_bytes":928584736}, + {"quant":"Q4_K_M","filename":"parakeet-ctc-1.1b-Q4_K_M.gguf","size_bytes":818156576} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.61,"ci95":[5.04,6.21],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":567,"del":106,"ins":143},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.61,"ci95":[5.05,6.19],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":572,"del":110,"ins":135},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.85,"ci95":[1.68,2.01],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":766,"del":98,"ins":116},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.85,"ci95":[1.68,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":768,"del":98,"ins":116},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.85,"ci95":[1.68,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":98,"ins":115},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.85,"ci95":[1.69,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":762,"del":101,"ins":119},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.84,"ci95":[1.68,2.01],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":97,"ins":118},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.9,"ci95":[1.74,2.07],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":788,"del":105,"ins":116},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.83,"ci95":[1.67,2.0],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":761,"del":97,"ins":115},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.85,"ci95":[1.68,2.02],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":767,"del":97,"ins":115},"empty_hyp":0,"utts_over_50pct":3} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":21.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":118.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":121.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/parakeet-primeline.json b/catalog/parakeet-primeline.json new file mode 100644 index 00000000..f8432472 --- /dev/null +++ b/catalog/parakeet-primeline.json @@ -0,0 +1,88 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "parakeet-primeline", + "family": "parakeet", + "display_name": "parakeet-primeline", + "params": 627052166, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "primeline/parakeet-primeline", + "upstream_commit": "3f1a9bc", + "published_repo": "handy-computer/parakeet-primeline-gguf", + "languages": [ + "bg", "hr", "cs", "da", "nl", "en", "et", "fi", "fr", "de", "el", "hu", + "it", "lv", "lt", "mt", "pl", "pt", "ro", "ru", "sk", "sl", "es", "sv", + "uk" + ], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"parakeet-primeline-F32.gguf","size_bytes":2508435680}, + {"quant":"F16","filename":"parakeet-primeline-F16.gguf","size_bytes":1255869920}, + {"quant":"Q8_0","filename":"parakeet-primeline-Q8_0.gguf","size_bytes":739508640}, + {"quant":"Q6_K","filename":"parakeet-primeline-Q6_K.gguf","size_bytes":610342304}, + {"quant":"Q5_K_M","filename":"parakeet-primeline-Q5_K_M.gguf","size_bytes":548946336}, + {"quant":"Q4_K_M","filename":"parakeet-primeline-Q4_K_M.gguf","size_bytes":485425568} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":16.33,"ci95":[15.43,17.24],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1790,"del":414,"ins":110},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":15.05,"ci95":[14.18,16.05],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1757,"del":212,"ins":92},"empty_hyp":0,"utts_over_50pct":28}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":20.52,"ci95":[19.78,21.34],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3315,"del":603,"ins":219},"empty_hyp":1,"utts_over_50pct":40}, + {"dataset":"fleurs","split":"test","language":"de","quant":"F32","metric":"wer","err_pct":6.0,"ci95":[5.51,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":903,"del":145,"ins":74},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"de","quant":"F16","metric":"wer","err_pct":6.0,"ci95":[5.51,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":903,"del":145,"ins":74},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.0,"ci95":[5.52,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":903,"del":147,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q6_K","metric":"wer","err_pct":5.96,"ci95":[5.5,6.45],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":142,"ins":74},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":5.99,"ci95":[5.5,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":896,"del":148,"ins":77},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q4_K_M","metric":"wer","err_pct":5.98,"ci95":[5.5,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":905,"del":137,"ins":78},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":5.98,"ci95":[5.53,6.44],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":903,"del":145,"ins":71},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":34.76,"ci95":[33.6,35.92],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4853,"del":279,"ins":142},"empty_hyp":0,"utts_over_50pct":83}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.82,"ci95":[4.39,5.34],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":467,"del":187,"ins":48},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.85,"ci95":[3.48,4.21],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":640,"del":181,"ins":76},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":17.17,"ci95":[16.36,18.0],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1936,"del":303,"ins":316},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":13.39,"ci95":[12.6,14.2],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1580,"del":244,"ins":157},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":6.35,"ci95":[5.84,6.89],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":877,"del":214,"ins":52},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":13.68,"ci95":[12.94,14.51],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1981,"del":318,"ins":130},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":17.52,"ci95":[16.7,18.3],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2386,"del":366,"ins":239},"empty_hyp":0,"utts_over_50pct":17}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.17,"ci95":[2.88,3.48],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":473,"del":147,"ins":54},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":23.08,"ci95":[22.26,23.89],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3484,"del":347,"ins":124},"empty_hyp":0,"utts_over_50pct":41}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":28.83,"ci95":[27.83,29.95],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3892,"del":362,"ins":191},"empty_hyp":0,"utts_over_50pct":73}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":24.74,"ci95":[23.87,25.63],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4469,"del":800,"ins":231},"empty_hyp":0,"utts_over_50pct":45}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":8.49,"ci95":[7.76,9.26],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":526,"del":123,"ins":64},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":8.19,"ci95":[7.45,9.07],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":931,"del":189,"ins":59},"empty_hyp":1,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":5.17,"ci95":[4.72,5.66],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":766,"del":264,"ins":80},"empty_hyp":2,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":13.8,"ci95":[13.12,14.49],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2247,"del":501,"ins":123},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":7.81,"ci95":[7.21,8.42],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":961,"del":177,"ins":42},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":12.36,"ci95":[11.65,13.08],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1563,"del":250,"ins":71},"empty_hyp":3,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":51.07,"ci95":[49.27,52.72],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6883,"del":1319,"ins":233},"empty_hyp":4,"utts_over_50pct":408}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":16.42,"ci95":[15.53,17.29],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1898,"del":502,"ins":126},"empty_hyp":0,"utts_over_50pct":21}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":8.11,"ci95":[7.55,8.7],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":948,"del":159,"ins":58},"empty_hyp":0,"utts_over_50pct":4} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":153.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":153.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":149.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/parakeet-rnnt-0.6b.json b/catalog/parakeet-rnnt-0.6b.json new file mode 100644 index 00000000..d5ffb4af --- /dev/null +++ b/catalog/parakeet-rnnt-0.6b.json @@ -0,0 +1,69 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "parakeet-rnnt-0.6b", + "family": "parakeet", + "display_name": "parakeet-rnnt-0.6b", + "params": 616736257, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/parakeet-rnnt-0.6b", + "upstream_commit": "c0c1f09", + "published_repo": "handy-computer/parakeet-rnnt-0.6b-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["token"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"parakeet-rnnt-0.6b-F32.gguf","size_bytes":2467033120}, + {"quant":"F16","filename":"parakeet-rnnt-0.6b-F16.gguf","size_bytes":1235969568}, + {"quant":"Q8_0","filename":"parakeet-rnnt-0.6b-Q8_0.gguf","size_bytes":729687456}, + {"quant":"Q6_K","filename":"parakeet-rnnt-0.6b-Q6_K.gguf","size_bytes":600902048}, + {"quant":"Q5_K_M","filename":"parakeet-rnnt-0.6b-Q5_K_M.gguf","size_bytes":539714976}, + {"quant":"Q4_K_M","filename":"parakeet-rnnt-0.6b-Q4_K_M.gguf","size_bytes":476390816} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.57,"ci95":[4.13,5.05],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":446,"del":147,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.62,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":109,"ins":102},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.62,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":109,"ins":102},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.62,"ci95":[1.48,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":107,"ins":101},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.62,"ci95":[1.48,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":645,"del":112,"ins":101},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.62,"ci95":[1.49,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":111,"ins":100},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.66,"ci95":[1.51,1.8],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":660,"del":118,"ins":101},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.62,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":647,"del":110,"ins":100},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.61,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":646,"del":110,"ins":100},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.62,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":647,"del":111,"ins":99},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.63,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":648,"del":115,"ins":100},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.67,"ci95":[1.52,1.81],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":662,"del":123,"ins":98},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.64,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":651,"del":116,"ins":101},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.59,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":205.6,"xrt_compute":53.507,"load_ms":371.9,"mel_ms":0.7,"encode_ms":130.7,"decode_ms":74.2,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":701.7,"xrt_compute":50.352,"load_ms":187.1,"mel_ms":1.9,"encode_ms":427.0,"decode_ms":272.8,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":196.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":170.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":198.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":173.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/parakeet-rnnt-1.1b.json b/catalog/parakeet-rnnt-1.1b.json new file mode 100644 index 00000000..546ee29c --- /dev/null +++ b/catalog/parakeet-rnnt-1.1b.json @@ -0,0 +1,67 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "parakeet-rnnt-1.1b", + "family": "parakeet", + "display_name": "parakeet-rnnt-1.1b", + "params": 1070513665, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/parakeet-rnnt-1.1b", + "upstream_commit": "a07b19e", + "published_repo": "handy-computer/parakeet-rnnt-1.1b-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["token"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"parakeet-rnnt-1.1b-F32.gguf","size_bytes":4282189696}, + {"quant":"F16","filename":"parakeet-rnnt-1.1b-F16.gguf","size_bytes":2145156480}, + {"quant":"Q8_0","filename":"parakeet-rnnt-1.1b-Q8_0.gguf","size_bytes":1267285248}, + {"quant":"Q6_K","filename":"parakeet-rnnt-1.1b-Q6_K.gguf","size_bytes":1042505984}, + {"quant":"Q5_K_M","filename":"parakeet-rnnt-1.1b-Q5_K_M.gguf","size_bytes":935755008}, + {"quant":"Q4_K_M","filename":"parakeet-rnnt-1.1b-Q4_K_M.gguf","size_bytes":825244928} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.45,"ci95":[3.99,4.91],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":428,"del":137,"ins":83},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.4,"ci95":[3.97,4.86],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":426,"del":136,"ins":78},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.45,"ci95":[1.31,1.59],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":115,"ins":101},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.45,"ci95":[1.31,1.59],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":115,"ins":101},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.46,"ci95":[1.32,1.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":555,"del":118,"ins":101},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.43,"ci95":[1.29,1.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":111,"ins":97},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.43,"ci95":[1.29,1.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":555,"del":107,"ins":97},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.41,"ci95":[1.27,1.54],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":546,"del":110,"ins":90},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.46,"ci95":[1.32,1.61],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":555,"del":119,"ins":102},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.46,"ci95":[1.31,1.61],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":554,"del":119,"ins":102},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.47,"ci95":[1.32,1.61],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":557,"del":120,"ins":102},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.44,"ci95":[1.29,1.58],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":550,"del":113,"ins":98},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.43,"ci95":[1.29,1.57],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":551,"del":111,"ins":95},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.4,"ci95":[1.27,1.54],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":104,"ins":89},"empty_hyp":0,"utts_over_50pct":3} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":20.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":133.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":114.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":137.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":114.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/parakeet-tdt-0.6b-v2.json b/catalog/parakeet-tdt-0.6b-v2.json new file mode 100644 index 00000000..2252d8cd --- /dev/null +++ b/catalog/parakeet-tdt-0.6b-v2.json @@ -0,0 +1,68 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "parakeet-tdt-0.6b-v2", + "family": "parakeet", + "display_name": "parakeet-tdt-0.6b-v2", + "params": 617869958, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/parakeet-tdt-0.6b-v2", + "upstream_commit": "1b149a3", + "published_repo": "handy-computer/parakeet-tdt-0.6b-v2-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"parakeet-tdt-0.6b-v2-F32.gguf","size_bytes":2471550272}, + {"quant":"F16","filename":"parakeet-tdt-0.6b-v2-F16.gguf","size_bytes":1237334592}, + {"quant":"Q8_0","filename":"parakeet-tdt-0.6b-v2-Q8_0.gguf","size_bytes":729574912}, + {"quant":"Q6_K","filename":"parakeet-tdt-0.6b-v2-Q6_K.gguf","size_bytes":600408576}, + {"quant":"Q5_K_M","filename":"parakeet-tdt-0.6b-v2-Q5_K_M.gguf","size_bytes":539012608}, + {"quant":"Q4_K_M","filename":"parakeet-tdt-0.6b-v2-Q4_K_M.gguf","size_bytes":475491840} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.11,"ci95":[3.71,4.53],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":406,"del":125,"ins":68},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.68,"ci95":[1.54,1.83],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":123,"ins":99},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.68,"ci95":[1.54,1.83],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":123,"ins":99},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.69,"ci95":[1.54,1.83],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":124,"ins":100},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.7,"ci95":[1.56,1.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":676,"del":124,"ins":102},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.7,"ci95":[1.56,1.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":677,"del":126,"ins":98},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.72,"ci95":[1.57,1.87],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":682,"del":129,"ins":101},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.69,"ci95":[1.55,1.83],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":673,"del":125,"ins":96},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.69,"ci95":[1.55,1.83],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":673,"del":125,"ins":97},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.68,"ci95":[1.54,1.82],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":669,"del":123,"ins":97},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.67,"ci95":[1.53,1.82],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":123,"ins":95},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.69,"ci95":[1.55,1.84],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":676,"del":125,"ins":96},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.73,"ci95":[1.59,1.88],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":685,"del":134,"ins":98},"empty_hyp":0,"utts_over_50pct":5} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":160.0,"xrt_compute":68.77,"load_ms":368.8,"mel_ms":0.9,"encode_ms":138.5,"decode_ms":20.6,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":550.4,"xrt_compute":64.193,"load_ms":165.3,"mel_ms":2.4,"encode_ms":454.6,"decode_ms":93.4,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":183.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":187.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":16.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":16.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/parakeet-tdt-0.6b-v3.json b/catalog/parakeet-tdt-0.6b-v3.json new file mode 100644 index 00000000..91b66a68 --- /dev/null +++ b/catalog/parakeet-tdt-0.6b-v3.json @@ -0,0 +1,121 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "parakeet-tdt-0.6b-v3", + "family": "parakeet", + "display_name": "parakeet-tdt-0.6b-v3", + "params": 627052166, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/parakeet-tdt-0.6b-v3", + "upstream_commit": "6d590f7", + "published_repo": "handy-computer/parakeet-tdt-0.6b-v3-gguf", + "languages": [ + "bg", "hr", "cs", "da", "nl", "en", "et", "fi", "fr", "de", "el", "hu", + "it", "lv", "lt", "mt", "pl", "pt", "ro", "ru", "sk", "sl", "es", "sv", + "uk" + ], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"parakeet-tdt-0.6b-v3-F32.gguf","size_bytes":2508435616}, + {"quant":"F16","filename":"parakeet-tdt-0.6b-v3-F16.gguf","size_bytes":1255869856}, + {"quant":"Q8_0","filename":"parakeet-tdt-0.6b-v3-Q8_0.gguf","size_bytes":739508576}, + {"quant":"Q6_K","filename":"parakeet-tdt-0.6b-v3-Q6_K.gguf","size_bytes":610342240}, + {"quant":"Q5_K_M","filename":"parakeet-tdt-0.6b-v3-Q5_K_M.gguf","size_bytes":548946272}, + {"quant":"Q4_K_M","filename":"parakeet-tdt-0.6b-v3-Q4_K_M.gguf","size_bytes":485425504} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":12.81,"ci95":[12.01,13.64],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1420,"del":278,"ins":118},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":12.31,"ci95":[11.42,13.18],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1383,"del":185,"ins":117},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":18.64,"ci95":[17.84,19.43],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3009,"del":457,"ins":292},"empty_hyp":1,"utts_over_50pct":25}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":5.24,"ci95":[4.83,5.66],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":755,"del":147,"ins":79},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":35.33,"ci95":[34.07,36.55],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4839,"del":374,"ins":147},"empty_hyp":0,"utts_over_50pct":97}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q6_K","metric":"wer","err_pct":35.33,"ci95":[34.09,36.52],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4843,"del":376,"ins":141},"empty_hyp":0,"utts_over_50pct":95}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":35.66,"ci95":[34.39,36.91],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4891,"del":364,"ins":155},"empty_hyp":0,"utts_over_50pct":95}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q4_K_M","metric":"wer","err_pct":36.0,"ci95":[34.75,37.21],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4921,"del":392,"ins":149},"empty_hyp":0,"utts_over_50pct":104}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.83,"ci95":[4.39,5.3],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":484,"del":158,"ins":61},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":4.86,"ci95":[4.42,5.34],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":484,"del":165,"ins":59},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.91,"ci95":[4.47,5.4],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":493,"del":157,"ins":65},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":4.88,"ci95":[4.44,5.33],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":471,"del":182,"ins":57},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.64,"ci95":[3.31,4.01],"n_utts":908,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":627,"del":139,"ins":84},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.65,"ci95":[3.32,4.0],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":625,"del":143,"ins":83},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":17.96,"ci95":[17.06,18.8],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1998,"del":301,"ins":374},"empty_hyp":0,"utts_over_50pct":17}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":13.3,"ci95":[12.48,14.1],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1588,"del":226,"ins":153},"empty_hyp":0,"utts_over_50pct":18}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.3,"ci95":[4.77,5.78],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":748,"del":124,"ins":81},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q6_K","metric":"wer","err_pct":5.46,"ci95":[4.94,5.97],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":768,"del":132,"ins":83},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":5.32,"ci95":[4.81,5.82],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":752,"del":121,"ins":85},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q4_K_M","metric":"wer","err_pct":5.6,"ci95":[5.09,6.12],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":792,"del":136,"ins":80},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":12.59,"ci95":[11.85,13.37],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1794,"del":266,"ins":175},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":16.06,"ci95":[15.24,16.89],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2211,"del":303,"ins":228},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.02,"ci95":[2.72,3.34],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":490,"del":92,"ins":60},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q6_K","metric":"wer","err_pct":3.03,"ci95":[2.71,3.36],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":488,"del":94,"ins":61},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.95,"ci95":[2.65,3.26],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":479,"del":90,"ins":58},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q4_K_M","metric":"wer","err_pct":3.13,"ci95":[2.81,3.47],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":506,"del":101,"ins":58},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":22.2,"ci95":[21.36,23.02],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3363,"del":325,"ins":115},"empty_hyp":0,"utts_over_50pct":38}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":23.77,"ci95":[22.87,24.77],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3224,"del":255,"ins":185},"empty_hyp":0,"utts_over_50pct":41}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":20.63,"ci95":[19.86,21.43],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3672,"del":603,"ins":312},"empty_hyp":0,"utts_over_50pct":20}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q6_K","metric":"wer","err_pct":20.64,"ci95":[19.87,21.41],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3668,"del":616,"ins":304},"empty_hyp":0,"utts_over_50pct":24}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q5_K_M","metric":"wer","err_pct":20.79,"ci95":[20.02,21.57],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3681,"del":634,"ins":306},"empty_hyp":0,"utts_over_50pct":19}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q4_K_M","metric":"wer","err_pct":21.65,"ci95":[20.84,22.4],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3838,"del":667,"ins":308},"empty_hyp":0,"utts_over_50pct":25}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":7.66,"ci95":[6.83,8.46],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":489,"del":87,"ins":67},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q6_K","metric":"wer","err_pct":7.63,"ci95":[6.82,8.38],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":485,"del":91,"ins":65},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":7.54,"ci95":[6.76,8.27],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":478,"del":87,"ins":68},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q4_K_M","metric":"wer","err_pct":8.03,"ci95":[7.23,8.82],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":503,"del":101,"ins":70},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":7.37,"ci95":[6.75,7.97],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":883,"del":120,"ins":57},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":4.96,"ci95":[4.49,5.52],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":736,"del":169,"ins":160},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":12.62,"ci95":[11.95,13.33],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2052,"del":408,"ins":165},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q6_K","metric":"wer","err_pct":12.59,"ci95":[11.9,13.27],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2052,"del":398,"ins":168},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q5_K_M","metric":"wer","err_pct":12.92,"ci95":[12.21,13.63],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2098,"del":415,"ins":175},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q4_K_M","metric":"wer","err_pct":13.6,"ci95":[12.89,14.33],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2218,"del":414,"ins":197},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":6.54,"ci95":[6.08,7.06],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":837,"del":104,"ins":47},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":10.19,"ci95":[9.43,10.91],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1230,"del":241,"ins":82},"empty_hyp":4,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":24.3,"ci95":[23.22,25.5],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3219,"del":446,"ins":348},"empty_hyp":0,"utts_over_50pct":44}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":15.25,"ci95":[14.38,16.05],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1824,"del":349,"ins":174},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q6_K","metric":"wer","err_pct":15.32,"ci95":[14.51,16.12],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1820,"del":353,"ins":184},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q5_K_M","metric":"wer","err_pct":15.35,"ci95":[14.53,16.19],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1826,"del":344,"ins":192},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q4_K_M","metric":"wer","err_pct":15.65,"ci95":[14.8,16.48],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1882,"del":353,"ins":173},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":6.84,"ci95":[6.25,7.46],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":794,"del":124,"ins":65},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.95,"ci95":[1.79,2.12],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":768,"del":129,"ins":138},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.95,"ci95":[1.79,2.12],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":767,"del":129,"ins":138},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.94,"ci95":[1.78,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":766,"del":125,"ins":137},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.93,"ci95":[1.77,2.09],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":760,"del":127,"ins":134},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.92,"ci95":[1.77,2.09],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":766,"del":121,"ins":133},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.98,"ci95":[1.82,2.15],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":788,"del":128,"ins":135},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.93,"ci95":[1.77,2.09],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":772,"del":126,"ins":123},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.93,"ci95":[1.78,2.1],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":774,"del":128,"ins":124},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.93,"ci95":[1.77,2.08],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":126,"ins":126},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.91,"ci95":[1.76,2.08],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":767,"del":124,"ins":124},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.91,"ci95":[1.77,2.07],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":772,"del":122,"ins":121},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.96,"ci95":[1.81,2.12],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":792,"del":129,"ins":119},"empty_hyp":0,"utts_over_50pct":5} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":173.6,"xrt_compute":63.354,"load_ms":386.1,"mel_ms":0.8,"encode_ms":138.2,"decode_ms":34.5,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":604.0,"xrt_compute":58.501,"load_ms":188.6,"mel_ms":2.4,"encode_ms":455.0,"decode_ms":146.5,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":153.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":153.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":149.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/parakeet-tdt-1.1b.json b/catalog/parakeet-tdt-1.1b.json new file mode 100644 index 00000000..0b8665bf --- /dev/null +++ b/catalog/parakeet-tdt-1.1b.json @@ -0,0 +1,67 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "parakeet-tdt-1.1b", + "family": "parakeet", + "display_name": "parakeet-tdt-1.1b", + "params": 1070516870, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/parakeet-tdt-1.1b", + "upstream_commit": "53276c6", + "published_repo": "handy-computer/parakeet-tdt-1.1b-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["token"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"parakeet-tdt-1.1b-F32.gguf","size_bytes":4282202592}, + {"quant":"F16","filename":"parakeet-tdt-1.1b-F16.gguf","size_bytes":2145162976}, + {"quant":"Q8_0","filename":"parakeet-tdt-1.1b-Q8_0.gguf","size_bytes":1267288736}, + {"quant":"Q6_K","filename":"parakeet-tdt-1.1b-Q6_K.gguf","size_bytes":1042509472}, + {"quant":"Q5_K_M","filename":"parakeet-tdt-1.1b-Q5_K_M.gguf","size_bytes":935758496}, + {"quant":"Q4_K_M","filename":"parakeet-tdt-1.1b-Q4_K_M.gguf","size_bytes":825248416} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.24,"ci95":[3.78,4.71],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":414,"del":124,"ins":79},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.16,"ci95":[3.72,4.63],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":406,"del":121,"ins":78},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.39,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":98,"ins":89},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.39,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":98,"ins":89},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.38,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":98,"ins":88},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.4,"ci95":[1.26,1.53],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":98,"ins":90},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.39,"ci95":[1.25,1.53],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":549,"del":98,"ins":88},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.42,"ci95":[1.28,1.55],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":562,"del":105,"ins":86},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.39,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":98,"ins":91},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.39,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":98,"ins":91},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.38,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":546,"del":99,"ins":89},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.39,"ci95":[1.25,1.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":102,"ins":88},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.39,"ci95":[1.25,1.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":553,"del":96,"ins":86},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.41,"ci95":[1.27,1.55],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":560,"del":103,"ins":86},"empty_hyp":0,"utts_over_50pct":3} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":20.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":139.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":113.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":139.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/parakeet-tdt_ctc-1.1b.json b/catalog/parakeet-tdt_ctc-1.1b.json new file mode 100644 index 00000000..8efd8a6c --- /dev/null +++ b/catalog/parakeet-tdt_ctc-1.1b.json @@ -0,0 +1,69 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "parakeet-tdt_ctc-1.1b", + "family": "parakeet", + "display_name": "parakeet-tdt_ctc-1.1b", + "params": 1070516870, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/parakeet-tdt_ctc-1.1b", + "upstream_commit": "675e786", + "published_repo": "handy-computer/parakeet-tdt_ctc-1.1b-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["token"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"parakeet-tdt_ctc-1.1b-F32.gguf","size_bytes":4282202176}, + {"quant":"F16","filename":"parakeet-tdt_ctc-1.1b-F16.gguf","size_bytes":2145162560}, + {"quant":"Q8_0","filename":"parakeet-tdt_ctc-1.1b-Q8_0.gguf","size_bytes":1267288320}, + {"quant":"Q6_K","filename":"parakeet-tdt_ctc-1.1b-Q6_K.gguf","size_bytes":1042509056}, + {"quant":"Q5_K_M","filename":"parakeet-tdt_ctc-1.1b-Q5_K_M.gguf","size_bytes":935758080}, + {"quant":"Q4_K_M","filename":"parakeet-tdt_ctc-1.1b-Q4_K_M.gguf","size_bytes":825248000} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.68,"ci95":[4.22,5.15],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":481,"del":127,"ins":73},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.61,"ci95":[4.15,5.11],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":475,"del":131,"ins":65},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.87,"ci95":[1.72,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":752,"del":151,"ins":89},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.87,"ci95":[1.72,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":752,"del":151,"ins":89},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.87,"ci95":[1.72,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":754,"del":151,"ins":88},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.87,"ci95":[1.71,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":754,"del":151,"ins":85},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.87,"ci95":[1.71,2.01],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":750,"del":157,"ins":82},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.91,"ci95":[1.74,2.06],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":158,"ins":85},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.86,"ci95":[1.69,2.02],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":747,"del":148,"ins":89},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.86,"ci95":[1.7,2.02],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":748,"del":148,"ins":88},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.85,"ci95":[1.7,2.01],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":745,"del":150,"ins":86},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.89,"ci95":[1.73,2.06],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":760,"del":153,"ins":88},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.89,"ci95":[1.73,2.05],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":755,"del":154,"ins":91},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.9,"ci95":[1.75,2.06],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":760,"del":164,"ins":84},"empty_hyp":0,"utts_over_50pct":4} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":247.2,"xrt_compute":44.499,"load_ms":279.3,"mel_ms":0.7,"encode_ms":214.4,"decode_ms":32.1,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":793.0,"xrt_compute":44.554,"load_ms":293.6,"mel_ms":1.9,"encode_ms":673.4,"decode_ms":117.7,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":137.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":109.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":138.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":113.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/parakeet-tdt_ctc-110m.json b/catalog/parakeet-tdt_ctc-110m.json new file mode 100644 index 00000000..6e855208 --- /dev/null +++ b/catalog/parakeet-tdt_ctc-110m.json @@ -0,0 +1,66 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "parakeet-tdt_ctc-110m", + "family": "parakeet", + "display_name": "parakeet-tdt_ctc-110m", + "params": 114113670, + "license": { + "spdx": "cc-by-4.0", + "display": "CC-BY-4.0" + }, + "upstream_repo": "nvidia/parakeet-tdt_ctc-110m", + "upstream_commit": "431a349", + "published_repo": "handy-computer/parakeet-tdt_ctc-110m-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["token"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"parakeet-tdt_ctc-110m-F32.gguf","size_bytes":456524064}, + {"quant":"F16","filename":"parakeet-tdt_ctc-110m-F16.gguf","size_bytes":229334560}, + {"quant":"Q8_0","filename":"parakeet-tdt_ctc-110m-Q8_0.gguf","size_bytes":135373280}, + {"quant":"Q6_K","filename":"parakeet-tdt_ctc-110m-Q6_K.gguf","size_bytes":112311264}, + {"quant":"Q5_K_M","filename":"parakeet-tdt_ctc-110m-Q5_K_M.gguf","size_bytes":101335520}, + {"quant":"Q4_K_M","filename":"parakeet-tdt_ctc-110m-Q4_K_M.gguf","size_bytes":89989600} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.11,"ci95":[5.59,6.66],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":630,"del":164,"ins":95},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.43,"ci95":[2.25,2.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1007,"del":154,"ins":127},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.43,"ci95":[2.26,2.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1006,"del":154,"ins":128},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.43,"ci95":[2.26,2.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1003,"del":156,"ins":130},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.44,"ci95":[2.26,2.61],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1005,"del":154,"ins":133},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.47,"ci95":[2.29,2.65],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1029,"del":149,"ins":131},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.53,"ci95":[2.35,2.72],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1050,"del":160,"ins":133},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.4,"ci95":[2.22,2.58],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":997,"del":150,"ins":125},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.41,"ci95":[2.24,2.58],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1000,"del":152,"ins":126},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.44,"ci95":[2.26,2.62],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1009,"del":155,"ins":129},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.44,"ci95":[2.27,2.62],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1003,"del":157,"ins":133},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.47,"ci95":[2.3,2.66],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1025,"del":155,"ins":132},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.53,"ci95":[2.35,2.72],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1047,"del":164,"ins":128},"empty_hyp":0,"utts_over_50pct":7} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":116.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":126.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":111.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":121.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":367.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":315.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":368.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":327.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":21.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":26.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/parakeet-unified-en-0.6b.json b/catalog/parakeet-unified-en-0.6b.json index be393fb7..dbdbe375 100644 --- a/catalog/parakeet-unified-en-0.6b.json +++ b/catalog/parakeet-unified-en-0.6b.json @@ -3,20 +3,17 @@ "variant": "parakeet-unified-en-0.6b", "family": "parakeet", "display_name": "Parakeet Unified EN 0.6B", - "params": 618330880, - "architecture_pattern": "encoder-transducer", + "params": 618309121, "license": { "spdx": "cc-by-4.0", "display": "CC-BY-4.0" }, "upstream_repo": "nvidia/parakeet-unified-en-0.6b", + "upstream_commit": "d4ac992", "published_repo": "handy-computer/parakeet-unified-en-0.6b-gguf", "languages": ["en"], "language_tag_form": "bare-bcp47", - "encoder_window_s": null, "long_form_strategy": "chunked-unbounded", - "max_audio_s": null, - "max_output_tokens": null, "capabilities": { "transcribe": {"supported":true,"verified":true}, "translate": {"supported":false}, @@ -48,23 +45,40 @@ {"quant":"Q5_K_M","filename":"parakeet-unified-en-0.6b-Q5_K_M.gguf","size_bytes":540795264}, {"quant":"Q4_K_M","filename":"parakeet-unified-en-0.6b-Q4_K_M.gguf","size_bytes":477274496} ], - "accuracy_benchmarks": [], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.99,"ci95":[3.6,4.42],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":116,"ins":60},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.59,"ci95":[1.45,1.73],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":635,"del":118,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.59,"ci95":[1.45,1.74],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":636,"del":118,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.6,"ci95":[1.46,1.75],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":641,"del":117,"ins":92},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.61,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":645,"del":119,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.58,"ci95":[1.44,1.73],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":631,"del":118,"ins":90},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.62,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":643,"del":123,"ins":92},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.6,"ci95":[1.46,1.75],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":635,"del":122,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.6,"ci95":[1.46,1.75],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":635,"del":122,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.61,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":641,"del":119,"ins":92},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.61,"ci95":[1.46,1.76],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":643,"del":119,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.6,"ci95":[1.46,1.74],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":632,"del":120,"ins":94},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.61,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":639,"del":123,"ins":93},"empty_hyp":0,"utts_over_50pct":3} + ], "speed_benchmarks": [ - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":844.0,"xrt_compute":13.033,"load_ms":599.8,"mel_ms":20.0,"encode_ms":435.6,"decode_ms":388.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3039.8,"xrt_compute":11.623,"load_ms":324.4,"mel_ms":65.0,"encode_ms":1168.0,"decode_ms":1806.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":834.9,"xrt_compute":13.175,"load_ms":677.6,"mel_ms":22.5,"encode_ms":419.3,"decode_ms":393.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3026.6,"xrt_compute":11.674,"load_ms":393.1,"mel_ms":67.0,"encode_ms":1141.2,"decode_ms":1818.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1179.3,"xrt_compute":9.328,"load_ms":834.4,"mel_ms":19.0,"encode_ms":767.2,"decode_ms":393.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":222.6,"xrt_compute":49.406,"load_ms":170.1,"mel_ms":0.8,"encode_ms":142.4,"decode_ms":79.4,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":771.8,"xrt_compute":45.777,"load_ms":195.5,"mel_ms":2.4,"encode_ms":464.4,"decode_ms":305.0,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1090.0,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":318.0,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1270.0,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":375.0,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":209.0,"xrt_compute":169.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":71.0,"xrt_compute":155.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":210.0,"xrt_compute":168.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":69.0,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4660.2,"xrt_compute":7.582,"load_ms":817.6,"mel_ms":63.7,"encode_ms":2784.3,"decode_ms":1812.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1346.4,"xrt_compute":8.17,"load_ms":1147.8,"mel_ms":20.4,"encode_ms":925.3,"decode_ms":400.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1179.3,"xrt_compute":9.328,"load_ms":834.4,"mel_ms":19.0,"encode_ms":767.2,"decode_ms":393.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5214.8,"xrt_compute":6.775,"load_ms":1022.9,"mel_ms":67.0,"encode_ms":3273.0,"decode_ms":1874.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":69.0,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":210.0,"xrt_compute":168.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":71.0,"xrt_compute":155.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":209.0,"xrt_compute":169.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":375.0,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1270.0,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":318.0,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1090.0,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null} - ] + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1346.4,"xrt_compute":8.17,"load_ms":1147.8,"mel_ms":20.4,"encode_ms":925.3,"decode_ms":400.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3039.8,"xrt_compute":11.623,"load_ms":324.4,"mel_ms":65.0,"encode_ms":1168.0,"decode_ms":1806.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":844.0,"xrt_compute":13.033,"load_ms":599.8,"mel_ms":20.0,"encode_ms":435.6,"decode_ms":388.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3026.6,"xrt_compute":11.674,"load_ms":393.1,"mel_ms":67.0,"encode_ms":1141.2,"decode_ms":1818.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":834.9,"xrt_compute":13.175,"load_ms":677.6,"mel_ms":22.5,"encode_ms":419.3,"decode_ms":393.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true} + ], + "architecture_pattern": "encoder-transducer" } diff --git a/catalog/qwen3-asr-0.6b.json b/catalog/qwen3-asr-0.6b.json new file mode 100644 index 00000000..3dcb71de --- /dev/null +++ b/catalog/qwen3-asr-0.6b.json @@ -0,0 +1,96 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "qwen3-asr-0.6b", + "family": "qwen3_asr", + "display_name": "qwen3-asr-0.6b", + "params": 782452240, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "Qwen/Qwen3-ASR-0.6B", + "upstream_commit": "5eb144179a02acc5e5ba31e748d22b0cf3e303b0", + "published_repo": "handy-computer/Qwen3-ASR-0.6B-gguf", + "languages": [ + "zh", "en", "yue", "ar", "de", "fr", "es", "pt", "id", "it", "ko", "ru", + "th", "vi", "ja", "tr", "hi", "ms", "nl", "sv", "da", "fi", "pl", "cs", + "fil", "fa", "el", "ro", "hu", "mk" + ], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"Qwen3-ASR-0.6B-BF16.gguf","size_bytes":1571490016}, + {"quant":"F16","filename":"Qwen3-ASR-0.6B-F16.gguf","size_bytes":1579793056}, + {"quant":"Q8_0","filename":"Qwen3-ASR-0.6B-Q8_0.gguf","size_bytes":850423456}, + {"quant":"Q6_K","filename":"Qwen3-ASR-0.6B-Q6_K.gguf","size_bytes":690417824}, + {"quant":"Q5_K_M","filename":"Qwen3-ASR-0.6B-Q5_K_M.gguf","size_bytes":645356192}, + {"quant":"Q4_K_M","filename":"Qwen3-ASR-0.6B-Q4_K_M.gguf","size_bytes":589560480} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":24.51,"ci95":[22.15,28.02],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1508,"del":348,"ins":163},"empty_hyp":0,"utts_over_50pct":23}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":44.5,"ci95":[43.23,45.72],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5071,"del":649,"ins":373},"empty_hyp":0,"utts_over_50pct":246}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":36.07,"ci95":[35.05,37.08],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5679,"del":828,"ins":763},"empty_hyp":0,"utts_over_50pct":160}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.8,"ci95":[6.33,7.3],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":989,"del":169,"ins":115},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":49.12,"ci95":[47.74,50.55],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5693,"del":1534,"ins":226},"empty_hyp":0,"utts_over_50pct":286}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.23,"ci95":[3.76,4.69],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":406,"del":126,"ins":84},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":4.88,"ci95":[4.5,5.29],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":808,"del":207,"ins":124},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":50.3,"ci95":[49.3,51.39],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7893,"del":1201,"ins":1016},"empty_hyp":0,"utts_over_50pct":419}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":46.49,"ci95":[45.2,47.9],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5591,"del":719,"ins":568},"empty_hyp":0,"utts_over_50pct":356}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":35.43,"ci95":[34.47,36.38],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7114,"del":1033,"ins":1216},"empty_hyp":0,"utts_over_50pct":161}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":7.76,"ci95":[7.14,8.43],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1013,"del":206,"ins":178},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":12.68,"ci95":[11.63,13.83],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1357,"del":737,"ins":284},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":56.24,"ci95":[54.94,57.67],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7508,"del":1386,"ins":709},"empty_hyp":1,"utts_over_50pct":547}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":8.49,"ci95":[7.85,9.21],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":894,"del":113,"ins":144},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":5.19,"ci95":[4.78,5.64],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":812,"del":179,"ins":112},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":8.61,"ci95":[7.98,9.28],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1929,"del":522,"ins":359},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.82,"ci95":[4.86,6.83],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":422,"del":553,"ins":54},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":35.09,"ci95":[34.14,36.11],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5844,"del":971,"ins":584},"empty_hyp":0,"utts_over_50pct":160}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":17.18,"ci95":[16.28,18.01],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2163,"del":160,"ins":211},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":13.9,"ci95":[12.88,14.93],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":891,"del":155,"ins":121},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":25.06,"ci95":[24.04,26.12],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2993,"del":363,"ins":250},"empty_hyp":0,"utts_over_50pct":52}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":6.57,"ci95":[6.05,7.12],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1016,"del":207,"ins":187},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":40.65,"ci95":[39.48,41.79],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6596,"del":1379,"ins":481},"empty_hyp":0,"utts_over_50pct":254}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":10.3,"ci95":[9.59,11.0],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1258,"del":185,"ins":113},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":35.72,"ci95":[34.53,36.94],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4292,"del":762,"ins":443},"empty_hyp":0,"utts_over_50pct":160}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":8.81,"ci95":[8.04,9.71],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3502,"del":2027,"ins":3058},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":16.74,"ci95":[15.89,17.74],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1778,"del":237,"ins":211},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.32,"ci95":[8.67,9.93],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1919,"del":256,"ins":249},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":7.91,"ci95":[7.28,8.52],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1836,"del":211,"ins":248},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":7.64,"ci95":[6.78,8.57],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":926,"del":1495,"ins":303},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":7.57,"ci95":[6.7,8.42],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":914,"del":1473,"ins":313},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.12,"ci95":[1.96,2.29],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":874,"del":161,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.12,"ci95":[1.96,2.28],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":870,"del":161,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.11,"ci95":[1.95,2.27],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":867,"del":161,"ins":90},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.11,"ci95":[1.95,2.27],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":862,"del":162,"ins":93},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.21,"ci95":[2.05,2.38],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":906,"del":169,"ins":96},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.26,"ci95":[2.08,2.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":931,"del":149,"ins":121},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.11,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.1,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":16.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":67.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":59.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/qwen3-asr-1.7b.json b/catalog/qwen3-asr-1.7b.json new file mode 100644 index 00000000..31ee8005 --- /dev/null +++ b/catalog/qwen3-asr-1.7b.json @@ -0,0 +1,140 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "qwen3-asr-1.7b", + "family": "qwen3_asr", + "display_name": "qwen3-asr-1.7b", + "params": 2038078608, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "Qwen/Qwen3-ASR-1.7B", + "upstream_commit": "7278e1e70fe206f11671096ffdd38061171dd6e5", + "published_repo": "handy-computer/Qwen3-ASR-1.7B-gguf", + "languages": [ + "zh", "en", "yue", "ar", "de", "fr", "es", "pt", "id", "it", "ko", "ru", + "th", "vi", "ja", "tr", "hi", "ms", "nl", "sv", "da", "fi", "pl", "cs", + "fil", "fa", "el", "ro", "hu", "mk" + ], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"Qwen3-ASR-1.7B-BF16.gguf","size_bytes":4083087904}, + {"quant":"F16","filename":"Qwen3-ASR-1.7B-F16.gguf","size_bytes":4091390944}, + {"quant":"Q8_0","filename":"Qwen3-ASR-1.7B-Q8_0.gguf","size_bytes":2185030624}, + {"quant":"Q6_K","filename":"Qwen3-ASR-1.7B-Q6_K.gguf","size_bytes":1692554208}, + {"quant":"Q5_K_M","filename":"Qwen3-ASR-1.7B-Q5_K_M.gguf","size_bytes":1517290464}, + {"quant":"Q4_K_M","filename":"Qwen3-ASR-1.7B-Q4_K_M.gguf","size_bytes":1319830496} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":14.91,"ci95":[13.53,16.42],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":855,"del":305,"ins":68},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":15.65,"ci95":[14.26,17.15],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":905,"del":300,"ins":84},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":22.97,"ci95":[22.0,24.09],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2591,"del":339,"ins":215},"empty_hyp":0,"utts_over_50pct":37}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q6_K","metric":"wer","err_pct":23.45,"ci95":[22.45,24.51],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2638,"del":351,"ins":222},"empty_hyp":0,"utts_over_50pct":35}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q5_K_M","metric":"wer","err_pct":23.82,"ci95":[22.77,24.94],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2722,"del":323,"ins":217},"empty_hyp":0,"utts_over_50pct":33}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q4_K_M","metric":"wer","err_pct":29.67,"ci95":[28.51,30.91],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3344,"del":471,"ins":248},"empty_hyp":0,"utts_over_50pct":61}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":21.23,"ci95":[20.4,22.14],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3367,"del":447,"ins":466},"empty_hyp":0,"utts_over_50pct":35}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q5_K_M","metric":"wer","err_pct":22.93,"ci95":[22.07,23.85],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3608,"del":516,"ins":498},"empty_hyp":0,"utts_over_50pct":46}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.25,"ci95":[3.86,4.64],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":593,"del":140,"ins":62},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.38,"ci95":[4.01,4.77],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":128,"ins":72},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":29.22,"ci95":[27.87,30.64],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3528,"del":690,"ins":215},"empty_hyp":0,"utts_over_50pct":71}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":31.99,"ci95":[30.68,33.36],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3860,"del":812,"ins":182},"empty_hyp":0,"utts_over_50pct":95}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.23,"ci95":[2.85,3.65],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":283,"del":122,"ins":65},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.32,"ci95":[2.93,3.77],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":294,"del":125,"ins":65},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.43,"ci95":[3.05,3.86],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":310,"del":110,"ins":79},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.68,"ci95":[3.26,4.13],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":334,"del":116,"ins":86},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.31,"ci95":[2.98,3.65],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":508,"del":190,"ins":75},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.51,"ci95":[3.14,3.86],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":541,"del":194,"ins":83},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":28.29,"ci95":[27.34,29.31],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4297,"del":564,"ins":826},"empty_hyp":0,"utts_over_50pct":58}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q5_K_M","metric":"wer","err_pct":31.28,"ci95":[30.38,32.29],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4755,"del":538,"ins":994},"empty_hyp":0,"utts_over_50pct":90}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":25.48,"ci95":[24.58,26.47],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3095,"del":391,"ins":284},"empty_hyp":0,"utts_over_50pct":58}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q5_K_M","metric":"wer","err_pct":27.75,"ci95":[26.67,29.14],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3290,"del":424,"ins":392},"empty_hyp":0,"utts_over_50pct":83}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":24.29,"ci95":[23.49,25.18],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4757,"del":618,"ins":1043},"empty_hyp":0,"utts_over_50pct":40}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q5_K_M","metric":"wer","err_pct":25.31,"ci95":[24.47,26.26],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4952,"del":671,"ins":1066},"empty_hyp":0,"utts_over_50pct":55}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":4.52,"ci95":[4.06,5.01],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":579,"del":166,"ins":69},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":4.76,"ci95":[4.29,5.27],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":161,"ins":75},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":7.84,"ci95":[7.09,8.7],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":807,"del":422,"ins":241},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q6_K","metric":"wer","err_pct":7.78,"ci95":[6.99,8.66],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":803,"del":414,"ins":243},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":8.36,"ci95":[7.61,9.22],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":882,"del":457,"ins":228},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q4_K_M","metric":"wer","err_pct":10.06,"ci95":[9.14,11.05],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1078,"del":490,"ins":319},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":32.84,"ci95":[31.69,33.99],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4484,"del":667,"ins":457},"empty_hyp":0,"utts_over_50pct":134}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q6_K","metric":"wer","err_pct":33.04,"ci95":[31.91,34.19],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4485,"del":667,"ins":490},"empty_hyp":0,"utts_over_50pct":146}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q5_K_M","metric":"wer","err_pct":36.28,"ci95":[35.2,37.48],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4925,"del":732,"ins":539},"empty_hyp":0,"utts_over_50pct":180}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q4_K_M","metric":"wer","err_pct":41.88,"ci95":[40.84,42.99],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5641,"del":1092,"ins":419},"empty_hyp":0,"utts_over_50pct":274}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":5.37,"ci95":[4.85,5.93],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":543,"del":89,"ins":96},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q5_K_M","metric":"wer","err_pct":6.0,"ci95":[5.4,6.6],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":610,"del":89,"ins":114},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.68,"ci95":[2.38,2.99],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":402,"del":113,"ins":54},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q6_K","metric":"wer","err_pct":2.65,"ci95":[2.38,2.96],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":395,"del":118,"ins":51},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.89,"ci95":[2.57,3.2],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":433,"del":127,"ins":54},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q4_K_M","metric":"wer","err_pct":3.65,"ci95":[3.29,4.02],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":550,"del":154,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":5.29,"ci95":[4.81,5.8],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1162,"del":321,"ins":245},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":5.83,"ci95":[5.35,6.36],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1302,"del":323,"ins":277},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":4.6,"ci95":[3.62,5.65],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":236,"del":542,"ins":36},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q6_K","metric":"cer","err_pct":4.6,"ci95":[3.61,5.68],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":245,"del":534,"ins":34},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":4.77,"ci95":[3.83,5.84],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":273,"del":532,"ins":39},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q4_K_M","metric":"cer","err_pct":5.54,"ci95":[4.51,6.61],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":370,"del":566,"ins":44},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":18.22,"ci95":[17.43,19.04],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3043,"del":435,"ins":364},"empty_hyp":0,"utts_over_50pct":23}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q6_K","metric":"wer","err_pct":18.77,"ci95":[17.98,19.53],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3121,"del":449,"ins":388},"empty_hyp":0,"utts_over_50pct":24}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q5_K_M","metric":"wer","err_pct":19.37,"ci95":[18.56,20.2],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3215,"del":469,"ins":399},"empty_hyp":0,"utts_over_50pct":24}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q4_K_M","metric":"wer","err_pct":24.32,"ci95":[23.42,25.24],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4068,"del":561,"ins":498},"empty_hyp":0,"utts_over_50pct":62}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":10.42,"ci95":[9.72,11.11],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1292,"del":104,"ins":141},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q5_K_M","metric":"wer","err_pct":10.83,"ci95":[10.09,11.55],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1345,"del":103,"ins":149},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":7.43,"ci95":[6.73,8.15],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":456,"del":96,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":8.05,"ci95":[7.31,8.8],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":507,"del":89,"ins":80},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":12.5,"ci95":[11.66,13.28],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1458,"del":222,"ins":118},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q5_K_M","metric":"wer","err_pct":13.98,"ci95":[13.15,14.85],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1621,"del":231,"ins":159},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":4.37,"ci95":[3.95,4.83],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":651,"del":149,"ins":139},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":4.7,"ci95":[4.25,5.16],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":710,"del":156,"ins":143},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":20.46,"ci95":[19.57,21.43],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3345,"del":537,"ins":374},"empty_hyp":0,"utts_over_50pct":36}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q5_K_M","metric":"wer","err_pct":22.4,"ci95":[21.52,23.35],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3640,"del":622,"ins":398},"empty_hyp":0,"utts_over_50pct":44}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":6.25,"ci95":[5.74,6.79],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":764,"del":125,"ins":55},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":6.54,"ci95":[6.0,7.08],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":804,"del":121,"ins":62},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":19.68,"ci95":[18.7,20.62],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2304,"del":472,"ins":252},"empty_hyp":0,"utts_over_50pct":31}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q5_K_M","metric":"wer","err_pct":20.83,"ci95":[19.79,21.8],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2445,"del":474,"ins":286},"empty_hyp":0,"utts_over_50pct":32}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":6.89,"ci95":[6.15,7.73],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2488,"del":1506,"ins":2725},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q5_K_M","metric":"cer","err_pct":7.39,"ci95":[6.64,8.26],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2699,"del":1545,"ins":2959},"empty_hyp":0,"utts_over_50pct":16}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":9.46,"ci95":[8.72,10.22],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":952,"del":186,"ins":120},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q5_K_M","metric":"wer","err_pct":10.66,"ci95":[9.9,11.47],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1096,"del":187,"ins":134},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":6.15,"ci95":[5.68,6.61],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1220,"del":190,"ins":189},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q6_K","metric":"wer","err_pct":6.24,"ci95":[5.77,6.72],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1235,"del":184,"ins":205},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q5_K_M","metric":"wer","err_pct":6.81,"ci95":[6.29,7.33],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1365,"del":158,"ins":250},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q4_K_M","metric":"wer","err_pct":8.82,"ci95":[8.15,9.48],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1657,"del":165,"ins":473},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":6.13,"ci95":[5.55,6.68],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1381,"del":169,"ins":229},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q5_K_M","metric":"cer","err_pct":6.44,"ci95":[5.83,7.01],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1463,"del":168,"ins":236},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":7.14,"ci95":[6.26,8.12],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":776,"del":1462,"ins":306},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":7.67,"ci95":[6.75,8.6],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":938,"del":1479,"ins":316},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.62,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":143,"ins":65},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.62,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":651,"del":143,"ins":65},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.62,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":145,"ins":64},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.65,"ci95":[1.51,1.8],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":660,"del":148,"ins":68},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.65,"ci95":[1.51,1.81],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":663,"del":141,"ins":73},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.81,"ci95":[1.66,1.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":729,"del":144,"ins":88},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.61,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":52.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":43.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/sensevoice-small.json b/catalog/sensevoice-small.json new file mode 100644 index 00000000..d311b674 --- /dev/null +++ b/catalog/sensevoice-small.json @@ -0,0 +1,65 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "sensevoice-small", + "family": "sensevoice", + "display_name": "sensevoice-small", + "params": 234000287, + "license": { + "spdx": "other", + "display": "model-license (FunASR MODEL_LICENSE)" + }, + "upstream_repo": "FunAudioLLM/SenseVoiceSmall", + "upstream_commit": "3eb3b4eeffc2f2dde6051b853983753db33e35c3", + "published_repo": "handy-computer/SenseVoiceSmall-gguf", + "languages": ["zh","yue","en","ja","ko"], + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"SenseVoiceSmall-F32.gguf","size_bytes":936617824}, + {"quant":"F16","filename":"SenseVoiceSmall-F16.gguf","size_bytes":470412128}, + {"quant":"Q8_0","filename":"SenseVoiceSmall-Q8_0.gguf","size_bytes":252684608}, + {"quant":"Q6_K","filename":"SenseVoiceSmall-Q6_K.gguf","size_bytes":196438336}, + {"quant":"Q5_K_M","filename":"SenseVoiceSmall-Q5_K_M.gguf","size_bytes":172474880}, + {"quant":"Q4_K_M","filename":"SenseVoiceSmall-Q4_K_M.gguf","size_bytes":145738304} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.14,"ci95":[6.54,7.77],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":117,"ins":159},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":7.63,"ci95":[7.1,8.22],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1665,"del":558,"ins":268},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.27,"ci95":[7.13,9.45],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":642,"del":667,"ins":153},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":37.44,"ci95":[36.69,38.21],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10304,"del":315,"ins":239},"empty_hyp":0,"utts_over_50pct":83}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":10.11,"ci95":[9.18,11.02],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1712,"del":1569,"ins":323},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":10.12,"ci95":[9.16,11.08],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1716,"del":1570,"ins":323},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.13,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.13,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.13,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.14,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.18,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.45,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":52.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":53.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":258.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":250.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":319.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":260.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":16.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/voxtral-mini-3b-2507.json b/catalog/voxtral-mini-3b-2507.json new file mode 100644 index 00000000..527fb074 --- /dev/null +++ b/catalog/voxtral-mini-3b-2507.json @@ -0,0 +1,75 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "voxtral-mini-3b-2507", + "family": "voxtral", + "display_name": "voxtral-mini-3b-2507", + "params": 4676297232, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "mistralai/Voxtral-Mini-3B-2507", + "upstream_commit": "3060fe3", + "published_repo": "handy-computer/Voxtral-Mini-3B-2507-gguf", + "languages": ["en","fr","de","es","it","pt","nl","hi"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":true,"targets":["en","fr","de","es","it","pt","nl","hi"],"verified":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"Voxtral-Mini-3B-2507-BF16.gguf","size_bytes":9365764768}, + {"quant":"F16","filename":"Voxtral-Mini-3B-2507-F16.gguf","size_bytes":9376578208}, + {"quant":"Q8_0","filename":"Voxtral-Mini-3B-2507-Q8_0.gguf","size_bytes":5000084128}, + {"quant":"Q6_K","filename":"Voxtral-Mini-3B-2507-Q6_K.gguf","size_bytes":3869489824}, + {"quant":"Q5_K_M","filename":"Voxtral-Mini-3B-2507-Q5_K_M.gguf","size_bytes":3464182432}, + {"quant":"Q4_K_M","filename":"Voxtral-Mini-3B-2507-Q4_K_M.gguf","size_bytes":2984721056} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.71,"ci95":[4.26,5.21],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":585,"del":203,"ins":93},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.74,"ci95":[4.31,5.23],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":600,"del":191,"ins":96},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.89,"ci95":[3.47,4.35],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":344,"del":137,"ins":85},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.87,"ci95":[3.45,4.38],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":353,"del":131,"ins":80},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.52,"ci95":[3.11,3.95],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":472,"del":268,"ins":82},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.55,"ci95":[3.14,4.0],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":456,"del":292,"ins":80},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":4.51,"ci95":[4.04,5.02],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":581,"del":128,"ins":103},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":5.01,"ci95":[4.46,5.6],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":630,"del":147,"ins":124},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":8.93,"ci95":[8.13,9.91],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":954,"del":458,"ins":263},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":8.95,"ci95":[8.13,9.85],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":966,"del":451,"ins":261},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.56,"ci95":[2.24,2.9],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":352,"del":149,"ins":42},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.76,"ci95":[2.41,3.12],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":371,"del":168,"ins":47},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":6.57,"ci95":[5.84,7.32],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":378,"del":116,"ins":58},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":6.95,"ci95":[6.22,7.81],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":387,"del":135,"ins":62},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":3.84,"ci95":[3.44,4.31],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":513,"del":164,"ins":147},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":3.95,"ci95":[3.5,4.47],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":505,"del":198,"ins":145},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.88,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.89,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.87,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.87,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.91,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.94,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":18.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":16.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/voxtral-mini-4b-realtime-2602.json b/catalog/voxtral-mini-4b-realtime-2602.json new file mode 100644 index 00000000..9a54b8da --- /dev/null +++ b/catalog/voxtral-mini-4b-realtime-2602.json @@ -0,0 +1,103 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "voxtral-mini-4b-realtime-2602", + "family": "voxtral_realtime", + "display_name": "voxtral-mini-4b-realtime-2602", + "params": 4429707024, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "mistralai/Voxtral-Mini-4B-Realtime-2602", + "upstream_commit": "2769294", + "published_repo": "handy-computer/Voxtral-Mini-4B-Realtime-2602-gguf", + "languages": ["en","fr","es","de","ru","zh","ja","it","pt","nl","ar","hi","ko"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":true,"verified":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"Voxtral-Mini-4B-Realtime-2602-BF16.gguf","size_bytes":8868301088}, + {"quant":"F16","filename":"Voxtral-Mini-4B-Realtime-2602-F16.gguf","size_bytes":8879114528}, + {"quant":"Q8_0","filename":"Voxtral-Mini-4B-Realtime-2602-Q8_0.gguf","size_bytes":4731791648}, + {"quant":"Q6_K","filename":"Voxtral-Mini-4B-Realtime-2602-Q6_K.gguf","size_bytes":3661018912}, + {"quant":"Q5_K_M","filename":"Voxtral-Mini-4B-Realtime-2602-Q5_K_M.gguf","size_bytes":3281439008}, + {"quant":"Q4_K_M","filename":"Voxtral-Mini-4B-Realtime-2602-Q4_K_M.gguf","size_bytes":2830493984} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":14.53,"ci95":[13.17,16.13],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":830,"del":322,"ins":45},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":14.77,"ci95":[13.3,16.5],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":831,"del":341,"ins":45},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.24,"ci95":[3.78,4.73],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":577,"del":127,"ins":90},"empty_hyp":1,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.27,"ci95":[3.82,4.76],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":580,"del":128,"ins":92},"empty_hyp":1,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":11.73,"ci95":[9.97,13.67],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":603,"del":958,"ins":147},"empty_hyp":38,"utts_over_50pct":39}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.27,"ci95":[5.38,7.31],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":519,"del":295,"ins":99},"empty_hyp":6,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":11.93,"ci95":[10.15,13.97],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":605,"del":986,"ins":146},"empty_hyp":38,"utts_over_50pct":39}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":6.57,"ci95":[5.66,7.62],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":538,"del":318,"ins":101},"empty_hyp":7,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":12.81,"ci95":[10.78,14.91],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":608,"del":1120,"ins":137},"empty_hyp":43,"utts_over_50pct":45}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.23,"ci95":[2.85,3.67],"n_utts":908,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":512,"del":137,"ins":104},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":2.67,"ci95":[2.38,2.96],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":454,"del":93,"ins":75},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q6_K","metric":"wer","err_pct":3.28,"ci95":[2.9,3.7],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":526,"del":137,"ins":101},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":2.66,"ci95":[2.37,2.96],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":452,"del":93,"ins":76},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q4_K_M","metric":"wer","err_pct":3.36,"ci95":[2.96,3.82],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":526,"del":157,"ins":101},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":6.29,"ci95":[5.67,6.88],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":827,"del":184,"ins":121},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q6_K","metric":"wer","err_pct":9.42,"ci95":[8.35,10.57],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1022,"del":496,"ins":178},"empty_hyp":8,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":6.3,"ci95":[5.72,6.92],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":823,"del":195,"ins":116},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q4_K_M","metric":"wer","err_pct":9.32,"ci95":[8.32,10.34],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1065,"del":438,"ins":175},"empty_hyp":8,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":14.44,"ci95":[13.36,15.68],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1625,"del":793,"ins":290},"empty_hyp":3,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q6_K","metric":"wer","err_pct":17.22,"ci95":[15.52,19.04],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1730,"del":1203,"ins":297},"empty_hyp":8,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":14.36,"ci95":[13.3,15.5],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1634,"del":759,"ins":300},"empty_hyp":2,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q4_K_M","metric":"wer","err_pct":17.73,"ci95":[16.02,19.45],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1804,"del":1236,"ins":286},"empty_hyp":8,"utts_over_50pct":18}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.25,"ci95":[1.99,2.53],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":377,"del":52,"ins":50},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.24,"ci95":[1.98,2.51],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":367,"del":59,"ins":49},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":5.44,"ci95":[4.94,5.95],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1227,"del":365,"ins":184},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":5.78,"ci95":[5.23,6.42],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1240,"del":459,"ins":189},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.27,"ci95":[4.3,6.31],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":355,"del":532,"ins":45},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q6_K","metric":"cer","err_pct":5.78,"ci95":[4.77,6.88],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":571,"ins":46},"empty_hyp":1,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":5.36,"ci95":[4.39,6.4],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":366,"del":530,"ins":52},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q4_K_M","metric":"cer","err_pct":6.29,"ci95":[5.17,7.5],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":425,"del":638,"ins":49},"empty_hyp":3,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":6.09,"ci95":[5.45,6.73],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":380,"del":63,"ins":68},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q6_K","metric":"wer","err_pct":8.85,"ci95":[7.86,10.02],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":527,"del":120,"ins":96},"empty_hyp":1,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":6.07,"ci95":[5.44,6.75],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":380,"del":62,"ins":68},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q4_K_M","metric":"wer","err_pct":9.54,"ci95":[8.29,10.82],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":554,"del":151,"ins":96},"empty_hyp":1,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":3.87,"ci95":[3.43,4.38],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":572,"del":91,"ins":168},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q6_K","metric":"wer","err_pct":5.25,"ci95":[4.63,5.96],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":744,"del":149,"ins":234},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":3.87,"ci95":[3.45,4.36],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":569,"del":91,"ins":170},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q4_K_M","metric":"wer","err_pct":5.21,"ci95":[4.62,5.91],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":742,"del":158,"ins":219},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.41,"ci95":[4.95,5.88],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":698,"del":70,"ins":49},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":5.47,"ci95":[5.0,5.99],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":699,"del":70,"ins":57},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":10.41,"ci95":[9.32,11.52],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1752,"del":1609,"ins":350},"empty_hyp":2,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q6_K","metric":"cer","err_pct":10.22,"ci95":[9.17,11.34],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1749,"del":1525,"ins":371},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":8.57,"ci95":[7.7,9.48],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1369,"del":1494,"ins":191},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q4_K_M","metric":"cer","err_pct":11.1,"ci95":[9.95,12.39],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1915,"del":1646,"ins":395},"empty_hyp":2,"utts_over_50pct":14}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.08,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.09,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.07,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.08,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.08,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.08,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.85,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.61,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.56,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.05,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.87,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/voxtral-small-24b-2507.json b/catalog/voxtral-small-24b-2507.json new file mode 100644 index 00000000..13eb9001 --- /dev/null +++ b/catalog/voxtral-small-24b-2507.json @@ -0,0 +1,63 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "voxtral-small-24b-2507", + "family": "voxtral", + "display_name": "voxtral-small-24b-2507", + "params": 24261827088, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "mistralai/Voxtral-Small-24B-2507", + "upstream_commit": "da5b424", + "published_repo": "handy-computer/Voxtral-Small-24B-2507-gguf", + "languages": ["en","fr","de","es","it","pt","nl","hi"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":true,"targets":["en","fr","de","es","it","pt","nl","hi"],"verified":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"Voxtral-Small-24B-2507-BF16.gguf","size_bytes":48537285088}, + {"quant":"F16","filename":"Voxtral-Small-24B-2507-F16.gguf","size_bytes":48548098528}, + {"quant":"Q8_0","filename":"Voxtral-Small-24B-2507-Q8_0.gguf","size_bytes":25810383328}, + {"quant":"Q6_K","filename":"Voxtral-Small-24B-2507-Q6_K.gguf","size_bytes":19936473568}, + {"quant":"Q5_K_M","filename":"Voxtral-Small-24B-2507-Q5_K_M.gguf","size_bytes":17138659808}, + {"quant":"Q4_K_M","filename":"Voxtral-Small-24B-2507-Q4_K_M.gguf","size_bytes":14302261728} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":3.29,"ci95":[2.93,3.65],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":361,"del":199,"ins":55},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":3.32,"ci95":[2.96,3.69],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":376,"del":192,"ins":53},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.55,"ci95":[3.07,4.1],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":259,"del":196,"ins":62},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.41,"ci95":[2.97,3.9],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":258,"del":177,"ins":61},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":2.86,"ci95":[2.47,3.25],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":338,"del":274,"ins":54},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":2.83,"ci95":[2.45,3.23],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":339,"del":263,"ins":58},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":3.86,"ci95":[3.39,4.31],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":433,"del":192,"ins":69},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":3.76,"ci95":[3.31,4.23],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":450,"del":158,"ins":68},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":7.4,"ci95":[6.65,8.36],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":759,"del":408,"ins":220},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":7.67,"ci95":[6.85,8.64],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":759,"del":448,"ins":232},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.69,"ci95":[2.19,3.34],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":268,"del":273,"ins":31},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.44,"ci95":[2.08,2.87],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":222,"del":265,"ins":32},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":5.12,"ci95":[4.38,5.96],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":236,"del":144,"ins":50},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":4.81,"ci95":[4.19,5.5],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":241,"del":113,"ins":50},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":3.74,"ci95":[3.25,4.26],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":401,"del":308,"ins":95},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":3.54,"ci95":[3.13,4.0],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":383,"del":261,"ins":116},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.56,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.57,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.56,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.58,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.6,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.11,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/whisper-base.en.json b/catalog/whisper-base.en.json new file mode 100644 index 00000000..1f7cae0e --- /dev/null +++ b/catalog/whisper-base.en.json @@ -0,0 +1,67 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "whisper-base.en", + "family": "whisper", + "display_name": "whisper-base.en", + "params": 72609888, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "openai/whisper-base.en", + "upstream_commit": "911407f", + "published_repo": "handy-computer/whisper-base.en-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"whisper-base.en-F32.gguf","size_bytes":292257728}, + {"quant":"F16","filename":"whisper-base.en-F16.gguf","size_bytes":151068608}, + {"quant":"Q8_0","filename":"whisper-base.en-Q8_0.gguf","size_bytes":84886208}, + {"quant":"Q6_K","filename":"whisper-base.en-Q6_K.gguf","size_bytes":67789088}, + {"quant":"Q5_K_M","filename":"whisper-base.en-Q5_K_M.gguf","size_bytes":63709472}, + {"quant":"Q4_K_M","filename":"whisper-base.en-Q4_K_M.gguf","size_bytes":58794272} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.6,"ci95":[6.89,8.32],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":761,"del":165,"ins":180},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":4.3,"ci95":[3.95,4.74],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1622,"del":287,"ins":370},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":4.13,"ci95":[3.89,4.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1617,"del":287,"ins":286},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.16,"ci95":[3.92,4.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1631,"del":293,"ins":283},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":4.15,"ci95":[3.9,4.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1630,"del":287,"ins":282},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.16,"ci95":[3.92,4.42],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1641,"del":276,"ins":289},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":4.29,"ci95":[4.05,4.55],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1695,"del":280,"ins":300},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":4.14,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":437.5,"xrt_compute":25.146,"load_ms":82.0,"mel_ms":17.4,"encode_ms":343.7,"decode_ms":76.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":328.8,"xrt_compute":33.459,"load_ms":65.2,"mel_ms":17.5,"encode_ms":263.5,"decode_ms":47.8,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":361.7,"xrt_compute":30.409,"load_ms":61.7,"mel_ms":17.5,"encode_ms":284.7,"decode_ms":59.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":84.7,"xrt_compute":129.909,"load_ms":100.2,"mel_ms":17.7,"encode_ms":46.6,"decode_ms":20.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":85.4,"xrt_compute":128.8,"load_ms":85.3,"mel_ms":18.0,"encode_ms":47.7,"decode_ms":19.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":86.8,"xrt_compute":126.739,"load_ms":68.1,"mel_ms":18.4,"encode_ms":48.5,"decode_ms":19.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":48.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":45.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":218.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":222.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":204.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":218.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":16.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":32.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/whisper-base.json b/catalog/whisper-base.json new file mode 100644 index 00000000..c700cea0 --- /dev/null +++ b/catalog/whisper-base.json @@ -0,0 +1,158 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "whisper-base", + "family": "whisper", + "display_name": "whisper-base", + "params": 72610400, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "openai/whisper-base", + "upstream_commit": "e37978b", + "published_repo": "handy-computer/whisper-base-gguf", + "languages": [ + "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", + "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", + "fo", "fr", "gl", "gu", "haw", "ha", "he", "hi", "hr", "ht", "hu", "hy", + "id", "is", "it", "ja", "jw", "ka", "kk", "km", "kn", "ko", "la", "lb", + "ln", "lo", "lt", "lv", "mg", "mi", "mk", "ml", "mn", "mr", "ms", "mt", + "my", "ne", "nl", "nn", "no", "oc", "pa", "pl", "ps", "pt", "ro", "ru", + "sa", "sd", "si", "sk", "sl", "sn", "so", "sq", "sr", "su", "sv", "sw", + "ta", "te", "tg", "th", "tk", "tl", "tr", "tt", "uk", "ur", "uz", "vi", + "yi", "yo", "zh" + ], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":true,"verified":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"whisper-base-F32.gguf","size_bytes":292335904}, + {"quant":"F16","filename":"whisper-base-F16.gguf","size_bytes":151145760}, + {"quant":"Q8_0","filename":"whisper-base-Q8_0.gguf","size_bytes":84962880}, + {"quant":"Q6_K","filename":"whisper-base-Q6_K.gguf","size_bytes":67865664}, + {"quant":"Q5_K_M","filename":"whisper-base-Q5_K_M.gguf","size_bytes":63786048}, + {"quant":"Q4_K_M","filename":"whisper-base-Q4_K_M.gguf","size_bytes":58870848} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":83.05,"ci95":[80.55,86.01],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3815,"del":657,"ins":388},"empty_hyp":0,"utts_over_50pct":252}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":150.97,"ci95":[144.02,159.59],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6390,"del":2173,"ins":4366},"empty_hyp":46,"utts_over_50pct":516}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":52.74,"ci95":[50.65,55.22],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3675,"del":384,"ins":285},"empty_hyp":0,"utts_over_50pct":217}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":100.6,"ci95":[100.3,100.97],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17921,"del":29061,"ins":294},"empty_hyp":13,"utts_over_50pct":984}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":81.22,"ci95":[79.97,82.51],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12129,"del":1412,"ins":1017},"empty_hyp":0,"utts_over_50pct":899}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":92.72,"ci95":[92.02,93.59],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17118,"del":957,"ins":1234},"empty_hyp":0,"utts_over_50pct":967}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":70.53,"ci95":[69.06,71.99],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7792,"del":1006,"ins":1197},"empty_hyp":0,"utts_over_50pct":577}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":100.73,"ci95":[100.32,101.27],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17889,"del":26855,"ins":356},"empty_hyp":2,"utts_over_50pct":920}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":71.53,"ci95":[70.38,72.69],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10784,"del":1212,"ins":1471},"empty_hyp":0,"utts_over_50pct":813}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":29.48,"ci95":[28.52,30.38],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5319,"del":777,"ins":1047},"empty_hyp":1,"utts_over_50pct":88}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":70.14,"ci95":[68.85,71.39],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7820,"del":755,"ins":1029},"empty_hyp":0,"utts_over_50pct":629}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":98.19,"ci95":[96.7,99.94],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18119,"del":2476,"ins":5135},"empty_hyp":2,"utts_over_50pct":1011}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":63.85,"ci95":[61.94,66.27],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9467,"del":964,"ins":2440},"empty_hyp":1,"utts_over_50pct":676}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":19.69,"ci95":[18.79,20.63],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2750,"del":377,"ins":558},"empty_hyp":0,"utts_over_50pct":23}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":59.14,"ci95":[57.67,60.72],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7225,"del":1026,"ins":722},"empty_hyp":0,"utts_over_50pct":438}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":9.88,"ci95":[9.07,10.7],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1000,"del":171,"ins":267},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":11.15,"ci95":[10.58,11.77],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1946,"del":291,"ins":364},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":81.71,"ci95":[80.47,82.88],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9675,"del":948,"ins":1536},"empty_hyp":0,"utts_over_50pct":867}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":87.72,"ci95":[86.66,88.77],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14266,"del":1375,"ins":1991},"empty_hyp":2,"utts_over_50pct":865}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":49.46,"ci95":[48.18,50.94],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5620,"del":659,"ins":1038},"empty_hyp":0,"utts_over_50pct":419}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":49.32,"ci95":[48.08,50.51],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9679,"del":1094,"ins":2260},"empty_hyp":0,"utts_over_50pct":420}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":27.91,"ci95":[26.68,29.23],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3633,"del":478,"ins":912},"empty_hyp":0,"utts_over_50pct":69}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":50.06,"ci95":[49.09,51.03],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8950,"del":1210,"ins":944},"empty_hyp":0,"utts_over_50pct":425}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":100.4,"ci95":[100.16,100.74],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20899,"del":24028,"ins":244},"empty_hyp":2,"utts_over_50pct":1000}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":108.15,"ci95":[105.69,110.64],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9957,"del":5196,"ins":2080},"empty_hyp":13,"utts_over_50pct":621}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":65.56,"ci95":[63.95,67.11],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7450,"del":984,"ins":641},"empty_hyp":1,"utts_over_50pct":567}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":100.01,"ci95":[99.26,101.08],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8934,"del":9692,"ins":131},"empty_hyp":0,"utts_over_50pct":418}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":64.23,"ci95":[62.91,65.45],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9190,"del":983,"ins":1229},"empty_hyp":0,"utts_over_50pct":698}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":72.26,"ci95":[70.67,74.05],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9172,"del":1377,"ins":1790},"empty_hyp":2,"utts_over_50pct":776}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":127.56,"ci95":[124.05,131.34],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14135,"del":4020,"ins":5013},"empty_hyp":7,"utts_over_50pct":932}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":38.02,"ci95":[36.34,39.83],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4082,"del":416,"ins":657},"empty_hyp":0,"utts_over_50pct":164}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":99.32,"ci95":[93.94,105.24],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":809,"del":82,"ins":135},"empty_hyp":0,"utts_over_50pct":46}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":17.26,"ci95":[16.46,18.13],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2788,"del":438,"ins":440},"empty_hyp":0,"utts_over_50pct":16}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":25.28,"ci95":[24.19,26.38],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6115,"del":997,"ins":1143},"empty_hyp":0,"utts_over_50pct":25}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":117.78,"ci95":[114.84,120.78],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12710,"del":4427,"ins":3050},"empty_hyp":21,"utts_over_50pct":979}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":99.79,"ci95":[97.99,101.89],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12395,"del":1268,"ins":1320},"empty_hyp":2,"utts_over_50pct":856}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":134.48,"ci95":[129.24,140.11],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33931,"del":28350,"ins":23399},"empty_hyp":133,"utts_over_50pct":771}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":102.88,"ci95":[101.85,104.24],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":19530,"del":22591,"ins":1226},"empty_hyp":12,"utts_over_50pct":838}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":12.98,"ci95":[11.77,14.26],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1569,"del":627,"ins":98},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":107.78,"ci95":[104.95,110.59],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13710,"del":6173,"ins":2708},"empty_hyp":1,"utts_over_50pct":933}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":102.73,"ci95":[100.18,105.9],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7259,"del":1999,"ins":1476},"empty_hyp":4,"utts_over_50pct":478}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":104.35,"ci95":[102.73,106.31],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":31866,"del":5210,"ins":1977},"empty_hyp":8,"utts_over_50pct":405}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":91.78,"ci95":[90.81,92.83],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13273,"del":1400,"ins":1052},"empty_hyp":0,"utts_over_50pct":983}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":84.6,"ci95":[83.48,85.62],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10887,"del":973,"ins":1182},"empty_hyp":0,"utts_over_50pct":840}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":81.65,"ci95":[80.04,83.57],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17505,"del":5466,"ins":2357},"empty_hyp":2,"utts_over_50pct":983}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":63.95,"ci95":[62.78,65.06],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10583,"del":998,"ins":1901},"empty_hyp":0,"utts_over_50pct":768}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":102.84,"ci95":[102.22,103.53],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":25468,"del":28736,"ins":1576},"empty_hyp":2,"utts_over_50pct":958}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":124.42,"ci95":[120.42,128.66],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10704,"del":7824,"ins":4529},"empty_hyp":8,"utts_over_50pct":949}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":100.42,"ci95":[100.12,100.78],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20589,"del":30654,"ins":286},"empty_hyp":1,"utts_over_50pct":1015}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":40.87,"ci95":[39.31,42.67],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4850,"del":411,"ins":768},"empty_hyp":1,"utts_over_50pct":215}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":103.46,"ci95":[101.68,105.42],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14173,"del":7061,"ins":1768},"empty_hyp":39,"utts_over_50pct":926}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":130.63,"ci95":[126.3,135.27],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33930,"del":24069,"ins":18411},"empty_hyp":23,"utts_over_50pct":880}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":49.26,"ci95":[47.5,50.95],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2903,"del":360,"ins":490},"empty_hyp":0,"utts_over_50pct":156}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":101.15,"ci95":[100.48,101.94],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15638,"del":17476,"ins":616},"empty_hyp":15,"utts_over_50pct":726}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":36.75,"ci95":[35.31,38.27],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2283,"del":290,"ins":513},"empty_hyp":0,"utts_over_50pct":62}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":88.62,"ci95":[86.95,90.5],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17761,"del":2993,"ins":2643},"empty_hyp":0,"utts_over_50pct":989}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":101.13,"ci95":[100.15,102.93],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10050,"del":15449,"ins":294},"empty_hyp":3,"utts_over_50pct":574}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":35.68,"ci95":[34.46,36.98],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3959,"del":442,"ins":732},"empty_hyp":0,"utts_over_50pct":153}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":101.19,"ci95":[100.22,102.37],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8434,"del":4628,"ins":311},"empty_hyp":13,"utts_over_50pct":512}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":13.91,"ci95":[13.11,14.77],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2169,"del":293,"ins":525},"empty_hyp":0,"utts_over_50pct":16}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":62.16,"ci95":[60.92,63.47],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10025,"del":1183,"ins":1721},"empty_hyp":0,"utts_over_50pct":640}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":22.92,"ci95":[22.0,23.95],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2744,"del":352,"ins":366},"empty_hyp":0,"utts_over_50pct":39}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":103.23,"ci95":[101.54,105.16],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20008,"del":2277,"ins":2116},"empty_hyp":1,"utts_over_50pct":980}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":65.77,"ci95":[64.54,67.01],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8217,"del":815,"ins":995},"empty_hyp":3,"utts_over_50pct":653}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":77.9,"ci95":[76.78,79.09],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10382,"del":1143,"ins":1340},"empty_hyp":0,"utts_over_50pct":797}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":134.76,"ci95":[129.9,140.17],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11530,"del":3992,"ins":6039},"empty_hyp":14,"utts_over_50pct":925}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":107.06,"ci95":[105.6,108.9],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17989,"del":6189,"ins":1714},"empty_hyp":4,"utts_over_50pct":1019}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":69.25,"ci95":[67.61,70.81],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7905,"del":864,"ins":823},"empty_hyp":0,"utts_over_50pct":573}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":42.4,"ci95":[41.0,43.92],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4806,"del":598,"ins":1120},"empty_hyp":0,"utts_over_50pct":268}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":100.69,"ci95":[98.1,103.39],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6701,"del":1873,"ins":1492},"empty_hyp":19,"utts_over_50pct":486}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":58.84,"ci95":[56.79,61.23],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10760,"del":3707,"ins":5340},"empty_hyp":0,"utts_over_50pct":313}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":101.77,"ci95":[100.99,102.71],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8390,"del":14193,"ins":424},"empty_hyp":1,"utts_over_50pct":472}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":108.3,"ci95":[106.47,110.51],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11412,"del":1516,"ins":1188},"empty_hyp":9,"utts_over_50pct":600}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":38.1,"ci95":[36.81,39.42],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18768,"del":10910,"ins":7472},"empty_hyp":17,"utts_over_50pct":112}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":31.09,"ci95":[29.91,32.41],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3257,"del":393,"ins":484},"empty_hyp":0,"utts_over_50pct":94}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":42.03,"ci95":[40.78,43.22],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4827,"del":569,"ins":644},"empty_hyp":0,"utts_over_50pct":249}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":55.42,"ci95":[53.8,57.15],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3818,"del":507,"ins":385},"empty_hyp":0,"utts_over_50pct":182}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":111.42,"ci95":[108.74,114.38],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9508,"del":6212,"ins":2072},"empty_hyp":21,"utts_over_50pct":862}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":42.6,"ci95":[41.42,43.81],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9608,"del":542,"ins":934},"empty_hyp":0,"utts_over_50pct":235}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":103.28,"ci95":[101.84,105.0],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14460,"del":7074,"ins":1352},"empty_hyp":5,"utts_over_50pct":831}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":36.21,"ci95":[35.11,37.29],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10924,"del":1681,"ins":307},"empty_hyp":0,"utts_over_50pct":167}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":5.11,"ci95":[4.83,5.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2046,"del":311,"ins":351},"empty_hyp":0,"utts_over_50pct":21}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":5.1,"ci95":[4.83,5.38],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2046,"del":310,"ins":351},"empty_hyp":0,"utts_over_50pct":21}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.12,"ci95":[4.85,5.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2057,"del":295,"ins":361},"empty_hyp":0,"utts_over_50pct":22}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":5.11,"ci95":[4.85,5.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2048,"del":314,"ins":350},"empty_hyp":0,"utts_over_50pct":21}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.19,"ci95":[4.91,5.48],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2071,"del":329,"ins":352},"empty_hyp":0,"utts_over_50pct":21}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":5.36,"ci95":[5.07,5.66],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2126,"del":337,"ins":379},"empty_hyp":0,"utts_over_50pct":20}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":5.1,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":5.12,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":493.5,"xrt_compute":22.292,"load_ms":76.7,"mel_ms":17.6,"encode_ms":341.7,"decode_ms":134.1,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":364.5,"xrt_compute":30.176,"load_ms":66.3,"mel_ms":17.6,"encode_ms":262.3,"decode_ms":84.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":393.5,"xrt_compute":27.955,"load_ms":42.9,"mel_ms":17.5,"encode_ms":283.2,"decode_ms":92.8,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":141.9,"xrt_compute":77.513,"load_ms":100.4,"mel_ms":17.6,"encode_ms":46.8,"decode_ms":77.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":133.0,"xrt_compute":82.684,"load_ms":93.4,"mel_ms":17.6,"encode_ms":47.8,"decode_ms":67.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":129.8,"xrt_compute":84.741,"load_ms":66.2,"mel_ms":17.6,"encode_ms":48.5,"decode_ms":63.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":47.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":43.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":209.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":205.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":207.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":211.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":12.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":13.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":37.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":30.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/whisper-large-v2.json b/catalog/whisper-large-v2.json new file mode 100644 index 00000000..cfc1642a --- /dev/null +++ b/catalog/whisper-large-v2.json @@ -0,0 +1,167 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "whisper-large-v2", + "family": "whisper", + "display_name": "whisper-large-v2", + "params": 1543321440, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "openai/whisper-large-v2", + "upstream_commit": "ae46427", + "published_repo": "handy-computer/whisper-large-v2-gguf", + "languages": [ + "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", + "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", + "fo", "fr", "gl", "gu", "haw", "ha", "he", "hi", "hr", "ht", "hu", "hy", + "id", "is", "it", "ja", "jw", "ka", "kk", "km", "kn", "ko", "la", "lb", + "ln", "lo", "lt", "lv", "mg", "mi", "mk", "ml", "mn", "mr", "ms", "mt", + "my", "ne", "nl", "nn", "no", "oc", "pa", "pl", "ps", "pt", "ro", "ru", + "sa", "sd", "si", "sk", "sl", "sn", "so", "sq", "sr", "su", "sv", "sw", + "ta", "te", "tg", "th", "tk", "tl", "tr", "tt", "uk", "ur", "uz", "vi", + "yi", "yo", "zh" + ], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":true,"targets":["en"],"verified":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"whisper-large-v2-F32.gguf","size_bytes":6175245408}, + {"quant":"F16","filename":"whisper-large-v2-F16.gguf","size_bytes":3106458208}, + {"quant":"Q8_0","filename":"whisper-large-v2-Q8_0.gguf","size_bytes":1667964224}, + {"quant":"Q6_K","filename":"whisper-large-v2-Q6_K.gguf","size_bytes":1296353280}, + {"quant":"Q5_K_M","filename":"whisper-large-v2-Q5_K_M.gguf","size_bytes":1160366080}, + {"quant":"Q4_K_M","filename":"whisper-large-v2-Q4_K_M.gguf","size_bytes":996526080} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":38.45,"ci95":[36.36,40.66],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1787,"del":292,"ins":171},"empty_hyp":1,"utts_over_50pct":59}, + {"dataset":"fleurs","split":"test","language":"af","quant":"Q5_K_M","metric":"wer","err_pct":38.28,"ci95":[36.22,40.48],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1788,"del":290,"ins":162},"empty_hyp":1,"utts_over_50pct":59}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":140.81,"ci95":[135.38,146.83],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7487,"del":1050,"ins":3522},"empty_hyp":4,"utts_over_50pct":516}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q5_K_M","metric":"wer","err_pct":137.69,"ci95":[132.49,143.36],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7465,"del":1074,"ins":3253},"empty_hyp":2,"utts_over_50pct":516}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":17.06,"ci95":[15.68,18.51],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1034,"del":305,"ins":66},"empty_hyp":1,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":17.17,"ci95":[15.79,18.63],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1040,"del":310,"ins":64},"empty_hyp":1,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":104.58,"ci95":[104.19,105.02],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41441,"del":5499,"ins":2206},"empty_hyp":0,"utts_over_50pct":984}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q5_K_M","metric":"wer","err_pct":104.36,"ci95":[103.92,104.78],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":40751,"del":6187,"ins":2103},"empty_hyp":0,"utts_over_50pct":984}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":24.13,"ci95":[23.27,24.98],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3667,"del":353,"ins":306},"empty_hyp":0,"utts_over_50pct":47}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q5_K_M","metric":"wer","err_pct":24.13,"ci95":[23.27,24.96],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3663,"del":363,"ins":299},"empty_hyp":0,"utts_over_50pct":47}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":46.96,"ci95":[46.01,47.89],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8517,"del":648,"ins":614},"empty_hyp":0,"utts_over_50pct":372}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q5_K_M","metric":"wer","err_pct":47.32,"ci95":[46.41,48.29],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8579,"del":675,"ins":601},"empty_hyp":0,"utts_over_50pct":365}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":15.81,"ci95":[15.0,16.69],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1805,"del":223,"ins":213},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q5_K_M","metric":"wer","err_pct":15.86,"ci95":[15.03,16.76],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1809,"del":225,"ins":213},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":103.42,"ci95":[102.99,103.87],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":37827,"del":6726,"ins":1747},"empty_hyp":0,"utts_over_50pct":918}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q5_K_M","metric":"wer","err_pct":103.53,"ci95":[103.15,103.97],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":37692,"del":6879,"ins":1782},"empty_hyp":2,"utts_over_50pct":920}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":17.02,"ci95":[16.25,17.87],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2570,"del":398,"ins":236},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q5_K_M","metric":"wer","err_pct":17.0,"ci95":[16.18,17.82],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2579,"del":395,"ins":226},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":5.56,"ci95":[5.03,6.12],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":961,"del":232,"ins":155},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q5_K_M","metric":"wer","err_pct":5.52,"ci95":[4.99,6.06],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":952,"del":232,"ins":153},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":14.42,"ci95":[13.62,15.22],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1656,"del":125,"ins":194},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q5_K_M","metric":"wer","err_pct":14.59,"ci95":[13.78,15.36],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1678,"del":126,"ins":194},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":30.55,"ci95":[29.6,31.55],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6238,"del":804,"ins":964},"empty_hyp":1,"utts_over_50pct":89}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q5_K_M","metric":"wer","err_pct":30.76,"ci95":[29.81,31.78],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6295,"del":794,"ins":971},"empty_hyp":1,"utts_over_50pct":88}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":14.92,"ci95":[14.19,15.63],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2333,"del":319,"ins":356},"empty_hyp":1,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q5_K_M","metric":"wer","err_pct":15.14,"ci95":[14.38,15.87],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2352,"del":328,"ins":371},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.53,"ci95":[4.13,4.93],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":612,"del":91,"ins":144},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.54,"ci95":[4.14,4.96],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":89,"ins":141},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":13.51,"ci95":[12.53,14.42],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1774,"del":165,"ins":111},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":13.81,"ci95":[12.86,14.74],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1788,"del":182,"ins":125},"empty_hyp":0,"utts_over_50pct":18}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.21,"ci95":[3.73,4.82],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":126,"ins":82},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.27,"ci95":[3.78,4.89],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":416,"del":123,"ins":82},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.3,"ci95":[2.93,3.7],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":556,"del":128,"ins":85},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.3,"ci95":[2.93,3.7],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":555,"del":131,"ins":84},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":23.25,"ci95":[22.23,24.25],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2648,"del":314,"ins":498},"empty_hyp":0,"utts_over_50pct":50}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q5_K_M","metric":"wer","err_pct":23.33,"ci95":[22.3,24.33],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2669,"del":300,"ins":502},"empty_hyp":0,"utts_over_50pct":51}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":34.25,"ci95":[33.18,35.39],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4932,"del":308,"ins":1644},"empty_hyp":0,"utts_over_50pct":122}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q5_K_M","metric":"wer","err_pct":34.05,"ci95":[32.96,35.17],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4932,"del":328,"ins":1584},"empty_hyp":0,"utts_over_50pct":123}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":9.58,"ci95":[8.93,10.26],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1141,"del":127,"ins":150},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q5_K_M","metric":"wer","err_pct":9.61,"ci95":[8.96,10.26],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1151,"del":125,"ins":146},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":13.17,"ci95":[12.48,13.88],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2615,"del":449,"ins":417},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q5_K_M","metric":"wer","err_pct":13.36,"ci95":[12.69,14.07],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2648,"del":448,"ins":434},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.81,"ci95":[5.29,6.33],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":794,"del":150,"ins":102},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":6.01,"ci95":[5.47,6.56],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":824,"del":147,"ins":111},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":16.57,"ci95":[15.91,17.25],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2991,"del":372,"ins":313},"empty_hyp":0,"utts_over_50pct":16}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q5_K_M","metric":"wer","err_pct":16.73,"ci95":[16.05,17.48],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3035,"del":373,"ins":304},"empty_hyp":0,"utts_over_50pct":17}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":103.37,"ci95":[103.0,103.74],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":43235,"del":1553,"ins":1719},"empty_hyp":0,"utts_over_50pct":1000}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q5_K_M","metric":"wer","err_pct":103.29,"ci95":[102.96,103.62],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":43409,"del":1393,"ins":1669},"empty_hyp":0,"utts_over_50pct":1000}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":92.22,"ci95":[90.51,94.49],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11413,"del":2003,"ins":1278},"empty_hyp":0,"utts_over_50pct":619}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q5_K_M","metric":"wer","err_pct":92.09,"ci95":[90.24,93.92],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11351,"del":2086,"ins":1236},"empty_hyp":0,"utts_over_50pct":618}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":27.78,"ci95":[26.13,29.34],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2984,"del":553,"ins":308},"empty_hyp":1,"utts_over_50pct":98}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q5_K_M","metric":"wer","err_pct":27.91,"ci95":[26.28,29.5],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2992,"del":565,"ins":306},"empty_hyp":1,"utts_over_50pct":98}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":23.27,"ci95":[21.44,25.21],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2686,"del":1231,"ins":447},"empty_hyp":0,"utts_over_50pct":23}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":23.71,"ci95":[21.81,25.73],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2696,"del":1319,"ins":431},"empty_hyp":0,"utts_over_50pct":23}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":14.18,"ci95":[13.43,14.97],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2055,"del":248,"ins":214},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q5_K_M","metric":"wer","err_pct":14.39,"ci95":[13.66,15.14],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2108,"del":231,"ins":216},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":17.84,"ci95":[17.0,18.71],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2448,"del":273,"ins":325},"empty_hyp":0,"utts_over_50pct":18}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q5_K_M","metric":"wer","err_pct":18.07,"ci95":[17.21,18.97],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2473,"del":266,"ins":346},"empty_hyp":0,"utts_over_50pct":23}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":46.93,"ci95":[45.6,48.18],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6702,"del":1275,"ins":546},"empty_hyp":0,"utts_over_50pct":349}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q5_K_M","metric":"wer","err_pct":46.91,"ci95":[45.62,48.21],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6707,"del":1268,"ins":545},"empty_hyp":0,"utts_over_50pct":338}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":7.43,"ci95":[6.82,8.12],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":793,"del":87,"ins":127},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q5_K_M","metric":"wer","err_pct":7.55,"ci95":[6.94,8.24],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":812,"del":88,"ins":124},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":39.59,"ci95":[35.74,43.66],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":335,"del":19,"ins":55},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q5_K_M","metric":"wer","err_pct":39.79,"ci95":[36.35,43.45],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":338,"del":22,"ins":51},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.59,"ci95":[3.07,4.21],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":511,"del":173,"ins":79},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":3.52,"ci95":[2.99,4.13],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":503,"del":167,"ins":78},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":5.56,"ci95":[5.09,6.06],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1304,"del":321,"ins":190},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":5.57,"ci95":[5.06,6.06],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1299,"del":331,"ins":187},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":115.24,"ci95":[112.85,117.95],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15061,"del":2002,"ins":2688},"empty_hyp":1,"utts_over_50pct":979}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q5_K_M","metric":"wer","err_pct":115.4,"ci95":[112.82,118.42],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15243,"del":1828,"ins":2708},"empty_hyp":4,"utts_over_50pct":979}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":40.13,"ci95":[39.15,41.23],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5091,"del":394,"ins":541},"empty_hyp":0,"utts_over_50pct":201}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q5_K_M","metric":"wer","err_pct":40.11,"ci95":[39.07,41.16],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5094,"del":418,"ins":511},"empty_hyp":0,"utts_over_50pct":205}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":150.84,"ci95":[146.99,154.74],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":54849,"del":6541,"ins":34710},"empty_hyp":12,"utts_over_50pct":771}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q5_K_M","metric":"cer","err_pct":149.62,"ci95":[145.95,153.59],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":55244,"del":6072,"ins":34005},"empty_hyp":12,"utts_over_50pct":771}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":47.64,"ci95":[45.56,49.83],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11402,"del":7003,"ins":1669},"empty_hyp":2,"utts_over_50pct":235}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q5_K_M","metric":"wer","err_pct":46.97,"ci95":[44.89,49.09],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10969,"del":7128,"ins":1692},"empty_hyp":4,"utts_over_50pct":231}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":4.99,"ci95":[3.99,6.0],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":297,"del":529,"ins":56},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":4.97,"ci95":[3.97,5.99],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":293,"del":528,"ins":57},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":92.83,"ci95":[91.48,94.35],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16224,"del":1620,"ins":1613},"empty_hyp":0,"utts_over_50pct":922}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q5_K_M","metric":"wer","err_pct":92.07,"ci95":[90.68,93.55],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16140,"del":1687,"ins":1471},"empty_hyp":0,"utts_over_50pct":924}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":79.4,"ci95":[77.2,81.78],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6040,"del":453,"ins":1804},"empty_hyp":0,"utts_over_50pct":439}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q5_K_M","metric":"wer","err_pct":77.99,"ci95":[75.98,79.93],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5984,"del":472,"ins":1693},"empty_hyp":0,"utts_over_50pct":436}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":101.65,"ci95":[101.07,102.27],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35553,"del":1166,"ins":1326},"empty_hyp":0,"utts_over_50pct":405}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q5_K_M","metric":"cer","err_pct":101.64,"ci95":[100.97,102.38],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35499,"del":1224,"ins":1318},"empty_hyp":0,"utts_over_50pct":405}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":30.37,"ci95":[29.39,31.27],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4664,"del":275,"ins":264},"empty_hyp":0,"utts_over_50pct":110}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q5_K_M","metric":"wer","err_pct":30.6,"ci95":[29.59,31.51],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4706,"del":278,"ins":258},"empty_hyp":0,"utts_over_50pct":119}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":24.49,"ci95":[23.58,25.48],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3247,"del":199,"ins":329},"empty_hyp":0,"utts_over_50pct":40}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q5_K_M","metric":"wer","err_pct":24.42,"ci95":[23.5,25.41],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3244,"del":202,"ins":319},"empty_hyp":0,"utts_over_50pct":43}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q5_K_M","metric":"wer","err_pct":18.92,"ci95":[18.16,19.67],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3243,"del":263,"ins":483},"empty_hyp":0,"utts_over_50pct":23}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.67,"ci95":[2.23,3.33],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":866,"del":281,"ins":267},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.68,"ci95":[2.23,3.35],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":280,"ins":271},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.97,"ci95":[2.37,3.79],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":868,"del":286,"ins":420},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.83,"ci95":[2.31,3.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":873,"del":286,"ins":342},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.71,"ci95":[2.26,3.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":292,"ins":274},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.46,"ci95":[2.21,2.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":870,"del":270,"ins":162},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.68,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.65,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.72,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":11260.6,"xrt_compute":0.977,"load_ms":673.3,"mel_ms":19.2,"encode_ms":8274.3,"decode_ms":2967.1,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7366.1,"xrt_compute":1.493,"load_ms":379.9,"mel_ms":18.2,"encode_ms":5456.0,"decode_ms":1891.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7747.1,"xrt_compute":1.42,"load_ms":268.3,"mel_ms":18.0,"encode_ms":5786.7,"decode_ms":1942.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":1792.5,"xrt_compute":6.137,"load_ms":1418.7,"mel_ms":19.1,"encode_ms":878.7,"decode_ms":894.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1627.1,"xrt_compute":6.761,"load_ms":755.1,"mel_ms":18.3,"encode_ms":905.1,"decode_ms":703.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1590.6,"xrt_compute":6.916,"load_ms":371.1,"mel_ms":19.1,"encode_ms":927.8,"decode_ms":643.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/whisper-large-v3-turbo.json b/catalog/whisper-large-v3-turbo.json index d937afea..7ceddffa 100644 --- a/catalog/whisper-large-v3-turbo.json +++ b/catalog/whisper-large-v3-turbo.json @@ -3,35 +3,27 @@ "variant": "whisper-large-v3-turbo", "family": "whisper", "display_name": "Whisper large-v3-turbo", - "params": 808866560, - "architecture_pattern": "encoder-decoder-cross-attention", + "params": 808904208, "license": { "spdx": "apache-2.0", "display": "Apache-2.0" }, "upstream_repo": "openai/whisper-large-v3-turbo", + "upstream_commit": "41f01f3", "published_repo": "handy-computer/whisper-large-v3-turbo-gguf", "languages": [ - "en", "zh", "de", "es", "ru", "ko", "fr", "ja", "pt", "tr", "pl", "ca", - "nl", "ar", "sv", "it", "id", "hi", "fi", "vi", "he", "uk", "el", "ms", - "cs", "ro", "da", "hu", "ta", "no", "th", "ur", "hr", "bg", "lt", "la", - "mi", "ml", "cy", "sk", "te", "fa", "lv", "bn", "sr", "az", "sl", "kn", - "et", "mk", "br", "eu", "is", "hy", "ne", "mn", "bs", "kk", "sq", "sw", - "gl", "mr", "pa", "si", "km", "sn", "yo", "so", "af", "oc", "ka", "be", - "tg", "sd", "gu", "am", "yi", "lo", "uz", "fo", "ht", "ps", "tk", "nn", - "mt", "sa", "lb", "my", "bo", "tl", "mg", "as", "tt", "haw", "ln", "ha", - "ba", "jw", "su", "yue" + "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", + "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", + "fo", "fr", "gl", "gu", "haw", "ha", "he", "hi", "hr", "ht", "hu", "hy", + "id", "is", "it", "ja", "jw", "ka", "kk", "km", "kn", "ko", "la", "lb", + "ln", "lo", "lt", "lv", "mg", "mi", "mk", "ml", "mn", "mr", "ms", "mt", + "my", "ne", "nl", "nn", "no", "oc", "pa", "pl", "ps", "pt", "ro", "ru", + "sa", "sd", "si", "sk", "sl", "sn", "so", "sq", "sr", "su", "sv", "sw", + "ta", "te", "tg", "th", "tk", "tl", "tr", "tt", "uk", "ur", "uz", "vi", + "yi", "yo", "yue", "zh" ], "language_tag_form": "bare-bcp47", - "language_aliases": { - "tl": "fil", - "no": "nb", - "jw": "jv" - }, - "encoder_window_s": 30.0, "long_form_strategy": "chunked-unbounded", - "max_audio_s": null, - "max_output_tokens": 448, "capabilities": { "transcribe": {"supported":true,"verified":false}, "translate": {"supported":true,"targets":["en"],"verified":false,"note":"any supported source language to English text only"}, @@ -49,28 +41,211 @@ {"quant":"Q4_K_M","filename":"whisper-large-v3-turbo-Q4_K_M.gguf","size_bytes":536069728} ], "accuracy_benchmarks": [ - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.0,"ci95":[1.82,2.21],"n_utts":2620,"recipe":"librispeech-ts-segment","engine_sha":null,"measured_on":null,"errors":{"sub":761,"del":183,"ins":117},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.0,"ci95":[1.82,2.2],"n_utts":2620,"recipe":"librispeech-ts-segment","engine_sha":null,"measured_on":null,"errors":{"sub":765,"del":177,"ins":116},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.96,"ci95":[1.78,2.17],"n_utts":2620,"recipe":"librispeech-ts-segment","engine_sha":null,"measured_on":null,"errors":{"sub":762,"del":172,"ins":108},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.0,"ci95":[1.82,2.22],"n_utts":2620,"recipe":"librispeech-ts-segment","engine_sha":null,"measured_on":null,"errors":{"sub":765,"del":167,"ins":131},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.0,"ci95":[1.81,2.21],"n_utts":2620,"recipe":"librispeech-ts-segment","engine_sha":null,"measured_on":null,"errors":{"sub":777,"del":180,"ins":105},"empty_hyp":0,"utts_over_50pct":6} + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":36.06,"ci95":[33.6,38.5],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1651,"del":326,"ins":133},"empty_hyp":0,"utts_over_50pct":50}, + {"dataset":"fleurs","split":"test","language":"af","quant":"Q5_K_M","metric":"wer","err_pct":35.48,"ci95":[33.09,37.88],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1639,"del":311,"ins":126},"empty_hyp":0,"utts_over_50pct":49}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":146.29,"ci95":[142.41,150.14],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8041,"del":508,"ins":3979},"empty_hyp":0,"utts_over_50pct":516}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q5_K_M","metric":"wer","err_pct":147.76,"ci95":[143.93,151.61],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8172,"del":375,"ins":4107},"empty_hyp":0,"utts_over_50pct":516}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":15.48,"ci95":[14.1,16.99],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":923,"del":312,"ins":40},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":15.7,"ci95":[14.35,17.21],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":940,"del":311,"ins":42},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":101.22,"ci95":[100.8,101.73],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":25156,"del":21677,"ins":733},"empty_hyp":5,"utts_over_50pct":984}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q5_K_M","metric":"wer","err_pct":101.99,"ci95":[101.44,102.58],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":27610,"del":19233,"ins":1082},"empty_hyp":5,"utts_over_50pct":984}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":23.15,"ci95":[22.1,24.28],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3443,"del":342,"ins":364},"empty_hyp":0,"utts_over_50pct":41}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q5_K_M","metric":"wer","err_pct":23.31,"ci95":[22.2,24.37],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3477,"del":359,"ins":343},"empty_hyp":0,"utts_over_50pct":48}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":50.65,"ci95":[49.58,51.71],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9393,"del":571,"ins":585},"empty_hyp":0,"utts_over_50pct":464}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q5_K_M","metric":"wer","err_pct":50.79,"ci95":[49.77,51.81],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9400,"del":597,"ins":580},"empty_hyp":0,"utts_over_50pct":483}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":13.58,"ci95":[12.78,14.38],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1565,"del":217,"ins":142},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q5_K_M","metric":"wer","err_pct":13.68,"ci95":[12.9,14.51],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1580,"del":218,"ins":141},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":67.53,"ci95":[66.01,68.93],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18201,"del":9171,"ins":2863},"empty_hyp":1,"utts_over_50pct":683}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q5_K_M","metric":"wer","err_pct":69.3,"ci95":[67.74,70.71],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18402,"del":9572,"ins":3052},"empty_hyp":5,"utts_over_50pct":700}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":14.77,"ci95":[14.06,15.48],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2262,"del":304,"ins":214},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q5_K_M","metric":"wer","err_pct":15.16,"ci95":[14.44,15.88],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2320,"del":318,"ins":216},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":5.42,"ci95":[5.01,5.89],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":958,"del":188,"ins":166},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q5_K_M","metric":"wer","err_pct":5.25,"ci95":[4.87,5.64],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":957,"del":148,"ins":166},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":11.81,"ci95":[11.06,12.54],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1337,"del":131,"ins":149},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q5_K_M","metric":"wer","err_pct":11.9,"ci95":[11.16,12.67],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1349,"del":126,"ins":155},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":36.42,"ci95":[35.37,37.52],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7517,"del":948,"ins":1078},"empty_hyp":0,"utts_over_50pct":169}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q5_K_M","metric":"wer","err_pct":36.81,"ci95":[35.72,37.88],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7562,"del":929,"ins":1154},"empty_hyp":0,"utts_over_50pct":175}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":13.6,"ci95":[12.93,14.3],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2121,"del":291,"ins":330},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q5_K_M","metric":"wer","err_pct":13.88,"ci95":[13.19,14.56],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2155,"del":292,"ins":350},"empty_hyp":0,"utts_over_50pct":16}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.54,"ci95":[4.14,4.96],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":616,"del":100,"ins":134},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.71,"ci95":[4.3,5.15],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":621,"del":97,"ins":164},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":13.26,"ci95":[12.35,14.13],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1763,"del":151,"ins":98},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":13.38,"ci95":[12.48,14.27],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1784,"del":146,"ins":100},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.38,"ci95":[3.95,4.84],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":446,"del":107,"ins":84},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.35,"ci95":[3.92,4.78],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":443,"del":106,"ins":84},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.12,"ci95":[2.8,3.48],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":529,"del":103,"ins":95},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.12,"ci95":[2.81,3.47],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":532,"del":101,"ins":94},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":18.44,"ci95":[17.5,19.37],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2055,"del":247,"ins":442},"empty_hyp":0,"utts_over_50pct":29}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q5_K_M","metric":"wer","err_pct":18.72,"ci95":[17.79,19.69],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2072,"del":253,"ins":460},"empty_hyp":0,"utts_over_50pct":27}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":30.56,"ci95":[29.52,31.66],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4263,"del":251,"ins":1628},"empty_hyp":0,"utts_over_50pct":83}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q5_K_M","metric":"wer","err_pct":30.82,"ci95":[29.76,31.92],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4292,"del":245,"ins":1658},"empty_hyp":0,"utts_over_50pct":76}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":8.29,"ci95":[7.65,8.93],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":961,"del":136,"ins":129},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q5_K_M","metric":"wer","err_pct":8.26,"ci95":[7.58,8.91],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":957,"del":133,"ins":132},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":12.08,"ci95":[11.43,12.72],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2349,"del":474,"ins":368},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q5_K_M","metric":"wer","err_pct":12.09,"ci95":[11.53,12.66],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2387,"del":426,"ins":382},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.51,"ci95":[5.01,6.06],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":757,"del":132,"ins":103},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":5.59,"ci95":[5.08,6.13],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":757,"del":138,"ins":111},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":12.76,"ci95":[12.22,13.36],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2392,"del":250,"ins":189},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q5_K_M","metric":"wer","err_pct":13.13,"ci95":[12.57,13.73],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2449,"del":272,"ins":191},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":78.95,"ci95":[77.6,80.23],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15141,"del":19233,"ins":1145},"empty_hyp":6,"utts_over_50pct":813}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q5_K_M","metric":"wer","err_pct":78.3,"ci95":[77.03,79.52],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14086,"del":19957,"ins":1182},"empty_hyp":5,"utts_over_50pct":817}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":97.24,"ci95":[95.3,99.32],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10766,"del":3171,"ins":1557},"empty_hyp":0,"utts_over_50pct":618}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q5_K_M","metric":"wer","err_pct":97.38,"ci95":[95.35,99.63],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10638,"del":3214,"ins":1665},"empty_hyp":0,"utts_over_50pct":618}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":29.71,"ci95":[28.05,31.36],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3185,"del":570,"ins":358},"empty_hyp":0,"utts_over_50pct":127}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q5_K_M","metric":"wer","err_pct":29.91,"ci95":[28.15,31.6],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3192,"del":572,"ins":376},"empty_hyp":0,"utts_over_50pct":131}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":18.85,"ci95":[17.82,20.1],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2200,"del":923,"ins":413},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":19.18,"ci95":[18.03,20.46],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2205,"del":956,"ins":437},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":12.54,"ci95":[11.83,13.26],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1791,"del":223,"ins":212},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q5_K_M","metric":"wer","err_pct":12.69,"ci95":[11.99,13.37],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1804,"del":227,"ins":222},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":15.07,"ci95":[14.25,15.92],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2051,"del":231,"ins":291},"empty_hyp":0,"utts_over_50pct":16}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q5_K_M","metric":"wer","err_pct":15.26,"ci95":[14.44,16.14],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2089,"del":217,"ins":300},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":45.62,"ci95":[44.42,46.72],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6640,"del":960,"ins":686},"empty_hyp":0,"utts_over_50pct":334}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q5_K_M","metric":"wer","err_pct":45.88,"ci95":[44.69,46.99],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6654,"del":980,"ins":698},"empty_hyp":0,"utts_over_50pct":342}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":7.2,"ci95":[6.56,7.82],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":724,"del":115,"ins":137},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q5_K_M","metric":"wer","err_pct":7.03,"ci95":[6.4,7.67],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":709,"del":116,"ins":128},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":21.39,"ci95":[17.91,25.44],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":179,"del":17,"ins":25},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q5_K_M","metric":"wer","err_pct":22.17,"ci95":[18.2,26.81],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":185,"del":15,"ins":29},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.77,"ci95":[2.45,3.08],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":439,"del":69,"ins":81},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.86,"ci95":[2.51,3.21],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":444,"del":73,"ins":90},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":4.82,"ci95":[4.4,5.3],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1109,"del":295,"ins":171},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":4.84,"ci95":[4.42,5.33],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1113,"del":297,"ins":169},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":109.21,"ci95":[107.78,110.55],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11569,"del":5555,"ins":1594},"empty_hyp":3,"utts_over_50pct":979}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q5_K_M","metric":"wer","err_pct":109.99,"ci95":[108.66,111.42],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11576,"del":5548,"ins":1728},"empty_hyp":0,"utts_over_50pct":979}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":21.27,"ci95":[20.15,22.31],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2480,"del":245,"ins":468},"empty_hyp":0,"utts_over_50pct":41}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q5_K_M","metric":"wer","err_pct":21.57,"ci95":[20.37,22.87],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2503,"del":253,"ins":483},"empty_hyp":0,"utts_over_50pct":47}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":95.2,"ci95":[93.97,96.37],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":29731,"del":27154,"ins":3767},"empty_hyp":2,"utts_over_50pct":771}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q5_K_M","metric":"cer","err_pct":96.46,"ci95":[95.27,97.82],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":31993,"del":25503,"ins":3961},"empty_hyp":1,"utts_over_50pct":771}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":32.57,"ci95":[31.26,34.08],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5855,"del":5913,"ins":1954},"empty_hyp":0,"utts_over_50pct":101}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q5_K_M","metric":"wer","err_pct":33.4,"ci95":[31.97,35.04],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6103,"del":6001,"ins":1971},"empty_hyp":0,"utts_over_50pct":105}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.24,"ci95":[4.3,6.25],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":350,"del":529,"ins":47},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":5.06,"ci95":[4.12,6.07],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":327,"del":524,"ins":43},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":87.21,"ci95":[86.38,88.1],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15457,"del":2032,"ins":790},"empty_hyp":0,"utts_over_50pct":927}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q5_K_M","metric":"wer","err_pct":87.96,"ci95":[86.97,88.93],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15747,"del":1767,"ins":922},"empty_hyp":0,"utts_over_50pct":927}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":75.39,"ci95":[72.93,78.09],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5670,"del":599,"ins":1608},"empty_hyp":0,"utts_over_50pct":398}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q5_K_M","metric":"wer","err_pct":76.46,"ci95":[73.87,79.3],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5756,"del":577,"ins":1656},"empty_hyp":0,"utts_over_50pct":401}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":115.41,"ci95":[111.93,119.15],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":25892,"del":10285,"ins":7018},"empty_hyp":0,"utts_over_50pct":405}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q5_K_M","metric":"cer","err_pct":121.79,"ci95":[117.06,126.7],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":26481,"del":9725,"ins":9375},"empty_hyp":1,"utts_over_50pct":405}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":25.11,"ci95":[24.23,26.06],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3887,"del":211,"ins":204},"empty_hyp":0,"utts_over_50pct":62}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q5_K_M","metric":"wer","err_pct":25.54,"ci95":[24.68,26.48],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3956,"del":208,"ins":212},"empty_hyp":0,"utts_over_50pct":64}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":19.53,"ci95":[18.64,20.43],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2588,"del":163,"ins":259},"empty_hyp":0,"utts_over_50pct":19}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q5_K_M","metric":"wer","err_pct":19.78,"ci95":[18.88,20.72],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2616,"del":171,"ins":263},"empty_hyp":0,"utts_over_50pct":21}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":48.91,"ci95":[47.53,50.35],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11122,"del":1818,"ins":2234},"empty_hyp":0,"utts_over_50pct":409}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q5_K_M","metric":"wer","err_pct":49.48,"ci95":[47.92,51.06],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11248,"del":1822,"ins":2281},"empty_hyp":0,"utts_over_50pct":429}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":17.85,"ci95":[17.07,18.66],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3048,"del":244,"ins":472},"empty_hyp":0,"utts_over_50pct":20}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q5_K_M","metric":"wer","err_pct":17.91,"ci95":[17.16,18.69],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3060,"del":258,"ins":459},"empty_hyp":0,"utts_over_50pct":22}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":98.75,"ci95":[98.01,99.54],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41848,"del":10353,"ins":1361},"empty_hyp":0,"utts_over_50pct":940}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q5_K_M","metric":"wer","err_pct":99.19,"ci95":[98.49,99.84],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":42929,"del":9362,"ins":1507},"empty_hyp":1,"utts_over_50pct":944}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":101.49,"ci95":[100.04,103.08],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15122,"del":2192,"ins":1495},"empty_hyp":0,"utts_over_50pct":949}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q5_K_M","metric":"wer","err_pct":104.61,"ci95":[102.78,106.54],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15056,"del":2396,"ins":1935},"empty_hyp":0,"utts_over_50pct":949}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":36.12,"ci95":[35.26,36.99],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11530,"del":3929,"ins":3077},"empty_hyp":0,"utts_over_50pct":155}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q5_K_M","metric":"wer","err_pct":36.26,"ci95":[35.38,37.2],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11557,"del":3923,"ins":3124},"empty_hyp":0,"utts_over_50pct":168}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":8.64,"ci95":[8.0,9.3],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1073,"del":97,"ins":105},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q5_K_M","metric":"wer","err_pct":8.66,"ci95":[8.04,9.31],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1074,"del":93,"ins":111},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":70.92,"ci95":[69.87,71.96],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13004,"del":1412,"ins":1350},"empty_hyp":0,"utts_over_50pct":822}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q5_K_M","metric":"wer","err_pct":71.6,"ci95":[70.56,72.64],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13108,"del":1506,"ins":1305},"empty_hyp":0,"utts_over_50pct":821}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":121.67,"ci95":[117.84,125.71],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39288,"del":15150,"ins":16732},"empty_hyp":1,"utts_over_50pct":880}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q5_K_M","metric":"cer","err_pct":112.52,"ci95":[108.87,116.44],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":36349,"del":16901,"ins":12568},"empty_hyp":1,"utts_over_50pct":880}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":9.1,"ci95":[8.23,10.07],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":535,"del":81,"ins":77},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q5_K_M","metric":"wer","err_pct":9.15,"ci95":[8.28,10.09],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":539,"del":80,"ins":78},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":43.15,"ci95":[42.1,44.17],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9161,"del":2433,"ins":2796},"empty_hyp":0,"utts_over_50pct":207}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q5_K_M","metric":"wer","err_pct":43.59,"ci95":[42.55,44.63],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9232,"del":2390,"ins":2913},"empty_hyp":0,"utts_over_50pct":211}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":5.98,"ci95":[5.35,6.64],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":370,"del":61,"ins":71},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":6.07,"ci95":[5.41,6.74],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":375,"del":63,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":70.94,"ci95":[69.87,72.07],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15960,"del":1678,"ins":1089},"empty_hyp":0,"utts_over_50pct":898}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q5_K_M","metric":"wer","err_pct":71.5,"ci95":[70.37,72.7],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15914,"del":1725,"ins":1238},"empty_hyp":1,"utts_over_50pct":905}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":99.53,"ci95":[98.36,100.52],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":22923,"del":1664,"ins":799},"empty_hyp":0,"utts_over_50pct":559}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q5_K_M","metric":"wer","err_pct":100.53,"ci95":[99.57,101.39],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":23247,"del":1579,"ins":815},"empty_hyp":0,"utts_over_50pct":564}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":5.81,"ci95":[5.26,6.45],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":676,"del":84,"ins":76},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q5_K_M","metric":"wer","err_pct":5.87,"ci95":[5.31,6.47],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":681,"del":85,"ins":78},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":91.81,"ci95":[90.6,93.25],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10325,"del":1018,"ins":790},"empty_hyp":0,"utts_over_50pct":512}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q5_K_M","metric":"wer","err_pct":93.02,"ci95":[91.46,95.07],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10361,"del":998,"ins":934},"empty_hyp":0,"utts_over_50pct":512}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":4.17,"ci95":[3.73,4.69],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":94,"ins":181},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":4.14,"ci95":[3.69,4.66],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":612,"del":97,"ins":180},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":10.9,"ci95":[10.18,11.65],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1871,"del":238,"ins":159},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q5_K_M","metric":"wer","err_pct":10.68,"ci95":[9.96,11.43],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1801,"del":238,"ins":182},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.93,"ci95":[4.94,7.56],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":677,"del":77,"ins":141},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":5.94,"ci95":[4.94,7.54],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":680,"del":75,"ins":142},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":122.1,"ci95":[119.64,124.58],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":19571,"del":3445,"ins":5846},"empty_hyp":4,"utts_over_50pct":980}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q5_K_M","metric":"wer","err_pct":128.06,"ci95":[125.23,131.4],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20457,"del":2539,"ins":7276},"empty_hyp":4,"utts_over_50pct":980}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":10.21,"ci95":[9.44,11.03],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1290,"del":141,"ins":125},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q5_K_M","metric":"wer","err_pct":10.2,"ci95":[9.42,11.02],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1281,"del":155,"ins":119},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":20.56,"ci95":[19.59,21.52],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2703,"del":270,"ins":422},"empty_hyp":0,"utts_over_50pct":23}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q5_K_M","metric":"wer","err_pct":20.61,"ci95":[19.67,21.57],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2703,"del":270,"ins":430},"empty_hyp":0,"utts_over_50pct":19}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":110.94,"ci95":[109.37,112.62],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12894,"del":310,"ins":4547},"empty_hyp":0,"utts_over_50pct":923}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q5_K_M","metric":"wer","err_pct":110.86,"ci95":[109.03,112.89],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12886,"del":338,"ins":4513},"empty_hyp":0,"utts_over_50pct":922}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":101.29,"ci95":[99.86,102.77],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18032,"del":3950,"ins":2514},"empty_hyp":3,"utts_over_50pct":1019}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q5_K_M","metric":"wer","err_pct":101.56,"ci95":[100.27,102.96],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17641,"del":4394,"ins":2528},"empty_hyp":5,"utts_over_50pct":1019}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":32.36,"ci95":[29.53,35.38],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4167,"del":176,"ins":140},"empty_hyp":0,"utts_over_50pct":170}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q5_K_M","metric":"wer","err_pct":33.46,"ci95":[30.54,36.32],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4332,"del":167,"ins":136},"empty_hyp":0,"utts_over_50pct":177}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":8.72,"ci95":[8.12,9.34],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1053,"del":167,"ins":121},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q5_K_M","metric":"wer","err_pct":8.78,"ci95":[8.18,9.39],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1064,"del":161,"ins":126},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":33.96,"ci95":[32.53,35.33],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2595,"del":279,"ins":521},"empty_hyp":0,"utts_over_50pct":63}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q5_K_M","metric":"wer","err_pct":34.08,"ci95":[32.64,35.49],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2620,"del":279,"ins":508},"empty_hyp":0,"utts_over_50pct":65}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":27.41,"ci95":[26.29,28.76],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5586,"del":1714,"ins":1929},"empty_hyp":0,"utts_over_50pct":39}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q5_K_M","metric":"wer","err_pct":27.94,"ci95":[26.78,29.32],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5722,"del":1633,"ins":2050},"empty_hyp":0,"utts_over_50pct":39}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":63.03,"ci95":[60.4,65.94],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8435,"del":4727,"ins":1087},"empty_hyp":2,"utts_over_50pct":238}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q5_K_M","metric":"wer","err_pct":63.98,"ci95":[61.06,66.91],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8839,"del":4468,"ins":1158},"empty_hyp":0,"utts_over_50pct":238}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":106.06,"ci95":[104.44,107.88],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11801,"del":798,"ins":1225},"empty_hyp":0,"utts_over_50pct":598}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q5_K_M","metric":"wer","err_pct":105.09,"ci95":[103.64,106.6],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11682,"del":810,"ins":1205},"empty_hyp":1,"utts_over_50pct":598}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":13.15,"ci95":[12.45,14.04],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6162,"del":3459,"ins":3205},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q5_K_M","metric":"cer","err_pct":13.3,"ci95":[12.63,14.18],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6276,"del":3480,"ins":3212},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":6.97,"ci95":[6.33,7.64],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":655,"del":139,"ins":133},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q5_K_M","metric":"wer","err_pct":7.15,"ci95":[6.49,7.79],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":671,"del":140,"ins":139},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":7.31,"ci95":[6.72,7.87],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":832,"del":108,"ins":110},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q5_K_M","metric":"wer","err_pct":7.22,"ci95":[6.63,7.79],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":818,"del":113,"ins":107},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":23.19,"ci95":[21.92,24.57],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1569,"del":168,"ins":234},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q5_K_M","metric":"wer","err_pct":23.35,"ci95":[22.07,24.71],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1583,"del":168,"ins":233},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":102.52,"ci95":[101.45,103.64],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13634,"del":1908,"ins":828},"empty_hyp":0,"utts_over_50pct":862}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q5_K_M","metric":"wer","err_pct":102.65,"ci95":[101.44,103.9],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13489,"del":2051,"ins":851},"empty_hyp":0,"utts_over_50pct":862}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.48,"ci95":[8.85,10.17],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1970,"del":282,"ins":215},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q5_K_M","metric":"wer","err_pct":9.43,"ci95":[8.85,10.07],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1964,"del":263,"ins":227},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":99.38,"ci95":[98.13,100.68],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17716,"del":1333,"ins":2972},"empty_hyp":0,"utts_over_50pct":830}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q5_K_M","metric":"wer","err_pct":100.0,"ci95":[98.67,101.44],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17730,"del":1410,"ins":3019},"empty_hyp":0,"utts_over_50pct":829}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":34.62,"ci95":[33.41,36.13],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9232,"del":303,"ins":504},"empty_hyp":0,"utts_over_50pct":69}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q5_K_M","metric":"cer","err_pct":35.58,"ci95":[34.14,37.39],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9298,"del":288,"ins":732},"empty_hyp":0,"utts_over_50pct":78}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.5,"ci95":[7.65,9.4],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1379,"del":1471,"ins":182},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":8.62,"ci95":[7.76,9.49],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1434,"del":1468,"ins":172},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.01,"ci95":[1.83,2.21],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":765,"del":183,"ins":117},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.01,"ci95":[1.82,2.22],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":185,"ins":117},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.01,"ci95":[1.82,2.2],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":185,"ins":111},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.03,"ci95":[1.83,2.25],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":174,"ins":131},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.04,"ci95":[1.85,2.26],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":784,"del":188,"ins":111},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.0,"ci95":[1.82,2.21],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"errors":{"sub":761,"del":183,"ins":117},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.0,"ci95":[1.82,2.2],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"errors":{"sub":765,"del":177,"ins":116},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.96,"ci95":[1.78,2.17],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"errors":{"sub":762,"del":172,"ins":108},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.0,"ci95":[1.82,2.22],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"errors":{"sub":765,"del":167,"ins":131},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.0,"ci95":[1.81,2.21],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"errors":{"sub":777,"del":180,"ins":105},"empty_hyp":0,"utts_over_50pct":6} ], "speed_benchmarks": [ - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4915.7,"xrt_compute":2.238,"load_ms":348.9,"mel_ms":42.0,"encode_ms":4507.6,"decode_ms":366.2,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":10262.0,"xrt_compute":3.443,"load_ms":361.5,"mel_ms":42.6,"encode_ms":4503.0,"decode_ms":5716.4,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4773.2,"xrt_compute":2.305,"load_ms":547.3,"mel_ms":39.4,"encode_ms":4365.9,"decode_ms":367.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":10160.7,"xrt_compute":3.477,"load_ms":555.3,"mel_ms":44.3,"encode_ms":4395.9,"decode_ms":5720.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":15744.4,"xrt_compute":0.699,"load_ms":419.9,"mel_ms":46.4,"encode_ms":14898.3,"decode_ms":799.7,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":8606.1,"xrt_compute":1.278,"load_ms":371.9,"mel_ms":18.3,"encode_ms":8156.7,"decode_ms":431.1,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5698.2,"xrt_compute":1.93,"load_ms":222.4,"mel_ms":18.2,"encode_ms":5406.3,"decode_ms":273.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6073.7,"xrt_compute":1.811,"load_ms":146.4,"mel_ms":18.1,"encode_ms":5779.5,"decode_ms":276.1,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":1060.0,"xrt_compute":10.377,"load_ms":793.8,"mel_ms":19.6,"encode_ms":877.0,"decode_ms":163.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1050.0,"xrt_compute":10.476,"load_ms":450.2,"mel_ms":18.9,"encode_ms":905.6,"decode_ms":125.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1061.6,"xrt_compute":10.361,"load_ms":285.2,"mel_ms":19.6,"encode_ms":928.0,"decode_ms":114.0,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":11870.0,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5890.0,"xrt_compute":1.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15340.0,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7600.0,"xrt_compute":1.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":641.1,"xrt_compute":55.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":288.7,"xrt_compute":38.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":649.5,"xrt_compute":54.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":286.1,"xrt_compute":38.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":32216.9,"xrt_compute":1.097,"load_ms":423.1,"mel_ms":54.5,"encode_ms":15063.5,"decode_ms":17098.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":19850.7,"xrt_compute":0.554,"load_ms":666.1,"mel_ms":49.1,"encode_ms":18807.3,"decode_ms":994.3,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":15744.4,"xrt_compute":0.699,"load_ms":419.9,"mel_ms":46.4,"encode_ms":14898.3,"decode_ms":799.7,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":40179.2,"xrt_compute":0.879,"load_ms":661.3,"mel_ms":62.1,"encode_ms":18767.6,"decode_ms":21349.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":286.1,"xrt_compute":38.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":649.5,"xrt_compute":54.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":288.7,"xrt_compute":38.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":641.1,"xrt_compute":55.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7600.0,"xrt_compute":1.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15340.0,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5890.0,"xrt_compute":1.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":11870.0,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null} - ] + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":19850.7,"xrt_compute":0.554,"load_ms":666.1,"mel_ms":49.1,"encode_ms":18807.3,"decode_ms":994.3,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":10262.0,"xrt_compute":3.443,"load_ms":361.5,"mel_ms":42.6,"encode_ms":4503.0,"decode_ms":5716.4,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4915.7,"xrt_compute":2.238,"load_ms":348.9,"mel_ms":42.0,"encode_ms":4507.6,"decode_ms":366.2,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":10160.7,"xrt_compute":3.477,"load_ms":555.3,"mel_ms":44.3,"encode_ms":4395.9,"decode_ms":5720.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4773.2,"xrt_compute":2.305,"load_ms":547.3,"mel_ms":39.4,"encode_ms":4365.9,"decode_ms":367.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null} + ], + "architecture_pattern": "encoder-decoder-cross-attention", + "language_aliases": { + "tl": "fil", + "no": "nb", + "jw": "jv" + }, + "encoder_window_s": 30.0, + "max_output_tokens": 448 } diff --git a/catalog/whisper-large-v3.json b/catalog/whisper-large-v3.json new file mode 100644 index 00000000..8cf0d2fb --- /dev/null +++ b/catalog/whisper-large-v3.json @@ -0,0 +1,253 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "whisper-large-v3", + "family": "whisper", + "display_name": "whisper-large-v3", + "params": 1543507040, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "openai/whisper-large-v3", + "upstream_commit": "06f233f", + "published_repo": "handy-computer/whisper-large-v3-gguf", + "languages": [ + "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", + "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", + "fo", "fr", "gl", "gu", "haw", "ha", "he", "hi", "hr", "ht", "hu", "hy", + "id", "is", "it", "ja", "jw", "ka", "kk", "km", "kn", "ko", "la", "lb", + "ln", "lo", "lt", "lv", "mg", "mi", "mk", "ml", "mn", "mr", "ms", "mt", + "my", "ne", "nl", "nn", "no", "oc", "pa", "pl", "ps", "pt", "ro", "ru", + "sa", "sd", "si", "sk", "sl", "sn", "so", "sq", "sr", "su", "sv", "sw", + "ta", "te", "tg", "th", "tk", "tl", "tr", "tt", "uk", "ur", "uz", "vi", + "yi", "yo", "yue", "zh" + ], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F16","filename":"whisper-large-v3-F16.gguf","size_bytes":3107236640}, + {"quant":"Q8_0","filename":"whisper-large-v3-Q8_0.gguf","size_bytes":1668741440}, + {"quant":"Q6_K","filename":"whisper-large-v3-Q6_K.gguf","size_bytes":1297130208}, + {"quant":"Q5_K_M","filename":"whisper-large-v3-Q5_K_M.gguf","size_bytes":1161143008}, + {"quant":"Q4_K_M","filename":"whisper-large-v3-Q4_K_M.gguf","size_bytes":997303008} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":32.43,"ci95":[30.62,34.37],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1498,"del":265,"ins":135},"empty_hyp":0,"utts_over_50pct":29}, + {"dataset":"fleurs","split":"test","language":"af","quant":"Q5_K_M","metric":"wer","err_pct":32.62,"ci95":[30.85,34.45],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1499,"del":264,"ins":146},"empty_hyp":0,"utts_over_50pct":29}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":132.7,"ci95":[128.33,137.71],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6805,"del":1749,"ins":2810},"empty_hyp":0,"utts_over_50pct":516}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q5_K_M","metric":"wer","err_pct":132.8,"ci95":[128.47,137.23],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7023,"del":1531,"ins":2819},"empty_hyp":1,"utts_over_50pct":516}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":14.92,"ci95":[13.55,16.39],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":883,"del":299,"ins":47},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":15.07,"ci95":[13.7,16.55],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":880,"del":314,"ins":47},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":104.77,"ci95":[104.31,105.27],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":43092,"del":3842,"ins":2300},"empty_hyp":1,"utts_over_50pct":984}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q5_K_M","metric":"wer","err_pct":104.63,"ci95":[104.16,105.18],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":42743,"del":4196,"ins":2231},"empty_hyp":2,"utts_over_50pct":984}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":21.1,"ci95":[20.13,22.06],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3148,"del":338,"ins":296},"empty_hyp":0,"utts_over_50pct":27}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q5_K_M","metric":"wer","err_pct":21.38,"ci95":[20.4,22.39],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3174,"del":369,"ins":290},"empty_hyp":0,"utts_over_50pct":33}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":43.78,"ci95":[42.88,44.74],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7979,"del":547,"ins":591},"empty_hyp":0,"utts_over_50pct":271}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q5_K_M","metric":"wer","err_pct":43.65,"ci95":[42.74,44.61],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7958,"del":558,"ins":575},"empty_hyp":0,"utts_over_50pct":276}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":12.82,"ci95":[12.0,13.63],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1466,"del":195,"ins":156},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q5_K_M","metric":"wer","err_pct":12.88,"ci95":[12.08,13.71],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1485,"del":187,"ins":153},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":55.03,"ci95":[53.68,56.39],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12373,"del":9950,"ins":2315},"empty_hyp":1,"utts_over_50pct":438}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q5_K_M","metric":"wer","err_pct":55.59,"ci95":[54.3,56.99],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11992,"del":10793,"ins":2105},"empty_hyp":0,"utts_over_50pct":448}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":13.5,"ci95":[12.8,14.17],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2047,"del":302,"ins":193},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q5_K_M","metric":"wer","err_pct":13.46,"ci95":[12.79,14.13],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2042,"del":303,"ins":190},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":4.97,"ci95":[4.52,5.44],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":868,"del":168,"ins":168},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q5_K_M","metric":"wer","err_pct":4.87,"ci95":[4.49,5.27],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":878,"del":132,"ins":171},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":10.5,"ci95":[9.79,11.22],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1170,"del":129,"ins":139},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q5_K_M","metric":"wer","err_pct":10.56,"ci95":[9.85,11.29],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1177,"del":131,"ins":138},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":30.67,"ci95":[29.64,31.68],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6204,"del":929,"ins":904},"empty_hyp":0,"utts_over_50pct":90}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q5_K_M","metric":"wer","err_pct":30.87,"ci95":[29.86,31.89],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6222,"del":930,"ins":937},"empty_hyp":0,"utts_over_50pct":92}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":12.48,"ci95":[11.78,13.16],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1937,"del":251,"ins":327},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q5_K_M","metric":"wer","err_pct":12.55,"ci95":[11.88,13.23],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1936,"del":257,"ins":337},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.13,"ci95":[3.74,4.51],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":550,"del":104,"ins":118},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.19,"ci95":[3.8,4.58],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":558,"del":106,"ins":120},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":11.53,"ci95":[10.7,12.34],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1528,"del":136,"ins":85},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":11.71,"ci95":[10.91,12.54],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1556,"del":138,"ins":83},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.03,"ci95":[3.59,4.46],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":110,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":4.03,"ci95":[3.59,4.45],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":109,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.06,"ci95":[3.63,4.49],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":406,"del":115,"ins":70},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":4.09,"ci95":[3.65,4.53],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":407,"del":116,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":2.7,"ci95":[2.41,3.01],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":459,"del":99,"ins":71},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":2.71,"ci95":[2.42,3.0],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":460,"del":97,"ins":74},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":18.3,"ci95":[17.41,19.25],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2027,"del":266,"ins":430},"empty_hyp":0,"utts_over_50pct":18}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q5_K_M","metric":"wer","err_pct":18.31,"ci95":[17.37,19.21],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2026,"del":268,"ins":430},"empty_hyp":0,"utts_over_50pct":19}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":30.11,"ci95":[29.13,31.18],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4173,"del":250,"ins":1630},"empty_hyp":0,"utts_over_50pct":80}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q6_K","metric":"wer","err_pct":30.16,"ci95":[29.11,31.22],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4173,"del":248,"ins":1642},"empty_hyp":0,"utts_over_50pct":79}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q5_K_M","metric":"wer","err_pct":30.27,"ci95":[29.21,31.46],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4181,"del":226,"ins":1678},"empty_hyp":0,"utts_over_50pct":79}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q4_K_M","metric":"wer","err_pct":30.46,"ci95":[29.36,31.71],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4195,"del":222,"ins":1706},"empty_hyp":0,"utts_over_50pct":79}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":7.73,"ci95":[7.12,8.32],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":904,"del":125,"ins":114},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q5_K_M","metric":"wer","err_pct":7.85,"ci95":[7.24,8.47],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":925,"del":125,"ins":112},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":11.82,"ci95":[11.17,12.51],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2237,"del":507,"ins":379},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q6_K","metric":"wer","err_pct":11.66,"ci95":[11.04,12.31],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2225,"del":502,"ins":354},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q5_K_M","metric":"wer","err_pct":11.73,"ci95":[11.12,12.39],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2253,"del":502,"ins":345},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q4_K_M","metric":"wer","err_pct":11.71,"ci95":[11.09,12.36],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2267,"del":470,"ins":357},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.39,"ci95":[4.88,5.94],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":732,"del":148,"ins":90},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":5.37,"ci95":[4.87,5.9],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":728,"del":139,"ins":99},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":13.27,"ci95":[12.74,13.87],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2458,"del":248,"ins":238},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q5_K_M","metric":"wer","err_pct":13.36,"ci95":[12.82,13.99],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2489,"del":250,"ins":224},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":66.38,"ci95":[64.99,67.88],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11626,"del":16597,"ins":1640},"empty_hyp":4,"utts_over_50pct":650}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q5_K_M","metric":"wer","err_pct":66.87,"ci95":[65.41,68.28],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11551,"del":16715,"ins":1817},"empty_hyp":12,"utts_over_50pct":659}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":85.65,"ci95":[84.44,86.99],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10593,"del":1944,"ins":1111},"empty_hyp":0,"utts_over_50pct":610}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q5_K_M","metric":"wer","err_pct":85.62,"ci95":[84.39,86.88],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10615,"del":1926,"ins":1101},"empty_hyp":0,"utts_over_50pct":611}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":26.73,"ci95":[25.1,28.27],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2795,"del":592,"ins":313},"empty_hyp":0,"utts_over_50pct":103}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q5_K_M","metric":"wer","err_pct":26.74,"ci95":[25.08,28.34],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2825,"del":565,"ins":312},"empty_hyp":0,"utts_over_50pct":98}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":17.06,"ci95":[15.97,18.29],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1908,"del":924,"ins":368},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q6_K","metric":"wer","err_pct":17.31,"ci95":[16.28,18.56],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1922,"del":954,"ins":370},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":17.21,"ci95":[16.16,18.4],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1917,"del":935,"ins":375},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q4_K_M","metric":"wer","err_pct":17.18,"ci95":[16.12,18.37],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1924,"del":936,"ins":362},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":10.94,"ci95":[10.34,11.55],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1586,"del":178,"ins":178},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q5_K_M","metric":"wer","err_pct":11.0,"ci95":[10.4,11.61],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1598,"del":178,"ins":176},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":13.4,"ci95":[12.72,14.14],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1820,"del":190,"ins":279},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q5_K_M","metric":"wer","err_pct":13.59,"ci95":[12.9,14.31],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1841,"del":199,"ins":281},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":43.64,"ci95":[42.4,44.86],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6202,"del":1153,"ins":570},"empty_hyp":0,"utts_over_50pct":284}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q5_K_M","metric":"wer","err_pct":43.38,"ci95":[42.15,44.54],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6218,"del":1123,"ins":537},"empty_hyp":0,"utts_over_50pct":280}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":6.08,"ci95":[5.48,6.67],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":83,"ins":121},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q5_K_M","metric":"wer","err_pct":6.14,"ci95":[5.56,6.73],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":629,"del":90,"ins":113},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":31.85,"ci95":[27.47,36.75],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":272,"del":23,"ins":34},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q5_K_M","metric":"wer","err_pct":31.95,"ci95":[27.48,36.73],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":275,"del":22,"ins":33},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.54,"ci95":[2.16,2.98],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":374,"del":113,"ins":52},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q6_K","metric":"wer","err_pct":2.49,"ci95":[2.16,2.85],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":380,"del":92,"ins":57},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.51,"ci95":[2.14,2.91],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":382,"del":99,"ins":53},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q4_K_M","metric":"wer","err_pct":2.53,"ci95":[2.14,2.94],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":383,"del":105,"ins":50},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":4.81,"ci95":[4.25,5.61],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1057,"del":360,"ins":155},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":4.81,"ci95":[4.22,5.6],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1037,"del":383,"ins":149},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":93.97,"ci95":[93.03,94.94],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10347,"del":4748,"ins":1011},"empty_hyp":0,"utts_over_50pct":964}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q5_K_M","metric":"wer","err_pct":94.83,"ci95":[93.92,95.81],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10532,"del":4706,"ins":1015},"empty_hyp":0,"utts_over_50pct":962}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":33.07,"ci95":[32.07,34.13],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4150,"del":391,"ins":424},"empty_hyp":0,"utts_over_50pct":95}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q5_K_M","metric":"wer","err_pct":33.18,"ci95":[32.15,34.19],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4137,"del":423,"ins":422},"empty_hyp":0,"utts_over_50pct":93}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":101.09,"ci95":[99.27,102.93],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39194,"del":14305,"ins":10904},"empty_hyp":0,"utts_over_50pct":771}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q5_K_M","metric":"cer","err_pct":101.57,"ci95":[99.75,103.45],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39554,"del":14055,"ins":11100},"empty_hyp":1,"utts_over_50pct":771}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":31.99,"ci95":[30.69,33.47],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5727,"del":6119,"ins":1634},"empty_hyp":1,"utts_over_50pct":90}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q5_K_M","metric":"wer","err_pct":32.15,"ci95":[30.81,33.63],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5708,"del":6193,"ins":1645},"empty_hyp":1,"utts_over_50pct":86}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":4.89,"ci95":[3.93,5.9],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":302,"del":526,"ins":37},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q6_K","metric":"cer","err_pct":4.86,"ci95":[3.9,5.87],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":294,"del":529,"ins":37},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":4.84,"ci95":[3.86,5.86],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":294,"del":527,"ins":35},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q4_K_M","metric":"cer","err_pct":4.86,"ci95":[3.9,5.86],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":296,"del":531,"ins":33},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":85.67,"ci95":[84.45,86.95],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15504,"del":1429,"ins":1024},"empty_hyp":0,"utts_over_50pct":921}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q5_K_M","metric":"wer","err_pct":84.88,"ci95":[84.02,85.74],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15392,"del":1651,"ins":748},"empty_hyp":0,"utts_over_50pct":922}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":72.22,"ci95":[70.26,74.29],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5560,"del":429,"ins":1557},"empty_hyp":0,"utts_over_50pct":408}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q5_K_M","metric":"wer","err_pct":72.13,"ci95":[70.08,74.19],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5558,"del":458,"ins":1521},"empty_hyp":0,"utts_over_50pct":404}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":100.28,"ci95":[99.24,101.49],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33708,"del":2361,"ins":1462},"empty_hyp":0,"utts_over_50pct":405}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q5_K_M","metric":"cer","err_pct":100.4,"ci95":[99.04,102.25],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33209,"del":2839,"ins":1529},"empty_hyp":1,"utts_over_50pct":405}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":24.55,"ci95":[23.68,25.41],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3793,"del":201,"ins":212},"empty_hyp":0,"utts_over_50pct":61}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q5_K_M","metric":"wer","err_pct":24.49,"ci95":[23.61,25.38],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3784,"del":207,"ins":205},"empty_hyp":0,"utts_over_50pct":59}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":19.21,"ci95":[18.35,20.07],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2560,"del":159,"ins":242},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q5_K_M","metric":"wer","err_pct":19.38,"ci95":[18.5,20.22],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2582,"del":159,"ins":247},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":38.78,"ci95":[37.57,40.01],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8945,"del":1195,"ins":1889},"empty_hyp":0,"utts_over_50pct":255}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q5_K_M","metric":"wer","err_pct":38.9,"ci95":[37.69,40.08],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9011,"del":1170,"ins":1888},"empty_hyp":0,"utts_over_50pct":259}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":15.09,"ci95":[14.29,15.89],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2541,"del":234,"ins":407},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q5_K_M","metric":"wer","err_pct":15.21,"ci95":[14.41,16.04],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2562,"del":239,"ins":406},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":100.17,"ci95":[99.88,100.48],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":40925,"del":13002,"ins":404},"empty_hyp":0,"utts_over_50pct":957}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q5_K_M","metric":"wer","err_pct":100.18,"ci95":[99.93,100.45],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39940,"del":14068,"ins":326},"empty_hyp":0,"utts_over_50pct":957}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":85.6,"ci95":[84.78,86.45],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13800,"del":979,"ins":1085},"empty_hyp":0,"utts_over_50pct":946}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q5_K_M","metric":"wer","err_pct":86.06,"ci95":[85.22,86.87],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13842,"del":944,"ins":1163},"empty_hyp":0,"utts_over_50pct":947}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":34.3,"ci95":[33.52,35.13],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11097,"del":3989,"ins":2516},"empty_hyp":0,"utts_over_50pct":110}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q5_K_M","metric":"wer","err_pct":34.35,"ci95":[33.57,35.23],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11071,"del":4026,"ins":2531},"empty_hyp":0,"utts_over_50pct":118}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":7.59,"ci95":[7.04,8.19],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":937,"del":96,"ins":86},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q5_K_M","metric":"wer","err_pct":7.65,"ci95":[7.07,8.23],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":940,"del":98,"ins":90},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":68.79,"ci95":[67.66,70.06],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12676,"del":1117,"ins":1501},"empty_hyp":0,"utts_over_50pct":801}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q5_K_M","metric":"wer","err_pct":68.72,"ci95":[67.76,69.67],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12764,"del":1157,"ins":1356},"empty_hyp":0,"utts_over_50pct":813}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":143.39,"ci95":[138.96,148.17],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":44509,"del":13259,"ins":26105},"empty_hyp":15,"utts_over_50pct":880}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q5_K_M","metric":"cer","err_pct":141.43,"ci95":[137.29,145.72],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":43699,"del":13877,"ins":25148},"empty_hyp":14,"utts_over_50pct":880}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":8.19,"ci95":[7.34,9.09],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":492,"del":67,"ins":65},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q5_K_M","metric":"wer","err_pct":8.12,"ci95":[7.29,8.98],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":490,"del":68,"ins":61},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":40.44,"ci95":[39.64,41.28],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8605,"del":2155,"ins":2725},"empty_hyp":0,"utts_over_50pct":144}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q5_K_M","metric":"wer","err_pct":40.27,"ci95":[39.39,41.17],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8602,"del":2137,"ins":2688},"empty_hyp":0,"utts_over_50pct":143}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":5.42,"ci95":[4.81,6.07],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":327,"del":63,"ins":65},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":5.45,"ci95":[4.84,6.14],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":332,"del":63,"ins":63},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":69.15,"ci95":[68.2,70.07],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15986,"del":1325,"ins":945},"empty_hyp":0,"utts_over_50pct":872}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q5_K_M","metric":"wer","err_pct":69.59,"ci95":[68.66,70.56],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16014,"del":1428,"ins":931},"empty_hyp":0,"utts_over_50pct":883}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":57.39,"ci95":[55.51,59.08],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7879,"del":6045,"ins":713},"empty_hyp":2,"utts_over_50pct":303}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q5_K_M","metric":"wer","err_pct":59.86,"ci95":[57.99,61.74],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7763,"del":6821,"ins":684},"empty_hyp":2,"utts_over_50pct":319}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":4.69,"ci95":[4.15,5.26],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":526,"del":95,"ins":54},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q5_K_M","metric":"wer","err_pct":4.72,"ci95":[4.22,5.31],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":533,"del":92,"ins":54},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":89.14,"ci95":[88.29,90.04],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10194,"del":926,"ins":661},"empty_hyp":0,"utts_over_50pct":512}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q5_K_M","metric":"wer","err_pct":89.29,"ci95":[88.39,90.24],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10214,"del":917,"ins":670},"empty_hyp":0,"utts_over_50pct":512}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":3.88,"ci95":[3.45,4.37],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":580,"del":99,"ins":154},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":3.85,"ci95":[3.42,4.34],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":571,"del":99,"ins":157},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":9.2,"ci95":[8.56,9.85],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1532,"del":223,"ins":158},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q5_K_M","metric":"wer","err_pct":9.26,"ci95":[8.61,9.92],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1539,"del":223,"ins":165},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":4.96,"ci95":[4.51,5.41],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":633,"del":72,"ins":44},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":4.9,"ci95":[4.48,5.36],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":625,"del":71,"ins":44},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":184.2,"ci95":[182.18,186.34],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":23422,"del":132,"ins":19988},"empty_hyp":0,"utts_over_50pct":980}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q5_K_M","metric":"wer","err_pct":183.27,"ci95":[181.16,185.44],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":23312,"del":244,"ins":19765},"empty_hyp":0,"utts_over_50pct":980}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":9.25,"ci95":[8.57,10.01],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1168,"del":146,"ins":96},"empty_hyp":1,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q5_K_M","metric":"wer","err_pct":9.22,"ci95":[8.54,9.98],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1161,"del":149,"ins":96},"empty_hyp":1,"utts_over_50pct":7}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":19.15,"ci95":[18.25,20.02],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2549,"del":229,"ins":384},"empty_hyp":0,"utts_over_50pct":21}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q5_K_M","metric":"wer","err_pct":19.33,"ci95":[18.46,20.22],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2575,"del":233,"ins":385},"empty_hyp":0,"utts_over_50pct":22}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":115.38,"ci95":[113.66,117.14],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13054,"del":159,"ins":5247},"empty_hyp":0,"utts_over_50pct":924}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q5_K_M","metric":"wer","err_pct":114.88,"ci95":[113.3,116.65],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13051,"del":187,"ins":5143},"empty_hyp":0,"utts_over_50pct":924}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":91.1,"ci95":[90.11,92.16],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17706,"del":1512,"ins":2815},"empty_hyp":1,"utts_over_50pct":1015}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q5_K_M","metric":"wer","err_pct":91.44,"ci95":[90.44,92.47],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17723,"del":1547,"ins":2844},"empty_hyp":1,"utts_over_50pct":1018}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":28.49,"ci95":[25.44,31.46],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3680,"del":149,"ins":118},"empty_hyp":0,"utts_over_50pct":127}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q5_K_M","metric":"wer","err_pct":27.55,"ci95":[24.55,30.6],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3557,"del":147,"ins":112},"empty_hyp":0,"utts_over_50pct":119}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":7.8,"ci95":[7.22,8.37],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":930,"del":155,"ins":115},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q5_K_M","metric":"wer","err_pct":8.01,"ci95":[7.38,8.68],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":954,"del":152,"ins":126},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":34.57,"ci95":[33.19,35.91],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2697,"del":301,"ins":458},"empty_hyp":0,"utts_over_50pct":72}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q5_K_M","metric":"wer","err_pct":34.85,"ci95":[33.54,36.14],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2721,"del":309,"ins":454},"empty_hyp":0,"utts_over_50pct":76}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":20.04,"ci95":[18.55,21.85],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3722,"del":1327,"ins":1697},"empty_hyp":0,"utts_over_50pct":16}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q5_K_M","metric":"wer","err_pct":19.92,"ci95":[18.42,21.73],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3739,"del":1351,"ins":1616},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":65.84,"ci95":[63.45,68.22],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7074,"del":6984,"ins":826},"empty_hyp":7,"utts_over_50pct":278}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q5_K_M","metric":"wer","err_pct":67.5,"ci95":[64.84,69.88],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7061,"del":7301,"ins":898},"empty_hyp":10,"utts_over_50pct":294}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":80.86,"ci95":[78.75,83.24],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8522,"del":336,"ins":1681},"empty_hyp":0,"utts_over_50pct":561}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q5_K_M","metric":"wer","err_pct":81.19,"ci95":[79.09,83.61],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8516,"del":345,"ins":1721},"empty_hyp":0,"utts_over_50pct":567}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":8.78,"ci95":[8.1,9.55],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3851,"del":2090,"ins":2618},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q5_K_M","metric":"cer","err_pct":8.88,"ci95":[8.17,9.65],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3889,"del":2167,"ins":2603},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":6.51,"ci95":[5.9,7.13],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":616,"del":129,"ins":120},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q6_K","metric":"wer","err_pct":6.48,"ci95":[5.88,7.11],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":612,"del":128,"ins":122},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q5_K_M","metric":"wer","err_pct":6.55,"ci95":[5.95,7.19],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":130,"ins":121},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q4_K_M","metric":"wer","err_pct":6.61,"ci95":[6.02,7.25],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":622,"del":133,"ins":124},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":6.28,"ci95":[5.74,6.83],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":722,"del":95,"ins":85},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q5_K_M","metric":"wer","err_pct":6.34,"ci95":[5.81,6.88],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":729,"del":95,"ins":87},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":21.75,"ci95":[20.42,23.08],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1446,"del":169,"ins":233},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q5_K_M","metric":"wer","err_pct":21.72,"ci95":[20.4,23.04],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1444,"del":168,"ins":234},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":86.28,"ci95":[85.19,87.37],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12025,"del":972,"ins":780},"empty_hyp":0,"utts_over_50pct":847}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q5_K_M","metric":"wer","err_pct":86.03,"ci95":[84.98,87.22],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12000,"del":1003,"ins":735},"empty_hyp":1,"utts_over_50pct":848}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":8.74,"ci95":[8.12,9.46],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1771,"del":287,"ins":215},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q6_K","metric":"wer","err_pct":8.74,"ci95":[8.13,9.41],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1770,"del":287,"ins":216},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q5_K_M","metric":"wer","err_pct":8.85,"ci95":[8.24,9.56],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1795,"del":283,"ins":226},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q4_K_M","metric":"wer","err_pct":8.93,"ci95":[8.29,9.66],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1800,"del":303,"ins":220},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":97.26,"ci95":[96.45,98.11],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17488,"del":2843,"ins":1221},"empty_hyp":0,"utts_over_50pct":827}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q5_K_M","metric":"wer","err_pct":97.49,"ci95":[96.64,98.39],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17436,"del":2892,"ins":1274},"empty_hyp":0,"utts_over_50pct":827}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":22.06,"ci95":[20.16,24.13],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3416,"del":1614,"ins":1366},"empty_hyp":0,"utts_over_50pct":77}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q5_K_M","metric":"cer","err_pct":22.06,"ci95":[20.15,24.13],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3301,"del":1749,"ins":1347},"empty_hyp":0,"utts_over_50pct":71}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":7.98,"ci95":[7.12,8.82],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1179,"del":1484,"ins":181},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":7.84,"ci95":[7.0,8.67],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1135,"del":1481,"ins":178},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.81,"ci95":[1.66,1.96],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":702,"del":144,"ins":116},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.82,"ci95":[1.67,1.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":704,"del":146,"ins":117},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.83,"ci95":[1.68,1.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":707,"del":145,"ins":117},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.84,"ci95":[1.7,2.0],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":709,"del":150,"ins":119},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.86,"ci95":[1.71,2.01],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":714,"del":157,"ins":117},"empty_hyp":0,"utts_over_50pct":6} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":11300.0,"xrt_compute":0.973,"load_ms":667.5,"mel_ms":19.8,"encode_ms":8189.5,"decode_ms":3090.8,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7438.7,"xrt_compute":1.479,"load_ms":382.5,"mel_ms":19.0,"encode_ms":5442.6,"decode_ms":1977.1,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7811.4,"xrt_compute":1.408,"load_ms":313.5,"mel_ms":18.6,"encode_ms":5786.4,"decode_ms":2006.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":1875.3,"xrt_compute":5.866,"load_ms":1447.0,"mel_ms":19.5,"encode_ms":877.4,"decode_ms":978.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1684.8,"xrt_compute":6.529,"load_ms":797.7,"mel_ms":19.1,"encode_ms":906.3,"decode_ms":759.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1633.8,"xrt_compute":6.733,"load_ms":503.2,"mel_ms":19.6,"encode_ms":927.5,"decode_ms":686.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/whisper-large.json b/catalog/whisper-large.json new file mode 100644 index 00000000..28e78b9f --- /dev/null +++ b/catalog/whisper-large.json @@ -0,0 +1,168 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "whisper-large", + "family": "whisper", + "display_name": "whisper-large", + "params": 1543321440, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "openai/whisper-large", + "upstream_commit": "4ef9b41", + "published_repo": "handy-computer/whisper-large-gguf", + "languages": [ + "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", + "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", + "fo", "fr", "gl", "gu", "haw", "ha", "he", "hi", "hr", "ht", "hu", "hy", + "id", "is", "it", "ja", "jw", "ka", "kk", "km", "kn", "ko", "la", "lb", + "ln", "lo", "lt", "lv", "mg", "mi", "mk", "ml", "mn", "mr", "ms", "mt", + "my", "ne", "nl", "nn", "no", "oc", "pa", "pl", "ps", "pt", "ro", "ru", + "sa", "sd", "si", "sk", "sl", "sn", "so", "sq", "sr", "su", "sv", "sw", + "ta", "te", "tg", "th", "tk", "tl", "tr", "tt", "uk", "ur", "uz", "vi", + "yi", "yo", "yue", "zh" + ], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"whisper-large-F32.gguf","size_bytes":6175245376}, + {"quant":"F16","filename":"whisper-large-F16.gguf","size_bytes":3106458176}, + {"quant":"Q8_0","filename":"whisper-large-Q8_0.gguf","size_bytes":1667964192}, + {"quant":"Q6_K","filename":"whisper-large-Q6_K.gguf","size_bytes":1296353248}, + {"quant":"Q5_K_M","filename":"whisper-large-Q5_K_M.gguf","size_bytes":1160366048}, + {"quant":"Q4_K_M","filename":"whisper-large-Q4_K_M.gguf","size_bytes":996526048} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":44.92,"ci95":[42.61,47.28],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2113,"del":306,"ins":210},"empty_hyp":1,"utts_over_50pct":93}, + {"dataset":"fleurs","split":"test","language":"af","quant":"Q5_K_M","metric":"wer","err_pct":45.45,"ci95":[43.11,47.85],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2111,"del":321,"ins":228},"empty_hyp":1,"utts_over_50pct":96}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":133.86,"ci95":[128.35,140.33],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6600,"del":1957,"ins":2907},"empty_hyp":5,"utts_over_50pct":516}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q5_K_M","metric":"wer","err_pct":135.57,"ci95":[129.81,141.88],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6091,"del":2467,"ins":3052},"empty_hyp":6,"utts_over_50pct":516}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":19.47,"ci95":[18.01,21.12],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1198,"del":329,"ins":77},"empty_hyp":0,"utts_over_50pct":18}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":19.42,"ci95":[17.9,21.14],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1183,"del":341,"ins":76},"empty_hyp":0,"utts_over_50pct":16}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":105.09,"ci95":[104.38,106.0],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33038,"del":13910,"ins":2436},"empty_hyp":0,"utts_over_50pct":984}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q5_K_M","metric":"wer","err_pct":104.44,"ci95":[103.85,105.07],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":31689,"del":15264,"ins":2124},"empty_hyp":1,"utts_over_50pct":984}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":30.38,"ci95":[29.46,31.21],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4687,"del":436,"ins":322},"empty_hyp":0,"utts_over_50pct":72}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q5_K_M","metric":"wer","err_pct":30.33,"ci95":[29.43,31.18],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4672,"del":445,"ins":319},"empty_hyp":0,"utts_over_50pct":77}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":58.26,"ci95":[57.26,59.33],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10751,"del":652,"ins":731},"empty_hyp":0,"utts_over_50pct":650}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q5_K_M","metric":"wer","err_pct":58.16,"ci95":[57.21,59.08],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10777,"del":668,"ins":667},"empty_hyp":0,"utts_over_50pct":651}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":19.89,"ci95":[18.96,20.85],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2307,"del":286,"ins":226},"empty_hyp":0,"utts_over_50pct":17}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q5_K_M","metric":"wer","err_pct":20.2,"ci95":[19.27,21.17],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2343,"del":290,"ins":229},"empty_hyp":0,"utts_over_50pct":20}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":105.08,"ci95":[104.55,105.69],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39224,"del":5467,"ins":2355},"empty_hyp":0,"utts_over_50pct":920}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q5_K_M","metric":"wer","err_pct":104.75,"ci95":[104.29,105.25],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39483,"del":5203,"ins":2212},"empty_hyp":1,"utts_over_50pct":920}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":22.2,"ci95":[21.32,23.09],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3408,"del":462,"ins":310},"empty_hyp":0,"utts_over_50pct":39}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q5_K_M","metric":"wer","err_pct":22.38,"ci95":[21.5,23.33],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3434,"del":461,"ins":319},"empty_hyp":0,"utts_over_50pct":43}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":7.01,"ci95":[6.46,7.61],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1197,"del":286,"ins":216},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q5_K_M","metric":"wer","err_pct":7.06,"ci95":[6.53,7.66],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1213,"del":281,"ins":217},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":18.77,"ci95":[17.92,19.75],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2172,"del":175,"ins":223},"empty_hyp":0,"utts_over_50pct":16}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q5_K_M","metric":"wer","err_pct":19.04,"ci95":[18.2,20.04],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2209,"del":194,"ins":204},"empty_hyp":0,"utts_over_50pct":19}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":36.33,"ci95":[35.35,37.3],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7435,"del":801,"ins":1283},"empty_hyp":1,"utts_over_50pct":164}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q5_K_M","metric":"wer","err_pct":36.6,"ci95":[35.56,37.64],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7483,"del":809,"ins":1298},"empty_hyp":2,"utts_over_50pct":170}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":17.82,"ci95":[16.95,18.65],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2802,"del":353,"ins":436},"empty_hyp":0,"utts_over_50pct":30}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q5_K_M","metric":"wer","err_pct":17.77,"ci95":[16.9,18.58],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2808,"del":345,"ins":429},"empty_hyp":0,"utts_over_50pct":28}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":5.04,"ci95":[4.63,5.47],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":702,"del":111,"ins":130},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":5.06,"ci95":[4.66,5.5],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":704,"del":115,"ins":128},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":18.79,"ci95":[17.47,20.14],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2200,"del":490,"ins":161},"empty_hyp":0,"utts_over_50pct":31}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":19.67,"ci95":[18.27,21.08],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2245,"del":580,"ins":160},"empty_hyp":0,"utts_over_50pct":37}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.46,"ci95":[3.9,5.11],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":416,"del":149,"ins":84},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.49,"ci95":[3.93,5.13],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":420,"del":151,"ins":83},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.55,"ci95":[3.18,3.98],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":600,"del":133,"ins":96},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.63,"ci95":[3.23,4.07],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":596,"del":153,"ins":98},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":27.31,"ci95":[26.31,28.35],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3118,"del":410,"ins":536},"empty_hyp":0,"utts_over_50pct":81}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q5_K_M","metric":"wer","err_pct":27.45,"ci95":[26.46,28.46],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3149,"del":399,"ins":537},"empty_hyp":0,"utts_over_50pct":82}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":37.88,"ci95":[36.76,39.01],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5654,"del":428,"ins":1532},"empty_hyp":0,"utts_over_50pct":186}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q5_K_M","metric":"wer","err_pct":38.19,"ci95":[37.05,39.36],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5682,"del":457,"ins":1538},"empty_hyp":0,"utts_over_50pct":185}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":12.73,"ci95":[12.01,13.53],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1514,"del":167,"ins":202},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q5_K_M","metric":"wer","err_pct":12.81,"ci95":[12.11,13.62],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1522,"del":164,"ins":209},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":15.44,"ci95":[14.78,16.15],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3038,"del":423,"ins":620},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q5_K_M","metric":"wer","err_pct":15.62,"ci95":[14.88,16.45],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3041,"del":459,"ins":629},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":6.95,"ci95":[6.39,7.59],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":947,"del":169,"ins":134},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":6.96,"ci95":[6.39,7.56],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":953,"del":164,"ins":136},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":20.1,"ci95":[19.39,20.93],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3582,"del":482,"ins":394},"empty_hyp":0,"utts_over_50pct":21}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q5_K_M","metric":"wer","err_pct":20.01,"ci95":[19.3,20.8],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3592,"del":446,"ins":401},"empty_hyp":0,"utts_over_50pct":20}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":104.29,"ci95":[103.91,104.68],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41887,"del":2986,"ins":2046},"empty_hyp":0,"utts_over_50pct":1000}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q5_K_M","metric":"wer","err_pct":104.15,"ci95":[103.76,104.55],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41634,"del":3240,"ins":1982},"empty_hyp":0,"utts_over_50pct":1000}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":90.12,"ci95":[88.77,91.57],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10808,"del":2550,"ins":1001},"empty_hyp":1,"utts_over_50pct":620}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q5_K_M","metric":"wer","err_pct":89.84,"ci95":[88.52,91.31],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10773,"del":2531,"ins":1011},"empty_hyp":1,"utts_over_50pct":620}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":30.18,"ci95":[28.45,31.92],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3239,"del":587,"ins":351},"empty_hyp":0,"utts_over_50pct":128}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q5_K_M","metric":"wer","err_pct":30.36,"ci95":[28.67,32.07],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3282,"del":581,"ins":339},"empty_hyp":0,"utts_over_50pct":125}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":29.1,"ci95":[27.16,31.25],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3293,"del":1570,"ins":595},"empty_hyp":0,"utts_over_50pct":36}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":29.46,"ci95":[27.57,31.69],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3250,"del":1647,"ins":628},"empty_hyp":1,"utts_over_50pct":38}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":18.32,"ci95":[17.52,19.12],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2654,"del":322,"ins":276},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q5_K_M","metric":"wer","err_pct":18.46,"ci95":[17.64,19.28],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2666,"del":329,"ins":281},"empty_hyp":0,"utts_over_50pct":17}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":21.97,"ci95":[21.06,22.93],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2990,"del":351,"ins":410},"empty_hyp":0,"utts_over_50pct":37}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q5_K_M","metric":"wer","err_pct":22.34,"ci95":[21.38,23.41],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3012,"del":366,"ins":437},"empty_hyp":0,"utts_over_50pct":41}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":54.73,"ci95":[53.53,55.85],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8043,"del":1408,"ins":489},"empty_hyp":0,"utts_over_50pct":524}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q5_K_M","metric":"wer","err_pct":55.56,"ci95":[54.29,56.88],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8192,"del":1310,"ins":589},"empty_hyp":0,"utts_over_50pct":540}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":8.93,"ci95":[8.27,9.68],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":972,"del":96,"ins":143},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q5_K_M","metric":"wer","err_pct":8.78,"ci95":[8.09,9.54],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":962,"del":92,"ins":136},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":49.76,"ci95":[42.72,58.2],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":409,"del":31,"ins":74},"empty_hyp":0,"utts_over_50pct":20}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q5_K_M","metric":"wer","err_pct":47.73,"ci95":[43.05,52.62],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":409,"del":29,"ins":55},"empty_hyp":0,"utts_over_50pct":20}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.67,"ci95":[3.26,4.11],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":570,"del":124,"ins":85},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":3.83,"ci95":[3.41,4.27],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":587,"del":128,"ins":98},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":6.95,"ci95":[6.39,7.5],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1569,"del":439,"ins":260},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":7.01,"ci95":[6.47,7.56],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1581,"del":440,"ins":266},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":119.65,"ci95":[116.17,122.89],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10777,"del":6338,"ins":3391},"empty_hyp":10,"utts_over_50pct":979}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q5_K_M","metric":"wer","err_pct":116.9,"ci95":[113.65,120.05],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10003,"del":7112,"ins":2920},"empty_hyp":13,"utts_over_50pct":979}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":47.29,"ci95":[46.19,48.4],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5942,"del":514,"ins":644},"empty_hyp":0,"utts_over_50pct":324}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q5_K_M","metric":"wer","err_pct":47.41,"ci95":[46.29,48.51],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5977,"del":522,"ins":619},"empty_hyp":0,"utts_over_50pct":326}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":118.15,"ci95":[114.41,122.27],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":29338,"del":32074,"ins":13862},"empty_hyp":128,"utts_over_50pct":771}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q5_K_M","metric":"cer","err_pct":117.17,"ci95":[113.18,120.94],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":28375,"del":33150,"ins":13122},"empty_hyp":136,"utts_over_50pct":771}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":74.18,"ci95":[72.35,76.2],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15951,"del":14036,"ins":1267},"empty_hyp":1,"utts_over_50pct":549}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q5_K_M","metric":"wer","err_pct":76.96,"ci95":[74.98,78.99],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15522,"del":15604,"ins":1300},"empty_hyp":2,"utts_over_50pct":579}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.25,"ci95":[4.26,6.34],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":350,"del":534,"ins":45},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":5.32,"ci95":[4.37,6.41],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":363,"del":531,"ins":47},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":91.22,"ci95":[89.48,93.29],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15211,"del":2637,"ins":1271},"empty_hyp":1,"utts_over_50pct":926}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q5_K_M","metric":"wer","err_pct":90.46,"ci95":[89.17,91.84],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15238,"del":2627,"ins":1096},"empty_hyp":1,"utts_over_50pct":927}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":81.13,"ci95":[78.91,83.39],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6249,"del":417,"ins":1811},"empty_hyp":0,"utts_over_50pct":435}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q5_K_M","metric":"wer","err_pct":82.01,"ci95":[80.0,84.19],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6340,"del":422,"ins":1807},"empty_hyp":0,"utts_over_50pct":443}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":102.35,"ci95":[101.26,103.98],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35086,"del":1850,"ins":1371},"empty_hyp":0,"utts_over_50pct":405}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q5_K_M","metric":"cer","err_pct":101.54,"ci95":[101.02,102.1],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35121,"del":1775,"ins":1107},"empty_hyp":0,"utts_over_50pct":405}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":37.58,"ci95":[36.63,38.51],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5758,"del":319,"ins":362},"empty_hyp":0,"utts_over_50pct":194}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q5_K_M","metric":"wer","err_pct":37.48,"ci95":[36.55,38.4],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5726,"del":338,"ins":358},"empty_hyp":0,"utts_over_50pct":190}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":30.18,"ci95":[29.26,31.23],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4018,"del":295,"ins":340},"empty_hyp":0,"utts_over_50pct":85}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q5_K_M","metric":"wer","err_pct":30.06,"ci95":[29.11,31.1],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3989,"del":297,"ins":348},"empty_hyp":0,"utts_over_50pct":80}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":22.81,"ci95":[21.91,23.68],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3886,"del":364,"ins":560},"empty_hyp":0,"utts_over_50pct":41}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q5_K_M","metric":"wer","err_pct":22.95,"ci95":[22.07,23.87],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3914,"del":364,"ins":560},"empty_hyp":0,"utts_over_50pct":49}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.72,"ci95":[2.42,3.06],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":912,"del":309,"ins":221},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.72,"ci95":[2.42,3.06],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":910,"del":311,"ins":221},"empty_hyp":1,"utts_over_50pct":13}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.71,"ci95":[2.4,3.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":908,"del":290,"ins":237},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.62,"ci95":[2.36,2.92],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":912,"del":299,"ins":181},"empty_hyp":0,"utts_over_50pct":13}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.84,"ci95":[2.48,3.31],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":916,"del":283,"ins":309},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.67,"ci95":[2.38,2.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":933,"del":292,"ins":191},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.7,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":11258.4,"xrt_compute":0.977,"load_ms":664.5,"mel_ms":18.9,"encode_ms":8274.1,"decode_ms":2965.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7360.6,"xrt_compute":1.494,"load_ms":379.9,"mel_ms":18.0,"encode_ms":5448.0,"decode_ms":1894.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7747.0,"xrt_compute":1.42,"load_ms":276.7,"mel_ms":17.6,"encode_ms":5789.3,"decode_ms":1940.2,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":1793.7,"xrt_compute":6.133,"load_ms":1455.8,"mel_ms":19.4,"encode_ms":878.6,"decode_ms":895.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1629.7,"xrt_compute":6.75,"load_ms":822.3,"mel_ms":19.0,"encode_ms":906.1,"decode_ms":704.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1591.5,"xrt_compute":6.912,"load_ms":493.0,"mel_ms":19.1,"encode_ms":928.1,"decode_ms":644.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/whisper-medium.en.json b/catalog/whisper-medium.en.json new file mode 100644 index 00000000..8e8fd211 --- /dev/null +++ b/catalog/whisper-medium.en.json @@ -0,0 +1,68 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "whisper-medium.en", + "family": "whisper", + "display_name": "whisper-medium.en", + "params": 763873376, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "openai/whisper-medium.en", + "upstream_commit": "2e98eb6", + "published_repo": "handy-computer/whisper-medium.en-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"whisper-medium.en-F32.gguf","size_bytes":3057356864}, + {"quant":"F16","filename":"whisper-medium.en-F16.gguf","size_bytes":1541853248}, + {"quant":"Q8_0","filename":"whisper-medium.en-Q8_0.gguf","size_bytes":831460928}, + {"quant":"Q6_K","filename":"whisper-medium.en-Q6_K.gguf","size_bytes":647942912}, + {"quant":"Q5_K_M","filename":"whisper-medium.en-Q5_K_M.gguf","size_bytes":582669056}, + {"quant":"Q4_K_M","filename":"whisper-medium.en-Q4_K_M.gguf","size_bytes":504025856} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.88,"ci95":[4.32,5.56],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":457,"del":158,"ins":96},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.74,"ci95":[2.52,2.99],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":960,"del":337,"ins":155},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.73,"ci95":[2.51,2.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":959,"del":335,"ins":155},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.72,"ci95":[2.51,2.97],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":956,"del":337,"ins":151},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.82,"ci95":[2.54,3.15],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":956,"del":331,"ins":211},"empty_hyp":0,"utts_over_50pct":7}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.75,"ci95":[2.53,2.99],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":963,"del":325,"ins":168},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.91,"ci95":[2.55,3.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":976,"del":303,"ins":266},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.83,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":5584.3,"xrt_compute":1.97,"load_ms":352.3,"mel_ms":18.1,"encode_ms":4140.3,"decode_ms":1425.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3739.5,"xrt_compute":2.942,"load_ms":210.2,"mel_ms":17.6,"encode_ms":2818.4,"decode_ms":903.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3919.9,"xrt_compute":2.806,"load_ms":133.9,"mel_ms":17.6,"encode_ms":2990.1,"decode_ms":912.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":972.8,"xrt_compute":11.307,"load_ms":748.6,"mel_ms":18.8,"encode_ms":463.7,"decode_ms":490.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":900.4,"xrt_compute":12.216,"load_ms":421.6,"mel_ms":18.3,"encode_ms":477.3,"decode_ms":404.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":865.1,"xrt_compute":12.716,"load_ms":282.0,"mel_ms":18.4,"encode_ms":488.5,"decode_ms":358.2,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":48.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":45.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":46.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/whisper-medium.json b/catalog/whisper-medium.json new file mode 100644 index 00000000..9bdd02c3 --- /dev/null +++ b/catalog/whisper-medium.json @@ -0,0 +1,157 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "whisper-medium", + "family": "whisper", + "display_name": "whisper-medium", + "params": 763874400, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "openai/whisper-medium", + "upstream_commit": "abdf7c3", + "published_repo": "handy-computer/whisper-medium-gguf", + "languages": [ + "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", + "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", + "fo", "fr", "gl", "gu", "haw", "ha", "he", "hi", "hr", "ht", "hu", "hy", + "id", "is", "it", "ja", "jw", "ka", "kk", "km", "kn", "ko", "la", "lb", + "ln", "lo", "lt", "lv", "mg", "mi", "mk", "ml", "mn", "mr", "ms", "mt", + "my", "ne", "nl", "nn", "no", "oc", "pa", "pl", "ps", "pt", "ro", "ru", + "sa", "sd", "si", "sk", "sl", "sn", "so", "sq", "sr", "su", "sv", "sw", + "ta", "te", "tg", "th", "tk", "tl", "tr", "tt", "uk", "ur", "uz", "vi", + "yi", "yo", "zh" + ], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":true,"targets":["en"],"verified":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"whisper-medium-F32.gguf","size_bytes":3057437088}, + {"quant":"F16","filename":"whisper-medium-F16.gguf","size_bytes":1541931424}, + {"quant":"Q8_0","filename":"whisper-medium-Q8_0.gguf","size_bytes":831538144}, + {"quant":"Q6_K","filename":"whisper-medium-Q6_K.gguf","size_bytes":648019904}, + {"quant":"Q5_K_M","filename":"whisper-medium-Q5_K_M.gguf","size_bytes":582746048}, + {"quant":"Q4_K_M","filename":"whisper-medium-Q4_K_M.gguf","size_bytes":504102848} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":47.33,"ci95":[45.26,49.54],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2217,"del":331,"ins":222},"empty_hyp":1,"utts_over_50pct":109}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":116.27,"ci95":[112.69,120.65],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4276,"del":4283,"ins":1398},"empty_hyp":13,"utts_over_50pct":516}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":21.9,"ci95":[20.4,23.52],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1384,"del":328,"ins":92},"empty_hyp":1,"utts_over_50pct":24}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":101.63,"ci95":[100.95,102.58],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18442,"del":28506,"ins":812},"empty_hyp":32,"utts_over_50pct":984}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":34.57,"ci95":[33.63,35.47],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5326,"del":471,"ins":399},"empty_hyp":0,"utts_over_50pct":123}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":61.87,"ci95":[61.01,62.73],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11460,"del":744,"ins":681},"empty_hyp":0,"utts_over_50pct":761}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":23.0,"ci95":[22.0,24.03],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2645,"del":358,"ins":257},"empty_hyp":0,"utts_over_50pct":27}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":102.52,"ci95":[101.97,103.14],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":22763,"del":21923,"ins":1214},"empty_hyp":17,"utts_over_50pct":920}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":26.69,"ci95":[25.6,27.94],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4160,"del":544,"ins":321},"empty_hyp":0,"utts_over_50pct":69}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":8.02,"ci95":[7.47,8.58],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1422,"del":284,"ins":237},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":22.85,"ci95":[21.93,23.89],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2670,"del":209,"ins":250},"empty_hyp":0,"utts_over_50pct":31}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":40.08,"ci95":[39.13,41.07],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8213,"del":907,"ins":1381},"empty_hyp":2,"utts_over_50pct":222}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":21.17,"ci95":[20.35,22.01],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3320,"del":385,"ins":562},"empty_hyp":0,"utts_over_50pct":35}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.23,"ci95":[5.74,6.71],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":853,"del":129,"ins":184},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":20.06,"ci95":[19.06,21.13],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2638,"del":242,"ins":164},"empty_hyp":0,"utts_over_50pct":29}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.64,"ci95":[4.2,5.15],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":464,"del":107,"ins":105},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.8,"ci95":[3.42,4.2],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":658,"del":131,"ins":97},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":31.52,"ci95":[30.39,32.63],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3643,"del":367,"ins":680},"empty_hyp":0,"utts_over_50pct":111}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":42.57,"ci95":[41.43,43.78],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6452,"del":549,"ins":1556},"empty_hyp":1,"utts_over_50pct":241}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":14.67,"ci95":[13.94,15.57],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1746,"del":178,"ins":247},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":18.36,"ci95":[17.6,19.2],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3631,"del":666,"ins":556},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":8.07,"ci95":[7.43,8.8],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1101,"del":201,"ins":151},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":22.24,"ci95":[21.48,23.08],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4030,"del":433,"ins":471},"empty_hyp":0,"utts_over_50pct":27}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":104.11,"ci95":[103.71,104.53],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41921,"del":2955,"ins":1960},"empty_hyp":1,"utts_over_50pct":1000}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":95.12,"ci95":[93.21,97.17],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9066,"del":4896,"ins":1194},"empty_hyp":9,"utts_over_50pct":620}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":33.69,"ci95":[32.08,35.46],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3633,"del":677,"ins":353},"empty_hyp":3,"utts_over_50pct":140}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":26.09,"ci95":[24.77,27.63],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3102,"del":1185,"ins":606},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":21.19,"ci95":[20.29,22.07],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3039,"del":425,"ins":298},"empty_hyp":0,"utts_over_50pct":33}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":26.07,"ci95":[25.08,27.04],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3554,"del":389,"ins":509},"empty_hyp":0,"utts_over_50pct":61}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":58.42,"ci95":[57.36,59.46],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8851,"del":1166,"ins":594},"empty_hyp":0,"utts_over_50pct":613}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":10.79,"ci95":[10.01,11.69],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1148,"del":131,"ins":184},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":51.6,"ci95":[47.14,56.58],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":442,"del":36,"ins":55},"empty_hyp":0,"utts_over_50pct":25}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":4.17,"ci95":[3.75,4.65],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":121,"ins":96},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":7.35,"ci95":[6.79,7.91],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1733,"del":353,"ins":313},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":128.01,"ci95":[123.78,132.1],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10194,"del":6941,"ins":4804},"empty_hyp":6,"utts_over_50pct":979}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":53.09,"ci95":[51.93,54.34],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6733,"del":624,"ins":615},"empty_hyp":0,"utts_over_50pct":446}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":108.92,"ci95":[106.01,112.36],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20297,"del":42057,"ins":7036},"empty_hyp":232,"utts_over_50pct":771}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":87.3,"ci95":[85.89,88.77],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13965,"del":21068,"ins":1752},"empty_hyp":89,"utts_over_50pct":767}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.46,"ci95":[4.53,6.45],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":520,"ins":40},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":98.33,"ci95":[96.12,101.1],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15744,"del":2687,"ins":2180},"empty_hyp":0,"utts_over_50pct":932}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":92.09,"ci95":[89.41,94.9],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6091,"del":1684,"ins":1848},"empty_hyp":4,"utts_over_50pct":457}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":101.16,"ci95":[100.74,101.59],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":34910,"del":2014,"ins":936},"empty_hyp":0,"utts_over_50pct":405}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":43.34,"ci95":[42.26,44.4],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6604,"del":372,"ins":450},"empty_hyp":0,"utts_over_50pct":309}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":33.58,"ci95":[32.56,34.62],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4501,"del":267,"ins":409},"empty_hyp":0,"utts_over_50pct":106}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":95.79,"ci95":[92.89,98.86],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13857,"del":11921,"ins":3939},"empty_hyp":33,"utts_over_50pct":867}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":24.75,"ci95":[23.74,25.86],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4134,"del":550,"ins":534},"empty_hyp":0,"utts_over_50pct":61}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":101.0,"ci95":[100.56,101.54],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15995,"del":38186,"ins":597},"empty_hyp":68,"utts_over_50pct":958}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":110.55,"ci95":[108.56,112.6],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13110,"del":5312,"ins":2065},"empty_hyp":4,"utts_over_50pct":949}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":58.43,"ci95":[56.53,60.21],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15064,"del":12384,"ins":2533},"empty_hyp":5,"utts_over_50pct":474}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":13.23,"ci95":[12.44,14.03],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1674,"del":129,"ins":149},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":85.06,"ci95":[84.12,86.01],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15307,"del":2503,"ins":1100},"empty_hyp":1,"utts_over_50pct":918}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":117.51,"ci95":[114.11,121.31],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":27200,"del":30958,"ins":10578},"empty_hyp":9,"utts_over_50pct":880}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":13.66,"ci95":[12.66,14.67],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":846,"del":97,"ins":98},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":54.08,"ci95":[52.85,55.3],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11663,"del":3261,"ins":3109},"empty_hyp":5,"utts_over_50pct":396}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":10.4,"ci95":[9.48,11.33],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":652,"del":94,"ins":127},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":81.55,"ci95":[80.44,82.77],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17947,"del":1612,"ins":1971},"empty_hyp":0,"utts_over_50pct":958}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":103.19,"ci95":[102.42,104.2],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":21364,"del":4096,"ins":859},"empty_hyp":2,"utts_over_50pct":574}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":8.59,"ci95":[7.97,9.27],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1004,"del":103,"ins":129},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":105.77,"ci95":[103.72,108.13],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6456,"del":6602,"ins":920},"empty_hyp":4,"utts_over_50pct":512}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":5.07,"ci95":[4.61,5.57],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":125,"ins":200},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":24.17,"ci95":[23.1,25.29],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4326,"del":362,"ins":339},"empty_hyp":0,"utts_over_50pct":63}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":7.3,"ci95":[6.71,7.85],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":922,"del":88,"ins":92},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":132.27,"ci95":[129.31,135.25],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15137,"del":8469,"ins":7659},"empty_hyp":7,"utts_over_50pct":980}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":18.73,"ci95":[17.83,19.63],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2411,"del":238,"ins":207},"empty_hyp":3,"utts_over_50pct":15}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":33.98,"ci95":[32.85,34.99],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4555,"del":457,"ins":600},"empty_hyp":0,"utts_over_50pct":129}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":134.28,"ci95":[128.93,140.03],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9511,"del":6457,"ins":5516},"empty_hyp":20,"utts_over_50pct":925}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":102.63,"ci95":[101.53,104.07],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12572,"del":11593,"ins":657},"empty_hyp":36,"utts_over_50pct":1019}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":55.14,"ci95":[51.94,58.16],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7014,"del":399,"ins":225},"empty_hyp":0,"utts_over_50pct":315}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":12.47,"ci95":[11.7,13.21],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1487,"del":235,"ins":196},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":57.09,"ci95":[55.23,58.92],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4195,"del":943,"ins":569},"empty_hyp":0,"utts_over_50pct":299}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":23.72,"ci95":[22.33,25.5],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4480,"del":1412,"ins":2094},"empty_hyp":0,"utts_over_50pct":23}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":102.69,"ci95":[101.92,103.57],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11459,"del":10956,"ins":800},"empty_hyp":56,"utts_over_50pct":472}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":76.32,"ci95":[75.16,77.38],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8545,"del":669,"ins":734},"empty_hyp":0,"utts_over_50pct":578}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":16.08,"ci95":[15.23,16.99],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7429,"del":4562,"ins":3687},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":9.35,"ci95":[8.65,10.19],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":937,"del":147,"ins":159},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":11.59,"ci95":[10.77,12.39],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1333,"del":186,"ins":146},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":28.67,"ci95":[27.22,30.21],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1988,"del":188,"ins":260},"empty_hyp":0,"utts_over_50pct":18}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":115.02,"ci95":[111.22,119.5],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11393,"del":3591,"ins":3382},"empty_hyp":9,"utts_over_50pct":861}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.74,"ci95":[12.94,14.63],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2896,"del":391,"ins":289},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":109.0,"ci95":[106.23,111.93],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13499,"del":8066,"ins":2588},"empty_hyp":2,"utts_over_50pct":831}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":13.13,"ci95":[11.97,14.25],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2999,"del":1485,"ins":197},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.64,"ci95":[2.41,2.91],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1001,"del":198,"ins":200},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.63,"ci95":[2.4,2.9],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1000,"del":197,"ins":200},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.64,"ci95":[2.41,2.91],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1003,"del":200,"ins":199},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.59,"ci95":[2.39,2.79],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":998,"del":213,"ins":160},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.62,"ci95":[2.42,2.83],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1013,"del":218,"ins":159},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.59,"ci95":[2.39,2.8],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1013,"del":207,"ins":153},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.63,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":5568.7,"xrt_compute":1.975,"load_ms":354.1,"mel_ms":17.9,"encode_ms":4118.2,"decode_ms":1432.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3743.0,"xrt_compute":2.939,"load_ms":214.5,"mel_ms":17.8,"encode_ms":2816.5,"decode_ms":908.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3926.9,"xrt_compute":2.801,"load_ms":150.8,"mel_ms":17.9,"encode_ms":2988.2,"decode_ms":920.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":985.6,"xrt_compute":11.161,"load_ms":730.6,"mel_ms":18.7,"encode_ms":465.2,"decode_ms":501.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":904.5,"xrt_compute":12.162,"load_ms":419.7,"mel_ms":18.4,"encode_ms":478.1,"decode_ms":408.0,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":874.6,"xrt_compute":12.578,"load_ms":272.0,"mel_ms":17.9,"encode_ms":489.4,"decode_ms":367.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":46.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":40.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":39.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/whisper-small.en.json b/catalog/whisper-small.en.json new file mode 100644 index 00000000..3f4576a0 --- /dev/null +++ b/catalog/whisper-small.en.json @@ -0,0 +1,69 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "whisper-small.en", + "family": "whisper", + "display_name": "whisper-small.en", + "params": 241750624, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "openai/whisper-small.en", + "upstream_commit": "e872752", + "published_repo": "handy-computer/whisper-small.en-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"whisper-small.en-F32.gguf","size_bytes":968835616}, + {"quant":"F16","filename":"whisper-small.en-F16.gguf","size_bytes":492810784}, + {"quant":"Q8_0","filename":"whisper-small.en-Q8_0.gguf","size_bytes":269674144}, + {"quant":"Q6_K","filename":"whisper-small.en-Q6_K.gguf","size_bytes":212030528}, + {"quant":"Q5_K_M","filename":"whisper-small.en-Q5_K_M.gguf","size_bytes":193672256}, + {"quant":"Q4_K_M","filename":"whisper-small.en-Q4_K_M.gguf","size_bytes":171553856} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.14,"ci95":[5.47,6.87],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":576,"del":176,"ins":142},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.11,"ci95":[2.83,3.46],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1170,"del":229,"ins":248},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.97,"ci95":[2.77,3.2],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1168,"del":230,"ins":176},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.09,"ci95":[2.81,3.45],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1168,"del":227,"ins":242},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.97,"ci95":[2.77,3.21],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1174,"del":226,"ins":174},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.11,"ci95":[2.82,3.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1173,"del":234,"ins":244},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.09,"ci95":[2.86,3.34],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1194,"del":243,"ins":199},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.09,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.12,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.08,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":1615.4,"xrt_compute":6.809,"load_ms":144.6,"mel_ms":17.7,"encode_ms":1283.2,"decode_ms":314.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1141.5,"xrt_compute":9.637,"load_ms":102.7,"mel_ms":17.8,"encode_ms":928.0,"decode_ms":195.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1416.9,"xrt_compute":7.763,"load_ms":82.1,"mel_ms":17.4,"encode_ms":985.8,"decode_ms":413.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":421.4,"xrt_compute":26.104,"load_ms":255.6,"mel_ms":18.1,"encode_ms":154.5,"decode_ms":248.8,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":235.3,"xrt_compute":46.746,"load_ms":169.2,"mel_ms":17.5,"encode_ms":158.9,"decode_ms":58.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":463.6,"xrt_compute":23.728,"load_ms":122.7,"mel_ms":18.1,"encode_ms":162.1,"decode_ms":283.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":107.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":107.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":106.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":102.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":12.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/whisper-small.json b/catalog/whisper-small.json new file mode 100644 index 00000000..c5ba44b2 --- /dev/null +++ b/catalog/whisper-small.json @@ -0,0 +1,158 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "whisper-small", + "family": "whisper", + "display_name": "whisper-small", + "params": 241751392, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "openai/whisper-small", + "upstream_commit": "973afd2", + "published_repo": "handy-computer/whisper-small-gguf", + "languages": [ + "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", + "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", + "fo", "fr", "gl", "gu", "haw", "ha", "he", "hi", "hr", "ht", "hu", "hy", + "id", "is", "it", "ja", "jw", "ka", "kk", "km", "kn", "ko", "la", "lb", + "ln", "lo", "lt", "lv", "mg", "mi", "mk", "ml", "mn", "mr", "ms", "mt", + "my", "ne", "nl", "nn", "no", "oc", "pa", "pl", "ps", "pt", "ro", "ru", + "sa", "sd", "si", "sk", "sl", "sn", "so", "sq", "sr", "su", "sv", "sw", + "ta", "te", "tg", "th", "tk", "tl", "tr", "tt", "uk", "ur", "uz", "vi", + "yi", "yo", "zh" + ], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":true,"targets":["en"],"verified":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"whisper-small-F32.gguf","size_bytes":968914848}, + {"quant":"F16","filename":"whisper-small-F16.gguf","size_bytes":492888480}, + {"quant":"Q8_0","filename":"whisper-small-Q8_0.gguf","size_bytes":269751136}, + {"quant":"Q6_K","filename":"whisper-small-Q6_K.gguf","size_bytes":212107328}, + {"quant":"Q5_K_M","filename":"whisper-small-Q5_K_M.gguf","size_bytes":193749056}, + {"quant":"Q4_K_M","filename":"whisper-small-Q4_K_M.gguf","size_bytes":171630656} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":62.2,"ci95":[59.75,64.6],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2942,"del":371,"ins":327},"empty_hyp":1,"utts_over_50pct":184}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":128.3,"ci95":[123.47,133.78],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7256,"del":1300,"ins":2432},"empty_hyp":5,"utts_over_50pct":516}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":32.15,"ci95":[30.52,33.87],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2186,"del":338,"ins":124},"empty_hyp":0,"utts_over_50pct":62}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":104.15,"ci95":[103.27,105.12],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":27225,"del":19755,"ins":1962},"empty_hyp":11,"utts_over_50pct":984}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":51.64,"ci95":[50.65,52.57],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7924,"del":703,"ins":629},"empty_hyp":0,"utts_over_50pct":461}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":76.85,"ci95":[75.97,77.8],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13938,"del":972,"ins":1095},"empty_hyp":0,"utts_over_50pct":940}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":40.39,"ci95":[39.26,41.61],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4549,"del":565,"ins":610},"empty_hyp":0,"utts_over_50pct":184}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":103.04,"ci95":[102.14,104.02],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20511,"del":24224,"ins":1398},"empty_hyp":14,"utts_over_50pct":920}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":42.35,"ci95":[41.23,43.44],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6420,"del":792,"ins":761},"empty_hyp":0,"utts_over_50pct":284}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":14.19,"ci95":[13.47,14.81],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2599,"del":377,"ins":463},"empty_hyp":0,"utts_over_50pct":10}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":40.57,"ci95":[39.32,41.83],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4568,"del":491,"ins":496},"empty_hyp":0,"utts_over_50pct":180}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":64.47,"ci95":[63.31,65.55],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12549,"del":1076,"ins":3267},"empty_hyp":2,"utts_over_50pct":795}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":35.52,"ci95":[34.52,36.61],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5540,"del":637,"ins":983},"empty_hyp":1,"utts_over_50pct":179}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":9.86,"ci95":[9.23,10.49],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1401,"del":228,"ins":217},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":33.98,"ci95":[32.74,35.34],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4373,"del":466,"ins":317},"empty_hyp":0,"utts_over_50pct":98}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.51,"ci95":[5.88,7.22],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":626,"del":158,"ins":164},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":5.92,"ci95":[5.49,6.37],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1020,"del":192,"ins":169},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":54.79,"ci95":[53.58,55.93],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6485,"del":733,"ins":935},"empty_hyp":0,"utts_over_50pct":527}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":58.44,"ci95":[57.1,59.92],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9373,"del":771,"ins":1602},"empty_hyp":0,"utts_over_50pct":590}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":26.48,"ci95":[25.4,27.59],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3107,"del":358,"ins":452},"empty_hyp":0,"utts_over_50pct":75}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":28.52,"ci95":[27.52,29.53],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5541,"del":943,"ins":1053},"empty_hyp":0,"utts_over_50pct":81}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":13.3,"ci95":[12.47,14.19],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1820,"del":267,"ins":306},"empty_hyp":0,"utts_over_50pct":11}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":32.72,"ci95":[31.82,33.69],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5810,"del":732,"ins":717},"empty_hyp":0,"utts_over_50pct":108}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":104.02,"ci95":[103.44,104.59],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":37575,"del":7389,"ins":1833},"empty_hyp":3,"utts_over_50pct":1000}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":94.21,"ci95":[92.9,95.9],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10866,"del":3080,"ins":1066},"empty_hyp":5,"utts_over_50pct":620}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":46.06,"ci95":[44.34,47.8],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5157,"del":766,"ins":453},"empty_hyp":1,"utts_over_50pct":289}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":42.05,"ci95":[39.97,44.32],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4697,"del":2288,"ins":901},"empty_hyp":0,"utts_over_50pct":81}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":36.05,"ci95":[35.0,37.15],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5195,"del":606,"ins":599},"empty_hyp":0,"utts_over_50pct":163}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":42.39,"ci95":[41.32,43.49],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5727,"del":650,"ins":861},"empty_hyp":0,"utts_over_50pct":269}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":87.84,"ci95":[86.83,88.93],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12647,"del":2219,"ins":1087},"empty_hyp":0,"utts_over_50pct":925}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":18.02,"ci95":[17.02,19.15],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1938,"del":197,"ins":309},"empty_hyp":0,"utts_over_50pct":33}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":74.54,"ci95":[69.87,80.21],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":623,"del":42,"ins":105},"empty_hyp":0,"utts_over_50pct":43}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":7.97,"ci95":[7.4,8.52],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1284,"del":213,"ins":196},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":12.81,"ci95":[12.05,13.52],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3160,"del":507,"ins":514},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":130.64,"ci95":[125.94,135.97],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9677,"del":7454,"ins":5259},"empty_hyp":17,"utts_over_50pct":979}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":73.54,"ci95":[72.52,74.64],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9347,"del":918,"ins":777},"empty_hyp":0,"utts_over_50pct":794}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":116.96,"ci95":[113.31,120.85],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":28044,"del":34512,"ins":11959},"empty_hyp":29,"utts_over_50pct":771}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":99.65,"ci95":[98.84,100.59],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15683,"del":24930,"ins":1374},"empty_hyp":59,"utts_over_50pct":838}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":7.7,"ci95":[6.65,8.76],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":751,"del":548,"ins":62},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":110.02,"ci95":[107.69,112.73],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14841,"del":5194,"ins":3025},"empty_hyp":3,"utts_over_50pct":932}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":98.65,"ci95":[95.84,101.91],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7129,"del":1357,"ins":1822},"empty_hyp":1,"utts_over_50pct":472}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":101.52,"ci95":[100.96,102.18],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35194,"del":1900,"ins":900},"empty_hyp":0,"utts_over_50pct":405}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":70.21,"ci95":[68.92,71.71],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10337,"del":639,"ins":1053},"empty_hyp":0,"utts_over_50pct":856}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":57.42,"ci95":[56.2,58.69],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7448,"del":609,"ins":795},"empty_hyp":0,"utts_over_50pct":533}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":62.82,"ci95":[61.29,64.46],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14048,"del":2879,"ins":2561},"empty_hyp":0,"utts_over_50pct":714}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":41.53,"ci95":[40.36,42.67],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6896,"del":760,"ins":1099},"empty_hyp":0,"utts_over_50pct":283}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":100.35,"ci95":[100.05,100.79],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12515,"del":41676,"ins":237},"empty_hyp":30,"utts_over_50pct":958}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":142.37,"ci95":[136.73,148.04],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11557,"del":6971,"ins":7856},"empty_hyp":5,"utts_over_50pct":949}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":63.66,"ci95":[62.16,65.15],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18096,"del":11034,"ins":3537},"empty_hyp":1,"utts_over_50pct":686}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":21.48,"ci95":[20.38,22.72],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2669,"del":192,"ins":308},"empty_hyp":0,"utts_over_50pct":34}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":97.32,"ci95":[95.64,99.2],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14303,"del":5979,"ins":1355},"empty_hyp":1,"utts_over_50pct":926}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":132.91,"ci95":[127.85,138.7],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33204,"del":24938,"ins":19602},"empty_hyp":10,"utts_over_50pct":880}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":25.53,"ci95":[24.2,26.95],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1546,"del":193,"ins":206},"empty_hyp":0,"utts_over_50pct":20}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":70.48,"ci95":[69.13,71.94],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14229,"del":5862,"ins":3409},"empty_hyp":4,"utts_over_50pct":653}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":18.48,"ci95":[17.29,19.57],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1183,"del":138,"ins":231},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":90.43,"ci95":[87.82,93.27],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16820,"del":3823,"ins":3231},"empty_hyp":3,"utts_over_50pct":973}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":101.31,"ci95":[100.72,102.18],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15183,"del":10299,"ins":358},"empty_hyp":4,"utts_over_50pct":574}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":16.82,"ci95":[15.87,17.8],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1938,"del":216,"ins":266},"empty_hyp":0,"utts_over_50pct":18}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":93.61,"ci95":[92.96,94.25],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9931,"del":2216,"ins":224},"empty_hyp":1,"utts_over_50pct":512}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":7.65,"ci95":[6.96,8.31],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1180,"del":185,"ins":278},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":33.88,"ci95":[32.65,35.07],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5666,"del":674,"ins":707},"empty_hyp":0,"utts_over_50pct":160}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":11.9,"ci95":[11.19,12.62],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1488,"del":163,"ins":146},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":112.24,"ci95":[110.08,114.51],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17543,"del":6065,"ins":2923},"empty_hyp":6,"utts_over_50pct":980}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":36.05,"ci95":[34.98,37.21],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4592,"del":442,"ins":462},"empty_hyp":2,"utts_over_50pct":136}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":52.7,"ci95":[51.43,53.95],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6902,"del":697,"ins":1104},"empty_hyp":0,"utts_over_50pct":441}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":132.9,"ci95":[128.31,138.18],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8931,"del":6863,"ins":5470},"empty_hyp":11,"utts_over_50pct":925}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":103.39,"ci95":[102.69,104.15],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":19764,"del":4416,"ins":824},"empty_hyp":3,"utts_over_50pct":1019}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":44.91,"ci95":[42.81,47.03],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5295,"del":447,"ins":479},"empty_hyp":0,"utts_over_50pct":191}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":23.1,"ci95":[21.94,24.32],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2667,"del":409,"ins":478},"empty_hyp":0,"utts_over_50pct":51}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":76.22,"ci95":[74.6,77.92],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5696,"del":914,"ins":1010},"empty_hyp":2,"utts_over_50pct":447}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":35.35,"ci95":[33.42,37.78],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6572,"del":1889,"ins":3438},"empty_hyp":0,"utts_over_50pct":67}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":102.23,"ci95":[101.21,103.53],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7500,"del":15074,"ins":537},"empty_hyp":55,"utts_over_50pct":472}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":86.78,"ci95":[85.6,87.89],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9590,"del":681,"ins":1040},"empty_hyp":0,"utts_over_50pct":593}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":22.55,"ci95":[21.71,23.49],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11005,"del":6214,"ins":4771},"empty_hyp":0,"utts_over_50pct":20}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":15.95,"ci95":[14.93,17.0],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1651,"del":202,"ins":268},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":20.42,"ci95":[19.43,21.41],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2378,"del":272,"ins":285},"empty_hyp":0,"utts_over_50pct":29}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":39.75,"ci95":[38.23,41.19],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2715,"del":339,"ins":324},"empty_hyp":0,"utts_over_50pct":49}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":114.92,"ci95":[111.78,118.41],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12794,"del":2162,"ins":3394},"empty_hyp":15,"utts_over_50pct":862}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":22.47,"ci95":[21.57,23.47],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5010,"del":382,"ins":455},"empty_hyp":0,"utts_over_50pct":41}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":118.5,"ci95":[114.83,122.44],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13451,"del":8340,"ins":4468},"empty_hyp":9,"utts_over_50pct":831}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":23.06,"ci95":[21.79,24.35],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6447,"del":1536,"ins":239},"empty_hyp":0,"utts_over_50pct":60}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.34,"ci95":[3.11,3.58],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1325,"del":245,"ins":199},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.33,"ci95":[3.11,3.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1324,"del":245,"ins":198},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.33,"ci95":[3.11,3.56],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1327,"del":243,"ins":195},"empty_hyp":0,"utts_over_50pct":12}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.33,"ci95":[3.11,3.56],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1331,"del":238,"ins":196},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.37,"ci95":[3.15,3.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1328,"del":240,"ins":219},"empty_hyp":0,"utts_over_50pct":14}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.4,"ci95":[3.18,3.64],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1367,"del":235,"ins":200},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.33,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.34,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":1789.3,"xrt_compute":6.147,"load_ms":152.2,"mel_ms":17.8,"encode_ms":1297.5,"decode_ms":474.0,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1257.8,"xrt_compute":8.745,"load_ms":102.8,"mel_ms":17.8,"encode_ms":934.2,"decode_ms":305.8,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1340.9,"xrt_compute":8.203,"load_ms":67.1,"mel_ms":17.4,"encode_ms":1005.0,"decode_ms":318.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":358.6,"xrt_compute":30.679,"load_ms":255.5,"mel_ms":17.8,"encode_ms":154.5,"decode_ms":186.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":331.3,"xrt_compute":33.198,"load_ms":166.9,"mel_ms":18.1,"encode_ms":158.5,"decode_ms":154.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":323.5,"xrt_compute":33.999,"load_ms":109.7,"mel_ms":17.8,"encode_ms":162.1,"decode_ms":143.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":103.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":96.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":101.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":97.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":13.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/whisper-tiny.en.json b/catalog/whisper-tiny.en.json new file mode 100644 index 00000000..e0571a8f --- /dev/null +++ b/catalog/whisper-tiny.en.json @@ -0,0 +1,70 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "whisper-tiny.en", + "family": "whisper", + "display_name": "whisper-tiny.en", + "params": 37776736, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "openai/whisper-tiny.en", + "upstream_commit": "87c7102", + "published_repo": "handy-computer/whisper-tiny.en-gguf", + "languages": ["en"], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"whisper-tiny.en-F32.gguf","size_bytes":152920160}, + {"quant":"F16","filename":"whisper-tiny.en-F16.gguf","size_bytes":80058464}, + {"quant":"Q8_0","filename":"whisper-tiny.en-Q8_0.gguf","size_bytes":45904544}, + {"quant":"Q6_K","filename":"whisper-tiny.en-Q6_K.gguf","size_bytes":44761760}, + {"quant":"Q5_K_M","filename":"whisper-tiny.en-Q5_K_M.gguf","size_bytes":44135072}, + {"quant":"Q4_K_M","filename":"whisper-tiny.en-Q4_K_M.gguf","size_bytes":43545248} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":10.72,"ci95":[9.89,11.58],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1097,"del":172,"ins":292},"empty_hyp":0,"utts_over_50pct":6}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":5.77,"ci95":[5.46,6.09],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2290,"del":343,"ins":429},"empty_hyp":0,"utts_over_50pct":26}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":5.78,"ci95":[5.46,6.09],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2284,"del":352,"ins":429},"empty_hyp":0,"utts_over_50pct":25}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.72,"ci95":[5.41,6.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2275,"del":327,"ins":432},"empty_hyp":0,"utts_over_50pct":25}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":5.83,"ci95":[5.51,6.16],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2296,"del":345,"ins":449},"empty_hyp":0,"utts_over_50pct":26}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.91,"ci95":[5.58,6.23],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2324,"del":336,"ins":475},"empty_hyp":0,"utts_over_50pct":27}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":5.96,"ci95":[5.64,6.3],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2318,"del":345,"ins":499},"empty_hyp":0,"utts_over_50pct":29}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":5.77,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":5.8,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.89,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":5.99,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":224.5,"xrt_compute":48.989,"load_ms":65.0,"mel_ms":17.5,"encode_ms":153.7,"decode_ms":53.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":180.0,"xrt_compute":61.102,"load_ms":59.4,"mel_ms":17.2,"encode_ms":121.6,"decode_ms":41.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":163.6,"xrt_compute":67.251,"load_ms":57.4,"mel_ms":17.2,"encode_ms":125.9,"decode_ms":20.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":73.3,"xrt_compute":150.082,"load_ms":66.8,"mel_ms":17.4,"encode_ms":23.0,"decode_ms":32.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":69.1,"xrt_compute":159.267,"load_ms":57.9,"mel_ms":17.3,"encode_ms":23.7,"decode_ms":28.1,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":51.7,"xrt_compute":212.768,"load_ms":62.0,"mel_ms":17.2,"encode_ms":23.7,"decode_ms":10.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":92.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":90.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":66.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":280.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":323.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":278.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":281.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":25.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":29.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":65.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":56.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":65.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":56.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/catalog/whisper-tiny.json b/catalog/whisper-tiny.json new file mode 100644 index 00000000..3e66545e --- /dev/null +++ b/catalog/whisper-tiny.json @@ -0,0 +1,162 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "whisper-tiny", + "family": "whisper", + "display_name": "whisper-tiny", + "params": 37777120, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "openai/whisper-tiny", + "upstream_commit": "169d4a4", + "published_repo": "handy-computer/whisper-tiny-gguf", + "languages": [ + "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", + "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", + "fo", "fr", "gl", "gu", "haw", "ha", "he", "hi", "hr", "ht", "hu", "hy", + "id", "is", "it", "ja", "jw", "ka", "kk", "km", "kn", "ko", "la", "lb", + "ln", "lo", "lt", "lv", "mg", "mi", "mk", "ml", "mn", "mr", "ms", "mt", + "my", "ne", "nl", "nn", "no", "oc", "pa", "pl", "ps", "pt", "ro", "ru", + "sa", "sd", "si", "sk", "sl", "sn", "so", "sq", "sr", "su", "sv", "sw", + "ta", "te", "tg", "th", "tk", "tl", "tr", "tt", "uk", "ur", "uz", "vi", + "yi", "yo", "zh" + ], + "long_form_strategy": "chunked-unbounded", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":true,"targets":["en"],"verified":false}, + "lang_detect": {"supported":true,"verified":false}, + "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"F32","filename":"whisper-tiny-F32.gguf","size_bytes":152997824}, + {"quant":"F16","filename":"whisper-tiny-F16.gguf","size_bytes":80135360}, + {"quant":"Q8_0","filename":"whisper-tiny-Q8_0.gguf","size_bytes":45981088}, + {"quant":"Q6_K","filename":"whisper-tiny-Q6_K.gguf","size_bytes":44838304}, + {"quant":"Q5_K_M","filename":"whisper-tiny-Q5_K_M.gguf","size_bytes":44211616}, + {"quant":"Q4_K_M","filename":"whisper-tiny-Q4_K_M.gguf","size_bytes":43621792} + ], + "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":95.3,"ci95":[92.75,97.9],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3884,"del":1188,"ins":505},"empty_hyp":0,"utts_over_50pct":261}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":122.14,"ci95":[118.55,125.97],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5399,"del":3160,"ins":1901},"empty_hyp":39,"utts_over_50pct":516}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":67.48,"ci95":[65.37,69.5],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4632,"del":603,"ins":323},"empty_hyp":0,"utts_over_50pct":341}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":100.56,"ci95":[100.15,101.06],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10468,"del":36519,"ins":270},"empty_hyp":28,"utts_over_50pct":984}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":94.73,"ci95":[93.35,96.23],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13375,"del":2022,"ins":1583},"empty_hyp":6,"utts_over_50pct":922}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":96.03,"ci95":[95.33,96.92],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17196,"del":1334,"ins":1469},"empty_hyp":1,"utts_over_50pct":966}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":84.87,"ci95":[83.52,86.32],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9159,"del":1504,"ins":1364},"empty_hyp":0,"utts_over_50pct":650}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":100.37,"ci95":[100.05,100.83],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12551,"del":32205,"ins":180},"empty_hyp":13,"utts_over_50pct":920}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":87.22,"ci95":[85.97,88.45],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12685,"del":1895,"ins":1842},"empty_hyp":8,"utts_over_50pct":916}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":46.33,"ci95":[45.13,47.46],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8391,"del":1048,"ins":1786},"empty_hyp":0,"utts_over_50pct":358}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":87.17,"ci95":[85.89,88.48],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9464,"del":1164,"ins":1308},"empty_hyp":0,"utts_over_50pct":711}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":116.68,"ci95":[114.19,119.56],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18637,"del":4958,"ins":6979},"empty_hyp":3,"utts_over_50pct":1021}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":88.42,"ci95":[86.83,90.31],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12334,"del":2877,"ins":2611},"empty_hyp":2,"utts_over_50pct":890}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":31.56,"ci95":[30.53,32.7],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4414,"del":540,"ins":952},"empty_hyp":0,"utts_over_50pct":119}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":77.76,"ci95":[75.95,79.8],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9028,"del":1488,"ins":1283},"empty_hyp":0,"utts_over_50pct":610}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":13.84,"ci95":[12.85,14.94],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1377,"del":216,"ins":421},"empty_hyp":0,"utts_over_50pct":16}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":18.95,"ci95":[18.18,19.77],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3282,"del":439,"ins":697},"empty_hyp":0,"utts_over_50pct":20}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":101.33,"ci95":[99.81,102.93],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11464,"del":946,"ins":2668},"empty_hyp":2,"utts_over_50pct":891}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":100.18,"ci95":[97.96,102.5],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15164,"del":2249,"ins":2723},"empty_hyp":1,"utts_over_50pct":871}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":68.58,"ci95":[67.17,70.11],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7738,"del":675,"ins":1732},"empty_hyp":1,"utts_over_50pct":720}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":70.63,"ci95":[69.17,72.18],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13748,"del":1873,"ins":3045},"empty_hyp":0,"utts_over_50pct":805}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":44.19,"ci95":[42.58,45.78],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5719,"del":578,"ins":1655},"empty_hyp":0,"utts_over_50pct":227}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":59.44,"ci95":[58.41,60.62],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10333,"del":1492,"ins":1359},"empty_hyp":0,"utts_over_50pct":630}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":100.26,"ci95":[100.02,100.57],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17845,"del":27120,"ins":140},"empty_hyp":3,"utts_over_50pct":1000}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":105.17,"ci95":[102.75,108.2],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8174,"del":7090,"ins":1494},"empty_hyp":17,"utts_over_50pct":621}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":77.35,"ci95":[75.88,78.82],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8820,"del":927,"ins":960},"empty_hyp":1,"utts_over_50pct":698}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":101.52,"ci95":[100.33,103.06],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7832,"del":10913,"ins":296},"empty_hyp":3,"utts_over_50pct":418}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":84.36,"ci95":[83.29,85.63],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11902,"del":1309,"ins":1763},"empty_hyp":0,"utts_over_50pct":891}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":90.54,"ci95":[88.94,92.19],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10744,"del":2052,"ins":2665},"empty_hyp":10,"utts_over_50pct":883}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":110.5,"ci95":[108.71,112.3],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11422,"del":6734,"ins":1913},"empty_hyp":8,"utts_over_50pct":932}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":60.49,"ci95":[58.53,62.76],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6055,"del":1143,"ins":1005},"empty_hyp":1,"utts_over_50pct":406}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":115.88,"ci95":[108.2,125.7],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":773,"del":211,"ins":213},"empty_hyp":0,"utts_over_50pct":46}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":31.24,"ci95":[30.23,32.38],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4968,"del":699,"ins":971},"empty_hyp":0,"utts_over_50pct":114}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":39.38,"ci95":[37.82,40.98],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9377,"del":1337,"ins":2142},"empty_hyp":0,"utts_over_50pct":127}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":110.34,"ci95":[108.68,112.16],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7520,"del":9618,"ins":1774},"empty_hyp":52,"utts_over_50pct":979}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":136.56,"ci95":[131.42,141.63],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11205,"del":3587,"ins":5713},"empty_hyp":20,"utts_over_50pct":856}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":111.78,"ci95":[108.85,114.96],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":27592,"del":34973,"ins":8650},"empty_hyp":132,"utts_over_50pct":771}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":100.32,"ci95":[100.1,100.62],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14520,"del":27608,"ins":143},"empty_hyp":18,"utts_over_50pct":838}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":19.07,"ci95":[17.69,20.43],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2539,"del":686,"ins":147},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":99.69,"ci95":[98.93,100.53],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11165,"del":9208,"ins":522},"empty_hyp":10,"utts_over_50pct":934}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":103.55,"ci95":[101.39,106.01],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5722,"del":4118,"ins":980},"empty_hyp":13,"utts_over_50pct":478}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":105.48,"ci95":[102.73,108.71],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13913,"del":22957,"ins":2606},"empty_hyp":21,"utts_over_50pct":405}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":105.0,"ci95":[103.27,106.96],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13218,"del":2585,"ins":2187},"empty_hyp":11,"utts_over_50pct":986}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":95.98,"ci95":[94.86,97.2],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12048,"del":1009,"ins":1739},"empty_hyp":0,"utts_over_50pct":849}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":96.27,"ci95":[95.25,97.41],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13868,"del":14682,"ins":1315},"empty_hyp":18,"utts_over_50pct":1006}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":78.61,"ci95":[77.42,79.85],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12387,"del":2356,"ins":1831},"empty_hyp":6,"utts_over_50pct":933}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":100.03,"ci95":[99.99,100.1],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12520,"del":41715,"ins":19},"empty_hyp":51,"utts_over_50pct":958}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":110.21,"ci95":[107.98,112.39],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9447,"del":9084,"ins":1893},"empty_hyp":12,"utts_over_50pct":949}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":100.82,"ci95":[100.19,101.75],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17619,"del":33662,"ins":455},"empty_hyp":38,"utts_over_50pct":1015}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":62.17,"ci95":[60.25,64.27],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6685,"del":1333,"ins":1153},"empty_hyp":8,"utts_over_50pct":465}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":99.85,"ci95":[99.1,100.67],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10746,"del":10997,"ins":456},"empty_hyp":39,"utts_over_50pct":926}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":108.53,"ci95":[106.54,110.87],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16331,"del":41931,"ins":5222},"empty_hyp":251,"utts_over_50pct":880}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":67.36,"ci95":[65.41,69.32],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3845,"del":511,"ins":776},"empty_hyp":1,"utts_over_50pct":299}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":101.3,"ci95":[100.35,102.76],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11005,"del":22325,"ins":447},"empty_hyp":17,"utts_over_50pct":726}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":54.86,"ci95":[53.09,56.75],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3348,"del":336,"ins":923},"empty_hyp":0,"utts_over_50pct":206}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":96.44,"ci95":[94.89,98.25],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14923,"del":8583,"ins":1953},"empty_hyp":2,"utts_over_50pct":995}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":100.54,"ci95":[100.06,101.23],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7117,"del":18386,"ins":141},"empty_hyp":53,"utts_over_50pct":574}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":54.22,"ci95":[52.62,55.68],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5939,"del":575,"ins":1287},"empty_hyp":1,"utts_over_50pct":420}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":101.04,"ci95":[100.5,101.76],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5378,"del":7820,"ins":155},"empty_hyp":12,"utts_over_50pct":512}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":24.07,"ci95":[23.02,25.16],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3734,"del":478,"ins":956},"empty_hyp":0,"utts_over_50pct":63}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":82.43,"ci95":[81.13,83.73],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12506,"del":2196,"ins":2443},"empty_hyp":1,"utts_over_50pct":835}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":35.64,"ci95":[34.38,36.82],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4164,"del":528,"ins":691},"empty_hyp":0,"utts_over_50pct":145}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":105.42,"ci95":[103.11,108.5],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7382,"del":16251,"ins":1286},"empty_hyp":48,"utts_over_50pct":980}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":82.2,"ci95":[81.01,83.37],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9724,"del":1396,"ins":1412},"empty_hyp":24,"utts_over_50pct":768}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":91.29,"ci95":[90.06,92.5],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11428,"del":2007,"ins":1641},"empty_hyp":1,"utts_over_50pct":831}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":118.33,"ci95":[115.19,121.59],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7804,"del":8054,"ins":3075},"empty_hyp":29,"utts_over_50pct":925}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":105.31,"ci95":[103.9,106.84],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9314,"del":14793,"ins":1363},"empty_hyp":54,"utts_over_50pct":1019}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":89.2,"ci95":[87.49,90.79],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9565,"del":1404,"ins":1387},"empty_hyp":2,"utts_over_50pct":688}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":59.36,"ci95":[57.64,61.07],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6557,"del":743,"ins":1833},"empty_hyp":0,"utts_over_50pct":482}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":99.96,"ci95":[98.66,101.47],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5865,"del":3501,"ins":627},"empty_hyp":26,"utts_over_50pct":487}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":87.46,"ci95":[84.77,90.18],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15264,"del":4859,"ins":9319},"empty_hyp":7,"utts_over_50pct":541}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":101.18,"ci95":[100.3,102.48],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5218,"del":17381,"ins":275},"empty_hyp":40,"utts_over_50pct":472}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":102.39,"ci95":[100.82,104.35],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10290,"del":1778,"ins":1278},"empty_hyp":4,"utts_over_50pct":600}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":54.82,"ci95":[53.08,56.73],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":28128,"del":15641,"ins":9688},"empty_hyp":12,"utts_over_50pct":377}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":47.98,"ci95":[46.56,49.5],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4900,"del":561,"ins":919},"empty_hyp":1,"utts_over_50pct":312}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":57.49,"ci95":[56.26,58.8],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6515,"del":705,"ins":1042},"empty_hyp":0,"utts_over_50pct":479}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":71.42,"ci95":[68.68,74.47],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4547,"del":931,"ins":591},"empty_hyp":0,"utts_over_50pct":264}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":103.19,"ci95":[102.2,104.3],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6596,"del":9262,"ins":619},"empty_hyp":42,"utts_over_50pct":862}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":64.49,"ci95":[62.89,65.97],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13099,"del":2224,"ins":1456},"empty_hyp":3,"utts_over_50pct":600}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":102.29,"ci95":[101.01,103.99],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8727,"del":13191,"ins":748},"empty_hyp":9,"utts_over_50pct":831}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":41.91,"ci95":[40.85,42.93],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12681,"del":1869,"ins":393},"empty_hyp":0,"utts_over_50pct":265}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":7.49,"ci95":[7.16,7.87],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2956,"del":382,"ins":633},"empty_hyp":0,"utts_over_50pct":37}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":7.48,"ci95":[7.15,7.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2955,"del":382,"ins":632},"empty_hyp":0,"utts_over_50pct":35}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.52,"ci95":[7.18,7.88],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2964,"del":383,"ins":642},"empty_hyp":0,"utts_over_50pct":38}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":7.54,"ci95":[7.21,7.9],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2966,"del":384,"ins":649},"empty_hyp":0,"utts_over_50pct":38}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":7.82,"ci95":[7.37,8.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2996,"del":401,"ins":749},"empty_hyp":0,"utts_over_50pct":47}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":7.78,"ci95":[7.44,8.15],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3033,"del":353,"ins":738},"empty_hyp":0,"utts_over_50pct":44}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":7.54,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":7.49,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":7.63,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":7.63,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":7.76,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + ], + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":238.9,"xrt_compute":46.048,"load_ms":63.3,"mel_ms":17.8,"encode_ms":152.9,"decode_ms":68.2,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":185.2,"xrt_compute":59.392,"load_ms":59.3,"mel_ms":17.6,"encode_ms":122.1,"decode_ms":45.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":229.2,"xrt_compute":48.002,"load_ms":64.7,"mel_ms":17.4,"encode_ms":145.2,"decode_ms":66.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":92.1,"xrt_compute":119.477,"load_ms":89.2,"mel_ms":18.0,"encode_ms":23.2,"decode_ms":50.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":89.1,"xrt_compute":123.519,"load_ms":57.7,"mel_ms":17.5,"encode_ms":23.4,"decode_ms":48.2,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":90.7,"xrt_compute":121.245,"load_ms":72.2,"mel_ms":17.3,"encode_ms":23.4,"decode_ms":50.0,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":90.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":64.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":89.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":63.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":301.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":290.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":301.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":302.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":20.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":66.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":52.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":66.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":55.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + ] +} diff --git a/docs/models/cohere-transcribe-arabic-07-2026.md b/docs/models/cohere-transcribe-arabic-07-2026.md new file mode 100644 index 00000000..dab9f280 --- /dev/null +++ b/docs/models/cohere-transcribe-arabic-07-2026.md @@ -0,0 +1,184 @@ +# Cohere Transcribe Arabic 07-2026 + +Cohere's [`CohereLabs/cohere-transcribe-arabic-07-2026`](https://huggingface.co/CohereLabs/cohere-transcribe-arabic-07-2026) +ported to transcribe.cpp. An Arabic-focused adaptation of the +[Cohere Transcribe 03-2026](cohere-transcribe-03-2026.md) architecture: a +Conformer encoder with a Transformer encoder-decoder head (cross-attention, +tied token embedding), retrained for Arabic. + +## What it's for + +Offline Arabic speech-to-text, including dialectal Arabic and +Arabic-English code-switching, with English as a secondary language. The +model takes a 16 kHz mono WAV and produces a transcript; pass the language +(`-l ar` or `-l en`). Decoding is autoregressive. + +See Cohere's [model card](https://huggingface.co/CohereLabs/cohere-transcribe-arabic-07-2026) +for training data, intended use, and upstream evaluation methodology. + +Licensed Apache-2.0. Ported from upstream commit +[`0a8193c`](https://huggingface.co/CohereLabs/cohere-transcribe-arabic-07-2026/commit/0a8193caa4f3f92131471ab08824e488141cb392), +pinned 2026-07-07. + +## Input limits + +Accepts up to about **6.7 minutes (400 s)** of 16 kHz mono audio per call — the +encoder's positional table is the binding limit. Longer audio is rejected up +front with `TRANSCRIBE_ERR_INPUT_TOO_LONG` rather than silently truncated; split +it into shorter segments. See the [input-length contract](../input-limits.md). + +## Download + +| Quantization | Download | Size | WER (FLEURS Arabic test) | +| --- | --- | ---: | ---: | +| BF16 | [cohere-transcribe-arabic-07-2026-BF16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-BF16.gguf) | 4.10 GB | 11.02% | +| F16 | [cohere-transcribe-arabic-07-2026-F16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-F16.gguf) | 4.11 GB | 11.00% | +| Q8_0 | [cohere-transcribe-arabic-07-2026-Q8_0.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q8_0.gguf) | 2.41 GB | 11.06% | +| Q6_K | [cohere-transcribe-arabic-07-2026-Q6_K.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q6_K.gguf) | 1.97 GB | 11.07% | +| Q5_K_M | [cohere-transcribe-arabic-07-2026-Q5_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q5_K_M.gguf) | 1.77 GB | 10.95% | +| Q4_K_M | [cohere-transcribe-arabic-07-2026-Q4_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q4_K_M.gguf) | 1.56 GB | 11.18% | + +WER is measured on the full FLEURS Arabic (`ar_eg`) test split (428 +utterances) with greedy decoding and no external LM, scored with the Whisper +`BasicTextNormalizer` (the Arabic routing in `scripts/wer/score.py`). +BF16 reference baseline, measured with native Transformers on the same +manifest: 11.00%; our BF16 port scores 11.02%, and every quant falls inside +the reference's 95% confidence interval. Note that FLEURS Arabic is +Egyptian-dialect speech; upstream numbers published on other Arabic test +sets are not directly comparable. + +## Quick Start + +```bash +cmake -B build +cmake --build build + +build/bin/transcribe-cli \ + -m models/cohere-transcribe-arabic-07-2026/cohere-transcribe-arabic-07-2026-Q8_0.gguf \ + -l ar \ + input.wav +``` + +If your audio is not already 16 kHz mono WAV, convert it first: + +```bash +ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav +``` + +## Performance + +The tables below were measured on +[Cohere Transcribe 03-2026](cohere-transcribe-03-2026.md). This variant is +the same architecture with identical tensor shapes and quantization layout +(only the weight values differ), so per-quant throughput carries over. + +Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` +above (2 decimal places). + +### Apple M4 Max + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ------------: | ------------: | +| Metal | jfk (11.0s) | 150 ms (74×) | 154 ms (71×) | +| Metal | dots (35.3s) | 491 ms (72×) | 465 ms (76×) | +| CPU | jfk (11.0s) | 1.21 s (9×) | 1.05 s (11×) | +| CPU | dots (35.3s) | 4.13 s (9×) | 3.49 s (10×) | + +macOS 26.4.1, transcribe.cpp `e0fa0f6`. + +### AMD Ryzen 7 4750U Pro + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ------------: | ------------: | +| Vulkan | jfk (11.0s) | 1.43 s (8×) | 1.33 s (8×) | +| Vulkan | dots (35.3s) | 4.25 s (8×) | 4.25 s (8×) | +| CPU | jfk (11.0s) | 3.57 s (3×) | 2.90 s (4×) | +| CPU | dots (35.3s) | 12.40 s (3×) | 10.08 s (4×) | + +Fedora 43, transcribe.cpp `2ab01b8`. Vulkan device: `AMD Radeon +Graphics (RADV RENOIR)`. + +Benchmark reproduction (substitute this variant's slug): + +```bash +uv run scripts/bench/run.py \ + --models cohere-transcribe-arabic-07-2026 \ + --quants q8_0,q4_k_m \ + --samples jfk,dots \ + --backends metal,cpu,vulkan \ + --iters 3 --warmup 1 \ + --name cohere-transcribe-arabic-07-2026-publication +``` + +## Numerical Validation + +The cohere family implementation is validated tensor-by-tensor against the +Transformers reference on the base +[Cohere Transcribe 03-2026](cohere-transcribe-03-2026.md#numerical-validation) +checkpoint (all 22 checkpointed tensors within family tolerance, transcript +verbatim). This variant shares that implementation unchanged — same +architecture, tensor shapes, and blob-identical SentencePiece tokenizer — +and is validated end-to-end: the C++ BF16 port scores 11.02% WER on the +full FLEURS Arabic test split against 11.00% for the native Transformers +reference on the same manifest (within +0.02pp), with per-utterance +hypotheses matching the reference on the upstream sample audio. A +per-variant golden tensor manifest has not been generated. + +| Field | Value | +| --- | --- | +| Reference | Transformers, `CohereLabs/cohere-transcribe-arabic-07-2026` | +| Reference WER runner | `scripts/wer/run_reference_cohere_transformers.py` | +| Family tensor manifest | `tests/golden/cohere/cohere-transcribe-03-2026.manifest.json` (base variant) | +| WER reports | `reports/wer/cohere-transcribe-arabic-07-2026-*.fleurs-ar.b8.jsonl` | + +## Reproduction + +### Convert + +Downloads the upstream HF repo via `huggingface-cli` (or an existing local +clone) and converts with the family-specific script. Output path is derived +from the repo id. The upstream repo is gated; accept the license on +Hugging Face first. + +```bash +uv run --project scripts/envs/cohere \ + scripts/convert-cohere.py CohereLabs/cohere-transcribe-arabic-07-2026 +``` + +### Quantize + +Run `transcribe-quantize` once per target quant. Example for F16; repeat with +`Q8_0`, `Q6_K`, `Q5_K_M`, `Q4_K_M`: + +```bash +build/bin/transcribe-quantize \ + models/cohere-transcribe-arabic-07-2026/cohere-transcribe-arabic-07-2026-BF16.gguf \ + models/cohere-transcribe-arabic-07-2026/cohere-transcribe-arabic-07-2026-F16.gguf \ + --quant F16 +``` + +### Run real-model tests + +```bash +cmake -B build -DTRANSCRIBE_BUILD_REAL_MODEL_TESTS=ON +cmake --build build + +TRANSCRIBE_COHERE_GGUF=models/cohere-transcribe-arabic-07-2026/cohere-transcribe-arabic-07-2026-BF16.gguf \ + ctest --test-dir build --output-on-failure -R 'cohere' +``` + +### WER + +```bash +uv run scripts/wer/ingest.py fleurs --lang ar + +uv run scripts/wer/run.py \ + --model models/cohere-transcribe-arabic-07-2026/cohere-transcribe-arabic-07-2026-BF16.gguf \ + --manifest samples/wer/fleurs-ar.manifest.jsonl \ + --language ar \ + --out reports/wer/cohere-transcribe-arabic-07-2026-BF16.fleurs-ar.jsonl + +uv run scripts/wer/score.py \ + reports/wer/cohere-transcribe-arabic-07-2026-BF16.fleurs-ar.jsonl --language ar +``` diff --git a/docs/models/cohere.md b/docs/models/cohere.md new file mode 100644 index 00000000..63b32206 --- /dev/null +++ b/docs/models/cohere.md @@ -0,0 +1,77 @@ +# Cohere Transcribe + +Cohere's [Transcribe](https://huggingface.co/CohereLabs) family ported to +transcribe.cpp. A large Conformer encoder paired with a lightweight +Transformer decoder (cross-attention, tied token embedding); decoding is +autoregressive with a language-conditioned prompt. The variants share one +architecture (2.0B parameters, identical tensor shapes) and differ in +training focus and language coverage. + +For the architecture deep-dive, validation contract, and porting notes, +see the family doc at +[`docs/porting/families/cohere.md`](../porting/families/cohere.md). + +## Choosing a variant + +- **Broad multilingual coverage.** `cohere-transcribe-03-2026` — 14 + languages (English, French, German, Spanish, Italian, Portuguese, + Dutch, Polish, Greek, Arabic, Japanese, Chinese, Vietnamese, Korean). +- **Arabic-focused.** `cohere-transcribe-arabic-07-2026` — retrained for + Arabic, including dialects and Arabic-English code-switching, with + English as a secondary language. Prefer it over the base model for + Arabic audio. + +## All variants + +WER is for the **Q8_0** preset, measured by transcribe.cpp's WER +pipeline; each variant is evaluated on the dataset that matches its +focus. See each per-variant doc for the full quant matrix and +methodology. + +| Variant | Params | Q8_0 size | WER (Q8_0) | Eval set | Languages | Doc | +| --- | ---: | ---: | ---: | --- | --- | --- | +| `cohere-transcribe-03-2026` | 2.0B | 2.41 GB | 1.27% | LibriSpeech test-clean | 14 languages | [cohere-transcribe-03-2026.md](cohere-transcribe-03-2026.md) | +| `cohere-transcribe-arabic-07-2026` | 2.0B | 2.41 GB | 11.06% | FLEURS Arabic test | ar, en | [cohere-transcribe-arabic-07-2026.md](cohere-transcribe-arabic-07-2026.md) | + +Pre-built GGUFs for every variant and quant are hosted under +[`handy-computer` on Hugging Face](https://huggingface.co/handy-computer); +each per-variant doc has direct download links. + +## Input limits + +Every variant accepts up to about **6.7 minutes (400 s)** of 16 kHz mono audio +per call — the encoder's positional table is the binding limit, shared across +the family. Longer audio is rejected up front with +`TRANSCRIBE_ERR_INPUT_TOO_LONG` rather than silently truncated; split it into +shorter segments. See the [input-length contract](../input-limits.md). + +## Quick start + +Pick a variant and run (pass the audio's language with `-l`): + +```bash +cmake -B build +cmake --build build + +build/bin/transcribe-cli \ + -m models/cohere-transcribe-arabic-07-2026/cohere-transcribe-arabic-07-2026-Q8_0.gguf \ + -l ar \ + input.wav +``` + +The repo doesn't ship the GGUFs — pull them from the corresponding +`handy-computer/-gguf` repo on Hugging Face, or convert from +the upstream Cohere checkpoint via the per-variant doc's reproduction +section (the upstream repos are gated; accept the license first). + +## Capabilities + +All Cohere Transcribe variants support: + +- **Transcription** of 16 kHz mono WAV input across the variant's + supported languages (language hint required — no auto-detect). +- **Punctuation and capitalization** by default. + +What's not supported (consistent across the family): real-time +streaming, translation, timestamps, VAD, speaker diarization, auto +language detection. See the family doc for the full runtime contract. diff --git a/docs/models/moonshine.md b/docs/models/moonshine.md index 41bea350..83b65d15 100644 --- a/docs/models/moonshine.md +++ b/docs/models/moonshine.md @@ -82,6 +82,27 @@ Pre-built GGUFs for every variant and quant are hosted under each per-variant repo's `README.md` has direct download links and the full F32 / F16 / Q8_0 measurement table. +## Performance + +The language-specific checkpoints have exactly the same architecture and tensor +shapes as their corresponding English checkpoint; only the trained weight +values differ. They therefore inherit the English checkpoint's per-quant speed +measurements rather than claiming separate benchmark runs: + +- every `moonshine-tiny-{ar,ja,ko,uk,vi,zh}` row is measured on + `moonshine-tiny`; +- every `moonshine-base-{ar,ja,ko,uk,vi,zh}` row is measured on + `moonshine-base`. + +These are the published Q8_0 averages; the per-sample latency and xRT tables are +in [moonshine-tiny.md](moonshine-tiny.md#performance) and +[moonshine-base.md](moonshine-base.md#performance). + +| Size | Apple M4 Max Metal | Apple M4 Max CPU | Ryzen 4750U Vulkan | Ryzen 4750U CPU | +| --- | ---: | ---: | ---: | ---: | +| tiny and tiny language fine-tunes | 127x | 153.5x | 56x | 45.5x | +| base and base language fine-tunes | 79.5x | 80.5x | 34.5x | 22x | + ## Input limits Moonshine has no input-length limit, but its decoder is capped at a short output diff --git a/docs/porting/families/cohere.md b/docs/porting/families/cohere.md index d078566a..c3abae15 100644 --- a/docs/porting/families/cohere.md +++ b/docs/porting/families/cohere.md @@ -9,7 +9,11 @@ native Transformers. C++ CPU validation passes locally. - Upstream architecture string: `cohere_asr` - Current source directory shape: Hugging Face-style `cohere-transcribe-03-2026/` -- Variant: `cohere-transcribe-03-2026` +- Variants: `cohere-transcribe-03-2026`, + `cohere-transcribe-arabic-07-2026` (retrained Arabic-focused + checkpoint, identical architecture and tensor layout; languages + `[en, ar]`; config omits top-level `vocab_size` — the converter falls + back to `head.num_classes`; upstream repo is gated) ## References @@ -72,3 +76,10 @@ TRANSCRIBE_COHERE_GGUF=models/cohere-transcribe-03-2026/cohere-transcribe-03-202 - Manifest records `hf_revision` but not local artifact hashes. - Reference hardware should still be captured for benchmark reports. +- `cohere-transcribe-arabic-07-2026` has no per-variant golden tensor + manifest, converter report, or bench run; it is validated end-to-end by + WER parity against the native Transformers reference on FLEURS Arabic + (C++ BF16 11.02% vs reference 11.00%, 428 utts, batch 8, L40S; see + `reports/wer/cohere-transcribe-arabic-07-2026-*.fleurs-ar.b8.*`). The + WER baseline runner is + `scripts/wer/run_reference_cohere_transformers.py`. diff --git a/reports/porting/cohere/cohere-transcribe-arabic-07-2026/intake.json b/reports/porting/cohere/cohere-transcribe-arabic-07-2026/intake.json new file mode 100644 index 00000000..26e621bb --- /dev/null +++ b/reports/porting/cohere/cohere-transcribe-arabic-07-2026/intake.json @@ -0,0 +1,169 @@ +{ + "schema_version": "transcribe-intake-v1", + "family": "cohere", + "hf_repo": "CohereLabs/cohere-transcribe-arabic-07-2026", + "hf_revision": "0a8193caa4f3f92131471ab08824e488141cb392", + "sources": { + "config": { + "kind": "hf_file", + "path": "config.json", + "status": "found", + "detail": "Structurally identical to cohere-transcribe-03-2026 except: no top-level vocab_size (head.num_classes=16384 carries it), no auto_map, supported_languages=[en,ar], decoding.beam.max_generation_delta=-256" + }, + "preprocessor": { + "kind": "hf_file", + "path": "preprocessor_config.json", + "status": "found", + "detail": "Near-empty (processor_class only); frontend params live in config.json's preprocessor block, which is identical to 03-2026" + }, + "tokenizer_config": { + "kind": "hf_file", + "path": "tokenizer_config.json", + "status": "found" + }, + "tokenizer_json": { + "kind": "hf_file", + "path": "tokenizer.json", + "status": "found" + }, + "generation_config": { + "kind": "hf_file", + "path": "generation_config.json", + "status": "found", + "detail": "Same special token IDs as 03-2026 (bos=4, eos=3, pad=2, decoder_start=13764)" + }, + "safetensors_metadata": { + "kind": "hf_api", + "path": "safetensors header (range request)", + "status": "found", + "detail": "BF16=2104 (all floating tensors), I64=48 (integer buffers); identical layout and byte size to 03-2026, retrained weights" + }, + "model_card": { + "kind": "hf_api", + "path": "https://huggingface.co/CohereLabs/cohere-transcribe-arabic-07-2026", + "status": "found", + "detail": "Arabic-focused (dialects + code-switching) adaptation of the 03-2026 architecture; en secondary; gated:auto" + }, + "reference_modeling_code": { + "kind": "reference_code", + "path": "transcribe.cpp/scripts/convert-cohere.py, transcribe.cpp/src/arch/cohere/", + "status": "found", + "detail": "Same architecture as cohere-transcribe-03-2026; native Transformers (CohereAsrForConditionalGeneration, trust_remote_code=False) is the reference. tokenizer.model is blob-identical to 03-2026." + } + }, + "variants": [ + { + "name": "cohere-transcribe-arabic-07-2026", + "memory_gb": 5.0, + "files": ["model.safetensors", "config.json", "preprocessor_config.json", "tokenizer.json", "tokenizer.model"] + } + ], + "config": { + "architecture_candidates": ["encoder-decoder"], + "key_fields": { + "architectures": ["CohereAsrForConditionalGeneration"], + "model_type": "cohere_asr", + "vocab_size": 16384, + "is_encoder_decoder": true, + "max_seq_len": 1024, + "max_audio_clip_s": 35, + "encoder.type": "ConformerEncoder (FastConformer, NeMo-derived)", + "encoder.n_layers": 48, + "encoder.d_model": 1280, + "encoder.n_heads": 8, + "encoder.ff_expansion_factor": 4, + "encoder.conv_kernel_size": 9, + "encoder.subsampling": "dw_striding", + "encoder.subsampling_factor": 8, + "encoder.subsampling_conv_channels": 256, + "encoder.self_attention_model": "rel_pos", + "encoder.feat_in": 128, + "encoder.untie_biases": true, + "transf_decoder.hidden_size": 1024, + "transf_decoder.inner_size": 4096, + "transf_decoder.num_attention_heads": 8, + "transf_decoder.num_layers": 8, + "transf_decoder.hidden_act": "relu", + "transf_decoder.pre_ln": true, + "transf_decoder.max_sequence_length": 1024, + "transf_decoder.learn_positional_encodings": false, + "head.hidden_size": 1024, + "head.num_classes": 16384, + "head.activation": "relu", + "decoding.strategy": "beam", + "decoding.beam_size": 1, + "prompt_format": "cohere_asr" + }, + "varying_across_variants": [ + "supported_languages ([en,ar] vs 14 languages in 03-2026)", + "decoding.beam.max_generation_delta (-256 vs 50; not consumed by converter or C++)", + "top-level vocab_size absent (converter falls back to head.num_classes)" + ] + }, + "dtype": { + "expected": "bfloat16", + "source": "weights_header", + "evidence": "safetensors header BF16=2104 (all floating tensors), I64=48 (integer buffers), fetched via authenticated range request against revision 0a8193ca; identical distribution and total byte size to cohere-transcribe-03-2026.", + "details": { + "config_declared": null, + "header_distribution": { + "I64": 48, + "BF16": 2104 + } + }, + "expected_f32_tensors": [] + }, + "frontend": { + "sample_rate": 16000, + "n_mels": 128, + "hop_length": 160, + "fft_size": 512, + "window": "hann_periodic", + "normalization": "per_feature", + "preemphasis": 0.97, + "dither": 1e-05, + "center": true, + "padding_mode": "constant", + "mel_filterbank_norm": "slaney" + }, + "tokenizer": { + "type": "sentencepiece", + "vocab_size": 16384, + "special_tokens": { + "bos": 4, + "eos": 3, + "pad": 2, + "decoder_start": 13764 + }, + "has_language_tokens": true, + "vocab_sha256": "c6e708e8cd5c72afb475a2268fcbae2cf86651d0439aeff395734e3c3cc85de5" + }, + "capabilities": { + "languages": ["en", "ar"], + "language_detection": false, + "translation": false, + "timestamps": ["none"], + "streaming": false, + "speaker_diarization": false + }, + "upstream_benchmarks": [], + "reference_framework": "transformers", + "reference_rationale": "Same as cohere-transcribe-03-2026: native Hugging Face Transformers (CohereAsrForConditionalGeneration, trust_remote_code=False) is the canonical reference. This checkpoint is not packaged for NeMo; the encoder is merely FastConformer-derived. The repo ships trust_remote_code modeling files but the config carries no auto_map, and the family doc's discussion-#28 warning against the remote-code path stands.", + "architecture_pattern": "encoder-decoder", + "known_risks": [ + "Retrained weights on the 03-2026 architecture: all family-level structural validation carries over, but numerical goldens and WER baselines must be re-measured for this checkpoint.", + "tokenizer.model is blob-identical to 03-2026, so slot-token IDs (<|ar|>, <|pnc|>, ...) and the 10-token prompt shape are unchanged; tokenizer.json differs only in metadata.", + "config.json omits top-level vocab_size; converters/tools must fall back to head.num_classes.", + "FLEURS Arabic is the ar_eg (Egyptian) config; the model card claims dialect + code-switching coverage, so published Cohere numbers on other Arabic sets will not be directly comparable." + ], + "intake_gaps": [ + { + "field": "upstream_benchmarks", + "reason": "Model card Arabic WER/CER table not recorded at intake time; add from Cohere's technical report when available." + }, + { + "field": "variants[].memory_gb", + "reason": "Estimated from BF16 GGUF size; not measured against actual peak inference memory." + } + ] +} diff --git a/scripts/catalog/check.py b/scripts/catalog/check.py index f5fdcab5..347e9b1f 100755 --- a/scripts/catalog/check.py +++ b/scripts/catalog/check.py @@ -1,22 +1,15 @@ #!/usr/bin/env -S uv run --script # /// script # requires-python = ">=3.11" -# dependencies = ["jsonschema", "pyyaml"] +# dependencies = ["jsonschema"] # /// -"""check.py — validate catalog records and diff them against what we publish today. +"""Validate the durable catalog JSON records. -Three passes: - schema every record validates against catalog/_schema.json - integrity the gates the schema cannot express -- every benchmarked quant is - published, one slug per physical machine, recipe labels consistent - published every number currently in scripts/hf_cards/*.yaml is either - reproduced by a record or reported as unsourced - -The third pass is the migration's acceptance test: it says, model by model, -how much of what we publish today actually has an artifact behind it. +Checks the JSON schema plus cross-row integrity that the schema cannot express, +such as benchmark rows referencing a quant the variant does not publish. uv run scripts/catalog/check.py - uv run scripts/catalog/check.py --dir catalog --published + uv run scripts/catalog/check.py --dir catalog """ from __future__ import annotations @@ -26,11 +19,9 @@ import pathlib import sys -import yaml from jsonschema import Draft202012Validator REPO = pathlib.Path(__file__).resolve().parents[2] -CARDS = REPO / "scripts/hf_cards" def load(d: pathlib.Path) -> dict[str, dict]: @@ -64,44 +55,15 @@ def integrity_pass(records: dict) -> int: for r in rec.get("speed_benchmarks", []): if r.get("machine"): machines[r["machine"]].add(name) - recipes = {(r["dataset"], r["recipe"]) for r in rec.get("accuracy_benchmarks", [])} - by_ds = collections.Counter(ds for ds, _ in recipes) - for ds, n in by_ds.items(): - if n > 1: - print(f" warn {name}: {ds} measured under {n} recipes " - f"{sorted(r for d, r in recipes if d == ds)} -- not comparable to each other") print(f"integrity {len(records) - bad}/{len(records)} clean; " f"{len(machines)} machine slug(s): {', '.join(sorted(machines))}") return bad -def published_pass(records: dict) -> None: - """What the cards publish today, vs what a record can source.""" - rows, tot_w, got_w, tot_p, got_p = [], 0, 0, 0, 0 - for stem in sorted(p.stem for p in CARDS.glob("*.yaml")): - card = yaml.safe_load((CARDS / f"{stem}.yaml").read_text()) or {} - rec = records.get(stem) - card_w = {q["name"]: q.get("wer") for q in (card.get("quants") or []) if q.get("wer")} - card_p = sum(len(v) for v in (card.get("perf") or {}).values()) - have_w = {r["quant"] for r in (rec or {}).get("accuracy_benchmarks", [])} - have_p = len({(r["machine"], r["backend"], r["quant"]) for r in - (rec or {}).get("speed_benchmarks", [])}) - tot_w += len(card_w); got_w += len(set(card_w) & have_w) - tot_p += card_p; got_p += min(card_p, have_p) - if len(card_w) != len(set(card_w) & have_w) or card_p > have_p: - rows.append((stem, f"{len(set(card_w) & have_w)}/{len(card_w)}", - f"{min(card_p, have_p)}/{card_p}")) - print(f"published WER cells sourced {got_w}/{tot_w}; perf cells sourced {got_p}/{tot_p}") - if rows: - print(f"\n {'variant':42s} {'wer':>9} {'perf':>9}") - for stem, w, p in rows: - print(f" {stem:42s} {w:>9} {p:>9}") - def main() -> int: ap = argparse.ArgumentParser() ap.add_argument("--dir", default=str(REPO / "catalog")) - ap.add_argument("--published", action="store_true", help="run the published-vs-sourced diff") args = ap.parse_args() d = pathlib.Path(args.dir) schema = json.loads((REPO / "catalog/_schema.json").read_text()) @@ -110,8 +72,6 @@ def main() -> int: print(f"no records in {d}", file=sys.stderr) return 2 bad = schema_pass(records, schema) + integrity_pass(records) - if args.published: - published_pass(records) return 1 if bad else 0 diff --git a/scripts/catalog/db.py b/scripts/catalog/db.py index ae009067..6fe499a4 100755 --- a/scripts/catalog/db.py +++ b/scripts/catalog/db.py @@ -2,123 +2,295 @@ # /// script # requires-python = ">=3.11" # /// -"""db.py — fold catalog records into build/catalog.db. +"""Build the portable catalog database from catalog JSON records. -A derived index, never a store: dropped and rebuilt on every run, nothing -hand-edited in it, and it never writes anywhere the WER tooling reads. Because -the input is already structured, this is a fold with no parsers -- which is the -whole point of the records existing. +The SQLite file is a disposable query artifact; catalog/*.json is the source of +truth. The database contains the complete model catalog, every accuracy row and +every speed row. It replaces the former specialized WER database. uv run scripts/catalog/db.py - uv run scripts/catalog/db.py --out build/catalog.db + uv run scripts/catalog/db.py --out path/to/catalog.db """ from __future__ import annotations import argparse import json +import os import pathlib +import shutil import sqlite3 import sys from datetime import datetime, timezone REPO = pathlib.Path(__file__).resolve().parents[2] +DEFAULT_DB = REPO / "reports" / "wer" / "wer.db" +ORIGINAL_DB = REPO / "reports" / "wer" / "wer.db.original" SCHEMA = """ -PRAGMA user_version = 1; -CREATE TABLE meta(key TEXT PRIMARY KEY, value TEXT); +PRAGMA user_version = 8; +CREATE TABLE meta(key TEXT PRIMARY KEY, value TEXT NOT NULL); + CREATE TABLE models( - variant TEXT PRIMARY KEY, family TEXT NOT NULL, display_name TEXT, - params INTEGER, license TEXT, upstream_repo TEXT, published_repo TEXT, - long_form_strategy TEXT, max_audio_s REAL); + model TEXT PRIMARY KEY, + family TEXT NOT NULL, + display_name TEXT NOT NULL, + params INTEGER NOT NULL, + params_m REAL NOT NULL, + architecture_pattern TEXT, + license TEXT NOT NULL, + license_display TEXT NOT NULL, + upstream_repo TEXT NOT NULL, + upstream_commit TEXT NOT NULL, + published_repo TEXT, + language_tag_form TEXT, + encoder_window_s REAL, + long_form_strategy TEXT NOT NULL, + max_audio_s REAL, + max_output_tokens INTEGER +); + CREATE TABLE languages( - variant TEXT REFERENCES models(variant), lang TEXT, - PRIMARY KEY(variant, lang)); + lang TEXT PRIMARY KEY +); +CREATE TABLE model_languages( + model TEXT NOT NULL REFERENCES models(model), + lang TEXT NOT NULL REFERENCES languages(lang), + PRIMARY KEY(model, lang) +); +CREATE TABLE language_aliases( + model TEXT NOT NULL REFERENCES models(model), + alias TEXT NOT NULL REFERENCES languages(lang), + canonical TEXT NOT NULL REFERENCES languages(lang), + PRIMARY KEY(model, alias) +); +CREATE VIEW model_languages_canonical AS +SELECT ml.model, COALESCE(a.canonical, ml.lang) AS lang +FROM model_languages ml +LEFT JOIN language_aliases a ON a.model = ml.model AND a.alias = ml.lang; + CREATE TABLE capabilities( - variant TEXT REFERENCES models(variant), capability TEXT, - supported INTEGER NOT NULL, verified INTEGER, note TEXT, - PRIMARY KEY(variant, capability)); -CREATE TABLE downloads( - variant TEXT REFERENCES models(variant), quant TEXT, - filename TEXT NOT NULL, size_bytes INTEGER, - PRIMARY KEY(variant, quant)); -CREATE TABLE accuracy( - variant TEXT REFERENCES models(variant), dataset TEXT, split TEXT, - language TEXT, quant TEXT, metric TEXT NOT NULL, - err_pct REAL NOT NULL, ci_lo REAL, ci_hi REAL, n_utts INTEGER NOT NULL, - recipe TEXT NOT NULL, engine_sha TEXT, measured_on TEXT, - sub INTEGER, del_ INTEGER, ins INTEGER, empty_hyp INTEGER, - PRIMARY KEY(variant, dataset, split, language, quant, recipe)); -CREATE TABLE speed( - variant TEXT REFERENCES models(variant), machine TEXT, backend TEXT, - quant TEXT, sample TEXT, sample_duration_s REAL, - total_ms REAL NOT NULL, xrt REAL NOT NULL, - load_ms REAL, mel_ms REAL, encode_ms REAL, decode_ms REAL, - engine_sha TEXT, measured_on TEXT, thermal_gated INTEGER, - PRIMARY KEY(variant, machine, backend, quant, sample)); + model TEXT NOT NULL REFERENCES models(model), + capability TEXT NOT NULL, + supported INTEGER NOT NULL, + verified INTEGER, + note TEXT, + details_json TEXT NOT NULL, + PRIMARY KEY(model, capability) +); + +CREATE TABLE quants( + model TEXT NOT NULL REFERENCES models(model), + quant TEXT NOT NULL, + filename TEXT NOT NULL, + size_bytes INTEGER NOT NULL, + size_gb REAL NOT NULL, + PRIMARY KEY(model, quant) +); + +CREATE TABLE datasets( + dataset TEXT PRIMARY KEY, + source TEXT NOT NULL, + split TEXT NOT NULL, + lang TEXT NOT NULL REFERENCES languages(lang) +); +CREATE TABLE results( + result_id INTEGER PRIMARY KEY, + dataset TEXT NOT NULL REFERENCES datasets(dataset), + model TEXT NOT NULL REFERENCES models(model), + quant TEXT NOT NULL, + metric TEXT NOT NULL, + err_pct REAL NOT NULL CHECK(err_pct >= 0), + ci_lo REAL, + ci_hi REAL, + n_utts INTEGER NOT NULL CHECK(n_utts > 0), + batch_size INTEGER, + timestamps TEXT, + engine_sha TEXT, + measured_on TEXT, + substitutions INTEGER, + deletions INTEGER, + insertions INTEGER, + empty_hyp INTEGER, + utts_over_50pct INTEGER +); +CREATE UNIQUE INDEX results_identity ON results( + dataset, model, quant, metric, + IFNULL(batch_size, 0), IFNULL(timestamps, '') +); + +CREATE TABLE rigs( + rig TEXT PRIMARY KEY, + display TEXT NOT NULL +); +CREATE TABLE perf( + model TEXT NOT NULL REFERENCES models(model), + rig TEXT NOT NULL REFERENCES rigs(rig), + backend TEXT NOT NULL, + quant TEXT NOT NULL, + sample TEXT NOT NULL, + sample_s REAL NOT NULL, + total_ms REAL, + xrt REAL NOT NULL, + load_ms REAL, + mel_ms REAL, + encode_ms REAL, + decode_ms REAL, + engine_sha TEXT, + measured_on TEXT, + thermal_gated INTEGER, + PRIMARY KEY(model, rig, backend, quant, sample) +); + +-- Friendly full-catalog views. The base table names retain compatibility with +-- the original WER database; these expose the terminology used by catalog JSON. +CREATE VIEW downloads AS +SELECT model AS variant, quant, filename, size_bytes FROM quants; +CREATE VIEW accuracy AS +SELECT r.model AS variant, d.source AS dataset, d.split, d.lang AS language, + r.quant, r.metric, r.err_pct, r.ci_lo, r.ci_hi, r.n_utts, + r.batch_size, r.timestamps, r.engine_sha, r.measured_on, + r.substitutions, r.deletions, r.insertions, r.empty_hyp, + r.utts_over_50pct +FROM results r JOIN datasets d ON d.dataset = r.dataset; +CREATE VIEW speed AS +SELECT model AS variant, rig AS machine, backend, quant, sample, + sample_s AS sample_duration_s, total_ms, xrt AS xrt_compute, + load_ms, mel_ms, encode_ms, decode_ms, engine_sha, measured_on, + thermal_gated +FROM perf; """ -def main() -> int: - ap = argparse.ArgumentParser() - ap.add_argument("--dir", default=str(REPO / "catalog")) - ap.add_argument("--out", default=str(REPO / "build" / "catalog.db")) - args = ap.parse_args() - - records = [json.loads(p.read_text()) - for p in sorted(pathlib.Path(args.dir).glob("*.json")) - if not p.name.startswith("_")] +def dataset_id(row: dict) -> str: + source, split, lang = row["dataset"], row["split"], row["language"] + if source == "fleurs" and split == "test": + return f"fleurs-{lang}" + if source == "librispeech": + return f"librispeech-{split}" + return f"{source}-{split}-{lang}" + + +def load_records(directory: pathlib.Path) -> list[dict]: + return [json.loads(path.read_text()) + for path in sorted(directory.glob("*.json")) + if not path.name.startswith("_")] + + +def build(directory: pathlib.Path, out: pathlib.Path) -> dict[str, int]: + records = load_records(directory) if not records: - print("no records", file=sys.stderr) - return 2 + raise RuntimeError(f"no catalog records in {directory}") + + langs = {str(lang) for record in records for lang in record.get("languages", [])} + langs.update(row["language"] for record in records + for row in record.get("accuracy_benchmarks", [])) + langs.update(alias for record in records + for alias in (record.get("language_aliases") or {})) + langs.update(canonical for record in records + for canonical in (record.get("language_aliases") or {}).values()) + rigs = {row["machine"] for record in records + for row in record.get("speed_benchmarks", [])} - out = pathlib.Path(args.out) out.parent.mkdir(parents=True, exist_ok=True) - out.unlink(missing_ok=True) - con = sqlite3.connect(out) - con.execute("PRAGMA foreign_keys = ON") - con.executescript(SCHEMA) - - for r in records: - v = r["variant"] - con.execute("INSERT INTO models VALUES (?,?,?,?,?,?,?,?,?)", - (v, r.get("family"), r.get("display_name"), r.get("params"), - (r.get("license") or {}).get("spdx"), r.get("upstream_repo"), - r.get("published_repo"), r.get("long_form_strategy"), - r.get("max_audio_s"))) - con.executemany("INSERT OR IGNORE INTO languages VALUES (?,?)", - [(v, l) for l in r.get("languages", [])]) - con.executemany("INSERT INTO capabilities VALUES (?,?,?,?,?)", - [(v, k, int(bool(c.get("supported"))), - None if c.get("verified") is None else int(c["verified"]), - c.get("note")) for k, c in (r.get("capabilities") or {}).items()]) - con.executemany("INSERT INTO downloads VALUES (?,?,?,?)", - [(v, d["quant"], d["filename"], d.get("size_bytes")) - for d in r.get("downloads", [])]) - con.executemany("INSERT OR REPLACE INTO accuracy VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", - [(v, a["dataset"], a["split"], a["language"], a["quant"], a["metric"], - a["err_pct"], (a.get("ci95") or [None, None])[0], - (a.get("ci95") or [None, None])[1], a["n_utts"], a["recipe"], - a.get("engine_sha"), a.get("measured_on"), - (a.get("errors") or {}).get("sub"), (a.get("errors") or {}).get("del"), - (a.get("errors") or {}).get("ins"), a.get("empty_hyp")) - for a in r.get("accuracy_benchmarks", [])]) - con.executemany("INSERT OR REPLACE INTO speed VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", - [(v, s["machine"], s["backend"], s["quant"], s["sample"], - s["sample_duration_s"], s["total_ms"], s["xrt_compute"], - s.get("load_ms"), s.get("mel_ms"), s.get("encode_ms"), - s.get("decode_ms"), s.get("engine_sha"), s.get("measured_on"), - None if s.get("thermal_gated") is None else int(s["thermal_gated"])) - for s in r.get("speed_benchmarks", [])]) - - con.executemany("INSERT INTO meta VALUES (?,?)", [ - ("generated", datetime.now(timezone.utc).isoformat(timespec="seconds")), - ("source", "catalog/*.json"), - ("rebuild", "uv run scripts/catalog/db.py (drops and recreates; never hand-edit)")]) - con.commit() - for t in ("models", "languages", "capabilities", "downloads", "accuracy", "speed"): - print(f" {t:14s} {con.execute(f'SELECT count(*) FROM {t}').fetchone()[0]:>6}") + tmp = out.with_suffix(out.suffix + ".tmp") + tmp.unlink(missing_ok=True) + con = sqlite3.connect(tmp) + try: + con.execute("PRAGMA foreign_keys = ON") + con.executescript(SCHEMA) + con.executemany("INSERT INTO languages VALUES (?)", [ + (lang,) for lang in sorted(langs)]) + con.executemany("INSERT INTO rigs VALUES (?,?)", [ + (rig, rig.replace("-", " ").title()) for rig in sorted(rigs)]) + + datasets: dict[str, tuple[str, str, str]] = {} + for record in records: + for row in record.get("accuracy_benchmarks", []): + datasets[dataset_id(row)] = (row["dataset"], row["split"], row["language"]) + con.executemany("INSERT INTO datasets VALUES (?,?,?,?)", [ + (key, *value) for key, value in sorted(datasets.items())]) + + for record in records: + model = record["variant"] + license_info = record["license"] + con.execute("INSERT INTO models VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", ( + model, record["family"], record["display_name"], record["params"], + record["params"] / 1e6, record.get("architecture_pattern"), + license_info["spdx"], license_info["display"], record["upstream_repo"], + record["upstream_commit"], record.get("published_repo"), record.get("language_tag_form"), + record.get("encoder_window_s"), record["long_form_strategy"], + record.get("max_audio_s"), record.get("max_output_tokens"))) + con.executemany("INSERT INTO model_languages VALUES (?,?)", [ + (model, str(lang)) for lang in record.get("languages", [])]) + con.executemany("INSERT INTO language_aliases VALUES (?,?,?)", [ + (model, alias, canonical) + for alias, canonical in (record.get("language_aliases") or {}).items()]) + con.executemany("INSERT INTO capabilities VALUES (?,?,?,?,?,?)", [ + (model, name, int(bool(cap.get("supported"))), + None if cap.get("verified") is None else int(cap["verified"]), + cap.get("note"), json.dumps(cap, separators=(",", ":"), sort_keys=True)) + for name, cap in record.get("capabilities", {}).items()]) + con.executemany("INSERT INTO quants VALUES (?,?,?,?,?)", [ + (model, item["quant"], item["filename"], item["size_bytes"], + item["size_bytes"] / 1e9) for item in record.get("downloads", [])]) + con.executemany( + "INSERT INTO results(dataset,model,quant,metric,err_pct,ci_lo,ci_hi,n_utts," + "batch_size,timestamps,engine_sha,measured_on,substitutions,deletions,insertions," + "empty_hyp,utts_over_50pct) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ + (dataset_id(row), model, row["quant"], row["metric"], row["err_pct"], + (row.get("ci95") or [None, None])[0], + (row.get("ci95") or [None, None])[1], row["n_utts"], + row.get("batch_size"), row.get("timestamps"), row.get("engine_sha"), + row.get("measured_on"), (row.get("errors") or {}).get("sub"), + (row.get("errors") or {}).get("del"), + (row.get("errors") or {}).get("ins"), row.get("empty_hyp"), + row.get("utts_over_50pct")) + for row in record.get("accuracy_benchmarks", [])]) + con.executemany( + "INSERT INTO perf VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ + (model, row["machine"], row["backend"], row["quant"], row["sample"], + row["sample_duration_s"], row.get("total_ms"), row["xrt_compute"], + row.get("load_ms"), row.get("mel_ms"), row.get("encode_ms"), + row.get("decode_ms"), row.get("engine_sha"), row.get("measured_on"), + None if row.get("thermal_gated") is None else int(row["thermal_gated"])) + for row in record.get("speed_benchmarks", [])]) + + con.executemany("INSERT INTO meta VALUES (?,?)", [ + ("generated", datetime.now(timezone.utc).isoformat(timespec="seconds")), + ("source", "catalog/*.json"), + ("rebuild", "uv run scripts/catalog/db.py (drops and recreates; never hand-edit)"), + ("dataset_scope", "all catalog accuracy rows"), + ]) + con.commit() + counts = {table: con.execute(f"SELECT count(*) FROM {table}").fetchone()[0] + for table in ("models", "languages", "model_languages", + "language_aliases", "capabilities", "quants", "datasets", + "results", "rigs", "perf")} + finally: + con.close() + os.replace(tmp, out) + return counts + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--dir", default=str(REPO / "catalog")) + parser.add_argument("--out", default=str(DEFAULT_DB)) + args = parser.parse_args() + out = pathlib.Path(args.out) + + if out == DEFAULT_DB and out.exists() and not ORIGINAL_DB.exists(): + shutil.copy2(out, ORIGINAL_DB) + print(f"preserved original database: {ORIGINAL_DB}") + + try: + counts = build(pathlib.Path(args.dir), out) + except (OSError, ValueError, KeyError, sqlite3.Error, RuntimeError) as exc: + print(f"error: {exc}", file=sys.stderr) + return 1 + for table, count in counts.items(): + print(f" {table:20s} {count:>6}") print(f"\n{out}") - con.close() return 0 diff --git a/scripts/catalog/generate.py b/scripts/catalog/generate.py deleted file mode 100755 index bd399442..00000000 --- a/scripts/catalog/generate.py +++ /dev/null @@ -1,326 +0,0 @@ -#!/usr/bin/env -S uv run --script -# /// script -# requires-python = ">=3.11" -# dependencies = ["pyyaml", "requests"] -# /// -"""generate.py — build catalog/.json from artifacts. - -The catalog is downstream of artifacts, always. This reads what exists and -writes a record; it never copies a number out of prose. A section with no -artifact behind it comes out empty, and the coverage report says so. - - uv run scripts/catalog/generate.py # every variant - uv run scripts/catalog/generate.py --variant whisper-large-v3-turbo - uv run scripts/catalog/generate.py --no-network # skip Hub reads - -Sources, in order of authority: - the GGUF header family, params, languages, capability surface - reports/perf/ speed rows - reports/wer/ accuracy rows (full splits only) - the Hub API published file names and exact sizes - scripts/hf_cards/ licence and repo names ONLY, until those move -""" -from __future__ import annotations - -import argparse -import glob -import json -import os -import pathlib -import re -import sys -import urllib.request - -import yaml - -sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) -from gguf_kv import hf_token, read_local, read_remote # noqa: E402 - -REPO = pathlib.Path(__file__).resolve().parents[2] -CARDS, WER, PERF = REPO / "scripts/hf_cards", REPO / "reports/wer", REPO / "reports/perf" -OUT = REPO / "catalog" -CACHE = REPO / "build" / "catalog-cache.json" - -QUANTS = ("F32", "BF16", "F16", "Q8_0", "Q6_K", "Q5_K_M", "Q4_K_M") -# Derived runs, never publication rows: utterance subsets, streaming modes, -# rescorings, and the reference/bring-up presets. -DERIVED = re.compile(r"\.stream\d|\.r\d+$|\.filtered|notrimpad|trimflash|-timestamps_") -NOT_A_QUANT = ("REF", "CPP") - - -def norm(s: str) -> str: - return re.sub(r"[^a-z0-9]", "", s.lower()) - - -def cache() -> dict: - return json.loads(CACHE.read_text()) if CACHE.exists() else {} - - -def cache_put(d: dict) -> None: - CACHE.parent.mkdir(parents=True, exist_ok=True) - CACHE.write_text(json.dumps(d, indent=1, sort_keys=True)) - - -# ---------------------------------------------------------------- sources - -def hub_files(repo: str, c: dict, network: bool) -> dict[str, int]: - """{filename: size_bytes} for the GGUFs in a Hub repo.""" - if repo in c.get("hub", {}): - return c["hub"][repo] - if not network: - return {} - req = urllib.request.Request(f"https://huggingface.co/api/models/{repo}?blobs=true") - tok = hf_token() - if tok: - req.add_header("Authorization", f"Bearer {tok}") - try: - d = json.load(urllib.request.urlopen(req, timeout=60)) - except Exception as e: # noqa: BLE001 - print(f" [warn] Hub query failed for {repo}: {e}", file=sys.stderr) - return {} - files = {s["rfilename"]: s.get("size") or 0 for s in d.get("siblings", []) - if s["rfilename"].endswith(".gguf")} - c.setdefault("hub", {})[repo] = files - return files - - -def gguf_kv(slug: str, repo: str, files: dict, c: dict, network: bool) -> dict: - """Capability surface + identity, from a local GGUF if present else the Hub.""" - key = f"{repo}|{slug}" - if key in c.get("gguf", {}): - return c["gguf"][key] - local = sorted((REPO / "models").glob(f"*/{slug}-*.gguf"), key=lambda p: p.stat().st_size) - kv = None - if local: - try: - kv = read_local(local[0]) - except Exception as e: # noqa: BLE001 - print(f" [warn] local GGUF unreadable ({e})", file=sys.stderr) - if kv is None and network and files: - smallest = min(files, key=lambda f: files[f] or 1 << 62) - try: - kv = read_remote(repo, smallest) - except Exception as e: # noqa: BLE001 - print(f" [warn] Hub GGUF read failed ({e})", file=sys.stderr) - if kv is None: - return {} - c.setdefault("gguf", {})[key] = kv - return kv - - -def recipe_label(score_path: pathlib.Path) -> str: - """A deterministic label for the knobs run.py stamped into the hyp header. - - Read from the artifact, never asserted: a row's recipe is whatever actually - ran. The label is a canonical rendering of the stamped knobs, so two runs - with the same knobs always land on the same label. - """ - hyp = pathlib.Path(str(score_path).replace(".score.json", ".jsonl")) - knobs = {} - if hyp.exists(): - try: - with open(hyp) as f: - first = json.loads(f.readline()) - knobs = first.get("recipe") or {} - except Exception: # noqa: BLE001 - knobs = {} - ts = knobs.get("timestamps", "none") - bs = knobs.get("batch_size", 1) - if not knobs: # fall back to the filename's own tags - name = score_path.name - ts = "segment" if ".ts-segment" in name else "none" - m = re.search(r"\.b(\d+)\.", name) - bs = int(m.group(1)) if m else 1 - return f"{'ts-' + ts if ts != 'none' else 'standard'}" + (f".b{bs}" if bs != 1 else "") - - -def accuracy_rows(slug: str) -> list[dict]: - rows = [] - for p in sorted(WER.glob(f"{slug}-*.score.json")): - stem = p.name[:-len(".score.json")] - model_part, _, rest = stem.partition(".") - q = next((x for x in QUANTS + NOT_A_QUANT if model_part.endswith("-" + x)), None) - if q is None or q in NOT_A_QUANT or model_part[:-(len(q) + 1)] != slug: - continue - if DERIVED.search(rest): - continue - dataset_id = rest.split(".")[0] - if dataset_id.startswith("fleurs-"): - lang = dataset_id[len("fleurs-"):] - if not re.fullmatch(r"[a-z]{2,3}(-[a-z]{2,4})?", lang): - continue # subset ids like fleurs-ru-508 - dataset, split = "fleurs", "test" - elif dataset_id.startswith("librispeech-"): - dataset, split, lang = "librispeech", dataset_id[len("librispeech-"):], "en" - else: - continue - d = json.loads(p.read_text()) - pu = d.get("per_utterance") or [] - err = d.get("error_rate_pct", d.get("wer_pct")) - if err is None: - continue - lo = d.get("error_rate_ci_lo", d.get("wer_ci_lo")) - hi = d.get("error_rate_ci_hi", d.get("wer_ci_hi")) - rows.append({ - "dataset": dataset, "split": split, "language": lang, "quant": q, - "metric": d.get("metric", "wer"), "err_pct": err, - "ci95": [round(lo * 100, 2) if lo is not None else None, - round(hi * 100, 2) if hi is not None else None], - "n_utts": d["n"], "recipe": recipe_label(p), - "engine_sha": None, "measured_on": None, - "errors": {"sub": d["substitutions"], "del": d["deletions"], "ins": d["insertions"]}, - "empty_hyp": sum(1 for u in pu if not (u.get("hyp") or "").strip()) if pu else None, - "utts_over_50pct": sum(1 for u in pu if (u.get(d.get("metric", "wer")) or 0) > 0.5) - if pu else None, - }) - return sorted(rows, key=lambda r: (r["dataset"], r["language"], - QUANTS.index(r["quant"]))) - - -def speed_rows(variant: str) -> list[dict]: - rows = [] - for p in sorted(PERF.glob(f"*/*_{variant}_*.json")): - if "_uncooled_backup" in str(p): - continue - d = json.loads(p.read_text()) - machine = d.get("machine", {}).get("slug") - for r in d.get("runs", []): - s = r.get("summary") or {} - if "total_ms" not in s or "quant" not in r or "sample" not in r: - continue # bench reports predating the per-run quant/sample fields - rows.append({ - "machine": machine, "backend": d["backend"], "quant": r["quant"].upper(), - "sample": r["sample"], "sample_duration_s": round(r["sample_duration_s"], 3), - "total_ms": round(s["total_ms"]["mean"], 1), - "xrt_compute": r.get("rtf_compute_mean"), - "load_ms": round(r["load_ms"], 1), - "mel_ms": round(s["mel_ms"]["mean"], 1), - "encode_ms": round(s["encode_ms"]["mean"], 1), - "decode_ms": round(s["decode_ms"]["mean"], 1), - "engine_sha": d.get("git_sha"), "measured_on": d["timestamp"][:10], - "thermal_gated": None, - }) - # One row per cell: a later bench of the same cell supersedes an earlier one. - best: dict[tuple, dict] = {} - for r in rows: - best[(r["machine"], r["backend"], r["quant"], r["sample"])] = r - return sorted(best.values(), key=lambda r: (r["machine"], r["backend"], - QUANTS.index(r["quant"]), - r["sample_duration_s"])) - - -def capabilities(kv: dict, card: dict) -> dict: - """Derived from the GGUF's own capability surface; the card is not consulted. - - An absent KV means the loader's default, which is false -- the "information - gap, not a claim" rule. verified is left false for every row: only a Stage 4 - Capability Validation observation may set it. - """ - def cap(flag: bool, **extra) -> dict: - return {"supported": True, **extra, "verified": False} if flag else {"supported": False} - - ts_kinds = [] - if kv.get("stt.capability.word_timestamps"): - ts_kinds.append("word") - if kv.get("stt.capability.timestamps"): - ts_kinds.append("segment") - out = { - "transcribe": {"supported": True, "verified": False}, - "translate": cap(bool(kv.get("stt.capability.translate")), - targets=kv.get("stt.translation.target_languages"), - pairs=kv.get("stt.translation.pairs")), - "lang_detect": cap(bool(kv.get("stt.capability.lang_detect"))), - "timestamps": cap(bool(ts_kinds), granularities=ts_kinds or None), - "streaming": cap(bool(kv.get("stt.capability.streaming"))), - "diarize": cap(bool(kv.get("stt.capability.speaker_diarization")), - max_speakers=kv.get("stt.sortformer.max_speakers")), - "batching": {"supported": True, "verified": False}, - } - for k, v in out.items(): # drop null payload keys - out[k] = {kk: vv for kk, vv in v.items() if vv is not None} - return out - - -# ---------------------------------------------------------------- assembly - -def build(stem: str, c: dict, network: bool) -> tuple[dict, dict]: - card = yaml.safe_load((CARDS / f"{stem}.yaml").read_text()) or {} - quants = card.get("quants") or [] - slug = quants[0]["filename"].rsplit("-", 1)[0] if quants else stem - repo = card.get("target_repo") or "" - files = hub_files(repo, c, network) if repo else {} - kv = gguf_kv(slug, repo, files, c, network) - - downloads = [] - for fn, size in files.items(): - q = next((x for x in QUANTS if fn.endswith(f"-{x}.gguf")), None) - if q: - downloads.append({"quant": q, "filename": fn.rsplit("/", 1)[-1], "size_bytes": size}) - downloads.sort(key=lambda d: QUANTS.index(d["quant"])) - - rec = {"schema": "transcribe-catalog-v1", "variant": stem, - "family": kv.get("general.architecture") or card.get("family"), - "display_name": card.get("display_name") or stem, - "params": kv.get("_params"), - "license": {"spdx": card.get("license"), "display": card.get("license_display")}, - "upstream_repo": card.get("hf_repo"), "published_repo": repo, - "languages": kv.get("general.languages") or [str(x) for x in (card.get("languages") or [])], - "language_tag_form": None, - "long_form_strategy": None, - "capabilities": capabilities(kv, card), - "downloads": downloads, - "accuracy_benchmarks": accuracy_rows(slug), - "speed_benchmarks": speed_rows(stem)} - rec = {k: v for k, v in rec.items() if v is not None} - - stamped = any(k.startswith("stt.capability.") for k in kv) - cov = {"variant": stem, "gguf": bool(kv), "caps": stamped, "downloads": len(downloads), - "accuracy": len(rec["accuracy_benchmarks"]), "speed": len(rec["speed_benchmarks"])} - return rec, cov - - -def main() -> int: - ap = argparse.ArgumentParser() - ap.add_argument("--variant", default="", help="one hf_card stem (default: all)") - ap.add_argument("--no-network", action="store_true") - ap.add_argument("--out", default=str(OUT)) - args = ap.parse_args() - - stems = ([args.variant] if args.variant - else sorted(p.stem for p in CARDS.glob("*.yaml"))) - out_dir = pathlib.Path(args.out) - out_dir.mkdir(parents=True, exist_ok=True) - c, rows = cache(), [] - for stem in stems: - try: - rec, cov = build(stem, c, not args.no_network) - except Exception as e: # noqa: BLE001 - print(f" [FAIL] {stem}: {type(e).__name__}: {e}", file=sys.stderr) - continue - (out_dir / f"{stem}.json").write_text(json.dumps(rec, indent=2, ensure_ascii=False) + "\n") - rows.append(cov) - cache_put(c) - - print(f"\n{'variant':42s} {'gguf':>5} {'caps':>5} {'files':>6} {'acc':>5} {'speed':>6}") - for r in rows: - print(f"{r['variant']:42s} {'yes' if r['gguf'] else 'NO':>5} " - f"{'yes' if r['caps'] else 'NO':>5} {r['downloads']:>6} " - f"{r['accuracy']:>5} {r['speed']:>6}") - blind = [r["variant"] for r in rows if r["gguf"] and not r["caps"]] - if blind: - print(f"\n!! {len(blind)} variant(s) whose GGUF carries NO stt.capability.* key, so every " - f"capability below transcribe reads as unsupported. Their converter never stamped " - f"them and the family load() hardcodes the answer instead -- these must come from " - f"transcribe_model_get_capabilities(), not the header:") - for b in blind: - print(f" {b}") - n = len(rows) - print(f"\n{n} record(s). identity from GGUF: {sum(1 for r in rows if r['gguf'])}/{n}; " - f"with accuracy rows: {sum(1 for r in rows if r['accuracy'])}/{n}; " - f"with speed rows: {sum(1 for r in rows if r['speed'])}/{n}") - print(f"wrote {out_dir}/") - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/scripts/catalog/gguf_kv.py b/scripts/catalog/gguf_kv.py deleted file mode 100755 index 42a32de7..00000000 --- a/scripts/catalog/gguf_kv.py +++ /dev/null @@ -1,151 +0,0 @@ -#!/usr/bin/env python3 -"""Read selected GGUF metadata without downloading the weights. - -The header -- magic, counts, the KV block, then one info record per tensor -- -is the first few MB of the file, so a local read touches only that prefix and a -remote read is a couple of HTTP range requests rather than a multi-GB download. - -Returns the keys the catalog needs: architecture and parameter count for -identity, and the capability surface the loader itself dispatches on -(stt.capability.*, general.languages, stt.translation.*). -""" -from __future__ import annotations - -import math -import os -import pathlib -import struct - -(UINT8, INT8, UINT16, INT16, UINT32, INT32, FLOAT32, BOOL, STRING, ARRAY, - UINT64, INT64, FLOAT64) = range(13) -FIXED = {UINT8: 1, INT8: 1, UINT16: 2, INT16: 2, UINT32: 4, INT32: 4, - FLOAT32: 4, BOOL: 1, UINT64: 8, INT64: 8, FLOAT64: 8} - -WANTED = { - "general.architecture", "general.basename", "general.size_label", - "general.languages", "stt.variant", - "stt.capability.translate", "stt.capability.lang_detect", - "stt.capability.streaming", "stt.capability.speaker_diarization", - "stt.capability.timestamps", "stt.capability.word_timestamps", - "stt.translation.target_languages", "stt.translation.pairs", - "stt.sortformer.max_speakers", - "stt.parakeet.encoder.att_chunk_left_choices", - "stt.parakeet.encoder.att_chunk_chunk_choices", - "stt.parakeet.encoder.att_chunk_right_choices", -} - - -class Window: - def __init__(self, fetch, initial: int = 1 << 20): - self._fetch, self._buf, self.pos = fetch, fetch(0, initial), 0 - - def _need(self, end: int) -> None: - while end > len(self._buf): - chunk = self._fetch(len(self._buf), max(len(self._buf), end - len(self._buf))) - if not chunk: - raise EOFError(f"ran past the end of the object at {end}") - self._buf += chunk - - def take(self, n: int) -> bytes: - self._need(self.pos + n) - out = self._buf[self.pos:self.pos + n] - self.pos += n - return out - - def u32(self): return struct.unpack(" None: - if vtype in FIXED: - self.take(FIXED[vtype]) - elif vtype == STRING: - self.take(self.u64()) - elif vtype == ARRAY: - elem, n = self.u32(), self.u64() - if elem in FIXED: - self.take(FIXED[elem] * n) - else: - for _ in range(n): - self.skip_value(elem) - else: - raise ValueError(f"unknown GGUF value type {vtype}") - - -def _parse(win: Window) -> dict: - if win.take(4) != b"GGUF": - raise ValueError("not a GGUF file") - win.u32() # version - n_tensors, n_kv = win.u64(), win.u64() - kv: dict = {} - for _ in range(n_kv): - key = win.string() - vtype = win.u32() - if key in WANTED: - kv[key] = win.value(vtype) - else: - win.skip_value(vtype) - params = 0 - for _ in range(n_tensors): - win.string() - dims = [win.u64() for _ in range(win.u32())] - win.u32() - win.u64() - params += math.prod(dims) - kv["_params"] = params - kv["_n_tensors"] = n_tensors - return kv - - -def read_local(path: pathlib.Path) -> dict: - with open(path, "rb") as f: - def fetch(offset: int, length: int) -> bytes: - f.seek(offset) - return f.read(length) - return _parse(Window(fetch)) - - -def hf_token() -> str | None: - tok = os.environ.get("HF_TOKEN") - if tok: - return tok - p = pathlib.Path("~/.cache/huggingface/token").expanduser() - return p.read_text().strip() if p.exists() else None - - -def read_remote(repo: str, filename: str, revision: str = "main") -> dict: - import requests - url = f"https://huggingface.co/{repo}/resolve/{revision}/{filename}" - headers = {} - tok = hf_token() - if tok: - headers["Authorization"] = f"Bearer {tok}" - session = requests.Session() - - def fetch(offset: int, length: int) -> bytes: - r = session.get(url, headers=dict(headers, Range=f"bytes={offset}-{offset + length - 1}"), - timeout=60) - if r.status_code not in (200, 206): - raise RuntimeError(f"{repo}/{filename}: HTTP {r.status_code}") - return r.content - - return _parse(Window(fetch)) diff --git a/scripts/convert-cohere.py b/scripts/convert-cohere.py index 25db603c..d624e80f 100755 --- a/scripts/convert-cohere.py +++ b/scripts/convert-cohere.py @@ -73,6 +73,7 @@ import argparse import json +import re import sys from pathlib import Path @@ -203,7 +204,9 @@ def read_hparams(config: dict, gen_config: dict) -> dict: "dec_max_seq": int(dec["max_sequence_length"]), "dec_activation": str(dec["hidden_act"]).lower(), - "vocab_size": int(config["vocab_size"]), + # arabic-07-2026 omits the top-level vocab_size; head.num_classes + # carries the same value in every Cohere ASR config. + "vocab_size": int(config.get("vocab_size", config["head"]["num_classes"])), "decoder_start_token_id": int(gen_config["decoder_start_token_id"]), "bos_token_id": int(gen_config["bos_token_id"]), "eos_token_id": int(gen_config["eos_token_id"]), @@ -427,8 +430,14 @@ def convert(model_dir: Path, out_path: Path, repo_id: str | None = None) -> None hp = read_hparams(config, gen_config) + variant = slug_from_repo_id(repo_id) if repo_id else "cohere-transcribe-03-2026" + # Variants are named -; split the release tag off the + # end for general.version / general.basename. + m = re.match(r"^(.+)-(\d{2}-\d{4})$", variant) + basename, version = (m.group(1), m.group(2)) if m else (variant, None) + print(f"vocab_size = {hp['vocab_size']}") - print(f"Variant: cohere-transcribe-03-2026") + print(f"Variant: {variant}") print(f"Reading tokenizer from {tokenizer_path}") tok = extract_tokenizer(tokenizer_path) @@ -463,8 +472,8 @@ def convert(model_dir: Path, out_path: Path, repo_id: str | None = None) -> None add_general_identity( writer, name="Cohere Transcribe", - version="03-2026", - basename="cohere-transcribe", + version=version, + basename=basename, size_label=size_label, file_type=REFERENCE_FILE_TYPE, languages=hp["languages"], @@ -476,8 +485,11 @@ def convert(model_dir: Path, out_path: Path, repo_id: str | None = None) -> None repo_url=(f"https://huggingface.co/{repo_id}" if repo_id else None), ) - # ----- stt.variant ----- - writer.add_string("stt.variant", "cohere-transcribe-03-2026") + # ----- stt.variant + capability surface ----- + writer.add_string("stt.variant", variant) + writer.add_bool("stt.capability.translate", False) + writer.add_bool("stt.capability.lang_detect", False) + writer.add_bool("stt.capability.streaming", False) # ----- tokenizer.ggml.* ----- writer.add_string("tokenizer.ggml.model", "bpe") diff --git a/scripts/convert-funasr_nano.py b/scripts/convert-funasr_nano.py index a1baeb42..6057bde0 100644 --- a/scripts/convert-funasr_nano.py +++ b/scripts/convert-funasr_nano.py @@ -611,8 +611,11 @@ def convert(model_dir: Path, out_path: Path, variant: str, display_name: str, re ), ) - # ----- stt.variant ----- + # ----- stt.variant + capability surface ----- writer.add_string("stt.variant", variant) + writer.add_bool("stt.capability.translate", False) + writer.add_bool("stt.capability.lang_detect", False) + writer.add_bool("stt.capability.streaming", False) # ----- tokenizer.ggml.* ----- # Qwen3 byte-level BPE — llama.cpp tags this as "gpt2". diff --git a/scripts/convert-gigaam.py b/scripts/convert-gigaam.py index 5765d582..23b94635 100644 --- a/scripts/convert-gigaam.py +++ b/scripts/convert-gigaam.py @@ -622,8 +622,11 @@ def convert(variant_key: str, slug: str, out_path: Path, repo_id: str | None = N repo_url=(f"https://huggingface.co/{repo_id}" if repo_id else None), ) - # ----- stt.variant + head_kind ----- + # ----- stt.variant + capability surface + head_kind ----- writer.add_string("stt.variant", profile["variant"]) + writer.add_bool("stt.capability.translate", False) + writer.add_bool("stt.capability.lang_detect", False) + writer.add_bool("stt.capability.streaming", False) writer.add_string("stt.gigaam.head_kind", head_kind) # ----- tokenizer.ggml.* ----- diff --git a/scripts/convert-parakeet.py b/scripts/convert-parakeet.py index e9808525..7e946eb2 100644 --- a/scripts/convert-parakeet.py +++ b/scripts/convert-parakeet.py @@ -1462,8 +1462,8 @@ def convert(model_spec: str, out_path: Path, repo_id: str | None = None) -> None # ----- stt.variant + capability KV ----- writer.add_string("stt.variant", profile["variant"]) - if profile["lang_detect"]: - writer.add_bool("stt.capability.lang_detect", True) + writer.add_bool("stt.capability.translate", False) + writer.add_bool("stt.capability.lang_detect", profile["lang_detect"]) # Streaming capability. Derived from the encoder attention geometry so # the header bool can never disagree with what the C++ loader computes: diff --git a/scripts/hf_cards/backfill_identity.py b/scripts/hf_cards/backfill_identity.py deleted file mode 100644 index 8a7d0abc..00000000 --- a/scripts/hf_cards/backfill_identity.py +++ /dev/null @@ -1,161 +0,0 @@ -#!/usr/bin/env -S uv run --script -# /// script -# requires-python = ">=3.11" -# dependencies = ["pyyaml", "requests"] -# /// -"""backfill_identity.py — write family + params into the hf_card specs. - -The GGUF already knows both. `general.architecture` is the family string the -loader dispatches on, and the parameter count is the sum of the tensor -shapes. Neither was ever copied into the card, so nothing downstream could -group the Moonshine variants, or sort by model size. - -Weights for most models are no longer on this disk (converted, uploaded, -deleted), so anything missing locally is read from the Hub over a range -request: a couple of MB per model rather than the whole file. From here on -the fields belong in the card when it is authored, in porting-5-quants or -porting-8-ship, where the GGUF is guaranteed to be at hand. - - uv run scripts/hf_cards/backfill_identity.py # dry run - uv run scripts/hf_cards/backfill_identity.py --write - uv run scripts/hf_cards/backfill_identity.py --local-only -""" -from __future__ import annotations - -import argparse -import pathlib -import re -import sys - -import requests -import yaml - -REPO = pathlib.Path(__file__).resolve().parents[2] -CARDS = REPO / "scripts" / "hf_cards" -MODELS = REPO / "models" - -sys.path.insert(0, str(REPO / "scripts" / "wer")) -from gguf_header import hf_token, identity, identity_remote # noqa: E402 - -# Smallest first: the header is identical across quants, so fetch the file -# whose bulk we are least likely to touch if a header turns out to be large. -QUANT_ORDER = ["Q4_K_M", "Q5_K_M", "Q6_K", "Q8_0", "F16", "BF16", "F32"] - - -def norm(s: str) -> str: - return re.sub(r"[^a-z0-9]", "", s.lower()) - - -def local_gguf(slug: str) -> pathlib.Path | None: - dirs = {norm(p.name): p for p in MODELS.glob("*") if p.is_dir()} - d = dirs.get(norm(slug)) - if not d: - return None - files = sorted(d.glob("*.gguf"), key=lambda p: p.stat().st_size) - return files[0] if files else None - - -def remote_gguf(repo: str) -> str | None: - """Pick one GGUF filename from a Hub repo listing.""" - h = {} - tok = hf_token() - if tok: - h["Authorization"] = f"Bearer {tok}" - r = requests.get(f"https://huggingface.co/api/models/{repo}", - headers=h, timeout=30) - if not r.ok: - return None - names = [s["rfilename"] for s in r.json().get("siblings", []) - if s["rfilename"].endswith(".gguf")] - for q in QUANT_ORDER: - for n in names: - if n.endswith(f"-{q}.gguf"): - return n - return names[0] if names else None - - -def insert_fields(text: str, family: str, params: str) -> str | None: - """Add the two lines after the licence block, leaving the rest as is. - - A yaml round-trip would drop every comment in the file, and these specs - are commented documents, so the edit is textual and anchored.""" - if re.search(r"^family:", text, re.M): - return None - m = None - for pat in (r"^license_link:.*$", r"^license_name:.*$", - r"^license_display:.*$", r"^license:.*$"): - found = list(re.finditer(pat, text, re.M)) - if found: - m = found[-1] - break - if not m: - return None - add = (f"\n\n# Identity, read from the GGUF: general.architecture, and the\n" - f"# parameter count summed from the tensor shapes.\n" - f"family: {family}\nparams: {params}") - return text[:m.end()] + add + text[m.end():] - - -def main() -> int: - ap = argparse.ArgumentParser() - ap.add_argument("--write", action="store_true", - help="edit the specs (default is a dry run)") - ap.add_argument("--local-only", action="store_true", - help="skip models whose weights are not on this disk") - ap.add_argument("--only", default="", - help="comma-separated card stems, for a targeted run") - args = ap.parse_args() - only = {norm(s) for s in args.only.split(",") if s.strip()} - - filled, failed, already = [], [], 0 - for card in sorted(CARDS.glob("*.yaml")): - if only and norm(card.stem) not in only: - continue - spec = yaml.safe_load(card.read_text()) or {} - if spec.get("family"): - already += 1 - continue - path, where = local_gguf(card.stem), "local" - try: - if path: - info = identity(path) - src = path.name - elif args.local_only or not spec.get("target_repo"): - failed.append((card.stem, "no local GGUF")) - continue - else: - repo = spec["target_repo"] - name = remote_gguf(repo) - if not name: - failed.append((card.stem, f"no GGUF in {repo}")) - continue - info = identity_remote(repo, name) - where, src = "hub", f"{repo}/{name}" - except Exception as e: # noqa: BLE001 - failed.append((card.stem, f"{type(e).__name__}: {e}")) - continue - if not info["family"]: - failed.append((card.stem, "no general.architecture in the header")) - continue - params = f"{round(info['params'] / 1e6)}M" - print(f" {card.stem:38s} {where:6s} family={info['family']:20s} " - f"params={params:>7s} ({src})") - filled.append((card, info["family"], params)) - - if args.write: - for card, family, params in filled: - new = insert_fields(card.read_text(), family, params) - if new: - card.write_text(new) - - print(f"\n{len(filled)} card(s) {'written' if args.write else 'to write'}, " - f"{already} already had it, {len(failed)} failed") - for stem, why in failed: - print(f" FAIL {stem}: {why}") - if not args.write and filled: - print("\ndry run; pass --write to apply") - return 1 if failed else 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml b/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml new file mode 100644 index 00000000..a0278e98 --- /dev/null +++ b/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml @@ -0,0 +1,99 @@ +# Spec for the HF README of handy-computer/cohere-transcribe-arabic-07-2026-gguf. +# Consumed by scripts/hf_cards/generate.py. + +hf_repo: CohereLabs/cohere-transcribe-arabic-07-2026 +target_repo: handy-computer/cohere-transcribe-arabic-07-2026-gguf +transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/cohere-transcribe-arabic-07-2026.md + +upstream_commit: 0a8193c +pin_date: 2026-07-07 + +# Validation pin for the most recent upload. Updated on each release — +# older HF revisions carry whatever value was current at their upload time. +validation: + reference: Transformers + commit: d89ecb7 + date: 2026-07-07 + +license: apache-2.0 +license_display: Apache-2.0 +pipeline_tag: automatic-speech-recognition +languages: + - ar + - en +tags: + - gguf + - transcribe.cpp + - asr + - speech-to-text + - cohere + - conformer + - encoder-decoder + - arabic + +summary: | + Offline Arabic speech-to-text, including dialectal Arabic and + Arabic-English code-switching, with English as a secondary language. An + Arabic-focused adaptation of the Cohere Transcribe 03-2026 architecture: + a Conformer encoder with a Transformer encoder-decoder head + (cross-attention, tied token embedding). Takes a 16 kHz mono WAV and a + language flag (`-l ar` or `-l en`) and produces a transcript. Decoding + is autoregressive. + +default_quant_index: 2 # Q8_0 + +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend. Measured on +# cohere-transcribe-03-2026 (identical architecture and tensor shapes; +# only weight values differ), see docs/models. +perf: + m4-max: + metal: 73 + cpu: 9 + ryzen-4750u: + vulkan: 8 + cpu: 3 + +wer: + metadata_key: fleurs_ar_test + source: FLEURS Arabic test + notes: | + WER measured on the full FLEURS Arabic (`ar_eg`) test split (428 + utterances) with greedy decoding and no external LM, scored with the + Whisper BasicTextNormalizer. BF16 reference baseline, measured with + native Transformers on the same manifest: 11.00%; the BF16 port scores + 11.02%, and every quant falls inside the reference's 95% confidence + interval. FLEURS Arabic is Egyptian-dialect speech; upstream numbers + published on other Arabic test sets are not directly comparable. + +quants: + - name: BF16 + filename: cohere-transcribe-arabic-07-2026-BF16.gguf + size: 4.10 GB + wer: 11.02% + - name: F16 + filename: cohere-transcribe-arabic-07-2026-F16.gguf + size: 4.11 GB + wer: 11.00% + - name: Q8_0 + filename: cohere-transcribe-arabic-07-2026-Q8_0.gguf + size: 2.41 GB + wer: 11.06% + - name: Q6_K + filename: cohere-transcribe-arabic-07-2026-Q6_K.gguf + size: 1.97 GB + wer: 11.07% + - name: Q5_K_M + filename: cohere-transcribe-arabic-07-2026-Q5_K_M.gguf + size: 1.77 GB + wer: 10.95% + - name: Q4_K_M + filename: cohere-transcribe-arabic-07-2026-Q4_K_M.gguf + size: 1.56 GB + wer: 11.18% diff --git a/scripts/wer/build_db.py b/scripts/wer/build_db.py deleted file mode 100644 index 4a09ea2a..00000000 --- a/scripts/wer/build_db.py +++ /dev/null @@ -1,517 +0,0 @@ -#!/usr/bin/env -S uv run --script -# /// script -# requires-python = ">=3.11" -# dependencies = ["pyyaml"] -# /// -"""build_db.py — assemble reports/wer/wer.db from the published artifacts. - -A DERIVED INDEX, never a store: dropped and rebuilt from scratch on every -run, nothing hand-edited in it. The sources of truth stay where they are: - - reports/wer/*.score.json scored cells from the FLEURS sweep - docs/models/*.md the published speed tables - scripts/hf_cards/*.yaml licence, quants, capabilities, family - scripts/wer/languages.py BCP-47 -> name + script - scripts/wer/ingest.py BCP-47 -> FLEURS config - -The point is the joins. Accuracy lives in one place, speed in another, -licence and download size in a third, and no single file lets you ask -"which models cover these languages, under this error rate, above this -speed, under this size". One table does. - -WHAT GOES IN. Only the current sweep: FLEURS, the batched timestamps-off -recipe, full splits. No reference or bring-up rows, no subsets, no -LibriSpeech, no numbers from older recipes. The recipe is therefore a -constant of the whole database and lives in `meta` rather than on every -row; when a second recipe matters, that is the moment to add a column. -Models are here because they have a result, and everything else is pruned -to them: a model with no measurement, a language nothing references, and a -quant of a model nobody scored are all absent by construction. - -Speed comes from the per-model markdown docs rather than the `perf:` block -in the cards, because the docs keep the two axes the block averages away: -quant and sample. The card number is the mean of the doc's Q8_0 columns -(verified: whisper-large-v3 m4-max metal 23.6 is the mean of jfk 21.6 and -dots 25.7). Three models publish no table of their own and take a -sibling's, which is what `perf.measured_on` records. - -Foreign keys are on and the NOT NULLs are meant: a hole is a build failure, -not a row of nulls for the site to work around. -""" -from __future__ import annotations - -import ast -import glob -import json -import pathlib -import re -import sqlite3 -import sys -from datetime import datetime, timezone - -import yaml - -REPO = pathlib.Path(__file__).resolve().parents[2] -WER = REPO / "reports" / "wer" -DOCS = REPO / "docs" / "models" -CARDS = REPO / "scripts" / "hf_cards" -MODELS = REPO / "models" -DB = WER / "wer.db" - -sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) -from languages import LANGUAGES # noqa: E402 -from score_matrix import CELL_SCORE_ARGS # noqa: E402 -from gguf_header import identity # noqa: E402 - -SCHEMA = """ -PRAGMA user_version = 4; - -CREATE TABLE meta(key TEXT PRIMARY KEY, value TEXT); - -CREATE TABLE languages( - lang TEXT PRIMARY KEY, - name TEXT NOT NULL, - script TEXT NOT NULL -- ISO 15924: Latn, Cyrl, Hans ... -); - -CREATE TABLE datasets( - dataset TEXT PRIMARY KEY, -- fleurs-de - source TEXT NOT NULL, -- fleurs | librispeech | common-voice ... - config TEXT NOT NULL, -- the source's own selector: de_de - lang TEXT NOT NULL REFERENCES languages(lang) -); - -CREATE TABLE models( - model TEXT PRIMARY KEY, - family TEXT NOT NULL, -- loader family from the GGUF header - params_m REAL NOT NULL, -- millions, summed from tensor shapes - license TEXT, - license_display TEXT, - upstream_repo TEXT, - upstream_commit TEXT, - streaming INTEGER, - translate INTEGER, - lang_detect INTEGER, - diarize INTEGER, - timestamps TEXT -- none | segment | word | token -); - -CREATE TABLE model_languages( - model TEXT REFERENCES models(model), - lang TEXT REFERENCES languages(lang), -- the RAW code the card claims; - -- see language_aliases to join - -- it against measured results - PRIMARY KEY(model, lang) -); - --- FLEURS_LANGS (scripts/wer/ingest.py) is many-to-one: tl/fil both mean --- fil_ph, no/nb both mean nb_no, zh/zh-cn both mean cmn_hans_cn. The sweep --- measures and names ONE spelling per config (fleurs_full_matrix.py's --- canonical_codes()); a model's card can claim any of the others (Whisper --- says tl/no, Fun-ASR says tl, Nemotron says nb). Without this table a join --- from model_languages to datasets/results on lang silently drops those --- models for that language. Derived from FLEURS_LANGS, not hand-maintained: --- see language_alias_pairs() below. Nynorsk (nn) is deliberately absent -- --- it has no FLEURS config to alias to, and that absence is the honest --- answer ("no benchmark exists"), not a bug to paper over. -CREATE TABLE language_aliases( - alias TEXT PRIMARY KEY REFERENCES languages(lang), - canonical TEXT NOT NULL REFERENCES languages(lang) -); - --- The join surface most callers actually want: a model's claimed languages, --- resolved to the spelling datasets/results use. model_languages itself --- stays raw so the card's original claim is never lost. -CREATE VIEW model_languages_canonical AS -SELECT model, COALESCE(a.canonical, ml.lang) AS lang -FROM model_languages ml -LEFT JOIN language_aliases a ON a.alias = ml.lang; - -CREATE TABLE quants( - model TEXT REFERENCES models(model), - quant TEXT, - filename TEXT NOT NULL, - size_gb REAL NOT NULL, - PRIMARY KEY(model, quant) -); - -CREATE TABLE results( - dataset TEXT REFERENCES datasets(dataset), - model TEXT REFERENCES models(model), - quant TEXT NOT NULL, - metric TEXT NOT NULL CHECK(metric IN ('wer','cer')), - err_pct REAL NOT NULL CHECK(err_pct >= 0), - ci_lo REAL, - ci_hi REAL, - n_utts INTEGER NOT NULL CHECK(n_utts > 0), - note TEXT, - PRIMARY KEY(dataset, model, quant) -); - -CREATE TABLE rigs( - rig TEXT PRIMARY KEY, -- m4-max, ryzen-4750u, m4 - display TEXT NOT NULL -); - -CREATE TABLE perf( - model TEXT REFERENCES models(model), - rig TEXT REFERENCES rigs(rig), - backend TEXT NOT NULL, -- metal | vulkan | cpu - quant TEXT NOT NULL, - sample TEXT NOT NULL, -- jfk | dots | ru - sample_s REAL NOT NULL, -- so an app can weight or average - xrt REAL NOT NULL, -- x realtime over mel+encode+decode - -- The checkpoint the number was actually measured on. Usually the - -- model itself; for a fine-tune that publishes no table of its own it - -- is the sibling, which may not be a row here (Breeze carries - -- whisper-large-v2's numbers and whisper-large-v2 has no FLEURS - -- result). Deliberately not a foreign key for that reason. - measured_on TEXT NOT NULL, - PRIMARY KEY(model, rig, backend, quant, sample) -); -""" - -# --- what the sweep is ------------------------------------------------- - -SOURCE = "fleurs" -VARIANT = "b8" # the filename tag for the batched sweep -BATCH_SIZE = 8 -TIMESTAMPS = "none" - -# Dtype presets that are real shipped files. REF (a framework reference run) -# and CPP (an early bring-up run) occupy the same slot in a filename without -# being shipped quants, and are not sweep rows. -# -# Results are restricted to Q8_0 and Q5_K_M FOR NOW: the 2026-09-02 full -# FLEURS sweep only generated those two, so every other preset (F32, BF16, -# F16, Q6_K, Q4_K_M) is leftover from an earlier, narrower quant probe -- -# 8 languages at most, sometimes 1 -- on a different engine build. Mixing -# those into the same results table reads as a quant comparison it isn't: -# voxtral-realtime's Q6_K/Q4_K_M rows were still on the pre-patch offline -# delay while its Q8_0/Q5_K_M rows were the delay-30 re-run, so the "quant -# cost" was actually a decode-setting difference. Widen this once the other -# presets get the same full-matrix treatment. -QUANTS = ("Q8_0", "Q5_K_M") -EXCLUDED_QUANTS = ("REF", "CPP") - -NAME = re.compile( - rf"^(?P.+?)-(?P{'|'.join(QUANTS + EXCLUDED_QUANTS)})" - rf"(?P(?:-[A-Za-z0-9]+)*)\.(?P.+)\.score\.json$") - -# --- the published speed tables ---------------------------------------- - -# Heading in docs/models/*.md -> rig id. The 4750U is spelled three ways -# across the docs; they are one machine. -RIG_HEADINGS = { - "apple m4 max": "m4-max", - "apple m4": "m4", - "amd ryzen 7 pro 4750u": "ryzen-4750u", - "amd ryzen 7 4750u pro": "ryzen-4750u", - "amd ryzen 7 pro 4750u (vega 8 igpu)": "ryzen-4750u", -} -RIG_DISPLAY = {"m4-max": "Apple M4 Max", "m4": "Apple M4", - "ryzen-4750u": "AMD Ryzen 7 PRO 4750U"} - -# Models with no speed table of their own, and the sibling whose numbers -# they carry. Both are fine-tunes of the named checkpoint at identical -# shape, and both already publish exactly its figures in their own card; -# recording it here makes that visible in the data instead of implied. -# (Breeze is handled without an entry: its card's transcribe_docs_url -# already points at whisper-large-v2.md.) -PERF_INHERITS = { - "parakeet-primeline": "parakeet-tdt-0.6b-v3", - "cohere-transcribe-arabic-07-2026": "cohere-transcribe-03-2026", -} - - -def norm(s: str) -> str: - return re.sub(r"[^a-z0-9]", "", s.lower()) - - -def fleurs_map() -> dict[str, str]: - src = (REPO / "scripts/wer/ingest.py").read_text() - body = re.search(r"FLEURS_LANGS: dict\[str, str\] = \{(.*?)\n\}", src, re.S).group(1) - return ast.literal_eval("{" + re.sub(r"#.*", "", body) + "}") - - -def language_alias_pairs(fleurs: dict[str, str], measured: set[str], - claimed: set[str]) -> list[tuple[str, str]]: - """(alias, canonical) for every code whose FLEURS config was measured - under a DIFFERENT spelling than a card claims it under. - - FLEURS_LANGS is many-to-one (fil/tl -> fil_ph, nb/no -> nb_no, - zh/zh-cn -> cmn_hans_cn) and the sweep names one spelling per config, so - grouping fleurs by config and picking whichever code is actually in - `measured` gives the same canonical spelling the datasets/results tables - already use -- no second, hand-typed copy of the tl/no/zh-cn decisions. - - A pair is only emitted when the alias is actually claimed by some - surviving card and the canonical spelling was actually measured; - aliasing a spelling nothing references or nothing was measured for - would add a row with no query it helps.""" - by_cfg: dict[str, list[str]] = {} - for code, cfg in fleurs.items(): - by_cfg.setdefault(cfg, []).append(code) - pairs = [] - for codes in by_cfg.values(): - canonical = next((c for c in codes if c in measured), None) - if canonical is None: - continue - pairs += [(c, canonical) for c in codes if c != canonical and c in claimed] - return pairs - - -def size_to_gb(s) -> float | None: - if not isinstance(s, str): - return None - m = re.match(r"([\d.]+)\s*(GB|MB)", s.strip(), re.I) - if not m: - return None - v = float(m.group(1)) - return round(v / 1024, 4) if m.group(2).upper() == "MB" else v - - -def params_m(v) -> float | None: - if not isinstance(v, str): - return None - m = re.match(r"([\d.]+)\s*([MB])", v.strip(), re.I) - if not m: - return None - n = float(m.group(1)) - return round(n * 1000, 1) if m.group(2).upper() == "B" else n - - -def read_cell(d: dict) -> tuple[str, float, float, float, int] | None: - """(metric, err_pct, ci_lo, ci_hi, n) from a score.json, either shape. - - score.py grew the metric-neutral keys when CER routing landed; older - artifacts carry only wer/wer_pct.""" - if d.get("metric") in ("wer", "cer") and d.get("error_rate_pct") is not None: - return (d["metric"], d["error_rate_pct"], - round(d.get("error_rate_ci_lo", 0) * 100, 2), - round(d.get("error_rate_ci_hi", 0) * 100, 2), d["n"]) - for legacy in ("wer", "cer"): - if d.get(f"{legacy}_pct") is not None: - return (legacy, d[f"{legacy}_pct"], - round(d.get(f"{legacy}_ci_lo", 0) * 100, 2), - round(d.get(f"{legacy}_ci_hi", 0) * 100, 2), d["n"]) - return None - - -def sweep_cells() -> list[dict]: - """Every score.json that belongs to the sweep, parsed. - - A file qualifies on four counts: the dataset is FLEURS in a language we - can name, the filename carries the sweep's recipe tag, the quant is a - shipped preset, and the cell covers the full split. The last is checked - after the fact, since "full" is the largest n seen for that language.""" - out = [] - for p in sorted(WER.glob("*.score.json")): - m = NAME.match(p.name) - if not m or m.group("quant") in EXCLUDED_QUANTS: - continue - parts = m.group("rest").split(".") - dataset, tags = parts[0], parts[1:] - if tags != [VARIANT] or not dataset.startswith(f"{SOURCE}-"): - continue - lang = dataset[len(SOURCE) + 1:] - if lang not in LANGUAGES: - continue # subset ids like fleurs-ru-508 - cell = read_cell(json.loads(p.read_text())) - if cell is None: - continue - metric, err, lo, hi, n = cell - out.append({"dataset": dataset, "lang": lang, "model": m.group("model"), - "quant": m.group("quant"), "metric": metric, "err": err, - "lo": lo, "hi": hi, "n": n}) - full = {} - for c in out: - full[c["dataset"]] = max(full.get(c["dataset"], 0), c["n"]) - return [c for c in out if c["n"] == full[c["dataset"]]] - - -def doc_perf(doc: pathlib.Path) -> list[tuple]: - """(rig, backend, quant, sample, sample_s, xrt) from a doc's tables. - - Two table shapes appear across docs/models/*.md: - A) `| Backend | Sample | Q... | Q... |` -- backend is a column, one - table covers every backend for that rig. - B) a `**Backend**` line followed by `| Sample | Q... | Q... |` -- the - AMD 4750U tables use this shape (one table per backend, since the - quant set sometimes differs, e.g. Vulkan-only wide vs CPU-only). - Sample cells are `name (11.0s)` or `name (11.0 s)` -- both appear.""" - t = doc.read_text() - section = re.search(r"^## Performance\s*$(.*?)(?=^## |\Z)", t, re.M | re.S) - if not section: - return [] - rows, rig, quants, backend = [], None, [], None - for line in section.group(1).splitlines(): - head = re.match(r"^### (.+?)\s*$", line) - if head: - rig = RIG_HEADINGS.get(head.group(1).strip().lower()) - backend, quants = None, [] - continue - bold = re.match(r"^\*\*(.+?)\*\*\s*$", line) - if bold: - backend, quants = bold.group(1).split()[0].lower(), [] - continue - cols = re.match(r"^\|\s*Backend\s*\|\s*Sample\s*\|(.+)\|\s*$", line) - if cols: - quants, backend = [c.strip() for c in cols.group(1).split("|") if c.strip()], None - continue - cols_b = re.match(r"^\|\s*Sample\s*\|(.+)\|\s*$", line) - if cols_b and backend: - quants = [c.strip() for c in cols_b.group(1).split("|") if c.strip()] - continue - if not rig or not line.startswith("|"): - continue - cells = [c.strip() for c in line.strip().strip("|").split("|")] - if backend is not None: - sample_cell, value_cells, row_backend = cells[0], cells[1:], backend - else: - if len(cells) < 3: - continue - sample_cell, value_cells, row_backend = cells[1], cells[2:], cells[0].lower() - sm = re.match(r"([\w.-]+)\s*\(([\d.]+)\s*s\)", sample_cell) - if not sm: - continue - for quant, cell in zip(quants, value_cells): - x = re.search(r"\(([\d.]+)\s*[x×]\)", cell) - if x: - rows.append((rig, row_backend, quant, sm.group(1), - float(sm.group(2)), float(x.group(1)))) - return rows - - -def main() -> int: - fleurs = fleurs_map() - cards = {norm(pathlib.Path(p).stem): (pathlib.Path(p), yaml.safe_load(open(p).read()) or {}) - for p in glob.glob(str(CARDS / "*.yaml"))} - - cells = sweep_cells() - if not cells: - print("no sweep cells found", file=sys.stderr) - return 1 - models = sorted({c["model"] for c in cells}) - langs = sorted({c["lang"] for c in cells}) - - DB.unlink(missing_ok=True) - con = sqlite3.connect(DB) - con.execute("PRAGMA foreign_keys = ON") - con.executescript(SCHEMA) - - # Languages: the measured ones plus every code the surviving cards - # claim, so a coverage question has a name to render. - wanted = set(langs) - for m in models: - _, c = cards.get(norm(m), (None, {})) - wanted |= {str(l) for l in (c.get("languages") or []) if str(l) in LANGUAGES} - con.executemany("INSERT INTO languages VALUES (?,?,?)", - [(l, LANGUAGES[l][0], LANGUAGES[l][1]) for l in sorted(wanted)]) - - alias_pairs = language_alias_pairs(fleurs, measured=set(langs), claimed=wanted) - con.executemany("INSERT INTO language_aliases VALUES (?,?)", sorted(alias_pairs)) - - con.executemany("INSERT INTO datasets VALUES (?,?,?,?)", - [(f"{SOURCE}-{l}", SOURCE, fleurs[l], l) for l in langs]) - - missing_card = [] - for m in models: - path, c = cards.get(norm(m), (None, {})) - family, pm = c.get("family"), params_m(c.get("params")) - if not family or pm is None: - # No card, or a card without identity. The GGUF is the source - # for both either way, so read it directly rather than dropping - # measured cells over missing paperwork. - missing_card.append(m) - d = {norm(p.name): p for p in MODELS.glob("*") if p.is_dir()}.get(norm(m)) - files = sorted(d.glob("*.gguf"), key=lambda p: p.stat().st_size) if d else [] - if not files: - print(f"error: {m} has no card identity and no local GGUF; " - f"run scripts/hf_cards/backfill_identity.py", file=sys.stderr) - return 1 - info = identity(files[0]) - family, pm = info["family"], round(info["params"] / 1e6, 1) - caps = c.get("capabilities") or {} - con.execute("INSERT INTO models VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", - (m, family, pm, c.get("license"), c.get("license_display"), - c.get("hf_repo"), c.get("upstream_commit"), - int(bool(caps.get("streaming"))), int(bool(caps.get("translate"))), - int(bool(caps.get("lang_detect"))), int(bool(caps.get("diarize"))), - caps.get("timestamps"))) - for lg in (c.get("languages") or []): - if str(lg) in wanted: - con.execute("INSERT OR REPLACE INTO model_languages VALUES (?,?)", - (m, str(lg))) - for q in (c.get("quants") or []): - gb = size_to_gb(q.get("size")) - if q.get("name") and q.get("filename") and gb is not None: - con.execute("INSERT OR REPLACE INTO quants VALUES (?,?,?,?)", - (m, q["name"], q["filename"], gb)) - - con.executemany("INSERT INTO rigs VALUES (?,?)", sorted(RIG_DISPLAY.items())) - - # Speed, from each model's published doc. A model with no table of its - # own carries a sibling's numbers, named in measured_on. - # A doc benches the model it is named after, which is not always the - # model reading it: breeze-asr-25's card points at whisper-large-v2.md. - # Built over every card, not just the sweep, so the attribution stays - # right even when the sibling has no result of its own. - doc_owner = {} # doc filename -> the model it benches - for key, (path, c) in cards.items(): - doc = (c.get("transcribe_docs_url") or "").rsplit("/", 1)[-1] - if doc and norm(pathlib.Path(doc).stem) == norm(path.stem): - doc_owner[doc] = next((m for m in models if norm(m) == key), path.stem) - n_perf = 0 - for m in models: - source_model = PERF_INHERITS.get(m, m) - path, c = cards.get(norm(source_model), (None, {})) - if not c.get("transcribe_docs_url"): - continue - doc = c["transcribe_docs_url"].rsplit("/", 1)[-1] - rows = doc_perf(DOCS / doc) - measured_on = doc_owner.get(doc, source_model) - for rig, backend, quant, sample, sample_s, xrt in rows: - con.execute("INSERT OR REPLACE INTO perf VALUES (?,?,?,?,?,?,?,?)", - (m, rig, backend, quant, sample, sample_s, xrt, - measured_on)) - n_perf += 1 - - con.executemany("INSERT INTO results VALUES (?,?,?,?,?,?,?,?,?)", - [(c["dataset"], c["model"], c["quant"], c["metric"], c["err"], - c["lo"], c["hi"], c["n"], - CELL_SCORE_ARGS.get((c["model"], c["lang"]), (None, None))[1]) - for c in cells]) - - con.executemany("INSERT INTO meta VALUES (?,?)", [ - ("generated", datetime.now(timezone.utc).isoformat(timespec="seconds")), - ("rebuild", "uv run scripts/wer/build_db.py (drops and recreates; " - "never hand-edit)"), - ("dataset_scope", "google/fleurs test split, full splits only"), - ("recipe_batch_size", str(BATCH_SIZE)), - ("recipe_timestamps", TIMESTAMPS), - ("perf_metric", "x realtime over mel+encode+decode, from the tables " - "in docs/models/*.md"), - ]) - con.commit() - - for t in ("languages", "language_aliases", "datasets", "models", - "model_languages", "quants", "results", "rigs", "perf"): - n = con.execute(f"SELECT count(*) FROM {t}").fetchone()[0] - print(f" {t:16s} {n:>5}") - no_perf = [r[0] for r in con.execute( - "SELECT model FROM models WHERE model NOT IN (SELECT model FROM perf)")] - inherited = con.execute( - "SELECT count(DISTINCT model) FROM perf WHERE measured_on <> model").fetchone()[0] - print(f"\n{inherited} model(s) carry a sibling's speed numbers") - if missing_card: - print(f"no hf_card, identity read from the GGUF: {', '.join(missing_card)}") - if no_perf: - print(f"no speed numbers: {', '.join(no_perf)}") - print(f"\n{DB}") - con.close() - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/scripts/wer/by_language.py b/scripts/wer/by_language.py deleted file mode 100644 index 9bd45e34..00000000 --- a/scripts/wer/by_language.py +++ /dev/null @@ -1,156 +0,0 @@ -#!/usr/bin/env python3 -"""by_language.py — pivot the FLEURS results into a language-centric view. - -The database is keyed by (dataset, model, quant), which answers "how does -this model do everywhere". The recommendation question is the transpose: -"for someone who speaks X, what are the options". - -Reads reports/wer/wer.db, so the numbers, the language names and the speed -figures all come from the same index the site queries. Run build_db.py -first; this script computes nothing that is not in the database. - -Emits reports/wer/fleurs_by_language.json plus a readable markdown table. - -Per language it records every measured model ranked by error rate, with the -95% CI on each cell. Rank 1 is the lowest measured error rate and nothing -more: two adjacent rows whose CIs overlap heavily are not distinguishable -by this table, and it makes no claim that they are. -""" -from __future__ import annotations - -import argparse -import json -import pathlib -import sqlite3 -import sys -from datetime import datetime, timezone - -REPO = pathlib.Path(__file__).resolve().parents[2] -WER = REPO / "reports" / "wer" -DB = WER / "wer.db" - -# The speed column: one number per machine, at the quant being tabulated, -# on the short sample, taking the fastest backend that machine publishes. -RIGS = ["m4-max", "ryzen-4750u"] -SAMPLE = "jfk" - - -def speed(con: sqlite3.Connection, quant: str) -> dict[str, dict[str, float]]: - """{model: {rig: xrt}} at this quant, fastest backend, short sample. - - Falls back to whichever sample a model publishes when it has no jfk - row, which is the GigaAM case (benched on a Russian clip).""" - out: dict[str, dict[str, float]] = {} - for model, rig, xrt in con.execute( - "SELECT model, rig, max(xrt) FROM perf WHERE quant = ? AND sample = ? " - "GROUP BY model, rig", (quant, SAMPLE) - ): - out.setdefault(model, {})[rig] = xrt - for model, rig, xrt in con.execute( - "SELECT model, rig, max(xrt) FROM perf WHERE quant = ? GROUP BY model, rig", - (quant,) - ): - out.setdefault(model, {}).setdefault(rig, xrt) - return out - - -def main() -> int: - ap = argparse.ArgumentParser() - ap.add_argument("--db", default=str(DB)) - ap.add_argument("--out", default=str(WER / "fleurs_by_language")) - ap.add_argument("--quant", default="Q8_0") - args = ap.parse_args() - - db = pathlib.Path(args.db) - if not db.exists(): - print(f"error: {db} not found; run scripts/wer/build_db.py first", - file=sys.stderr) - return 2 - con = sqlite3.connect(db) - con.row_factory = sqlite3.Row - meta = dict(con.execute("SELECT key, value FROM meta")) - perf = speed(con, args.quant) - - langs: dict[str, dict] = {} - for r in con.execute( - "SELECT d.lang, l.name AS language, r.model, r.metric, r.err_pct, " - " r.ci_lo, r.ci_hi, r.n_utts, r.note " - "FROM results r " - "JOIN datasets d ON d.dataset = r.dataset " - "JOIN languages l ON l.lang = d.lang " - "WHERE d.source = 'fleurs' AND r.quant = ? " - "ORDER BY d.lang, r.err_pct", (args.quant,) - ): - e = perf.get(r["model"], {}) - langs.setdefault(r["lang"], {"name": r["language"], "models": []}) - langs[r["lang"]]["models"].append({ - "model": r["model"], "name": r["language"], "pct": r["err_pct"], - "ci": [r["ci_lo"], r["ci_hi"]], "metric": r["metric"], - "n": r["n_utts"], "note": r["note"], - "m4_max_rt": e.get("m4-max"), "r4750u_rt": e.get("ryzen-4750u"), - }) - - out: dict[str, dict] = {} - for lang, cell in sorted(langs.items()): - rows = cell["models"] - for i, r in enumerate(rows, 1): - r["rank"] = i - out[lang] = { - "name": cell["name"], "metric": rows[0]["metric"], - "n_utts": rows[0]["n"], "n_models": len(rows), - "best": rows[0]["model"], "best_pct": rows[0]["pct"], - "models": rows, - } - - payload = { - "generated": datetime.now(timezone.utc).isoformat(timespec="seconds"), - "dataset": meta.get("dataset_scope", "google/fleurs test split"), - "quant": args.quant, - "batch_size": int(meta.get("recipe_batch_size", 8)), - "timestamps": meta.get("recipe_timestamps", "none"), - "n_languages": len(out), - "n_cells": sum(v["n_models"] for v in out.values()), - "languages": out, - } - jpath = pathlib.Path(args.out).with_suffix(".json") - jpath.write_text(json.dumps(payload, indent=1, ensure_ascii=False)) - - lines = [ - f"# FLEURS by language ({args.quant}, batch " - f"{payload['batch_size']}, timestamps {payload['timestamps']})", "", - f"{payload['n_languages']} languages, {payload['n_cells']} " - "measurements. Rank is by measured error rate; where two CIs overlap " - "the ordering between them is not meaningful.", "", - f"Speed columns are the published realtime multiplier at " - f"{args.quant} on the `{SAMPLE}` sample, fastest backend per machine, " - "from the tables in `docs/models/*.md`. Blank means that model " - "publishes no bench on that machine.", "", - "Error rates use the metric named in each heading and are NOT " - "comparable across languages, only within one.", "", - ] - for lang, v in out.items(): - lines.append(f"## {lang} - {v['name']} " - f"({v['metric'].upper()}, n={v['n_utts']}, " - f"{v['n_models']} models)") - lines += ["", "| # | model | err% | 95% CI | M4 Max | 4750U |", - "|--:|---|--:|---|--:|--:|"] - for r in v["models"]: - note = f" ({r['note']})" if r["note"] else "" - m4 = f"{r['m4_max_rt']:.0f}x" if r.get("m4_max_rt") else "" - rz = f"{r['r4750u_rt']:.0f}x" if r.get("r4750u_rt") else "" - lines.append(f"| {r['rank']} | {r['model']}{note} | " - f"{r['pct']:.2f} | {r['ci'][0]:.2f}-{r['ci'][1]:.2f} " - f"| {m4} | {rz} |") - lines.append("") - mpath = pathlib.Path(args.out).with_suffix(".md") - mpath.write_text("\n".join(lines)) - - print(f"{payload['n_languages']} languages, {payload['n_cells']} cells") - print(f" {jpath}") - print(f" {mpath}") - con.close() - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/scripts/wer/gguf_header.py b/scripts/wer/gguf_header.py deleted file mode 100644 index 70febe33..00000000 --- a/scripts/wer/gguf_header.py +++ /dev/null @@ -1,154 +0,0 @@ -#!/usr/bin/env python3 -"""gguf_header.py — read a GGUF's identity without downloading the weights. - -Two of the things the index needs about a model, its loader family and its -parameter count, are stamped in the GGUF and nowhere else. Most of the -shipped models are no longer on this disk: they were converted, uploaded, -and the local copy deleted. Downloading a multi-GB file to read a header is -absurd, so this parses the header out of the first few MB over an HTTP -range request instead. - -The header is: magic, version, counts, the key/value block, then one info -record per tensor (name, dims, type, offset) before the tensor data starts. -Everything this module wants lives in that prefix. Only the KV block's size -varies much, because a tokenizer's token list is stored there, so the -fetcher grows its window when a read runs past the end rather than guessing -a size up front. - - from gguf_header import identity - identity(pathlib.Path("models/whisper-tiny/whisper-tiny-F32.gguf")) - identity_remote("handy-computer/whisper-medium-gguf", "whisper-medium-Q8_0.gguf") -""" -from __future__ import annotations - -import math -import os -import pathlib -import struct - -# GGUF metadata value types, from the spec's gguf_metadata_value_type enum. -(UINT8, INT8, UINT16, INT16, UINT32, INT32, FLOAT32, BOOL, STRING, ARRAY, - UINT64, INT64, FLOAT64) = range(13) - -FIXED = {UINT8: 1, INT8: 1, UINT16: 2, INT16: 2, UINT32: 4, INT32: 4, - FLOAT32: 4, BOOL: 1, UINT64: 8, INT64: 8, FLOAT64: 8} - - -class Window: - """A growable byte window over a file or a remote object.""" - - def __init__(self, fetch, initial: int = 1 << 20): - self._fetch = fetch # fetch(offset, length) -> bytes - self._buf = fetch(0, initial) - self.pos = 0 - - def _need(self, end: int) -> None: - while end > len(self._buf): - more = max(len(self._buf), end - len(self._buf)) - chunk = self._fetch(len(self._buf), more) - if not chunk: - raise EOFError(f"ran past the end of the object at {end}") - self._buf += chunk - - def take(self, n: int) -> bytes: - self._need(self.pos + n) - out = self._buf[self.pos:self.pos + n] - self.pos += n - return out - - def u32(self) -> int: - return struct.unpack(" int: - return struct.unpack(" str: - return self.take(self.u64()).decode("utf-8", errors="replace") - - def skip_value(self, vtype: int) -> None: - """Advance past one metadata value without materialising it.""" - if vtype in FIXED: - self.take(FIXED[vtype]) - elif vtype == STRING: - self.take(self.u64()) - elif vtype == ARRAY: - elem, n = self.u32(), self.u64() - if elem in FIXED: - self.take(FIXED[elem] * n) - else: - for _ in range(n): - self.skip_value(elem) - else: - raise ValueError(f"unknown GGUF value type {vtype}") - - -def _parse(win: Window) -> dict: - if win.take(4) != b"GGUF": - raise ValueError("not a GGUF file") - version = win.u32() - n_tensors, n_kv = win.u64(), win.u64() - - wanted = {"general.architecture", "general.basename", "general.size_label"} - kv: dict[str, str] = {} - for _ in range(n_kv): - key = win.string() - vtype = win.u32() - if key in wanted and vtype == STRING: - kv[key] = win.string() - else: - win.skip_value(vtype) - - params = 0 - for _ in range(n_tensors): - win.string() # tensor name - dims = [win.u64() for _ in range(win.u32())] - win.u32() # ggml type - win.u64() # offset into the data blob - params += math.prod(dims) - - return {"version": version, "n_tensors": n_tensors, - "family": kv.get("general.architecture"), - "basename": kv.get("general.basename"), - "size_label": kv.get("general.size_label"), - "params": params, "params_m": round(params / 1e6, 1)} - - -def identity(path: pathlib.Path) -> dict: - """Identity from a local GGUF, reading only as much as the header needs.""" - with open(path, "rb") as f: - def fetch(offset: int, length: int) -> bytes: - f.seek(offset) - return f.read(length) - return _parse(Window(fetch)) - - -def hf_token() -> str | None: - tok = os.environ.get("HF_TOKEN") - if tok: - return tok - p = pathlib.Path("~/.cache/huggingface/token").expanduser() - return p.read_text().strip() if p.exists() else None - - -def identity_remote(repo: str, filename: str, revision: str = "main") -> dict: - """Identity from a GGUF on the Hub, over HTTP range requests. - - Costs a few MB rather than the whole file. Works on private repos when a - token is available, which is the normal case for handy-computer/*.""" - import requests - - url = f"https://huggingface.co/{repo}/resolve/{revision}/{filename}" - headers = {} - tok = hf_token() - if tok: - headers["Authorization"] = f"Bearer {tok}" - session = requests.Session() - - def fetch(offset: int, length: int) -> bytes: - h = dict(headers, Range=f"bytes={offset}-{offset + length - 1}") - r = session.get(url, headers=h, timeout=60) - if r.status_code not in (200, 206): - raise RuntimeError(f"{repo}/{filename}: HTTP {r.status_code}") - return r.content - - return _parse(Window(fetch)) diff --git a/scripts/wer/languages.py b/scripts/wer/languages.py deleted file mode 100644 index c8c19739..00000000 --- a/scripts/wer/languages.py +++ /dev/null @@ -1,162 +0,0 @@ -#!/usr/bin/env python3 -"""languages.py — the canonical BCP-47 code table for the WER tooling. - -One table, three consumers: the language names in reports, the `languages` -table in fleurs.db, and the script column used to explain script-fold -scoring (the Traditional-vs-Simplified case on Breeze/zh is a fact about -script, not a free-text note). - -It covers every code that appears ANYWHERE: benchmarked FLEURS languages, -FLEURS configs not yet benchmarked, and languages a model card merely -claims. Coverage a card asserts but that nothing has measured is still a -language the site has to be able to name. - -Names are checked in as literals rather than resolved from a locale library -at runtime, so the tooling keeps its no-dependency property and the names -stay what a user would call the language. Generated once from CLDR via -langcodes, then the names already in use were kept verbatim so no report -churns. Edit by hand; regeneration is not part of any build. - -Scripts are ISO 15924. For the three codes where the script is genuinely -contested, the FLEURS config name settles it (cmn_hans_cn -> Hans, -yue_hant_hk -> Hant); everything else is the CLDR likely-script. -""" -from __future__ import annotations - -# code -> (English name, ISO 15924 script) -LANGUAGES: dict[str, tuple[str, str]] = { - 'af': ('Afrikaans', 'Latn'), - 'am': ('Amharic', 'Ethi'), - 'ar': ('Arabic', 'Arab'), - 'as': ('Assamese', 'Beng'), - 'ast': ('Asturian', 'Latn'), - 'az': ('Azerbaijani', 'Latn'), - 'ba': ('Bashkir', 'Cyrl'), - 'be': ('Belarusian', 'Cyrl'), - 'bg': ('Bulgarian', 'Cyrl'), - 'bn': ('Bangla', 'Beng'), - 'bo': ('Tibetan', 'Tibt'), - 'br': ('Breton', 'Latn'), - 'bs': ('Bosnian', 'Latn'), - 'ca': ('Catalan', 'Latn'), - 'ceb': ('Cebuano', 'Latn'), - 'ckb': ('Central Kurdish', 'Arab'), - 'cs': ('Czech', 'Latn'), - 'cy': ('Welsh', 'Latn'), - 'da': ('Danish', 'Latn'), - 'de': ('German', 'Latn'), - 'el': ('Greek', 'Grek'), - 'en': ('English', 'Latn'), - 'es': ('Spanish', 'Latn'), - 'et': ('Estonian', 'Latn'), - 'eu': ('Basque', 'Latn'), - 'fa': ('Persian', 'Arab'), - 'ff': ('Fula', 'Latn'), - 'fi': ('Finnish', 'Latn'), - 'fil': ('Filipino', 'Latn'), - 'fo': ('Faroese', 'Latn'), - 'fr': ('French', 'Latn'), - 'ga': ('Irish', 'Latn'), - 'gl': ('Galician', 'Latn'), - 'gu': ('Gujarati', 'Gujr'), - 'ha': ('Hausa', 'Latn'), - 'haw': ('Hawaiian', 'Latn'), - 'he': ('Hebrew', 'Hebr'), - 'hi': ('Hindi', 'Deva'), - 'hr': ('Croatian', 'Latn'), - 'ht': ('Haitian Creole', 'Latn'), - 'hu': ('Hungarian', 'Latn'), - 'hy': ('Armenian', 'Armn'), - 'id': ('Indonesian', 'Latn'), - 'ig': ('Igbo', 'Latn'), - 'is': ('Icelandic', 'Latn'), - 'it': ('Italian', 'Latn'), - 'ja': ('Japanese', 'Jpan'), - 'jv': ('Javanese', 'Latn'), - 'jw': ('Javanese', 'Latn'), - 'ka': ('Georgian', 'Geor'), - 'kam': ('Kamba', 'Latn'), - 'kea': ('Kabuverdianu', 'Latn'), - 'kk': ('Kazakh', 'Cyrl'), - 'km': ('Khmer', 'Khmr'), - 'kn': ('Kannada', 'Knda'), - 'ko': ('Korean', 'Kore'), - 'ky': ('Kyrgyz', 'Cyrl'), - 'la': ('Latin', 'Latn'), - 'lb': ('Luxembourgish', 'Latn'), - 'lg': ('Ganda', 'Latn'), - 'ln': ('Lingala', 'Latn'), - 'lo': ('Lao', 'Laoo'), - 'lt': ('Lithuanian', 'Latn'), - 'luo': ('Luo (Kenya and Tanzania)', 'Latn'), - 'lv': ('Latvian', 'Latn'), - 'mg': ('Malagasy', 'Latn'), - 'mi': ('Māori', 'Latn'), - 'mk': ('Macedonian', 'Cyrl'), - 'ml': ('Malayalam', 'Mlym'), - 'mn': ('Mongolian', 'Cyrl'), - 'mr': ('Marathi', 'Deva'), - 'ms': ('Malay', 'Latn'), - 'mt': ('Maltese', 'Latn'), - 'my': ('Burmese', 'Mymr'), - 'nb': ('Norwegian Bokmal', 'Latn'), - 'ne': ('Nepali', 'Deva'), - 'nl': ('Dutch', 'Latn'), - 'nn': ('Norwegian Nynorsk', 'Latn'), - 'no': ('Norwegian', 'Latn'), - 'nso': ('Northern Sotho', 'Latn'), - 'ny': ('Nyanja', 'Latn'), - 'oc': ('Occitan', 'Latn'), - 'om': ('Oromo', 'Latn'), - 'or': ('Odia', 'Orya'), - 'pa': ('Punjabi', 'Guru'), - 'pl': ('Polish', 'Latn'), - 'ps': ('Pashto', 'Arab'), - 'pt': ('Portuguese', 'Latn'), - 'ro': ('Romanian', 'Latn'), - 'ru': ('Russian', 'Cyrl'), - 'sa': ('Sanskrit', 'Deva'), - 'sd': ('Sindhi', 'Arab'), - 'si': ('Sinhala', 'Sinh'), - 'sk': ('Slovak', 'Latn'), - 'sl': ('Slovenian', 'Latn'), - 'sn': ('Shona', 'Latn'), - 'so': ('Somali', 'Latn'), - 'sq': ('Albanian', 'Latn'), - 'sr': ('Serbian', 'Cyrl'), - 'su': ('Sundanese', 'Latn'), - 'sv': ('Swedish', 'Latn'), - 'sw': ('Swahili', 'Latn'), - 'ta': ('Tamil', 'Taml'), - 'te': ('Telugu', 'Telu'), - 'tg': ('Tajik', 'Cyrl'), - 'th': ('Thai', 'Thai'), - 'tk': ('Turkmen', 'Latn'), - 'tl': ('Filipino', 'Latn'), - 'tr': ('Turkish', 'Latn'), - 'tt': ('Tatar', 'Cyrl'), - 'uk': ('Ukrainian', 'Cyrl'), - 'umb': ('Umbundu', 'Latn'), - 'ur': ('Urdu', 'Arab'), - 'uz': ('Uzbek', 'Latn'), - 'vi': ('Vietnamese', 'Latn'), - 'wo': ('Wolof', 'Latn'), - 'xh': ('Xhosa', 'Latn'), - 'yi': ('Yiddish', 'Hebr'), - 'yo': ('Yoruba', 'Latn'), - 'yue': ('Cantonese', 'Hant'), - 'zh': ('Mandarin Chinese', 'Hans'), - 'zh-cn': ('Chinese (China)', 'Hans'), - 'zu': ('Zulu', 'Latn'), -} - - -def name(code: str) -> str: - """English name, falling back to the code itself for anything unknown.""" - row = LANGUAGES.get(code) - return row[0] if row else code - - -def script(code: str) -> str | None: - row = LANGUAGES.get(code) - return (row[1] or None) if row else None diff --git a/scripts/wer/perf_lookup.py b/scripts/wer/perf_lookup.py deleted file mode 100644 index 9f0267d7..00000000 --- a/scripts/wer/perf_lookup.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python3 -"""perf_lookup.py — realtime-speed numbers per model, per rig. - -Source of truth is the `perf:` block in scripts/hf_cards/.yaml, which -is already structured (rig -> backend -> xRT) and covers nearly every model. -docs/models/*.md carries the same benches as prose tables and is used only -as a fallback for models whose card lacks the block. - -An earlier version of this script parsed the markdown exclusively and got -three things wrong that the card block makes impossible: the 4750U heading -is spelled two different ways across docs, gigaam benches on a `ru` sample -rather than `jfk`, and several models' docs are named differently from the -model. Prefer the structured field. -""" -from __future__ import annotations - -import json -import pathlib -import re -import sys - -REPO = pathlib.Path(__file__).resolve().parents[2] -CARDS = REPO / "scripts" / "hf_cards" -DOCS = REPO / "docs" / "models" - -RIGS = {"m4_max": "m4-max", "r4750u": "ryzen-4750u"} -# Accelerated backend first, CPU as the fallback figure. -BACKENDS = {"m4_max": ["metal", "cpu"], "r4750u": ["vulkan", "cpu"]} - - -def norm(s: str) -> str: - return re.sub(r"[^a-z0-9]", "", s.lower()) - - -def card_perf(path: pathlib.Path) -> dict: - text = path.read_text() - m = re.search(r"^perf:\n((?:[ \t]+.*\n|\n)*?)(?=^\S)", text, re.M) - if not m: - return {} - out: dict[str, dict] = {} - rig = None - for line in m.group(1).splitlines(): - if not line.strip(): - continue - h = re.match(r"^ ([\w.-]+):\s*$", line) - if h: - rig = h.group(1) - out[rig] = {} - continue - b = re.match(r"^ (\w+):\s*([\d.]+)", line) - if b and rig: - out[rig][b.group(1)] = float(b.group(2)) - return out - - -def build(models: list[str]) -> dict[str, dict]: - by_norm = {norm(p.stem): p for p in CARDS.glob("*.yaml")} - out: dict[str, dict] = {} - for m in models: - p = by_norm.get(norm(m)) - if not p: - continue - blocks = card_perf(p) - entry: dict = {} - for key, rig in RIGS.items(): - rb = blocks.get(rig, {}) - for backend in BACKENDS[key]: - if backend in rb: - entry[key] = rb[backend] - entry[f"{key}_backend"] = backend - break - if entry: - entry["measured"] = True - entry["source"] = f"hf_cards/{p.name}" - out[m] = entry - return out - - -if __name__ == "__main__": - models = json.loads((REPO / "reports/wer/fleurs_matrix.json").read_text())["models"] - perf = build(models) - print(f"{len(perf)}/{len(models)} models have perf in their hf_card\n") - print(f"{'model':34s} {'M4 Max':>9} {'4750U':>9}") - for m in models: - e = perf.get(m) - if not e: - continue - f = lambda v: f"{v:.1f}x" if v is not None else "-" - print(f"{m:34s} {f(e.get('m4_max')):>9} {f(e.get('r4750u')):>9}" - f" {e.get('m4_max_backend','')}/{e.get('r4750u_backend','')}") - missing = [m for m in models if m not in perf] - print(f"\nno card perf: {', '.join(missing) if missing else 'none'}") diff --git a/scripts/wer/quant_delta.py b/scripts/wer/quant_delta.py deleted file mode 100644 index 4adae4e7..00000000 --- a/scripts/wer/quant_delta.py +++ /dev/null @@ -1,189 +0,0 @@ -#!/usr/bin/env python3 -"""quant_delta.py — paired Q8_0-vs-lower-quant degradation on FLEURS. - -Why paired: a quant A/B runs both arms over the SAME utterances, so the two -error rates are highly correlated. Comparing their independent confidence -intervals throws that correlation away and is badly underpowered; the -repo's single-run noise floor (~0.3pp) then swamps deltas that are in fact -perfectly resolvable. Resampling the shared utterance set once and -recomputing both arms on that same resample keeps the pairing and measures -the delta directly. - -Usage: - uv run scripts/wer/quant_delta.py --quants Q5_K_M,Q4_K_M -""" -from __future__ import annotations - -import argparse -import glob -import json -import pathlib -import random -import statistics -import sys -from collections import defaultdict - -REPO = pathlib.Path(__file__).resolve().parents[2] -WER = REPO / "reports" / "wer" - -# Architecture family, for the "does quant sensitivity track architecture" -# question. Conformer CTC/RNNT keep their conv stacks in F32/F16 (no -# quantized im2col in ggml), so they are expected to be the robust end. -FAMILY = { - "whisper-large-v3": "enc-dec (tied embed)", - "canary-1b-v2": "enc-dec", - "parakeet-tdt-0.6b-v3": "RNNT conformer", - "Qwen3-ASR-1.7B": "LLM decoder (tied embed)", - "Fun-ASR-MLT-Nano-2512": "enc-dec (small)", - "Voxtral-Mini-4B-Realtime-2602": "LLM decoder", -} - - -def per_utt(model: str, quant: str, lang: str) -> tuple[dict, str] | None: - """{utt_id: (errors, ref_len)} plus the metric actually used.""" - hits = glob.glob(str(WER / f"{model}-{quant}.fleurs-{lang}.b8.score.json")) - if not hits: - return None - d = json.loads(pathlib.Path(hits[0]).read_text()) - metric = "cer" if d.get("cer") is not None and d.get("wer") is None else \ - ("cer" if lang in {"zh", "yue", "ja", "ko", "th"} else "wer") - out = {} - empty = 0 - for u in d.get("per_utterance", []): - rate = u.get(metric) - if rate is None: - return None - ref = u["ref"] - n = len(ref.split()) if metric == "wer" else len(ref.replace(" ", "")) - if not u.get("hyp", "").strip(): - empty += 1 - if n: - out[u["id"]] = (rate * n, n) - return (out, metric, empty) if out else None - - -def agg(d: dict, ids: list[str]) -> float: - e = sum(d[i][0] for i in ids) - n = sum(d[i][1] for i in ids) - return 100.0 * e / n if n else float("nan") - - -def paired_delta(base: dict, cand: dict, n_boot: int = 2000, seed: int = 42): - """(base_err, cand_err, rel_delta_pct, lo, hi, n_utts) at 95%. - - rel_delta is (cand-base)/base in percent. CI is on that ratio, from a - paired resample of the shared utterances.""" - ids = sorted(set(base) & set(cand)) - if len(ids) < 30: - return None - b0, c0 = agg(base, ids), agg(cand, ids) - rng = random.Random(seed) - rels = [] - for _ in range(n_boot): - s = [ids[rng.randrange(len(ids))] for _ in ids] - b, c = agg(base, s), agg(cand, s) - if b > 0: - rels.append(100.0 * (c - b) / b) - rels.sort() - lo = rels[int(0.025 * len(rels))] - hi = rels[int(0.975 * len(rels))] - return b0, c0, 100.0 * (c0 - b0) / b0, lo, hi, len(ids) - - -def main() -> int: - ap = argparse.ArgumentParser() - ap.add_argument("--quants", default="Q5_K_M,Q4_K_M") - ap.add_argument("--base", default="Q8_0") - ap.add_argument("--pairs-file", default="") - args = ap.parse_args() - quants = [q.strip() for q in args.quants.split(",") if q.strip()] - - # Discover cells from what actually scored, so a partially-complete - # sweep still reports. - cells = defaultdict(set) - for p in glob.glob(str(WER / "*.fleurs-*.b8.score.json")): - name = pathlib.Path(p).name - for q in quants: - if f"-{q}.fleurs-" in name: - model = name.split(f"-{q}.fleurs-")[0] - lang = name.split(".fleurs-")[1].split(".")[0] - cells[model].add(lang) - - if not cells: - print("no scored cells found for quants " + ",".join(quants)) - return 1 - - rows = [] - print(f"{'model':30} {'lang':5} {'met':4} {'quant':8} " - f"{'Q8_0':>7} {'cand':>7} {'rel%':>8} {'95% CI':>18} {'n':>5}") - print("-" * 104) - for model in sorted(cells): - for lang in sorted(cells[model]): - base = per_utt(model, args.base, lang) - if not base: - print(f"{model:30} {lang:5} -- no {args.base} baseline") - continue - for q in quants: - cand = per_utt(model, q, lang) - if not cand: - continue - if cand[1] != base[1]: - print(f"{model:30} {lang:5} !! metric mismatch") - continue - r = paired_delta(base[0], cand[0]) - if not r: - continue - b0, c0, rel, lo, hi, n = r - sig = "" if (lo <= 0 <= hi) else (" *" if rel > 0 else " +") - # An empty hypothesis scores 100% and is a generation failure, - # not transcription damage. If the empty count moves between - # quants the WER delta is partly measuring that, so surface it - # rather than let it sit inside the aggregate unlabelled. - de = cand[2] - base[2] - if base[2] or cand[2]: - sig += f" [empty {base[2]}->{cand[2]}]" - print(f"{model:30} {lang:5} {base[1]:4} {q:8} " - f"{b0:7.2f} {c0:7.2f} {rel:+8.2f} " - f"[{lo:+7.2f},{hi:+7.2f}] {n:5}{sig}") - rows.append(dict(model=model, lang=lang, metric=base[1], - quant=q, base=b0, cand=c0, rel=rel, - lo=lo, hi=hi, n=n, - family=FAMILY.get(model, "?"), - is_en=(lang == "en"), - empty_base=base[2], empty_cand=cand[2], - empty_delta=de)) - print("\n * = degradation excludes zero (real) + = improvement excludes zero") - - out = WER / "quant_delta.json" - out.write_text(json.dumps(rows, indent=1)) - - # Aggregates: the two questions that drove the sweep. - for q in quants: - sub = [r for r in rows if r["quant"] == q] - if not sub: - continue - en = [r["rel"] for r in sub if r["is_en"]] - non = [r["rel"] for r in sub if not r["is_en"]] - print(f"\n=== {q} ===") - if en: - print(f" English n={len(en):3} mean rel {statistics.mean(en):+6.2f}% " - f"max {max(en):+6.2f}%") - if non: - print(f" non-English n={len(non):3} mean rel {statistics.mean(non):+6.2f}% " - f"max {max(non):+6.2f}%") - sigbad = [r for r in sub if r["lo"] > 0] - print(f" cells with a REAL (CI-excluding-zero) degradation: " - f"{len(sigbad)}/{len(sub)}") - byf = defaultdict(list) - for r in sub: - byf[r["family"]].append(r["rel"]) - print(" by architecture family:") - for f, v in sorted(byf.items(), key=lambda x: -statistics.mean(x[1])): - print(f" {f:28} n={len(v):3} mean {statistics.mean(v):+6.2f}% " - f"max {max(v):+6.2f}%") - print(f"\nwrote {out}") - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/scripts/wer/recommend.py b/scripts/wer/recommend.py deleted file mode 100644 index 56270f68..00000000 --- a/scripts/wer/recommend.py +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env python3 -"""recommend.py — rank models for a given set of languages. - -Answers the question the FLEURS matrix exists to answer: someone speaks -these N languages, which single model should they run? - -Ranking is the geometric mean of per-language error rates, which is the -right average here because error rates are ratios: a model that halves the -error on one language and doubles it on another should come out neutral, -which an arithmetic mean does not give you. - -Coverage is enforced, not interpolated. The matrix is ragged (whisper -covers 40 languages, canary-180m covers 4), so a model is only ranked if -it has a measured cell for EVERY requested language. Averaging a model -over the subset it happens to support would systematically flatter -narrow models. - -Cells come from reports/wer/wer.db, the same table the markdown report -renders from, so a recommendation and the published table cannot disagree -about what a model scored. Run build_db.py first. -""" -from __future__ import annotations - -import argparse -import math -import pathlib -import sqlite3 -import sys - -REPO = pathlib.Path(__file__).resolve().parents[2] -DB = REPO / "reports" / "wer" / "wer.db" - - -def main() -> int: - ap = argparse.ArgumentParser() - ap.add_argument("--languages", required=True, - help="comma-separated, e.g. en,de,ja") - ap.add_argument("--db", default=str(DB)) - ap.add_argument("--source", default="fleurs", - help="dataset family to rank within (default: fleurs)") - ap.add_argument("--quant", default="Q8_0") - ap.add_argument("--top", type=int, default=10) - args = ap.parse_args() - - db = pathlib.Path(args.db) - if not db.exists(): - print(f"error: {db} not found; run scripts/wer/build_db.py first", - file=sys.stderr) - return 2 - con = sqlite3.connect(db) - cells, models, have_langs = {}, set(), set() - for model, lang, pct_, metric in con.execute( - "SELECT r.model, d.lang, r.err_pct, r.metric FROM results r " - "JOIN datasets d ON d.dataset = r.dataset " - "WHERE d.source = ? AND r.quant = ?", (args.source, args.quant) - ): - cells[f"{model}|{lang}"] = {"pct": pct_, "metric": metric} - models.add(model) - have_langs.add(lang) - - want = [l.strip() for l in args.languages.split(",") if l.strip()] - missing = [l for l in want if l not in have_langs] - if missing: - print(f"not measured on {args.source}/{args.quant}: {missing}", - file=sys.stderr) - print(f"available: {' '.join(sorted(have_langs))}", file=sys.stderr) - return 2 - - ranked, skipped = [], [] - for m in sorted(models): - got = [(l, cells.get(f"{m}|{l}")) for l in want] - if any(v is None for _, v in got): - have = [l for l, v in got if v is not None] - skipped.append((m, len(have))) - continue - rates = [v["pct"] for _, v in got] - # Geometric mean; a 0.0 would annihilate it, so floor at 0.01%. - gm = math.exp(sum(math.log(max(r, 0.01)) for r in rates) / len(rates)) - ranked.append((gm, m, dict(got))) - ranked.sort() - - metrics = {cells[f"{ranked[0][1]}|{l}"]["metric"] for l in want} if ranked else set() - print(f"languages: {' '.join(want)}") - if len(metrics) > 1: - print(f"NOTE: mixes {'/'.join(sorted(metrics))} across languages. Both are " - f"error rates so the ranking holds, but the geometric mean is " - f"not in a single unit.") - print(f"{len(ranked)} models cover all {len(want)}; " - f"{len(skipped)} lack at least one\n") - w = max((len(m) for _, m, _ in ranked[:args.top]), default=10) - print(f"{'model':{w}s} {'geomean':>8} " + "".join(f"{l:>8}" for l in want)) - for gm, m, got in ranked[:args.top]: - print(f"{m:{w}s} {gm:>8.2f} " + - "".join(f"{got[l]['pct']:>8.2f}" for l in want)) - if skipped: - print(f"\nexcluded for coverage: " + - ", ".join(f"{m} ({n}/{len(want)})" for m, n in sorted(skipped))) - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/scripts/wer/remote/fleurs_full_matrix.py b/scripts/wer/remote/fleurs_full_matrix.py deleted file mode 100644 index d438cb91..00000000 --- a/scripts/wer/remote/fleurs_full_matrix.py +++ /dev/null @@ -1,534 +0,0 @@ -#!/usr/bin/env python3 -"""fleurs_full_matrix.py — every supported model over every language it claims. - -`fleurs_matrix.py` answers "which model should a user pick for the languages -they speak", so its columns are a fixed union defined by the specialist -models and every model is measured over the same columns. This script answers -a different question: "what is each model's WER on each language it actually -advertises". The plan is therefore fully ragged — whisper contributes 82 -columns that no other model can fill — and it covers the shipped quants -rather than one. - -Two quants ship in the plan: - Q8_0 every ASR model, always. It is the default shipped quant. - Q5_K_M only where the Q8_0 download is over 1 GB, where a smaller quant - is worth shipping, plus explicit borderline additions. - -What this does that `fleurs_matrix.py` does not: - - canonicalizes alias language codes, so `no`/`nb`, `tl`/`fil` and - `zh`/`zh-cn` resolve to ONE column and ONE ingest rather than two; - - skips (model, quant, language) cells already scored at the matrix batch - size, reading reports/wer/ directly rather than a cache; - - carries a per-model GPU, because the 24B does not fit in 24 GB. - -Usage: - uv run scripts/wer/remote/fleurs_full_matrix.py --plan - uv run scripts/wer/remote/fleurs_full_matrix.py --preflight # ingest only - uv run scripts/wer/remote/fleurs_full_matrix.py --run --cap 120 -""" -from __future__ import annotations - -import argparse -import json -import os -import pathlib -import re -import subprocess -import sys -import threading -import time -import urllib.request -from collections import defaultdict -from concurrent.futures import ThreadPoolExecutor - -sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) - -from model_specs import resolve_model # noqa: E402 -from fleurs_matrix import ( # noqa: E402 - TAG_OVERRIDE_MODELS, - card_langs, - fleurs_langs, - locale_for, - spend_today, - MAX_BLIND_DISPATCHES, -) - -REPO = pathlib.Path(__file__).resolve().parents[3] -CARDS = REPO / "scripts" / "hf_cards" -REPORTS = REPO / "reports" / "wer" - -# The batch size the matrix is measured at. Cells run at another batch size -# are NOT counted as generated: docs/tools/wer.md measures batching as WER-neutral -# to within ~0.08pp, but a matrix that silently mixes recipes cannot be -# defended later, and the affected cells are all sub-cent models. -MATRIX_BATCH = 8 - -QUANT_NAMES = ("BF16", "F16", "F32", "Q8_0", "Q6_K", "Q5_K_M", "Q4_K_M") - -# Q5_K_M is swept where the Q8_0 download exceeds this, in bytes. -Q5_MIN_Q8_BYTES = 1_000_000_000 - -# Models under the threshold that still get a Q5_K_M sweep. Both sit just -# under 1 GB at Q8_0 and are cheap to add: turbo is a flagship users actually -# pick, and MOSS is the only diarizing model in the matrix. -Q5_EXTRA_MODELS = ("whisper-large-v3-turbo", "moss-transcribe-diarize") - -# GPU placement. Sized on the quant file, but the file is NOT the working set: -# an L4 advertises 24 GB and reports 22563 MiB usable, and the runtime needs -# room for the KV cache, activations and any repacked weights on top of the -# tensors themselves. Voxtral-Small-24B Q5_K_M (17.14 GB on disk) OOMs on an L4 -# asking for a further 8800 MiB for its packed gate/up buffer, so the headroom -# needed is at least ~1.5x the file. Anything over 13 GB goes to the 48 GB part. -BIG_GPU = "L40S" -BIG_GPU_MIN_BYTES = 13_000_000_000 - -# hf_cards that are not transcription models, so have no WER row. -NON_ASR_PIPELINES = {"voice-activity-detection"} - -SIZE_CACHE = REPO / "reports" / "wer" / "_gguf_sizes.json" - - -# -------- card + Hub metadata --------------------------------------------- - -def all_cards() -> list[str]: - return sorted(p.stem for p in CARDS.glob("*.yaml")) - - -def card_field(model: str, key: str) -> str | None: - txt = (CARDS / f"{model}.yaml").read_text() - m = re.search(rf"^{re.escape(key)}:\s*(\S+)", txt, re.M) - return m.group(1) if m else None - - -def hf_token() -> str | None: - tok = os.environ.get("HF_TOKEN") - if tok: - return tok - p = pathlib.Path("~/.cache/huggingface/token").expanduser() - return p.read_text().strip() if p.exists() else None - - -def gguf_sizes(models: list[str], refresh: bool = False) -> dict[str, dict[str, int]]: - """{model: {gguf filename: size in bytes}} from the Hub. - - The quant rule keys off the real download size, not the hf_card's `size:` - string. The card is hand-maintained prose ("1.0 GB" for a 1.05 GB file), - and rounding decides membership for models sitting on the threshold. - Cached on disk because this is a plan-time input, not a run-time one.""" - cache: dict[str, dict[str, int]] = {} - if SIZE_CACHE.exists() and not refresh: - cache = json.loads(SIZE_CACHE.read_text()) - todo = [m for m in models if m not in cache] - if todo: - tok = hf_token() - - def one(model: str) -> tuple[str, dict[str, int]]: - repo = card_field(model, "target_repo") - if not repo: - return model, {} - req = urllib.request.Request( - f"https://huggingface.co/api/models/{repo}?blobs=true") - if tok: - req.add_header("Authorization", f"Bearer {tok}") - try: - d = json.load(urllib.request.urlopen(req, timeout=60)) - except Exception as e: - print(f"[WARN] {model}: Hub query failed ({e})", file=sys.stderr) - return model, {} - return model, {s["rfilename"]: s.get("size") or 0 - for s in d.get("siblings", []) - if s["rfilename"].endswith(".gguf")} - - with ThreadPoolExecutor(16) as ex: - for model, files in ex.map(one, todo): - cache[model] = files - SIZE_CACHE.parent.mkdir(parents=True, exist_ok=True) - SIZE_CACHE.write_text(json.dumps(cache, indent=1, sort_keys=True)) - return cache - - -def quant_size(files: dict[str, int], quant: str) -> int: - for fn, sz in files.items(): - stem = fn[:-5] if fn.endswith(".gguf") else fn - if stem.endswith(f"-{quant}"): - return sz or 0 - return 0 - - -# -------- language canonicalization --------------------------------------- - -def canonical_codes(FL: dict[str, str], measured: set[str]) -> dict[str, str]: - """FLEURS config -> the ONE bare code used to ingest and name it. - - FLEURS_LANGS is many-to-one: `no` and `nb` both mean nb_no, `tl` and `fil` - both mean fil_ph, `zh` and `zh-cn` both mean cmn_hans_cn. The dataset id - (and therefore the manifest path, the Volume entry and every report - filename) is derived from the bare code, so leaving both in the plan - ingests the same audio twice and splits one language across two columns. - Prefer a code already on disk so this run's reports file alongside the - existing ones.""" - by_cfg: dict[str, list[str]] = defaultdict(list) - for code, cfg in FL.items(): - by_cfg[cfg].append(code) - out = {} - for cfg, codes in by_cfg.items(): - prior = sorted(c for c in codes if c in measured) - out[cfg] = prior[0] if prior else sorted(codes, key=lambda c: (len(c), c))[0] - return out - - -def volume_manifest_langs() -> set[str] | None: - """FLEURS languages whose manifest exists on the Modal /data Volume. - - This, not the local reports directory, is what "already ingested" means: - `prefetch` writes manifests to the Volume the GPU cells read, and a - language can be fully ingested there while nothing local mentions it. - Returns None if the Volume cannot be listed, so the caller can tell - "nothing ingested" apart from "could not check".""" - try: - out = subprocess.run(["modal", "volume", "ls", "transcribe-data", "/wer"], - capture_output=True, text=True, timeout=120) - except (OSError, subprocess.SubprocessError): - return None - if out.returncode != 0: - return None - return set(re.findall(r"fleurs-([a-z-]+)\.manifest\.jsonl", out.stdout)) - - -# -------- what is already done -------------------------------------------- - -def generated_cells(FL: dict[str, str], canon: dict[str, str]) -> set[tuple[str, str, str]]: - """{(gguf base, quant, canonical language)} already generated at MATRIX_BATCH. - - Keyed on the hyp .jsonl, NOT the .score.json. Generation is the expensive, - remote, non-repeatable half; scoring is local, free and re-runnable, and - normally lags a sweep by however long it takes to get round to it. Keying - on the score would make every generated-but-unscored cell look unrun and - re-dispatch GPU work that is already sitting on disk. - - Parsed from reports/wer/ rather than from a run cache: the cache keys on - dispatch parameters and does not survive a recipe or filename change, - while the hyp IS the artifact the matrix is built from. - - The language field has to be matched against the known FLEURS codes rather - than split on a delimiter. Older reports carry a `-timestamps_none` suffix - directly after the language, so a greedy split reads the language of - `moonshine-base-ar-Q8_0.fleurs-ar-timestamps_none.score.json` as - `ar-timestamps_none` and the cell looks unrun.""" - codes = sorted(FL, key=len, reverse=True) - done: set[tuple[str, str, str]] = set() - for p in REPORTS.glob("*.fleurs-*.jsonl"): - m = re.match(r"(.+?)\.fleurs-(.+?)\.jsonl$", p.name) - if not m: - continue - stem, tail = m.group(1), m.group(2) - if stem.endswith("-REF"): # framework reference, not our engine - continue - lang = next((c for c in codes - if tail == c or tail.startswith(c + ".") or tail.startswith(c + "-")), - None) - if lang is None: - continue - rest = tail[len(lang):].lstrip(".-") - # Derived runs, not full-split matrix cells: utterance subsets - # (ru-512), filtered rescorings, and streaming-mode variants. - if re.match(r"^\d", rest) or "filtered" in rest or "stream" in rest: - continue - if rest != f"b{MATRIX_BATCH}": - continue - quant = next((q for q in QUANT_NAMES if stem.endswith("-" + q)), None) - if not quant: - continue - done.add((stem[:-(len(quant) + 1)], quant, canon.get(FL[lang], lang))) - return done - - -# -------- plan ------------------------------------------------------------- - -def build_plan(only: set[str] | None, skip_done: bool, - refresh_sizes: bool) -> tuple[list[dict], dict]: - FL = fleurs_langs() - models = [m for m in all_cards() - if (CARDS / f"{m}.yaml").exists() - and card_field(m, "pipeline_tag") not in NON_ASR_PIPELINES] - if only: - unknown = only - set(models) - if unknown: - sys.exit(f"--only names unknown or non-ASR models: {sorted(unknown)}") - models = [m for m in models if m in only] - - sizes = gguf_sizes(models, refresh=refresh_sizes) - measured = {p.name.split(".fleurs-")[1].split(".")[0] - for p in REPORTS.glob("*.fleurs-*.jsonl")} - canon = canonical_codes(FL, {c for c in measured if c in FL}) - done = generated_cells(FL, canon) if skip_done else set() - - plan: list[dict] = [] - stats = {"models": len(models), "columns": set(), "skipped": 0} - for model in models: - # Which files this model means is the CARD's business, not the repo - # listing's: `sweep` resolves through resolve_model, and a repo can - # ship more than one variant of the same quant. multitalker publishes - # both a plain and a bundle/ tree, so picking off the listing can size - # and name the wrong artifact from the one that actually runs. - try: - _repo, pinned = resolve_model(REPO, model) - except SystemExit as e: - print(f"[WARN] {model}: {e}, skipping", file=sys.stderr) - continue - listing = sizes.get(model, {}) - files = {fn: listing.get(fn, next( - (s for f, s in listing.items() if f.rsplit("/", 1)[-1] == fn), 0)) - for fn in (pinned or [])} - base = None - for fn in files: - stem = fn[:-5] - q = next((x for x in QUANT_NAMES if stem.endswith("-" + x)), None) - if q: - base = stem.rsplit("/", 1)[-1][:-(len(q) + 1)] - break - if base is None: - print(f"[WARN] {model}: no quantized GGUF pinned, skipping", - file=sys.stderr) - continue - - q8 = quant_size(files, "Q8_0") - quants = ["Q8_0"] - if quant_size(files, "Q5_K_M") and ( - q8 > Q5_MIN_Q8_BYTES or model in Q5_EXTRA_MODELS): - quants.append("Q5_K_M") - - # One column per FLEURS config the card claims, keeping the model's - # own tag: the CLI validates --language against the GGUF's - # general.languages, which is not always the canonical code. - cols: dict[str, str] = {} - for code in card_langs(model): - cfg = FL.get(code) - if cfg: - cols.setdefault(canon[cfg], code) - - for quant in quants: - gpu = BIG_GPU if quant_size(files, quant) > BIG_GPU_MIN_BYTES else "L4" - for lang, tag in sorted(cols.items()): - if model in TAG_OVERRIDE_MODELS: - tag = locale_for(tag) - if tag is None: - continue - stats["columns"].add(lang) - if (base, quant, lang) in done: - stats["skipped"] += 1 - continue - plan.append({"model": model, "quant": quant, "lang": lang, - "tag": tag, "gpu": gpu}) - stats["columns"] = sorted(stats["columns"]) - stats["measured_langs"] = sorted(c for c in measured if c in FL) - return plan, stats - - -def group_invocations(plan: list[dict]) -> list[dict]: - """One `sweep` call per (language, tag, quant, gpu). - - `sweep` takes a single --dataset, --language, --quants and --gpu, so those - four fields are what a container fan-out can share; the models that agree - on all four ride together.""" - groups: dict[tuple[str, str, str, str], list[str]] = defaultdict(list) - for r in plan: - groups[(r["lang"], r["tag"], r["quant"], r["gpu"])].append(r["model"]) - return [{"lang": l, "tag": t, "quant": q, "gpu": g, "models": sorted(ms)} - for (l, t, q, g), ms in sorted(groups.items())] - - -# -------- dispatch --------------------------------------------------------- - -def run_prefetch(langs: list[str], jobs: int) -> int: - cmd = ["modal", "run", "scripts/wer/remote/modal_sweep.py::prefetch", - "--datasets", ",".join(f"fleurs:{l}" for l in langs), - "--jobs", str(jobs)] - print("$ " + " ".join(cmd)) - return subprocess.run(cmd, cwd=REPO).returncode - - -def run_invocation(inv: dict, batch: int, logdir: pathlib.Path) -> int: - log = logdir / f"{inv['lang']}-{inv['tag']}.{inv['quant']}.{inv['gpu']}.log" - cmd = [ - "modal", "run", "scripts/wer/remote/modal_sweep.py::sweep", - "--models", ",".join(inv["models"]), - "--dataset", f"fleurs:{inv['lang']}", - "--quants", inv["quant"], - "--batch-sizes", str(batch), - "--gpu", inv["gpu"], - "--language", inv["tag"], - ] - with open(log, "w") as f: - f.write("$ " + " ".join(cmd) + "\n\n") - f.flush() - return subprocess.run(cmd, cwd=REPO, stdout=f, - stderr=subprocess.STDOUT).returncode - - -def main() -> int: - ap = argparse.ArgumentParser() - ap.add_argument("--plan", action="store_true", help="print the plan, run nothing") - ap.add_argument("--preflight", action="store_true", - help="ingest every manifest the plan needs and exit; CPU only") - ap.add_argument("--run", action="store_true") - ap.add_argument("--only", default="", help="comma-separated hf_card slugs") - ap.add_argument("--skip", default="", - help="comma-separated hf_card slugs to EXCLUDE. Cells " - "already scored for a skipped model are left on disk; " - "this stops further spend on it, it does not retract " - "measurements already paid for.") - ap.add_argument("--quants", default="", help="restrict to these quants") - ap.add_argument("--langs", default="", help="restrict to these canonical languages") - ap.add_argument("--cap", type=float, default=120.0, - help="stop DISPATCHING once THIS RUN has added this many " - "dollars. Incremental, not an absolute daily total: " - "Modal bills by UTC day, so a long sweep started in " - "the afternoon crosses midnight UTC and an absolute " - "cap silently resets to a fresh budget mid-run.") - ap.add_argument("--batch", type=int, default=MATRIX_BATCH) - ap.add_argument("--jobs", type=int, default=4) - ap.add_argument("--no-skip-done", action="store_true", - help="re-run cells whose hyp already exists at the matrix " - "batch size (use when an engine change invalidates " - "them, e.g. the voxtral offline-delay default)") - ap.add_argument("--refresh-sizes", action="store_true", - help="re-query GGUF sizes from the Hub instead of the cache") - ap.add_argument("--logdir", default=None) - args = ap.parse_args() - - only = {m.strip() for m in args.only.split(",") if m.strip()} or None - plan, stats = build_plan(only, not args.no_skip_done, args.refresh_sizes) - if args.skip: - drop = {m.strip() for m in args.skip.split(",") if m.strip()} - unknown = drop - {r["model"] for r in plan} - plan = [r for r in plan if r["model"] not in drop] - if unknown: - print(f"note: --skip named {sorted(unknown)}, which the plan does " - f"not contain (already complete, or not an ASR card)") - if args.quants: - keep = {q.strip() for q in args.quants.split(",") if q.strip()} - plan = [r for r in plan if r["quant"] in keep] - if args.langs: - keep = {l.strip() for l in args.langs.split(",") if l.strip()} - plan = [r for r in plan if r["lang"] in keep] - - invs = group_invocations(plan) - need = sorted({r["lang"] for r in plan}) - on_volume = volume_manifest_langs() - # `measured_langs` says which languages this laptop has reports for, which - # is the right tiebreak for naming but says nothing about what the cells - # can read. Fall back to it only when the Volume cannot be listed. - ingested = on_volume if on_volume is not None else set(stats["measured_langs"]) - new = [l for l in need if l not in ingested] - - print(f"models : {stats['models']}") - print(f"columns : {len(stats['columns'])} FLEURS languages") - print(f"cells to run : {len(plan)} (skipped {stats['skipped']} already " - f"generated at b{MATRIX_BATCH})") - print(f"invocations : {len(invs)}") - print(f"quants : {sorted({r['quant'] for r in plan})}") - print(f"gpus : {sorted({r['gpu'] for r in plan})}") - src = "Modal volume" if on_volume is not None else "local reports (volume unreachable)" - print(f"manifests : {len(need)} needed, {len(new)} not yet ingested " - f"[per {src}]") - if new: - print(f" to ingest : {' '.join(new)}") - - if args.plan: - by_model: dict[tuple[str, str], list[str]] = defaultdict(list) - for r in plan: - by_model[(r["model"], r["quant"])].append(r["lang"]) - print() - for (m, q), ls in sorted(by_model.items()): - print(f" {m:<40} {q:<7} {len(ls):>3} langs") - return 0 - - if args.preflight: - if not need: - print("\nnothing to ingest") - return 0 - print(f"\ningesting {len(need)} manifest(s) (CPU only, no GPU cost)") - return run_prefetch(need, args.jobs) - - if not args.run: - print("\n(nothing dispatched; pass --plan, --preflight or --run)") - return 0 - - if new: - sys.exit(f"refusing to dispatch: {len(new)} manifest(s) have never been " - f"ingested. Run --preflight first so a Hub-side failure costs " - f"CPU seconds rather than a dispatched GPU sweep.") - - logdir = pathlib.Path(args.logdir) if args.logdir else \ - REPORTS / "_fleurs_full_matrix_logs" - logdir.mkdir(parents=True, exist_ok=True) - start_spend = spend_today() - if start_spend < 0: - sys.exit("cannot read Modal billing; refusing to dispatch without a " - "spend baseline to measure the cap against") - print(f"\nspend at start: ${start_spend:.2f} (UTC day) " - f"budget for this run: ${args.cap:.2f}") - print(f"logs: {logdir}\n") - - state = {"done": 0, "held": [], "stop": False, "blind": 0, - "baseline": start_spend} - lock = threading.Lock() - - def dispatch(inv: dict) -> None: - # Checked at dispatch time so in-flight invocations always finish. - with lock: - if state["stop"]: - state["held"].append(inv) - return - spend = spend_today() - # Measured against this run's own baseline. A negative delta means - # the UTC day rolled over mid-sweep, so re-baseline rather than - # treating the reset as free budget. - if spend >= 0 and spend < start_spend: - print(f"[note] UTC billing day rolled over " - f"(${start_spend:.2f} -> ${spend:.2f}); re-baselining") - state["baseline"] = spend - used = spend - state["baseline"] if spend >= 0 else -1.0 - if spend < 0: - state["blind"] += 1 - print(f"[WARN] billing query failed " - f"({state['blind']}/{MAX_BLIND_DISPATCHES})") - if state["blind"] >= MAX_BLIND_DISPATCHES: - state["stop"] = True - state["held"].append(inv) - print("[HOLD] no billing reading; refusing to continue blind.") - return - else: - state["blind"] = 0 - if used >= args.cap: - state["stop"] = True - state["held"].append(inv) - print(f"[HOLD] this run has added ${used:.2f} >= " - f"budget ${args.cap:.2f}") - return - t0 = time.time() - rc = run_invocation(inv, args.batch, logdir) - with lock: - state["done"] += 1 - print(f"[{state['done']}/{len(invs)}] fleurs:{inv['lang']} " - f"tag={inv['tag']} {inv['quant']} {inv['gpu']} " - f"n={len(inv['models'])} rc={rc} {time.time() - t0:.0f}s", flush=True) - - # First invocation alone: it warms the sm_XX CUDA build, and concurrent - # no-op builds would race on one build dir. - dispatch(invs[0]) - if len(invs) > 1 and not state["stop"]: - with ThreadPoolExecutor(max_workers=max(1, args.jobs)) as ex: - list(ex.map(dispatch, invs[1:])) - - end_spend = spend_today() - print(f"\ndispatched {state['done']}/{len(invs)}; this run added " - f"${end_spend - state['baseline']:.2f} (UTC day now ${end_spend:.2f})") - if state["held"]: - print("held:", " ".join(f"{h['lang']}/{h['quant']}" for h in state["held"])) - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/scripts/wer/remote/fleurs_matrix.py b/scripts/wer/remote/fleurs_matrix.py deleted file mode 100644 index 4e7ac8fb..00000000 --- a/scripts/wer/remote/fleurs_matrix.py +++ /dev/null @@ -1,347 +0,0 @@ -#!/usr/bin/env python3 -"""fleurs_matrix.py — drive the cross-model FLEURS WER matrix on Modal. - -Builds the (model, language) run plan from the hf_cards' own `languages:` -lists, groups it into `modal_sweep.py::sweep` invocations, and dispatches -them under a spend cap read from Modal's billing API. - -Why a driver instead of one sweep call: `sweep` applies a single -`--language` to every cell in the invocation and takes one `--dataset`, so -the matrix needs one invocation per (language, language-tag) pair. Models -mostly agree on bare BCP-47 codes, but a few disagree on aliases (whisper -says `tl`/`no` where fun-asr says `fil` and nemotron says `nb`), which is -why the plan carries a per-model tag rather than assuming the ingest code. - -Usage: - uv run scripts/wer/remote/fleurs_matrix.py --plan # print, run nothing - uv run scripts/wer/remote/fleurs_matrix.py --run --cap 60 -""" -from __future__ import annotations - -import argparse -import ast -import json -import pathlib -import re -import subprocess -import sys -import threading -import time -from collections import defaultdict -from concurrent.futures import ThreadPoolExecutor - -REPO = pathlib.Path(__file__).resolve().parents[3] - -CORE_MODELS = [ - "parakeet-unified-en-0.6b", "nemotron-3.5-asr-streaming-0.6b", - "parakeet-tdt-0.6b-v3", "qwen3-asr-0.6b", "qwen3-asr-1.7b", - "sensevoice-small", "gigaam-v3-e2e-rnnt", "canary-180m-flash", - "canary-1b-v2", "cohere-transcribe-03-2026", "whisper-large-v3-turbo", - "whisper-large-v3", "whisper-medium", "voxtral-mini-4b-realtime-2602", - "breeze-asr-25", -] - -# Phase 2: dispatched only if the cap still has room after the core matrix. -EXTRA_MODELS = [ - "fun-asr-mlt-nano-2512", # 31 languages, no published numbers anywhere - "whisper-small", # weak-hardware floor across the union - "parakeet-primeline", # German specialist -] - - -def fleurs_langs() -> dict[str, str]: - """BCP-47 -> FLEURS config, parsed out of ingest.py (which imports numpy, - so this reads the literal rather than importing the module).""" - src = (REPO / "scripts/wer/ingest.py").read_text() - body = re.search(r"FLEURS_LANGS: dict\[str, str\] = \{(.*?)\n\}", src, re.S).group(1) - return ast.literal_eval("{" + re.sub(r"#.*", "", body) + "}") - - -# Models whose accepted --language tag is NOT the bare code its hf_card -# advertises. The CLI validates the hint against the GGUF's general.languages -# and nemotron's converter writes locales there ("ar-AR"), while its card -# advertises the deduped bare codes ("ar"), so a bare tag is rejected with -# UNSUPPORTED_LANGUAGE before resolve_prompt_id ever runs. -TAG_OVERRIDE_MODELS = {"nemotron-3.5-asr-streaming-0.6b": "parakeet"} - - -def parakeet_prompt_locales() -> list[str]: - """The nemotron locale list, read from the converter that writes it. - - Parsed rather than copied so the two can't drift: convert-parakeet.py is - what stamps general.languages into the GGUF the CLI validates against. - """ - src = (REPO / "scripts/convert-parakeet.py").read_text() - i = src.index('"nemotron-3.5-asr-streaming-0.6b"') - block = src[i:src.index('"lang_detect"', i)] - m = re.search(r'"languages":\s*\[(.*?)\]', block, re.S) - return re.findall(r'"([a-z]{2}-[A-Z]{2})"', m.group(1)) - - -def locale_for(bare: str) -> str | None: - """Bare code -> the first matching locale in converter order. - - Order matters and is deliberate: the list leads with the regional variant - FLEURS itself ships (en-US, es-US for es_419, pt-BR for pt_br, fr-FR), so - first-match also picks the closest regional match rather than an arbitrary - one.""" - for loc in parakeet_prompt_locales(): - if loc.split("-")[0] == bare: - return loc - return None - - -def card_langs(model: str) -> list[str]: - txt = (REPO / "scripts/hf_cards" / f"{model}.yaml").read_text() - m = re.search(r"^languages:\n((?:\s+-\s+\S+\n)+)", txt, re.M) - return [x.strip('"') for x in re.findall(r"-\s+(\S+)", m.group(1))] if m else [] - - -def build_plan(models: list[str]) -> tuple[list[dict], dict[str, str]]: - """Return (plan rows, {fleurs_config: canonical ingest code}). - - The union is defined by the CORE specialist models only, and deliberately - not by `models`. Two reasons: whisper's 99-language list would otherwise - pull in languages no candidate can be compared against, and a phase-2 - model must not widen the language set after the core matrix has already - run, or the late-added rows would cover languages the core rows never - measured. Extras therefore add rows, never columns.""" - FL = fleurs_langs() - specialists = [m for m in CORE_MODELS if not m.startswith("whisper")] - union: dict[str, str] = {} - for m in specialists: - for l in card_langs(m): - if l in FL: - union.setdefault(FL[l], l) - plan = [] - for m in models: - have = card_langs(m) - for cfg, code in sorted(union.items()): - tag = next((l for l in have if FL.get(l) == cfg), None) - if not tag: - continue - if m in TAG_OVERRIDE_MODELS: - tag = locale_for(tag) - if tag is None: # advertised bare code with no locale - continue - plan.append({"model": m, "lang": code, "tag": tag}) - return plan, union - - -def plan_from_pairs(pairs: dict[str, list[str]]) -> list[dict]: - """Ragged plan: an explicit {card_slug: [bare lang codes]} mapping. - - Unlike build_plan this does NOT compute a union. Each model carries its - own language list, which is what a quantization probe wants: the - comparison is within-model across quants, so models need a spread of - easy-to-hard languages from their own supported set, not a shared column - set. Tag resolution is identical to build_plan's so alias models - (whisper's tl/no vs fil/nb) and locale models resolve the same way. - """ - FL = fleurs_langs() - plan = [] - for m, langs in sorted(pairs.items()): - have = card_langs(m) - for code in langs: - cfg = FL.get(code) - if cfg is None: - sys.exit(f"{m}: {code!r} is not a FLEURS language") - tag = next((l for l in have if FL.get(l) == cfg), None) - if not tag: - sys.exit(f"{m}: card does not advertise {code!r} " - f"(fleurs config {cfg})") - if m in TAG_OVERRIDE_MODELS: - tag = locale_for(tag) - if tag is None: - sys.exit(f"{m}: no locale for {code!r}") - plan.append({"model": m, "lang": code, "tag": tag}) - return plan - - -def group_invocations(plan: list[dict]) -> list[dict]: - """One invocation per (ingest language, language tag). Models that agree - on the tag share a container fan-out.""" - groups: dict[tuple[str, str], list[str]] = defaultdict(list) - for r in plan: - groups[(r["lang"], r["tag"])].append(r["model"]) - return [{"lang": lang, "tag": tag, "models": sorted(ms)} - for (lang, tag), ms in sorted(groups.items())] - - -def spend_today(attempts: int = 3) -> float: - """Actual workspace spend for today from Modal's billing API. - - Returns -1.0 only after `attempts` consecutive failures. The query is - occasionally flaky (seen once mid-sweep), and a single blip must not be - allowed to look like a budget reading.""" - for i in range(attempts): - try: - out = subprocess.run( - ["modal", "billing", "report", "--for", "today", "--json"], - capture_output=True, text=True, timeout=120) - if out.returncode == 0: - return sum(float(r["Cost"]) for r in json.loads(out.stdout)) - except Exception: - pass - if i + 1 < attempts: - time.sleep(5 * (i + 1)) - return -1.0 - - -# Consecutive failed billing reads tolerated before dispatch stops. A few -# blips are normal; flying blind through a whole sweep is not. -MAX_BLIND_DISPATCHES = 3 - - -def run_invocation(inv: dict, gpu: str, batch: int, logdir: pathlib.Path, - quants: str = "Q8_0") -> int: - qtag = quants.replace(',', '+') - log = logdir / f"{inv['lang']}-{inv['tag']}.{qtag}.log" - cmd = [ - "modal", "run", "scripts/wer/remote/modal_sweep.py::sweep", - "--models", ",".join(inv["models"]), - "--dataset", f"fleurs:{inv['lang']}", - "--quants", quants, - "--batch-sizes", str(batch), - "--gpu", gpu, - "--language", inv["tag"], - ] - with open(log, "w") as f: - f.write(f"$ {' '.join(cmd)}\n\n") - f.flush() - return subprocess.run(cmd, cwd=REPO, stdout=f, stderr=subprocess.STDOUT).returncode - - -def main() -> int: - ap = argparse.ArgumentParser() - ap.add_argument("--plan", action="store_true", help="print the plan and exit") - ap.add_argument("--run", action="store_true") - ap.add_argument("--extras", action="store_true", help="include phase-2 models") - ap.add_argument("--only", default="", - help="comma-separated models to actually dispatch. The " - "language union is still computed from CORE_MODELS, " - "so this runs a subset of models over the same " - "columns the core matrix used.") - ap.add_argument("--cap", type=float, default=60.0, - help="stop DISPATCHING once today's spend exceeds this " - "(in-flight invocations always finish)") - ap.add_argument("--quants", default="Q8_0", - help="comma-separated quant substrings passed to " - "modal_sweep (e.g. Q5_K_M,Q4_K_M)") - ap.add_argument("--pairs-file", default="", - help="JSON {card_slug: [lang,...]} for a ragged plan. " - "Bypasses the union; --only/--extras do not apply.") - ap.add_argument("--gpu", default="L4") - ap.add_argument("--batch", type=int, default=8) - ap.add_argument("--jobs", type=int, default=3, - help="invocations in flight at once. The first is always " - "run alone: it warms the CUDA build, and concurrent " - "no-op builds would race on the same build dir.") - ap.add_argument("--logdir", default=None) - args = ap.parse_args() - - if args.pairs_file: - pairs = json.loads(pathlib.Path(args.pairs_file).read_text()) - plan = plan_from_pairs(pairs) - models = sorted(pairs) - union = {r["lang"]: r["lang"] for r in plan} - else: - models = CORE_MODELS + (EXTRA_MODELS if args.extras else []) - plan, union = build_plan(models) - if args.only and not args.pairs_file: - keep = {m.strip() for m in args.only.split(",") if m.strip()} - unknown = keep - set(models) - if unknown: - sys.exit(f"--only names models not in the plan: {sorted(unknown)}") - plan = [r for r in plan if r["model"] in keep] - models = [m for m in models if m in keep] - invs = group_invocations(plan) - - print(f"models : {len(models)}") - print(f"languages : {len(union)}") - print(f"runs : {len(plan)}") - print(f"invocations : {len(invs)}") - nq = len([q for q in args.quants.split(",") if q.strip()]) - print(f"quants : {args.quants} ({nq} per run)") - print(f"cells : {len(plan) * nq}") - print(f"est audio-h : {len(plan) * nq * 2.4:.0f}") - print(f"est cost : ${len(plan) * nq * 2.4 * 0.051:.0f} (upper bound; " - f"whisper-large-v3 rate applied to every model)") - if args.plan: - for inv in invs: - print(f" fleurs:{inv['lang']:<4} tag={inv['tag']:<4} " - f"n={len(inv['models']):>2} {' '.join(inv['models'])}") - return 0 - if not args.run: - print("\n(nothing dispatched; pass --run)") - return 0 - - logdir = pathlib.Path(args.logdir) if args.logdir else \ - REPO / "reports" / "wer" / "_fleurs_matrix_logs" - logdir.mkdir(parents=True, exist_ok=True) - start_spend = spend_today() - print(f"\nspend at start: ${start_spend:.2f} cap: ${args.cap:.2f}") - print(f"logs: {logdir}\n") - - state = {"done": 0, "held": [], "stop": False, "blind": 0} - lock = threading.Lock() - - def dispatch(i: int, inv: dict) -> None: - # Cap is checked at DISPATCH time, so anything already running is - # allowed to finish. That matches "don't kill in-flight work, just - # stop starting new work". - with lock: - if state["stop"]: - state["held"].append(inv) - return - spend = spend_today() - if spend < 0: - # Budget visibility lost. Tolerate a couple of blips, but do - # NOT keep dispatching indefinitely against an unknown spend: - # a guard that fails open forever is not a guard. - state["blind"] += 1 - print(f"[WARN] billing query failed " - f"({state['blind']}/{MAX_BLIND_DISPATCHES}); " - f"dispatching fleurs:{inv['lang']}/{inv['tag']} " - f"without a spend reading") - if state["blind"] >= MAX_BLIND_DISPATCHES: - state["stop"] = True - state["held"].append(inv) - print(f"[HOLD] no billing reading for " - f"{MAX_BLIND_DISPATCHES} dispatches; refusing to " - f"continue blind. Re-run once billing responds.") - return - else: - state["blind"] = 0 - if spend >= args.cap: - state["stop"] = True - state["held"].append(inv) - print(f"[HOLD] spend ${spend:.2f} >= cap ${args.cap:.2f}; " - f"holding fleurs:{inv['lang']}/{inv['tag']} and the rest") - return - t0 = time.time() - rc = run_invocation(inv, args.gpu, args.batch, logdir, args.quants) - with lock: - state["done"] += 1 - print(f"[{state['done']}/{len(invs)}] fleurs:{inv['lang']} " - f"tag={inv['tag']} models={len(inv['models'])} rc={rc} " - f"{time.time() - t0:.0f}s spend=${spend:.2f}", flush=True) - - # First invocation alone: warms the sm_XX build so the rest hit a cached - # binary instead of racing concurrent cmake/ninja runs on one build dir. - dispatch(1, invs[0]) - if len(invs) > 1 and not state["stop"]: - with ThreadPoolExecutor(max_workers=max(1, args.jobs)) as ex: - list(ex.map(lambda t: dispatch(*t), - [(i, inv) for i, inv in enumerate(invs[1:], 2)])) - done, held = state["done"], state["held"] - - final = spend_today() - print(f"\ndispatched {done}/{len(invs)} invocations; spend today ${final:.2f}") - if held: - print("held:", " ".join(f"{h['lang']}/{h['tag']}" for h in held)) - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/scripts/wer/run_reference_cohere_transformers.py b/scripts/wer/run_reference_cohere_transformers.py new file mode 100644 index 00000000..a45bbd33 --- /dev/null +++ b/scripts/wer/run_reference_cohere_transformers.py @@ -0,0 +1,238 @@ +#!/usr/bin/env python3 +""" +run_reference_cohere_transformers.py — Cohere ASR WER baseline. + +Loads a Cohere Transcribe variant via native Hugging Face Transformers +(`CohereAsrForConditionalGeneration`, `trust_remote_code=False` — the +remote-code path is known-broken, see the family doc and HF discussion +#28 on cohere-transcribe-03-2026) and runs greedy decode over a WER +manifest. Writes run.py-compatible JSONL so scripts/wer/score.py can +score the output the same way it scores the C++ port's report. + +Language comes from each manifest entry's `language` field (ingest.py +writes it), overridable globally with --language. The processor builds +the 10-token decoder prompt from the language, so no prompt text is +constructed here. + +Usage (from repo root): + + uv run --project scripts/envs/cohere \\ + scripts/wer/run_reference_cohere_transformers.py \\ + --model CohereLabs/cohere-transcribe-arabic-07-2026 \\ + --manifest samples/wer/fleurs-ar.manifest.jsonl \\ + --out reports/wer/cohere-transcribe-arabic-07-2026-REF.fleurs-ar.jsonl +""" + +from __future__ import annotations + +import argparse +import json +import sys +import time +from pathlib import Path + + +def main() -> int: + p = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + p.add_argument("--manifest", type=Path, required=True, + help="Input manifest JSONL (id/audio/ref_text/language).") + p.add_argument("--out", type=Path, required=True, + help="Output JSONL path (run.py-compatible).") + p.add_argument("--model", required=True, + help="HF repo id (CohereLabs/cohere-transcribe-03-2026) " + "or local directory.") + p.add_argument("--revision", default=None, + help="HF revision to pin (ignored for local paths).") + p.add_argument("--language", default=None, + help="Force one language for every utterance. Default: " + "each entry's manifest `language` field, else 'en'.") + p.add_argument("--no-punctuation", action="store_true", + help="Use the <|nopnc|> prompt slot instead of <|pnc|>.") + p.add_argument("--device", default="cpu", + help="torch device (default: cpu; 'cuda' on Modal).") + p.add_argument("--torch-threads", type=int, default=0, + help="torch.set_num_threads (0 = unchanged).") + p.add_argument("--max-new-tokens", type=int, default=256) + p.add_argument("--dtype", default="bf16", + choices=["bf16", "f16", "f32"], + help="Model dtype (default bf16 = checkpoint dtype).") + p.add_argument("--limit", type=int, default=0, + help="Process only the first N utterances (0 = all).") + p.add_argument("--batch-size", type=int, default=1, + help="Group N utterances per batched generate() call. " + ">1 batches audio through the processor; on any batch " + "error it falls back to per-utterance so a bad sample " + "can't drop the group. Uniform across reference " + "runners so the Modal reference_sweep drives every " + "family the same way.") + args = p.parse_args() + + if not args.manifest.exists(): + print(f"error: manifest not found: {args.manifest}", file=sys.stderr) + return 2 + args.out.parent.mkdir(parents=True, exist_ok=True) + + import torch + if args.torch_threads > 0: + torch.set_num_threads(args.torch_threads) + torch.set_num_interop_threads(1) + + import soundfile as sf + import transformers + from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor + + local_only = Path(args.model).is_dir() + revision = args.revision if not local_only else None + + print( + f"loading: {args.model} (transformers {transformers.__version__}, " + f"device={args.device}, dtype={args.dtype})" + ) + t0 = time.monotonic() + processor = AutoProcessor.from_pretrained( + args.model, revision=revision, + trust_remote_code=False, local_files_only=local_only, + ) + dtype = {"bf16": torch.bfloat16, + "f16": torch.float16, + "f32": torch.float32}[args.dtype] + model = AutoModelForSpeechSeq2Seq.from_pretrained( + args.model, revision=revision, + trust_remote_code=False, local_files_only=local_only, + dtype=dtype, + ).eval().to(args.device) + load_ms = (time.monotonic() - t0) * 1000 + + conv_dtype = model.model.encoder.subsampling.layers[0].weight.dtype + + with open(args.manifest) as f: + manifest = [json.loads(line) for line in f if line.strip()] + if args.limit > 0: + manifest = manifest[:args.limit] + total = len(manifest) + print(f"manifest: {args.manifest} ({total} utterances)") + print(f"output: {args.out}") + + def entry_language(entry: dict) -> str: + return args.language or entry.get("language") or "en" + + def load_pcm(audio_path: str): + pcm, sr = sf.read(audio_path, dtype="float32") + if pcm.ndim > 1: + pcm = pcm[:, 0] + if sr != 16000: + raise RuntimeError(f"cohere_asr expects 16kHz; got {sr}Hz") + return pcm + + # Shared generate path: the processor emits input_features plus the + # language-conditioned decoder_input_ids prompt (same 10-token length + # for every row, so one slice drops the prompt for the whole batch). + def infer_group(entries: list) -> list: + language = entry_language(entries[0]) + if any(entry_language(e_) != language for e_ in entries): + raise RuntimeError("mixed languages in one batch group") + pcms = [load_pcm(e_["audio"]) for e_ in entries] + inputs = processor( + audio=pcms, + language=language, + punctuation=not args.no_punctuation, + sampling_rate=16000, + return_tensors="pt", + ) + inputs = {k: (v.to(args.device) if hasattr(v, "to") else v) + for k, v in inputs.items()} + if inputs["input_features"].dtype != conv_dtype: + inputs["input_features"] = inputs["input_features"].to(conv_dtype) + prompt_len = int(inputs["decoder_input_ids"].shape[1]) + with torch.inference_mode(): + gen = model.generate(**inputs, max_new_tokens=args.max_new_tokens, + do_sample=False, num_beams=1) + seqs = gen.sequences if hasattr(gen, "sequences") else gen + eos_id = processor.tokenizer.eos_token_id + out = [] + for row in seqs: + ids = row.detach().cpu().tolist()[prompt_len:] + if eos_id is not None and eos_id in ids: + ids = ids[:ids.index(eos_id)] + out.append(processor.tokenizer.decode( + ids, skip_special_tokens=True).strip()) + return out + + n_done = 0 + n_errors = 0 + t_loop = time.monotonic() + + with open(args.out, "w") as fout: + fout.write(json.dumps({ + "type": "batch_header", + "load_ms": round(load_ms, 1), + "framework": "transformers", + "model": args.model, + "language": args.language, + "dtype": args.dtype, + }) + "\n") + fout.flush() + + bs = max(1, args.batch_size) + for start in range(0, total, bs): + group = manifest[start:start + bs] + k = len(group) + t_start = time.monotonic() + hyps = [""] * k + errs = [""] * k + try: + hyps = infer_group(group) + except Exception: + if k == 1: + e = sys.exc_info()[1] + errs[0] = f"{type(e).__name__}: {e}" + n_errors += 1 + else: + # Fall back to per-utterance for this group. + for i, e_ in enumerate(group): + try: + hyps[i] = infer_group([e_])[0] + except Exception as e2: + errs[i] = f"{type(e2).__name__}: {e2}" + n_errors += 1 + per_ms = round((time.monotonic() - t_start) * 1000 / k, 1) + + for i, entry in enumerate(group): + rec = { + "id": entry["id"], + "ref_text": entry.get("ref_text", ""), + "hyp_text": (hyps[i] or "").strip(), + "mel_ms": 0, + "encode_ms": 0, + "decode_ms": per_ms, + "latency_ms": per_ms, + "error": errs[i], + } + fout.write(json.dumps(rec, ensure_ascii=False) + "\n") + fout.flush() + n_done += 1 + + if start // bs % 10 == 0 or n_done == total: + wall = time.monotonic() - t_loop + rate = n_done / wall if wall > 0 else 0 + eta = (total - n_done) / rate if rate > 0 else 0 + print( + f" [{n_done}/{total}] {rate:.2f} utt/s, " + f"ETA {eta/60:.1f} min, errors={n_errors}", + flush=True, + ) + + wall = time.monotonic() - t_loop + print( + f"\ndone. {n_done} utterances in {wall:.1f}s " + f"({n_done / wall:.2f} utt/s), {n_errors} errors" + ) + print(f"report: {args.out}") + return 0 if n_errors == 0 else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/wer/score_matrix.py b/scripts/wer/score_matrix.py deleted file mode 100644 index 6dbbbdd7..00000000 --- a/scripts/wer/score_matrix.py +++ /dev/null @@ -1,184 +0,0 @@ -#!/usr/bin/env python3 -"""score_matrix.py — score every FLEURS hyp file and assemble the model x -language matrix. - -Scoring is driven from the filename's dataset id, NOT from the report -header. score.py infers the language from the header when --language is -omitted, and a header stamped "auto" (any model run without an explicit -language tag) silently falls back to the English normalizer and WER, which -would score Japanese with the wrong metric and look plausible. Passing ---language explicitly for every file removes that failure mode. - -Usage: - uv run scripts/wer/score_matrix.py # score + print matrix - uv run scripts/wer/score_matrix.py --no-score # re-read existing scores -""" -from __future__ import annotations - -import argparse -import json -import pathlib -import re -import subprocess -import sys -from collections import defaultdict - -REPO = pathlib.Path(__file__).resolve().parents[2] -WER_DIR = REPO / "reports" / "wer" - -# Hyp files look like .[.b8][.ts-..][...].jsonl -NAME = re.compile(r"^(?P.+?)\.fleurs-(?P[a-z-]+?)" - r"(?P(?:\.b\d+|\.ts-\w+|\.stream\d+ms|\.r\d+|" - r"\.filtered|-timestamps_\w+)*)\.jsonl$") - -QUANT = re.compile(r"-(F32|BF16|F16|Q8_0|Q6_K|Q5_K_M|Q4_K_M|REF)$") - -# Cells that need extra score.py arguments to be measured at all, with the -# reason. Breeze emits Traditional Chinese while FLEURS cmn_hans_cn refs are -# Simplified; folding both sides with OpenCC turns a 35% script mismatch into -# an 8.10% transcription measurement (which matches the number in its own -# hf_card). The fold is applied to reference and hypothesis alike, so it can -# only remove a script difference, never flatter the model on content. -CELL_SCORE_ARGS = { - ("Breeze-ASR-25", "zh"): ( - ["--script-fold", "t2s"], - "OpenCC t2s fold (Traditional model vs Simplified refs)", - ), - # Diarizing models emit `[start][Sxx]text[end]` around every turn. FLEURS - # references are plain single-speaker text, so without --dediarize the - # speaker and timestamp markup is scored as inserted words and the model - # looks far worse than it transcribes. A lang of None applies to every - # language the model is measured on, since this is a property of the - # model's output format rather than of any one language. - ("MOSS-Transcribe-Diarize", None): ( - ["--dediarize"], - "strip [start][Sxx]...[end] turn markup (diarizing model)", - ), - ("multitalker-parakeet-streaming-0.6b-v1", None): ( - ["--dediarize"], - "strip [start][Sxx]...[end] turn markup (diarizing model)", - ), -} - - -def parse(path: pathlib.Path) -> tuple[str, str, str] | None: - m = NAME.match(path.name) - if not m: - return None - slug = m.group("slug") - qm = QUANT.search(slug) - model, quant = (slug[:qm.start()], qm.group(1)) if qm else (slug, "?") - return model, quant, m.group("lang") - - -def main() -> int: - ap = argparse.ArgumentParser() - ap.add_argument("--no-score", action="store_true", - help="skip score.py; read existing .score.json only") - ap.add_argument("--rescore", action="store_true", - help="re-run score.py even for hyps whose .score.json is " - "already newer than the hyp file") - ap.add_argument("--quant", default="Q8_0") - ap.add_argument("--out", default="") - args = ap.parse_args() - # The output path must carry the quant. --quant changes WHAT is scored; - # without this the destination stayed "fleurs_matrix" for every quant, so - # scoring a probe quant silently overwrote the Q8_0 matrix with a handful - # of cells. Q8_0 keeps the bare name so existing callers and the DB - # builder are unaffected. The separator is "_" not ".": with_suffix() - # below would treat a ".Q5_K_M" tail as the suffix and replace it, - # collapsing the path straight back onto fleurs_matrix.tsv. - if not args.out: - args.out = str(WER_DIR / ("fleurs_matrix" if args.quant == "Q8_0" - else f"fleurs_matrix_{args.quant}")) - - files = sorted(p for p in WER_DIR.glob("*.fleurs-*.jsonl") - if not p.name.endswith(".score.json")) - cells: dict[tuple[str, str], dict] = {} - langs: set[str] = set() - failures = [] - - for p in files: - got = parse(p) - if not got: - continue - model, quant, lang = got - if args.quant and quant != args.quant: - continue - score_path = p.with_suffix(".score.json") - # Rescoring every file on every run costs minutes once the matrix is - # a few hundred cells, and score.py is deterministic, so a score that - # is newer than its hyp file is already current. --rescore forces it - # (e.g. after a score.py or normalizer change). - current = (score_path.exists() - and score_path.stat().st_mtime >= p.stat().st_mtime) - extra, extra_why = CELL_SCORE_ARGS.get( - (model, lang), CELL_SCORE_ARGS.get((model, None), ([], None))) - if not args.no_score and not (current and not args.rescore): - r = subprocess.run( - ["uv", "run", "scripts/wer/score.py", str(p), - "--language", lang, *extra], - cwd=REPO, capture_output=True, text=True) - if r.returncode != 0: - failures.append((p.name, r.stderr.strip().split("\n")[-1][:120])) - continue - if not score_path.exists(): - continue - d = json.loads(score_path.read_text()) - langs.add(lang) - cells[(model, lang)] = { - "metric": d["metric"], "pct": d["error_rate_pct"], - "note": extra_why, - "ci_lo": round(d["error_rate_ci_lo"] * 100, 2), - "ci_hi": round(d["error_rate_ci_hi"] * 100, 2), "n": d["n"], - } - - models = sorted({m for m, _ in cells}) - cols = sorted(langs) - out = pathlib.Path(args.out) - with open(out.with_suffix(".tsv"), "w") as f: - f.write("model\t" + "\t".join(cols) + "\n") - for m in models: - row = [f"{cells[(m, l)]['pct']:.2f}" if (m, l) in cells else "" - for l in cols] - f.write(m + "\t" + "\t".join(row) + "\n") - json.dump({"cells": {f"{m}|{l}": v for (m, l), v in cells.items()}, - "models": models, "languages": cols}, - open(out.with_suffix(".json"), "w"), indent=1) - - print(f"{len(cells)} cells, {len(models)} models, {len(cols)} languages " - f"(quant={args.quant})") - print(f" {out.with_suffix('.tsv')}") - - # A cell scored on fewer utterances than its language's full split is a - # leftover from a subset run (a --n-utts smoke test, or an interrupted - # sweep). Its error rate is not comparable to the full-split cells beside - # it, and nothing in the filename says so, so surface it loudly rather - # than letting it sit in the matrix looking like a real measurement. - full = defaultdict(int) - for (m, l), v in cells.items(): - full[l] = max(full[l], v["n"]) - partial = [(m, l, v["n"], full[l]) for (m, l), v in sorted(cells.items()) - if v["n"] < full[l]] - if partial: - print(f"\n!! {len(partial)} PARTIAL cells (subset runs; not comparable):") - for m, l, n, fn in partial: - print(f" {m} / {l}: n={n} vs {fn} for the full split") - for (m, l), (_, why) in CELL_SCORE_ARGS.items(): - # l is None for model-wide rules, which cover every language the model - # was measured on, so expand it rather than looking up a (m, None) key - # that can never be in `cells`. - for lang in ([l] if l is not None else - sorted(cl for (cm, cl) in cells if cm == m)): - if (m, lang) in cells: - print(f" note: {m} / {lang} scored with {why} " - f"-> {cells[(m, lang)]['pct']:.2f}%") - if failures: - print(f"\n{len(failures)} scoring failures:") - for n, e in failures[:10]: - print(f" {n}: {e}") - return 0 - - -if __name__ == "__main__": - sys.exit(main()) From bcd4a0f80fe500a69d1277328093cd1fea8b4c30 Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sat, 12 Sep 2026 03:36:45 -0700 Subject: [PATCH 04/24] publish db on release --- .github/workflows/catalog.yml | 35 +++++++++++++++++++ .github/workflows/publish.yml | 66 ++++++++++++++++++++++++++++------- README.md | 8 +++++ 3 files changed, 97 insertions(+), 12 deletions(-) create mode 100644 .github/workflows/catalog.yml diff --git a/.github/workflows/catalog.yml b/.github/workflows/catalog.yml new file mode 100644 index 00000000..96604bb7 --- /dev/null +++ b/.github/workflows/catalog.yml @@ -0,0 +1,35 @@ +name: model-catalog + +on: + pull_request: + branches: [main] + paths: + - "catalog/**" + - "scripts/catalog/**" + - ".github/workflows/catalog.yml" + push: + branches: [main] + paths: + - "catalog/**" + - "scripts/catalog/**" + - ".github/workflows/catalog.yml" + +concurrency: + group: model-catalog-${{ github.ref }} + cancel-in-progress: true + +jobs: + catalog: + runs-on: blacksmith-2vcpu-ubuntu-2404 + timeout-minutes: 10 + steps: + - uses: actions/checkout@v6 + - uses: astral-sh/setup-uv@v8.2.0 + - name: Canonical formatting + run: uv run catalog/_format.py --check catalog/*.json + - name: Schema and integrity + run: uv run scripts/catalog/check.py + - name: Rebuild portable database + run: | + uv run scripts/catalog/db.py --out "$RUNNER_TEMP/catalog.db" + sqlite3 "$RUNNER_TEMP/catalog.db" "PRAGMA integrity_check" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 81d9f99d..32bfa6a9 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -11,9 +11,10 @@ name: publish # the run before any expensive matrix work or immutable upload. # # VALIDATE (Actions artifacts only — no registry touched): wheels -# (python-wheels.yml), cuda-windows (cuda-windows.yml), swift-build -# (xcframework -> artifact, NOT the Release), rust-verify (cargo publish -# --dry-run + packed-crate smoke). These run on BOTH a release tag and a +# (python-wheels.yml), cuda-windows (cuda-windows.yml), catalog-build +# (catalog.db + checksum), swift-build (xcframework -> artifact, NOT the +# Release), rust-verify (cargo publish --dry-run + packed-crate smoke). +# These run on BOTH a release tag and a # workflow_dispatch rehearsal; Windows CUDA is release-required, not special. # # PUBLISH (tags only — immutable uploads): create-release, publish-pypi, @@ -109,9 +110,34 @@ jobs: # =========================================================================== # VALIDATE — build + verify only; produce Actions artifacts, touch no # registry. Runs on a tag AND a rehearsal. The publish phase below `needs:` - # the full set [release-preflight, wheels, cuda-windows, swift-build, - # rust-verify]. + # the full set [release-preflight, catalog-build, wheels, cuda-windows, + # swift-build, rust-verify]. # =========================================================================== + catalog-build: + # Build the portable catalog from its JSON source and stash the exact + # validated database for release-assets. Rehearsals retain it as an Actions + # artifact; tags also attach it to the GitHub Release. + needs: [release-preflight] + runs-on: blacksmith-2vcpu-ubuntu-2404 + timeout-minutes: 10 + steps: + - uses: actions/checkout@v6 + - uses: astral-sh/setup-uv@v8.2.0 + - name: Validate and build catalog.db + run: | + set -euo pipefail + uv run catalog/_format.py --check catalog/*.json + uv run scripts/catalog/check.py + mkdir -p release-catalog + uv run scripts/catalog/db.py --out release-catalog/catalog.db + test "$(sqlite3 release-catalog/catalog.db 'PRAGMA integrity_check')" = "ok" + (cd release-catalog && sha256sum catalog.db > catalog.db.sha256) + - uses: actions/upload-artifact@v7 + with: + name: catalog-db + path: release-catalog/ + if-no-files-found: error + wheels: # Full build + validation matrix; the artifacts published below are the # exact files these workflows tested post-repair. @@ -196,7 +222,7 @@ jobs: # release-required lane is unproven" rule the tag path enforces. A later # CUDA/Swift/TS failure must not force a version bump just to re-rehearse. if: github.event_name == 'workflow_dispatch' - needs: [release-preflight, wheels, cuda-windows, rust-rehearsal, swift-rehearsal, ts-rehearsal] + needs: [release-preflight, catalog-build, wheels, cuda-windows, rust-rehearsal, swift-rehearsal, ts-rehearsal] runs-on: blacksmith-2vcpu-ubuntu-2404 timeout-minutes: 30 environment: testpypi @@ -380,7 +406,7 @@ jobs: # at workflow start. Keep it draft until the mandatory publishers have # succeeded and assets are verified (finalize-release). if: startsWith(github.ref, 'refs/tags/v') - needs: [release-preflight, wheels, cuda-windows, swift-build, rust-verify, ts-pack] + needs: [release-preflight, catalog-build, wheels, cuda-windows, swift-build, rust-verify, ts-pack] runs-on: blacksmith-2vcpu-ubuntu-2404 permissions: contents: write @@ -403,7 +429,7 @@ jobs: # Also waits on create-release: no immutable registry upload starts unless the # GitHub Release object itself was created (else PyPI could land with no Release). if: startsWith(github.ref, 'refs/tags/v') - needs: [create-release, release-preflight, wheels, cuda-windows, swift-build, rust-verify, ts-pack] + needs: [create-release, release-preflight, catalog-build, wheels, cuda-windows, swift-build, rust-verify, ts-pack] # Blacksmith for the same docker-container-action reason as testpypi. runs-on: blacksmith-2vcpu-ubuntu-2404 timeout-minutes: 30 @@ -436,7 +462,7 @@ jobs: # NO needs: and could burn the immutable crates.io version before anything # else built, or before the Release object even existed). if: startsWith(github.ref, 'refs/tags/v') - needs: [create-release, release-preflight, wheels, cuda-windows, swift-build, rust-verify, ts-pack] + needs: [create-release, release-preflight, catalog-build, wheels, cuda-windows, swift-build, rust-verify, ts-pack] runs-on: blacksmith-2vcpu-ubuntu-2404 timeout-minutes: 40 environment: crates-io @@ -528,7 +554,7 @@ jobs: # tarball does NOT re-run prepublishOnly, so no build happens here — only the # upload. The `npm` environment carries the approval gate. if: startsWith(github.ref, 'refs/tags/v') - needs: [create-release, release-preflight, wheels, cuda-windows, swift-build, rust-verify, ts-pack] + needs: [create-release, release-preflight, catalog-build, wheels, cuda-windows, swift-build, rust-verify, ts-pack] runs-on: blacksmith-2vcpu-ubuntu-2404 environment: npm steps: @@ -554,9 +580,10 @@ jobs: release-assets: # cu12's primary distribution home (wheels as GitHub release assets, served # to pip through the PEP 503 index on Pages), the canonical native bundles, - # AND the Swift xcframework (built+validated in swift-build, uploaded here). + # the portable catalog database, AND the Swift xcframework (built+validated + # in swift-build, uploaded here). if: startsWith(github.ref, 'refs/tags/v') - needs: [create-release, release-preflight, wheels, cuda-windows, swift-build, rust-verify, ts-pack] + needs: [create-release, release-preflight, catalog-build, wheels, cuda-windows, swift-build, rust-verify, ts-pack] # Blacksmith, not the hetzner self-hosted box: this job only downloads # artifacts and `gh release upload`s them, and the hetzner runner has no `gh` # on PATH (release v0.0.3 failed here with "gh: command not found"). The @@ -586,6 +613,19 @@ jobs: with: name: swift-xcframework path: swift + - uses: actions/download-artifact@v8 + with: + name: catalog-db + path: catalog + - name: Attach the catalog database + env: + GH_TOKEN: ${{ github.token }} + run: | + set -euo pipefail + tag="${GITHUB_REF#refs/tags/}" + (cd catalog && sha256sum --check catalog.db.sha256) + gh release upload "$tag" catalog/catalog.db catalog/catalog.db.sha256 \ + --repo "$GITHUB_REPOSITORY" --clobber - name: Attach the cu12 wheels env: GH_TOKEN: ${{ github.token }} @@ -653,6 +693,8 @@ jobs: } require_asset "TranscribeCpp.xcframework.zip" + require_asset "catalog.db" + require_asset "catalog.db.sha256" require_asset "transcribe-native-${ver}-linux-x86_64-cpu-vulkan.tar.gz" require_asset "transcribe-native-${ver}-linux-aarch64-cpu-vulkan.tar.gz" require_asset "transcribe-native-${ver}-macos-arm64-metal.tar.gz" diff --git a/README.md b/README.md index 7085f450..c79d661c 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,14 @@ C/C++ speech-to-text inference library. Runs diverse STT model families via [GGU Per-variant model cards live under [`docs/models/`](docs/models/). +## Model catalog + +[`catalog/`](catalog/) is the source of truth for model metadata, accuracy, and +performance. Each release includes a queryable +[`catalog.db`](https://github.com/handy-computer/transcribe.cpp/releases/latest/download/catalog.db) +and [`SHA-256 checksum`](https://github.com/handy-computer/transcribe.cpp/releases/latest/download/catalog.db.sha256). +Rebuild it locally with `uv run scripts/catalog/db.py --out catalog.db`. + ## Build ```bash From 8ada991e199ef3444e14e64256e3b094959555bc Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sun, 13 Sep 2026 02:24:14 -0700 Subject: [PATCH 05/24] yaml + md gen, continue cleanup process --- .claude/skills/porting-6-bench/SKILL.md | 69 ++- .claude/skills/porting-7-wer/SKILL.md | 34 ++ .claude/skills/porting-8-ship/SKILL.md | 119 +++- .github/workflows/catalog.yml | 16 +- .github/workflows/publish.yml | 2 +- README.md | 32 +- catalog/_benchmark_profiles.json | 67 +++ catalog/_schema.json | 117 +++- catalog/breeze-asr-25.json | 67 +-- catalog/canary-180m-flash.json | 65 ++- catalog/canary-1b-flash.json | 69 +-- catalog/canary-1b-v2.json | 148 ++--- catalog/canary-1b.json | 65 ++- catalog/canary-qwen-2.5b.json | 55 +- catalog/cohere-transcribe-03-2026.json | 95 ++-- catalog/cohere-transcribe-arabic-07-2026.json | 56 +- .../diar_streaming_sortformer_4spk-v2.1.json | 45 -- catalog/fun-asr-mlt-nano-2512.json | 138 ++--- catalog/fun-asr-nano-2512.json | 59 +- catalog/gigaam-v3-ctc.json | 32 +- catalog/gigaam-v3-e2e-ctc.json | 32 +- catalog/gigaam-v3-e2e-rnnt.json | 32 +- catalog/gigaam-v3-rnnt.json | 32 +- catalog/granite-4.0-1b-speech.json | 74 +-- catalog/granite-speech-4.1-2b-nar.json | 81 +-- catalog/granite-speech-4.1-2b-plus.json | 78 +-- catalog/granite-speech-4.1-2b.json | 82 +-- catalog/medasr.json | 69 ++- catalog/moonshine-base-ar.json | 29 +- catalog/moonshine-base-ja.json | 29 +- catalog/moonshine-base-ko.json | 29 +- catalog/moonshine-base-uk.json | 29 +- catalog/moonshine-base-vi.json | 29 +- catalog/moonshine-base-zh.json | 29 +- catalog/moonshine-base.json | 32 +- catalog/moonshine-streaming-medium.json | 32 +- catalog/moonshine-streaming-small.json | 32 +- catalog/moonshine-streaming-tiny.json | 32 +- catalog/moonshine-tiny-ar.json | 29 +- catalog/moonshine-tiny-ja.json | 29 +- catalog/moonshine-tiny-ko.json | 29 +- catalog/moonshine-tiny-uk.json | 29 +- catalog/moonshine-tiny-vi.json | 29 +- catalog/moonshine-tiny-zh.json | 29 +- catalog/moonshine-tiny.json | 32 +- catalog/moss-transcribe-diarize.json | 61 +- ...ultitalker-parakeet-streaming-0.6b-v1.json | 73 +-- catalog/nemotron-3.5-asr-streaming-0.6b.json | 145 +++-- .../nemotron-speech-streaming-en-0.6b.json | 70 ++- catalog/parakeet-ctc-0.6b.json | 58 +- catalog/parakeet-ctc-1.1b.json | 57 +- catalog/parakeet-primeline.json | 104 ++-- catalog/parakeet-rnnt-0.6b.json | 63 +-- catalog/parakeet-rnnt-1.1b.json | 61 +- catalog/parakeet-tdt-0.6b-v2.json | 64 +-- catalog/parakeet-tdt-0.6b-v3.json | 137 ++--- catalog/parakeet-tdt-1.1b.json | 61 +- catalog/parakeet-tdt_ctc-1.1b.json | 63 +-- catalog/parakeet-tdt_ctc-110m.json | 60 +- catalog/parakeet-unified-en-0.6b.json | 54 +- catalog/qwen3-asr-0.6b.json | 115 ++-- catalog/qwen3-asr-1.7b.json | 159 ++---- catalog/sensevoice-small.json | 63 ++- catalog/voxtral-mini-3b-2507.json | 78 +-- catalog/voxtral-mini-4b-realtime-2602.json | 109 ++-- catalog/voxtral-small-24b-2507.json | 80 ++- catalog/whisper-base.en.json | 61 +- catalog/whisper-base.json | 226 ++++---- catalog/whisper-large-v2.json | 198 +++---- catalog/whisper-large-v3-turbo.json | 309 ++++------ catalog/whisper-large-v3.json | 324 ++++------- catalog/whisper-large.json | 202 +++---- catalog/whisper-medium.en.json | 62 +- catalog/whisper-medium.json | 225 ++++---- catalog/whisper-small.en.json | 63 +-- catalog/whisper-small.json | 226 ++++---- catalog/whisper-tiny.en.json | 64 +-- catalog/whisper-tiny.json | 230 ++++---- docs/_templates/model-card.md.j2 | 7 +- docs/models/canary-180m-flash.md | 16 +- docs/models/canary-1b-flash.md | 16 +- docs/models/canary-1b-v2.md | 16 +- docs/models/canary-1b.md | 16 +- docs/models/canary-qwen-2.5b.md | 16 +- docs/models/cohere-transcribe-03-2026.md | 16 +- .../cohere-transcribe-arabic-07-2026.md | 16 +- .../diar_streaming_sortformer_4spk-v2.1.md | 8 +- docs/models/fun-asr-mlt-nano-2512.md | 16 +- docs/models/fun-asr-nano-2512.md | 16 +- docs/models/gigaam-v3-ctc.md | 16 +- docs/models/gigaam-v3-e2e-ctc.md | 16 +- docs/models/gigaam-v3-e2e-rnnt.md | 16 +- docs/models/gigaam-v3-rnnt.md | 16 +- docs/models/granite-4.0-1b-speech.md | 16 +- docs/models/granite-speech-4.1-2b-nar.md | 16 +- docs/models/granite-speech-4.1-2b-plus.md | 16 +- docs/models/granite-speech-4.1-2b.md | 16 +- docs/models/medasr.md | 16 +- docs/models/moonshine-base.md | 10 +- docs/models/moonshine-streaming-medium.md | 10 +- docs/models/moonshine-streaming-small.md | 10 +- docs/models/moonshine-streaming-tiny.md | 10 +- docs/models/moonshine-tiny.md | 10 +- docs/models/moss-transcribe-diarize.md | 16 +- .../multitalker-parakeet-streaming-0.6b-v1.md | 43 +- .../models/nemotron-3.5-asr-streaming-0.6b.md | 22 +- .../nemotron-speech-streaming-en-0.6b.md | 16 +- docs/models/parakeet-ctc-0.6b.md | 16 +- docs/models/parakeet-ctc-1.1b.md | 16 +- docs/models/parakeet-primeline.md | 16 +- docs/models/parakeet-rnnt-0.6b.md | 16 +- docs/models/parakeet-rnnt-1.1b.md | 16 +- docs/models/parakeet-tdt-0.6b-v2.md | 16 +- docs/models/parakeet-tdt-0.6b-v3.md | 16 +- docs/models/parakeet-tdt-1.1b.md | 16 +- docs/models/parakeet-tdt_ctc-1.1b.md | 16 +- docs/models/parakeet-tdt_ctc-110m.md | 16 +- docs/models/parakeet-unified-en-0.6b.md | 16 +- docs/models/qwen3-asr-0.6b.md | 16 +- docs/models/qwen3-asr-1.7b.md | 16 +- docs/models/sensevoice-small.md | 16 +- docs/models/voxtral-mini-3b-2507.md | 16 +- docs/models/voxtral-small-24b-2507.md | 16 +- docs/models/whisper-base.en.md | 20 +- docs/models/whisper-base.md | 20 +- docs/models/whisper-large-v2.md | 20 +- docs/models/whisper-large-v3-turbo.md | 18 +- docs/models/whisper-large-v3.md | 18 +- docs/models/whisper-large.md | 20 +- docs/models/whisper-medium.en.md | 20 +- docs/models/whisper-medium.md | 20 +- docs/models/whisper-small.en.md | 20 +- docs/models/whisper-small.md | 20 +- docs/models/whisper-tiny.en.md | 20 +- docs/models/whisper-tiny.md | 20 +- docs/models/whisper.md | 3 +- docs/tools/wer.md | 26 + scripts/bench/run.py | 117 +++- scripts/catalog/backfill_provenance.py | 67 +++ scripts/catalog/cards.py | 102 ++++ scripts/catalog/check.py | 217 ++++++- scripts/catalog/common.py | 285 ++++++++++ scripts/catalog/db.py | 56 +- scripts/catalog/ingest_accuracy.py | 156 ++++++ scripts/catalog/ingest_perf.py | 344 ++++++++++++ scripts/catalog/profiles.py | 205 +++++++ scripts/catalog/prune_benchmarks.py | 135 +++++ scripts/catalog/render.py | 358 ++++++++++++ scripts/catalog/sync_capabilities.py | 529 ++++++++++++++++++ scripts/compose-multitalker-bundle.py | 11 + scripts/hf_cards/breeze-asr-25.yaml | 30 - scripts/hf_cards/canary-180m-flash.yaml | 54 -- scripts/hf_cards/canary-1b-flash.yaml | 54 -- scripts/hf_cards/canary-1b-v2.yaml | 75 --- scripts/hf_cards/canary-1b.yaml | 54 -- scripts/hf_cards/canary-qwen-2.5b.yaml | 51 -- scripts/hf_cards/check_release.py | 79 +++ .../hf_cards/cohere-transcribe-03-2026.yaml | 38 -- .../cohere-transcribe-arabic-07-2026.yaml | 49 -- .../diar_streaming_sortformer_4spk-v2.1.yaml | 29 - scripts/hf_cards/fun-asr-mlt-nano-2512.yaml | 86 --- scripts/hf_cards/fun-asr-nano-2512.yaml | 58 -- scripts/hf_cards/generate.py | 32 +- scripts/hf_cards/gigaam-v3-ctc.yaml | 53 -- scripts/hf_cards/gigaam-v3-e2e-ctc.yaml | 27 - scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml | 53 -- scripts/hf_cards/gigaam-v3-rnnt.yaml | 53 -- scripts/hf_cards/granite-4.0-1b-speech.yaml | 59 -- .../hf_cards/granite-speech-4.1-2b-nar.yaml | 58 -- .../hf_cards/granite-speech-4.1-2b-plus.yaml | 51 -- scripts/hf_cards/granite-speech-4.1-2b.yaml | 59 -- scripts/hf_cards/medasr.yaml | 51 -- scripts/hf_cards/moonshine-base-ar.yaml | 37 -- scripts/hf_cards/moonshine-base-ja.yaml | 37 -- scripts/hf_cards/moonshine-base-ko.yaml | 37 -- scripts/hf_cards/moonshine-base-uk.yaml | 37 -- scripts/hf_cards/moonshine-base-vi.yaml | 37 -- scripts/hf_cards/moonshine-base-zh.yaml | 37 -- scripts/hf_cards/moonshine-base.yaml | 39 -- .../hf_cards/moonshine-streaming-medium.yaml | 39 -- .../hf_cards/moonshine-streaming-small.yaml | 39 -- .../hf_cards/moonshine-streaming-tiny.yaml | 39 -- scripts/hf_cards/moonshine-tiny-ar.yaml | 37 -- scripts/hf_cards/moonshine-tiny-ja.yaml | 37 -- scripts/hf_cards/moonshine-tiny-ko.yaml | 37 -- scripts/hf_cards/moonshine-tiny-uk.yaml | 37 -- scripts/hf_cards/moonshine-tiny-vi.yaml | 37 -- scripts/hf_cards/moonshine-tiny-zh.yaml | 37 -- scripts/hf_cards/moonshine-tiny.yaml | 39 -- scripts/hf_cards/moss-transcribe-diarize.yaml | 46 -- ...ultitalker-parakeet-streaming-0.6b-v1.yaml | 57 -- .../nemotron-3.5-asr-streaming-0.6b.yaml | 51 -- .../nemotron-speech-streaming-en-0.6b.yaml | 55 -- scripts/hf_cards/parakeet-ctc-0.6b.yaml | 51 -- scripts/hf_cards/parakeet-ctc-1.1b.yaml | 51 -- scripts/hf_cards/parakeet-primeline.yaml | 48 -- scripts/hf_cards/parakeet-rnnt-0.6b.yaml | 51 -- scripts/hf_cards/parakeet-rnnt-1.1b.yaml | 51 -- scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml | 51 -- scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml | 75 --- scripts/hf_cards/parakeet-tdt-1.1b.yaml | 51 -- scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml | 51 -- scripts/hf_cards/parakeet-tdt_ctc-110m.yaml | 51 -- .../hf_cards/parakeet-unified-en-0.6b.yaml | 50 -- scripts/hf_cards/qwen3-asr-0.6b.yaml | 80 --- scripts/hf_cards/qwen3-asr-1.7b.yaml | 80 --- scripts/hf_cards/sensevoice-small.yaml | 61 -- scripts/hf_cards/template.md.j2 | 2 +- scripts/hf_cards/voxtral-mini-3b-2507.yaml | 58 -- .../voxtral-mini-4b-realtime-2602.yaml | 63 --- scripts/hf_cards/voxtral-small-24b-2507.yaml | 54 -- scripts/hf_cards/whisper-base.en.yaml | 51 -- scripts/hf_cards/whisper-base.yaml | 49 -- scripts/hf_cards/whisper-large-v2.yaml | 49 -- scripts/hf_cards/whisper-large-v3-turbo.yaml | 45 -- scripts/hf_cards/whisper-large-v3.yaml | 45 -- scripts/hf_cards/whisper-large.yaml | 49 -- scripts/hf_cards/whisper-medium.en.yaml | 51 -- scripts/hf_cards/whisper-medium.yaml | 49 -- scripts/hf_cards/whisper-small.en.yaml | 51 -- scripts/hf_cards/whisper-small.yaml | 49 -- scripts/hf_cards/whisper-tiny.en.yaml | 25 - scripts/hf_cards/whisper-tiny.yaml | 49 -- scripts/wer/ingest.py | 55 +- scripts/wer/languages.py | 57 ++ scripts/wer/remote/cache_paths.py | 6 +- scripts/wer/remote/fingerprints.py | 4 +- scripts/wer/remote/modal_sweep.py | 149 ++++- scripts/wer/remote/model_specs.py | 43 +- scripts/wer/run.py | 31 +- scripts/wer/score.py | 16 +- 231 files changed, 6669 insertions(+), 7050 deletions(-) create mode 100644 catalog/_benchmark_profiles.json delete mode 100644 catalog/diar_streaming_sortformer_4spk-v2.1.json create mode 100755 scripts/catalog/backfill_provenance.py create mode 100644 scripts/catalog/cards.py create mode 100644 scripts/catalog/common.py create mode 100755 scripts/catalog/ingest_accuracy.py create mode 100755 scripts/catalog/ingest_perf.py create mode 100644 scripts/catalog/profiles.py create mode 100755 scripts/catalog/prune_benchmarks.py create mode 100755 scripts/catalog/render.py create mode 100755 scripts/catalog/sync_capabilities.py create mode 100644 scripts/hf_cards/check_release.py create mode 100644 scripts/wer/languages.py diff --git a/.claude/skills/porting-6-bench/SKILL.md b/.claude/skills/porting-6-bench/SKILL.md index cee50529..1ba887fe 100644 --- a/.claude/skills/porting-6-bench/SKILL.md +++ b/.claude/skills/porting-6-bench/SKILL.md @@ -70,16 +70,18 @@ capturing baseline. **Publication scope (default, required for sign-off).** This is the matrix that ends up rendered in `docs/models/.md`: -- Quants: `q8_0,q4_k_m` (the two columns the per-model perf table ships) -- Samples: `jfk,dots` (short + medium-length sample) -- Backends: `metal,cpu,vulkan` — `run.py` filters to whatever this machine - actually supports (Metal on macOS, Vulkan on Linux with the Vulkan - build, CPU everywhere) -- Iters: `3`, Warmup: `1` -- `--name -publication` - -Confirm publication scope with the user. Narrowed or widened sweeps are -allowed for iteration, but sign-off is decided on publication scope. +The checked-in profile `asr-publication-v1` is the source of truth. It measures +the publication quants Q8_0 and Q4_K_M when downloaded, on both `jfk` and +`dots`, with three iterations after one warmup, using the backends assigned to +the detected publication machine (M4 Max CPU/Metal or Ryzen 4750U CPU/Vulkan). +Every selected quant/sample/target cell is required. The Russian-only GigaAM +variants currently override the defaults with their published short `ru` +fixture; add a long Russian fixture to those overrides when one is available. +Add every future mandatory sample to the profile rather than restating the +matrix as command-line flags. + +Narrowed or widened sweeps are allowed for iteration, but sign-off is decided +by the profile. ### Step 4: Baseline capture (execute) @@ -90,12 +92,8 @@ pollute timings. Publication-scope baseline (default): ```bash -uv run scripts/bench/run.py \ +uv run scripts/bench/run.py --profile \ --models \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ --name -publication-baseline-$(date -u +%Y%m%dT%H%M%SZ) ``` @@ -201,13 +199,44 @@ Report: **Do not commit.** Bench reports under `reports/perf/` may or may not be committed at the user's discretion. +## Catalog (mandatory exit step) + +`reports/` is gitignored, so a bench report exists only on the machine that +produced it. The stage is not finished until the numbers are in the catalog. + +1. Run the profile-selected publishable measurement, not a hand-written matrix: + + ```bash + uv run scripts/bench/run.py --profile --models + ``` + + `--profile` stamps both `publication: true` and the profile id in the + report. Hypothesis-loop runs (the optimization iterations above) MUST NOT + carry it: on CPU they differ from the shipped figure by tens of percent, + and the whole point is that they never reach a doc. + +2. Fold them in and regenerate the tables: + + ```bash + uv run scripts/catalog/ingest_perf.py + uv run scripts/catalog/render.py + uv run scripts/catalog/check.py --publication-profile --models + ``` + + `ingest_perf.py` ingests publication runs only. It refuses a row whose xRT + would move more than 5% against what the doc already published, because + that is a different build rather than a better reading of the same one; + re-bench at the current sha instead of passing `--force`. + +3. `check.py` must report every speed row for this variant as measured and + sourced. A row carrying a bare xRT with no `engine_sha` is not publishable. + ## Postconditions -- At least one bench report covering every **publication-scope** cell - (`q8_0`/`q4_k_m` × `jfk`/`dots` × machine-supported backends, iters 3, - warmup 1) under `reports/perf//`. The final on-doc run - uses `--name -publication` so the reproduction command in - `docs/models/.md` matches a real artifact. +- A sourced speed measurement for Q8_0 and Q4_K_M when downloaded, on both + `jfk` and `dots`, for every profile machine/backend target. Legacy xRT-only + rows may satisfy a cell but are explicitly marked and should be replaced + during the long-form/memory sweep. - Schema completeness reported to the user; any gap is a known bench- harness task, not a porting task. - Optimization iteration loop scripted end-to-end (user drives diff --git a/.claude/skills/porting-7-wer/SKILL.md b/.claude/skills/porting-7-wer/SKILL.md index 0ab45c4c..d1953274 100644 --- a/.claude/skills/porting-7-wer/SKILL.md +++ b/.claude/skills/porting-7-wer/SKILL.md @@ -191,6 +191,40 @@ Report: artifacts, ignored by `.gitignore`. The summary tables and per-quant WER cells are what ships in-repo via Stage 8. +## Catalog (mandatory exit step) + +A score is only comparable to another score measured the same way, so the +decode recipe travels with the number. `scripts/wer/run.py` stamps it into the +JSONL batch header (timestamps, batch size, language, backend, engine sha, and +publication profile) and `scripts/wer/score.py` carries it into the +`.score.json`. + +Run any missing publication cells from the checked-in profile rather than +reconstructing the matrix with flags: + +```bash +modal run scripts/wer/remote/modal_sweep.py::publication_sweep \ + --models +# Score the JSONLs named by the sweep output, then: +uv run scripts/catalog/ingest_accuracy.py --models +uv run scripts/catalog/check.py --publication-profile --models +``` + +Record the featured download-table column explicitly. A variant routinely carries several +runs of one dataset differing only in batch size or timestamp mode, so +`headline_benchmark` in `catalog/.json` names the whole identity +tuple and the download table is rendered from it: + +```json +"headline_benchmark": {"dataset": "librispeech", "split": "test-clean", + "language": "en", "metric": "wer", + "batch_size": 1, "timestamps": "none"} +``` + +Then `uv run scripts/catalog/render.py && uv run scripts/catalog/check.py`. +Never hand-edit a WER into a doc or an HF card spec: both are rendered, and +CI fails when they drift. + ## Postconditions - `reports/wer/-..score.json` for every diff --git a/.claude/skills/porting-8-ship/SKILL.md b/.claude/skills/porting-8-ship/SKILL.md index 1e524138..de8d6bf1 100644 --- a/.claude/skills/porting-8-ship/SKILL.md +++ b/.claude/skills/porting-8-ship/SKILL.md @@ -20,8 +20,10 @@ is out of scope. - `reports/convert/-.json` (SHA of the reference GGUF). - `reports/wer/-..score.json` for every shipped preset. -- `reports/perf//*__.json` for at least one - reference machine. +- The catalog satisfies `asr-publication-v1` for this variant: complete + accuracy and every speed quant/sample/machine/backend cell selected by the + profile (currently Q8_0 and Q4_K_M on both `jfk` and `dots`, except an + explicit supported-language sample override such as GigaAM's `ru`). ## Workflow @@ -53,6 +55,7 @@ fabricate inputs. | Bench reports | `reports/perf//*__.json` | Stage 6 | | WER score JSONs | `reports/wer/-*..score.json` | Stage 7 | | WER summary | `reports/wer/..summary.md` | Stage 7 | +| Catalog publication profile | `catalog/_benchmark_profiles.json` + `catalog/.json` | Stages 6–7 | ```bash # Mechanical checklist runner @@ -72,9 +75,12 @@ ls reports/perf/*/**.json >/dev/null 2>&1 \ && echo "OK bench" || echo "MISSING bench" ls reports/wer/-*..score.json >/dev/null 2>&1 \ && echo "OK wer-scores" || echo "MISSING wer-scores" +uv run scripts/catalog/check.py --publication-profile --models ``` -Any `MISSING` halts Stage 8. +Any `MISSING` or publication-profile failure halts Stage 8. A +`legacy-published` provenance marker is honest migration provenance and may +satisfy the current gate; it is not permission to assign a guessed engine SHA. ### Step 2: Family doc (execute + ask-point) @@ -122,12 +128,11 @@ Author `docs/models/.md`. The repo ships a Jinja template at Two acceptable approaches: 1. **Copy from the closest existing model card** and edit by hand. Pull - facts directly from artifacts — quants from - `models//`, WER and the measured reference baseline from - `reports/wer/-*.score.json`, bench from - `reports/perf//`, and the acceptance dataset from - `intake.upstream_benchmarks[0]`. Ask for `target_hf_repo` since it - cannot be inferred. + facts directly from artifacts — published quants, accuracy, and speed from + `catalog/.json`; measured reference context from + `reports/wer/-*.score.json`; and the acceptance dataset from + `intake.upstream_benchmarks[0]`. `published_repo` is catalog data, not an + editorial value to ask for again. 2. **Render from the existing template** if the template already covers everything the variant needs and the variant has no rendered card yet. Build the context dict in a short ad-hoc `uv run python -c` @@ -139,26 +144,21 @@ Subsequent regenerations must respect human edits. ### Step 4: HF card YAML spec (execute) -Write `scripts/hf_cards/.yaml`, mirroring -`scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml`: +Write `scripts/hf_cards/.yaml`, mirroring a current nearby spec. +It contains editorial and release state only; identity, repositories, upstream +commit, license, language support, downloads, benchmark values, and capability +flags are derived from `catalog/.json`: ```yaml -hf_repo: -target_repo: -gguf> transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/.md - -upstream_commit: -pin_date: +pin_date: validation: reference: - commit: - date: + commit: + date: -license: -license_display: pipeline_tag: automatic-speech-recognition -languages: [] tags: - gguf - transcribe.cpp @@ -166,6 +166,15 @@ tags: - speech-to-text - - +summary: | + +``` + +Before rendering, verify that the validation pin is a real commit and its date +is today's UTC ship date (while `pin_date` is not in the future): + +```bash +uv run scripts/hf_cards/check_release.py ``` ### Step 5: Render the HF README (execute) @@ -205,9 +214,75 @@ Report: **Do not commit.** Keep the repo private; flipping it public is a future action, not part of this stage. +## Catalog (mandatory exit step) + +**Never hand-write the `capabilities` block.** Hand-writing it is how +moss-transcribe-diarize shipped as `diarize:false`, how the granite GGUFs came +to carry `stt.capability.translation` where the loader reads +`stt.capability.translate`, and how nemotron-3.5 shipped with no streaming KV +at all. Read it back out of the file you are shipping: + +```bash +uv run scripts/catalog/sync_capabilities.py +uv run scripts/catalog/render.py +uv run scripts/catalog/render.py --check +uv run scripts/catalog/check.py --publication-profile --models +uv run scripts/hf_cards/check_release.py +``` + +**Gate the upload, before `hf upload`, never after:** + +```bash +uv run --project scripts/envs/moonshine scripts/audit_gguf_metadata.py models/ +uv run scripts/catalog/sync_capabilities.py --repair --dry-run +``` + +`audit_gguf_metadata.py` exits non-zero on any metadata issue and was written +to gate exactly this. The `--repair --dry-run` pass must report `already +correct` for every quant: a capability KV that disagrees with the record means +the file and its own model card are about to contradict each other on the Hub. + +**Audit the file you are about to upload, and know where it came from.** Both +tools read `models//`, which for most variants is a symlink into +external storage holding whatever was built there last. That mirror can be +*older* than the Hub: a re-export or reconvert lands on the Hub and the local +copy is never refreshed. Auditing it then reports the mirror's gaps as if they +were the published file's, and repairing and uploading it republishes the older +build under an unchanged filename -- reverting whatever the published file had +gained. A stale `granite-speech-4.1-2b-nar` mirror here carried an older +upstream snapshot (`enc.ctc_bpe` 100353 vs the published 100352, no +`bpe_blank_id`) while looking like a perfectly ordinary repair target. + +`sync_capabilities.py --repair` now range-reads the published header and +refuses any file whose tensor shapes, dtypes, or unrelated KVs differ from what +is published; `--skip-published-check` overrides it, and is only correct when +the local file is deliberately newer than the Hub. Nothing enforces this for a +plain `hf upload`, so before re-uploading a variant you did not just convert, +either re-download it from its published repo or confirm the divergence is +intended. + +**Absence is not falsity.** `read_capability_bool()` returns OK and leaves the +field untouched when a key is missing, so a missing KV silently inherits the +family default. `granite/capabilities.cpp` sets `supports_translate = true` on +purpose so each variant's GGUF can lower it; `granite-speech-4.1-2b-plus` +spelled that key `stt.capability.translation`, the lowering never happened, +and a model that does not translate advertised that it does. Declare every +capability explicitly rather than relying on a default to be right. + +If `sync_capabilities.py` disagrees with what the model actually does, the +GGUF is wrong and the fix is a converter change plus a re-export. Do not +paper over it with an override in the card spec. + +The HF card spec under `scripts/hf_cards/` carries editorial copy only: +summary, tags, pipeline tag, validation pin, prose notes. Repos, commit, +licence, languages, quant table, capability flags and per-rig speedups are all +derived from the catalog record. `check.py` fails if a spec re-states one. + ## Postconditions -- Pre-flight checklist (Step 1) was green before any drafting. +- Pre-flight checklist and per-variant publication profile were green before + any drafting. +- HF validation commit exists and `validation.date` equals the UTC ship date. - `docs/porting/families/.md` filled and reviewed. - `docs/models/.md` authored with a populated download / WER / bench table. diff --git a/.github/workflows/catalog.yml b/.github/workflows/catalog.yml index 96604bb7..4994352b 100644 --- a/.github/workflows/catalog.yml +++ b/.github/workflows/catalog.yml @@ -6,12 +6,16 @@ on: paths: - "catalog/**" - "scripts/catalog/**" + - "scripts/hf_cards/**" + - "docs/models/**" - ".github/workflows/catalog.yml" push: branches: [main] paths: - "catalog/**" - "scripts/catalog/**" + - "scripts/hf_cards/**" + - "docs/models/**" - ".github/workflows/catalog.yml" concurrency: @@ -27,8 +31,18 @@ jobs: - uses: astral-sh/setup-uv@v8.2.0 - name: Canonical formatting run: uv run catalog/_format.py --check catalog/*.json - - name: Schema and integrity + - name: Schema, integrity, pairing and card specs run: uv run scripts/catalog/check.py + - name: Published tables match the catalog + run: uv run scripts/catalog/render.py --check + - name: Catalog HF card specs render + run: | + for record in catalog/*.json; do + variant="$(basename "$record" .json)" + case "$variant" in _*) continue ;; esac + spec="scripts/hf_cards/$variant.yaml" + uv run scripts/hf_cards/generate.py "$spec" --skip-upstream --stdout > /dev/null + done - name: Rebuild portable database run: | uv run scripts/catalog/db.py --out "$RUNNER_TEMP/catalog.db" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 32bfa6a9..d26f60db 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -127,7 +127,7 @@ jobs: run: | set -euo pipefail uv run catalog/_format.py --check catalog/*.json - uv run scripts/catalog/check.py + uv run scripts/catalog/check.py --publication-profile mkdir -p release-catalog uv run scripts/catalog/db.py --out release-catalog/catalog.db test "$(sqlite3 release-catalog/catalog.db 'PRAGMA integrity_check')" = "ok" diff --git a/README.md b/README.md index c79d661c..d3b3c277 100644 --- a/README.md +++ b/README.md @@ -20,14 +20,13 @@ C/C++ speech-to-text inference library. Runs diverse STT model families via [GGU | SenseVoice | `sensevoice-small` | [docs/models/sensevoice-small.md](docs/models/sensevoice-small.md) | | FunASR Nano | `fun-asr-nano-2512`, `fun-asr-mlt-nano-2512` | [docs/models/fun-asr-nano.md](docs/models/fun-asr-nano.md) | | Nemotron Speech Streaming | `nemotron-speech-streaming-en-0.6b` | [docs/models/nemotron-speech-streaming-en-0.6b.md](docs/models/nemotron-speech-streaming-en-0.6b.md) | -| Nemotron 3.5 ASR Streaming | `nemotron-3.5-asr-streaming-0.6b` (multilingual, 40 locales) | [docs/models/nemotron-3.5-asr-streaming-0.6b.md](docs/models/nemotron-3.5-asr-streaming-0.6b.md) | -| Multitalker Parakeet Streaming | `multitalker-parakeet-streaming-0.6b-v1` (single-speaker ASR path only) | [docs/models/multitalker-parakeet-streaming-0.6b-v1.md](docs/models/multitalker-parakeet-streaming-0.6b-v1.md) | +| Nemotron 3.5 ASR Streaming | `nemotron-3.5-asr-streaming-0.6b` (multilingual, 32 transcription locales) | [docs/models/nemotron-3.5-asr-streaming-0.6b.md](docs/models/nemotron-3.5-asr-streaming-0.6b.md) | +| Multitalker Parakeet Streaming | `multitalker-parakeet-streaming-0.6b-v1` (bundles an embedded Sortformer diarizer; speaker-attributed ASR with `--diarize`) | [docs/models/multitalker-parakeet-streaming-0.6b-v1.md](docs/models/multitalker-parakeet-streaming-0.6b-v1.md) | | Granite Speech 4 / 4.1 | `granite-4.0-1b-speech`, `granite-speech-4.1-2b{,-plus,-nar}` | [docs/models/granite-speech.md](docs/models/granite-speech.md) | | Voxtral | `voxtral-mini-3b-2507`, `voxtral-small-24b-2507` (audio-LLM; transcription + translation) | [docs/models/voxtral.md](docs/models/voxtral.md) | | Voxtral Realtime | `voxtral-mini-4b-realtime-2602` (streaming audio-LLM) | [docs/models/voxtral-realtime.md](docs/models/voxtral-realtime.md) | | MedASR | `medasr` (Conformer + CTC, English medical-dictation, gated) | [docs/models/medasr.md](docs/models/medasr.md) | | MOSS Transcribe-Diarize | `moss-transcribe-diarize` (audio-LLM; English + Chinese ASR with inline speaker diarization) | [docs/models/moss-transcribe-diarize.md](docs/models/moss-transcribe-diarize.md) | -| Sortformer | `diar_streaming_sortformer_4spk-v2.1` (streaming speaker diarizer, up to 4 speakers; no transcription) | [docs/models/diar_streaming_sortformer_4spk-v2.1.md](docs/models/diar_streaming_sortformer_4spk-v2.1.md) | Per-variant model cards live under [`docs/models/`](docs/models/). @@ -38,6 +37,33 @@ performance. Each release includes a queryable [`catalog.db`](https://github.com/handy-computer/transcribe.cpp/releases/latest/download/catalog.db) and [`SHA-256 checksum`](https://github.com/handy-computer/transcribe.cpp/releases/latest/download/catalog.db.sha256). Rebuild it locally with `uv run scripts/catalog/db.py --out catalog.db`. +The exact accuracy and published speed matrices and standard benchmark recipes +required for publication live in +[`catalog/_benchmark_profiles.json`](catalog/_benchmark_profiles.json). Run +`uv run scripts/catalog/check.py --publication-profile` to enforce it; the +ordinary catalog check reports the migration backlog without failing. + +Published tables are generated from it rather than hand-written. A model doc +delegates a region with a marker, and `scripts/catalog/render.py` rewrites +only what sits between the pair: + +```markdown + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | +... + +``` + +The Hugging Face card specs under [`scripts/hf_cards/`](scripts/hf_cards/) +work the same way: they carry only editorial copy (summary, tags, validation +pin) and `generate.py` derives the repos, licence, languages, quant table and +per-rig speedups from the record. CI fails if either drifts. + +```bash +uv run scripts/catalog/check.py # schema, integrity, pairing, card specs +uv run scripts/catalog/render.py # rewrite the marked doc regions +uv run scripts/catalog/render.py --check +``` ## Build diff --git a/catalog/_benchmark_profiles.json b/catalog/_benchmark_profiles.json new file mode 100644 index 00000000..bb638091 --- /dev/null +++ b/catalog/_benchmark_profiles.json @@ -0,0 +1,67 @@ +{ + "default": "asr-publication-v1", + "profiles": { + "asr-publication-v1": { + "description": "The complete benchmark set published for transcription models.", + "accuracy": [ + { + "dataset": "librispeech", + "split": "test-clean", + "languages": "english-if-supported", + "quants": "all-downloads", + "batch_size": 1, + "sort_by_length": true, + "timestamps": "none", + "gpu": "L4", + "backend": "cuda" + }, + { + "dataset": "fleurs", + "split": "test", + "languages": "supported-intersect-fleurs", + "quants": ["Q8_0"], + "batch_size": 8, + "sort_by_length": true, + "timestamps": "none", + "gpu": "L4", + "backend": "cuda" + } + ], + "speed": { + "quants": ["Q8_0","Q4_K_M"], + "samples": ["jfk","dots"], + "iterations": 3, + "warmup": 1, + "model_overrides": { + "gigaam-v3-ctc": { + "samples": ["ru"], + "reason": "Russian-only model; use the currently published supported-language clip until a long Russian fixture is added." + }, + "gigaam-v3-e2e-ctc": { + "samples": ["ru"], + "reason": "Russian-only model; use the currently published supported-language clip until a long Russian fixture is added." + }, + "gigaam-v3-e2e-rnnt": { + "samples": ["ru"], + "reason": "Russian-only model; use the currently published supported-language clip until a long Russian fixture is added." + }, + "gigaam-v3-rnnt": { + "samples": ["ru"], + "reason": "Russian-only model; use the currently published supported-language clip until a long Russian fixture is added." + } + }, + "targets": [ + { + "machine": "m4-max", + "backends": ["cpu","metal"] + }, + { + "machine": "ryzen-4750u", + "backends": ["cpu","vulkan"], + "cooldown_tctl_c": 55.0 + } + ] + } + } + } +} diff --git a/catalog/_schema.json b/catalog/_schema.json index 6719a359..1b1fc8dc 100644 --- a/catalog/_schema.json +++ b/catalog/_schema.json @@ -46,6 +46,38 @@ } } }, + "identity": { + "type": "object", + "description": "The general.* GGUF identity block, for the parts no other catalog field can supply. organization and repo_url come from upstream_repo, license from license.spdx, size_label from params; general.languages stays whatever the file already carries, which may legitimately narrow this record's languages (nemotron advertises 32 of its 40 locales). scripts/catalog/sync_capabilities.py --repair writes these into a published GGUF that predates add_general_identity() in scripts/lib/gguf_common.py.", + "required": ["name","basename","author"], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "general.name -- the friendly display name, e.g. \"Granite Speech 4.1 2B Plus\"." + }, + "basename": { + "type": "string", + "description": "general.basename -- the family slug, e.g. \"granite-speech\"." + }, + "size_label": { + "type": "string", + "description": "general.size_label. Carried, not computed from params: most converters bucket the parameter count but the parakeet profiles hardcode a marketing label (\"0.6B\" for a 638M-parameter nemotron)." + }, + "author": { + "type": "string", + "description": "general.author -- the creating lab, e.g. \"IBM\"." + }, + "license_name": { + "type": "string", + "description": "general.license.name. Distinct from license.display, which is the human label the docs print." + }, + "license_link": { + "type": "string", + "description": "general.license.link -- URL of the full licence text." + } + } + }, "upstream_repo": { "type": "string", "description": "The upstream model this port derives from." @@ -77,6 +109,32 @@ "type": "string" } }, + "benchmark_exceptions": { + "type": "array", + "description": "Narrow, reviewed exclusions from the repository publication profile. An exception removes only cells matched explicitly here; a free-form statement cannot satisfy a publication gate.", + "items": { + "type": "object", + "required": ["kind","match","reason"], + "additionalProperties": false, + "properties": { + "kind": { + "enum": ["accuracy","speed"] + }, + "match": { + "type": "object", + "minProperties": 1, + "additionalProperties": { + "type": "string" + }, + "description": "Cell fields to match. '*' is an explicit wildcard. Accuracy fields are dataset/split/language/quant; speed fields are machine/backend/quant/sample." + }, + "reason": { + "type": "string", + "minLength": 10 + } + } + } + }, "encoder_window_s": { "type": ["number","null"], "description": "Fixed encoder window, if the architecture has one (whisper 30 s)." @@ -239,7 +297,7 @@ }, "accuracy_benchmarks": { "type": "array", - "description": "One row per measured cell. Full dataset splits only -- a subset run is a bring-up artifact, not a published benchmark. Identity first and result second, so every row reads 'what ran and what did it score'.", + "description": "Published measurements only. New rows match a cell selected by catalog/_benchmark_profiles.json exactly; legacy-published rows may satisfy the same dataset/language/quant/metric under their honestly recorded historical recipe. Full dataset splits only -- a subset run is a bring-up artifact, not a published benchmark.", "items": { "type": "object", "required": [ @@ -257,7 +315,15 @@ }, "language": { "type": "string", - "description": "Canonical code, not the model's own spelling." + "description": "Canonical dataset code, not necessarily the model's own spelling." + }, + "language_hint": { + "type": ["string","null"], + "description": "Actual language spelling passed to the runtime. This differs from language for locale-conditioned models and aliases such as tl/fil." + }, + "backend": { + "enum": ["cpu","metal","vulkan","cuda",null], + "description": "Backend that generated the hypotheses." }, "quant": { "type": "string", @@ -265,7 +331,7 @@ }, "metric": { "enum": ["wer","cer","der","cpwer","accuracy"], - "description": "CER for zh/yue/ja/ko/th; der/cpwer for diarization; accuracy for LID." + "description": "CER for zh/yue/ja/ko/th/km/lo/my; der/cpwer for diarization; accuracy for LID." }, "err_pct": { "type": "number", @@ -297,6 +363,10 @@ "type": ["string","null"], "description": "transcribe.cpp commit that produced the hypotheses." }, + "measurement_provenance": { + "enum": ["legacy-published"], + "description": "Present only for a pre-profile result migrated from a published table whose original engine SHA is unavailable. This is an explicit provenance limitation, never a guessed commit." + }, "measured_on": { "type": ["string","null"], "format": "date" @@ -327,9 +397,36 @@ } } }, + "headline_benchmark": { + "type": ["object","null"], + "description": "Which accuracy row-set the variant PUBLISHES as its headline number -- the WER/CER/DER column of docs/models/.md and of the HF card. A renderer selects matching accuracy_benchmarks rows, one per quant. batch_size or timestamps may be null as an explicit wildcard for a legacy published table whose quants used mixed or incompletely recorded recipes. null for the whole object means the variant publishes no headline column.", + "required": ["dataset","split","language","metric","batch_size","timestamps"], + "additionalProperties": false, + "properties": { + "dataset": { + "type": "string" + }, + "split": { + "type": "string" + }, + "language": { + "type": "string" + }, + "metric": { + "enum": ["wer","cer","der","cpwer","accuracy"] + }, + "batch_size": { + "type": ["integer","null"], + "minimum": 1 + }, + "timestamps": { + "enum": ["none","segment","word","token",null] + } + } + }, "speed_benchmarks": { "type": "array", - "description": "One row per measured cell. The bench protocol -- machine coverage, backends, quants, sample durations, iteration and warmup counts, the thermal precondition -- belongs to porting-6-bench and is not restated per row.", + "description": "Published measurements only, one row per quant/sample/machine/backend cell selected by catalog/_benchmark_profiles.json. The profile also owns iteration and warmup counts and thermal preconditions; rows carry the measured identity and result.", "items": { "type": "object", "required": [ @@ -364,6 +461,14 @@ "type": "number", "description": "sample_duration_s / total. Stored rather than derived because it is the published figure and must not drift with rounding." }, + "wall_ms": { + "type": ["number","null"], + "description": "End-to-end wall time for the same run, mean over iters after warmup. Differs from total_ms by whatever the family spends outside mel/encode/decode: negligible for 60 of 64 benched variants (median wall/total 1.002) but 1.10x-1.46x on the granite audio-LLMs, whose published tables quote wall. Carried so a doc can publish either without the catalog having to pick." + }, + "xrt_wall": { + "type": ["number","null"], + "description": "sample_duration_s / wall. Stored, not derived, for the same reason as xrt_compute." + }, "load_ms": { "type": ["number","null"] }, @@ -381,6 +486,10 @@ "type": ["string","null"], "description": "A perf number without a build is not reproducible." }, + "measurement_provenance": { + "enum": ["legacy-published"], + "description": "Present only for a pre-profile result migrated from a published table whose original engine SHA is unavailable. The stored xRT remains publishable, but detailed timing/provenance awaits re-benchmarking." + }, "measured_on": { "type": ["string","null"], "format": "date" diff --git a/catalog/breeze-asr-25.json b/catalog/breeze-asr-25.json index 5e295521..1ab5e276 100644 --- a/catalog/breeze-asr-25.json +++ b/catalog/breeze-asr-25.json @@ -25,9 +25,9 @@ "long_form_strategy": "chunked-unbounded", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"targets":["en"],"verified":false}, + "translate": {"supported":true,"verified":false,"targets":["en"],"pairs":null}, "lang_detect": {"supported":true,"verified":false}, - "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["segment"]}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -41,38 +41,39 @@ {"quant":"Q4_K_M","filename":"Breeze-ASR-25-Q4_K_M.gguf","size_bytes":996526080} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.14,"ci95":[3.7,4.61],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":416,"del":96,"ins":90},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.16,"ci95":[3.72,4.6],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":420,"del":96,"ins":89},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.1,"ci95":[7.28,8.94],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1239,"del":1415,"ins":233},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":8.07,"ci95":[7.26,8.9],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1237,"del":1410,"ins":231},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.29,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.29,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.27,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.29,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.25,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.26,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"BF16","metric":"cer","err_pct":8.12,"ci95":[null,null],"n_utts":945,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"F16","metric":"cer","err_pct":8.11,"ci95":[null,null],"n_utts":945,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q6_K","metric":"cer","err_pct":8.12,"ci95":[null,null],"n_utts":945,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":8.12,"ci95":[null,null],"n_utts":945,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q4_K_M","metric":"cer","err_pct":8.08,"ci95":[null,null],"n_utts":945,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.14,"ci95":[3.7,4.61],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":416,"del":96,"ins":90},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.1,"ci95":[7.28,8.94],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1239,"del":1415,"ins":233},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.29,"ci95":[null,null],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.29,"ci95":[null,null],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.27,"ci95":[null,null],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.29,"ci95":[null,null],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.25,"ci95":[null,null],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.26,"ci95":[null,null],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "segment" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/canary-180m-flash.json b/catalog/canary-180m-flash.json index 7b8883eb..822e4700 100644 --- a/catalog/canary-180m-flash.json +++ b/catalog/canary-180m-flash.json @@ -15,9 +15,9 @@ "long_form_strategy": "hard-cap", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"targets":["en","de","es","fr"],"pairs":["en>de","de>en","en>es","es>en","en>fr","fr>en"],"verified":false}, + "translate": {"supported":true,"verified":false,"targets":["en","de","es","fr"],"pairs":["en>de","de>en","en>es","es>en","en>fr","fr>en"]}, "lang_detect": {"supported":false}, - "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "timestamps": {"supported":false}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -31,34 +31,41 @@ {"quant":"Q4_K_M","filename":"canary-180m-flash-Q4_K_M.gguf","size_bytes":139223744} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":7.33,"ci95":[6.67,8.0],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":977,"del":182,"ins":212},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.98,"ci95":[5.26,6.78],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":227,"ins":95},"empty_hyp":4,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.54,"ci95":[5.92,7.18],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":959,"del":154,"ins":412},"empty_hyp":1,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":8.53,"ci95":[7.78,9.34],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1049,"del":205,"ins":281},"empty_hyp":1,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.94,"ci95":[1.78,2.11],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":135,"ins":129},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.94,"ci95":[1.78,2.11],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":135,"ins":129},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.93,"ci95":[1.77,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":761,"del":138,"ins":126},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.93,"ci95":[1.77,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":138,"ins":123},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.9,"ci95":[1.74,2.07],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":750,"del":137,"ins":122},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.93,"ci95":[1.76,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":139,"ins":115},"empty_hyp":0,"utts_over_50pct":4} + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":7.33,"ci95":[6.67,8.0],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":977,"del":182,"ins":212},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.98,"ci95":[5.26,6.78],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":227,"ins":95},"empty_hyp":4,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.54,"ci95":[5.92,7.18],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":959,"del":154,"ins":412},"empty_hyp":1,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":8.53,"ci95":[7.78,9.34],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1049,"del":205,"ins":281},"empty_hyp":1,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.94,"ci95":[1.78,2.11],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":135,"ins":129},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.94,"ci95":[1.78,2.11],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":135,"ins":129},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.93,"ci95":[1.77,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":761,"del":138,"ins":126},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.93,"ci95":[1.77,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":138,"ins":123},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.9,"ci95":[1.74,2.07],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":750,"del":137,"ins":122},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.93,"ci95":[1.76,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":139,"ins":115},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":161.6,"xrt_compute":68.073,"load_ms":145.4,"mel_ms":1.7,"encode_ms":74.0,"decode_ms":85.9,"engine_sha":"8c583b2","measured_on":"2026-05-08","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":73.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":88.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":67.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":80.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":138.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":161.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":127.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":152.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":21.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":18.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":24.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":37.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":34.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":481.0,"xrt_compute":73.457,"load_ms":76.0,"mel_ms":2.2,"encode_ms":339.8,"decode_ms":139.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":482.1,"xrt_wall":73.292}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":123.4,"xrt_compute":89.14,"load_ms":72.5,"mel_ms":0.8,"encode_ms":96.6,"decode_ms":26.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":124.0,"xrt_wall":88.704}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":520.5,"xrt_compute":67.877,"load_ms":87.1,"mel_ms":2.2,"encode_ms":352.8,"decode_ms":165.5,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":521.6,"xrt_wall":67.733}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":136.5,"xrt_compute":80.572,"load_ms":68.6,"mel_ms":0.8,"encode_ms":104.2,"decode_ms":31.6,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":137.1,"xrt_wall":80.225}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":253.3,"xrt_compute":139.482,"load_ms":58.5,"mel_ms":2.2,"encode_ms":84.7,"decode_ms":166.5,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":255.0,"xrt_wall":138.564}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":66.6,"xrt_compute":165.212,"load_ms":52.8,"mel_ms":0.9,"encode_ms":32.7,"decode_ms":33.0,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":68.0,"xrt_wall":161.767}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":276.6,"xrt_compute":127.726,"load_ms":84.2,"mel_ms":2.2,"encode_ms":84.6,"decode_ms":189.8,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":278.3,"xrt_wall":126.978}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":71.1,"xrt_compute":154.725,"load_ms":87.1,"mel_ms":0.8,"encode_ms":32.1,"decode_ms":38.2,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":72.3,"xrt_wall":152.119}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1624.4,"xrt_compute":21.751,"load_ms":167.0,"mel_ms":70.4,"encode_ms":1012.9,"decode_ms":541.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1629.1,"xrt_wall":21.688}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":369.0,"xrt_compute":29.813,"load_ms":188.7,"mel_ms":19.1,"encode_ms":260.2,"decode_ms":89.7,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":370.5,"xrt_wall":29.688}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1911.9,"xrt_compute":18.48,"load_ms":214.0,"mel_ms":65.7,"encode_ms":1108.9,"decode_ms":737.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1915.1,"xrt_wall":18.449}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":452.7,"xrt_compute":24.297,"load_ms":271.6,"mel_ms":21.9,"encode_ms":296.6,"decode_ms":134.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":454.3,"xrt_wall":24.215}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1093.3,"xrt_compute":32.318,"load_ms":136.8,"mel_ms":70.0,"encode_ms":478.5,"decode_ms":544.7,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1099.7,"xrt_wall":32.13}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":292.8,"xrt_compute":37.568,"load_ms":144.9,"mel_ms":20.8,"encode_ms":159.4,"decode_ms":112.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":296.0,"xrt_wall":37.165}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1217.4,"xrt_compute":29.023,"load_ms":170.7,"mel_ms":62.9,"encode_ms":474.8,"decode_ms":679.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1221.7,"xrt_wall":28.921}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":312.6,"xrt_compute":35.188,"load_ms":307.9,"mel_ms":21.5,"encode_ms":155.9,"decode_ms":135.2,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":315.6,"xrt_wall":34.852} ] } diff --git a/catalog/canary-1b-flash.json b/catalog/canary-1b-flash.json index 49b9b5f8..1b0704b9 100644 --- a/catalog/canary-1b-flash.json +++ b/catalog/canary-1b-flash.json @@ -15,9 +15,9 @@ "long_form_strategy": "hard-cap", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"targets":["en","de","es","fr"],"pairs":["en>de","de>en","en>es","es>en","en>fr","fr>en"],"verified":false}, + "translate": {"supported":true,"verified":false,"targets":["en","de","es","fr"],"pairs":["en>de","de>en","en>es","es>en","en>fr","fr>en"]}, "lang_detect": {"supported":false}, - "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "timestamps": {"supported":false}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -31,38 +31,41 @@ {"quant":"Q4_K_M","filename":"canary-1b-flash-Q4_K_M.gguf","size_bytes":677141280} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.13,"ci95":[5.5,6.77],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":824,"del":162,"ins":162},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":6.11,"ci95":[5.5,6.71],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":830,"del":156,"ins":158},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.75,"ci95":[4.14,5.51],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":408,"del":225,"ins":59},"empty_hyp":4,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.17,"ci95":[4.45,6.07],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":422,"del":262,"ins":69},"empty_hyp":6,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.73,"ci95":[5.99,7.54],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":911,"del":242,"ins":417},"empty_hyp":6,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":6.8,"ci95":[6.07,7.6],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":924,"del":226,"ins":435},"empty_hyp":5,"utts_over_50pct":11}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":7.22,"ci95":[6.47,8.05],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":854,"del":150,"ins":295},"empty_hyp":1,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":7.4,"ci95":[6.65,8.22],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":878,"del":152,"ins":302},"empty_hyp":1,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.62,"ci95":[1.41,1.86],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":569,"del":196,"ins":96},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.62,"ci95":[1.41,1.86],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":569,"del":196,"ins":96},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.62,"ci95":[1.41,1.86],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":568,"del":196,"ins":96},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.65,"ci95":[1.42,1.9],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":562,"del":214,"ins":97},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.64,"ci95":[1.43,1.87],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":581,"del":189,"ins":99},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.59,"ci95":[1.41,1.8],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":586,"del":160,"ins":98},"empty_hyp":0,"utts_over_50pct":3} + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.13,"ci95":[5.5,6.77],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":824,"del":162,"ins":162},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.75,"ci95":[4.14,5.51],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":408,"del":225,"ins":59},"empty_hyp":4,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.73,"ci95":[5.99,7.54],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":911,"del":242,"ins":417},"empty_hyp":6,"utts_over_50pct":12,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":7.22,"ci95":[6.47,8.05],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":854,"del":150,"ins":295},"empty_hyp":1,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.62,"ci95":[1.41,1.86],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":569,"del":196,"ins":96},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.62,"ci95":[1.41,1.86],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":569,"del":196,"ins":96},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.62,"ci95":[1.41,1.86],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":568,"del":196,"ins":96},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.65,"ci95":[1.42,1.9],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":562,"del":214,"ins":97},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.64,"ci95":[1.43,1.87],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":581,"del":189,"ins":99},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.59,"ci95":[1.41,1.8],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":586,"del":160,"ins":98},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":252.6,"xrt_compute":43.553,"load_ms":513.8,"mel_ms":0.9,"encode_ms":174.8,"decode_ms":76.9,"engine_sha":"8c583b2","measured_on":"2026-05-08","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":25.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":101.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":98.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":95.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":103.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":14.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1508.0,"xrt_compute":23.43,"load_ms":206.4,"mel_ms":2.2,"encode_ms":1363.7,"decode_ms":142.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1509.9,"xrt_wall":23.4}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":429.0,"xrt_compute":25.639,"load_ms":213.2,"mel_ms":0.8,"encode_ms":401.8,"decode_ms":26.5,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":430.1,"xrt_wall":25.578}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1792.0,"xrt_compute":19.716,"load_ms":282.9,"mel_ms":2.2,"encode_ms":1619.8,"decode_ms":170.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1793.9,"xrt_wall":19.695}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":517.2,"xrt_compute":21.266,"load_ms":282.2,"mel_ms":0.8,"encode_ms":484.9,"decode_ms":31.6,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":518.3,"xrt_wall":21.224}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":346.2,"xrt_compute":102.064,"load_ms":173.4,"mel_ms":2.3,"encode_ms":179.8,"decode_ms":164.0,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":349.2,"xrt_wall":101.172}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":108.9,"xrt_compute":100.969,"load_ms":171.1,"mel_ms":0.9,"encode_ms":74.3,"decode_ms":33.8,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":111.3,"xrt_wall":98.841}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":365.6,"xrt_compute":96.654,"load_ms":237.7,"mel_ms":2.1,"encode_ms":179.8,"decode_ms":183.6,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":368.6,"xrt_wall":95.854}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":104.2,"xrt_compute":105.602,"load_ms":274.5,"mel_ms":0.9,"encode_ms":69.6,"decode_ms":33.7,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":106.6,"xrt_wall":103.155}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4503.0,"xrt_compute":7.846,"load_ms":815.9,"mel_ms":61.8,"encode_ms":3881.9,"decode_ms":559.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":4507.5,"xrt_wall":7.839}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1130.4,"xrt_compute":9.731,"load_ms":813.4,"mel_ms":18.5,"encode_ms":1019.6,"decode_ms":92.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1133.2,"xrt_wall":9.707}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5478.9,"xrt_compute":6.449,"load_ms":1201.9,"mel_ms":63.2,"encode_ms":4656.3,"decode_ms":759.4,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":5483.7,"xrt_wall":6.443}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1487.3,"xrt_compute":7.396,"load_ms":1220.6,"mel_ms":21.7,"encode_ms":1332.5,"decode_ms":133.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1490.4,"xrt_wall":7.38}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2304.3,"xrt_compute":15.333,"load_ms":424.2,"mel_ms":69.1,"encode_ms":1666.3,"decode_ms":568.9,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2313.6,"xrt_wall":15.271}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":698.9,"xrt_compute":15.739,"load_ms":406.6,"mel_ms":22.2,"encode_ms":562.6,"decode_ms":114.1,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":704.2,"xrt_wall":15.62}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2454.4,"xrt_compute":14.395,"load_ms":1152.0,"mel_ms":63.1,"encode_ms":1615.6,"decode_ms":775.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2461.9,"xrt_wall":14.352}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":758.1,"xrt_compute":14.51,"load_ms":1411.7,"mel_ms":28.1,"encode_ms":580.5,"decode_ms":149.5,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":763.5,"xrt_wall":14.408} ] } diff --git a/catalog/canary-1b-v2.json b/catalog/canary-1b-v2.json index 45d1e07e..7aa46206 100644 --- a/catalog/canary-1b-v2.json +++ b/catalog/canary-1b-v2.json @@ -19,9 +19,9 @@ "long_form_strategy": "hard-cap", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"targets":["bg","hr","cs","da","nl","en","et","fi","fr","de","el","hu","it","lt","mt","pl","pt","ro","sk","sl","es","sv","ru","uk"],"pairs":["en>bg","bg>en","en>hr","hr>en","en>cs","cs>en","en>da","da>en","en>nl","nl>en","en>et","et>en","en>fi","fi>en","en>fr","fr>en","en>de","de>en","en>el","el>en","en>hu","hu>en","en>it","it>en","en>lt","lt>en","en>mt","mt>en","en>pl","pl>en","en>pt","pt>en","en>ro","ro>en","en>sk","sk>en","en>sl","sl>en","en>es","es>en","en>sv","sv>en","en>ru","ru>en","en>uk","uk>en"],"verified":false}, + "translate": {"supported":true,"verified":false,"targets":["bg","hr","cs","da","nl","en","et","fi","fr","de","el","hu","it","lt","mt","pl","pt","ro","sk","sl","es","sv","ru","uk"],"pairs":["en>bg","bg>en","en>hr","hr>en","en>cs","cs>en","en>da","da>en","en>nl","nl>en","en>et","et>en","en>fi","fi>en","en>fr","fr>en","en>de","de>en","en>el","el>en","en>hu","hu>en","en>it","it>en","en>lt","lt>en","en>mt","mt>en","en>pl","pl>en","en>pt","pt>en","en>ro","ro>en","en>sk","sk>en","en>sl","sl>en","en>es","es>en","en>sv","sv>en","en>ru","ru>en","en>uk","uk>en"]}, "lang_detect": {"supported":false}, - "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "timestamps": {"supported":false}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -35,96 +35,62 @@ {"quant":"Q4_K_M","filename":"canary-1b-v2-Q4_K_M.gguf","size_bytes":735476448} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":9.22,"ci95":[8.43,10.04],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1026,"del":172,"ins":108},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q5_K_M","metric":"wer","err_pct":9.1,"ci95":[8.36,9.88],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1029,"del":166,"ins":95},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":8.56,"ci95":[7.91,9.23],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":960,"del":113,"ins":99},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q5_K_M","metric":"wer","err_pct":8.8,"ci95":[8.11,9.48],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":984,"del":115,"ins":106},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":11.34,"ci95":[10.73,11.93],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1746,"del":268,"ins":271},"empty_hyp":1,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q5_K_M","metric":"wer","err_pct":11.56,"ci95":[10.91,12.18],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1786,"del":279,"ins":266},"empty_hyp":1,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.46,"ci95":[4.05,4.89],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":646,"del":128,"ins":60},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.53,"ci95":[4.12,4.93],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":657,"del":126,"ins":64},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":26.02,"ci95":[25.01,26.98],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3740,"del":120,"ins":88},"empty_hyp":0,"utts_over_50pct":38}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q6_K","metric":"wer","err_pct":25.93,"ci95":[24.93,26.91],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3725,"del":120,"ins":90},"empty_hyp":0,"utts_over_50pct":37}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":25.99,"ci95":[25.0,27.0],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3727,"del":129,"ins":88},"empty_hyp":0,"utts_over_50pct":36}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q4_K_M","metric":"wer","err_pct":26.57,"ci95":[25.54,27.57],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3791,"del":145,"ins":96},"empty_hyp":0,"utts_over_50pct":42}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.47,"ci95":[4.03,4.95],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":450,"del":129,"ins":71},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":4.43,"ci95":[3.99,4.91],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":440,"del":133,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.51,"ci95":[4.07,4.97],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":447,"del":130,"ins":79},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":4.64,"ci95":[4.19,5.12],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":459,"del":137,"ins":80},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.1,"ci95":[2.78,3.44],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":547,"del":100,"ins":75},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q6_K","metric":"wer","err_pct":3.13,"ci95":[2.81,3.47],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":549,"del":103,"ins":77},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.1,"ci95":[2.79,3.43],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":546,"del":104,"ins":73},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q4_K_M","metric":"wer","err_pct":3.09,"ci95":[2.8,3.42],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":539,"del":104,"ins":78},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":12.72,"ci95":[12.04,13.43],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1423,"del":170,"ins":299},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q5_K_M","metric":"wer","err_pct":12.88,"ci95":[12.19,13.62],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1428,"del":173,"ins":316},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":8.86,"ci95":[8.21,9.55],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1045,"del":113,"ins":153},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q6_K","metric":"wer","err_pct":8.84,"ci95":[8.19,9.54],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1045,"del":112,"ins":151},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q5_K_M","metric":"wer","err_pct":8.91,"ci95":[8.27,9.59],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1057,"del":111,"ins":150},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q4_K_M","metric":"wer","err_pct":9.14,"ci95":[8.48,9.81],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1083,"del":105,"ins":164},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.09,"ci95":[4.61,5.59],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":681,"del":133,"ins":102},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q6_K","metric":"wer","err_pct":4.94,"ci95":[4.46,5.41],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":671,"del":127,"ins":91},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":4.82,"ci95":[4.33,5.32],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":654,"del":130,"ins":84},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q4_K_M","metric":"wer","err_pct":5.16,"ci95":[4.7,5.64],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":699,"del":146,"ins":84},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":8.4,"ci95":[7.81,9.01],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1192,"del":162,"ins":137},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q5_K_M","metric":"wer","err_pct":8.68,"ci95":[8.1,9.29],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1226,"del":172,"ins":143},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":13.06,"ci95":[12.39,13.8],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1731,"del":235,"ins":264},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q5_K_M","metric":"wer","err_pct":13.45,"ci95":[12.74,14.21],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1780,"del":230,"ins":286},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.1,"ci95":[2.77,3.46],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":511,"del":65,"ins":83},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.97,"ci95":[2.67,3.31],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":492,"del":63,"ins":77},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":13.45,"ci95":[12.74,14.16],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2046,"del":130,"ins":129},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q5_K_M","metric":"wer","err_pct":13.52,"ci95":[12.78,14.21],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2071,"del":130,"ins":115},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":10.41,"ci95":[9.79,11.09],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1315,"del":120,"ins":170},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q6_K","metric":"wer","err_pct":10.39,"ci95":[9.76,11.07],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1321,"del":112,"ins":168},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q5_K_M","metric":"wer","err_pct":10.54,"ci95":[9.92,11.19],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1342,"del":114,"ins":169},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q4_K_M","metric":"wer","err_pct":10.57,"ci95":[9.93,11.27],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1355,"del":120,"ins":155},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":19.75,"ci95":[17.99,22.38],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3410,"del":377,"ins":604},"empty_hyp":0,"utts_over_50pct":25}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q5_K_M","metric":"wer","err_pct":18.97,"ci95":[18.01,19.84],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3399,"del":412,"ins":407},"empty_hyp":0,"utts_over_50pct":23}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":6.28,"ci95":[5.63,6.98],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":389,"del":77,"ins":61},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":6.4,"ci95":[5.7,7.09],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":395,"del":76,"ins":66},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":6.88,"ci95":[6.32,7.44],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":800,"del":103,"ins":87},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q6_K","metric":"wer","err_pct":6.8,"ci95":[6.26,7.38],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":793,"del":106,"ins":80},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q5_K_M","metric":"wer","err_pct":6.96,"ci95":[6.37,7.59],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":793,"del":118,"ins":91},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q4_K_M","metric":"wer","err_pct":7.22,"ci95":[6.66,7.84],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":844,"del":98,"ins":97},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":4.5,"ci95":[4.04,5.01],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":705,"del":106,"ins":156},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":4.51,"ci95":[4.05,4.98],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":710,"del":101,"ins":157},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":6.87,"ci95":[6.35,7.38],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1076,"del":209,"ins":143},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q5_K_M","metric":"wer","err_pct":6.84,"ci95":[6.32,7.33],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1085,"del":205,"ins":133},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":7.83,"ci95":[7.24,8.48],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":992,"del":89,"ins":102},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":7.93,"ci95":[7.35,8.58],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1000,"del":92,"ins":106},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":6.84,"ci95":[6.14,7.54],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":797,"del":170,"ins":76},"empty_hyp":3,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q5_K_M","metric":"wer","err_pct":6.88,"ci95":[6.17,7.58],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":794,"del":175,"ins":80},"empty_hyp":3,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":12.76,"ci95":[11.35,14.61],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1500,"del":191,"ins":417},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q6_K","metric":"wer","err_pct":12.9,"ci95":[11.47,14.78],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1526,"del":187,"ins":418},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q5_K_M","metric":"wer","err_pct":12.93,"ci95":[11.5,14.78],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1538,"del":188,"ins":409},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q4_K_M","metric":"wer","err_pct":13.28,"ci95":[11.89,15.15],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1576,"del":203,"ins":414},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":9.74,"ci95":[9.06,10.44],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1148,"del":211,"ins":139},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q5_K_M","metric":"wer","err_pct":9.52,"ci95":[8.86,10.21],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1132,"del":203,"ins":130},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":10.58,"ci95":[9.87,11.27],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1283,"del":138,"ins":99},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q5_K_M","metric":"wer","err_pct":10.98,"ci95":[10.26,11.67],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1328,"del":148,"ins":102},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.92,"ci95":[1.78,2.08],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":757,"del":167,"ins":96},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.92,"ci95":[1.78,2.08],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":757,"del":167,"ins":96},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.91,"ci95":[1.76,2.07],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":751,"del":166,"ins":97},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.94,"ci95":[1.79,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":755,"del":171,"ins":101},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.93,"ci95":[1.78,2.08],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":759,"del":169,"ins":93},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.91,"ci95":[1.76,2.07],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":748,"del":163,"ins":102},"empty_hyp":0,"utts_over_50pct":5} + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":9.22,"ci95":[8.43,10.04],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1026,"del":172,"ins":108},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":8.56,"ci95":[7.91,9.23],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":960,"del":113,"ins":99},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":11.34,"ci95":[10.73,11.93],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1746,"del":268,"ins":271},"empty_hyp":1,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.46,"ci95":[4.05,4.89],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":646,"del":128,"ins":60},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":26.02,"ci95":[25.01,26.98],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3740,"del":120,"ins":88},"empty_hyp":0,"utts_over_50pct":38,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.47,"ci95":[4.03,4.95],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":450,"del":129,"ins":71},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.1,"ci95":[2.78,3.44],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":547,"del":100,"ins":75},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":12.72,"ci95":[12.04,13.43],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1423,"del":170,"ins":299},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":8.86,"ci95":[8.21,9.55],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1045,"del":113,"ins":153},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.09,"ci95":[4.61,5.59],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":681,"del":133,"ins":102},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":8.4,"ci95":[7.81,9.01],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1192,"del":162,"ins":137},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":13.06,"ci95":[12.39,13.8],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1731,"del":235,"ins":264},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.1,"ci95":[2.77,3.46],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":511,"del":65,"ins":83},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":13.45,"ci95":[12.74,14.16],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2046,"del":130,"ins":129},"empty_hyp":0,"utts_over_50pct":10,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":10.41,"ci95":[9.79,11.09],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1315,"del":120,"ins":170},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":19.75,"ci95":[17.99,22.38],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3410,"del":377,"ins":604},"empty_hyp":0,"utts_over_50pct":25,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":6.28,"ci95":[5.63,6.98],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":389,"del":77,"ins":61},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":6.88,"ci95":[6.32,7.44],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":800,"del":103,"ins":87},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":4.5,"ci95":[4.04,5.01],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":705,"del":106,"ins":156},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":6.87,"ci95":[6.35,7.38],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1076,"del":209,"ins":143},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":7.83,"ci95":[7.24,8.48],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":992,"del":89,"ins":102},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":6.84,"ci95":[6.14,7.54],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":797,"del":170,"ins":76},"empty_hyp":3,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":12.76,"ci95":[11.35,14.61],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1500,"del":191,"ins":417},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":9.74,"ci95":[9.06,10.44],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1148,"del":211,"ins":139},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":10.58,"ci95":[9.87,11.27],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1283,"del":138,"ins":99},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.92,"ci95":[1.78,2.08],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":757,"del":167,"ins":96},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.92,"ci95":[1.78,2.08],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":757,"del":167,"ins":96},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.91,"ci95":[1.76,2.07],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":751,"del":166,"ins":97},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.94,"ci95":[1.79,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":755,"del":171,"ins":101},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.93,"ci95":[1.78,2.08],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":759,"del":169,"ins":93},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.91,"ci95":[1.76,2.07],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":748,"del":163,"ins":102},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":277.2,"xrt_compute":39.679,"load_ms":267.3,"mel_ms":0.9,"encode_ms":174.8,"decode_ms":101.6,"engine_sha":"8c583b2","measured_on":"2026-05-08","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":21.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":24.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":87.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":90.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":88.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":14.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":13.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1655.1,"xrt_compute":21.347,"load_ms":219.6,"mel_ms":2.3,"encode_ms":1462.8,"decode_ms":190.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1657.1,"xrt_wall":21.321}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":452.5,"xrt_compute":24.309,"load_ms":222.5,"mel_ms":0.8,"encode_ms":413.6,"decode_ms":38.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":453.5,"xrt_wall":24.256}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1961.8,"xrt_compute":18.01,"load_ms":304.5,"mel_ms":2.3,"encode_ms":1727.5,"decode_ms":232.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1963.9,"xrt_wall":17.991}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":553.9,"xrt_compute":19.861,"load_ms":298.9,"mel_ms":0.8,"encode_ms":505.0,"decode_ms":48.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":555.0,"xrt_wall":19.821}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":403.1,"xrt_compute":87.649,"load_ms":174.7,"mel_ms":2.3,"encode_ms":181.1,"decode_ms":219.7,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":406.1,"xrt_wall":87.011}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":119.1,"xrt_compute":92.338,"load_ms":176.4,"mel_ms":1.0,"encode_ms":73.1,"decode_ms":45.1,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":121.6,"xrt_wall":90.465}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":427.9,"xrt_compute":82.572,"load_ms":255.4,"mel_ms":2.2,"encode_ms":179.4,"decode_ms":246.3,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":430.7,"xrt_wall":82.028}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":121.9,"xrt_compute":90.219,"load_ms":254.5,"mel_ms":0.9,"encode_ms":71.2,"decode_ms":49.8,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":124.3,"xrt_wall":88.483}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4699.7,"xrt_compute":7.518,"load_ms":1182.9,"mel_ms":61.5,"encode_ms":3867.9,"decode_ms":770.3,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":4704.1,"xrt_wall":7.511}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1158.5,"xrt_compute":9.495,"load_ms":1159.2,"mel_ms":17.8,"encode_ms":1002.4,"decode_ms":138.4,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1161.3,"xrt_wall":9.472}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5739.1,"xrt_compute":6.156,"load_ms":1736.3,"mel_ms":62.3,"encode_ms":4611.1,"decode_ms":1065.7,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":5743.9,"xrt_wall":6.151}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1551.6,"xrt_compute":7.089,"load_ms":1756.3,"mel_ms":20.9,"encode_ms":1325.3,"decode_ms":205.5,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1554.4,"xrt_wall":7.077}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2454.3,"xrt_compute":14.396,"load_ms":456.4,"mel_ms":65.4,"encode_ms":1651.1,"decode_ms":737.8,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2461.7,"xrt_wall":14.353}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":743.7,"xrt_compute":14.79,"load_ms":866.8,"mel_ms":23.1,"encode_ms":561.7,"decode_ms":159.0,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":748.8,"xrt_wall":14.69}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2690.8,"xrt_compute":13.13,"load_ms":1009.3,"mel_ms":67.2,"encode_ms":1612.3,"decode_ms":1011.4,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2698.3,"xrt_wall":13.094}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":824.7,"xrt_compute":13.338,"load_ms":1408.0,"mel_ms":30.4,"encode_ms":582.8,"decode_ms":211.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":829.9,"xrt_wall":13.255} ] } diff --git a/catalog/canary-1b.json b/catalog/canary-1b.json index 07bfd97f..4595a022 100644 --- a/catalog/canary-1b.json +++ b/catalog/canary-1b.json @@ -31,38 +31,41 @@ {"quant":"Q4_K_M","filename":"canary-1b-Q4_K_M.gguf","size_bytes":729686848} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.45,"ci95":[5.83,7.08],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":860,"del":163,"ins":185},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":6.53,"ci95":[5.9,7.17],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":859,"del":167,"ins":197},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.44,"ci95":[4.0,4.89],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":453,"del":122,"ins":71},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.48,"ci95":[4.01,4.92],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":459,"del":124,"ins":69},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.06,"ci95":[5.52,6.66],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":890,"del":104,"ins":420},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":5.99,"ci95":[5.45,6.6],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":878,"del":107,"ins":412},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":7.44,"ci95":[6.79,8.13],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":924,"del":114,"ins":300},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":7.44,"ci95":[6.81,8.16],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":913,"del":121,"ins":305},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.55,"ci95":[1.41,1.69],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":619,"del":112,"ins":92},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.55,"ci95":[1.41,1.69],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":619,"del":112,"ins":92},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.55,"ci95":[1.41,1.7],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":617,"del":115,"ins":91},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.57,"ci95":[1.43,1.71],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":623,"del":113,"ins":95},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.57,"ci95":[1.44,1.72],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":627,"del":113,"ins":95},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.55,"ci95":[1.41,1.7],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":627,"del":100,"ins":97},"empty_hyp":0,"utts_over_50pct":4} + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.45,"ci95":[5.83,7.08],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":860,"del":163,"ins":185},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.44,"ci95":[4.0,4.89],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":453,"del":122,"ins":71},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.06,"ci95":[5.52,6.66],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":890,"del":104,"ins":420},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":7.44,"ci95":[6.79,8.13],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":924,"del":114,"ins":300},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.55,"ci95":[1.41,1.69],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":619,"del":112,"ins":92},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.55,"ci95":[1.41,1.69],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":619,"del":112,"ins":92},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.55,"ci95":[1.41,1.7],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":617,"del":115,"ins":91},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.57,"ci95":[1.43,1.71],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":623,"del":113,"ins":95},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.57,"ci95":[1.44,1.72],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":627,"del":113,"ins":95},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.55,"ci95":[1.41,1.7],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":627,"del":100,"ins":97},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":561.2,"xrt_compute":19.6,"load_ms":270.3,"mel_ms":3.5,"encode_ms":200.8,"decode_ms":356.9,"engine_sha":"8c583b2","measured_on":"2026-05-08","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":20.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":25.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":37.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":55.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1714.2,"xrt_compute":20.611,"load_ms":209.6,"mel_ms":2.3,"encode_ms":1046.6,"decode_ms":665.3,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1716.0,"xrt_wall":20.589}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":425.3,"xrt_compute":25.866,"load_ms":216.4,"mel_ms":0.8,"encode_ms":310.2,"decode_ms":114.3,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":426.2,"xrt_wall":25.81}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2045.9,"xrt_compute":17.269,"load_ms":306.5,"mel_ms":2.2,"encode_ms":1247.8,"decode_ms":795.9,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2047.8,"xrt_wall":17.254}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":510.2,"xrt_compute":21.562,"load_ms":302.3,"mel_ms":0.8,"encode_ms":369.0,"decode_ms":140.4,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":511.1,"xrt_wall":21.524}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":931.4,"xrt_compute":37.935,"load_ms":187.6,"mel_ms":6.0,"encode_ms":152.9,"decode_ms":772.4,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":937.2,"xrt_wall":37.701}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":195.9,"xrt_compute":56.137,"load_ms":196.3,"mel_ms":1.0,"encode_ms":58.2,"decode_ms":136.7,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":198.1,"xrt_wall":55.525}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1026.4,"xrt_compute":34.425,"load_ms":274.7,"mel_ms":6.4,"encode_ms":152.4,"decode_ms":867.6,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1033.3,"xrt_wall":34.194}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":212.3,"xrt_compute":51.811,"load_ms":293.1,"mel_ms":1.8,"encode_ms":61.4,"decode_ms":149.1,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":216.0,"xrt_wall":50.929}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5964.8,"xrt_compute":5.923,"load_ms":761.3,"mel_ms":61.8,"encode_ms":2984.9,"decode_ms":2918.1,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":5969.2,"xrt_wall":5.919}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1233.2,"xrt_compute":8.92,"load_ms":784.1,"mel_ms":19.9,"encode_ms":779.9,"decode_ms":433.4,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1235.8,"xrt_wall":8.901}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7590.0,"xrt_compute":4.655,"load_ms":1038.0,"mel_ms":65.7,"encode_ms":3568.2,"decode_ms":3956.1,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":7594.6,"xrt_wall":4.652}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1703.1,"xrt_compute":6.459,"load_ms":1055.8,"mel_ms":21.8,"encode_ms":1035.5,"decode_ms":645.7,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1705.8,"xrt_wall":6.449}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3867.8,"xrt_compute":9.135,"load_ms":469.9,"mel_ms":79.1,"encode_ms":1296.4,"decode_ms":2492.3,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":3874.1,"xrt_wall":9.12}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":918.6,"xrt_compute":11.974,"load_ms":478.3,"mel_ms":24.8,"encode_ms":438.2,"decode_ms":455.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":923.4,"xrt_wall":11.913}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4620.7,"xrt_compute":7.646,"load_ms":941.3,"mel_ms":75.4,"encode_ms":1256.4,"decode_ms":3289.0,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":4627.2,"xrt_wall":7.636}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1070.3,"xrt_compute":10.277,"load_ms":1144.7,"mel_ms":38.1,"encode_ms":445.8,"decode_ms":586.5,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1074.6,"xrt_wall":10.236} ] } diff --git a/catalog/canary-qwen-2.5b.json b/catalog/canary-qwen-2.5b.json index d9046523..ff9535c7 100644 --- a/catalog/canary-qwen-2.5b.json +++ b/catalog/canary-qwen-2.5b.json @@ -31,31 +31,38 @@ {"quant":"Q4_K_M","filename":"canary-qwen-2.5b-Q4_K_M.gguf","size_bytes":1737575808} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.58,"ci95":[3.19,4.0],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":321,"del":115,"ins":85},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.79,"ci95":[3.37,4.22],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":339,"del":120,"ins":92},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.63,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":633,"del":123,"ins":110},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.63,"ci95":[1.48,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":631,"del":123,"ins":110},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.63,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":631,"del":122,"ins":110},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.63,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":630,"del":125,"ins":112},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.63,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":625,"del":127,"ins":113},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.63,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":643,"del":107,"ins":115},"empty_hyp":0,"utts_over_50pct":3} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.58,"ci95":[3.19,4.0],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":321,"del":115,"ins":85},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.63,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":633,"del":123,"ins":110},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.63,"ci95":[1.48,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":631,"del":123,"ins":110},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.63,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":631,"del":122,"ins":110},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.63,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":630,"del":125,"ins":112},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.63,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":625,"del":127,"ins":113},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.63,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":643,"del":107,"ins":115},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":47.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":45.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3998.3,"xrt_compute":8.837,"load_ms":468.1,"mel_ms":2.3,"encode_ms":1460.1,"decode_ms":2535.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":4001.7,"xrt_wall":8.829}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1057.9,"xrt_compute":10.398,"load_ms":466.5,"mel_ms":0.8,"encode_ms":396.2,"decode_ms":660.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":1060.2,"xrt_wall":10.376}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5135.2,"xrt_compute":6.88,"load_ms":691.4,"mel_ms":2.4,"encode_ms":1741.0,"decode_ms":3391.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":5138.7,"xrt_wall":6.876}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1417.8,"xrt_compute":7.759,"load_ms":688.8,"mel_ms":0.9,"encode_ms":490.3,"decode_ms":926.6,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":1421.0,"xrt_wall":7.741}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":903.3,"xrt_compute":39.113,"load_ms":458.1,"mel_ms":5.8,"encode_ms":195.4,"decode_ms":702.2,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":911.7,"xrt_wall":38.753}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":225.7,"xrt_compute":48.727,"load_ms":472.9,"mel_ms":1.7,"encode_ms":79.7,"decode_ms":144.3,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":232.4,"xrt_wall":47.339}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1015.8,"xrt_compute":34.783,"load_ms":696.7,"mel_ms":6.0,"encode_ms":180.9,"decode_ms":828.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":1023.8,"xrt_wall":34.51}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":240.7,"xrt_compute":45.709,"load_ms":706.6,"mel_ms":0.9,"encode_ms":71.6,"decode_ms":168.2,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":243.8,"xrt_wall":45.11}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":13492.1,"xrt_compute":2.619,"load_ms":2359.0,"mel_ms":62.7,"encode_ms":3884.3,"decode_ms":9545.1,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":13506.0,"xrt_wall":2.616}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3420.7,"xrt_compute":3.216,"load_ms":2016.8,"mel_ms":21.1,"encode_ms":1053.1,"decode_ms":2346.5,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":3432.0,"xrt_wall":3.205}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":18405.1,"xrt_compute":1.92,"load_ms":3872.0,"mel_ms":70.5,"encode_ms":4634.8,"decode_ms":13699.8,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":18419.3,"xrt_wall":1.918}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4720.5,"xrt_compute":2.33,"load_ms":3833.1,"mel_ms":22.3,"encode_ms":1305.0,"decode_ms":3393.2,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":4731.7,"xrt_wall":2.325}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8460.8,"xrt_compute":4.176,"load_ms":2220.4,"mel_ms":81.4,"encode_ms":1676.5,"decode_ms":6703.0,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":8477.0,"xrt_wall":4.168}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2100.4,"xrt_compute":5.237,"load_ms":2605.5,"mel_ms":29.8,"encode_ms":585.9,"decode_ms":1484.8,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":2113.8,"xrt_wall":5.204}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9704.3,"xrt_compute":3.641,"load_ms":3137.0,"mel_ms":81.3,"encode_ms":1674.0,"decode_ms":7949.0,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":9721.3,"xrt_wall":3.634}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2391.3,"xrt_compute":4.6,"load_ms":3508.2,"mel_ms":35.1,"encode_ms":581.4,"decode_ms":1774.8,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":2405.2,"xrt_wall":4.573} ] } diff --git a/catalog/cohere-transcribe-03-2026.json b/catalog/cohere-transcribe-03-2026.json index 5e20a09a..a7ac5514 100644 --- a/catalog/cohere-transcribe-03-2026.json +++ b/catalog/cohere-transcribe-03-2026.json @@ -31,58 +31,51 @@ {"quant":"Q4_K_M","filename":"cohere-transcribe-03-2026-Q4_K_M.gguf","size_bytes":1558162944} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":13.6,"ci95":[12.12,15.16],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":727,"del":305,"ins":88},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":13.62,"ci95":[12.14,15.21],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":737,"del":299,"ins":86},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":5.06,"ci95":[4.53,5.65],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":571,"del":292,"ins":84},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.79,"ci95":[4.32,5.29],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":568,"del":252,"ins":77},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":8.96,"ci95":[8.23,9.73],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1071,"del":218,"ins":71},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":8.94,"ci95":[8.24,9.7],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1055,"del":232,"ins":70},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.08,"ci95":[4.56,5.59],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":456,"del":181,"ins":103},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.05,"ci95":[4.54,5.53],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":458,"del":180,"ins":97},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.97,"ci95":[3.56,4.39],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":589,"del":234,"ins":103},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.83,"ci95":[3.44,4.25],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":597,"del":197,"ins":98},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.23,"ci95":[4.72,5.77],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":658,"del":175,"ins":108},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":5.23,"ci95":[4.73,5.77],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":177,"ins":104},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.24,"ci95":[2.86,3.61],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":417,"del":176,"ins":95},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":3.36,"ci95":[2.98,3.78],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":421,"del":197,"ins":95},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":5.13,"ci95":[4.48,5.84],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":871,"del":670,"ins":133},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":5.17,"ci95":[4.53,5.89],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":875,"del":678,"ins":135},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":6.57,"ci95":[5.5,7.65],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":485,"del":591,"ins":85},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":6.49,"ci95":[5.44,7.57],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":482,"del":592,"ins":73},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":7.16,"ci95":[6.15,8.15],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":350,"del":195,"ins":56},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":7.23,"ci95":[6.21,8.25],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":349,"del":204,"ins":54},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":6.15,"ci95":[5.51,6.85],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":607,"del":203,"ins":75},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q5_K_M","metric":"wer","err_pct":6.34,"ci95":[5.68,7.05],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":624,"del":214,"ins":74},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":5.18,"ci95":[4.71,5.66],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":714,"del":239,"ins":159},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":5.03,"ci95":[4.59,5.5],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":721,"del":200,"ins":159},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":7.39,"ci95":[6.8,7.98],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1324,"del":422,"ins":178},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q5_K_M","metric":"wer","err_pct":7.31,"ci95":[6.7,7.87],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1341,"del":387,"ins":175},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":11.18,"ci95":[10.19,12.21],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1769,"del":2036,"ins":180},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":11.03,"ci95":[10.07,12.01],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1761,"del":1998,"ins":174},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.27,"ci95":[1.13,1.41],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":510,"del":77,"ins":86},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.25,"ci95":[1.12,1.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":506,"del":74,"ins":85},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.24,"ci95":[1.11,1.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":501,"del":75,"ins":83},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.26,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.26,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.27,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.25,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":13.6,"ci95":[12.12,15.16],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":727,"del":305,"ins":88},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":5.06,"ci95":[4.53,5.65],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":571,"del":292,"ins":84},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":8.96,"ci95":[8.23,9.73],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1071,"del":218,"ins":71},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.08,"ci95":[4.56,5.59],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":456,"del":181,"ins":103},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.97,"ci95":[3.56,4.39],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":589,"del":234,"ins":103},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.23,"ci95":[4.72,5.77],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":658,"del":175,"ins":108},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.24,"ci95":[2.86,3.61],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":417,"del":176,"ins":95},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":5.13,"ci95":[4.48,5.84],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":871,"del":670,"ins":133},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":6.57,"ci95":[5.5,7.65],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":485,"del":591,"ins":85},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":7.16,"ci95":[6.15,8.15],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":350,"del":195,"ins":56},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":6.15,"ci95":[5.51,6.85],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":607,"del":203,"ins":75},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":5.18,"ci95":[4.71,5.66],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":714,"del":239,"ins":159},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":7.39,"ci95":[6.8,7.98],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1324,"del":422,"ins":178},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":11.18,"ci95":[10.19,12.21],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1769,"del":2036,"ins":180},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.27,"ci95":[1.13,1.41],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":510,"del":77,"ins":86},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.25,"ci95":[1.12,1.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":506,"del":74,"ins":85},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.24,"ci95":[1.11,1.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":501,"del":75,"ins":83},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.26,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.26,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.27,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": null, + "timestamps": null + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2892.4,"xrt_compute":3.803,"load_ms":2346.6,"mel_ms":13.3,"encode_ms":2747.5,"decode_ms":131.6,"engine_sha":"8345d95","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":2897.2,"xrt_wall":3.797}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":12391.7,"xrt_compute":2.851,"load_ms":2398.8,"mel_ms":38.2,"encode_ms":11445.5,"decode_ms":908.1,"engine_sha":"8345d95","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":12398.6,"xrt_wall":2.85}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3568.4,"xrt_compute":3.083,"load_ms":3299.3,"mel_ms":12.9,"encode_ms":3368.8,"decode_ms":186.7,"engine_sha":"8345d95","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":3573.0,"xrt_wall":3.079}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/cohere-transcribe-arabic-07-2026.json b/catalog/cohere-transcribe-arabic-07-2026.json index 4e0d2d6a..b17a668a 100644 --- a/catalog/cohere-transcribe-arabic-07-2026.json +++ b/catalog/cohere-transcribe-arabic-07-2026.json @@ -31,31 +31,39 @@ {"quant":"Q4_K_M","filename":"cohere-transcribe-arabic-07-2026-Q4_K_M.gguf","size_bytes":1558162848} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ar","quant":"BF16","metric":"wer","err_pct":11.02,"ci95":[9.64,12.53],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":527,"del":286,"ins":95},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"F16","metric":"wer","err_pct":11.0,"ci95":[9.6,12.5],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":525,"del":286,"ins":95},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":11.06,"ci95":[9.62,12.6],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":515,"del":293,"ins":103},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q6_K","metric":"wer","err_pct":11.07,"ci95":[9.63,12.59],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":517,"del":289,"ins":106},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":10.95,"ci95":[9.5,12.49],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":517,"del":298,"ins":87},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q4_K_M","metric":"wer","err_pct":11.18,"ci95":[9.78,12.67],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":526,"del":288,"ins":107},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.88,"ci95":[4.25,5.61],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":396,"del":222,"ins":93},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.88,"ci95":[4.25,5.57],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":402,"del":215,"ins":93},"empty_hyp":0,"utts_over_50pct":1} + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":11.06,"ci95":[9.62,12.6],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":515,"del":293,"ins":103},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.88,"ci95":[4.25,5.61],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":396,"del":222,"ins":93},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":1.34,"ci95":[1.21,1.48],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":531,"del":98,"ins":80},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"BF16","metric":"wer","err_pct":1.33,"ci95":[1.2,1.47],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":527,"del":99,"ins":81},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"F16","metric":"wer","err_pct":1.33,"ci95":[1.2,1.47],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":527,"del":99,"ins":81},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q6_K","metric":"wer","err_pct":1.34,"ci95":[1.21,1.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":531,"del":101,"ins":81},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q5_K_M","metric":"wer","err_pct":1.34,"ci95":[1.2,1.47],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":533,"del":97,"ins":79},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q4_K_M","metric":"wer","err_pct":1.34,"ci95":[1.2,1.48],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":537,"del":94,"ins":82},"empty_hyp":0,"utts_over_50pct":2} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "ar", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/diar_streaming_sortformer_4spk-v2.1.json b/catalog/diar_streaming_sortformer_4spk-v2.1.json deleted file mode 100644 index 08175145..00000000 --- a/catalog/diar_streaming_sortformer_4spk-v2.1.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "schema": "transcribe-catalog-v1", - "variant": "diar_streaming_sortformer_4spk-v2.1", - "family": "sortformer", - "display_name": "diar_streaming_sortformer_4spk-v2.1", - "params": 117711368, - "license": { - "spdx": "other", - "display": "NVIDIA Open Model License" - }, - "upstream_repo": "nvidia/diar_streaming_sortformer_4spk-v2.1", - "upstream_commit": "fafaab5", - "published_repo": "handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf", - "languages": ["en"], - "long_form_strategy": "hard-cap", - "capabilities": { - "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":false}, - "lang_detect": {"supported":false}, - "timestamps": {"supported":false}, - "streaming": {"supported":true,"verified":false}, - "diarize": {"supported":true,"max_speakers":4,"verified":false}, - "batching": {"supported":true,"verified":false} - }, - "downloads": [ - {"quant":"F32","filename":"diar_streaming_sortformer_4spk-v2.1-F32.gguf","size_bytes":470910560}, - {"quant":"F16","filename":"diar_streaming_sortformer_4spk-v2.1-F16.gguf","size_bytes":236606560}, - {"quant":"Q8_0","filename":"diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf","size_bytes":139310336} - ], - "accuracy_benchmarks": [ - {"dataset":"ami","split":"ihm-test","language":"en","quant":"F32","metric":"der","err_pct":14.59,"ci95":[null,null],"n_utts":16,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"ami","split":"ihm-test","language":"en","quant":"F16","metric":"der","err_pct":14.23,"ci95":[null,null],"n_utts":16,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"ami","split":"ihm-test","language":"en","quant":"Q8_0","metric":"der","err_pct":14.73,"ci95":[null,null],"n_utts":16,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} - ], - "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":136.3,"xrt_compute":80.679,"load_ms":66.4,"mel_ms":0.0,"encode_ms":136.3,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"F16","sample":"dots","sample_duration_s":35.332,"total_ms":794.2,"xrt_compute":44.487,"load_ms":68.5,"mel_ms":0.0,"encode_ms":794.2,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":108.8,"xrt_compute":101.092,"load_ms":49.4,"mel_ms":0.0,"encode_ms":108.8,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":684.9,"xrt_compute":51.588,"load_ms":49.9,"mel_ms":0.0,"encode_ms":684.9,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":68.2,"xrt_compute":161.226,"load_ms":155.2,"mel_ms":0.0,"encode_ms":68.2,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"dots","sample_duration_s":35.332,"total_ms":316.0,"xrt_compute":111.806,"load_ms":68.4,"mel_ms":0.0,"encode_ms":316.0,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":63.8,"xrt_compute":172.416,"load_ms":104.6,"mel_ms":0.0,"encode_ms":63.8,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":317.9,"xrt_compute":111.157,"load_ms":50.4,"mel_ms":0.0,"encode_ms":317.9,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null} - ] -} diff --git a/catalog/fun-asr-mlt-nano-2512.json b/catalog/fun-asr-mlt-nano-2512.json index b529e8ab..ee9226ab 100644 --- a/catalog/fun-asr-mlt-nano-2512.json +++ b/catalog/fun-asr-mlt-nano-2512.json @@ -35,84 +35,68 @@ {"quant":"Q4_K_M","filename":"Fun-ASR-MLT-Nano-2512-Q4_K_M.gguf","size_bytes":556975168} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":25.79,"ci95":[24.27,27.42],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1640,"del":354,"ins":130},"empty_hyp":0,"utts_over_50pct":34}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":84.98,"ci95":[81.46,89.45],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9508,"del":1740,"ins":794},"empty_hyp":0,"utts_over_50pct":595}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":53.56,"ci95":[51.65,55.84],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5732,"del":818,"ins":784},"empty_hyp":0,"utts_over_50pct":347}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":69.93,"ci95":[68.45,71.45],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10311,"del":3005,"ins":780},"empty_hyp":0,"utts_over_50pct":772}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":103.55,"ci95":[101.64,105.6],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11505,"del":3410,"ins":797},"empty_hyp":0,"utts_over_50pct":642}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.9,"ci95":[4.4,5.48],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":470,"del":124,"ins":120},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":5.0,"ci95":[4.52,5.55],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":481,"del":130,"ins":117},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.79,"ci95":[4.5,7.85],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":520,"del":135,"ins":188},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":5.45,"ci95":[4.69,6.31],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":489,"del":184,"ins":120},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":64.22,"ci95":[62.44,66.21],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7260,"del":839,"ins":1457},"empty_hyp":0,"utts_over_50pct":650}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":68.16,"ci95":[66.48,69.98],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7877,"del":845,"ins":1361},"empty_hyp":0,"utts_over_50pct":723}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":15.62,"ci95":[14.78,16.63],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2605,"del":798,"ins":726},"empty_hyp":0,"utts_over_50pct":32}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q6_K","metric":"wer","err_pct":15.18,"ci95":[14.41,16.05],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2658,"del":636,"ins":718},"empty_hyp":0,"utts_over_50pct":22}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q5_K_M","metric":"wer","err_pct":16.22,"ci95":[15.33,17.21],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2634,"del":914,"ins":739},"empty_hyp":0,"utts_over_50pct":37}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q4_K_M","metric":"wer","err_pct":16.43,"ci95":[15.59,17.33],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2798,"del":762,"ins":781},"empty_hyp":0,"utts_over_50pct":30}, - {"dataset":"fleurs","split":"test","language":"ga","quant":"Q8_0","metric":"wer","err_pct":100.08,"ci95":[97.48,103.28],"n_utts":842,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16222,"del":3744,"ins":1403},"empty_hyp":0,"utts_over_50pct":842}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":43.96,"ci95":[39.95,48.08],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3846,"del":3867,"ins":532},"empty_hyp":0,"utts_over_50pct":150}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":61.07,"ci95":[58.92,63.35],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8406,"del":1701,"ins":733},"empty_hyp":0,"utts_over_50pct":556}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":113.21,"ci95":[110.7,116.12],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15267,"del":1093,"ins":2972},"empty_hyp":0,"utts_over_50pct":904}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":7.52,"ci95":[6.85,8.23],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":744,"del":120,"ins":156},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q6_K","metric":"wer","err_pct":7.73,"ci95":[7.03,8.51],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":770,"del":130,"ins":148},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q5_K_M","metric":"wer","err_pct":7.8,"ci95":[7.1,8.61],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":760,"del":150,"ins":148},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q4_K_M","metric":"wer","err_pct":8.64,"ci95":[7.91,9.47],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":881,"del":132,"ins":159},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":2.32,"ci95":[2.01,2.65],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":492,"del":146,"ins":118},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q6_K","metric":"cer","err_pct":2.29,"ci95":[1.98,2.6],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":507,"del":127,"ins":114},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":2.34,"ci95":[2.03,2.67],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":505,"del":136,"ins":123},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q4_K_M","metric":"cer","err_pct":2.94,"ci95":[2.58,3.3],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":641,"del":196,"ins":122},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.2,"ci95":[4.21,6.29],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":348,"del":547,"ins":25},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":78.42,"ci95":[76.74,80.45],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11034,"del":1321,"ins":1081},"empty_hyp":0,"utts_over_50pct":919}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":56.71,"ci95":[55.13,58.29],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7277,"del":685,"ins":780},"empty_hyp":0,"utts_over_50pct":489}, - {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":9.92,"ci95":[9.01,10.83],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1079,"del":231,"ins":154},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":91.71,"ci95":[90.91,92.56],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16103,"del":3659,"ins":626},"empty_hyp":0,"utts_over_50pct":923}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":42.97,"ci95":[41.38,44.61],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2713,"del":483,"ins":412},"empty_hyp":0,"utts_over_50pct":112}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":59.34,"ci95":[57.63,61.19],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6800,"del":881,"ins":856},"empty_hyp":0,"utts_over_50pct":453}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":28.24,"ci95":[26.85,29.59],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4407,"del":979,"ins":678},"empty_hyp":0,"utts_over_50pct":141}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q6_K","metric":"wer","err_pct":30.17,"ci95":[27.78,33.46],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4491,"del":946,"ins":1041},"empty_hyp":0,"utts_over_50pct":149}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":30.11,"ci95":[28.6,31.69],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4606,"del":1162,"ins":697},"empty_hyp":0,"utts_over_50pct":153}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q4_K_M","metric":"wer","err_pct":49.2,"ci95":[46.85,51.78],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6400,"del":3372,"ins":792},"empty_hyp":0,"utts_over_50pct":390}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":74.39,"ci95":[72.46,76.44],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12052,"del":2025,"ins":1396},"empty_hyp":0,"utts_over_50pct":744}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":64.01,"ci95":[62.69,65.28],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8171,"del":904,"ins":683},"empty_hyp":0,"utts_over_50pct":586}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":75.22,"ci95":[73.63,76.87],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9891,"del":1916,"ins":615},"empty_hyp":0,"utts_over_50pct":726}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":75.36,"ci95":[72.22,79.42],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9020,"del":1094,"ins":1482},"empty_hyp":0,"utts_over_50pct":604}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":7.99,"ci95":[7.2,8.97],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3432,"del":1708,"ins":2651},"empty_hyp":0,"utts_over_50pct":19}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q6_K","metric":"cer","err_pct":8.08,"ci95":[7.2,9.07],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3627,"del":1636,"ins":2614},"empty_hyp":0,"utts_over_50pct":21}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q5_K_M","metric":"cer","err_pct":8.53,"ci95":[7.71,9.57],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3714,"del":1994,"ins":2608},"empty_hyp":0,"utts_over_50pct":26}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q4_K_M","metric":"cer","err_pct":11.04,"ci95":[9.88,12.33],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4811,"del":2566,"ins":3391},"empty_hyp":0,"utts_over_50pct":46}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":8.32,"ci95":[7.7,8.9],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1585,"del":210,"ins":371},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":12.72,"ci95":[11.82,13.59],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3249,"del":224,"ins":216},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"yue","quant":"Q6_K","metric":"cer","err_pct":12.87,"ci95":[12.0,13.84],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3300,"del":221,"ins":211},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"yue","quant":"Q5_K_M","metric":"cer","err_pct":12.91,"ci95":[12.03,13.88],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3304,"del":223,"ins":217},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"yue","quant":"Q4_K_M","metric":"cer","err_pct":14.56,"ci95":[13.58,15.66],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3738,"del":255,"ins":230},"empty_hyp":0,"utts_over_50pct":23}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.64,"ci95":[7.7,9.55],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1274,"del":1484,"ins":322},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q6_K","metric":"cer","err_pct":8.79,"ci95":[7.8,9.66],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1311,"del":1492,"ins":332},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":8.59,"ci95":[7.65,9.49],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1266,"del":1491,"ins":306},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q4_K_M","metric":"cer","err_pct":9.27,"ci95":[8.26,10.18],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1475,"del":1500,"ins":332},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.69,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.77,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.89,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":25.79,"ci95":[24.27,27.42],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1640,"del":354,"ins":130},"empty_hyp":0,"utts_over_50pct":34,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":84.98,"ci95":[81.46,89.45],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9508,"del":1740,"ins":794},"empty_hyp":0,"utts_over_50pct":595,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":53.56,"ci95":[51.65,55.84],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5732,"del":818,"ins":784},"empty_hyp":0,"utts_over_50pct":347,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":69.93,"ci95":[68.45,71.45],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10311,"del":3005,"ins":780},"empty_hyp":0,"utts_over_50pct":772,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":103.55,"ci95":[101.64,105.6],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11505,"del":3410,"ins":797},"empty_hyp":0,"utts_over_50pct":642,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.9,"ci95":[4.4,5.48],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":470,"del":124,"ins":120},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":64.22,"ci95":[62.44,66.21],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7260,"del":839,"ins":1457},"empty_hyp":0,"utts_over_50pct":650,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":68.16,"ci95":[66.48,69.98],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7877,"del":845,"ins":1361},"empty_hyp":0,"utts_over_50pct":723,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":15.62,"ci95":[14.78,16.63],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2605,"del":798,"ins":726},"empty_hyp":0,"utts_over_50pct":32,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ga","quant":"Q8_0","metric":"wer","err_pct":100.08,"ci95":[97.48,103.28],"n_utts":842,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16222,"del":3744,"ins":1403},"empty_hyp":0,"utts_over_50pct":842,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":43.96,"ci95":[39.95,48.08],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3846,"del":3867,"ins":532},"empty_hyp":0,"utts_over_50pct":150,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":61.07,"ci95":[58.92,63.35],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8406,"del":1701,"ins":733},"empty_hyp":0,"utts_over_50pct":556,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":113.21,"ci95":[110.7,116.12],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15267,"del":1093,"ins":2972},"empty_hyp":0,"utts_over_50pct":904,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":7.52,"ci95":[6.85,8.23],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":744,"del":120,"ins":156},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":2.32,"ci95":[2.01,2.65],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":492,"del":146,"ins":118},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.2,"ci95":[4.21,6.29],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":348,"del":547,"ins":25},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":78.42,"ci95":[76.74,80.45],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11034,"del":1321,"ins":1081},"empty_hyp":0,"utts_over_50pct":919,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":56.71,"ci95":[55.13,58.29],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7277,"del":685,"ins":780},"empty_hyp":0,"utts_over_50pct":489,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":9.92,"ci95":[9.01,10.83],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1079,"del":231,"ins":154},"empty_hyp":0,"utts_over_50pct":11,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":91.71,"ci95":[90.91,92.56],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16103,"del":3659,"ins":626},"empty_hyp":0,"utts_over_50pct":923,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":42.97,"ci95":[41.38,44.61],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2713,"del":483,"ins":412},"empty_hyp":0,"utts_over_50pct":112,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":59.34,"ci95":[57.63,61.19],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6800,"del":881,"ins":856},"empty_hyp":0,"utts_over_50pct":453,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":28.24,"ci95":[26.85,29.59],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4407,"del":979,"ins":678},"empty_hyp":0,"utts_over_50pct":141,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":74.39,"ci95":[72.46,76.44],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12052,"del":2025,"ins":1396},"empty_hyp":0,"utts_over_50pct":744,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":64.01,"ci95":[62.69,65.28],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8171,"del":904,"ins":683},"empty_hyp":0,"utts_over_50pct":586,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":75.22,"ci95":[73.63,76.87],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9891,"del":1916,"ins":615},"empty_hyp":0,"utts_over_50pct":726,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":75.36,"ci95":[72.22,79.42],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9020,"del":1094,"ins":1482},"empty_hyp":0,"utts_over_50pct":604,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":7.99,"ci95":[7.2,8.97],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3432,"del":1708,"ins":2651},"empty_hyp":0,"utts_over_50pct":19,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":8.32,"ci95":[7.7,8.9],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1585,"del":210,"ins":371},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":12.72,"ci95":[11.82,13.59],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3249,"del":224,"ins":216},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.64,"ci95":[7.7,9.55],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1274,"del":1484,"ins":322},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.69,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.77,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.89,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": null, + "timestamps": null + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":66.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":70.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":66.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":70.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6873.6,"xrt_compute":5.14,"load_ms":589.3,"mel_ms":104.1,"encode_ms":2031.5,"decode_ms":4737.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":6968.8,"xrt_wall":5.07}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1809.7,"xrt_compute":6.078,"load_ms":569.8,"mel_ms":31.6,"encode_ms":549.3,"decode_ms":1228.8,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1842.1,"xrt_wall":5.972}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8484.1,"xrt_compute":4.165,"load_ms":921.1,"mel_ms":105.8,"encode_ms":2275.3,"decode_ms":6103.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":8595.6,"xrt_wall":4.11}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2313.3,"xrt_compute":4.755,"load_ms":932.2,"mel_ms":33.4,"encode_ms":648.3,"decode_ms":1631.5,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2352.0,"xrt_wall":4.677}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3862.4,"xrt_compute":9.148,"load_ms":559.1,"mel_ms":104.2,"encode_ms":966.0,"decode_ms":2792.2,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":3915.3,"xrt_wall":9.024}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1001.7,"xrt_compute":10.981,"load_ms":558.7,"mel_ms":30.4,"encode_ms":274.4,"decode_ms":696.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1025.4,"xrt_wall":10.727}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4425.7,"xrt_compute":7.983,"load_ms":801.7,"mel_ms":107.2,"encode_ms":959.6,"decode_ms":3358.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":4478.8,"xrt_wall":7.889}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1118.3,"xrt_compute":9.836,"load_ms":790.3,"mel_ms":40.0,"encode_ms":270.7,"decode_ms":807.6,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1142.1,"xrt_wall":9.631} ] } diff --git a/catalog/fun-asr-nano-2512.json b/catalog/fun-asr-nano-2512.json index e51d9c65..ab66b905 100644 --- a/catalog/fun-asr-nano-2512.json +++ b/catalog/fun-asr-nano-2512.json @@ -31,33 +31,40 @@ {"quant":"Q4_K_M","filename":"Fun-ASR-Nano-2512-Q4_K_M.gguf","size_bytes":556974848} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.49,"ci95":[4.91,6.04],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":522,"del":126,"ins":151},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":8.5,"ci95":[7.86,9.22],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1976,"del":401,"ins":398},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.59,"ci95":[7.7,9.43],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1273,"del":1476,"ins":315},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.59,"ci95":[7.59,9.53],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1273,"del":1476,"ins":312},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.78,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.79,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.79,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.78,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.82,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.92,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.49,"ci95":[4.91,6.04],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":522,"del":126,"ins":151},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":8.5,"ci95":[7.86,9.22],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1976,"del":401,"ins":398},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.59,"ci95":[7.59,9.53],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1273,"del":1476,"ins":312},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.78,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.79,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.79,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.78,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.82,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.92,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": null, + "timestamps": null + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":86.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":73.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":86.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":73.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4424.0,"xrt_compute":7.986,"load_ms":562.9,"mel_ms":85.1,"encode_ms":1904.4,"decode_ms":2434.5,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":4515.7,"xrt_wall":7.824}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1118.6,"xrt_compute":9.834,"load_ms":554.4,"mel_ms":24.7,"encode_ms":524.9,"decode_ms":568.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1150.2,"xrt_wall":9.563}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2896.5,"xrt_compute":12.198,"load_ms":520.2,"mel_ms":95.9,"encode_ms":971.8,"decode_ms":1828.8,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2949.1,"xrt_wall":11.981}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":801.2,"xrt_compute":13.73,"load_ms":641.6,"mel_ms":35.4,"encode_ms":275.3,"decode_ms":490.5,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":825.2,"xrt_wall":13.33}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3690.1,"xrt_compute":9.575,"load_ms":746.7,"mel_ms":100.8,"encode_ms":947.3,"decode_ms":2642.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":3741.9,"xrt_wall":9.442}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":864.3,"xrt_compute":12.727,"load_ms":862.5,"mel_ms":37.7,"encode_ms":267.7,"decode_ms":559.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":887.0,"xrt_wall":12.402} ] } diff --git a/catalog/gigaam-v3-ctc.json b/catalog/gigaam-v3-ctc.json index 0aeffb92..7c5c02b1 100644 --- a/catalog/gigaam-v3-ctc.json +++ b/catalog/gigaam-v3-ctc.json @@ -31,22 +31,24 @@ {"quant":"Q4_K_M","filename":"gigaam-v3-ctc-Q4_K_M.gguf","size_bytes":182150080} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ru","quant":"F32","metric":"wer","err_pct":8.42,"ci95":[7.66,9.16],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":925,"del":104,"ins":242},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"F16","metric":"wer","err_pct":8.42,"ci95":[7.66,9.16],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":925,"del":104,"ins":242},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.4,"ci95":[7.65,9.16],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":923,"del":105,"ins":241},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q6_K","metric":"wer","err_pct":8.38,"ci95":[7.64,9.14],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":921,"del":105,"ins":240},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":8.29,"ci95":[7.55,9.02],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":908,"del":103,"ins":241},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q4_K_M","metric":"wer","err_pct":8.42,"ci95":[7.67,9.15],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":926,"del":105,"ins":240},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.42,"ci95":[7.64,9.15],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":924,"del":104,"ins":243},"empty_hyp":0,"utts_over_50pct":6} + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.42,"ci95":[7.64,9.15],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":924,"del":104,"ins":243},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "ru", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":142.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":142.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/gigaam-v3-e2e-ctc.json b/catalog/gigaam-v3-e2e-ctc.json index b2d5d08e..7742c068 100644 --- a/catalog/gigaam-v3-e2e-ctc.json +++ b/catalog/gigaam-v3-e2e-ctc.json @@ -31,22 +31,24 @@ {"quant":"Q4_K_M","filename":"gigaam-v3-e2e-ctc-Q4_K_M.gguf","size_bytes":182497888} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ru","quant":"F32","metric":"wer","err_pct":5.5,"ci95":[4.99,6.08],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":699,"del":84,"ins":48},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"F16","metric":"wer","err_pct":5.5,"ci95":[4.99,6.08],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":699,"del":84,"ins":48},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.5,"ci95":[4.98,6.07],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":699,"del":83,"ins":48},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q6_K","metric":"wer","err_pct":5.56,"ci95":[5.03,6.14],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":704,"del":84,"ins":52},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":5.58,"ci95":[5.04,6.15],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":705,"del":86,"ins":51},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.53,"ci95":[5.01,6.07],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":702,"del":84,"ins":49},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q4_K_M","metric":"wer","err_pct":5.57,"ci95":[null,null],"n_utts":775,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.53,"ci95":[5.01,6.07],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":702,"del":84,"ins":49},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "ru", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":111.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":111.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/gigaam-v3-e2e-rnnt.json b/catalog/gigaam-v3-e2e-rnnt.json index b73d7e3c..2999645f 100644 --- a/catalog/gigaam-v3-e2e-rnnt.json +++ b/catalog/gigaam-v3-e2e-rnnt.json @@ -31,22 +31,24 @@ {"quant":"Q4_K_M","filename":"gigaam-v3-e2e-rnnt-Q4_K_M.gguf","size_bytes":183948704} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ru","quant":"F32","metric":"wer","err_pct":5.35,"ci95":[4.85,5.9],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":98,"ins":49},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"F16","metric":"wer","err_pct":5.35,"ci95":[4.85,5.9],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":98,"ins":49},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.36,"ci95":[4.87,5.89],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":97,"ins":51},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q6_K","metric":"wer","err_pct":5.37,"ci95":[4.89,5.9],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":665,"del":98,"ins":48},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":5.42,"ci95":[4.94,5.97],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":672,"del":95,"ins":52},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q4_K_M","metric":"wer","err_pct":5.36,"ci95":[4.84,5.94],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":671,"del":94,"ins":44},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.35,"ci95":[4.85,5.9],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":98,"ins":49},"empty_hyp":0,"utts_over_50pct":1} + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.35,"ci95":[4.85,5.9],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":98,"ins":49},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "ru", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":26.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":89.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":88.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":26.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":89.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":88.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/gigaam-v3-rnnt.json b/catalog/gigaam-v3-rnnt.json index 97d716f5..f5498b92 100644 --- a/catalog/gigaam-v3-rnnt.json +++ b/catalog/gigaam-v3-rnnt.json @@ -31,22 +31,24 @@ {"quant":"Q4_K_M","filename":"gigaam-v3-rnnt-Q4_K_M.gguf","size_bytes":183246752} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ru","quant":"F32","metric":"wer","err_pct":8.08,"ci95":[7.36,8.78],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":99,"ins":221},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"F16","metric":"wer","err_pct":8.08,"ci95":[7.36,8.78],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":99,"ins":221},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.08,"ci95":[7.35,8.78],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":899,"del":99,"ins":222},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q6_K","metric":"wer","err_pct":8.07,"ci95":[7.35,8.78],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":97,"ins":222},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":8.12,"ci95":[7.38,8.84],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":98,"ins":228},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q4_K_M","metric":"wer","err_pct":8.12,"ci95":[7.4,8.85],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":901,"del":104,"ins":222},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.07,"ci95":[7.34,8.79],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":897,"del":100,"ins":222},"empty_hyp":0,"utts_over_50pct":5} + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.07,"ci95":[7.34,8.79],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":897,"del":100,"ins":222},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "ru", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":105.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":110.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":105.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":110.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/granite-4.0-1b-speech.json b/catalog/granite-4.0-1b-speech.json index 5cfcd60f..f4700e97 100644 --- a/catalog/granite-4.0-1b-speech.json +++ b/catalog/granite-4.0-1b-speech.json @@ -15,7 +15,7 @@ "long_form_strategy": "hard-cap", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":false}, + "translate": {"supported":true,"verified":false,"targets":["en","fr","de","es","pt","ja","it","zh"],"pairs":null,"note":"translation is reached via a separate chat-template prompt; scripts/convert-granite.py is authoritative for the target set"}, "lang_detect": {"supported":false}, "timestamps": {"supported":false}, "streaming": {"supported":false}, @@ -31,43 +31,43 @@ {"quant":"Q4_K_M","filename":"granite-4.0-1b-speech-Q4_K_M.gguf","size_bytes":1602904800} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":7.29,"ci95":[6.71,7.93],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1022,"del":192,"ins":151},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":7.37,"ci95":[6.78,8.01],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1035,"del":192,"ins":153},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.66,"ci95":[4.2,5.15],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":448,"del":115,"ins":116},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.65,"ci95":[4.21,5.14],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":450,"del":112,"ins":115},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":5.91,"ci95":[5.41,6.45],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":925,"del":189,"ins":264},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":6.01,"ci95":[5.51,6.52],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":931,"del":216,"ins":254},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":8.44,"ci95":[7.72,9.24],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1030,"del":201,"ins":288},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":8.76,"ci95":[8.04,9.56],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1066,"del":207,"ins":303},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":6.44,"ci95":[5.86,6.98],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1433,"del":302,"ins":369},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":6.51,"ci95":[5.94,7.03],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1442,"del":310,"ins":373},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":9.6,"ci95":[8.89,10.34],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1362,"del":217,"ins":482},"empty_hyp":0,"utts_over_50pct":19}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":9.6,"ci95":[8.86,10.39],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1376,"del":214,"ins":471},"empty_hyp":0,"utts_over_50pct":19}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.42,"ci95":[1.28,1.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":584,"del":76,"ins":93},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.42,"ci95":[1.29,1.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":586,"del":75,"ins":94},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.44,"ci95":[1.3,1.58],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":591,"del":76,"ins":95},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.41,"ci95":[1.28,1.55],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":582,"del":73,"ins":92},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.42,"ci95":[1.28,1.56],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":581,"del":77,"ins":93},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.48,"ci95":[1.34,1.63],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":602,"del":76,"ins":108},"empty_hyp":0,"utts_over_50pct":2} + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":7.29,"ci95":[6.71,7.93],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1022,"del":192,"ins":151},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.66,"ci95":[4.2,5.15],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":448,"del":115,"ins":116},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":5.91,"ci95":[5.41,6.45],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":925,"del":189,"ins":264},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":8.44,"ci95":[7.72,9.24],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1030,"del":201,"ins":288},"empty_hyp":0,"utts_over_50pct":11,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":6.44,"ci95":[5.86,6.98],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1433,"del":302,"ins":369},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":9.6,"ci95":[8.89,10.34],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1362,"del":217,"ins":482},"empty_hyp":0,"utts_over_50pct":19,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.42,"ci95":[1.28,1.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":584,"del":76,"ins":93},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.42,"ci95":[1.29,1.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":586,"del":75,"ins":94},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.44,"ci95":[1.3,1.58],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":591,"del":76,"ins":95},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.41,"ci95":[1.28,1.55],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":582,"del":73,"ins":92},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.42,"ci95":[1.28,1.56],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":581,"del":77,"ins":93},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.48,"ci95":[1.34,1.63],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":602,"del":76,"ins":108},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1946.6,"xrt_compute":5.651,"load_ms":6159.4,"mel_ms":0.8,"encode_ms":1193.8,"decode_ms":752.1,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":468.0,"xrt_compute":23.502,"load_ms":6236.4,"mel_ms":1.2,"encode_ms":309.2,"decode_ms":157.6,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":43.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":39.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4250.7,"xrt_compute":8.312,"load_ms":385.1,"mel_ms":1.9,"encode_ms":2796.9,"decode_ms":1452.0,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5147.8,"xrt_wall":6.863}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1299.2,"xrt_compute":8.467,"load_ms":381.2,"mel_ms":0.7,"encode_ms":827.8,"decode_ms":470.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1484.2,"xrt_wall":7.412}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4811.9,"xrt_compute":7.343,"load_ms":580.8,"mel_ms":2.0,"encode_ms":3316.3,"decode_ms":1493.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5964.5,"xrt_wall":5.924}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1554.6,"xrt_compute":7.076,"load_ms":576.4,"mel_ms":0.7,"encode_ms":1020.3,"decode_ms":533.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1796.5,"xrt_wall":6.123}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":347.2,"xrt_compute":101.774,"load_ms":384.8,"mel_ms":1.7,"encode_ms":238.2,"decode_ms":107.2,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":927.8,"xrt_wall":38.083}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":128.8,"xrt_compute":85.412,"load_ms":384.7,"mel_ms":0.8,"encode_ms":80.2,"decode_ms":47.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":254.3,"xrt_wall":43.252}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":340.7,"xrt_compute":103.695,"load_ms":603.2,"mel_ms":1.8,"encode_ms":235.0,"decode_ms":104.0,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1049.8,"xrt_wall":33.655}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":126.5,"xrt_compute":86.924,"load_ms":601.0,"mel_ms":0.7,"encode_ms":79.1,"decode_ms":46.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":284.0,"xrt_wall":38.731}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":13721.2,"xrt_compute":2.575,"load_ms":1532.9,"mel_ms":47.2,"encode_ms":9682.7,"decode_ms":3991.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":18084.8,"xrt_wall":1.954}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4298.6,"xrt_compute":2.559,"load_ms":2224.6,"mel_ms":15.2,"encode_ms":2884.1,"decode_ms":1399.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":5209.5,"xrt_wall":2.112}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":17385.3,"xrt_compute":2.032,"load_ms":3740.1,"mel_ms":52.6,"encode_ms":11702.5,"decode_ms":5630.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":24212.9,"xrt_wall":1.459}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5269.0,"xrt_compute":2.088,"load_ms":3692.4,"mel_ms":16.2,"encode_ms":3379.3,"decode_ms":1873.5,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":6719.5,"xrt_wall":1.637}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6607.5,"xrt_compute":5.347,"load_ms":1635.7,"mel_ms":60.9,"encode_ms":4776.8,"decode_ms":1769.8,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":11370.3,"xrt_wall":3.107}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2448.3,"xrt_compute":4.493,"load_ms":2150.1,"mel_ms":31.3,"encode_ms":1601.1,"decode_ms":815.9,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3471.9,"xrt_wall":3.168}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6501.4,"xrt_compute":5.435,"load_ms":3466.0,"mel_ms":62.0,"encode_ms":4702.1,"decode_ms":1737.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":12299.6,"xrt_wall":2.873}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2434.5,"xrt_compute":4.518,"load_ms":3339.5,"mel_ms":32.7,"encode_ms":1598.7,"decode_ms":803.0,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3710.9,"xrt_wall":2.964} ] } diff --git a/catalog/granite-speech-4.1-2b-nar.json b/catalog/granite-speech-4.1-2b-nar.json index c1453589..3ffb6075 100644 --- a/catalog/granite-speech-4.1-2b-nar.json +++ b/catalog/granite-speech-4.1-2b-nar.json @@ -3,11 +3,19 @@ "variant": "granite-speech-4.1-2b-nar", "family": "granite_speech_nar", "display_name": "granite-speech-4.1-2b-nar", - "params": 2254657341, + "params": 2254656316, "license": { "spdx": "apache-2.0", "display": "Apache-2.0" }, + "identity": { + "name": "Granite Speech 4.1 2B NAR", + "basename": "granite-speech-nar", + "size_label": "2.3B", + "author": "IBM", + "license_name": "Apache License 2.0", + "license_link": "https://www.apache.org/licenses/LICENSE-2.0" + }, "upstream_repo": "ibm-granite/granite-speech-4.1-2b-nar", "upstream_commit": "99a4df9", "published_repo": "handy-computer/granite-speech-4.1-2b-nar-gguf", @@ -31,43 +39,42 @@ {"quant":"Q4_K_M","filename":"granite-speech-4.1-2b-nar-Q4_K_M.gguf","size_bytes":1560008832} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.07,"ci95":[5.61,6.55],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":886,"del":167,"ins":83},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":5.98,"ci95":[5.55,6.47],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":886,"del":158,"ins":76},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.33,"ci95":[4.6,6.16],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":431,"del":270,"ins":75},"empty_hyp":1,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.41,"ci95":[4.67,6.2],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":433,"del":282,"ins":72},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":4.08,"ci95":[3.71,4.48],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":718,"del":141,"ins":92},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":4.14,"ci95":[3.78,4.53],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":728,"del":149,"ins":88},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":6.76,"ci95":[6.02,7.53],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":891,"del":241,"ins":84},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":6.84,"ci95":[6.1,7.59],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":896,"del":248,"ins":86},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":5.57,"ci95":[5.12,6.08],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":885,"del":134,"ins":177},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":5.6,"ci95":[5.15,6.11],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":899,"del":131,"ins":172},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.29,"ci95":[1.15,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":517,"del":84,"ins":82},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.29,"ci95":[1.15,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":518,"del":82,"ins":82},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.29,"ci95":[1.15,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":520,"del":81,"ins":82},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.29,"ci95":[1.15,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":517,"del":83,"ins":85},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.28,"ci95":[1.15,1.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":513,"del":87,"ins":80},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.34,"ci95":[1.19,1.48],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":538,"del":87,"ins":83},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.25,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.35,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.07,"ci95":[5.61,6.55],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":886,"del":167,"ins":83},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.33,"ci95":[4.6,6.16],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":431,"del":270,"ins":75},"empty_hyp":1,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":4.08,"ci95":[3.71,4.48],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":718,"del":141,"ins":92},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":6.76,"ci95":[6.02,7.53],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":891,"del":241,"ins":84},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":5.57,"ci95":[5.12,6.08],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":885,"del":134,"ins":177},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.29,"ci95":[1.15,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":517,"del":84,"ins":82},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.29,"ci95":[1.15,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":518,"del":82,"ins":82},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.29,"ci95":[1.15,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":520,"del":81,"ins":82},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.29,"ci95":[1.15,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":517,"del":83,"ins":85},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.28,"ci95":[1.15,1.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":513,"del":87,"ins":80},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.34,"ci95":[1.19,1.48],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":538,"del":87,"ins":83},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2433.4,"xrt_compute":4.52,"load_ms":1169.8,"mel_ms":0.8,"encode_ms":1443.5,"decode_ms":989.2,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":534.1,"xrt_compute":20.597,"load_ms":1210.1,"mel_ms":0.7,"encode_ms":349.3,"decode_ms":184.0,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":53.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":53.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":56.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":56.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6214.3,"xrt_compute":5.686,"load_ms":357.5,"mel_ms":2.0,"encode_ms":3488.4,"decode_ms":2723.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":6501.8,"xrt_wall":5.434}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1783.1,"xrt_compute":6.169,"load_ms":351.6,"mel_ms":0.7,"encode_ms":1072.6,"decode_ms":709.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1871.4,"xrt_wall":5.878}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7380.5,"xrt_compute":4.787,"load_ms":535.6,"mel_ms":2.2,"encode_ms":3980.7,"decode_ms":3397.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":7709.2,"xrt_wall":4.583}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1893.2,"xrt_compute":5.81,"load_ms":525.1,"mel_ms":0.8,"encode_ms":1214.8,"decode_ms":677.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1986.4,"xrt_wall":5.538}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":518.0,"xrt_compute":68.212,"load_ms":365.1,"mel_ms":2.0,"encode_ms":302.4,"decode_ms":213.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":664.2,"xrt_wall":53.196}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":163.1,"xrt_compute":67.434,"load_ms":364.2,"mel_ms":0.8,"encode_ms":99.7,"decode_ms":62.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":208.8,"xrt_wall":52.683}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":491.3,"xrt_compute":71.911,"load_ms":551.6,"mel_ms":1.9,"encode_ms":285.8,"decode_ms":203.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":635.2,"xrt_wall":55.62}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":151.3,"xrt_compute":72.697,"load_ms":549.7,"mel_ms":0.8,"encode_ms":93.7,"decode_ms":56.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":196.0,"xrt_wall":56.121}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":19551.7,"xrt_compute":1.807,"load_ms":1182.7,"mel_ms":49.8,"encode_ms":11774.3,"decode_ms":7727.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":20388.3,"xrt_wall":1.733}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5461.8,"xrt_compute":2.014,"load_ms":1988.4,"mel_ms":15.4,"encode_ms":3535.7,"decode_ms":1910.7,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":5708.1,"xrt_wall":1.927}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":23770.5,"xrt_compute":1.486,"load_ms":3180.0,"mel_ms":56.9,"encode_ms":13813.3,"decode_ms":9900.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":24806.2,"xrt_wall":1.424}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6754.9,"xrt_compute":1.628,"load_ms":3191.0,"mel_ms":15.9,"encode_ms":4207.4,"decode_ms":2531.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":7053.1,"xrt_wall":1.56}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8525.3,"xrt_compute":4.144,"load_ms":1083.1,"mel_ms":46.9,"encode_ms":5414.3,"decode_ms":3064.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":9846.0,"xrt_wall":3.588}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2753.2,"xrt_compute":3.995,"load_ms":1781.8,"mel_ms":15.3,"encode_ms":1831.2,"decode_ms":906.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3163.3,"xrt_wall":3.477}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8322.8,"xrt_compute":4.245,"load_ms":1868.9,"mel_ms":49.2,"encode_ms":5318.6,"decode_ms":2955.0,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":9569.1,"xrt_wall":3.692}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2682.8,"xrt_compute":4.1,"load_ms":2896.8,"mel_ms":15.5,"encode_ms":1779.5,"decode_ms":887.8,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3061.4,"xrt_wall":3.593} ] } diff --git a/catalog/granite-speech-4.1-2b-plus.json b/catalog/granite-speech-4.1-2b-plus.json index b5e9c359..81f7bf35 100644 --- a/catalog/granite-speech-4.1-2b-plus.json +++ b/catalog/granite-speech-4.1-2b-plus.json @@ -8,6 +8,13 @@ "spdx": "apache-2.0", "display": "Apache-2.0" }, + "identity": { + "name": "Granite Speech 4.1 2B Plus", + "basename": "granite-speech", + "author": "IBM", + "license_name": "Apache License 2.0", + "license_link": "https://www.apache.org/licenses/LICENSE-2.0" + }, "upstream_repo": "ibm-granite/granite-speech-4.1-2b-plus", "upstream_commit": "edd3bf5", "published_repo": "handy-computer/granite-speech-4.1-2b-plus-gguf", @@ -15,7 +22,7 @@ "long_form_strategy": "hard-cap", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":false}, + "translate": {"supported":false,"note":"upstream lists ASR + speaker diarization, not translation; the family default is true so the GGUF must lower it explicitly"}, "lang_detect": {"supported":false}, "timestamps": {"supported":true,"granularities":["word"],"verified":false}, "streaming": {"supported":false}, @@ -31,41 +38,42 @@ {"quant":"Q4_K_M","filename":"granite-speech-4.1-2b-plus-Q4_K_M.gguf","size_bytes":1489663424} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":8.06,"ci95":[7.46,8.69],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1129,"del":224,"ins":156},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":8.36,"ci95":[7.77,9.0],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1170,"del":237,"ins":157},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.46,"ci95":[3.97,4.94],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":435,"del":114,"ins":100},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.5,"ci95":[4.03,4.98],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":433,"del":120,"ins":102},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.53,"ci95":[5.96,7.12],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1030,"del":202,"ins":291},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":6.5,"ci95":[5.9,7.12],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1026,"del":222,"ins":268},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":8.82,"ci95":[8.11,9.6],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1113,"del":168,"ins":307},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":9.11,"ci95":[8.37,9.88],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1159,"del":163,"ins":317},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":10.61,"ci95":[9.59,11.88],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1498,"del":220,"ins":560},"empty_hyp":0,"utts_over_50pct":18}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":10.96,"ci95":[9.74,12.58],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1541,"del":208,"ins":605},"empty_hyp":0,"utts_over_50pct":20}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.49,"ci95":[1.35,1.64],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":600,"del":81,"ins":110},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.48,"ci95":[1.34,1.63],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":596,"del":81,"ins":109},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.5,"ci95":[1.35,1.64],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":601,"del":81,"ins":111},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.46,"ci95":[1.32,1.61],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":594,"del":79,"ins":103},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.48,"ci95":[1.33,1.63],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":600,"del":80,"ins":106},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.56,"ci95":[1.42,1.72],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":627,"del":86,"ins":116},"empty_hyp":0,"utts_over_50pct":4} + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":8.06,"ci95":[7.46,8.69],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1129,"del":224,"ins":156},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.46,"ci95":[3.97,4.94],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":435,"del":114,"ins":100},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.53,"ci95":[5.96,7.12],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1030,"del":202,"ins":291},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":8.82,"ci95":[8.11,9.6],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1113,"del":168,"ins":307},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":10.61,"ci95":[9.59,11.88],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1498,"del":220,"ins":560},"empty_hyp":0,"utts_over_50pct":18,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.49,"ci95":[1.35,1.64],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":600,"del":81,"ins":110},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.48,"ci95":[1.34,1.63],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":596,"del":81,"ins":109},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.5,"ci95":[1.35,1.64],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":601,"del":81,"ins":111},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.46,"ci95":[1.32,1.61],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":594,"del":79,"ins":103},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.48,"ci95":[1.33,1.63],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":600,"del":80,"ins":106},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.56,"ci95":[1.42,1.72],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":627,"del":86,"ins":116},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1900.1,"xrt_compute":5.789,"load_ms":5647.8,"mel_ms":0.7,"encode_ms":1209.0,"decode_ms":690.3,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":470.9,"xrt_compute":23.358,"load_ms":5691.2,"mel_ms":0.7,"encode_ms":309.2,"decode_ms":161.0,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":39.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4543.7,"xrt_compute":7.776,"load_ms":358.2,"mel_ms":2.3,"encode_ms":2935.7,"decode_ms":1605.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5708.4,"xrt_wall":6.19}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1644.3,"xrt_compute":6.69,"load_ms":359.8,"mel_ms":0.8,"encode_ms":917.6,"decode_ms":725.9,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1873.6,"xrt_wall":5.871}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5489.8,"xrt_compute":6.436,"load_ms":550.5,"mel_ms":2.0,"encode_ms":3406.3,"decode_ms":2081.5,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":6905.7,"xrt_wall":5.116}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1770.1,"xrt_compute":6.214,"load_ms":538.8,"mel_ms":0.7,"encode_ms":1052.6,"decode_ms":716.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":2044.8,"xrt_wall":5.38}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":358.7,"xrt_compute":98.494,"load_ms":390.8,"mel_ms":1.9,"encode_ms":240.4,"decode_ms":116.4,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1024.4,"xrt_wall":34.49}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":139.5,"xrt_compute":78.833,"load_ms":372.1,"mel_ms":0.8,"encode_ms":81.1,"decode_ms":57.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":280.4,"xrt_wall":39.231}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":351.2,"xrt_compute":100.607,"load_ms":560.6,"mel_ms":1.9,"encode_ms":236.4,"decode_ms":112.9,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1179.5,"xrt_wall":29.956}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":136.0,"xrt_compute":80.875,"load_ms":567.3,"mel_ms":0.8,"encode_ms":79.6,"decode_ms":55.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":308.2,"xrt_wall":35.688}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15056.3,"xrt_compute":2.347,"load_ms":1325.1,"mel_ms":48.2,"encode_ms":10235.5,"decode_ms":4772.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":20451.6,"xrt_wall":1.728}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5022.2,"xrt_compute":2.19,"load_ms":2045.7,"mel_ms":16.6,"encode_ms":3033.5,"decode_ms":1972.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":6077.7,"xrt_wall":1.81}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":18193.0,"xrt_compute":1.942,"load_ms":2813.3,"mel_ms":50.4,"encode_ms":11756.7,"decode_ms":6385.9,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":26230.4,"xrt_wall":1.347}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6204.1,"xrt_compute":1.773,"load_ms":3457.8,"mel_ms":16.8,"encode_ms":3552.8,"decode_ms":2634.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":7799.6,"xrt_wall":1.41}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6833.1,"xrt_compute":5.171,"load_ms":1193.0,"mel_ms":59.9,"encode_ms":4749.7,"decode_ms":2023.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":12294.1,"xrt_wall":2.874}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2499.1,"xrt_compute":4.402,"load_ms":1946.9,"mel_ms":31.4,"encode_ms":1608.1,"decode_ms":859.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3631.1,"xrt_wall":3.029}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6726.0,"xrt_compute":5.253,"load_ms":2593.8,"mel_ms":63.3,"encode_ms":4688.4,"decode_ms":1974.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":13420.0,"xrt_wall":2.633}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2456.2,"xrt_compute":4.478,"load_ms":3370.4,"mel_ms":31.4,"encode_ms":1580.3,"decode_ms":844.5,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3846.2,"xrt_wall":2.86} ] } diff --git a/catalog/granite-speech-4.1-2b.json b/catalog/granite-speech-4.1-2b.json index b69c9e19..1515c527 100644 --- a/catalog/granite-speech-4.1-2b.json +++ b/catalog/granite-speech-4.1-2b.json @@ -3,7 +3,7 @@ "variant": "granite-speech-4.1-2b", "family": "granite_speech", "display_name": "granite-speech-4.1-2b", - "params": 2111899452, + "params": 2313228092, "license": { "spdx": "apache-2.0", "display": "Apache-2.0" @@ -11,15 +11,15 @@ "upstream_repo": "ibm-granite/granite-speech-4.1-2b", "upstream_commit": "8f4bb5f", "published_repo": "handy-computer/granite-speech-4.1-2b-gguf", - "languages": ["en","fr","de","es","pt"], + "languages": ["en","fr","de","es","pt","ja"], "long_form_strategy": "hard-cap", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":false}, + "translate": {"supported":true,"verified":false,"targets":["en","fr","de","es","pt","ja","it","zh"],"pairs":null,"note":"translation is reached via a separate chat-template prompt; scripts/convert-granite.py is authoritative for the target set"}, "lang_detect": {"supported":false}, - "timestamps": {"supported":true,"granularities":["word"],"verified":false}, + "timestamps": {"supported":false}, "streaming": {"supported":false}, - "diarize": {"supported":true,"verified":false}, + "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} }, "downloads": [ @@ -31,43 +31,43 @@ {"quant":"Q4_K_M","filename":"granite-speech-4.1-2b-Q4_K_M.gguf","size_bytes":1602904800} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.25,"ci95":[5.66,6.88],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":879,"del":169,"ins":122},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":6.12,"ci95":[5.6,6.68],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":889,"del":147,"ins":110},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.14,"ci95":[3.68,4.62],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":384,"del":134,"ins":85},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.16,"ci95":[3.73,4.61],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":393,"del":126,"ins":87},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":5.48,"ci95":[4.99,5.97],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":849,"del":149,"ins":279},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":5.52,"ci95":[5.04,6.03],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":856,"del":152,"ins":280},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":7.61,"ci95":[6.9,8.36],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":922,"del":171,"ins":277},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":7.7,"ci95":[7.0,8.45],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":943,"del":170,"ins":273},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":6.3,"ci95":[5.75,6.88],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1377,"del":331,"ins":350},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":6.59,"ci95":[6.03,7.15],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1460,"del":339,"ins":354},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":9.8,"ci95":[9.08,10.66],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1341,"del":163,"ins":601},"empty_hyp":0,"utts_over_50pct":18}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":9.54,"ci95":[8.86,10.35],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1313,"del":166,"ins":569},"empty_hyp":0,"utts_over_50pct":19}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.31,"ci95":[1.18,1.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":537,"del":63,"ins":94},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.32,"ci95":[1.19,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":538,"del":63,"ins":97},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.32,"ci95":[1.19,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":543,"del":66,"ins":90},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.29,"ci95":[1.16,1.41],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":532,"del":61,"ins":90},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.33,"ci95":[1.19,1.46],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":546,"del":68,"ins":90},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.37,"ci95":[1.24,1.5],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":559,"del":68,"ins":100},"empty_hyp":0,"utts_over_50pct":4} + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.25,"ci95":[5.66,6.88],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":879,"del":169,"ins":122},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.14,"ci95":[3.68,4.62],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":384,"del":134,"ins":85},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":5.48,"ci95":[4.99,5.97],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":849,"del":149,"ins":279},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":7.61,"ci95":[6.9,8.36],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":922,"del":171,"ins":277},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":6.3,"ci95":[5.75,6.88],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1377,"del":331,"ins":350},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":9.8,"ci95":[9.08,10.66],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1341,"del":163,"ins":601},"empty_hyp":0,"utts_over_50pct":18,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.31,"ci95":[1.18,1.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":537,"del":63,"ins":94},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.32,"ci95":[1.19,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":538,"del":63,"ins":97},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.32,"ci95":[1.19,1.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":543,"del":66,"ins":90},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.29,"ci95":[1.16,1.41],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":532,"del":61,"ins":90},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.33,"ci95":[1.19,1.46],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":546,"del":68,"ins":90},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.37,"ci95":[1.24,1.5],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":559,"del":68,"ins":100},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1958.7,"xrt_compute":5.616,"load_ms":6171.2,"mel_ms":0.7,"encode_ms":1200.7,"decode_ms":757.2,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":467.5,"xrt_compute":23.53,"load_ms":6210.3,"mel_ms":0.7,"encode_ms":308.8,"decode_ms":158.0,"engine_sha":"2cba45e","measured_on":"2026-05-17","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":40.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4442.9,"xrt_compute":7.952,"load_ms":375.5,"mel_ms":1.9,"encode_ms":2918.7,"decode_ms":1522.3,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5488.2,"xrt_wall":6.438}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1450.2,"xrt_compute":7.585,"load_ms":380.7,"mel_ms":0.8,"encode_ms":908.3,"decode_ms":541.1,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1668.3,"xrt_wall":6.594}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4890.5,"xrt_compute":7.225,"load_ms":578.5,"mel_ms":2.0,"encode_ms":3332.0,"decode_ms":1556.5,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":6221.2,"xrt_wall":5.679}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1578.9,"xrt_compute":6.967,"load_ms":580.8,"mel_ms":0.7,"encode_ms":1042.5,"decode_ms":535.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1852.8,"xrt_wall":5.937}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":349.4,"xrt_compute":101.108,"load_ms":412.3,"mel_ms":1.9,"encode_ms":239.7,"decode_ms":107.9,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1004.0,"xrt_wall":35.191}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":129.6,"xrt_compute":84.903,"load_ms":397.2,"mel_ms":0.7,"encode_ms":80.7,"decode_ms":48.1,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":272.2,"xrt_wall":40.409}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":342.7,"xrt_compute":103.09,"load_ms":604.8,"mel_ms":1.9,"encode_ms":236.2,"decode_ms":104.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1164.7,"xrt_wall":30.337}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":127.0,"xrt_compute":86.641,"load_ms":609.0,"mel_ms":0.8,"encode_ms":79.4,"decode_ms":46.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":303.1,"xrt_wall":36.29}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":14513.3,"xrt_compute":2.434,"load_ms":1427.1,"mel_ms":47.1,"encode_ms":10234.4,"decode_ms":4231.9,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":19494.1,"xrt_wall":1.812}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4551.2,"xrt_compute":2.417,"load_ms":2255.7,"mel_ms":17.0,"encode_ms":3047.6,"decode_ms":1486.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":5581.1,"xrt_wall":1.971}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":17560.8,"xrt_compute":2.012,"load_ms":3118.8,"mel_ms":49.6,"encode_ms":11804.1,"decode_ms":5707.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":25503.1,"xrt_wall":1.385}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5548.0,"xrt_compute":1.983,"load_ms":3722.9,"mel_ms":17.0,"encode_ms":3539.9,"decode_ms":1991.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":7187.5,"xrt_wall":1.53}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6612.4,"xrt_compute":5.343,"load_ms":1564.7,"mel_ms":59.7,"encode_ms":4795.7,"decode_ms":1757.0,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":11791.3,"xrt_wall":2.996}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2440.7,"xrt_compute":4.507,"load_ms":2048.2,"mel_ms":31.9,"encode_ms":1591.9,"decode_ms":816.8,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3578.2,"xrt_wall":3.074}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6518.1,"xrt_compute":5.421,"load_ms":2702.8,"mel_ms":62.0,"encode_ms":4722.0,"decode_ms":1734.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":13082.4,"xrt_wall":2.701}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2410.2,"xrt_compute":4.564,"load_ms":3442.8,"mel_ms":32.5,"encode_ms":1576.6,"decode_ms":801.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3837.8,"xrt_wall":2.866} ] } diff --git a/catalog/medasr.json b/catalog/medasr.json index 4c15a89f..06d9ef33 100644 --- a/catalog/medasr.json +++ b/catalog/medasr.json @@ -8,6 +8,14 @@ "spdx": "other", "display": "Health AI Developer Foundations" }, + "identity": { + "name": "MedASR", + "basename": "medasr", + "size_label": "105M", + "author": "Google", + "license_name": "health-ai-developer-foundations", + "license_link": "https://developers.google.com/health-ai-developer-foundations/terms" + }, "upstream_repo": "google/medasr", "upstream_commit": "ae1e484", "published_repo": "handy-computer/medasr-gguf", @@ -17,7 +25,7 @@ "transcribe": {"supported":true,"verified":false}, "translate": {"supported":false}, "lang_detect": {"supported":false}, - "timestamps": {"supported":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["token"]}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -31,35 +39,38 @@ {"quant":"Q4_K_M","filename":"medasr-Q4_K_M.gguf","size_bytes":83082432} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":37.48,"ci95":[35.83,39.09],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3705,"del":1440,"ins":311},"empty_hyp":6,"utts_over_50pct":153}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":17.88,"ci95":[17.34,18.45],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7183,"del":1617,"ins":679},"empty_hyp":14,"utts_over_50pct":168}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":17.88,"ci95":[17.34,18.46],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7184,"del":1616,"ins":680},"empty_hyp":14,"utts_over_50pct":168}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":17.86,"ci95":[17.33,18.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7180,"del":1616,"ins":673},"empty_hyp":14,"utts_over_50pct":168}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":17.93,"ci95":[17.4,18.53],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7189,"del":1637,"ins":683},"empty_hyp":13,"utts_over_50pct":166}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":17.91,"ci95":[17.38,18.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7201,"del":1613,"ins":682},"empty_hyp":13,"utts_over_50pct":165}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":18.14,"ci95":[17.6,18.73],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7241,"del":1686,"ins":693},"empty_hyp":13,"utts_over_50pct":166}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":17.88,"ci95":[17.34,18.46],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7184,"del":1616,"ins":681},"empty_hyp":14,"utts_over_50pct":168} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":37.48,"ci95":[35.83,39.09],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3705,"del":1440,"ins":311},"empty_hyp":6,"utts_over_50pct":153,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":17.88,"ci95":[17.34,18.45],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7183,"del":1617,"ins":679},"empty_hyp":14,"utts_over_50pct":168,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":17.88,"ci95":[17.34,18.46],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7184,"del":1616,"ins":680},"empty_hyp":14,"utts_over_50pct":168,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":17.86,"ci95":[17.33,18.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7180,"del":1616,"ins":673},"empty_hyp":14,"utts_over_50pct":168,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":17.93,"ci95":[17.4,18.53],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7189,"del":1637,"ins":683},"empty_hyp":13,"utts_over_50pct":166,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":17.91,"ci95":[17.38,18.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7201,"del":1613,"ins":682},"empty_hyp":13,"utts_over_50pct":165,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":18.14,"ci95":[17.6,18.73],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7241,"del":1686,"ins":693},"empty_hyp":13,"utts_over_50pct":166,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":73.4,"xrt_compute":149.912,"load_ms":96.6,"mel_ms":1.0,"encode_ms":72.2,"decode_ms":0.2,"engine_sha":"d9b8667","measured_on":"2026-06-04","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":163.2,"xrt_compute":216.453,"load_ms":74.0,"mel_ms":3.0,"encode_ms":159.7,"decode_ms":0.5,"engine_sha":"d9b8667","measured_on":"2026-06-04","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":78.0,"xrt_compute":141.004,"load_ms":86.5,"mel_ms":1.0,"encode_ms":76.8,"decode_ms":0.2,"engine_sha":"d9b8667","measured_on":"2026-06-04","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":165.6,"xrt_compute":213.359,"load_ms":58.7,"mel_ms":3.1,"encode_ms":162.1,"decode_ms":0.5,"engine_sha":"d9b8667","measured_on":"2026-06-04","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":57.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":61.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":63.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":394.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":248.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":419.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":290.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":20.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":63.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":57.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":61.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":63.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":394.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":248.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":419.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":290.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1626.2,"xrt_compute":21.727,"load_ms":86.9,"mel_ms":61.9,"encode_ms":1563.6,"decode_ms":0.6,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":1626.8,"xrt_wall":21.718}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":487.7,"xrt_compute":22.557,"load_ms":88.3,"mel_ms":20.3,"encode_ms":467.2,"decode_ms":0.2,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":488.2,"xrt_wall":22.534}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1838.7,"xrt_compute":19.215,"load_ms":108.3,"mel_ms":63.3,"encode_ms":1774.8,"decode_ms":0.6,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":1839.4,"xrt_wall":19.209}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":542.0,"xrt_compute":20.295,"load_ms":105.1,"mel_ms":21.1,"encode_ms":520.8,"decode_ms":0.2,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":542.5,"xrt_wall":20.276}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":493.4,"xrt_compute":71.615,"load_ms":93.6,"mel_ms":71.7,"encode_ms":420.4,"decode_ms":1.3,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":494.9,"xrt_wall":71.391}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":172.9,"xrt_compute":63.635,"load_ms":86.9,"mel_ms":36.8,"encode_ms":135.3,"decode_ms":0.7,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":174.2,"xrt_wall":63.142}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":479.0,"xrt_compute":73.758,"load_ms":101.4,"mel_ms":63.9,"encode_ms":413.3,"decode_ms":1.8,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":480.5,"xrt_wall":73.525}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":161.4,"xrt_compute":68.173,"load_ms":103.8,"mel_ms":31.2,"encode_ms":129.6,"decode_ms":0.5,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":162.7,"xrt_wall":67.609} ] } diff --git a/catalog/moonshine-base-ar.json b/catalog/moonshine-base-ar.json index 124d21d1..d247fe17 100644 --- a/catalog/moonshine-base-ar.json +++ b/catalog/moonshine-base-ar.json @@ -28,19 +28,24 @@ {"quant":"Q8_0","filename":"moonshine-base-ar-Q8_0.gguf","size_bytes":77476480} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ar","quant":"F32","metric":"wer","err_pct":24.45,"ci95":[21.6,27.71],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1302,"del":335,"ins":377},"empty_hyp":0,"utts_over_50pct":38}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"F16","metric":"wer","err_pct":24.45,"ci95":[21.6,27.71],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1302,"del":335,"ins":377},"empty_hyp":0,"utts_over_50pct":38}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":24.5,"ci95":[21.63,27.8],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1308,"del":335,"ins":375},"empty_hyp":0,"utts_over_50pct":38}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":24.62,"ci95":[21.58,27.85],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1316,"del":332,"ins":380},"empty_hyp":0,"utts_over_50pct":40} + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":24.62,"ci95":[21.58,27.85],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1316,"del":332,"ins":380},"empty_hyp":0,"utts_over_50pct":40,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "ar", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-base-ja.json b/catalog/moonshine-base-ja.json index 11014f1e..6fcae29d 100644 --- a/catalog/moonshine-base-ja.json +++ b/catalog/moonshine-base-ja.json @@ -28,19 +28,24 @@ {"quant":"Q8_0","filename":"moonshine-base-ja-Q8_0.gguf","size_bytes":77476480} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ja","quant":"F32","metric":"cer","err_pct":10.84,"ci95":[9.82,11.93],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2046,"del":765,"ins":727},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"F16","metric":"cer","err_pct":10.81,"ci95":[9.8,11.89],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2048,"del":764,"ins":718},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":10.53,"ci95":[9.62,11.56],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2023,"del":767,"ins":649},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":11.11,"ci95":[10.05,12.36],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2075,"del":750,"ins":803},"empty_hyp":0,"utts_over_50pct":16} + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":11.11,"ci95":[10.05,12.36],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2075,"del":750,"ins":803},"empty_hyp":0,"utts_over_50pct":16,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "ja", + "metric": "cer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-base-ko.json b/catalog/moonshine-base-ko.json index 4314f24c..bdbe4f63 100644 --- a/catalog/moonshine-base-ko.json +++ b/catalog/moonshine-base-ko.json @@ -28,19 +28,24 @@ {"quant":"Q8_0","filename":"moonshine-base-ko-Q8_0.gguf","size_bytes":77476480} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ko","quant":"F32","metric":"cer","err_pct":8.0,"ci95":[6.76,9.28],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":700,"del":620,"ins":95},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"F16","metric":"cer","err_pct":8.0,"ci95":[6.76,9.28],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":700,"del":620,"ins":95},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.13,"ci95":[6.88,9.51],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":703,"del":646,"ins":88},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.12,"ci95":[6.89,9.5],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":701,"del":646,"ins":88},"empty_hyp":0,"utts_over_50pct":5} + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.12,"ci95":[6.89,9.5],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":701,"del":646,"ins":88},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "ko", + "metric": "cer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-base-uk.json b/catalog/moonshine-base-uk.json index b5019d8f..24246da5 100644 --- a/catalog/moonshine-base-uk.json +++ b/catalog/moonshine-base-uk.json @@ -28,19 +28,24 @@ {"quant":"Q8_0","filename":"moonshine-base-uk-Q8_0.gguf","size_bytes":77476512} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"uk","quant":"F32","metric":"wer","err_pct":14.49,"ci95":[13.45,15.47],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1615,"del":203,"ins":264},"empty_hyp":0,"utts_over_50pct":17}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"F16","metric":"wer","err_pct":14.49,"ci95":[13.45,15.47],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1615,"del":203,"ins":264},"empty_hyp":0,"utts_over_50pct":17}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":14.39,"ci95":[13.36,15.37],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1610,"del":199,"ins":259},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":14.38,"ci95":[13.42,15.32],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1608,"del":194,"ins":265},"empty_hyp":0,"utts_over_50pct":17} + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":14.38,"ci95":[13.42,15.32],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1608,"del":194,"ins":265},"empty_hyp":0,"utts_over_50pct":17,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "uk", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-base-vi.json b/catalog/moonshine-base-vi.json index 1fa6935c..89a0dbe7 100644 --- a/catalog/moonshine-base-vi.json +++ b/catalog/moonshine-base-vi.json @@ -28,19 +28,24 @@ {"quant":"Q8_0","filename":"moonshine-base-vi-Q8_0.gguf","size_bytes":77476512} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"vi","quant":"F32","metric":"wer","err_pct":9.67,"ci95":[9.06,10.33],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2013,"del":228,"ins":274},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"F16","metric":"wer","err_pct":9.66,"ci95":[9.06,10.33],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2013,"del":227,"ins":274},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.79,"ci95":[9.14,10.46],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2037,"del":229,"ins":281},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.96,"ci95":[9.25,10.79],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2019,"del":295,"ins":277},"empty_hyp":1,"utts_over_50pct":6} + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.96,"ci95":[9.25,10.79],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2019,"del":295,"ins":277},"empty_hyp":1,"utts_over_50pct":6,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "vi", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-base-zh.json b/catalog/moonshine-base-zh.json index 0ff29e7e..e5079f2a 100644 --- a/catalog/moonshine-base-zh.json +++ b/catalog/moonshine-base-zh.json @@ -28,19 +28,24 @@ {"quant":"Q8_0","filename":"moonshine-base-zh-Q8_0.gguf","size_bytes":77476480} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"zh","quant":"F32","metric":"cer","err_pct":16.65,"ci95":[14.89,18.64],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2450,"del":1561,"ins":1927},"empty_hyp":0,"utts_over_50pct":47}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"F16","metric":"cer","err_pct":16.65,"ci95":[14.89,18.64],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2450,"del":1561,"ins":1927},"empty_hyp":0,"utts_over_50pct":47}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":17.0,"ci95":[15.14,18.92],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2449,"del":1555,"ins":2057},"empty_hyp":0,"utts_over_50pct":52}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":17.79,"ci95":[15.81,19.77],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2587,"del":1557,"ins":2200},"empty_hyp":0,"utts_over_50pct":59} + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":17.79,"ci95":[15.81,19.77],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2587,"del":1557,"ins":2200},"empty_hyp":0,"utts_over_50pct":59,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "zh", + "metric": "cer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-base.json b/catalog/moonshine-base.json index 3cbbb89e..a012c949 100644 --- a/catalog/moonshine-base.json +++ b/catalog/moonshine-base.json @@ -28,19 +28,27 @@ {"quant":"Q8_0","filename":"moonshine-base-Q8_0.gguf","size_bytes":77476480} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":12.25,"ci95":[10.67,14.04],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":897,"del":634,"ins":252},"empty_hyp":20,"utts_over_50pct":23}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.28,"ci95":[3.07,3.5],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1291,"del":204,"ins":245},"empty_hyp":2,"utts_over_50pct":19}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.28,"ci95":[3.07,3.5],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1290,"del":204,"ins":244},"empty_hyp":2,"utts_over_50pct":19}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.26,"ci95":[3.04,3.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1285,"del":205,"ins":240},"empty_hyp":2,"utts_over_50pct":18} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":12.25,"ci95":[10.67,14.04],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":897,"del":634,"ins":252},"empty_hyp":20,"utts_over_50pct":23,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.28,"ci95":[3.07,3.5],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1291,"del":204,"ins":245},"empty_hyp":2,"utts_over_50pct":19,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.28,"ci95":[3.07,3.5],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1290,"del":204,"ins":244},"empty_hyp":2,"utts_over_50pct":19,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.26,"ci95":[3.04,3.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1285,"del":205,"ins":240},"empty_hyp":2,"utts_over_50pct":18,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":718.7,"xrt_compute":49.16,"load_ms":53.2,"mel_ms":0.0,"encode_ms":237.2,"decode_ms":481.5,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":718.7,"xrt_wall":49.16}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":96.4,"xrt_compute":114.159,"load_ms":56.4,"mel_ms":0.0,"encode_ms":61.1,"decode_ms":35.2,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":96.4,"xrt_wall":114.153}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3168.7,"xrt_compute":11.15,"load_ms":115.2,"mel_ms":0.0,"encode_ms":671.0,"decode_ms":2497.7,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":3168.7,"xrt_wall":11.15}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":331.1,"xrt_compute":33.222,"load_ms":113.4,"mel_ms":0.0,"encode_ms":178.0,"decode_ms":153.1,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":331.1,"xrt_wall":33.222}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-streaming-medium.json b/catalog/moonshine-streaming-medium.json index 78de110d..cc10685e 100644 --- a/catalog/moonshine-streaming-medium.json +++ b/catalog/moonshine-streaming-medium.json @@ -28,19 +28,27 @@ {"quant":"Q8_0","filename":"moonshine-streaming-medium-Q8_0.gguf","size_bytes":295793568} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.87,"ci95":[6.97,8.85],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":698,"del":301,"ins":147},"empty_hyp":7,"utts_over_50pct":10}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.16,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.16,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.16,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.87,"ci95":[6.97,8.85],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":698,"del":301,"ins":147},"empty_hyp":7,"utts_over_50pct":10,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.16,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.16,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.16,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": null, + "timestamps": null + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":39.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":37.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":89.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1106.7,"xrt_compute":31.927,"load_ms":95.9,"mel_ms":0.0,"encode_ms":710.8,"decode_ms":395.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":1106.6,"xrt_wall":31.928}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":281.3,"xrt_compute":39.109,"load_ms":88.6,"mel_ms":0.0,"encode_ms":231.4,"decode_ms":49.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":281.3,"xrt_wall":39.11}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":952.1,"xrt_compute":37.108,"load_ms":100.0,"mel_ms":0.0,"encode_ms":93.3,"decode_ms":858.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":952.1,"xrt_wall":37.108}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":124.0,"xrt_compute":88.695,"load_ms":98.2,"mel_ms":0.0,"encode_ms":26.9,"decode_ms":97.1,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":124.0,"xrt_wall":88.693}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1065.6,"xrt_compute":10.322,"load_ms":267.4,"mel_ms":0.0,"encode_ms":820.8,"decode_ms":244.8,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":1065.7,"xrt_wall":10.322}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4013.5,"xrt_compute":8.803,"load_ms":226.4,"mel_ms":0.0,"encode_ms":822.3,"decode_ms":3191.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":4013.5,"xrt_wall":8.803}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":569.7,"xrt_compute":19.307,"load_ms":226.8,"mel_ms":0.0,"encode_ms":229.2,"decode_ms":340.5,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":569.7,"xrt_wall":19.307} ] } diff --git a/catalog/moonshine-streaming-small.json b/catalog/moonshine-streaming-small.json index 7439baee..4b1bb3ce 100644 --- a/catalog/moonshine-streaming-small.json +++ b/catalog/moonshine-streaming-small.json @@ -28,19 +28,27 @@ {"quant":"Q8_0","filename":"moonshine-streaming-small-Q8_0.gguf","size_bytes":198506848} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":8.55,"ci95":[7.84,9.34],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":880,"del":189,"ins":175},"empty_hyp":1,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.54,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":8.55,"ci95":[7.84,9.34],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":880,"del":189,"ins":175},"empty_hyp":1,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.54,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": null, + "timestamps": null + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":51.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":63.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":58.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":134.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":699.0,"xrt_compute":50.547,"load_ms":81.0,"mel_ms":0.0,"encode_ms":466.1,"decode_ms":232.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":699.0,"xrt_wall":50.548}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":173.7,"xrt_compute":63.311,"load_ms":66.6,"mel_ms":0.0,"encode_ms":143.8,"decode_ms":30.0,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":173.7,"xrt_wall":63.31}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":612.4,"xrt_compute":57.693,"load_ms":80.5,"mel_ms":0.0,"encode_ms":66.4,"decode_ms":546.0,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":612.4,"xrt_wall":57.693}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":82.3,"xrt_compute":133.581,"load_ms":80.4,"mel_ms":0.0,"encode_ms":19.7,"decode_ms":62.7,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":82.4,"xrt_wall":133.571}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4002.9,"xrt_compute":8.827,"load_ms":195.1,"mel_ms":0.0,"encode_ms":2073.0,"decode_ms":1929.9,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":4002.9,"xrt_wall":8.827}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":734.9,"xrt_compute":14.969,"load_ms":191.9,"mel_ms":0.0,"encode_ms":611.7,"decode_ms":123.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":734.9,"xrt_wall":14.969}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2381.2,"xrt_compute":14.838,"load_ms":187.0,"mel_ms":0.0,"encode_ms":497.3,"decode_ms":1884.0,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":2381.2,"xrt_wall":14.838}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":348.9,"xrt_compute":31.53,"load_ms":186.0,"mel_ms":0.0,"encode_ms":152.6,"decode_ms":196.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":348.9,"xrt_wall":31.529} ] } diff --git a/catalog/moonshine-streaming-tiny.json b/catalog/moonshine-streaming-tiny.json index bee8b86e..29725b41 100644 --- a/catalog/moonshine-streaming-tiny.json +++ b/catalog/moonshine-streaming-tiny.json @@ -28,19 +28,27 @@ {"quant":"Q8_0","filename":"moonshine-streaming-tiny-Q8_0.gguf","size_bytes":50462816} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":18.18,"ci95":[15.79,22.01],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1732,"del":297,"ins":617},"empty_hyp":1,"utts_over_50pct":25}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":4.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":4.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.52,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":18.18,"ci95":[15.79,22.01],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1732,"del":297,"ins":617},"empty_hyp":1,"utts_over_50pct":25,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":4.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":4.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.52,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": null, + "timestamps": null + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":172.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":250.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":100.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":218.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":40.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":69.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":40.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":79.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":205.5,"xrt_compute":171.939,"load_ms":57.0,"mel_ms":0.0,"encode_ms":90.4,"decode_ms":115.1,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":205.5,"xrt_wall":171.934}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":44.1,"xrt_compute":249.575,"load_ms":57.8,"mel_ms":0.0,"encode_ms":26.9,"decode_ms":17.2,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":44.1,"xrt_wall":249.546}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":355.0,"xrt_compute":99.53,"load_ms":60.0,"mel_ms":0.0,"encode_ms":26.9,"decode_ms":328.1,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":355.0,"xrt_wall":99.528}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":50.4,"xrt_compute":218.462,"load_ms":60.4,"mel_ms":0.0,"encode_ms":8.0,"decode_ms":42.3,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":50.4,"xrt_wall":218.445}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":881.5,"xrt_compute":40.082,"load_ms":91.0,"mel_ms":0.0,"encode_ms":384.2,"decode_ms":497.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":881.5,"xrt_wall":40.081}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":160.2,"xrt_compute":68.675,"load_ms":92.4,"mel_ms":0.0,"encode_ms":104.9,"decode_ms":55.3,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":160.2,"xrt_wall":68.672}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":891.9,"xrt_compute":39.613,"load_ms":97.0,"mel_ms":0.0,"encode_ms":141.5,"decode_ms":750.4,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":891.9,"xrt_wall":39.612}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":139.4,"xrt_compute":78.884,"load_ms":103.5,"mel_ms":0.0,"encode_ms":41.3,"decode_ms":98.1,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":139.5,"xrt_wall":78.879} ] } diff --git a/catalog/moonshine-tiny-ar.json b/catalog/moonshine-tiny-ar.json index 0680a135..c33e77a0 100644 --- a/catalog/moonshine-tiny-ar.json +++ b/catalog/moonshine-tiny-ar.json @@ -28,19 +28,24 @@ {"quant":"Q8_0","filename":"moonshine-tiny-ar-Q8_0.gguf","size_bytes":35466944} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ar","quant":"F32","metric":"wer","err_pct":27.11,"ci95":[24.57,29.98],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1603,"del":343,"ins":287},"empty_hyp":0,"utts_over_50pct":44}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"F16","metric":"wer","err_pct":27.11,"ci95":[24.57,29.98],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1603,"del":343,"ins":287},"empty_hyp":0,"utts_over_50pct":44}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":26.79,"ci95":[24.3,29.6],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1597,"del":344,"ins":266},"empty_hyp":0,"utts_over_50pct":42}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":26.7,"ci95":[24.08,29.47],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1597,"del":339,"ins":263},"empty_hyp":0,"utts_over_50pct":42} + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":26.7,"ci95":[24.08,29.47],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1597,"del":339,"ins":263},"empty_hyp":0,"utts_over_50pct":42,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "ar", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-tiny-ja.json b/catalog/moonshine-tiny-ja.json index 210facec..7dc64118 100644 --- a/catalog/moonshine-tiny-ja.json +++ b/catalog/moonshine-tiny-ja.json @@ -28,19 +28,24 @@ {"quant":"Q8_0","filename":"moonshine-tiny-ja-Q8_0.gguf","size_bytes":35466944} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ja","quant":"F32","metric":"cer","err_pct":13.2,"ci95":[12.42,14.14],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3010,"del":699,"ins":601},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"F16","metric":"cer","err_pct":13.2,"ci95":[12.41,14.15],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3010,"del":697,"ins":602},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":13.36,"ci95":[12.52,14.33],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3056,"del":697,"ins":608},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":13.44,"ci95":[12.64,14.35],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3039,"del":712,"ins":638},"empty_hyp":0,"utts_over_50pct":9} + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":13.44,"ci95":[12.64,14.35],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3039,"del":712,"ins":638},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "ja", + "metric": "cer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-tiny-ko.json b/catalog/moonshine-tiny-ko.json index f03039d5..608b9ff8 100644 --- a/catalog/moonshine-tiny-ko.json +++ b/catalog/moonshine-tiny-ko.json @@ -28,19 +28,24 @@ {"quant":"Q8_0","filename":"moonshine-tiny-ko-Q8_0.gguf","size_bytes":35466944} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ko","quant":"F32","metric":"cer","err_pct":8.97,"ci95":[7.8,10.21],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":930,"del":561,"ins":95},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"F16","metric":"cer","err_pct":8.97,"ci95":[7.8,10.21],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":930,"del":561,"ins":95},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.98,"ci95":[7.79,10.24],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":932,"del":559,"ins":96},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":9.0,"ci95":[7.86,10.19],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":934,"del":561,"ins":96},"empty_hyp":0,"utts_over_50pct":2} + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":9.0,"ci95":[7.86,10.19],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":934,"del":561,"ins":96},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "ko", + "metric": "cer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-tiny-uk.json b/catalog/moonshine-tiny-uk.json index 08adeb8a..e1547698 100644 --- a/catalog/moonshine-tiny-uk.json +++ b/catalog/moonshine-tiny-uk.json @@ -28,19 +28,24 @@ {"quant":"Q8_0","filename":"moonshine-tiny-uk-Q8_0.gguf","size_bytes":35466944} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"uk","quant":"F32","metric":"wer","err_pct":18.83,"ci95":[17.77,20.0],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2075,"del":225,"ins":406},"empty_hyp":0,"utts_over_50pct":36}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"F16","metric":"wer","err_pct":18.82,"ci95":[17.76,19.99],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2074,"del":224,"ins":407},"empty_hyp":0,"utts_over_50pct":36}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":18.89,"ci95":[17.83,20.04],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2081,"del":223,"ins":411},"empty_hyp":0,"utts_over_50pct":40}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":18.76,"ci95":[17.7,19.93],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2065,"del":229,"ins":402},"empty_hyp":0,"utts_over_50pct":40} + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":18.76,"ci95":[17.7,19.93],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2065,"del":229,"ins":402},"empty_hyp":0,"utts_over_50pct":40,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "uk", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-tiny-vi.json b/catalog/moonshine-tiny-vi.json index 0f632b60..d2b6bd01 100644 --- a/catalog/moonshine-tiny-vi.json +++ b/catalog/moonshine-tiny-vi.json @@ -28,19 +28,24 @@ {"quant":"Q8_0","filename":"moonshine-tiny-vi-Q8_0.gguf","size_bytes":35466944} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"vi","quant":"F32","metric":"wer","err_pct":13.16,"ci95":[12.42,13.96],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2793,"del":227,"ins":404},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"F16","metric":"wer","err_pct":13.17,"ci95":[12.44,13.97],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2793,"del":227,"ins":407},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.16,"ci95":[12.41,13.96],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2791,"del":230,"ins":404},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.37,"ci95":[12.57,14.23],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2801,"del":279,"ins":400},"empty_hyp":1,"utts_over_50pct":13} + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.37,"ci95":[12.57,14.23],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2801,"del":279,"ins":400},"empty_hyp":1,"utts_over_50pct":13,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "vi", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-tiny-zh.json b/catalog/moonshine-tiny-zh.json index 7c823694..284952eb 100644 --- a/catalog/moonshine-tiny-zh.json +++ b/catalog/moonshine-tiny-zh.json @@ -28,19 +28,24 @@ {"quant":"Q8_0","filename":"moonshine-tiny-zh-Q8_0.gguf","size_bytes":35466944} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"zh","quant":"F32","metric":"cer","err_pct":13.7,"ci95":[12.7,14.68],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2843,"del":1574,"ins":467},"empty_hyp":0,"utts_over_50pct":18}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"F16","metric":"cer","err_pct":13.7,"ci95":[12.7,14.68],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2843,"del":1574,"ins":467},"empty_hyp":0,"utts_over_50pct":18}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":13.78,"ci95":[12.8,14.82],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2846,"del":1581,"ins":487},"empty_hyp":0,"utts_over_50pct":18}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":13.88,"ci95":[12.83,14.93],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2880,"del":1579,"ins":489},"empty_hyp":0,"utts_over_50pct":20} + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":13.88,"ci95":[12.83,14.93],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2880,"del":1579,"ins":489},"empty_hyp":0,"utts_over_50pct":20,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "zh", + "metric": "cer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-tiny.json b/catalog/moonshine-tiny.json index bf721e2a..b7b2e862 100644 --- a/catalog/moonshine-tiny.json +++ b/catalog/moonshine-tiny.json @@ -28,19 +28,27 @@ {"quant":"Q8_0","filename":"moonshine-tiny-Q8_0.gguf","size_bytes":35466912} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":14.13,"ci95":[12.44,16.27],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1372,"del":184,"ins":501},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":4.58,"ci95":[4.3,4.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1858,"del":248,"ins":321},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":4.58,"ci95":[4.3,4.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1858,"del":248,"ins":321},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.6,"ci95":[4.32,4.86],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1863,"del":250,"ins":324},"empty_hyp":0,"utts_over_50pct":17} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":14.13,"ci95":[12.44,16.27],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1372,"del":184,"ins":501},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":4.58,"ci95":[4.3,4.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1858,"del":248,"ins":321},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":4.58,"ci95":[4.3,4.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1858,"del":248,"ins":321},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.6,"ci95":[4.32,4.86],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1863,"del":250,"ins":324},"empty_hyp":0,"utts_over_50pct":17,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":377.9,"xrt_compute":93.499,"load_ms":42.0,"mel_ms":0.0,"encode_ms":112.9,"decode_ms":265.0,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":377.9,"xrt_wall":93.497}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":51.5,"xrt_compute":213.737,"load_ms":34.8,"mel_ms":0.0,"encode_ms":29.1,"decode_ms":22.4,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":51.5,"xrt_wall":213.721}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":58.6,"xrt_compute":187.758,"load_ms":33.7,"mel_ms":0.0,"encode_ms":14.4,"decode_ms":44.2,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":58.6,"xrt_wall":187.745}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1528.0,"xrt_compute":23.124,"load_ms":81.6,"mel_ms":0.0,"encode_ms":319.1,"decode_ms":1208.8,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":1528.0,"xrt_wall":23.124}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":162.8,"xrt_compute":67.58,"load_ms":84.3,"mel_ms":0.0,"encode_ms":76.6,"decode_ms":86.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":162.8,"xrt_wall":67.577}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":147.0,"xrt_compute":74.818,"load_ms":97.2,"mel_ms":0.0,"encode_ms":38.4,"decode_ms":108.7,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":147.0,"xrt_wall":74.814} ] } diff --git a/catalog/moss-transcribe-diarize.json b/catalog/moss-transcribe-diarize.json index 3ef15280..f8438cef 100644 --- a/catalog/moss-transcribe-diarize.json +++ b/catalog/moss-transcribe-diarize.json @@ -17,7 +17,7 @@ "transcribe": {"supported":true,"verified":false}, "translate": {"supported":false}, "lang_detect": {"supported":false}, - "timestamps": {"supported":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["segment"]}, "streaming": {"supported":false}, "diarize": {"supported":true,"verified":false}, "batching": {"supported":true,"verified":false} @@ -31,34 +31,39 @@ {"quant":"Q4_K_M","filename":"MOSS-Transcribe-Diarize-Q4_K_M.gguf","size_bytes":617345184} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.13,"ci95":[4.57,5.78],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":453,"del":103,"ins":191},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.3,"ci95":[4.67,6.01],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":457,"del":103,"ins":212},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":9.23,"ci95":[8.2,10.17],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1404,"del":1504,"ins":382},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":9.19,"ci95":[8.2,10.14],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1395,"del":1504,"ins":377},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.08,"ci95":[1.83,2.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":779,"del":204,"ins":118},"empty_hyp":3,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.07,"ci95":[1.82,2.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":778,"del":204,"ins":118},"empty_hyp":3,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.93,"ci95":[1.77,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":770,"del":137,"ins":116},"empty_hyp":2,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.96,"ci95":[1.8,2.12],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":775,"del":142,"ins":121},"empty_hyp":2,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.99,"ci95":[1.82,2.16],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":794,"del":139,"ins":120},"empty_hyp":2,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.59,"ci95":[2.15,3.18],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":837,"del":325,"ins":210},"empty_hyp":6,"utts_over_50pct":13}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.08,"ci95":[1.83,2.4],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":779,"del":204,"ins":118},"empty_hyp":3,"utts_over_50pct":4} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.13,"ci95":[4.57,5.78],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":453,"del":103,"ins":191},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":9.23,"ci95":[8.2,10.17],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1404,"del":1504,"ins":382},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.08,"ci95":[1.83,2.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":779,"del":204,"ins":118},"empty_hyp":3,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.07,"ci95":[1.82,2.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":778,"del":204,"ins":118},"empty_hyp":3,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.93,"ci95":[1.77,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":770,"del":137,"ins":116},"empty_hyp":2,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.96,"ci95":[1.8,2.12],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":775,"del":142,"ins":121},"empty_hyp":2,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.99,"ci95":[1.82,2.16],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":794,"del":139,"ins":120},"empty_hyp":2,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.59,"ci95":[2.15,3.18],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":837,"del":325,"ins":210},"empty_hyp":6,"utts_over_50pct":13,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":30.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":28.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":30.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":28.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/multitalker-parakeet-streaming-0.6b-v1.json b/catalog/multitalker-parakeet-streaming-0.6b-v1.json index d79ed673..0878ac49 100644 --- a/catalog/multitalker-parakeet-streaming-0.6b-v1.json +++ b/catalog/multitalker-parakeet-streaming-0.6b-v1.json @@ -3,7 +3,7 @@ "variant": "multitalker-parakeet-streaming-0.6b-v1", "family": "parakeet", "display_name": "multitalker-parakeet-streaming-0.6b-v1", - "params": 622278145, + "params": 739989513, "license": { "spdx": "other", "display": "NVIDIA Open Model License" @@ -17,45 +17,52 @@ "transcribe": {"supported":true,"verified":false}, "translate": {"supported":false}, "lang_detect": {"supported":false}, - "timestamps": {"supported":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["token"]}, "streaming": {"supported":true,"verified":false}, - "diarize": {"supported":false}, + "diarize": {"supported":true,"verified":false}, "batching": {"supported":true,"verified":false} }, "downloads": [ - {"quant":"F32","filename":"multitalker-parakeet-streaming-0.6b-v1-F32.gguf","size_bytes":2489180480}, - {"quant":"F16","filename":"multitalker-parakeet-streaming-0.6b-v1-F16.gguf","size_bytes":1246058304}, - {"quant":"Q8_0","filename":"multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf","size_bytes":734123712}, - {"quant":"Q6_K","filename":"multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf","size_bytes":603878080}, - {"quant":"Q5_K_M","filename":"multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf","size_bytes":541890240}, - {"quant":"Q4_K_M","filename":"multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf","size_bytes":477812416} + {"quant":"F32","filename":"bundle/multitalker-parakeet-streaming-0.6b-v1-F32.gguf","size_bytes":2960100448}, + {"quant":"F16","filename":"bundle/multitalker-parakeet-streaming-0.6b-v1-F16.gguf","size_bytes":1482674272}, + {"quant":"Q8_0","filename":"bundle/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf","size_bytes":873443456}, + {"quant":"Q6_K","filename":"bundle/multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf","size_bytes":743197824}, + {"quant":"Q5_K_M","filename":"bundle/multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf","size_bytes":681209984}, + {"quant":"Q4_K_M","filename":"bundle/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf","size_bytes":617132160} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.52,"ci95":[5.95,7.12],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":672,"del":172,"ins":105},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.19,"ci95":[2.03,2.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":874,"del":174,"ins":115},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.19,"ci95":[2.03,2.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":871,"del":176,"ins":115},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.18,"ci95":[2.02,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":173,"ins":114},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.2,"ci95":[2.04,2.38],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":875,"del":174,"ins":119},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.18,"ci95":[2.01,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":169,"ins":116},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.18,"ci95":[2.02,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":864,"del":176,"ins":117},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.37,"ci95":[2.2,2.55],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":907,"del":232,"ins":118},"empty_hyp":0,"utts_over_50pct":9} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.52,"ci95":[5.95,7.12],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":672,"del":172,"ins":105},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.19,"ci95":[2.03,2.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":874,"del":174,"ins":115},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.19,"ci95":[2.03,2.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":871,"del":176,"ins":115},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.18,"ci95":[2.02,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":173,"ins":114},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.2,"ci95":[2.04,2.38],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":875,"del":174,"ins":119},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.18,"ci95":[2.01,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":169,"ins":116},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.18,"ci95":[2.02,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":864,"del":176,"ins":117},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":191.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":159.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":192.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":164.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":24.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1026.8,"xrt_compute":34.409,"load_ms":162.3,"mel_ms":1.6,"encode_ms":989.6,"decode_ms":35.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1028.5,"xrt_wall":34.354}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":306.0,"xrt_compute":35.946,"load_ms":151.4,"mel_ms":0.6,"encode_ms":297.4,"decode_ms":8.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":306.8,"xrt_wall":35.855}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1049.0,"xrt_compute":33.68,"load_ms":203.5,"mel_ms":1.6,"encode_ms":1011.7,"decode_ms":35.7,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1050.7,"xrt_wall":33.626}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":309.0,"xrt_compute":35.601,"load_ms":203.5,"mel_ms":0.6,"encode_ms":300.5,"decode_ms":7.8,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":309.7,"xrt_wall":35.515}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":183.2,"xrt_compute":192.824,"load_ms":121.3,"mel_ms":1.5,"encode_ms":146.4,"decode_ms":35.4,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":185.4,"xrt_wall":190.575}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":67.7,"xrt_compute":162.414,"load_ms":155.3,"mel_ms":0.7,"encode_ms":59.1,"decode_ms":8.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":69.1,"xrt_wall":159.238}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":181.5,"xrt_compute":194.691,"load_ms":166.8,"mel_ms":1.5,"encode_ms":144.5,"decode_ms":35.5,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":183.7,"xrt_wall":192.386}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":65.8,"xrt_compute":167.171,"load_ms":169.4,"mel_ms":0.6,"encode_ms":57.6,"decode_ms":7.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":67.0,"xrt_wall":164.13}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3116.5,"xrt_compute":11.337,"load_ms":620.1,"mel_ms":60.8,"encode_ms":2805.1,"decode_ms":250.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":3120.7,"xrt_wall":11.322}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":814.3,"xrt_compute":13.508,"load_ms":619.0,"mel_ms":19.4,"encode_ms":748.8,"decode_ms":46.1,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":816.0,"xrt_wall":13.48}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2991.0,"xrt_compute":11.813,"load_ms":784.1,"mel_ms":61.5,"encode_ms":2681.5,"decode_ms":248.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":2995.0,"xrt_wall":11.797}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":749.5,"xrt_compute":14.676,"load_ms":796.2,"mel_ms":18.8,"encode_ms":685.8,"decode_ms":45.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":751.2,"xrt_wall":14.643}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1378.6,"xrt_compute":25.629,"load_ms":301.0,"mel_ms":57.9,"encode_ms":1082.4,"decode_ms":238.2,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1385.5,"xrt_wall":25.501}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":466.5,"xrt_compute":23.582,"load_ms":299.1,"mel_ms":18.0,"encode_ms":401.6,"decode_ms":46.8,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":474.6,"xrt_wall":23.177}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1342.2,"xrt_compute":26.323,"load_ms":431.5,"mel_ms":57.6,"encode_ms":1046.0,"decode_ms":238.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1360.2,"xrt_wall":25.976}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":458.5,"xrt_compute":23.99,"load_ms":423.9,"mel_ms":18.3,"encode_ms":393.9,"decode_ms":46.4,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":466.2,"xrt_wall":23.594} ] } diff --git a/catalog/nemotron-3.5-asr-streaming-0.6b.json b/catalog/nemotron-3.5-asr-streaming-0.6b.json index a2d49859..1fe787c1 100644 --- a/catalog/nemotron-3.5-asr-streaming-0.6b.json +++ b/catalog/nemotron-3.5-asr-streaming-0.6b.json @@ -8,6 +8,14 @@ "spdx": "other", "display": "OpenMDW-1.1" }, + "identity": { + "name": "Nemotron Streaming 3.5", + "basename": "parakeet-rnnt", + "size_label": "0.6B", + "author": "NVIDIA", + "license_name": "openmdw-1.1", + "license_link": "https://openmdw.ai/license/1-1/" + }, "upstream_repo": "nvidia/nemotron-3.5-asr-streaming-0.6b", "upstream_commit": "24b151a", "published_repo": "handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf", @@ -15,16 +23,15 @@ "en-US", "en-GB", "es-US", "es-ES", "fr-FR", "fr-CA", "it-IT", "pt-BR", "pt-PT", "nl-NL", "de-DE", "tr-TR", "ru-RU", "ar-AR", "hi-IN", "ja-JP", "ko-KR", "vi-VN", "uk-UA", "pl-PL", "sv-SE", "cs-CZ", "nb-NO", "da-DK", - "bg-BG", "fi-FI", "hr-HR", "sk-SK", "zh-CN", "hu-HU", "ro-RO", "et-EE", - "el-GR", "lt-LT", "lv-LV", "mt-MT", "sl-SI", "he-IL", "th-TH", "nn-NO" + "bg-BG", "fi-FI", "hr-HR", "sk-SK", "zh-CN", "hu-HU", "ro-RO", "et-EE" ], "long_form_strategy": "chunked-unbounded", "capabilities": { "transcribe": {"supported":true,"verified":false}, "translate": {"supported":false}, "lang_detect": {"supported":true,"verified":false}, - "timestamps": {"supported":false}, - "streaming": {"supported":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["token"]}, + "streaming": {"supported":true,"verified":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} }, @@ -37,79 +44,65 @@ {"quant":"Q4_K_M","filename":"nemotron-3.5-asr-streaming-0.6b-Q4_K_M.gguf","size_bytes":495831520} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":15.93,"ci95":[14.47,17.54],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":322,"ins":121},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":22.02,"ci95":[21.07,23.05],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2369,"del":551,"ins":201},"empty_hyp":0,"utts_over_50pct":27}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":23.0,"ci95":[21.89,24.02],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2543,"del":283,"ins":324},"empty_hyp":0,"utts_over_50pct":37}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":28.51,"ci95":[27.49,29.47],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4354,"del":786,"ins":606},"empty_hyp":1,"utts_over_50pct":88}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":10.33,"ci95":[9.58,11.13],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1373,"del":254,"ins":306},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"en","quant":"F32","metric":"wer","err_pct":7.97,"ci95":[7.33,8.7],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":796,"del":265,"ins":99},"empty_hyp":1,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"en","quant":"F16","metric":"wer","err_pct":7.97,"ci95":[7.33,8.7],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":796,"del":264,"ins":100},"empty_hyp":1,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.88,"ci95":[7.25,8.52],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":808,"del":235,"ins":104},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":8.02,"ci95":[7.39,8.71],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":824,"del":228,"ins":116},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":8.15,"ci95":[7.46,8.88],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":805,"del":282,"ins":99},"empty_hyp":1,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":8.49,"ci95":[7.8,9.23],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":840,"del":289,"ins":107},"empty_hyp":1,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.9,"ci95":[7.23,8.54],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":811,"del":232,"ins":107},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.3,"ci95":[5.75,6.89],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":970,"del":154,"ins":344},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":31.84,"ci95":[30.63,32.85],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3573,"del":513,"ins":652},"empty_hyp":0,"utts_over_50pct":135}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":21.91,"ci95":[20.93,22.94],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2534,"del":394,"ins":314},"empty_hyp":0,"utts_over_50pct":50}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":10.78,"ci95":[10.02,11.57],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1386,"del":201,"ins":352},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":8.61,"ci95":[7.67,9.7],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":810,"del":436,"ins":368},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":26.21,"ci95":[25.13,27.33],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3600,"del":567,"ins":486},"empty_hyp":0,"utts_over_50pct":73}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":32.12,"ci95":[30.89,33.35],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4353,"del":576,"ins":555},"empty_hyp":0,"utts_over_50pct":135}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":5.78,"ci95":[5.24,6.28],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":868,"del":147,"ins":213},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":13.52,"ci95":[12.78,14.27],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3193,"del":816,"ins":404},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.89,"ci95":[7.78,10.06],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":888,"del":582,"ins":101},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":19.24,"ci95":[17.92,20.58],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1072,"del":234,"ins":160},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":13.61,"ci95":[12.47,14.7],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":859,"del":165,"ins":119},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":17.54,"ci95":[16.58,18.5],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1903,"del":243,"ins":377},"empty_hyp":0,"utts_over_50pct":17}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":8.52,"ci95":[7.77,9.34],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1113,"del":145,"ins":572},"empty_hyp":0,"utts_over_50pct":16}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":28.28,"ci95":[27.12,29.36],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4345,"del":917,"ins":621},"empty_hyp":0,"utts_over_50pct":100}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":12.61,"ci95":[11.87,13.4],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1480,"del":156,"ins":268},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":23.25,"ci95":[22.21,24.21],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2870,"del":426,"ins":248},"empty_hyp":3,"utts_over_50pct":36}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":24.32,"ci95":[23.32,25.3],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2776,"del":647,"ins":319},"empty_hyp":0,"utts_over_50pct":40}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":15.4,"ci95":[14.46,16.35],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1482,"del":368,"ins":197},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":14.88,"ci95":[14.02,15.72],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1693,"del":259,"ins":186},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.96,"ci95":[13.09,14.83],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2616,"del":365,"ins":652},"empty_hyp":0,"utts_over_50pct":17}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":18.87,"ci95":[17.82,19.91],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4197,"del":2147,"ins":385},"empty_hyp":0,"utts_over_50pct":28}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.04,"ci95":[2.83,3.24],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1258,"del":200,"ins":153},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.04,"ci95":[2.83,3.24],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1257,"del":202,"ins":153},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.05,"ci95":[2.85,3.26],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1267,"del":197,"ins":154},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.08,"ci95":[2.88,3.28],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1272,"del":204,"ins":157},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.1,"ci95":[2.9,3.3],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1280,"del":203,"ins":159},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.3,"ci95":[3.1,3.51],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1372,"del":219,"ins":161},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.03,"ci95":[2.85,3.21],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1255,"del":198,"ins":152},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.03,"ci95":[2.85,3.21],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1254,"del":199,"ins":152},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.04,"ci95":[2.86,3.23],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1266,"del":192,"ins":153},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.07,"ci95":[2.89,3.26],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1267,"del":202,"ins":158},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.1,"ci95":[2.91,3.3],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1280,"del":206,"ins":158},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.32,"ci95":[3.12,3.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1376,"del":224,"ins":160},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.06,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.28,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":15.93,"ci95":[14.47,17.54],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":322,"ins":121},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":22.02,"ci95":[21.07,23.05],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2369,"del":551,"ins":201},"empty_hyp":0,"utts_over_50pct":27,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":23.0,"ci95":[21.89,24.02],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2543,"del":283,"ins":324},"empty_hyp":0,"utts_over_50pct":37,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":28.51,"ci95":[27.49,29.47],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4354,"del":786,"ins":606},"empty_hyp":1,"utts_over_50pct":88,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":10.33,"ci95":[9.58,11.13],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1373,"del":254,"ins":306},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.9,"ci95":[7.23,8.54],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":811,"del":232,"ins":107},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":6.3,"ci95":[5.75,6.89],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":970,"del":154,"ins":344},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":31.84,"ci95":[30.63,32.85],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3573,"del":513,"ins":652},"empty_hyp":0,"utts_over_50pct":135,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":21.91,"ci95":[20.93,22.94],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2534,"del":394,"ins":314},"empty_hyp":0,"utts_over_50pct":50,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":10.78,"ci95":[10.02,11.57],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1386,"del":201,"ins":352},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":8.61,"ci95":[7.67,9.7],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":810,"del":436,"ins":368},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":26.21,"ci95":[25.13,27.33],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3600,"del":567,"ins":486},"empty_hyp":0,"utts_over_50pct":73,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":32.12,"ci95":[30.89,33.35],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4353,"del":576,"ins":555},"empty_hyp":0,"utts_over_50pct":135,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":5.78,"ci95":[5.24,6.28],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":868,"del":147,"ins":213},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":13.52,"ci95":[12.78,14.27],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3193,"del":816,"ins":404},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.89,"ci95":[7.78,10.06],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":888,"del":582,"ins":101},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":19.24,"ci95":[17.92,20.58],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1072,"del":234,"ins":160},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":13.61,"ci95":[12.47,14.7],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":859,"del":165,"ins":119},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":17.54,"ci95":[16.58,18.5],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1903,"del":243,"ins":377},"empty_hyp":0,"utts_over_50pct":17,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":8.52,"ci95":[7.77,9.34],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1113,"del":145,"ins":572},"empty_hyp":0,"utts_over_50pct":16,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":28.28,"ci95":[27.12,29.36],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4345,"del":917,"ins":621},"empty_hyp":0,"utts_over_50pct":100,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":12.61,"ci95":[11.87,13.4],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1480,"del":156,"ins":268},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":23.25,"ci95":[22.21,24.21],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2870,"del":426,"ins":248},"empty_hyp":3,"utts_over_50pct":36,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":24.32,"ci95":[23.32,25.3],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2776,"del":647,"ins":319},"empty_hyp":0,"utts_over_50pct":40,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":15.4,"ci95":[14.46,16.35],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1482,"del":368,"ins":197},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":14.88,"ci95":[14.02,15.72],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1693,"del":259,"ins":186},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.96,"ci95":[13.09,14.83],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2616,"del":365,"ins":652},"empty_hyp":0,"utts_over_50pct":17,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":18.87,"ci95":[17.82,19.91],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4197,"del":2147,"ins":385},"empty_hyp":0,"utts_over_50pct":28,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.04,"ci95":[2.83,3.24],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1258,"del":200,"ins":153},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.04,"ci95":[2.83,3.24],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1257,"del":202,"ins":153},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.05,"ci95":[2.85,3.26],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1267,"del":197,"ins":154},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.08,"ci95":[2.88,3.28],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1272,"del":204,"ins":157},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.1,"ci95":[2.9,3.3],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1280,"del":203,"ins":159},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.3,"ci95":[3.1,3.51],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1372,"del":219,"ins":161},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "en", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":640.5,"xrt_compute":17.174,"load_ms":223.3,"mel_ms":0.7,"encode_ms":521.7,"decode_ms":118.1,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2232.0,"xrt_compute":15.83,"load_ms":232.4,"mel_ms":2.0,"encode_ms":1758.3,"decode_ms":471.7,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":671.6,"xrt_compute":16.379,"load_ms":180.3,"mel_ms":0.8,"encode_ms":552.5,"decode_ms":118.4,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2314.9,"xrt_compute":15.263,"load_ms":177.9,"mel_ms":1.9,"encode_ms":1841.8,"decode_ms":471.2,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":271.9,"xrt_compute":40.454,"load_ms":179.2,"mel_ms":0.8,"encode_ms":153.0,"decode_ms":118.1,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":970.6,"xrt_compute":36.403,"load_ms":195.9,"mel_ms":2.0,"encode_ms":498.2,"decode_ms":470.4,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":273.9,"xrt_compute":40.163,"load_ms":173.1,"mel_ms":0.7,"encode_ms":155.1,"decode_ms":118.1,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":979.9,"xrt_compute":36.059,"load_ms":144.9,"mel_ms":2.0,"encode_ms":504.7,"decode_ms":473.2,"engine_sha":"7ead1bc","measured_on":"2026-06-07","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":96.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":98.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":98.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":98.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1247.9,"xrt_compute":28.314,"load_ms":190.4,"mel_ms":1.5,"encode_ms":1050.6,"decode_ms":195.8,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1249.5,"xrt_wall":28.276}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":361.6,"xrt_compute":30.418,"load_ms":183.0,"mel_ms":0.6,"encode_ms":314.3,"decode_ms":46.8,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":362.4,"xrt_wall":30.353}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1274.5,"xrt_compute":27.722,"load_ms":224.0,"mel_ms":1.5,"encode_ms":1081.7,"decode_ms":191.2,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1276.2,"xrt_wall":27.685}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":365.9,"xrt_compute":30.065,"load_ms":227.7,"mel_ms":0.6,"encode_ms":318.3,"decode_ms":47.0,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":366.6,"xrt_wall":30.003}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":366.0,"xrt_compute":96.541,"load_ms":156.9,"mel_ms":1.5,"encode_ms":166.6,"decode_ms":197.9,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":368.2,"xrt_wall":95.956}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":111.5,"xrt_compute":98.695,"load_ms":132.1,"mel_ms":0.6,"encode_ms":63.0,"decode_ms":47.9,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":112.7,"xrt_wall":97.597}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":359.1,"xrt_compute":98.391,"load_ms":191.4,"mel_ms":1.4,"encode_ms":167.1,"decode_ms":190.6,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":361.3,"xrt_wall":97.786}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":111.5,"xrt_compute":98.652,"load_ms":201.5,"mel_ms":0.6,"encode_ms":61.9,"decode_ms":49.1,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":112.7,"xrt_wall":97.601}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1088.5,"xrt_compute":10.106,"load_ms":679.2,"mel_ms":17.9,"encode_ms":831.6,"decode_ms":239.0,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1090.2,"xrt_wall":10.09}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1364.9,"xrt_compute":8.059,"load_ms":848.4,"mel_ms":20.0,"encode_ms":1089.6,"decode_ms":255.4,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1366.7,"xrt_wall":8.049}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2367.7,"xrt_compute":14.923,"load_ms":372.8,"mel_ms":60.7,"encode_ms":1313.5,"decode_ms":993.5,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":2373.8,"xrt_wall":14.884}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":779.6,"xrt_compute":14.11,"load_ms":367.0,"mel_ms":20.2,"encode_ms":489.0,"decode_ms":270.4,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":783.3,"xrt_wall":14.044}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2366.4,"xrt_compute":14.931,"load_ms":467.2,"mel_ms":61.3,"encode_ms":1301.9,"decode_ms":1003.2,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":2373.0,"xrt_wall":14.889}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":768.9,"xrt_compute":14.306,"load_ms":471.7,"mel_ms":20.5,"encode_ms":483.4,"decode_ms":265.0,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":773.5,"xrt_wall":14.222} ] } diff --git a/catalog/nemotron-speech-streaming-en-0.6b.json b/catalog/nemotron-speech-streaming-en-0.6b.json index 5e03a095..99ebaebb 100644 --- a/catalog/nemotron-speech-streaming-en-0.6b.json +++ b/catalog/nemotron-speech-streaming-en-0.6b.json @@ -17,7 +17,7 @@ "transcribe": {"supported":true,"verified":false}, "translate": {"supported":false}, "lang_detect": {"supported":false}, - "timestamps": {"supported":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["token"]}, "streaming": {"supported":true,"verified":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -31,44 +31,38 @@ {"quant":"Q4_K_M","filename":"nemotron-speech-streaming-en-0.6b-Q4_K_M.gguf","size_bytes":475436032} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.43,"ci95":[5.81,7.14],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":624,"del":218,"ins":94},"empty_hyp":2,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.31,"ci95":[2.13,2.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":939,"del":159,"ins":128},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.31,"ci95":[2.13,2.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":939,"del":159,"ins":128},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.31,"ci95":[2.12,2.5],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":935,"del":161,"ins":127},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.29,"ci95":[2.1,2.46],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":935,"del":157,"ins":120},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.34,"ci95":[2.15,2.53],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":952,"del":157,"ins":130},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.38,"ci95":[2.2,2.56],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":960,"del":168,"ins":135},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.32,"ci95":[2.13,2.51],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":941,"del":160,"ins":129},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.32,"ci95":[2.13,2.5],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":941,"del":160,"ins":128},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.32,"ci95":[2.14,2.49],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":944,"del":161,"ins":126},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.31,"ci95":[2.13,2.48],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":943,"del":161,"ins":120},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.33,"ci95":[2.15,2.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":951,"del":150,"ins":135},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.4,"ci95":[2.21,2.58],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":964,"del":175,"ins":132},"empty_hyp":0,"utts_over_50pct":7} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.43,"ci95":[5.81,7.14],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":624,"del":218,"ins":94},"empty_hyp":2,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.31,"ci95":[2.13,2.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":939,"del":159,"ins":128},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.31,"ci95":[2.13,2.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":939,"del":159,"ins":128},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.31,"ci95":[2.12,2.5],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":935,"del":161,"ins":127},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.29,"ci95":[2.1,2.46],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":935,"del":157,"ins":120},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.34,"ci95":[2.15,2.53],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":952,"del":157,"ins":130},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.38,"ci95":[2.2,2.56],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":960,"del":168,"ins":135},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":604.3,"xrt_compute":18.203,"load_ms":212.0,"mel_ms":0.7,"encode_ms":523.1,"decode_ms":80.4,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2049.4,"xrt_compute":17.24,"load_ms":208.6,"mel_ms":1.9,"encode_ms":1748.0,"decode_ms":299.5,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":629.7,"xrt_compute":17.469,"load_ms":154.2,"mel_ms":0.7,"encode_ms":549.5,"decode_ms":79.5,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2144.2,"xrt_compute":16.478,"load_ms":169.8,"mel_ms":1.9,"encode_ms":1843.1,"decode_ms":299.2,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":231.7,"xrt_compute":47.475,"load_ms":179.0,"mel_ms":0.7,"encode_ms":151.4,"decode_ms":79.6,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":797.3,"xrt_compute":44.315,"load_ms":165.7,"mel_ms":2.0,"encode_ms":497.8,"decode_ms":297.6,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":234.0,"xrt_compute":47.006,"load_ms":141.3,"mel_ms":0.7,"encode_ms":154.2,"decode_ms":79.1,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":806.6,"xrt_compute":43.804,"load_ms":134.3,"mel_ms":1.9,"encode_ms":504.6,"decode_ms":300.1,"engine_sha":"1d827a9","measured_on":"2026-05-11","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":160.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1157.7,"xrt_compute":30.519,"load_ms":159.4,"mel_ms":1.6,"encode_ms":1039.9,"decode_ms":116.2,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1159.3,"xrt_wall":30.477}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":345.0,"xrt_compute":31.888,"load_ms":157.9,"mel_ms":0.6,"encode_ms":313.9,"decode_ms":30.4,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":345.7,"xrt_wall":31.818}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1177.1,"xrt_compute":30.015,"load_ms":208.2,"mel_ms":1.6,"encode_ms":1060.6,"decode_ms":114.9,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1178.7,"xrt_wall":29.974}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":346.2,"xrt_compute":31.771,"load_ms":209.3,"mel_ms":0.6,"encode_ms":315.3,"decode_ms":30.3,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":347.0,"xrt_wall":31.703}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":160.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1223.0,"xrt_compute":8.995,"load_ms":594.0,"mel_ms":19.5,"encode_ms":818.7,"decode_ms":384.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1224.7,"xrt_wall":8.982}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5209.0,"xrt_compute":6.783,"load_ms":768.0,"mel_ms":60.6,"encode_ms":3366.0,"decode_ms":1782.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":5212.8,"xrt_wall":6.778}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1385.4,"xrt_compute":7.94,"load_ms":762.5,"mel_ms":20.9,"encode_ms":973.4,"decode_ms":391.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1387.1,"xrt_wall":7.93}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2976.1,"xrt_compute":11.872,"load_ms":328.6,"mel_ms":63.7,"encode_ms":1144.1,"decode_ms":1768.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2983.1,"xrt_wall":11.844}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":809.6,"xrt_compute":13.587,"load_ms":318.6,"mel_ms":19.3,"encode_ms":417.3,"decode_ms":372.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":813.2,"xrt_wall":13.528}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2924.5,"xrt_compute":12.081,"load_ms":438.7,"mel_ms":63.8,"encode_ms":1109.1,"decode_ms":1751.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2930.4,"xrt_wall":12.057}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":808.3,"xrt_compute":13.609,"load_ms":421.3,"mel_ms":19.0,"encode_ms":402.9,"decode_ms":386.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":811.8,"xrt_wall":13.55} ] } diff --git a/catalog/parakeet-ctc-0.6b.json b/catalog/parakeet-ctc-0.6b.json index 6eaef08a..ddadd6a9 100644 --- a/catalog/parakeet-ctc-0.6b.json +++ b/catalog/parakeet-ctc-0.6b.json @@ -31,34 +31,38 @@ {"quant":"Q4_K_M","filename":"parakeet-ctc-0.6b-Q4_K_M.gguf","size_bytes":469302464} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.53,"ci95":[5.06,6.07],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":578,"del":121,"ins":106},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.87,"ci95":[1.71,2.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":770,"del":112,"ins":109},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.87,"ci95":[1.71,2.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":112,"ins":108},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.87,"ci95":[1.71,2.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":111,"ins":110},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.84,"ci95":[1.69,2.0],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":767,"del":107,"ins":104},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.87,"ci95":[1.71,2.04],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":768,"del":111,"ins":115},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.9,"ci95":[1.73,2.06],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":781,"del":109,"ins":115},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.86,"ci95":[1.71,2.02],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":770,"del":109,"ins":109},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.85,"ci95":[1.7,2.01],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":765,"del":108,"ins":109},"empty_hyp":0,"utts_over_50pct":7} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.53,"ci95":[5.06,6.07],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":578,"del":121,"ins":106},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.87,"ci95":[1.71,2.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":770,"del":112,"ins":109},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.87,"ci95":[1.71,2.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":112,"ins":108},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.87,"ci95":[1.71,2.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":111,"ins":110},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.84,"ci95":[1.69,2.0],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":767,"del":107,"ins":104},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.87,"ci95":[1.71,2.04],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":768,"del":111,"ins":115},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.9,"ci95":[1.73,2.06],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":781,"del":109,"ins":115},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":132.2,"xrt_compute":83.205,"load_ms":372.5,"mel_ms":0.7,"encode_ms":130.7,"decode_ms":0.8,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":430.3,"xrt_compute":82.118,"load_ms":180.0,"mel_ms":1.9,"encode_ms":426.2,"decode_ms":2.2,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":37.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":244.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":185.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":246.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":191.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":24.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":20.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":24.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":999.3,"xrt_compute":35.355,"load_ms":155.7,"mel_ms":1.8,"encode_ms":995.5,"decode_ms":2.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1001.1,"xrt_wall":35.295}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":296.8,"xrt_compute":37.066,"load_ms":159.6,"mel_ms":0.7,"encode_ms":295.4,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":297.6,"xrt_wall":36.968}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1192.2,"xrt_compute":29.635,"load_ms":209.1,"mel_ms":1.7,"encode_ms":1188.5,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1194.0,"xrt_wall":29.592}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":355.1,"xrt_compute":30.98,"load_ms":217.5,"mel_ms":0.7,"encode_ms":353.7,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":355.9,"xrt_wall":30.909}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":142.4,"xrt_compute":248.04,"load_ms":136.8,"mel_ms":1.7,"encode_ms":138.8,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":144.8,"xrt_wall":244.036}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":57.4,"xrt_compute":191.564,"load_ms":156.0,"mel_ms":0.7,"encode_ms":55.8,"decode_ms":0.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":59.3,"xrt_wall":185.435}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":140.7,"xrt_compute":251.18,"load_ms":185.3,"mel_ms":1.8,"encode_ms":136.8,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":143.3,"xrt_wall":246.482}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":55.5,"xrt_compute":198.18,"load_ms":212.7,"mel_ms":0.7,"encode_ms":53.9,"decode_ms":0.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":57.6,"xrt_wall":190.999}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3140.9,"xrt_compute":11.249,"load_ms":567.4,"mel_ms":42.5,"encode_ms":2755.6,"decode_ms":342.9,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":3144.4,"xrt_wall":11.236}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":863.4,"xrt_compute":12.74,"load_ms":836.6,"mel_ms":13.8,"encode_ms":743.2,"decode_ms":106.4,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":865.1,"xrt_wall":12.715}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3666.7,"xrt_compute":9.636,"load_ms":721.2,"mel_ms":42.7,"encode_ms":3275.9,"decode_ms":348.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":3670.3,"xrt_wall":9.626}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1068.6,"xrt_compute":10.294,"load_ms":1016.2,"mel_ms":14.9,"encode_ms":939.2,"decode_ms":114.4,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1070.3,"xrt_wall":10.277}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1498.1,"xrt_compute":23.584,"load_ms":312.2,"mel_ms":44.9,"encode_ms":1114.4,"decode_ms":338.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1504.6,"xrt_wall":23.483}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":537.4,"xrt_compute":20.467,"load_ms":310.6,"mel_ms":14.2,"encode_ms":418.1,"decode_ms":105.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":540.9,"xrt_wall":20.336}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1496.8,"xrt_compute":23.605,"load_ms":399.6,"mel_ms":45.2,"encode_ms":1092.4,"decode_ms":359.3,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1503.4,"xrt_wall":23.502}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":520.3,"xrt_compute":21.141,"load_ms":381.9,"mel_ms":14.1,"encode_ms":400.0,"decode_ms":106.2,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":523.9,"xrt_wall":20.998} ] } diff --git a/catalog/parakeet-ctc-1.1b.json b/catalog/parakeet-ctc-1.1b.json index 6c07261a..2f03fdab 100644 --- a/catalog/parakeet-ctc-1.1b.json +++ b/catalog/parakeet-ctc-1.1b.json @@ -31,33 +31,38 @@ {"quant":"Q4_K_M","filename":"parakeet-ctc-1.1b-Q4_K_M.gguf","size_bytes":818156576} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.61,"ci95":[5.04,6.21],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":567,"del":106,"ins":143},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.61,"ci95":[5.05,6.19],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":572,"del":110,"ins":135},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.85,"ci95":[1.68,2.01],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":766,"del":98,"ins":116},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.85,"ci95":[1.68,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":768,"del":98,"ins":116},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.85,"ci95":[1.68,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":98,"ins":115},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.85,"ci95":[1.69,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":762,"del":101,"ins":119},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.84,"ci95":[1.68,2.01],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":97,"ins":118},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.9,"ci95":[1.74,2.07],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":788,"del":105,"ins":116},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.83,"ci95":[1.67,2.0],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":761,"del":97,"ins":115},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.85,"ci95":[1.68,2.02],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":767,"del":97,"ins":115},"empty_hyp":0,"utts_over_50pct":3} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.61,"ci95":[5.04,6.21],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":567,"del":106,"ins":143},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.85,"ci95":[1.68,2.01],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":766,"del":98,"ins":116},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.85,"ci95":[1.68,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":768,"del":98,"ins":116},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.85,"ci95":[1.68,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":98,"ins":115},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.85,"ci95":[1.69,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":762,"del":101,"ins":119},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.84,"ci95":[1.68,2.01],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":97,"ins":118},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.9,"ci95":[1.74,2.07],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":788,"del":105,"ins":116},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":21.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":118.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":121.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1696.6,"xrt_compute":20.826,"load_ms":250.6,"mel_ms":1.6,"encode_ms":1692.9,"decode_ms":2.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1698.5,"xrt_wall":20.801}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":499.8,"xrt_compute":22.01,"load_ms":254.3,"mel_ms":0.7,"encode_ms":498.4,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":500.9,"xrt_wall":21.963}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2042.4,"xrt_compute":17.299,"load_ms":345.3,"mel_ms":1.7,"encode_ms":2038.7,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":2044.4,"xrt_wall":17.282}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":601.1,"xrt_compute":18.299,"load_ms":329.8,"mel_ms":0.7,"encode_ms":599.7,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":602.2,"xrt_wall":18.266}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":220.3,"xrt_compute":160.378,"load_ms":200.6,"mel_ms":1.6,"encode_ms":216.8,"decode_ms":1.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":223.5,"xrt_wall":158.076}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":90.3,"xrt_compute":121.85,"load_ms":219.7,"mel_ms":0.7,"encode_ms":88.8,"decode_ms":0.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":93.1,"xrt_wall":118.135}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":220.8,"xrt_compute":160.022,"load_ms":294.1,"mel_ms":1.6,"encode_ms":217.3,"decode_ms":1.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":224.1,"xrt_wall":157.691}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":87.7,"xrt_compute":125.478,"load_ms":328.4,"mel_ms":0.7,"encode_ms":86.2,"decode_ms":0.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":90.7,"xrt_wall":121.316}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5121.0,"xrt_compute":6.899,"load_ms":962.8,"mel_ms":44.5,"encode_ms":4723.0,"decode_ms":353.5,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":5125.4,"xrt_wall":6.894}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1376.7,"xrt_compute":7.99,"load_ms":1384.1,"mel_ms":14.1,"encode_ms":1254.5,"decode_ms":108.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1379.0,"xrt_wall":7.977}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6083.5,"xrt_compute":5.808,"load_ms":1286.4,"mel_ms":46.6,"encode_ms":5675.1,"decode_ms":361.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":6088.1,"xrt_wall":5.803}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1753.4,"xrt_compute":6.273,"load_ms":1864.5,"mel_ms":14.8,"encode_ms":1624.1,"decode_ms":114.6,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1755.8,"xrt_wall":6.265}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2326.0,"xrt_compute":15.19,"load_ms":538.6,"mel_ms":47.2,"encode_ms":1928.7,"decode_ms":350.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":2334.6,"xrt_wall":15.134}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":822.6,"xrt_compute":13.372,"load_ms":497.2,"mel_ms":13.3,"encode_ms":699.5,"decode_ms":109.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":827.9,"xrt_wall":13.287}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2335.1,"xrt_compute":15.131,"load_ms":721.7,"mel_ms":46.3,"encode_ms":1929.0,"decode_ms":359.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":2343.9,"xrt_wall":15.074}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":826.0,"xrt_compute":13.317,"load_ms":723.8,"mel_ms":13.9,"encode_ms":686.7,"decode_ms":125.3,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":831.6,"xrt_wall":13.228} ] } diff --git a/catalog/parakeet-primeline.json b/catalog/parakeet-primeline.json index f8432472..cde2b2ec 100644 --- a/catalog/parakeet-primeline.json +++ b/catalog/parakeet-primeline.json @@ -21,7 +21,7 @@ "transcribe": {"supported":true,"verified":false}, "translate": {"supported":false}, "lang_detect": {"supported":true,"verified":false}, - "timestamps": {"supported":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["token"]}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -35,54 +35,62 @@ {"quant":"Q4_K_M","filename":"parakeet-primeline-Q4_K_M.gguf","size_bytes":485425568} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":16.33,"ci95":[15.43,17.24],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1790,"del":414,"ins":110},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":15.05,"ci95":[14.18,16.05],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1757,"del":212,"ins":92},"empty_hyp":0,"utts_over_50pct":28}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":20.52,"ci95":[19.78,21.34],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3315,"del":603,"ins":219},"empty_hyp":1,"utts_over_50pct":40}, - {"dataset":"fleurs","split":"test","language":"de","quant":"F32","metric":"wer","err_pct":6.0,"ci95":[5.51,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":903,"del":145,"ins":74},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"de","quant":"F16","metric":"wer","err_pct":6.0,"ci95":[5.51,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":903,"del":145,"ins":74},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.0,"ci95":[5.52,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":903,"del":147,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q6_K","metric":"wer","err_pct":5.96,"ci95":[5.5,6.45],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":142,"ins":74},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":5.99,"ci95":[5.5,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":896,"del":148,"ins":77},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q4_K_M","metric":"wer","err_pct":5.98,"ci95":[5.5,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":905,"del":137,"ins":78},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":5.98,"ci95":[5.53,6.44],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":903,"del":145,"ins":71},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":34.76,"ci95":[33.6,35.92],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4853,"del":279,"ins":142},"empty_hyp":0,"utts_over_50pct":83}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.82,"ci95":[4.39,5.34],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":467,"del":187,"ins":48},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.85,"ci95":[3.48,4.21],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":640,"del":181,"ins":76},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":17.17,"ci95":[16.36,18.0],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1936,"del":303,"ins":316},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":13.39,"ci95":[12.6,14.2],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1580,"del":244,"ins":157},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":6.35,"ci95":[5.84,6.89],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":877,"del":214,"ins":52},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":13.68,"ci95":[12.94,14.51],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1981,"del":318,"ins":130},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":17.52,"ci95":[16.7,18.3],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2386,"del":366,"ins":239},"empty_hyp":0,"utts_over_50pct":17}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.17,"ci95":[2.88,3.48],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":473,"del":147,"ins":54},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":23.08,"ci95":[22.26,23.89],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3484,"del":347,"ins":124},"empty_hyp":0,"utts_over_50pct":41}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":28.83,"ci95":[27.83,29.95],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3892,"del":362,"ins":191},"empty_hyp":0,"utts_over_50pct":73}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":24.74,"ci95":[23.87,25.63],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4469,"del":800,"ins":231},"empty_hyp":0,"utts_over_50pct":45}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":8.49,"ci95":[7.76,9.26],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":526,"del":123,"ins":64},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":8.19,"ci95":[7.45,9.07],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":931,"del":189,"ins":59},"empty_hyp":1,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":5.17,"ci95":[4.72,5.66],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":766,"del":264,"ins":80},"empty_hyp":2,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":13.8,"ci95":[13.12,14.49],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2247,"del":501,"ins":123},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":7.81,"ci95":[7.21,8.42],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":961,"del":177,"ins":42},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":12.36,"ci95":[11.65,13.08],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1563,"del":250,"ins":71},"empty_hyp":3,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":51.07,"ci95":[49.27,52.72],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6883,"del":1319,"ins":233},"empty_hyp":4,"utts_over_50pct":408}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":16.42,"ci95":[15.53,17.29],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1898,"del":502,"ins":126},"empty_hyp":0,"utts_over_50pct":21}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":8.11,"ci95":[7.55,8.7],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":948,"del":159,"ins":58},"empty_hyp":0,"utts_over_50pct":4} + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":16.33,"ci95":[15.43,17.24],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1790,"del":414,"ins":110},"empty_hyp":0,"utts_over_50pct":12,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":15.05,"ci95":[14.18,16.05],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1757,"del":212,"ins":92},"empty_hyp":0,"utts_over_50pct":28,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":20.52,"ci95":[19.78,21.34],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3315,"del":603,"ins":219},"empty_hyp":1,"utts_over_50pct":40,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":5.98,"ci95":[5.53,6.44],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":903,"del":145,"ins":71},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":34.76,"ci95":[33.6,35.92],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4853,"del":279,"ins":142},"empty_hyp":0,"utts_over_50pct":83,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.82,"ci95":[4.39,5.34],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":467,"del":187,"ins":48},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.85,"ci95":[3.48,4.21],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":640,"del":181,"ins":76},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":17.17,"ci95":[16.36,18.0],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1936,"del":303,"ins":316},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":13.39,"ci95":[12.6,14.2],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1580,"del":244,"ins":157},"empty_hyp":0,"utts_over_50pct":12,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":6.35,"ci95":[5.84,6.89],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":877,"del":214,"ins":52},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":13.68,"ci95":[12.94,14.51],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1981,"del":318,"ins":130},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":17.52,"ci95":[16.7,18.3],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2386,"del":366,"ins":239},"empty_hyp":0,"utts_over_50pct":17,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.17,"ci95":[2.88,3.48],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":473,"del":147,"ins":54},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":23.08,"ci95":[22.26,23.89],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3484,"del":347,"ins":124},"empty_hyp":0,"utts_over_50pct":41,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":28.83,"ci95":[27.83,29.95],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3892,"del":362,"ins":191},"empty_hyp":0,"utts_over_50pct":73,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":24.74,"ci95":[23.87,25.63],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4469,"del":800,"ins":231},"empty_hyp":0,"utts_over_50pct":45,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":8.49,"ci95":[7.76,9.26],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":526,"del":123,"ins":64},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":8.19,"ci95":[7.45,9.07],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":931,"del":189,"ins":59},"empty_hyp":1,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":5.17,"ci95":[4.72,5.66],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":766,"del":264,"ins":80},"empty_hyp":2,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":13.8,"ci95":[13.12,14.49],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2247,"del":501,"ins":123},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":7.81,"ci95":[7.21,8.42],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":961,"del":177,"ins":42},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":12.36,"ci95":[11.65,13.08],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1563,"del":250,"ins":71},"empty_hyp":3,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":51.07,"ci95":[49.27,52.72],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6883,"del":1319,"ins":233},"empty_hyp":4,"utts_over_50pct":408,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":16.42,"ci95":[15.53,17.29],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1898,"del":502,"ins":126},"empty_hyp":0,"utts_over_50pct":21,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":8.11,"ci95":[7.55,8.7],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":948,"del":159,"ins":58},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":2.2,"ci95":[2.04,2.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":866,"del":231,"ins":67},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"F32","metric":"wer","err_pct":2.2,"ci95":[2.04,2.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":867,"del":228,"ins":69},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"F16","metric":"wer","err_pct":2.19,"ci95":[2.04,2.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":866,"del":227,"ins":69},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q6_K","metric":"wer","err_pct":2.19,"ci95":[2.04,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":870,"del":225,"ins":67},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q5_K_M","metric":"wer","err_pct":2.2,"ci95":[2.04,2.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":868,"del":228,"ins":70},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q4_K_M","metric":"wer","err_pct":2.26,"ci95":[2.09,2.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":899,"del":231,"ins":70},"empty_hyp":0,"utts_over_50pct":5} ], + "headline_benchmark": { + "dataset": "fleurs", + "split": "test", + "language": "de", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":153.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":153.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":149.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":153.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":153.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":149.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/parakeet-rnnt-0.6b.json b/catalog/parakeet-rnnt-0.6b.json index d5ffb4af..29ac0019 100644 --- a/catalog/parakeet-rnnt-0.6b.json +++ b/catalog/parakeet-rnnt-0.6b.json @@ -31,39 +31,38 @@ {"quant":"Q4_K_M","filename":"parakeet-rnnt-0.6b-Q4_K_M.gguf","size_bytes":476390816} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.57,"ci95":[4.13,5.05],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":446,"del":147,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.62,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":109,"ins":102},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.62,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":109,"ins":102},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.62,"ci95":[1.48,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":107,"ins":101},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.62,"ci95":[1.48,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":645,"del":112,"ins":101},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.62,"ci95":[1.49,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":111,"ins":100},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.66,"ci95":[1.51,1.8],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":660,"del":118,"ins":101},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.62,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":647,"del":110,"ins":100},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.61,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":646,"del":110,"ins":100},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.62,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":647,"del":111,"ins":99},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.63,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":648,"del":115,"ins":100},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.67,"ci95":[1.52,1.81],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":662,"del":123,"ins":98},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.64,"ci95":[1.49,1.78],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":651,"del":116,"ins":101},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.59,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.57,"ci95":[4.13,5.05],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":446,"del":147,"ins":72},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.62,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":109,"ins":102},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.62,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":109,"ins":102},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.62,"ci95":[1.48,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":107,"ins":101},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.62,"ci95":[1.48,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":645,"del":112,"ins":101},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.62,"ci95":[1.49,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":111,"ins":100},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.66,"ci95":[1.51,1.8],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":660,"del":118,"ins":101},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":205.6,"xrt_compute":53.507,"load_ms":371.9,"mel_ms":0.7,"encode_ms":130.7,"decode_ms":74.2,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":701.7,"xrt_compute":50.352,"load_ms":187.1,"mel_ms":1.9,"encode_ms":427.0,"decode_ms":272.8,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":196.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":170.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":198.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":173.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":196.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":170.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":198.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":173.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1065.5,"xrt_compute":10.324,"load_ms":837.6,"mel_ms":14.1,"encode_ms":731.6,"decode_ms":319.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1067.1,"xrt_wall":10.308}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1241.5,"xrt_compute":8.86,"load_ms":1097.5,"mel_ms":14.5,"encode_ms":901.7,"decode_ms":325.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1243.2,"xrt_wall":8.848}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2585.2,"xrt_compute":13.667,"load_ms":359.0,"mel_ms":45.1,"encode_ms":1105.4,"decode_ms":1434.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2592.0,"xrt_wall":13.631}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":750.7,"xrt_compute":14.652,"load_ms":335.9,"mel_ms":14.3,"encode_ms":418.4,"decode_ms":318.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":754.2,"xrt_wall":14.584}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2544.8,"xrt_compute":13.884,"load_ms":403.3,"mel_ms":44.2,"encode_ms":1073.9,"decode_ms":1426.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2551.6,"xrt_wall":13.847}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":738.1,"xrt_compute":14.904,"load_ms":446.2,"mel_ms":14.8,"encode_ms":406.2,"decode_ms":317.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":741.6,"xrt_wall":14.833} ] } diff --git a/catalog/parakeet-rnnt-1.1b.json b/catalog/parakeet-rnnt-1.1b.json index 546ee29c..e40259c7 100644 --- a/catalog/parakeet-rnnt-1.1b.json +++ b/catalog/parakeet-rnnt-1.1b.json @@ -31,37 +31,38 @@ {"quant":"Q4_K_M","filename":"parakeet-rnnt-1.1b-Q4_K_M.gguf","size_bytes":825244928} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.45,"ci95":[3.99,4.91],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":428,"del":137,"ins":83},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.4,"ci95":[3.97,4.86],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":426,"del":136,"ins":78},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.45,"ci95":[1.31,1.59],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":115,"ins":101},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.45,"ci95":[1.31,1.59],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":115,"ins":101},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.46,"ci95":[1.32,1.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":555,"del":118,"ins":101},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.43,"ci95":[1.29,1.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":111,"ins":97},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.43,"ci95":[1.29,1.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":555,"del":107,"ins":97},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.41,"ci95":[1.27,1.54],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":546,"del":110,"ins":90},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.46,"ci95":[1.32,1.61],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":555,"del":119,"ins":102},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.46,"ci95":[1.31,1.61],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":554,"del":119,"ins":102},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.47,"ci95":[1.32,1.61],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":557,"del":120,"ins":102},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.44,"ci95":[1.29,1.58],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":550,"del":113,"ins":98},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.43,"ci95":[1.29,1.57],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":551,"del":111,"ins":95},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.4,"ci95":[1.27,1.54],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":104,"ins":89},"empty_hyp":0,"utts_over_50pct":3} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.45,"ci95":[3.99,4.91],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":428,"del":137,"ins":83},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.45,"ci95":[1.31,1.59],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":115,"ins":101},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.45,"ci95":[1.31,1.59],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":115,"ins":101},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.46,"ci95":[1.32,1.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":555,"del":118,"ins":101},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.43,"ci95":[1.29,1.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":111,"ins":97},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.43,"ci95":[1.29,1.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":555,"del":107,"ins":97},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.41,"ci95":[1.27,1.54],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":546,"del":110,"ins":90},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":20.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":133.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":114.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":137.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":114.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1858.9,"xrt_compute":19.007,"load_ms":263.9,"mel_ms":1.8,"encode_ms":1750.1,"decode_ms":107.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1860.9,"xrt_wall":18.987}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":133.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":114.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":137.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":114.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6178.9,"xrt_compute":5.718,"load_ms":980.2,"mel_ms":44.5,"encode_ms":4678.4,"decode_ms":1456.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":6183.2,"xrt_wall":5.714}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1576.0,"xrt_compute":6.98,"load_ms":1392.1,"mel_ms":13.8,"encode_ms":1239.6,"decode_ms":322.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1578.4,"xrt_wall":6.969}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7117.1,"xrt_compute":4.964,"load_ms":1458.6,"mel_ms":45.7,"encode_ms":5569.5,"decode_ms":1501.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":7121.7,"xrt_wall":4.961}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1929.3,"xrt_compute":5.701,"load_ms":1963.2,"mel_ms":14.2,"encode_ms":1579.8,"decode_ms":335.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1931.8,"xrt_wall":5.694}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3302.2,"xrt_compute":10.699,"load_ms":513.2,"mel_ms":44.5,"encode_ms":1832.9,"decode_ms":1424.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3310.5,"xrt_wall":10.673}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1038.0,"xrt_compute":10.597,"load_ms":982.6,"mel_ms":13.4,"encode_ms":700.8,"decode_ms":323.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1043.2,"xrt_wall":10.544}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3340.3,"xrt_compute":10.578,"load_ms":730.1,"mel_ms":46.2,"encode_ms":1836.1,"decode_ms":1458.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3349.1,"xrt_wall":10.55}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1013.7,"xrt_compute":10.851,"load_ms":1012.7,"mel_ms":14.8,"encode_ms":675.1,"decode_ms":323.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1019.1,"xrt_wall":10.794} ] } diff --git a/catalog/parakeet-tdt-0.6b-v2.json b/catalog/parakeet-tdt-0.6b-v2.json index 2252d8cd..052f4678 100644 --- a/catalog/parakeet-tdt-0.6b-v2.json +++ b/catalog/parakeet-tdt-0.6b-v2.json @@ -17,7 +17,7 @@ "transcribe": {"supported":true,"verified":false}, "translate": {"supported":false}, "lang_detect": {"supported":false}, - "timestamps": {"supported":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["token"]}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -31,38 +31,38 @@ {"quant":"Q4_K_M","filename":"parakeet-tdt-0.6b-v2-Q4_K_M.gguf","size_bytes":475491840} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.11,"ci95":[3.71,4.53],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":406,"del":125,"ins":68},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.68,"ci95":[1.54,1.83],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":123,"ins":99},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.68,"ci95":[1.54,1.83],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":123,"ins":99},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.69,"ci95":[1.54,1.83],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":124,"ins":100},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.7,"ci95":[1.56,1.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":676,"del":124,"ins":102},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.7,"ci95":[1.56,1.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":677,"del":126,"ins":98},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.72,"ci95":[1.57,1.87],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":682,"del":129,"ins":101},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.69,"ci95":[1.55,1.83],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":673,"del":125,"ins":96},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.69,"ci95":[1.55,1.83],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":673,"del":125,"ins":97},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.68,"ci95":[1.54,1.82],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":669,"del":123,"ins":97},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.67,"ci95":[1.53,1.82],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":123,"ins":95},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.69,"ci95":[1.55,1.84],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":676,"del":125,"ins":96},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.73,"ci95":[1.59,1.88],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":685,"del":134,"ins":98},"empty_hyp":0,"utts_over_50pct":5} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.11,"ci95":[3.71,4.53],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":406,"del":125,"ins":68},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.68,"ci95":[1.54,1.83],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":123,"ins":99},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.68,"ci95":[1.54,1.83],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":123,"ins":99},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.69,"ci95":[1.54,1.83],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":124,"ins":100},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.7,"ci95":[1.56,1.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":676,"del":124,"ins":102},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.7,"ci95":[1.56,1.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":677,"del":126,"ins":98},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.72,"ci95":[1.57,1.87],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":682,"del":129,"ins":101},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":160.0,"xrt_compute":68.77,"load_ms":368.8,"mel_ms":0.9,"encode_ms":138.5,"decode_ms":20.6,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":550.4,"xrt_compute":64.193,"load_ms":165.3,"mel_ms":2.4,"encode_ms":454.6,"decode_ms":93.4,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":183.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":187.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":16.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":16.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":183.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":187.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1046.2,"xrt_compute":10.514,"load_ms":2618.0,"mel_ms":20.4,"encode_ms":766.0,"decode_ms":259.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1047.8,"xrt_wall":10.498}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1226.9,"xrt_compute":8.966,"load_ms":1139.7,"mel_ms":20.5,"encode_ms":934.7,"decode_ms":271.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1228.6,"xrt_wall":8.953}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2435.6,"xrt_compute":14.507,"load_ms":315.9,"mel_ms":64.5,"encode_ms":1092.4,"decode_ms":1278.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2442.0,"xrt_wall":14.468}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":682.1,"xrt_compute":16.128,"load_ms":326.7,"mel_ms":19.7,"encode_ms":402.8,"decode_ms":259.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":685.3,"xrt_wall":16.051}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2446.3,"xrt_compute":14.443,"load_ms":410.3,"mel_ms":66.2,"encode_ms":1076.3,"decode_ms":1303.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2452.0,"xrt_wall":14.41}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":669.9,"xrt_compute":16.421,"load_ms":402.3,"mel_ms":19.8,"encode_ms":388.0,"decode_ms":262.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":673.4,"xrt_wall":16.336} ] } diff --git a/catalog/parakeet-tdt-0.6b-v3.json b/catalog/parakeet-tdt-0.6b-v3.json index 91b66a68..5d48cf93 100644 --- a/catalog/parakeet-tdt-0.6b-v3.json +++ b/catalog/parakeet-tdt-0.6b-v3.json @@ -21,7 +21,7 @@ "transcribe": {"supported":true,"verified":false}, "translate": {"supported":false}, "lang_detect": {"supported":true,"verified":false}, - "timestamps": {"supported":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["token"]}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -35,87 +35,62 @@ {"quant":"Q4_K_M","filename":"parakeet-tdt-0.6b-v3-Q4_K_M.gguf","size_bytes":485425504} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":12.81,"ci95":[12.01,13.64],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1420,"del":278,"ins":118},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":12.31,"ci95":[11.42,13.18],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1383,"del":185,"ins":117},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":18.64,"ci95":[17.84,19.43],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3009,"del":457,"ins":292},"empty_hyp":1,"utts_over_50pct":25}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":5.24,"ci95":[4.83,5.66],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":755,"del":147,"ins":79},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":35.33,"ci95":[34.07,36.55],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4839,"del":374,"ins":147},"empty_hyp":0,"utts_over_50pct":97}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q6_K","metric":"wer","err_pct":35.33,"ci95":[34.09,36.52],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4843,"del":376,"ins":141},"empty_hyp":0,"utts_over_50pct":95}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":35.66,"ci95":[34.39,36.91],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4891,"del":364,"ins":155},"empty_hyp":0,"utts_over_50pct":95}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q4_K_M","metric":"wer","err_pct":36.0,"ci95":[34.75,37.21],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4921,"del":392,"ins":149},"empty_hyp":0,"utts_over_50pct":104}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.83,"ci95":[4.39,5.3],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":484,"del":158,"ins":61},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":4.86,"ci95":[4.42,5.34],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":484,"del":165,"ins":59},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.91,"ci95":[4.47,5.4],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":493,"del":157,"ins":65},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":4.88,"ci95":[4.44,5.33],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":471,"del":182,"ins":57},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.64,"ci95":[3.31,4.01],"n_utts":908,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":627,"del":139,"ins":84},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.65,"ci95":[3.32,4.0],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":625,"del":143,"ins":83},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":17.96,"ci95":[17.06,18.8],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1998,"del":301,"ins":374},"empty_hyp":0,"utts_over_50pct":17}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":13.3,"ci95":[12.48,14.1],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1588,"del":226,"ins":153},"empty_hyp":0,"utts_over_50pct":18}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.3,"ci95":[4.77,5.78],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":748,"del":124,"ins":81},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q6_K","metric":"wer","err_pct":5.46,"ci95":[4.94,5.97],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":768,"del":132,"ins":83},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":5.32,"ci95":[4.81,5.82],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":752,"del":121,"ins":85},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q4_K_M","metric":"wer","err_pct":5.6,"ci95":[5.09,6.12],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":792,"del":136,"ins":80},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":12.59,"ci95":[11.85,13.37],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1794,"del":266,"ins":175},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":16.06,"ci95":[15.24,16.89],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2211,"del":303,"ins":228},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.02,"ci95":[2.72,3.34],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":490,"del":92,"ins":60},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q6_K","metric":"wer","err_pct":3.03,"ci95":[2.71,3.36],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":488,"del":94,"ins":61},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.95,"ci95":[2.65,3.26],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":479,"del":90,"ins":58},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q4_K_M","metric":"wer","err_pct":3.13,"ci95":[2.81,3.47],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":506,"del":101,"ins":58},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":22.2,"ci95":[21.36,23.02],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3363,"del":325,"ins":115},"empty_hyp":0,"utts_over_50pct":38}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":23.77,"ci95":[22.87,24.77],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3224,"del":255,"ins":185},"empty_hyp":0,"utts_over_50pct":41}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":20.63,"ci95":[19.86,21.43],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3672,"del":603,"ins":312},"empty_hyp":0,"utts_over_50pct":20}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q6_K","metric":"wer","err_pct":20.64,"ci95":[19.87,21.41],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3668,"del":616,"ins":304},"empty_hyp":0,"utts_over_50pct":24}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q5_K_M","metric":"wer","err_pct":20.79,"ci95":[20.02,21.57],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3681,"del":634,"ins":306},"empty_hyp":0,"utts_over_50pct":19}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q4_K_M","metric":"wer","err_pct":21.65,"ci95":[20.84,22.4],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3838,"del":667,"ins":308},"empty_hyp":0,"utts_over_50pct":25}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":7.66,"ci95":[6.83,8.46],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":489,"del":87,"ins":67},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q6_K","metric":"wer","err_pct":7.63,"ci95":[6.82,8.38],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":485,"del":91,"ins":65},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":7.54,"ci95":[6.76,8.27],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":478,"del":87,"ins":68},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q4_K_M","metric":"wer","err_pct":8.03,"ci95":[7.23,8.82],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":503,"del":101,"ins":70},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":7.37,"ci95":[6.75,7.97],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":883,"del":120,"ins":57},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":4.96,"ci95":[4.49,5.52],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":736,"del":169,"ins":160},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":12.62,"ci95":[11.95,13.33],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2052,"del":408,"ins":165},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q6_K","metric":"wer","err_pct":12.59,"ci95":[11.9,13.27],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2052,"del":398,"ins":168},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q5_K_M","metric":"wer","err_pct":12.92,"ci95":[12.21,13.63],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2098,"del":415,"ins":175},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q4_K_M","metric":"wer","err_pct":13.6,"ci95":[12.89,14.33],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2218,"del":414,"ins":197},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":6.54,"ci95":[6.08,7.06],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":837,"del":104,"ins":47},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":10.19,"ci95":[9.43,10.91],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1230,"del":241,"ins":82},"empty_hyp":4,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":24.3,"ci95":[23.22,25.5],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3219,"del":446,"ins":348},"empty_hyp":0,"utts_over_50pct":44}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":15.25,"ci95":[14.38,16.05],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1824,"del":349,"ins":174},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q6_K","metric":"wer","err_pct":15.32,"ci95":[14.51,16.12],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1820,"del":353,"ins":184},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q5_K_M","metric":"wer","err_pct":15.35,"ci95":[14.53,16.19],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1826,"del":344,"ins":192},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q4_K_M","metric":"wer","err_pct":15.65,"ci95":[14.8,16.48],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1882,"del":353,"ins":173},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":6.84,"ci95":[6.25,7.46],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":794,"del":124,"ins":65},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.95,"ci95":[1.79,2.12],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":768,"del":129,"ins":138},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.95,"ci95":[1.79,2.12],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":767,"del":129,"ins":138},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.94,"ci95":[1.78,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":766,"del":125,"ins":137},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.93,"ci95":[1.77,2.09],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":760,"del":127,"ins":134},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.92,"ci95":[1.77,2.09],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":766,"del":121,"ins":133},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.98,"ci95":[1.82,2.15],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":788,"del":128,"ins":135},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.93,"ci95":[1.77,2.09],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":772,"del":126,"ins":123},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.93,"ci95":[1.78,2.1],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":774,"del":128,"ins":124},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.93,"ci95":[1.77,2.08],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":126,"ins":126},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.91,"ci95":[1.76,2.08],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":767,"del":124,"ins":124},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.91,"ci95":[1.77,2.07],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":772,"del":122,"ins":121},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.96,"ci95":[1.81,2.12],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":792,"del":129,"ins":119},"empty_hyp":0,"utts_over_50pct":5} + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":12.81,"ci95":[12.01,13.64],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1420,"del":278,"ins":118},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":12.31,"ci95":[11.42,13.18],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1383,"del":185,"ins":117},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":18.64,"ci95":[17.84,19.43],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3009,"del":457,"ins":292},"empty_hyp":1,"utts_over_50pct":25,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":5.24,"ci95":[4.83,5.66],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":755,"del":147,"ins":79},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":35.33,"ci95":[34.07,36.55],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4839,"del":374,"ins":147},"empty_hyp":0,"utts_over_50pct":97,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.83,"ci95":[4.39,5.3],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":484,"del":158,"ins":61},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.65,"ci95":[3.32,4.0],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":625,"del":143,"ins":83},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":17.96,"ci95":[17.06,18.8],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1998,"del":301,"ins":374},"empty_hyp":0,"utts_over_50pct":17,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":13.3,"ci95":[12.48,14.1],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1588,"del":226,"ins":153},"empty_hyp":0,"utts_over_50pct":18,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.3,"ci95":[4.77,5.78],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":748,"del":124,"ins":81},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":12.59,"ci95":[11.85,13.37],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1794,"del":266,"ins":175},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":16.06,"ci95":[15.24,16.89],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2211,"del":303,"ins":228},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.02,"ci95":[2.72,3.34],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":490,"del":92,"ins":60},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":22.2,"ci95":[21.36,23.02],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3363,"del":325,"ins":115},"empty_hyp":0,"utts_over_50pct":38,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":23.77,"ci95":[22.87,24.77],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3224,"del":255,"ins":185},"empty_hyp":0,"utts_over_50pct":41,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":20.63,"ci95":[19.86,21.43],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3672,"del":603,"ins":312},"empty_hyp":0,"utts_over_50pct":20,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":7.66,"ci95":[6.83,8.46],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":489,"del":87,"ins":67},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":7.37,"ci95":[6.75,7.97],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":883,"del":120,"ins":57},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":4.96,"ci95":[4.49,5.52],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":736,"del":169,"ins":160},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":12.62,"ci95":[11.95,13.33],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2052,"del":408,"ins":165},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":6.54,"ci95":[6.08,7.06],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":837,"del":104,"ins":47},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":10.19,"ci95":[9.43,10.91],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1230,"del":241,"ins":82},"empty_hyp":4,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":24.3,"ci95":[23.22,25.5],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3219,"del":446,"ins":348},"empty_hyp":0,"utts_over_50pct":44,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":15.25,"ci95":[14.38,16.05],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1824,"del":349,"ins":174},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":6.84,"ci95":[6.25,7.46],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":794,"del":124,"ins":65},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.95,"ci95":[1.79,2.12],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":768,"del":129,"ins":138},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.95,"ci95":[1.79,2.12],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":767,"del":129,"ins":138},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.94,"ci95":[1.78,2.1],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":766,"del":125,"ins":137},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.93,"ci95":[1.77,2.09],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":760,"del":127,"ins":134},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.92,"ci95":[1.77,2.09],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":766,"del":121,"ins":133},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.98,"ci95":[1.82,2.15],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":788,"del":128,"ins":135},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":173.6,"xrt_compute":63.354,"load_ms":386.1,"mel_ms":0.8,"encode_ms":138.2,"decode_ms":34.5,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":604.0,"xrt_compute":58.501,"load_ms":188.6,"mel_ms":2.4,"encode_ms":455.0,"decode_ms":146.5,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":153.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":153.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":149.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1309.3,"xrt_compute":26.985,"load_ms":225.5,"mel_ms":3.5,"encode_ms":1247.1,"decode_ms":58.7,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":1311.0,"xrt_wall":26.951}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":385.6,"xrt_compute":28.529,"load_ms":222.2,"mel_ms":1.1,"encode_ms":368.0,"decode_ms":16.5,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":386.3,"xrt_wall":28.474}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":224.1,"xrt_compute":157.684,"load_ms":146.7,"mel_ms":3.3,"encode_ms":150.3,"decode_ms":70.4,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":226.1,"xrt_wall":156.275}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":75.2,"xrt_compute":146.354,"load_ms":151.5,"mel_ms":1.2,"encode_ms":56.9,"decode_ms":17.1,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":76.5,"xrt_wall":143.755}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":223.9,"xrt_compute":157.783,"load_ms":183.9,"mel_ms":3.3,"encode_ms":155.4,"decode_ms":65.2,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":225.8,"xrt_wall":156.451}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":73.5,"xrt_compute":149.593,"load_ms":197.2,"mel_ms":1.2,"encode_ms":55.9,"decode_ms":16.4,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":74.9,"xrt_wall":146.9}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1221.2,"xrt_compute":9.008,"load_ms":883.7,"mel_ms":19.6,"encode_ms":761.8,"decode_ms":439.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1222.8,"xrt_wall":8.996}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1410.4,"xrt_compute":7.799,"load_ms":1164.2,"mel_ms":21.2,"encode_ms":931.7,"decode_ms":457.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1412.1,"xrt_wall":7.79}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3095.0,"xrt_compute":11.416,"load_ms":370.6,"mel_ms":64.6,"encode_ms":1096.8,"decode_ms":1933.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3100.5,"xrt_wall":11.395}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":864.5,"xrt_compute":12.724,"load_ms":380.5,"mel_ms":19.8,"encode_ms":406.6,"decode_ms":438.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":867.7,"xrt_wall":12.676}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3061.3,"xrt_compute":11.542,"load_ms":420.6,"mel_ms":63.5,"encode_ms":1075.7,"decode_ms":1922.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3066.8,"xrt_wall":11.521}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":854.1,"xrt_compute":12.879,"load_ms":426.8,"mel_ms":20.1,"encode_ms":388.1,"decode_ms":445.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":857.5,"xrt_wall":12.828} ] } diff --git a/catalog/parakeet-tdt-1.1b.json b/catalog/parakeet-tdt-1.1b.json index 0b8665bf..c0b52acd 100644 --- a/catalog/parakeet-tdt-1.1b.json +++ b/catalog/parakeet-tdt-1.1b.json @@ -31,37 +31,38 @@ {"quant":"Q4_K_M","filename":"parakeet-tdt-1.1b-Q4_K_M.gguf","size_bytes":825248416} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.24,"ci95":[3.78,4.71],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":414,"del":124,"ins":79},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.16,"ci95":[3.72,4.63],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":406,"del":121,"ins":78},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.39,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":98,"ins":89},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.39,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":98,"ins":89},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.38,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":98,"ins":88},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.4,"ci95":[1.26,1.53],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":98,"ins":90},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.39,"ci95":[1.25,1.53],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":549,"del":98,"ins":88},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.42,"ci95":[1.28,1.55],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":562,"del":105,"ins":86},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.39,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":98,"ins":91},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.39,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":98,"ins":91},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.38,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":546,"del":99,"ins":89},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.39,"ci95":[1.25,1.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":102,"ins":88},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.39,"ci95":[1.25,1.52],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":553,"del":96,"ins":86},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.41,"ci95":[1.27,1.55],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":560,"del":103,"ins":86},"empty_hyp":0,"utts_over_50pct":3} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.24,"ci95":[3.78,4.71],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":414,"del":124,"ins":79},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.39,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":98,"ins":89},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.39,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":98,"ins":89},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.38,"ci95":[1.24,1.52],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":548,"del":98,"ins":88},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.4,"ci95":[1.26,1.53],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":552,"del":98,"ins":90},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.39,"ci95":[1.25,1.53],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":549,"del":98,"ins":88},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.42,"ci95":[1.28,1.55],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":562,"del":105,"ins":86},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":20.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":139.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":113.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":139.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":20.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":254.0,"xrt_compute":139.091,"load_ms":209.9,"mel_ms":1.8,"encode_ms":219.2,"decode_ms":33.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":257.5,"xrt_wall":137.215}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":97.0,"xrt_compute":113.42,"load_ms":221.0,"mel_ms":0.7,"encode_ms":88.0,"decode_ms":8.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":99.7,"xrt_wall":110.344}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":255.1,"xrt_compute":138.518,"load_ms":300.2,"mel_ms":1.8,"encode_ms":220.0,"decode_ms":33.3,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":258.6,"xrt_wall":136.643}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":94.5,"xrt_compute":116.365,"load_ms":334.9,"mel_ms":0.7,"encode_ms":85.5,"decode_ms":8.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":97.3,"xrt_wall":113.106}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5933.1,"xrt_compute":5.955,"load_ms":986.9,"mel_ms":45.6,"encode_ms":4746.2,"decode_ms":1141.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":5937.6,"xrt_wall":5.951}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6813.5,"xrt_compute":5.186,"load_ms":1325.7,"mel_ms":47.6,"encode_ms":5579.2,"decode_ms":1186.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":6818.2,"xrt_wall":5.182}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1916.9,"xrt_compute":5.738,"load_ms":1370.9,"mel_ms":15.0,"encode_ms":1655.3,"decode_ms":246.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1919.4,"xrt_wall":5.731}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2994.1,"xrt_compute":11.801,"load_ms":522.5,"mel_ms":46.1,"encode_ms":1835.1,"decode_ms":1112.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3002.6,"xrt_wall":11.767}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":936.3,"xrt_compute":11.749,"load_ms":484.3,"mel_ms":14.2,"encode_ms":695.6,"decode_ms":226.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":941.7,"xrt_wall":11.681}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3020.2,"xrt_compute":11.699,"load_ms":655.3,"mel_ms":46.9,"encode_ms":1833.8,"decode_ms":1139.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3029.5,"xrt_wall":11.663}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":960.7,"xrt_compute":11.449,"load_ms":676.0,"mel_ms":15.0,"encode_ms":710.7,"decode_ms":235.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":966.4,"xrt_wall":11.382} ] } diff --git a/catalog/parakeet-tdt_ctc-1.1b.json b/catalog/parakeet-tdt_ctc-1.1b.json index 8efd8a6c..f454e628 100644 --- a/catalog/parakeet-tdt_ctc-1.1b.json +++ b/catalog/parakeet-tdt_ctc-1.1b.json @@ -31,39 +31,38 @@ {"quant":"Q4_K_M","filename":"parakeet-tdt_ctc-1.1b-Q4_K_M.gguf","size_bytes":825248000} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.68,"ci95":[4.22,5.15],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":481,"del":127,"ins":73},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.61,"ci95":[4.15,5.11],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":475,"del":131,"ins":65},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.87,"ci95":[1.72,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":752,"del":151,"ins":89},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.87,"ci95":[1.72,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":752,"del":151,"ins":89},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.87,"ci95":[1.72,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":754,"del":151,"ins":88},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.87,"ci95":[1.71,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":754,"del":151,"ins":85},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.87,"ci95":[1.71,2.01],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":750,"del":157,"ins":82},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.91,"ci95":[1.74,2.06],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":158,"ins":85},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.86,"ci95":[1.69,2.02],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":747,"del":148,"ins":89},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.86,"ci95":[1.7,2.02],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":748,"del":148,"ins":88},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.85,"ci95":[1.7,2.01],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":745,"del":150,"ins":86},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.89,"ci95":[1.73,2.06],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":760,"del":153,"ins":88},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.89,"ci95":[1.73,2.05],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":755,"del":154,"ins":91},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.9,"ci95":[1.75,2.06],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":760,"del":164,"ins":84},"empty_hyp":0,"utts_over_50pct":4} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.68,"ci95":[4.22,5.15],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":481,"del":127,"ins":73},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.87,"ci95":[1.72,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":752,"del":151,"ins":89},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.87,"ci95":[1.72,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":752,"del":151,"ins":89},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.87,"ci95":[1.72,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":754,"del":151,"ins":88},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.87,"ci95":[1.71,2.02],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":754,"del":151,"ins":85},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.87,"ci95":[1.71,2.01],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":750,"del":157,"ins":82},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.91,"ci95":[1.74,2.06],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":158,"ins":85},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":247.2,"xrt_compute":44.499,"load_ms":279.3,"mel_ms":0.7,"encode_ms":214.4,"decode_ms":32.1,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":793.0,"xrt_compute":44.554,"load_ms":293.6,"mel_ms":1.9,"encode_ms":673.4,"decode_ms":117.7,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":137.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":109.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":138.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":113.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1614.1,"xrt_compute":21.89,"load_ms":263.0,"mel_ms":1.7,"encode_ms":1564.2,"decode_ms":48.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1615.3,"xrt_wall":21.874}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":513.8,"xrt_compute":21.408,"load_ms":261.5,"mel_ms":0.7,"encode_ms":499.8,"decode_ms":13.4,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":515.0,"xrt_wall":21.36}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":625.0,"xrt_compute":17.6,"load_ms":347.9,"mel_ms":0.7,"encode_ms":611.6,"decode_ms":12.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":626.2,"xrt_wall":17.567}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":269.1,"xrt_compute":131.306,"load_ms":216.8,"mel_ms":1.7,"encode_ms":219.2,"decode_ms":48.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":271.8,"xrt_wall":129.97}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":103.0,"xrt_compute":106.823,"load_ms":238.1,"mel_ms":0.7,"encode_ms":88.8,"decode_ms":13.5,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":105.7,"xrt_wall":104.082}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":138.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":100.2,"xrt_compute":109.763,"load_ms":346.8,"mel_ms":0.7,"encode_ms":86.4,"decode_ms":13.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":103.0,"xrt_wall":106.825}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5624.8,"xrt_compute":6.282,"load_ms":978.5,"mel_ms":43.7,"encode_ms":4284.3,"decode_ms":1296.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":5627.4,"xrt_wall":6.279}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1531.2,"xrt_compute":7.184,"load_ms":1387.8,"mel_ms":14.4,"encode_ms":1242.6,"decode_ms":274.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1533.5,"xrt_wall":7.173}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1879.4,"xrt_compute":5.853,"load_ms":1870.8,"mel_ms":14.4,"encode_ms":1582.8,"decode_ms":282.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1881.8,"xrt_wall":5.845}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3129.8,"xrt_compute":11.289,"load_ms":498.3,"mel_ms":45.1,"encode_ms":1813.0,"decode_ms":1271.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3137.0,"xrt_wall":11.263}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":987.5,"xrt_compute":11.14,"load_ms":491.9,"mel_ms":15.4,"encode_ms":703.7,"decode_ms":268.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":992.8,"xrt_wall":11.08}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3130.9,"xrt_compute":11.285,"load_ms":640.8,"mel_ms":47.6,"encode_ms":1772.0,"decode_ms":1311.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3138.6,"xrt_wall":11.257}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":973.1,"xrt_compute":11.304,"load_ms":648.8,"mel_ms":14.8,"encode_ms":684.2,"decode_ms":274.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":979.0,"xrt_wall":11.236} ] } diff --git a/catalog/parakeet-tdt_ctc-110m.json b/catalog/parakeet-tdt_ctc-110m.json index 6e855208..36db8691 100644 --- a/catalog/parakeet-tdt_ctc-110m.json +++ b/catalog/parakeet-tdt_ctc-110m.json @@ -31,36 +31,38 @@ {"quant":"Q4_K_M","filename":"parakeet-tdt_ctc-110m-Q4_K_M.gguf","size_bytes":89989600} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.11,"ci95":[5.59,6.66],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":630,"del":164,"ins":95},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.43,"ci95":[2.25,2.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1007,"del":154,"ins":127},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.43,"ci95":[2.26,2.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1006,"del":154,"ins":128},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.43,"ci95":[2.26,2.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1003,"del":156,"ins":130},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.44,"ci95":[2.26,2.61],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1005,"del":154,"ins":133},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.47,"ci95":[2.29,2.65],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1029,"del":149,"ins":131},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.53,"ci95":[2.35,2.72],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1050,"del":160,"ins":133},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.4,"ci95":[2.22,2.58],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":997,"del":150,"ins":125},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.41,"ci95":[2.24,2.58],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1000,"del":152,"ins":126},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.44,"ci95":[2.26,2.62],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1009,"del":155,"ins":129},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.44,"ci95":[2.27,2.62],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1003,"del":157,"ins":133},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.47,"ci95":[2.3,2.66],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1025,"del":155,"ins":132},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.53,"ci95":[2.35,2.72],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1047,"del":164,"ins":128},"empty_hyp":0,"utts_over_50pct":7} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.11,"ci95":[5.59,6.66],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":630,"del":164,"ins":95},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.43,"ci95":[2.25,2.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1007,"del":154,"ins":127},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.43,"ci95":[2.26,2.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1006,"del":154,"ins":128},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.43,"ci95":[2.26,2.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1003,"del":156,"ins":130},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.44,"ci95":[2.26,2.61],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1005,"del":154,"ins":133},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.47,"ci95":[2.29,2.65],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1029,"del":149,"ins":131},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.53,"ci95":[2.35,2.72],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1050,"del":160,"ins":133},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":116.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":126.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":111.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":121.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":367.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":315.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":368.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":327.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":21.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":26.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":311.3,"xrt_compute":113.493,"load_ms":50.4,"mel_ms":1.7,"encode_ms":287.5,"decode_ms":22.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":312.3,"xrt_wall":113.128}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":88.5,"xrt_compute":124.332,"load_ms":48.9,"mel_ms":0.7,"encode_ms":81.9,"decode_ms":5.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":89.0,"xrt_wall":123.607}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":325.3,"xrt_compute":108.624,"load_ms":57.5,"mel_ms":1.6,"encode_ms":302.2,"decode_ms":21.4,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":326.3,"xrt_wall":108.29}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":93.7,"xrt_compute":117.366,"load_ms":69.7,"mel_ms":0.7,"encode_ms":87.3,"decode_ms":5.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":94.2,"xrt_wall":116.72}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":98.1,"xrt_compute":360.024,"load_ms":58.5,"mel_ms":1.7,"encode_ms":73.4,"decode_ms":23.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":99.8,"xrt_wall":353.883}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":315.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":98.6,"xrt_compute":358.289,"load_ms":61.4,"mel_ms":1.7,"encode_ms":75.0,"decode_ms":21.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":100.2,"xrt_wall":352.562}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":34.4,"xrt_compute":320.028,"load_ms":59.3,"mel_ms":0.7,"encode_ms":27.8,"decode_ms":5.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":35.5,"xrt_wall":309.571}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1640.8,"xrt_compute":21.534,"load_ms":143.5,"mel_ms":46.6,"encode_ms":847.1,"decode_ms":747.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1643.1,"xrt_wall":21.503}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":394.4,"xrt_compute":27.892,"load_ms":143.7,"mel_ms":14.4,"encode_ms":215.8,"decode_ms":164.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":395.5,"xrt_wall":27.815}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1701.9,"xrt_compute":20.76,"load_ms":167.2,"mel_ms":47.6,"encode_ms":908.3,"decode_ms":746.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1704.3,"xrt_wall":20.731}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":420.5,"xrt_compute":26.161,"load_ms":168.5,"mel_ms":15.6,"encode_ms":238.6,"decode_ms":166.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":421.6,"xrt_wall":26.091}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1194.1,"xrt_compute":29.59,"load_ms":122.3,"mel_ms":47.2,"encode_ms":408.1,"decode_ms":738.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1198.0,"xrt_wall":29.493}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":321.5,"xrt_compute":34.22,"load_ms":125.7,"mel_ms":16.5,"encode_ms":143.5,"decode_ms":161.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":323.9,"xrt_wall":33.963}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1177.7,"xrt_compute":30.002,"load_ms":138.1,"mel_ms":46.1,"encode_ms":400.2,"decode_ms":731.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1181.5,"xrt_wall":29.905}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":314.9,"xrt_compute":34.936,"load_ms":137.6,"mel_ms":14.4,"encode_ms":137.0,"decode_ms":163.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":317.4,"xrt_wall":34.66} ] } diff --git a/catalog/parakeet-unified-en-0.6b.json b/catalog/parakeet-unified-en-0.6b.json index dbdbe375..839a006b 100644 --- a/catalog/parakeet-unified-en-0.6b.json +++ b/catalog/parakeet-unified-en-0.6b.json @@ -18,9 +18,11 @@ "transcribe": {"supported":true,"verified":true}, "translate": {"supported":false}, "lang_detect": {"supported":false}, - "timestamps": {"supported":true,"granularities":["token","word"],"verified":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["token"]}, "streaming": { "supported": true, + "verified": true, + "note": "byte-equal transcript vs NeMo speech_to_text_streaming_infer_rnnt.py at the default (70, 13, 13)", "mode": "buffered", "presets": [ {"name":"70-1-0","left_ms":5600,"chunk_ms":80,"right_ms":0,"lookahead_ms":80,"is_default":false}, @@ -29,9 +31,7 @@ {"name":"70-2-4","left_ms":5600,"chunk_ms":160,"right_ms":320,"lookahead_ms":480,"is_default":false}, {"name":"70-7-7","left_ms":5600,"chunk_ms":560,"right_ms":560,"lookahead_ms":1120,"is_default":false}, {"name":"70-13-13","left_ms":5600,"chunk_ms":1040,"right_ms":1040,"lookahead_ms":2080,"is_default":true} - ], - "verified": true, - "note": "byte-equal transcript vs NeMo speech_to_text_streaming_infer_rnnt.py at the default (70, 13, 13)" + ] }, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false}, @@ -46,23 +46,23 @@ {"quant":"Q4_K_M","filename":"parakeet-unified-en-0.6b-Q4_K_M.gguf","size_bytes":477274496} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.99,"ci95":[3.6,4.42],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":116,"ins":60},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.59,"ci95":[1.45,1.73],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":635,"del":118,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.59,"ci95":[1.45,1.74],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":636,"del":118,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.6,"ci95":[1.46,1.75],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":641,"del":117,"ins":92},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.61,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":645,"del":119,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.58,"ci95":[1.44,1.73],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":631,"del":118,"ins":90},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.62,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":643,"del":123,"ins":92},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.6,"ci95":[1.46,1.75],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":635,"del":122,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.6,"ci95":[1.46,1.75],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":635,"del":122,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.61,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":641,"del":119,"ins":92},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.61,"ci95":[1.46,1.76],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":643,"del":119,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.6,"ci95":[1.46,1.74],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":632,"del":120,"ins":94},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.61,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":639,"del":123,"ins":93},"empty_hyp":0,"utts_over_50pct":3} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.99,"ci95":[3.6,4.42],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":116,"ins":60},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":1.59,"ci95":[1.45,1.73],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":635,"del":118,"ins":91},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.59,"ci95":[1.45,1.74],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":636,"del":118,"ins":91},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.6,"ci95":[1.46,1.75],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":641,"del":117,"ins":92},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.61,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":645,"del":119,"ins":91},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.58,"ci95":[1.44,1.73],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":631,"del":118,"ins":90},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.62,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":643,"del":123,"ins":92},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":222.6,"xrt_compute":49.406,"load_ms":170.1,"mel_ms":0.8,"encode_ms":142.4,"decode_ms":79.4,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":771.8,"xrt_compute":45.777,"load_ms":195.5,"mel_ms":2.4,"encode_ms":464.4,"decode_ms":305.0,"engine_sha":"5c33c96","measured_on":"2026-05-10","thermal_gated":null}, {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1090.0,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":318.0,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1270.0,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, @@ -71,14 +71,14 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":71.0,"xrt_compute":155.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":210.0,"xrt_compute":168.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":69.0,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4660.2,"xrt_compute":7.582,"load_ms":817.6,"mel_ms":63.7,"encode_ms":2784.3,"decode_ms":1812.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1179.3,"xrt_compute":9.328,"load_ms":834.4,"mel_ms":19.0,"encode_ms":767.2,"decode_ms":393.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5214.8,"xrt_compute":6.775,"load_ms":1022.9,"mel_ms":67.0,"encode_ms":3273.0,"decode_ms":1874.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1346.4,"xrt_compute":8.17,"load_ms":1147.8,"mel_ms":20.4,"encode_ms":925.3,"decode_ms":400.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3039.8,"xrt_compute":11.623,"load_ms":324.4,"mel_ms":65.0,"encode_ms":1168.0,"decode_ms":1806.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":844.0,"xrt_compute":13.033,"load_ms":599.8,"mel_ms":20.0,"encode_ms":435.6,"decode_ms":388.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3026.6,"xrt_compute":11.674,"load_ms":393.1,"mel_ms":67.0,"encode_ms":1141.2,"decode_ms":1818.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":834.9,"xrt_compute":13.175,"load_ms":677.6,"mel_ms":22.5,"encode_ms":419.3,"decode_ms":393.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4660.2,"xrt_compute":7.582,"load_ms":817.6,"mel_ms":63.7,"encode_ms":2784.3,"decode_ms":1812.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":4663.9,"xrt_wall":7.576}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1179.3,"xrt_compute":9.328,"load_ms":834.4,"mel_ms":19.0,"encode_ms":767.2,"decode_ms":393.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":1181.1,"xrt_wall":9.313}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5214.8,"xrt_compute":6.775,"load_ms":1022.9,"mel_ms":67.0,"encode_ms":3273.0,"decode_ms":1874.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":5218.8,"xrt_wall":6.77}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1346.4,"xrt_compute":8.17,"load_ms":1147.8,"mel_ms":20.4,"encode_ms":925.3,"decode_ms":400.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":1348.3,"xrt_wall":8.158}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3039.8,"xrt_compute":11.623,"load_ms":324.4,"mel_ms":65.0,"encode_ms":1168.0,"decode_ms":1806.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":3046.4,"xrt_wall":11.598}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":844.0,"xrt_compute":13.033,"load_ms":599.8,"mel_ms":20.0,"encode_ms":435.6,"decode_ms":388.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":847.6,"xrt_wall":12.977}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3026.6,"xrt_compute":11.674,"load_ms":393.1,"mel_ms":67.0,"encode_ms":1141.2,"decode_ms":1818.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":3032.5,"xrt_wall":11.651}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":834.9,"xrt_compute":13.175,"load_ms":677.6,"mel_ms":22.5,"encode_ms":419.3,"decode_ms":393.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":838.8,"xrt_wall":13.114} ], "architecture_pattern": "encoder-transducer" } diff --git a/catalog/qwen3-asr-0.6b.json b/catalog/qwen3-asr-0.6b.json index 3dcb71de..732beba7 100644 --- a/catalog/qwen3-asr-0.6b.json +++ b/catalog/qwen3-asr-0.6b.json @@ -35,62 +35,67 @@ {"quant":"Q4_K_M","filename":"Qwen3-ASR-0.6B-Q4_K_M.gguf","size_bytes":589560480} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":24.51,"ci95":[22.15,28.02],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1508,"del":348,"ins":163},"empty_hyp":0,"utts_over_50pct":23}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":44.5,"ci95":[43.23,45.72],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5071,"del":649,"ins":373},"empty_hyp":0,"utts_over_50pct":246}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":36.07,"ci95":[35.05,37.08],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5679,"del":828,"ins":763},"empty_hyp":0,"utts_over_50pct":160}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.8,"ci95":[6.33,7.3],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":989,"del":169,"ins":115},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":49.12,"ci95":[47.74,50.55],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5693,"del":1534,"ins":226},"empty_hyp":0,"utts_over_50pct":286}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.23,"ci95":[3.76,4.69],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":406,"del":126,"ins":84},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":4.88,"ci95":[4.5,5.29],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":808,"del":207,"ins":124},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":50.3,"ci95":[49.3,51.39],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7893,"del":1201,"ins":1016},"empty_hyp":0,"utts_over_50pct":419}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":46.49,"ci95":[45.2,47.9],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5591,"del":719,"ins":568},"empty_hyp":0,"utts_over_50pct":356}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":35.43,"ci95":[34.47,36.38],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7114,"del":1033,"ins":1216},"empty_hyp":0,"utts_over_50pct":161}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":7.76,"ci95":[7.14,8.43],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1013,"del":206,"ins":178},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":12.68,"ci95":[11.63,13.83],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1357,"del":737,"ins":284},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":56.24,"ci95":[54.94,57.67],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7508,"del":1386,"ins":709},"empty_hyp":1,"utts_over_50pct":547}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":8.49,"ci95":[7.85,9.21],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":894,"del":113,"ins":144},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":5.19,"ci95":[4.78,5.64],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":812,"del":179,"ins":112},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":8.61,"ci95":[7.98,9.28],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1929,"del":522,"ins":359},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.82,"ci95":[4.86,6.83],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":422,"del":553,"ins":54},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":35.09,"ci95":[34.14,36.11],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5844,"del":971,"ins":584},"empty_hyp":0,"utts_over_50pct":160}, - {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":17.18,"ci95":[16.28,18.01],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2163,"del":160,"ins":211},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":13.9,"ci95":[12.88,14.93],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":891,"del":155,"ins":121},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":25.06,"ci95":[24.04,26.12],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2993,"del":363,"ins":250},"empty_hyp":0,"utts_over_50pct":52}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":6.57,"ci95":[6.05,7.12],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1016,"del":207,"ins":187},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":40.65,"ci95":[39.48,41.79],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6596,"del":1379,"ins":481},"empty_hyp":0,"utts_over_50pct":254}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":10.3,"ci95":[9.59,11.0],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1258,"del":185,"ins":113},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":35.72,"ci95":[34.53,36.94],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4292,"del":762,"ins":443},"empty_hyp":0,"utts_over_50pct":160}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":8.81,"ci95":[8.04,9.71],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3502,"del":2027,"ins":3058},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":16.74,"ci95":[15.89,17.74],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1778,"del":237,"ins":211},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.32,"ci95":[8.67,9.93],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1919,"del":256,"ins":249},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":7.91,"ci95":[7.28,8.52],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1836,"del":211,"ins":248},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":7.64,"ci95":[6.78,8.57],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":926,"del":1495,"ins":303},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":7.57,"ci95":[6.7,8.42],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":914,"del":1473,"ins":313},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.12,"ci95":[1.96,2.29],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":874,"del":161,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.12,"ci95":[1.96,2.28],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":870,"del":161,"ins":91},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.11,"ci95":[1.95,2.27],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":867,"del":161,"ins":90},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.11,"ci95":[1.95,2.27],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":862,"del":162,"ins":93},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.21,"ci95":[2.05,2.38],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":906,"del":169,"ins":96},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.26,"ci95":[2.08,2.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":931,"del":149,"ins":121},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.11,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.1,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":24.51,"ci95":[22.15,28.02],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1508,"del":348,"ins":163},"empty_hyp":0,"utts_over_50pct":23,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":44.5,"ci95":[43.23,45.72],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5071,"del":649,"ins":373},"empty_hyp":0,"utts_over_50pct":246,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":36.07,"ci95":[35.05,37.08],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5679,"del":828,"ins":763},"empty_hyp":0,"utts_over_50pct":160,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.8,"ci95":[6.33,7.3],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":989,"del":169,"ins":115},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":49.12,"ci95":[47.74,50.55],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5693,"del":1534,"ins":226},"empty_hyp":0,"utts_over_50pct":286,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.23,"ci95":[3.76,4.69],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":406,"del":126,"ins":84},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":4.88,"ci95":[4.5,5.29],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":808,"del":207,"ins":124},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":50.3,"ci95":[49.3,51.39],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7893,"del":1201,"ins":1016},"empty_hyp":0,"utts_over_50pct":419,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":46.49,"ci95":[45.2,47.9],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5591,"del":719,"ins":568},"empty_hyp":0,"utts_over_50pct":356,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":35.43,"ci95":[34.47,36.38],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7114,"del":1033,"ins":1216},"empty_hyp":0,"utts_over_50pct":161,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":7.76,"ci95":[7.14,8.43],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1013,"del":206,"ins":178},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":12.68,"ci95":[11.63,13.83],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1357,"del":737,"ins":284},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":56.24,"ci95":[54.94,57.67],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7508,"del":1386,"ins":709},"empty_hyp":1,"utts_over_50pct":547,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":8.49,"ci95":[7.85,9.21],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":894,"del":113,"ins":144},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":5.19,"ci95":[4.78,5.64],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":812,"del":179,"ins":112},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":8.61,"ci95":[7.98,9.28],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1929,"del":522,"ins":359},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.82,"ci95":[4.86,6.83],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":422,"del":553,"ins":54},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":35.09,"ci95":[34.14,36.11],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5844,"del":971,"ins":584},"empty_hyp":0,"utts_over_50pct":160,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":17.18,"ci95":[16.28,18.01],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2163,"del":160,"ins":211},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":13.9,"ci95":[12.88,14.93],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":891,"del":155,"ins":121},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":25.06,"ci95":[24.04,26.12],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2993,"del":363,"ins":250},"empty_hyp":0,"utts_over_50pct":52,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":6.57,"ci95":[6.05,7.12],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1016,"del":207,"ins":187},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":40.65,"ci95":[39.48,41.79],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6596,"del":1379,"ins":481},"empty_hyp":0,"utts_over_50pct":254,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":10.3,"ci95":[9.59,11.0],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1258,"del":185,"ins":113},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":35.72,"ci95":[34.53,36.94],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4292,"del":762,"ins":443},"empty_hyp":0,"utts_over_50pct":160,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":8.81,"ci95":[8.04,9.71],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3502,"del":2027,"ins":3058},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":16.74,"ci95":[15.89,17.74],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1778,"del":237,"ins":211},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.32,"ci95":[8.67,9.93],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1919,"del":256,"ins":249},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":7.91,"ci95":[7.28,8.52],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1836,"del":211,"ins":248},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":7.57,"ci95":[6.7,8.42],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":914,"del":1473,"ins":313},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.12,"ci95":[1.96,2.29],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":874,"del":161,"ins":91},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.12,"ci95":[1.96,2.28],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":870,"del":161,"ins":91},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.11,"ci95":[1.95,2.27],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":867,"del":161,"ins":90},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.11,"ci95":[1.95,2.27],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":862,"del":162,"ins":93},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.21,"ci95":[2.05,2.38],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":906,"del":169,"ins":96},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.26,"ci95":[2.08,2.44],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":931,"del":149,"ins":121},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":16.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":67.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":59.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":16.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":67.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":59.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7336.5,"xrt_compute":4.816,"load_ms":536.1,"mel_ms":137.8,"encode_ms":2857.4,"decode_ms":4341.2,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":7338.2,"xrt_wall":4.815}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1921.0,"xrt_compute":5.726,"load_ms":589.0,"mel_ms":45.9,"encode_ms":777.3,"decode_ms":1097.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":1921.8,"xrt_wall":5.724}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8604.4,"xrt_compute":4.106,"load_ms":765.1,"mel_ms":149.2,"encode_ms":2568.0,"decode_ms":5887.2,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":8606.0,"xrt_wall":4.105}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2367.8,"xrt_compute":4.646,"load_ms":795.4,"mel_ms":51.4,"encode_ms":759.1,"decode_ms":1557.3,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":2368.7,"xrt_wall":4.644}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3989.2,"xrt_compute":8.857,"load_ms":445.4,"mel_ms":148.0,"encode_ms":1095.3,"decode_ms":2745.9,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":3991.7,"xrt_wall":8.851}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1083.2,"xrt_compute":10.156,"load_ms":444.1,"mel_ms":53.5,"encode_ms":340.5,"decode_ms":689.2,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":1084.5,"xrt_wall":10.143}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4865.0,"xrt_compute":7.262,"load_ms":636.5,"mel_ms":150.7,"encode_ms":1062.5,"decode_ms":3651.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":4867.6,"xrt_wall":7.259}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1269.8,"xrt_compute":8.663,"load_ms":667.7,"mel_ms":51.6,"encode_ms":329.4,"decode_ms":888.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":1271.3,"xrt_wall":8.652} ] } diff --git a/catalog/qwen3-asr-1.7b.json b/catalog/qwen3-asr-1.7b.json index 31ee8005..56f3987d 100644 --- a/catalog/qwen3-asr-1.7b.json +++ b/catalog/qwen3-asr-1.7b.json @@ -35,106 +35,67 @@ {"quant":"Q4_K_M","filename":"Qwen3-ASR-1.7B-Q4_K_M.gguf","size_bytes":1319830496} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":14.91,"ci95":[13.53,16.42],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":855,"del":305,"ins":68},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":15.65,"ci95":[14.26,17.15],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":905,"del":300,"ins":84},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":22.97,"ci95":[22.0,24.09],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2591,"del":339,"ins":215},"empty_hyp":0,"utts_over_50pct":37}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q6_K","metric":"wer","err_pct":23.45,"ci95":[22.45,24.51],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2638,"del":351,"ins":222},"empty_hyp":0,"utts_over_50pct":35}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q5_K_M","metric":"wer","err_pct":23.82,"ci95":[22.77,24.94],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2722,"del":323,"ins":217},"empty_hyp":0,"utts_over_50pct":33}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q4_K_M","metric":"wer","err_pct":29.67,"ci95":[28.51,30.91],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3344,"del":471,"ins":248},"empty_hyp":0,"utts_over_50pct":61}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":21.23,"ci95":[20.4,22.14],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3367,"del":447,"ins":466},"empty_hyp":0,"utts_over_50pct":35}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q5_K_M","metric":"wer","err_pct":22.93,"ci95":[22.07,23.85],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3608,"del":516,"ins":498},"empty_hyp":0,"utts_over_50pct":46}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.25,"ci95":[3.86,4.64],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":593,"del":140,"ins":62},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.38,"ci95":[4.01,4.77],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":128,"ins":72},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":29.22,"ci95":[27.87,30.64],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3528,"del":690,"ins":215},"empty_hyp":0,"utts_over_50pct":71}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":31.99,"ci95":[30.68,33.36],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3860,"del":812,"ins":182},"empty_hyp":0,"utts_over_50pct":95}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.23,"ci95":[2.85,3.65],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":283,"del":122,"ins":65},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.32,"ci95":[2.93,3.77],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":294,"del":125,"ins":65},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.43,"ci95":[3.05,3.86],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":310,"del":110,"ins":79},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.68,"ci95":[3.26,4.13],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":334,"del":116,"ins":86},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.31,"ci95":[2.98,3.65],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":508,"del":190,"ins":75},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.51,"ci95":[3.14,3.86],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":541,"del":194,"ins":83},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":28.29,"ci95":[27.34,29.31],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4297,"del":564,"ins":826},"empty_hyp":0,"utts_over_50pct":58}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q5_K_M","metric":"wer","err_pct":31.28,"ci95":[30.38,32.29],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4755,"del":538,"ins":994},"empty_hyp":0,"utts_over_50pct":90}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":25.48,"ci95":[24.58,26.47],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3095,"del":391,"ins":284},"empty_hyp":0,"utts_over_50pct":58}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q5_K_M","metric":"wer","err_pct":27.75,"ci95":[26.67,29.14],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3290,"del":424,"ins":392},"empty_hyp":0,"utts_over_50pct":83}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":24.29,"ci95":[23.49,25.18],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4757,"del":618,"ins":1043},"empty_hyp":0,"utts_over_50pct":40}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q5_K_M","metric":"wer","err_pct":25.31,"ci95":[24.47,26.26],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4952,"del":671,"ins":1066},"empty_hyp":0,"utts_over_50pct":55}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":4.52,"ci95":[4.06,5.01],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":579,"del":166,"ins":69},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":4.76,"ci95":[4.29,5.27],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":161,"ins":75},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":7.84,"ci95":[7.09,8.7],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":807,"del":422,"ins":241},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q6_K","metric":"wer","err_pct":7.78,"ci95":[6.99,8.66],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":803,"del":414,"ins":243},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":8.36,"ci95":[7.61,9.22],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":882,"del":457,"ins":228},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q4_K_M","metric":"wer","err_pct":10.06,"ci95":[9.14,11.05],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1078,"del":490,"ins":319},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":32.84,"ci95":[31.69,33.99],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4484,"del":667,"ins":457},"empty_hyp":0,"utts_over_50pct":134}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q6_K","metric":"wer","err_pct":33.04,"ci95":[31.91,34.19],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4485,"del":667,"ins":490},"empty_hyp":0,"utts_over_50pct":146}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q5_K_M","metric":"wer","err_pct":36.28,"ci95":[35.2,37.48],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4925,"del":732,"ins":539},"empty_hyp":0,"utts_over_50pct":180}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q4_K_M","metric":"wer","err_pct":41.88,"ci95":[40.84,42.99],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5641,"del":1092,"ins":419},"empty_hyp":0,"utts_over_50pct":274}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":5.37,"ci95":[4.85,5.93],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":543,"del":89,"ins":96},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q5_K_M","metric":"wer","err_pct":6.0,"ci95":[5.4,6.6],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":610,"del":89,"ins":114},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.68,"ci95":[2.38,2.99],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":402,"del":113,"ins":54},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q6_K","metric":"wer","err_pct":2.65,"ci95":[2.38,2.96],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":395,"del":118,"ins":51},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.89,"ci95":[2.57,3.2],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":433,"del":127,"ins":54},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q4_K_M","metric":"wer","err_pct":3.65,"ci95":[3.29,4.02],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":550,"del":154,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":5.29,"ci95":[4.81,5.8],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1162,"del":321,"ins":245},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":5.83,"ci95":[5.35,6.36],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1302,"del":323,"ins":277},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":4.6,"ci95":[3.62,5.65],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":236,"del":542,"ins":36},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q6_K","metric":"cer","err_pct":4.6,"ci95":[3.61,5.68],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":245,"del":534,"ins":34},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":4.77,"ci95":[3.83,5.84],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":273,"del":532,"ins":39},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q4_K_M","metric":"cer","err_pct":5.54,"ci95":[4.51,6.61],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":370,"del":566,"ins":44},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":18.22,"ci95":[17.43,19.04],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3043,"del":435,"ins":364},"empty_hyp":0,"utts_over_50pct":23}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q6_K","metric":"wer","err_pct":18.77,"ci95":[17.98,19.53],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3121,"del":449,"ins":388},"empty_hyp":0,"utts_over_50pct":24}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q5_K_M","metric":"wer","err_pct":19.37,"ci95":[18.56,20.2],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3215,"del":469,"ins":399},"empty_hyp":0,"utts_over_50pct":24}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q4_K_M","metric":"wer","err_pct":24.32,"ci95":[23.42,25.24],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4068,"del":561,"ins":498},"empty_hyp":0,"utts_over_50pct":62}, - {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":10.42,"ci95":[9.72,11.11],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1292,"del":104,"ins":141},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"ms","quant":"Q5_K_M","metric":"wer","err_pct":10.83,"ci95":[10.09,11.55],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1345,"del":103,"ins":149},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":7.43,"ci95":[6.73,8.15],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":456,"del":96,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":8.05,"ci95":[7.31,8.8],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":507,"del":89,"ins":80},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":12.5,"ci95":[11.66,13.28],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1458,"del":222,"ins":118},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q5_K_M","metric":"wer","err_pct":13.98,"ci95":[13.15,14.85],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1621,"del":231,"ins":159},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":4.37,"ci95":[3.95,4.83],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":651,"del":149,"ins":139},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":4.7,"ci95":[4.25,5.16],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":710,"del":156,"ins":143},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":20.46,"ci95":[19.57,21.43],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3345,"del":537,"ins":374},"empty_hyp":0,"utts_over_50pct":36}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q5_K_M","metric":"wer","err_pct":22.4,"ci95":[21.52,23.35],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3640,"del":622,"ins":398},"empty_hyp":0,"utts_over_50pct":44}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":6.25,"ci95":[5.74,6.79],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":764,"del":125,"ins":55},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":6.54,"ci95":[6.0,7.08],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":804,"del":121,"ins":62},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":19.68,"ci95":[18.7,20.62],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2304,"del":472,"ins":252},"empty_hyp":0,"utts_over_50pct":31}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q5_K_M","metric":"wer","err_pct":20.83,"ci95":[19.79,21.8],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2445,"del":474,"ins":286},"empty_hyp":0,"utts_over_50pct":32}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":6.89,"ci95":[6.15,7.73],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2488,"del":1506,"ins":2725},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q5_K_M","metric":"cer","err_pct":7.39,"ci95":[6.64,8.26],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2699,"del":1545,"ins":2959},"empty_hyp":0,"utts_over_50pct":16}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":9.46,"ci95":[8.72,10.22],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":952,"del":186,"ins":120},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q5_K_M","metric":"wer","err_pct":10.66,"ci95":[9.9,11.47],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1096,"del":187,"ins":134},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":6.15,"ci95":[5.68,6.61],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1220,"del":190,"ins":189},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q6_K","metric":"wer","err_pct":6.24,"ci95":[5.77,6.72],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1235,"del":184,"ins":205},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q5_K_M","metric":"wer","err_pct":6.81,"ci95":[6.29,7.33],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1365,"del":158,"ins":250},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q4_K_M","metric":"wer","err_pct":8.82,"ci95":[8.15,9.48],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1657,"del":165,"ins":473},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":6.13,"ci95":[5.55,6.68],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1381,"del":169,"ins":229},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"yue","quant":"Q5_K_M","metric":"cer","err_pct":6.44,"ci95":[5.83,7.01],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1463,"del":168,"ins":236},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":7.14,"ci95":[6.26,8.12],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":776,"del":1462,"ins":306},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":7.67,"ci95":[6.75,8.6],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":938,"del":1479,"ins":316},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.62,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":143,"ins":65},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.62,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":651,"del":143,"ins":65},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.62,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":145,"ins":64},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.65,"ci95":[1.51,1.8],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":660,"del":148,"ins":68},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.65,"ci95":[1.51,1.81],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":663,"del":141,"ins":73},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.81,"ci95":[1.66,1.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":729,"del":144,"ins":88},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.61,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":14.91,"ci95":[13.53,16.42],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":855,"del":305,"ins":68},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":22.97,"ci95":[22.0,24.09],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2591,"del":339,"ins":215},"empty_hyp":0,"utts_over_50pct":37,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":21.23,"ci95":[20.4,22.14],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3367,"del":447,"ins":466},"empty_hyp":0,"utts_over_50pct":35,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.25,"ci95":[3.86,4.64],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":593,"del":140,"ins":62},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":29.22,"ci95":[27.87,30.64],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3528,"del":690,"ins":215},"empty_hyp":0,"utts_over_50pct":71,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.23,"ci95":[2.85,3.65],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":283,"del":122,"ins":65},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.31,"ci95":[2.98,3.65],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":508,"del":190,"ins":75},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":28.29,"ci95":[27.34,29.31],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4297,"del":564,"ins":826},"empty_hyp":0,"utts_over_50pct":58,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":25.48,"ci95":[24.58,26.47],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3095,"del":391,"ins":284},"empty_hyp":0,"utts_over_50pct":58,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":24.29,"ci95":[23.49,25.18],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4757,"del":618,"ins":1043},"empty_hyp":0,"utts_over_50pct":40,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":4.52,"ci95":[4.06,5.01],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":579,"del":166,"ins":69},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":7.84,"ci95":[7.09,8.7],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":807,"del":422,"ins":241},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":32.84,"ci95":[31.69,33.99],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4484,"del":667,"ins":457},"empty_hyp":0,"utts_over_50pct":134,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":5.37,"ci95":[4.85,5.93],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":543,"del":89,"ins":96},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.68,"ci95":[2.38,2.99],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":402,"del":113,"ins":54},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":5.29,"ci95":[4.81,5.8],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1162,"del":321,"ins":245},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":4.6,"ci95":[3.62,5.65],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":236,"del":542,"ins":36},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":18.22,"ci95":[17.43,19.04],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3043,"del":435,"ins":364},"empty_hyp":0,"utts_over_50pct":23,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":10.42,"ci95":[9.72,11.11],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1292,"del":104,"ins":141},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":7.43,"ci95":[6.73,8.15],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":456,"del":96,"ins":72},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":12.5,"ci95":[11.66,13.28],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1458,"del":222,"ins":118},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":4.37,"ci95":[3.95,4.83],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":651,"del":149,"ins":139},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":20.46,"ci95":[19.57,21.43],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3345,"del":537,"ins":374},"empty_hyp":0,"utts_over_50pct":36,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":6.25,"ci95":[5.74,6.79],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":764,"del":125,"ins":55},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":19.68,"ci95":[18.7,20.62],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2304,"del":472,"ins":252},"empty_hyp":0,"utts_over_50pct":31,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":6.89,"ci95":[6.15,7.73],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2488,"del":1506,"ins":2725},"empty_hyp":0,"utts_over_50pct":12,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":9.46,"ci95":[8.72,10.22],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":952,"del":186,"ins":120},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":6.15,"ci95":[5.68,6.61],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1220,"del":190,"ins":189},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":6.13,"ci95":[5.55,6.68],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1381,"del":169,"ins":229},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":7.14,"ci95":[6.26,8.12],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":776,"del":1462,"ins":306},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.62,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":143,"ins":65},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.62,"ci95":[1.48,1.77],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":651,"del":143,"ins":65},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.62,"ci95":[1.47,1.76],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":649,"del":145,"ins":64},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.65,"ci95":[1.51,1.8],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":660,"del":148,"ins":68},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.65,"ci95":[1.51,1.81],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":663,"del":141,"ins":73},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.81,"ci95":[1.66,1.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":729,"del":144,"ins":88},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":52.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":43.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":52.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":43.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":12926.4,"xrt_compute":2.733,"load_ms":1111.3,"mel_ms":154.5,"encode_ms":2918.4,"decode_ms":9853.5,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":12928.3,"xrt_wall":2.733}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3574.4,"xrt_compute":3.077,"load_ms":1631.8,"mel_ms":49.6,"encode_ms":831.1,"decode_ms":2693.7,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":3575.3,"xrt_wall":3.077}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":18525.0,"xrt_compute":1.907,"load_ms":2136.2,"mel_ms":157.9,"encode_ms":3319.3,"decode_ms":15047.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":18526.9,"xrt_wall":1.907}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5186.5,"xrt_compute":2.121,"load_ms":2171.6,"mel_ms":53.1,"encode_ms":988.4,"decode_ms":4144.9,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":5187.5,"xrt_wall":2.12}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8363.9,"xrt_compute":4.224,"load_ms":1090.5,"mel_ms":135.7,"encode_ms":1298.3,"decode_ms":6929.9,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":8367.1,"xrt_wall":4.223}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2286.2,"xrt_compute":4.812,"load_ms":1291.8,"mel_ms":54.2,"encode_ms":420.4,"decode_ms":1811.6,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":2288.1,"xrt_wall":4.807}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9867.3,"xrt_compute":3.581,"load_ms":1771.3,"mel_ms":134.0,"encode_ms":1293.8,"decode_ms":8439.5,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":9870.5,"xrt_wall":3.58}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2661.4,"xrt_compute":4.133,"load_ms":1750.0,"mel_ms":53.7,"encode_ms":401.1,"decode_ms":2206.5,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":2663.2,"xrt_wall":4.13} ] } diff --git a/catalog/sensevoice-small.json b/catalog/sensevoice-small.json index d311b674..3f1c65ed 100644 --- a/catalog/sensevoice-small.json +++ b/catalog/sensevoice-small.json @@ -31,35 +31,42 @@ {"quant":"Q4_K_M","filename":"SenseVoiceSmall-Q4_K_M.gguf","size_bytes":145738304} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.14,"ci95":[6.54,7.77],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":117,"ins":159},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":7.63,"ci95":[7.1,8.22],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1665,"del":558,"ins":268},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.27,"ci95":[7.13,9.45],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":642,"del":667,"ins":153},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":37.44,"ci95":[36.69,38.21],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10304,"del":315,"ins":239},"empty_hyp":0,"utts_over_50pct":83}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":10.11,"ci95":[9.18,11.02],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1712,"del":1569,"ins":323},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":10.12,"ci95":[9.16,11.08],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1716,"del":1570,"ins":323},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.13,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.13,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.13,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.14,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.18,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.45,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.14,"ci95":[6.54,7.77],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":117,"ins":159},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":7.63,"ci95":[7.1,8.22],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1665,"del":558,"ins":268},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.27,"ci95":[7.13,9.45],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":642,"del":667,"ins":153},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":37.44,"ci95":[36.69,38.21],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10304,"del":315,"ins":239},"empty_hyp":0,"utts_over_50pct":83,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":10.12,"ci95":[9.16,11.08],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1716,"del":1570,"ins":323},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.13,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.13,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.13,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.14,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.18,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.45,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": null, + "timestamps": null + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":52.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":53.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":258.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":250.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":319.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":260.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":16.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":52.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":53.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":258.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":250.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":319.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":260.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2005.8,"xrt_compute":17.615,"load_ms":133.2,"mel_ms":76.9,"encode_ms":1928.8,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2030.0,"xrt_wall":17.405}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":581.7,"xrt_compute":18.911,"load_ms":142.9,"mel_ms":23.9,"encode_ms":557.8,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":589.6,"xrt_wall":18.658}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2281.3,"xrt_compute":15.488,"load_ms":190.9,"mel_ms":77.2,"encode_ms":2204.1,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2305.4,"xrt_wall":15.326}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":678.0,"xrt_compute":16.224,"load_ms":305.8,"mel_ms":27.0,"encode_ms":651.0,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":687.0,"xrt_wall":16.011}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1095.7,"xrt_compute":32.247,"load_ms":157.7,"mel_ms":76.1,"encode_ms":1019.5,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1122.3,"xrt_wall":31.483}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":316.6,"xrt_compute":34.745,"load_ms":213.2,"mel_ms":26.3,"encode_ms":290.3,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":331.9,"xrt_wall":33.146}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1080.5,"xrt_compute":32.7,"load_ms":177.9,"mel_ms":76.1,"encode_ms":1004.4,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1107.2,"xrt_wall":31.911}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":312.7,"xrt_compute":35.18,"load_ms":179.2,"mel_ms":29.1,"encode_ms":283.6,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":329.1,"xrt_wall":33.429} ] } diff --git a/catalog/voxtral-mini-3b-2507.json b/catalog/voxtral-mini-3b-2507.json index 527fb074..74c370b0 100644 --- a/catalog/voxtral-mini-3b-2507.json +++ b/catalog/voxtral-mini-3b-2507.json @@ -15,7 +15,7 @@ "long_form_strategy": "hard-cap", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"targets":["en","fr","de","es","it","pt","nl","hi"],"verified":false}, + "translate": {"supported":true,"verified":false,"targets":["en","fr","de","es","it","pt","nl","hi"],"pairs":null}, "lang_detect": {"supported":true,"verified":false}, "timestamps": {"supported":false}, "streaming": {"supported":false}, @@ -31,45 +31,45 @@ {"quant":"Q4_K_M","filename":"Voxtral-Mini-3B-2507-Q4_K_M.gguf","size_bytes":2984721056} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.71,"ci95":[4.26,5.21],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":585,"del":203,"ins":93},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.74,"ci95":[4.31,5.23],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":600,"del":191,"ins":96},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.89,"ci95":[3.47,4.35],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":344,"del":137,"ins":85},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.87,"ci95":[3.45,4.38],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":353,"del":131,"ins":80},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.52,"ci95":[3.11,3.95],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":472,"del":268,"ins":82},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.55,"ci95":[3.14,4.0],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":456,"del":292,"ins":80},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":4.51,"ci95":[4.04,5.02],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":581,"del":128,"ins":103},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":5.01,"ci95":[4.46,5.6],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":630,"del":147,"ins":124},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":8.93,"ci95":[8.13,9.91],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":954,"del":458,"ins":263},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":8.95,"ci95":[8.13,9.85],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":966,"del":451,"ins":261},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.56,"ci95":[2.24,2.9],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":352,"del":149,"ins":42},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.76,"ci95":[2.41,3.12],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":371,"del":168,"ins":47},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":6.57,"ci95":[5.84,7.32],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":378,"del":116,"ins":58},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":6.95,"ci95":[6.22,7.81],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":387,"del":135,"ins":62},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":3.84,"ci95":[3.44,4.31],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":513,"del":164,"ins":147},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":3.95,"ci95":[3.5,4.47],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":505,"del":198,"ins":145},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.88,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.89,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.87,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.87,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.91,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.94,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.71,"ci95":[4.26,5.21],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":585,"del":203,"ins":93},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.89,"ci95":[3.47,4.35],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":344,"del":137,"ins":85},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.52,"ci95":[3.11,3.95],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":472,"del":268,"ins":82},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":4.51,"ci95":[4.04,5.02],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":581,"del":128,"ins":103},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":8.93,"ci95":[8.13,9.91],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":954,"del":458,"ins":263},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.56,"ci95":[2.24,2.9],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":352,"del":149,"ins":42},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":6.57,"ci95":[5.84,7.32],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":378,"del":116,"ins":58},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":3.84,"ci95":[3.44,4.31],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":513,"del":164,"ins":147},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.88,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.89,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.87,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.87,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.91,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.94,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":18.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":16.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":18.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":16.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":45921.8,"xrt_compute":0.769,"load_ms":4290.4,"mel_ms":80.8,"encode_ms":17776.3,"decode_ms":28064.7,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":45923.1,"xrt_wall":0.769}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":23819.2,"xrt_compute":1.483,"load_ms":2417.4,"mel_ms":70.2,"encode_ms":7818.5,"decode_ms":15930.5,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":23820.7,"xrt_wall":1.483}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":9373.1,"xrt_compute":1.174,"load_ms":3937.3,"mel_ms":45.2,"encode_ms":4004.0,"decode_ms":5323.8,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":9373.8,"xrt_wall":1.173}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":26485.4,"xrt_compute":1.334,"load_ms":5949.2,"mel_ms":69.2,"encode_ms":7579.1,"decode_ms":18837.1,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":26486.9,"xrt_wall":1.334}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9567.6,"xrt_compute":1.15,"load_ms":6338.3,"mel_ms":46.1,"encode_ms":3788.8,"decode_ms":5732.7,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":9568.3,"xrt_wall":1.15} ] } diff --git a/catalog/voxtral-mini-4b-realtime-2602.json b/catalog/voxtral-mini-4b-realtime-2602.json index 9a54b8da..4b4b1f69 100644 --- a/catalog/voxtral-mini-4b-realtime-2602.json +++ b/catalog/voxtral-mini-4b-realtime-2602.json @@ -31,73 +31,50 @@ {"quant":"Q4_K_M","filename":"Voxtral-Mini-4B-Realtime-2602-Q4_K_M.gguf","size_bytes":2830493984} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":14.53,"ci95":[13.17,16.13],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":830,"del":322,"ins":45},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":14.77,"ci95":[13.3,16.5],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":831,"del":341,"ins":45},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.24,"ci95":[3.78,4.73],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":577,"del":127,"ins":90},"empty_hyp":1,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.27,"ci95":[3.82,4.76],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":580,"del":128,"ins":92},"empty_hyp":1,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":11.73,"ci95":[9.97,13.67],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":603,"del":958,"ins":147},"empty_hyp":38,"utts_over_50pct":39}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.27,"ci95":[5.38,7.31],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":519,"del":295,"ins":99},"empty_hyp":6,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":11.93,"ci95":[10.15,13.97],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":605,"del":986,"ins":146},"empty_hyp":38,"utts_over_50pct":39}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":6.57,"ci95":[5.66,7.62],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":538,"del":318,"ins":101},"empty_hyp":7,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":12.81,"ci95":[10.78,14.91],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":608,"del":1120,"ins":137},"empty_hyp":43,"utts_over_50pct":45}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.23,"ci95":[2.85,3.67],"n_utts":908,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":512,"del":137,"ins":104},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":2.67,"ci95":[2.38,2.96],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":454,"del":93,"ins":75},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q6_K","metric":"wer","err_pct":3.28,"ci95":[2.9,3.7],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":526,"del":137,"ins":101},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":2.66,"ci95":[2.37,2.96],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":452,"del":93,"ins":76},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q4_K_M","metric":"wer","err_pct":3.36,"ci95":[2.96,3.82],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":526,"del":157,"ins":101},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":6.29,"ci95":[5.67,6.88],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":827,"del":184,"ins":121},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q6_K","metric":"wer","err_pct":9.42,"ci95":[8.35,10.57],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1022,"del":496,"ins":178},"empty_hyp":8,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":6.3,"ci95":[5.72,6.92],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":823,"del":195,"ins":116},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q4_K_M","metric":"wer","err_pct":9.32,"ci95":[8.32,10.34],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1065,"del":438,"ins":175},"empty_hyp":8,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":14.44,"ci95":[13.36,15.68],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1625,"del":793,"ins":290},"empty_hyp":3,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q6_K","metric":"wer","err_pct":17.22,"ci95":[15.52,19.04],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1730,"del":1203,"ins":297},"empty_hyp":8,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":14.36,"ci95":[13.3,15.5],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1634,"del":759,"ins":300},"empty_hyp":2,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q4_K_M","metric":"wer","err_pct":17.73,"ci95":[16.02,19.45],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1804,"del":1236,"ins":286},"empty_hyp":8,"utts_over_50pct":18}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.25,"ci95":[1.99,2.53],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":377,"del":52,"ins":50},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.24,"ci95":[1.98,2.51],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":367,"del":59,"ins":49},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":5.44,"ci95":[4.94,5.95],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1227,"del":365,"ins":184},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":5.78,"ci95":[5.23,6.42],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1240,"del":459,"ins":189},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.27,"ci95":[4.3,6.31],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":355,"del":532,"ins":45},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q6_K","metric":"cer","err_pct":5.78,"ci95":[4.77,6.88],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":571,"ins":46},"empty_hyp":1,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":5.36,"ci95":[4.39,6.4],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":366,"del":530,"ins":52},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q4_K_M","metric":"cer","err_pct":6.29,"ci95":[5.17,7.5],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":425,"del":638,"ins":49},"empty_hyp":3,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":6.09,"ci95":[5.45,6.73],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":380,"del":63,"ins":68},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q6_K","metric":"wer","err_pct":8.85,"ci95":[7.86,10.02],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":527,"del":120,"ins":96},"empty_hyp":1,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":6.07,"ci95":[5.44,6.75],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":380,"del":62,"ins":68},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q4_K_M","metric":"wer","err_pct":9.54,"ci95":[8.29,10.82],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":554,"del":151,"ins":96},"empty_hyp":1,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":3.87,"ci95":[3.43,4.38],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":572,"del":91,"ins":168},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q6_K","metric":"wer","err_pct":5.25,"ci95":[4.63,5.96],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":744,"del":149,"ins":234},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":3.87,"ci95":[3.45,4.36],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":569,"del":91,"ins":170},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q4_K_M","metric":"wer","err_pct":5.21,"ci95":[4.62,5.91],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":742,"del":158,"ins":219},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.41,"ci95":[4.95,5.88],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":698,"del":70,"ins":49},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":5.47,"ci95":[5.0,5.99],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":699,"del":70,"ins":57},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":10.41,"ci95":[9.32,11.52],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1752,"del":1609,"ins":350},"empty_hyp":2,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q6_K","metric":"cer","err_pct":10.22,"ci95":[9.17,11.34],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1749,"del":1525,"ins":371},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":8.57,"ci95":[7.7,9.48],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1369,"del":1494,"ins":191},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q4_K_M","metric":"cer","err_pct":11.1,"ci95":[9.95,12.39],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1915,"del":1646,"ins":395},"empty_hyp":2,"utts_over_50pct":14}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.08,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.09,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.07,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.08,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.08,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.08,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":14.53,"ci95":[13.17,16.13],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":830,"del":322,"ins":45},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.24,"ci95":[3.78,4.73],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":577,"del":127,"ins":90},"empty_hyp":1,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.27,"ci95":[5.38,7.31],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":519,"del":295,"ins":99},"empty_hyp":6,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":2.67,"ci95":[2.38,2.96],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":454,"del":93,"ins":75},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":6.29,"ci95":[5.67,6.88],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":827,"del":184,"ins":121},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":14.44,"ci95":[13.36,15.68],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1625,"del":793,"ins":290},"empty_hyp":3,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.25,"ci95":[1.99,2.53],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":377,"del":52,"ins":50},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":5.44,"ci95":[4.94,5.95],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1227,"del":365,"ins":184},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.27,"ci95":[4.3,6.31],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":355,"del":532,"ins":45},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":6.09,"ci95":[5.45,6.73],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":380,"del":63,"ins":68},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":3.87,"ci95":[3.43,4.38],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":572,"del":91,"ins":168},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.41,"ci95":[4.95,5.88],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":698,"del":70,"ins":49},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":10.41,"ci95":[9.32,11.52],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1752,"del":1609,"ins":350},"empty_hyp":2,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":2.08,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.09,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.07,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.08,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.08,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.08,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.85,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.61,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.56,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.05,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.87,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.85,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.61,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.56,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.05,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.87,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/voxtral-small-24b-2507.json b/catalog/voxtral-small-24b-2507.json index 13eb9001..ff8069ea 100644 --- a/catalog/voxtral-small-24b-2507.json +++ b/catalog/voxtral-small-24b-2507.json @@ -13,9 +13,35 @@ "published_repo": "handy-computer/Voxtral-Small-24B-2507-gguf", "languages": ["en","fr","de","es","it","pt","nl","hi"], "long_form_strategy": "hard-cap", + "benchmark_exceptions": [ + { + "kind": "speed", + "match": { + "machine": "m4-max", + "backend": "cpu" + }, + "reason": "The model card explicitly scopes this 24B GPU-class model to Metal; CPU execution is impractical at its 14.3-25.8 GB publication-quant footprint." + }, + { + "kind": "speed", + "match": { + "machine": "ryzen-4750u", + "backend": "cpu" + }, + "reason": "The model card explicitly omits CPU for this 24B GPU-class model; the publication quants are 14.3 GB and 25.8 GB before runtime state." + }, + { + "kind": "speed", + "match": { + "machine": "ryzen-4750u", + "backend": "vulkan" + }, + "reason": "The smallest downloadable quant is 14.3 GB, exceeding the reference Ryzen 4750U Vulkan device-memory budget." + } + ], "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"targets":["en","fr","de","es","it","pt","nl","hi"],"verified":false}, + "translate": {"supported":true,"verified":false,"targets":["en","fr","de","es","it","pt","nl","hi"],"pairs":null}, "lang_detect": {"supported":true,"verified":false}, "timestamps": {"supported":false}, "streaming": {"supported":false}, @@ -31,33 +57,33 @@ {"quant":"Q4_K_M","filename":"Voxtral-Small-24B-2507-Q4_K_M.gguf","size_bytes":14302261728} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":3.29,"ci95":[2.93,3.65],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":361,"del":199,"ins":55},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":3.32,"ci95":[2.96,3.69],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":376,"del":192,"ins":53},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.55,"ci95":[3.07,4.1],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":259,"del":196,"ins":62},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.41,"ci95":[2.97,3.9],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":258,"del":177,"ins":61},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":2.86,"ci95":[2.47,3.25],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":338,"del":274,"ins":54},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":2.83,"ci95":[2.45,3.23],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":339,"del":263,"ins":58},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":3.86,"ci95":[3.39,4.31],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":433,"del":192,"ins":69},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":3.76,"ci95":[3.31,4.23],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":450,"del":158,"ins":68},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":7.4,"ci95":[6.65,8.36],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":759,"del":408,"ins":220},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":7.67,"ci95":[6.85,8.64],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":759,"del":448,"ins":232},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.69,"ci95":[2.19,3.34],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":268,"del":273,"ins":31},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.44,"ci95":[2.08,2.87],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":222,"del":265,"ins":32},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":5.12,"ci95":[4.38,5.96],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":236,"del":144,"ins":50},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":4.81,"ci95":[4.19,5.5],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":241,"del":113,"ins":50},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":3.74,"ci95":[3.25,4.26],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":401,"del":308,"ins":95},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":3.54,"ci95":[3.13,4.0],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":383,"del":261,"ins":116},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.56,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.57,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.56,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.58,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.6,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.11,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":3.29,"ci95":[2.93,3.65],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":361,"del":199,"ins":55},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.55,"ci95":[3.07,4.1],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":259,"del":196,"ins":62},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":2.86,"ci95":[2.47,3.25],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":338,"del":274,"ins":54},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":3.86,"ci95":[3.39,4.31],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":433,"del":192,"ins":69},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":7.4,"ci95":[6.65,8.36],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":759,"del":408,"ins":220},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.69,"ci95":[2.19,3.34],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":268,"del":273,"ins":31},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":5.12,"ci95":[4.38,5.96],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":236,"del":144,"ins":50},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":3.74,"ci95":[3.25,4.26],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":401,"del":308,"ins":95},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"BF16","metric":"wer","err_pct":1.56,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.57,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.56,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.58,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.6,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.11,"ci95":[null,null],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 8, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-base.en.json b/catalog/whisper-base.en.json index 1f7cae0e..0d40b963 100644 --- a/catalog/whisper-base.en.json +++ b/catalog/whisper-base.en.json @@ -31,37 +31,38 @@ {"quant":"Q4_K_M","filename":"whisper-base.en-Q4_K_M.gguf","size_bytes":58794272} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.6,"ci95":[6.89,8.32],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":761,"del":165,"ins":180},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":4.3,"ci95":[3.95,4.74],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1622,"del":287,"ins":370},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":4.13,"ci95":[3.89,4.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1617,"del":287,"ins":286},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.16,"ci95":[3.92,4.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1631,"del":293,"ins":283},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":4.15,"ci95":[3.9,4.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1630,"del":287,"ins":282},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.16,"ci95":[3.92,4.42],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1641,"del":276,"ins":289},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":4.29,"ci95":[4.05,4.55],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1695,"del":280,"ins":300},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":4.14,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.6,"ci95":[6.89,8.32],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":761,"del":165,"ins":180},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":4.3,"ci95":[3.95,4.74],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1622,"del":287,"ins":370},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":4.13,"ci95":[3.89,4.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1617,"del":287,"ins":286},"empty_hyp":0,"utts_over_50pct":12,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.16,"ci95":[3.92,4.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1631,"del":293,"ins":283},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":4.15,"ci95":[3.9,4.4],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1630,"del":287,"ins":282},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.16,"ci95":[3.92,4.42],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1641,"del":276,"ins":289},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":4.29,"ci95":[4.05,4.55],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1695,"del":280,"ins":300},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":437.5,"xrt_compute":25.146,"load_ms":82.0,"mel_ms":17.4,"encode_ms":343.7,"decode_ms":76.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":328.8,"xrt_compute":33.459,"load_ms":65.2,"mel_ms":17.5,"encode_ms":263.5,"decode_ms":47.8,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":361.7,"xrt_compute":30.409,"load_ms":61.7,"mel_ms":17.5,"encode_ms":284.7,"decode_ms":59.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":84.7,"xrt_compute":129.909,"load_ms":100.2,"mel_ms":17.7,"encode_ms":46.6,"decode_ms":20.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":85.4,"xrt_compute":128.8,"load_ms":85.3,"mel_ms":18.0,"encode_ms":47.7,"decode_ms":19.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":86.8,"xrt_compute":126.739,"load_ms":68.1,"mel_ms":18.4,"encode_ms":48.5,"decode_ms":19.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":48.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":45.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":218.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":222.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":204.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":218.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":16.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":32.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":733.6,"xrt_compute":48.164,"load_ms":50.0,"mel_ms":5.0,"encode_ms":262.4,"decode_ms":466.2,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":733.6,"xrt_wall":48.161}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":325.6,"xrt_compute":33.782,"load_ms":53.9,"mel_ms":4.0,"encode_ms":265.2,"decode_ms":56.4,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":325.6,"xrt_wall":33.779}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":780.9,"xrt_compute":45.246,"load_ms":53.1,"mel_ms":5.4,"encode_ms":288.2,"decode_ms":487.3,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":780.9,"xrt_wall":45.244}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":352.4,"xrt_compute":31.211,"load_ms":62.6,"mel_ms":4.3,"encode_ms":290.5,"decode_ms":57.6,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":352.5,"xrt_wall":31.208}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":218.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":222.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":204.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":218.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2187.9,"xrt_compute":16.149,"load_ms":104.2,"mel_ms":51.0,"encode_ms":658.5,"decode_ms":1478.4,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2188.0,"xrt_wall":16.148}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":836.0,"xrt_compute":13.159,"load_ms":103.0,"mel_ms":39.9,"encode_ms":594.9,"decode_ms":201.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":836.1,"xrt_wall":13.156}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2407.1,"xrt_compute":14.678,"load_ms":124.9,"mel_ms":50.8,"encode_ms":734.7,"decode_ms":1621.6,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2407.2,"xrt_wall":14.677}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1013.8,"xrt_compute":10.85,"load_ms":123.4,"mel_ms":46.0,"encode_ms":737.2,"decode_ms":230.6,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1014.0,"xrt_wall":10.848}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":32.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-base.json b/catalog/whisper-base.json index c700cea0..e1b907fd 100644 --- a/catalog/whisper-base.json +++ b/catalog/whisper-base.json @@ -25,9 +25,9 @@ "long_form_strategy": "chunked-unbounded", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"verified":false}, + "translate": {"supported":true,"verified":false,"targets":null,"pairs":null}, "lang_detect": {"supported":true,"verified":false}, - "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["segment"]}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -41,118 +41,118 @@ {"quant":"Q4_K_M","filename":"whisper-base-Q4_K_M.gguf","size_bytes":58870848} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":83.05,"ci95":[80.55,86.01],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3815,"del":657,"ins":388},"empty_hyp":0,"utts_over_50pct":252}, - {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":150.97,"ci95":[144.02,159.59],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6390,"del":2173,"ins":4366},"empty_hyp":46,"utts_over_50pct":516}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":52.74,"ci95":[50.65,55.22],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3675,"del":384,"ins":285},"empty_hyp":0,"utts_over_50pct":217}, - {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":100.6,"ci95":[100.3,100.97],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17921,"del":29061,"ins":294},"empty_hyp":13,"utts_over_50pct":984}, - {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":81.22,"ci95":[79.97,82.51],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12129,"del":1412,"ins":1017},"empty_hyp":0,"utts_over_50pct":899}, - {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":92.72,"ci95":[92.02,93.59],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17118,"del":957,"ins":1234},"empty_hyp":0,"utts_over_50pct":967}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":70.53,"ci95":[69.06,71.99],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7792,"del":1006,"ins":1197},"empty_hyp":0,"utts_over_50pct":577}, - {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":100.73,"ci95":[100.32,101.27],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17889,"del":26855,"ins":356},"empty_hyp":2,"utts_over_50pct":920}, - {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":71.53,"ci95":[70.38,72.69],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10784,"del":1212,"ins":1471},"empty_hyp":0,"utts_over_50pct":813}, - {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":29.48,"ci95":[28.52,30.38],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5319,"del":777,"ins":1047},"empty_hyp":1,"utts_over_50pct":88}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":70.14,"ci95":[68.85,71.39],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7820,"del":755,"ins":1029},"empty_hyp":0,"utts_over_50pct":629}, - {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":98.19,"ci95":[96.7,99.94],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18119,"del":2476,"ins":5135},"empty_hyp":2,"utts_over_50pct":1011}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":63.85,"ci95":[61.94,66.27],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9467,"del":964,"ins":2440},"empty_hyp":1,"utts_over_50pct":676}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":19.69,"ci95":[18.79,20.63],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2750,"del":377,"ins":558},"empty_hyp":0,"utts_over_50pct":23}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":59.14,"ci95":[57.67,60.72],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7225,"del":1026,"ins":722},"empty_hyp":0,"utts_over_50pct":438}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":9.88,"ci95":[9.07,10.7],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1000,"del":171,"ins":267},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":11.15,"ci95":[10.58,11.77],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1946,"del":291,"ins":364},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":81.71,"ci95":[80.47,82.88],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9675,"del":948,"ins":1536},"empty_hyp":0,"utts_over_50pct":867}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":87.72,"ci95":[86.66,88.77],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14266,"del":1375,"ins":1991},"empty_hyp":2,"utts_over_50pct":865}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":49.46,"ci95":[48.18,50.94],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5620,"del":659,"ins":1038},"empty_hyp":0,"utts_over_50pct":419}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":49.32,"ci95":[48.08,50.51],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9679,"del":1094,"ins":2260},"empty_hyp":0,"utts_over_50pct":420}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":27.91,"ci95":[26.68,29.23],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3633,"del":478,"ins":912},"empty_hyp":0,"utts_over_50pct":69}, - {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":50.06,"ci95":[49.09,51.03],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8950,"del":1210,"ins":944},"empty_hyp":0,"utts_over_50pct":425}, - {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":100.4,"ci95":[100.16,100.74],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20899,"del":24028,"ins":244},"empty_hyp":2,"utts_over_50pct":1000}, - {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":108.15,"ci95":[105.69,110.64],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9957,"del":5196,"ins":2080},"empty_hyp":13,"utts_over_50pct":621}, - {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":65.56,"ci95":[63.95,67.11],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7450,"del":984,"ins":641},"empty_hyp":1,"utts_over_50pct":567}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":100.01,"ci95":[99.26,101.08],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8934,"del":9692,"ins":131},"empty_hyp":0,"utts_over_50pct":418}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":64.23,"ci95":[62.91,65.45],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9190,"del":983,"ins":1229},"empty_hyp":0,"utts_over_50pct":698}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":72.26,"ci95":[70.67,74.05],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9172,"del":1377,"ins":1790},"empty_hyp":2,"utts_over_50pct":776}, - {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":127.56,"ci95":[124.05,131.34],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14135,"del":4020,"ins":5013},"empty_hyp":7,"utts_over_50pct":932}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":38.02,"ci95":[36.34,39.83],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4082,"del":416,"ins":657},"empty_hyp":0,"utts_over_50pct":164}, - {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":99.32,"ci95":[93.94,105.24],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":809,"del":82,"ins":135},"empty_hyp":0,"utts_over_50pct":46}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":17.26,"ci95":[16.46,18.13],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2788,"del":438,"ins":440},"empty_hyp":0,"utts_over_50pct":16}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":25.28,"ci95":[24.19,26.38],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6115,"del":997,"ins":1143},"empty_hyp":0,"utts_over_50pct":25}, - {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":117.78,"ci95":[114.84,120.78],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12710,"del":4427,"ins":3050},"empty_hyp":21,"utts_over_50pct":979}, - {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":99.79,"ci95":[97.99,101.89],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12395,"del":1268,"ins":1320},"empty_hyp":2,"utts_over_50pct":856}, - {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":134.48,"ci95":[129.24,140.11],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33931,"del":28350,"ins":23399},"empty_hyp":133,"utts_over_50pct":771}, - {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":102.88,"ci95":[101.85,104.24],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":19530,"del":22591,"ins":1226},"empty_hyp":12,"utts_over_50pct":838}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":12.98,"ci95":[11.77,14.26],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1569,"del":627,"ins":98},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":107.78,"ci95":[104.95,110.59],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13710,"del":6173,"ins":2708},"empty_hyp":1,"utts_over_50pct":933}, - {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":102.73,"ci95":[100.18,105.9],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7259,"del":1999,"ins":1476},"empty_hyp":4,"utts_over_50pct":478}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":104.35,"ci95":[102.73,106.31],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":31866,"del":5210,"ins":1977},"empty_hyp":8,"utts_over_50pct":405}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":91.78,"ci95":[90.81,92.83],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13273,"del":1400,"ins":1052},"empty_hyp":0,"utts_over_50pct":983}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":84.6,"ci95":[83.48,85.62],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10887,"del":973,"ins":1182},"empty_hyp":0,"utts_over_50pct":840}, - {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":81.65,"ci95":[80.04,83.57],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17505,"del":5466,"ins":2357},"empty_hyp":2,"utts_over_50pct":983}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":63.95,"ci95":[62.78,65.06],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10583,"del":998,"ins":1901},"empty_hyp":0,"utts_over_50pct":768}, - {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":102.84,"ci95":[102.22,103.53],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":25468,"del":28736,"ins":1576},"empty_hyp":2,"utts_over_50pct":958}, - {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":124.42,"ci95":[120.42,128.66],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10704,"del":7824,"ins":4529},"empty_hyp":8,"utts_over_50pct":949}, - {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":100.42,"ci95":[100.12,100.78],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20589,"del":30654,"ins":286},"empty_hyp":1,"utts_over_50pct":1015}, - {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":40.87,"ci95":[39.31,42.67],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4850,"del":411,"ins":768},"empty_hyp":1,"utts_over_50pct":215}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":103.46,"ci95":[101.68,105.42],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14173,"del":7061,"ins":1768},"empty_hyp":39,"utts_over_50pct":926}, - {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":130.63,"ci95":[126.3,135.27],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33930,"del":24069,"ins":18411},"empty_hyp":23,"utts_over_50pct":880}, - {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":49.26,"ci95":[47.5,50.95],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2903,"del":360,"ins":490},"empty_hyp":0,"utts_over_50pct":156}, - {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":101.15,"ci95":[100.48,101.94],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15638,"del":17476,"ins":616},"empty_hyp":15,"utts_over_50pct":726}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":36.75,"ci95":[35.31,38.27],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2283,"del":290,"ins":513},"empty_hyp":0,"utts_over_50pct":62}, - {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":88.62,"ci95":[86.95,90.5],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17761,"del":2993,"ins":2643},"empty_hyp":0,"utts_over_50pct":989}, - {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":101.13,"ci95":[100.15,102.93],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10050,"del":15449,"ins":294},"empty_hyp":3,"utts_over_50pct":574}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":35.68,"ci95":[34.46,36.98],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3959,"del":442,"ins":732},"empty_hyp":0,"utts_over_50pct":153}, - {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":101.19,"ci95":[100.22,102.37],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8434,"del":4628,"ins":311},"empty_hyp":13,"utts_over_50pct":512}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":13.91,"ci95":[13.11,14.77],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2169,"del":293,"ins":525},"empty_hyp":0,"utts_over_50pct":16}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":62.16,"ci95":[60.92,63.47],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10025,"del":1183,"ins":1721},"empty_hyp":0,"utts_over_50pct":640}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":22.92,"ci95":[22.0,23.95],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2744,"del":352,"ins":366},"empty_hyp":0,"utts_over_50pct":39}, - {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":103.23,"ci95":[101.54,105.16],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20008,"del":2277,"ins":2116},"empty_hyp":1,"utts_over_50pct":980}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":65.77,"ci95":[64.54,67.01],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8217,"del":815,"ins":995},"empty_hyp":3,"utts_over_50pct":653}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":77.9,"ci95":[76.78,79.09],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10382,"del":1143,"ins":1340},"empty_hyp":0,"utts_over_50pct":797}, - {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":134.76,"ci95":[129.9,140.17],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11530,"del":3992,"ins":6039},"empty_hyp":14,"utts_over_50pct":925}, - {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":107.06,"ci95":[105.6,108.9],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17989,"del":6189,"ins":1714},"empty_hyp":4,"utts_over_50pct":1019}, - {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":69.25,"ci95":[67.61,70.81],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7905,"del":864,"ins":823},"empty_hyp":0,"utts_over_50pct":573}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":42.4,"ci95":[41.0,43.92],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4806,"del":598,"ins":1120},"empty_hyp":0,"utts_over_50pct":268}, - {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":100.69,"ci95":[98.1,103.39],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6701,"del":1873,"ins":1492},"empty_hyp":19,"utts_over_50pct":486}, - {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":58.84,"ci95":[56.79,61.23],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10760,"del":3707,"ins":5340},"empty_hyp":0,"utts_over_50pct":313}, - {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":101.77,"ci95":[100.99,102.71],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8390,"del":14193,"ins":424},"empty_hyp":1,"utts_over_50pct":472}, - {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":108.3,"ci95":[106.47,110.51],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11412,"del":1516,"ins":1188},"empty_hyp":9,"utts_over_50pct":600}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":38.1,"ci95":[36.81,39.42],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18768,"del":10910,"ins":7472},"empty_hyp":17,"utts_over_50pct":112}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":31.09,"ci95":[29.91,32.41],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3257,"del":393,"ins":484},"empty_hyp":0,"utts_over_50pct":94}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":42.03,"ci95":[40.78,43.22],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4827,"del":569,"ins":644},"empty_hyp":0,"utts_over_50pct":249}, - {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":55.42,"ci95":[53.8,57.15],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3818,"del":507,"ins":385},"empty_hyp":0,"utts_over_50pct":182}, - {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":111.42,"ci95":[108.74,114.38],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9508,"del":6212,"ins":2072},"empty_hyp":21,"utts_over_50pct":862}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":42.6,"ci95":[41.42,43.81],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9608,"del":542,"ins":934},"empty_hyp":0,"utts_over_50pct":235}, - {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":103.28,"ci95":[101.84,105.0],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14460,"del":7074,"ins":1352},"empty_hyp":5,"utts_over_50pct":831}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":36.21,"ci95":[35.11,37.29],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10924,"del":1681,"ins":307},"empty_hyp":0,"utts_over_50pct":167}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":5.11,"ci95":[4.83,5.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2046,"del":311,"ins":351},"empty_hyp":0,"utts_over_50pct":21}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":5.1,"ci95":[4.83,5.38],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2046,"del":310,"ins":351},"empty_hyp":0,"utts_over_50pct":21}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.12,"ci95":[4.85,5.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2057,"del":295,"ins":361},"empty_hyp":0,"utts_over_50pct":22}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":5.11,"ci95":[4.85,5.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2048,"del":314,"ins":350},"empty_hyp":0,"utts_over_50pct":21}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.19,"ci95":[4.91,5.48],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2071,"del":329,"ins":352},"empty_hyp":0,"utts_over_50pct":21}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":5.36,"ci95":[5.07,5.66],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2126,"del":337,"ins":379},"empty_hyp":0,"utts_over_50pct":20}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":5.1,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":5.12,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":83.05,"ci95":[80.55,86.01],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3815,"del":657,"ins":388},"empty_hyp":0,"utts_over_50pct":252,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":150.97,"ci95":[144.02,159.59],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6390,"del":2173,"ins":4366},"empty_hyp":46,"utts_over_50pct":516,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":52.74,"ci95":[50.65,55.22],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3675,"del":384,"ins":285},"empty_hyp":0,"utts_over_50pct":217,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":100.6,"ci95":[100.3,100.97],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17921,"del":29061,"ins":294},"empty_hyp":13,"utts_over_50pct":984,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":81.22,"ci95":[79.97,82.51],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12129,"del":1412,"ins":1017},"empty_hyp":0,"utts_over_50pct":899,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":92.72,"ci95":[92.02,93.59],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17118,"del":957,"ins":1234},"empty_hyp":0,"utts_over_50pct":967,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":70.53,"ci95":[69.06,71.99],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7792,"del":1006,"ins":1197},"empty_hyp":0,"utts_over_50pct":577,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":100.73,"ci95":[100.32,101.27],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17889,"del":26855,"ins":356},"empty_hyp":2,"utts_over_50pct":920,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":71.53,"ci95":[70.38,72.69],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10784,"del":1212,"ins":1471},"empty_hyp":0,"utts_over_50pct":813,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":29.48,"ci95":[28.52,30.38],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5319,"del":777,"ins":1047},"empty_hyp":1,"utts_over_50pct":88,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":70.14,"ci95":[68.85,71.39],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7820,"del":755,"ins":1029},"empty_hyp":0,"utts_over_50pct":629,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":98.19,"ci95":[96.7,99.94],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18119,"del":2476,"ins":5135},"empty_hyp":2,"utts_over_50pct":1011,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":63.85,"ci95":[61.94,66.27],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9467,"del":964,"ins":2440},"empty_hyp":1,"utts_over_50pct":676,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":19.69,"ci95":[18.79,20.63],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2750,"del":377,"ins":558},"empty_hyp":0,"utts_over_50pct":23,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":59.14,"ci95":[57.67,60.72],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7225,"del":1026,"ins":722},"empty_hyp":0,"utts_over_50pct":438,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":9.88,"ci95":[9.07,10.7],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1000,"del":171,"ins":267},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":11.15,"ci95":[10.58,11.77],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1946,"del":291,"ins":364},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":81.71,"ci95":[80.47,82.88],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9675,"del":948,"ins":1536},"empty_hyp":0,"utts_over_50pct":867,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":87.72,"ci95":[86.66,88.77],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14266,"del":1375,"ins":1991},"empty_hyp":2,"utts_over_50pct":865,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":49.46,"ci95":[48.18,50.94],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5620,"del":659,"ins":1038},"empty_hyp":0,"utts_over_50pct":419,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":49.32,"ci95":[48.08,50.51],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9679,"del":1094,"ins":2260},"empty_hyp":0,"utts_over_50pct":420,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":27.91,"ci95":[26.68,29.23],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3633,"del":478,"ins":912},"empty_hyp":0,"utts_over_50pct":69,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":50.06,"ci95":[49.09,51.03],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8950,"del":1210,"ins":944},"empty_hyp":0,"utts_over_50pct":425,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":100.4,"ci95":[100.16,100.74],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20899,"del":24028,"ins":244},"empty_hyp":2,"utts_over_50pct":1000,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":108.15,"ci95":[105.69,110.64],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9957,"del":5196,"ins":2080},"empty_hyp":13,"utts_over_50pct":621,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":65.56,"ci95":[63.95,67.11],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7450,"del":984,"ins":641},"empty_hyp":1,"utts_over_50pct":567,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":100.01,"ci95":[99.26,101.08],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8934,"del":9692,"ins":131},"empty_hyp":0,"utts_over_50pct":418,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":64.23,"ci95":[62.91,65.45],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9190,"del":983,"ins":1229},"empty_hyp":0,"utts_over_50pct":698,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":72.26,"ci95":[70.67,74.05],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9172,"del":1377,"ins":1790},"empty_hyp":2,"utts_over_50pct":776,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":127.56,"ci95":[124.05,131.34],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14135,"del":4020,"ins":5013},"empty_hyp":7,"utts_over_50pct":932,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":38.02,"ci95":[36.34,39.83],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4082,"del":416,"ins":657},"empty_hyp":0,"utts_over_50pct":164,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":99.32,"ci95":[93.94,105.24],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":809,"del":82,"ins":135},"empty_hyp":0,"utts_over_50pct":46,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":17.26,"ci95":[16.46,18.13],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2788,"del":438,"ins":440},"empty_hyp":0,"utts_over_50pct":16,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":25.28,"ci95":[24.19,26.38],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6115,"del":997,"ins":1143},"empty_hyp":0,"utts_over_50pct":25,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":117.78,"ci95":[114.84,120.78],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12710,"del":4427,"ins":3050},"empty_hyp":21,"utts_over_50pct":979,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":99.79,"ci95":[97.99,101.89],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12395,"del":1268,"ins":1320},"empty_hyp":2,"utts_over_50pct":856,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":102.88,"ci95":[101.85,104.24],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":19530,"del":22591,"ins":1226},"empty_hyp":12,"utts_over_50pct":838,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":12.98,"ci95":[11.77,14.26],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1569,"del":627,"ins":98},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":107.78,"ci95":[104.95,110.59],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13710,"del":6173,"ins":2708},"empty_hyp":1,"utts_over_50pct":933,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":102.73,"ci95":[100.18,105.9],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7259,"del":1999,"ins":1476},"empty_hyp":4,"utts_over_50pct":478,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":91.78,"ci95":[90.81,92.83],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13273,"del":1400,"ins":1052},"empty_hyp":0,"utts_over_50pct":983,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":84.6,"ci95":[83.48,85.62],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10887,"del":973,"ins":1182},"empty_hyp":0,"utts_over_50pct":840,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":81.65,"ci95":[80.04,83.57],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17505,"del":5466,"ins":2357},"empty_hyp":2,"utts_over_50pct":983,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":63.95,"ci95":[62.78,65.06],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10583,"del":998,"ins":1901},"empty_hyp":0,"utts_over_50pct":768,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":102.84,"ci95":[102.22,103.53],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":25468,"del":28736,"ins":1576},"empty_hyp":2,"utts_over_50pct":958,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":124.42,"ci95":[120.42,128.66],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10704,"del":7824,"ins":4529},"empty_hyp":8,"utts_over_50pct":949,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":100.42,"ci95":[100.12,100.78],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20589,"del":30654,"ins":286},"empty_hyp":1,"utts_over_50pct":1015,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":40.87,"ci95":[39.31,42.67],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4850,"del":411,"ins":768},"empty_hyp":1,"utts_over_50pct":215,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":103.46,"ci95":[101.68,105.42],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14173,"del":7061,"ins":1768},"empty_hyp":39,"utts_over_50pct":926,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":49.26,"ci95":[47.5,50.95],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2903,"del":360,"ins":490},"empty_hyp":0,"utts_over_50pct":156,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":101.15,"ci95":[100.48,101.94],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15638,"del":17476,"ins":616},"empty_hyp":15,"utts_over_50pct":726,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":36.75,"ci95":[35.31,38.27],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2283,"del":290,"ins":513},"empty_hyp":0,"utts_over_50pct":62,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":88.62,"ci95":[86.95,90.5],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17761,"del":2993,"ins":2643},"empty_hyp":0,"utts_over_50pct":989,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":101.13,"ci95":[100.15,102.93],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10050,"del":15449,"ins":294},"empty_hyp":3,"utts_over_50pct":574,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":35.68,"ci95":[34.46,36.98],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3959,"del":442,"ins":732},"empty_hyp":0,"utts_over_50pct":153,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":101.19,"ci95":[100.22,102.37],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8434,"del":4628,"ins":311},"empty_hyp":13,"utts_over_50pct":512,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":13.91,"ci95":[13.11,14.77],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2169,"del":293,"ins":525},"empty_hyp":0,"utts_over_50pct":16,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":62.16,"ci95":[60.92,63.47],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10025,"del":1183,"ins":1721},"empty_hyp":0,"utts_over_50pct":640,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":22.92,"ci95":[22.0,23.95],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2744,"del":352,"ins":366},"empty_hyp":0,"utts_over_50pct":39,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":103.23,"ci95":[101.54,105.16],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20008,"del":2277,"ins":2116},"empty_hyp":1,"utts_over_50pct":980,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":65.77,"ci95":[64.54,67.01],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8217,"del":815,"ins":995},"empty_hyp":3,"utts_over_50pct":653,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":77.9,"ci95":[76.78,79.09],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10382,"del":1143,"ins":1340},"empty_hyp":0,"utts_over_50pct":797,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":134.76,"ci95":[129.9,140.17],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11530,"del":3992,"ins":6039},"empty_hyp":14,"utts_over_50pct":925,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":107.06,"ci95":[105.6,108.9],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17989,"del":6189,"ins":1714},"empty_hyp":4,"utts_over_50pct":1019,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":69.25,"ci95":[67.61,70.81],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7905,"del":864,"ins":823},"empty_hyp":0,"utts_over_50pct":573,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":42.4,"ci95":[41.0,43.92],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4806,"del":598,"ins":1120},"empty_hyp":0,"utts_over_50pct":268,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":100.69,"ci95":[98.1,103.39],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6701,"del":1873,"ins":1492},"empty_hyp":19,"utts_over_50pct":486,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":58.84,"ci95":[56.79,61.23],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10760,"del":3707,"ins":5340},"empty_hyp":0,"utts_over_50pct":313,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":101.77,"ci95":[100.99,102.71],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8390,"del":14193,"ins":424},"empty_hyp":1,"utts_over_50pct":472,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":108.3,"ci95":[106.47,110.51],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11412,"del":1516,"ins":1188},"empty_hyp":9,"utts_over_50pct":600,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":38.1,"ci95":[36.81,39.42],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18768,"del":10910,"ins":7472},"empty_hyp":17,"utts_over_50pct":112,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":31.09,"ci95":[29.91,32.41],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3257,"del":393,"ins":484},"empty_hyp":0,"utts_over_50pct":94,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":42.03,"ci95":[40.78,43.22],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4827,"del":569,"ins":644},"empty_hyp":0,"utts_over_50pct":249,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":55.42,"ci95":[53.8,57.15],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3818,"del":507,"ins":385},"empty_hyp":0,"utts_over_50pct":182,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":111.42,"ci95":[108.74,114.38],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9508,"del":6212,"ins":2072},"empty_hyp":21,"utts_over_50pct":862,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":42.6,"ci95":[41.42,43.81],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9608,"del":542,"ins":934},"empty_hyp":0,"utts_over_50pct":235,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":103.28,"ci95":[101.84,105.0],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14460,"del":7074,"ins":1352},"empty_hyp":5,"utts_over_50pct":831,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":36.21,"ci95":[35.11,37.29],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10924,"del":1681,"ins":307},"empty_hyp":0,"utts_over_50pct":167,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":5.11,"ci95":[4.83,5.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2046,"del":311,"ins":351},"empty_hyp":0,"utts_over_50pct":21,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":5.1,"ci95":[4.83,5.38],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2046,"del":310,"ins":351},"empty_hyp":0,"utts_over_50pct":21,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.12,"ci95":[4.85,5.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2057,"del":295,"ins":361},"empty_hyp":0,"utts_over_50pct":22,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":5.11,"ci95":[4.85,5.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2048,"del":314,"ins":350},"empty_hyp":0,"utts_over_50pct":21,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.19,"ci95":[4.91,5.48],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2071,"del":329,"ins":352},"empty_hyp":0,"utts_over_50pct":21,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":5.36,"ci95":[5.07,5.66],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2126,"del":337,"ins":379},"empty_hyp":0,"utts_over_50pct":20,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":134.48,"ci95":[129.24,140.11],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33931,"del":28350,"ins":23399},"empty_hyp":133,"utts_over_50pct":771,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":104.35,"ci95":[102.73,106.31],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":31866,"del":5210,"ins":1977},"empty_hyp":8,"utts_over_50pct":405,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":130.63,"ci95":[126.3,135.27],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33930,"del":24069,"ins":18411},"empty_hyp":23,"utts_over_50pct":880,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":493.5,"xrt_compute":22.292,"load_ms":76.7,"mel_ms":17.6,"encode_ms":341.7,"decode_ms":134.1,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":364.5,"xrt_compute":30.176,"load_ms":66.3,"mel_ms":17.6,"encode_ms":262.3,"decode_ms":84.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":393.5,"xrt_compute":27.955,"load_ms":42.9,"mel_ms":17.5,"encode_ms":283.2,"decode_ms":92.8,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":141.9,"xrt_compute":77.513,"load_ms":100.4,"mel_ms":17.6,"encode_ms":46.8,"decode_ms":77.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":133.0,"xrt_compute":82.684,"load_ms":93.4,"mel_ms":17.6,"encode_ms":47.8,"decode_ms":67.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":129.8,"xrt_compute":84.741,"load_ms":66.2,"mel_ms":17.6,"encode_ms":48.5,"decode_ms":63.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":47.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":43.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":209.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":205.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":207.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":211.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":12.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":13.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":37.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":30.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":750.3,"xrt_compute":47.093,"load_ms":44.6,"mel_ms":6.0,"encode_ms":261.3,"decode_ms":482.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":750.3,"xrt_wall":47.09}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":347.6,"xrt_compute":31.647,"load_ms":43.7,"mel_ms":4.3,"encode_ms":261.3,"decode_ms":81.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":347.6,"xrt_wall":31.644}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":806.1,"xrt_compute":43.831,"load_ms":62.4,"mel_ms":5.8,"encode_ms":288.4,"decode_ms":511.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":806.1,"xrt_wall":43.829}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":373.9,"xrt_compute":29.416,"load_ms":68.1,"mel_ms":5.1,"encode_ms":286.5,"decode_ms":82.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":374.0,"xrt_wall":29.413}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":209.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":205.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":207.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":211.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2274.5,"xrt_compute":15.534,"load_ms":103.1,"mel_ms":46.4,"encode_ms":663.9,"decode_ms":1564.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2274.7,"xrt_wall":15.533}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":912.6,"xrt_compute":12.054,"load_ms":106.5,"mel_ms":39.7,"encode_ms":596.7,"decode_ms":276.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":912.7,"xrt_wall":12.052}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2537.8,"xrt_compute":13.922,"load_ms":123.7,"mel_ms":44.8,"encode_ms":741.0,"decode_ms":1752.0,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2537.9,"xrt_wall":13.922}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1105.7,"xrt_compute":9.948,"load_ms":122.5,"mel_ms":43.2,"encode_ms":740.4,"decode_ms":322.1,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1105.9,"xrt_wall":9.947}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":37.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":30.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-large-v2.json b/catalog/whisper-large-v2.json index cfc1642a..8820bd30 100644 --- a/catalog/whisper-large-v2.json +++ b/catalog/whisper-large-v2.json @@ -25,9 +25,9 @@ "long_form_strategy": "chunked-unbounded", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"targets":["en"],"verified":false}, + "translate": {"supported":true,"verified":false,"targets":["en"],"pairs":null}, "lang_detect": {"supported":true,"verified":false}, - "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["segment"]}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -41,127 +41,81 @@ {"quant":"Q4_K_M","filename":"whisper-large-v2-Q4_K_M.gguf","size_bytes":996526080} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":38.45,"ci95":[36.36,40.66],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1787,"del":292,"ins":171},"empty_hyp":1,"utts_over_50pct":59}, - {"dataset":"fleurs","split":"test","language":"af","quant":"Q5_K_M","metric":"wer","err_pct":38.28,"ci95":[36.22,40.48],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1788,"del":290,"ins":162},"empty_hyp":1,"utts_over_50pct":59}, - {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":140.81,"ci95":[135.38,146.83],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7487,"del":1050,"ins":3522},"empty_hyp":4,"utts_over_50pct":516}, - {"dataset":"fleurs","split":"test","language":"am","quant":"Q5_K_M","metric":"wer","err_pct":137.69,"ci95":[132.49,143.36],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7465,"del":1074,"ins":3253},"empty_hyp":2,"utts_over_50pct":516}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":17.06,"ci95":[15.68,18.51],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1034,"del":305,"ins":66},"empty_hyp":1,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":17.17,"ci95":[15.79,18.63],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1040,"del":310,"ins":64},"empty_hyp":1,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":104.58,"ci95":[104.19,105.02],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41441,"del":5499,"ins":2206},"empty_hyp":0,"utts_over_50pct":984}, - {"dataset":"fleurs","split":"test","language":"as","quant":"Q5_K_M","metric":"wer","err_pct":104.36,"ci95":[103.92,104.78],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":40751,"del":6187,"ins":2103},"empty_hyp":0,"utts_over_50pct":984}, - {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":24.13,"ci95":[23.27,24.98],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3667,"del":353,"ins":306},"empty_hyp":0,"utts_over_50pct":47}, - {"dataset":"fleurs","split":"test","language":"az","quant":"Q5_K_M","metric":"wer","err_pct":24.13,"ci95":[23.27,24.96],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3663,"del":363,"ins":299},"empty_hyp":0,"utts_over_50pct":47}, - {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":46.96,"ci95":[46.01,47.89],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8517,"del":648,"ins":614},"empty_hyp":0,"utts_over_50pct":372}, - {"dataset":"fleurs","split":"test","language":"be","quant":"Q5_K_M","metric":"wer","err_pct":47.32,"ci95":[46.41,48.29],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8579,"del":675,"ins":601},"empty_hyp":0,"utts_over_50pct":365}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":15.81,"ci95":[15.0,16.69],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1805,"del":223,"ins":213},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q5_K_M","metric":"wer","err_pct":15.86,"ci95":[15.03,16.76],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1809,"del":225,"ins":213},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":103.42,"ci95":[102.99,103.87],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":37827,"del":6726,"ins":1747},"empty_hyp":0,"utts_over_50pct":918}, - {"dataset":"fleurs","split":"test","language":"bn","quant":"Q5_K_M","metric":"wer","err_pct":103.53,"ci95":[103.15,103.97],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":37692,"del":6879,"ins":1782},"empty_hyp":2,"utts_over_50pct":920}, - {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":17.02,"ci95":[16.25,17.87],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2570,"del":398,"ins":236},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"fleurs","split":"test","language":"bs","quant":"Q5_K_M","metric":"wer","err_pct":17.0,"ci95":[16.18,17.82],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2579,"del":395,"ins":226},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":5.56,"ci95":[5.03,6.12],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":961,"del":232,"ins":155},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ca","quant":"Q5_K_M","metric":"wer","err_pct":5.52,"ci95":[4.99,6.06],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":952,"del":232,"ins":153},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":14.42,"ci95":[13.62,15.22],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1656,"del":125,"ins":194},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q5_K_M","metric":"wer","err_pct":14.59,"ci95":[13.78,15.36],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1678,"del":126,"ins":194},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":30.55,"ci95":[29.6,31.55],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6238,"del":804,"ins":964},"empty_hyp":1,"utts_over_50pct":89}, - {"dataset":"fleurs","split":"test","language":"cy","quant":"Q5_K_M","metric":"wer","err_pct":30.76,"ci95":[29.81,31.78],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6295,"del":794,"ins":971},"empty_hyp":1,"utts_over_50pct":88}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":14.92,"ci95":[14.19,15.63],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2333,"del":319,"ins":356},"empty_hyp":1,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q5_K_M","metric":"wer","err_pct":15.14,"ci95":[14.38,15.87],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2352,"del":328,"ins":371},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.53,"ci95":[4.13,4.93],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":612,"del":91,"ins":144},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.54,"ci95":[4.14,4.96],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":89,"ins":141},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":13.51,"ci95":[12.53,14.42],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1774,"del":165,"ins":111},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":13.81,"ci95":[12.86,14.74],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1788,"del":182,"ins":125},"empty_hyp":0,"utts_over_50pct":18}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.21,"ci95":[3.73,4.82],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":126,"ins":82},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.27,"ci95":[3.78,4.89],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":416,"del":123,"ins":82},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.3,"ci95":[2.93,3.7],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":556,"del":128,"ins":85},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.3,"ci95":[2.93,3.7],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":555,"del":131,"ins":84},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":23.25,"ci95":[22.23,24.25],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2648,"del":314,"ins":498},"empty_hyp":0,"utts_over_50pct":50}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q5_K_M","metric":"wer","err_pct":23.33,"ci95":[22.3,24.33],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2669,"del":300,"ins":502},"empty_hyp":0,"utts_over_50pct":51}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":34.25,"ci95":[33.18,35.39],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4932,"del":308,"ins":1644},"empty_hyp":0,"utts_over_50pct":122}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q5_K_M","metric":"wer","err_pct":34.05,"ci95":[32.96,35.17],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4932,"del":328,"ins":1584},"empty_hyp":0,"utts_over_50pct":123}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":9.58,"ci95":[8.93,10.26],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1141,"del":127,"ins":150},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q5_K_M","metric":"wer","err_pct":9.61,"ci95":[8.96,10.26],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1151,"del":125,"ins":146},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":13.17,"ci95":[12.48,13.88],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2615,"del":449,"ins":417},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q5_K_M","metric":"wer","err_pct":13.36,"ci95":[12.69,14.07],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2648,"del":448,"ins":434},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.81,"ci95":[5.29,6.33],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":794,"del":150,"ins":102},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":6.01,"ci95":[5.47,6.56],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":824,"del":147,"ins":111},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":16.57,"ci95":[15.91,17.25],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2991,"del":372,"ins":313},"empty_hyp":0,"utts_over_50pct":16}, - {"dataset":"fleurs","split":"test","language":"gl","quant":"Q5_K_M","metric":"wer","err_pct":16.73,"ci95":[16.05,17.48],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3035,"del":373,"ins":304},"empty_hyp":0,"utts_over_50pct":17}, - {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":103.37,"ci95":[103.0,103.74],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":43235,"del":1553,"ins":1719},"empty_hyp":0,"utts_over_50pct":1000}, - {"dataset":"fleurs","split":"test","language":"gu","quant":"Q5_K_M","metric":"wer","err_pct":103.29,"ci95":[102.96,103.62],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":43409,"del":1393,"ins":1669},"empty_hyp":0,"utts_over_50pct":1000}, - {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":92.22,"ci95":[90.51,94.49],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11413,"del":2003,"ins":1278},"empty_hyp":0,"utts_over_50pct":619}, - {"dataset":"fleurs","split":"test","language":"ha","quant":"Q5_K_M","metric":"wer","err_pct":92.09,"ci95":[90.24,93.92],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11351,"del":2086,"ins":1236},"empty_hyp":0,"utts_over_50pct":618}, - {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":27.78,"ci95":[26.13,29.34],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2984,"del":553,"ins":308},"empty_hyp":1,"utts_over_50pct":98}, - {"dataset":"fleurs","split":"test","language":"he","quant":"Q5_K_M","metric":"wer","err_pct":27.91,"ci95":[26.28,29.5],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2992,"del":565,"ins":306},"empty_hyp":1,"utts_over_50pct":98}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":23.27,"ci95":[21.44,25.21],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2686,"del":1231,"ins":447},"empty_hyp":0,"utts_over_50pct":23}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":23.71,"ci95":[21.81,25.73],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2696,"del":1319,"ins":431},"empty_hyp":0,"utts_over_50pct":23}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":14.18,"ci95":[13.43,14.97],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2055,"del":248,"ins":214},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q5_K_M","metric":"wer","err_pct":14.39,"ci95":[13.66,15.14],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2108,"del":231,"ins":216},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":17.84,"ci95":[17.0,18.71],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2448,"del":273,"ins":325},"empty_hyp":0,"utts_over_50pct":18}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q5_K_M","metric":"wer","err_pct":18.07,"ci95":[17.21,18.97],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2473,"del":266,"ins":346},"empty_hyp":0,"utts_over_50pct":23}, - {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":46.93,"ci95":[45.6,48.18],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6702,"del":1275,"ins":546},"empty_hyp":0,"utts_over_50pct":349}, - {"dataset":"fleurs","split":"test","language":"hy","quant":"Q5_K_M","metric":"wer","err_pct":46.91,"ci95":[45.62,48.21],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6707,"del":1268,"ins":545},"empty_hyp":0,"utts_over_50pct":338}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":7.43,"ci95":[6.82,8.12],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":793,"del":87,"ins":127},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q5_K_M","metric":"wer","err_pct":7.55,"ci95":[6.94,8.24],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":812,"del":88,"ins":124},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":39.59,"ci95":[35.74,43.66],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":335,"del":19,"ins":55},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"fleurs","split":"test","language":"is","quant":"Q5_K_M","metric":"wer","err_pct":39.79,"ci95":[36.35,43.45],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":338,"del":22,"ins":51},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.59,"ci95":[3.07,4.21],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":511,"del":173,"ins":79},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":3.52,"ci95":[2.99,4.13],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":503,"del":167,"ins":78},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":5.56,"ci95":[5.09,6.06],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1304,"del":321,"ins":190},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":5.57,"ci95":[5.06,6.06],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1299,"del":331,"ins":187},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":115.24,"ci95":[112.85,117.95],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15061,"del":2002,"ins":2688},"empty_hyp":1,"utts_over_50pct":979}, - {"dataset":"fleurs","split":"test","language":"ka","quant":"Q5_K_M","metric":"wer","err_pct":115.4,"ci95":[112.82,118.42],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15243,"del":1828,"ins":2708},"empty_hyp":4,"utts_over_50pct":979}, - {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":40.13,"ci95":[39.15,41.23],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5091,"del":394,"ins":541},"empty_hyp":0,"utts_over_50pct":201}, - {"dataset":"fleurs","split":"test","language":"kk","quant":"Q5_K_M","metric":"wer","err_pct":40.11,"ci95":[39.07,41.16],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5094,"del":418,"ins":511},"empty_hyp":0,"utts_over_50pct":205}, - {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":150.84,"ci95":[146.99,154.74],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":54849,"del":6541,"ins":34710},"empty_hyp":12,"utts_over_50pct":771}, - {"dataset":"fleurs","split":"test","language":"km","quant":"Q5_K_M","metric":"cer","err_pct":149.62,"ci95":[145.95,153.59],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":55244,"del":6072,"ins":34005},"empty_hyp":12,"utts_over_50pct":771}, - {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":47.64,"ci95":[45.56,49.83],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11402,"del":7003,"ins":1669},"empty_hyp":2,"utts_over_50pct":235}, - {"dataset":"fleurs","split":"test","language":"kn","quant":"Q5_K_M","metric":"wer","err_pct":46.97,"ci95":[44.89,49.09],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10969,"del":7128,"ins":1692},"empty_hyp":4,"utts_over_50pct":231}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":4.99,"ci95":[3.99,6.0],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":297,"del":529,"ins":56},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":4.97,"ci95":[3.97,5.99],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":293,"del":528,"ins":57},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":92.83,"ci95":[91.48,94.35],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16224,"del":1620,"ins":1613},"empty_hyp":0,"utts_over_50pct":922}, - {"dataset":"fleurs","split":"test","language":"lb","quant":"Q5_K_M","metric":"wer","err_pct":92.07,"ci95":[90.68,93.55],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16140,"del":1687,"ins":1471},"empty_hyp":0,"utts_over_50pct":924}, - {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":79.4,"ci95":[77.2,81.78],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6040,"del":453,"ins":1804},"empty_hyp":0,"utts_over_50pct":439}, - {"dataset":"fleurs","split":"test","language":"ln","quant":"Q5_K_M","metric":"wer","err_pct":77.99,"ci95":[75.98,79.93],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5984,"del":472,"ins":1693},"empty_hyp":0,"utts_over_50pct":436}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":101.65,"ci95":[101.07,102.27],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35553,"del":1166,"ins":1326},"empty_hyp":0,"utts_over_50pct":405}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q5_K_M","metric":"cer","err_pct":101.64,"ci95":[100.97,102.38],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35499,"del":1224,"ins":1318},"empty_hyp":0,"utts_over_50pct":405}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":30.37,"ci95":[29.39,31.27],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4664,"del":275,"ins":264},"empty_hyp":0,"utts_over_50pct":110}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q5_K_M","metric":"wer","err_pct":30.6,"ci95":[29.59,31.51],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4706,"del":278,"ins":258},"empty_hyp":0,"utts_over_50pct":119}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":24.49,"ci95":[23.58,25.48],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3247,"del":199,"ins":329},"empty_hyp":0,"utts_over_50pct":40}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q5_K_M","metric":"wer","err_pct":24.42,"ci95":[23.5,25.41],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3244,"del":202,"ins":319},"empty_hyp":0,"utts_over_50pct":43}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q5_K_M","metric":"wer","err_pct":18.92,"ci95":[18.16,19.67],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3243,"del":263,"ins":483},"empty_hyp":0,"utts_over_50pct":23}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.67,"ci95":[2.23,3.33],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":866,"del":281,"ins":267},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.68,"ci95":[2.23,3.35],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":280,"ins":271},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.97,"ci95":[2.37,3.79],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":868,"del":286,"ins":420},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.83,"ci95":[2.31,3.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":873,"del":286,"ins":342},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.71,"ci95":[2.26,3.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":292,"ins":274},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.46,"ci95":[2.21,2.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":870,"del":270,"ins":162},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.68,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.65,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.72,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":38.45,"ci95":[36.36,40.66],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1787,"del":292,"ins":171},"empty_hyp":1,"utts_over_50pct":59,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":140.81,"ci95":[135.38,146.83],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7487,"del":1050,"ins":3522},"empty_hyp":4,"utts_over_50pct":516,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":17.06,"ci95":[15.68,18.51],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1034,"del":305,"ins":66},"empty_hyp":1,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":104.58,"ci95":[104.19,105.02],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41441,"del":5499,"ins":2206},"empty_hyp":0,"utts_over_50pct":984,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":24.13,"ci95":[23.27,24.98],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3667,"del":353,"ins":306},"empty_hyp":0,"utts_over_50pct":47,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":46.96,"ci95":[46.01,47.89],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8517,"del":648,"ins":614},"empty_hyp":0,"utts_over_50pct":372,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":15.81,"ci95":[15.0,16.69],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1805,"del":223,"ins":213},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":103.42,"ci95":[102.99,103.87],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":37827,"del":6726,"ins":1747},"empty_hyp":0,"utts_over_50pct":918,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":17.02,"ci95":[16.25,17.87],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2570,"del":398,"ins":236},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":5.56,"ci95":[5.03,6.12],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":961,"del":232,"ins":155},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":14.42,"ci95":[13.62,15.22],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1656,"del":125,"ins":194},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":30.55,"ci95":[29.6,31.55],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6238,"del":804,"ins":964},"empty_hyp":1,"utts_over_50pct":89,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":14.92,"ci95":[14.19,15.63],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2333,"del":319,"ins":356},"empty_hyp":1,"utts_over_50pct":12,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.53,"ci95":[4.13,4.93],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":612,"del":91,"ins":144},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":13.51,"ci95":[12.53,14.42],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1774,"del":165,"ins":111},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.21,"ci95":[3.73,4.82],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":126,"ins":82},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.3,"ci95":[2.93,3.7],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":556,"del":128,"ins":85},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":23.25,"ci95":[22.23,24.25],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2648,"del":314,"ins":498},"empty_hyp":0,"utts_over_50pct":50,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":34.25,"ci95":[33.18,35.39],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4932,"del":308,"ins":1644},"empty_hyp":0,"utts_over_50pct":122,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":9.58,"ci95":[8.93,10.26],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1141,"del":127,"ins":150},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":13.17,"ci95":[12.48,13.88],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2615,"del":449,"ins":417},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.81,"ci95":[5.29,6.33],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":794,"del":150,"ins":102},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":16.57,"ci95":[15.91,17.25],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2991,"del":372,"ins":313},"empty_hyp":0,"utts_over_50pct":16,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":103.37,"ci95":[103.0,103.74],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":43235,"del":1553,"ins":1719},"empty_hyp":0,"utts_over_50pct":1000,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":92.22,"ci95":[90.51,94.49],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11413,"del":2003,"ins":1278},"empty_hyp":0,"utts_over_50pct":619,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":27.78,"ci95":[26.13,29.34],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2984,"del":553,"ins":308},"empty_hyp":1,"utts_over_50pct":98,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":23.27,"ci95":[21.44,25.21],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2686,"del":1231,"ins":447},"empty_hyp":0,"utts_over_50pct":23,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":14.18,"ci95":[13.43,14.97],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2055,"del":248,"ins":214},"empty_hyp":0,"utts_over_50pct":10,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":17.84,"ci95":[17.0,18.71],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2448,"del":273,"ins":325},"empty_hyp":0,"utts_over_50pct":18,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":46.93,"ci95":[45.6,48.18],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6702,"del":1275,"ins":546},"empty_hyp":0,"utts_over_50pct":349,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":7.43,"ci95":[6.82,8.12],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":793,"del":87,"ins":127},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":39.59,"ci95":[35.74,43.66],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":335,"del":19,"ins":55},"empty_hyp":0,"utts_over_50pct":11,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.59,"ci95":[3.07,4.21],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":511,"del":173,"ins":79},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":5.56,"ci95":[5.09,6.06],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1304,"del":321,"ins":190},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":115.24,"ci95":[112.85,117.95],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15061,"del":2002,"ins":2688},"empty_hyp":1,"utts_over_50pct":979,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":40.13,"ci95":[39.15,41.23],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5091,"del":394,"ins":541},"empty_hyp":0,"utts_over_50pct":201,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":47.64,"ci95":[45.56,49.83],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11402,"del":7003,"ins":1669},"empty_hyp":2,"utts_over_50pct":235,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":4.99,"ci95":[3.99,6.0],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":297,"del":529,"ins":56},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":92.83,"ci95":[91.48,94.35],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16224,"del":1620,"ins":1613},"empty_hyp":0,"utts_over_50pct":922,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":79.4,"ci95":[77.2,81.78],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6040,"del":453,"ins":1804},"empty_hyp":0,"utts_over_50pct":439,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":30.37,"ci95":[29.39,31.27],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4664,"del":275,"ins":264},"empty_hyp":0,"utts_over_50pct":110,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":24.49,"ci95":[23.58,25.48],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3247,"del":199,"ins":329},"empty_hyp":0,"utts_over_50pct":40,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.67,"ci95":[2.23,3.33],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":866,"del":281,"ins":267},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.68,"ci95":[2.23,3.35],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":280,"ins":271},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.97,"ci95":[2.37,3.79],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":868,"del":286,"ins":420},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.83,"ci95":[2.31,3.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":873,"del":286,"ins":342},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.71,"ci95":[2.26,3.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":292,"ins":274},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.46,"ci95":[2.21,2.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":870,"del":270,"ins":162},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":150.84,"ci95":[146.99,154.74],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":54849,"del":6541,"ins":34710},"empty_hyp":12,"utts_over_50pct":771,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":101.65,"ci95":[101.07,102.27],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35553,"del":1166,"ins":1326},"empty_hyp":0,"utts_over_50pct":405,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":11260.6,"xrt_compute":0.977,"load_ms":673.3,"mel_ms":19.2,"encode_ms":8274.3,"decode_ms":2967.1,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7366.1,"xrt_compute":1.493,"load_ms":379.9,"mel_ms":18.2,"encode_ms":5456.0,"decode_ms":1891.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7747.1,"xrt_compute":1.42,"load_ms":268.3,"mel_ms":18.0,"encode_ms":5786.7,"decode_ms":1942.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":1792.5,"xrt_compute":6.137,"load_ms":1418.7,"mel_ms":19.1,"encode_ms":878.7,"decode_ms":894.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1627.1,"xrt_compute":6.761,"load_ms":755.1,"mel_ms":18.3,"encode_ms":905.1,"decode_ms":703.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1590.6,"xrt_compute":6.916,"load_ms":371.1,"mel_ms":19.1,"encode_ms":927.8,"decode_ms":643.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15430.7,"xrt_compute":2.29,"load_ms":235.7,"mel_ms":4.6,"encode_ms":5625.7,"decode_ms":9800.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15431.0,"xrt_wall":2.29}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7456.5,"xrt_compute":1.475,"load_ms":229.7,"mel_ms":4.4,"encode_ms":5621.4,"decode_ms":1830.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7456.6,"xrt_wall":1.475}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":19721.8,"xrt_compute":1.792,"load_ms":355.1,"mel_ms":4.9,"encode_ms":7297.6,"decode_ms":12419.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19722.1,"xrt_wall":1.791}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9663.0,"xrt_compute":1.138,"load_ms":349.2,"mel_ms":4.4,"encode_ms":7294.0,"decode_ms":2364.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9663.2,"xrt_wall":1.138}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1400.8,"xrt_compute":25.223,"load_ms":235.5,"mel_ms":5.3,"encode_ms":239.2,"decode_ms":1156.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1400.8,"xrt_wall":25.222}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":499.6,"xrt_compute":22.02,"load_ms":223.7,"mel_ms":6.2,"encode_ms":239.6,"decode_ms":253.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":499.6,"xrt_wall":22.018}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":493.1,"xrt_compute":22.307,"load_ms":364.6,"mel_ms":5.1,"encode_ms":233.0,"decode_ms":255.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":493.2,"xrt_wall":22.305}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":43105.3,"xrt_compute":0.82,"load_ms":695.8,"mel_ms":52.4,"encode_ms":14562.8,"decode_ms":28490.1,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":43105.4,"xrt_wall":0.82}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6352.5,"xrt_compute":1.732,"load_ms":574.3,"mel_ms":36.7,"encode_ms":4351.1,"decode_ms":1964.7,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6352.6,"xrt_wall":1.732}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6271.0,"xrt_compute":1.754,"load_ms":997.6,"mel_ms":39.2,"encode_ms":4207.7,"decode_ms":2024.1,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6271.1,"xrt_wall":1.754} ] } diff --git a/catalog/whisper-large-v3-turbo.json b/catalog/whisper-large-v3-turbo.json index 7ceddffa..4890cc83 100644 --- a/catalog/whisper-large-v3-turbo.json +++ b/catalog/whisper-large-v3-turbo.json @@ -26,9 +26,9 @@ "long_form_strategy": "chunked-unbounded", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"targets":["en"],"verified":false,"note":"any supported source language to English text only"}, + "translate": {"supported":false}, "lang_detect": {"supported":true,"verified":false}, - "timestamps": {"supported":true,"granularities":["segment"],"verified":false,"note":"upstream exposes word-level via cross-attention alignment; this port ships segment"}, + "timestamps": {"supported":true,"verified":false,"granularities":["segment"],"note":"upstream exposes word-level via cross-attention alignment; this port ships segment"}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -41,204 +41,119 @@ {"quant":"Q4_K_M","filename":"whisper-large-v3-turbo-Q4_K_M.gguf","size_bytes":536069728} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":36.06,"ci95":[33.6,38.5],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1651,"del":326,"ins":133},"empty_hyp":0,"utts_over_50pct":50}, - {"dataset":"fleurs","split":"test","language":"af","quant":"Q5_K_M","metric":"wer","err_pct":35.48,"ci95":[33.09,37.88],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1639,"del":311,"ins":126},"empty_hyp":0,"utts_over_50pct":49}, - {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":146.29,"ci95":[142.41,150.14],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8041,"del":508,"ins":3979},"empty_hyp":0,"utts_over_50pct":516}, - {"dataset":"fleurs","split":"test","language":"am","quant":"Q5_K_M","metric":"wer","err_pct":147.76,"ci95":[143.93,151.61],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8172,"del":375,"ins":4107},"empty_hyp":0,"utts_over_50pct":516}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":15.48,"ci95":[14.1,16.99],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":923,"del":312,"ins":40},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":15.7,"ci95":[14.35,17.21],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":940,"del":311,"ins":42},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":101.22,"ci95":[100.8,101.73],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":25156,"del":21677,"ins":733},"empty_hyp":5,"utts_over_50pct":984}, - {"dataset":"fleurs","split":"test","language":"as","quant":"Q5_K_M","metric":"wer","err_pct":101.99,"ci95":[101.44,102.58],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":27610,"del":19233,"ins":1082},"empty_hyp":5,"utts_over_50pct":984}, - {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":23.15,"ci95":[22.1,24.28],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3443,"del":342,"ins":364},"empty_hyp":0,"utts_over_50pct":41}, - {"dataset":"fleurs","split":"test","language":"az","quant":"Q5_K_M","metric":"wer","err_pct":23.31,"ci95":[22.2,24.37],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3477,"del":359,"ins":343},"empty_hyp":0,"utts_over_50pct":48}, - {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":50.65,"ci95":[49.58,51.71],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9393,"del":571,"ins":585},"empty_hyp":0,"utts_over_50pct":464}, - {"dataset":"fleurs","split":"test","language":"be","quant":"Q5_K_M","metric":"wer","err_pct":50.79,"ci95":[49.77,51.81],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9400,"del":597,"ins":580},"empty_hyp":0,"utts_over_50pct":483}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":13.58,"ci95":[12.78,14.38],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1565,"del":217,"ins":142},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q5_K_M","metric":"wer","err_pct":13.68,"ci95":[12.9,14.51],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1580,"del":218,"ins":141},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":67.53,"ci95":[66.01,68.93],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18201,"del":9171,"ins":2863},"empty_hyp":1,"utts_over_50pct":683}, - {"dataset":"fleurs","split":"test","language":"bn","quant":"Q5_K_M","metric":"wer","err_pct":69.3,"ci95":[67.74,70.71],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18402,"del":9572,"ins":3052},"empty_hyp":5,"utts_over_50pct":700}, - {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":14.77,"ci95":[14.06,15.48],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2262,"del":304,"ins":214},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"bs","quant":"Q5_K_M","metric":"wer","err_pct":15.16,"ci95":[14.44,15.88],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2320,"del":318,"ins":216},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":5.42,"ci95":[5.01,5.89],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":958,"del":188,"ins":166},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ca","quant":"Q5_K_M","metric":"wer","err_pct":5.25,"ci95":[4.87,5.64],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":957,"del":148,"ins":166},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":11.81,"ci95":[11.06,12.54],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1337,"del":131,"ins":149},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q5_K_M","metric":"wer","err_pct":11.9,"ci95":[11.16,12.67],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1349,"del":126,"ins":155},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":36.42,"ci95":[35.37,37.52],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7517,"del":948,"ins":1078},"empty_hyp":0,"utts_over_50pct":169}, - {"dataset":"fleurs","split":"test","language":"cy","quant":"Q5_K_M","metric":"wer","err_pct":36.81,"ci95":[35.72,37.88],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7562,"del":929,"ins":1154},"empty_hyp":0,"utts_over_50pct":175}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":13.6,"ci95":[12.93,14.3],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2121,"del":291,"ins":330},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q5_K_M","metric":"wer","err_pct":13.88,"ci95":[13.19,14.56],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2155,"del":292,"ins":350},"empty_hyp":0,"utts_over_50pct":16}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.54,"ci95":[4.14,4.96],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":616,"del":100,"ins":134},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.71,"ci95":[4.3,5.15],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":621,"del":97,"ins":164},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":13.26,"ci95":[12.35,14.13],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1763,"del":151,"ins":98},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":13.38,"ci95":[12.48,14.27],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1784,"del":146,"ins":100},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.38,"ci95":[3.95,4.84],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":446,"del":107,"ins":84},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.35,"ci95":[3.92,4.78],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":443,"del":106,"ins":84},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.12,"ci95":[2.8,3.48],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":529,"del":103,"ins":95},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.12,"ci95":[2.81,3.47],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":532,"del":101,"ins":94},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":18.44,"ci95":[17.5,19.37],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2055,"del":247,"ins":442},"empty_hyp":0,"utts_over_50pct":29}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q5_K_M","metric":"wer","err_pct":18.72,"ci95":[17.79,19.69],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2072,"del":253,"ins":460},"empty_hyp":0,"utts_over_50pct":27}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":30.56,"ci95":[29.52,31.66],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4263,"del":251,"ins":1628},"empty_hyp":0,"utts_over_50pct":83}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q5_K_M","metric":"wer","err_pct":30.82,"ci95":[29.76,31.92],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4292,"del":245,"ins":1658},"empty_hyp":0,"utts_over_50pct":76}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":8.29,"ci95":[7.65,8.93],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":961,"del":136,"ins":129},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q5_K_M","metric":"wer","err_pct":8.26,"ci95":[7.58,8.91],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":957,"del":133,"ins":132},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":12.08,"ci95":[11.43,12.72],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2349,"del":474,"ins":368},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q5_K_M","metric":"wer","err_pct":12.09,"ci95":[11.53,12.66],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2387,"del":426,"ins":382},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.51,"ci95":[5.01,6.06],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":757,"del":132,"ins":103},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":5.59,"ci95":[5.08,6.13],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":757,"del":138,"ins":111},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":12.76,"ci95":[12.22,13.36],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2392,"del":250,"ins":189},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"gl","quant":"Q5_K_M","metric":"wer","err_pct":13.13,"ci95":[12.57,13.73],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2449,"del":272,"ins":191},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":78.95,"ci95":[77.6,80.23],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15141,"del":19233,"ins":1145},"empty_hyp":6,"utts_over_50pct":813}, - {"dataset":"fleurs","split":"test","language":"gu","quant":"Q5_K_M","metric":"wer","err_pct":78.3,"ci95":[77.03,79.52],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14086,"del":19957,"ins":1182},"empty_hyp":5,"utts_over_50pct":817}, - {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":97.24,"ci95":[95.3,99.32],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10766,"del":3171,"ins":1557},"empty_hyp":0,"utts_over_50pct":618}, - {"dataset":"fleurs","split":"test","language":"ha","quant":"Q5_K_M","metric":"wer","err_pct":97.38,"ci95":[95.35,99.63],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10638,"del":3214,"ins":1665},"empty_hyp":0,"utts_over_50pct":618}, - {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":29.71,"ci95":[28.05,31.36],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3185,"del":570,"ins":358},"empty_hyp":0,"utts_over_50pct":127}, - {"dataset":"fleurs","split":"test","language":"he","quant":"Q5_K_M","metric":"wer","err_pct":29.91,"ci95":[28.15,31.6],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3192,"del":572,"ins":376},"empty_hyp":0,"utts_over_50pct":131}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":18.85,"ci95":[17.82,20.1],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2200,"del":923,"ins":413},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":19.18,"ci95":[18.03,20.46],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2205,"del":956,"ins":437},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":12.54,"ci95":[11.83,13.26],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1791,"del":223,"ins":212},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q5_K_M","metric":"wer","err_pct":12.69,"ci95":[11.99,13.37],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1804,"del":227,"ins":222},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":15.07,"ci95":[14.25,15.92],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2051,"del":231,"ins":291},"empty_hyp":0,"utts_over_50pct":16}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q5_K_M","metric":"wer","err_pct":15.26,"ci95":[14.44,16.14],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2089,"del":217,"ins":300},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":45.62,"ci95":[44.42,46.72],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6640,"del":960,"ins":686},"empty_hyp":0,"utts_over_50pct":334}, - {"dataset":"fleurs","split":"test","language":"hy","quant":"Q5_K_M","metric":"wer","err_pct":45.88,"ci95":[44.69,46.99],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6654,"del":980,"ins":698},"empty_hyp":0,"utts_over_50pct":342}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":7.2,"ci95":[6.56,7.82],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":724,"del":115,"ins":137},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q5_K_M","metric":"wer","err_pct":7.03,"ci95":[6.4,7.67],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":709,"del":116,"ins":128},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":21.39,"ci95":[17.91,25.44],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":179,"del":17,"ins":25},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"is","quant":"Q5_K_M","metric":"wer","err_pct":22.17,"ci95":[18.2,26.81],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":185,"del":15,"ins":29},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.77,"ci95":[2.45,3.08],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":439,"del":69,"ins":81},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.86,"ci95":[2.51,3.21],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":444,"del":73,"ins":90},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":4.82,"ci95":[4.4,5.3],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1109,"del":295,"ins":171},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":4.84,"ci95":[4.42,5.33],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1113,"del":297,"ins":169},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":109.21,"ci95":[107.78,110.55],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11569,"del":5555,"ins":1594},"empty_hyp":3,"utts_over_50pct":979}, - {"dataset":"fleurs","split":"test","language":"ka","quant":"Q5_K_M","metric":"wer","err_pct":109.99,"ci95":[108.66,111.42],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11576,"del":5548,"ins":1728},"empty_hyp":0,"utts_over_50pct":979}, - {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":21.27,"ci95":[20.15,22.31],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2480,"del":245,"ins":468},"empty_hyp":0,"utts_over_50pct":41}, - {"dataset":"fleurs","split":"test","language":"kk","quant":"Q5_K_M","metric":"wer","err_pct":21.57,"ci95":[20.37,22.87],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2503,"del":253,"ins":483},"empty_hyp":0,"utts_over_50pct":47}, - {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":95.2,"ci95":[93.97,96.37],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":29731,"del":27154,"ins":3767},"empty_hyp":2,"utts_over_50pct":771}, - {"dataset":"fleurs","split":"test","language":"km","quant":"Q5_K_M","metric":"cer","err_pct":96.46,"ci95":[95.27,97.82],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":31993,"del":25503,"ins":3961},"empty_hyp":1,"utts_over_50pct":771}, - {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":32.57,"ci95":[31.26,34.08],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5855,"del":5913,"ins":1954},"empty_hyp":0,"utts_over_50pct":101}, - {"dataset":"fleurs","split":"test","language":"kn","quant":"Q5_K_M","metric":"wer","err_pct":33.4,"ci95":[31.97,35.04],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6103,"del":6001,"ins":1971},"empty_hyp":0,"utts_over_50pct":105}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.24,"ci95":[4.3,6.25],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":350,"del":529,"ins":47},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":5.06,"ci95":[4.12,6.07],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":327,"del":524,"ins":43},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":87.21,"ci95":[86.38,88.1],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15457,"del":2032,"ins":790},"empty_hyp":0,"utts_over_50pct":927}, - {"dataset":"fleurs","split":"test","language":"lb","quant":"Q5_K_M","metric":"wer","err_pct":87.96,"ci95":[86.97,88.93],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15747,"del":1767,"ins":922},"empty_hyp":0,"utts_over_50pct":927}, - {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":75.39,"ci95":[72.93,78.09],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5670,"del":599,"ins":1608},"empty_hyp":0,"utts_over_50pct":398}, - {"dataset":"fleurs","split":"test","language":"ln","quant":"Q5_K_M","metric":"wer","err_pct":76.46,"ci95":[73.87,79.3],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5756,"del":577,"ins":1656},"empty_hyp":0,"utts_over_50pct":401}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":115.41,"ci95":[111.93,119.15],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":25892,"del":10285,"ins":7018},"empty_hyp":0,"utts_over_50pct":405}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q5_K_M","metric":"cer","err_pct":121.79,"ci95":[117.06,126.7],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":26481,"del":9725,"ins":9375},"empty_hyp":1,"utts_over_50pct":405}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":25.11,"ci95":[24.23,26.06],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3887,"del":211,"ins":204},"empty_hyp":0,"utts_over_50pct":62}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q5_K_M","metric":"wer","err_pct":25.54,"ci95":[24.68,26.48],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3956,"del":208,"ins":212},"empty_hyp":0,"utts_over_50pct":64}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":19.53,"ci95":[18.64,20.43],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2588,"del":163,"ins":259},"empty_hyp":0,"utts_over_50pct":19}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q5_K_M","metric":"wer","err_pct":19.78,"ci95":[18.88,20.72],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2616,"del":171,"ins":263},"empty_hyp":0,"utts_over_50pct":21}, - {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":48.91,"ci95":[47.53,50.35],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11122,"del":1818,"ins":2234},"empty_hyp":0,"utts_over_50pct":409}, - {"dataset":"fleurs","split":"test","language":"mi","quant":"Q5_K_M","metric":"wer","err_pct":49.48,"ci95":[47.92,51.06],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11248,"del":1822,"ins":2281},"empty_hyp":0,"utts_over_50pct":429}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":17.85,"ci95":[17.07,18.66],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3048,"del":244,"ins":472},"empty_hyp":0,"utts_over_50pct":20}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q5_K_M","metric":"wer","err_pct":17.91,"ci95":[17.16,18.69],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3060,"del":258,"ins":459},"empty_hyp":0,"utts_over_50pct":22}, - {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":98.75,"ci95":[98.01,99.54],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41848,"del":10353,"ins":1361},"empty_hyp":0,"utts_over_50pct":940}, - {"dataset":"fleurs","split":"test","language":"ml","quant":"Q5_K_M","metric":"wer","err_pct":99.19,"ci95":[98.49,99.84],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":42929,"del":9362,"ins":1507},"empty_hyp":1,"utts_over_50pct":944}, - {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":101.49,"ci95":[100.04,103.08],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15122,"del":2192,"ins":1495},"empty_hyp":0,"utts_over_50pct":949}, - {"dataset":"fleurs","split":"test","language":"mn","quant":"Q5_K_M","metric":"wer","err_pct":104.61,"ci95":[102.78,106.54],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15056,"del":2396,"ins":1935},"empty_hyp":0,"utts_over_50pct":949}, - {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":36.12,"ci95":[35.26,36.99],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11530,"del":3929,"ins":3077},"empty_hyp":0,"utts_over_50pct":155}, - {"dataset":"fleurs","split":"test","language":"mr","quant":"Q5_K_M","metric":"wer","err_pct":36.26,"ci95":[35.38,37.2],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11557,"del":3923,"ins":3124},"empty_hyp":0,"utts_over_50pct":168}, - {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":8.64,"ci95":[8.0,9.3],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1073,"del":97,"ins":105},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"ms","quant":"Q5_K_M","metric":"wer","err_pct":8.66,"ci95":[8.04,9.31],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1074,"del":93,"ins":111},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":70.92,"ci95":[69.87,71.96],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13004,"del":1412,"ins":1350},"empty_hyp":0,"utts_over_50pct":822}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q5_K_M","metric":"wer","err_pct":71.6,"ci95":[70.56,72.64],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13108,"del":1506,"ins":1305},"empty_hyp":0,"utts_over_50pct":821}, - {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":121.67,"ci95":[117.84,125.71],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39288,"del":15150,"ins":16732},"empty_hyp":1,"utts_over_50pct":880}, - {"dataset":"fleurs","split":"test","language":"my","quant":"Q5_K_M","metric":"cer","err_pct":112.52,"ci95":[108.87,116.44],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":36349,"del":16901,"ins":12568},"empty_hyp":1,"utts_over_50pct":880}, - {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":9.1,"ci95":[8.23,10.07],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":535,"del":81,"ins":77},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"nb","quant":"Q5_K_M","metric":"wer","err_pct":9.15,"ci95":[8.28,10.09],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":539,"del":80,"ins":78},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":43.15,"ci95":[42.1,44.17],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9161,"del":2433,"ins":2796},"empty_hyp":0,"utts_over_50pct":207}, - {"dataset":"fleurs","split":"test","language":"ne","quant":"Q5_K_M","metric":"wer","err_pct":43.59,"ci95":[42.55,44.63],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9232,"del":2390,"ins":2913},"empty_hyp":0,"utts_over_50pct":211}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":5.98,"ci95":[5.35,6.64],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":370,"del":61,"ins":71},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":6.07,"ci95":[5.41,6.74],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":375,"del":63,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":70.94,"ci95":[69.87,72.07],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15960,"del":1678,"ins":1089},"empty_hyp":0,"utts_over_50pct":898}, - {"dataset":"fleurs","split":"test","language":"oc","quant":"Q5_K_M","metric":"wer","err_pct":71.5,"ci95":[70.37,72.7],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15914,"del":1725,"ins":1238},"empty_hyp":1,"utts_over_50pct":905}, - {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":99.53,"ci95":[98.36,100.52],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":22923,"del":1664,"ins":799},"empty_hyp":0,"utts_over_50pct":559}, - {"dataset":"fleurs","split":"test","language":"pa","quant":"Q5_K_M","metric":"wer","err_pct":100.53,"ci95":[99.57,101.39],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":23247,"del":1579,"ins":815},"empty_hyp":0,"utts_over_50pct":564}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":5.81,"ci95":[5.26,6.45],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":676,"del":84,"ins":76},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q5_K_M","metric":"wer","err_pct":5.87,"ci95":[5.31,6.47],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":681,"del":85,"ins":78},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":91.81,"ci95":[90.6,93.25],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10325,"del":1018,"ins":790},"empty_hyp":0,"utts_over_50pct":512}, - {"dataset":"fleurs","split":"test","language":"ps","quant":"Q5_K_M","metric":"wer","err_pct":93.02,"ci95":[91.46,95.07],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10361,"del":998,"ins":934},"empty_hyp":0,"utts_over_50pct":512}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":4.17,"ci95":[3.73,4.69],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":94,"ins":181},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":4.14,"ci95":[3.69,4.66],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":612,"del":97,"ins":180},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":10.9,"ci95":[10.18,11.65],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1871,"del":238,"ins":159},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q5_K_M","metric":"wer","err_pct":10.68,"ci95":[9.96,11.43],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1801,"del":238,"ins":182},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.93,"ci95":[4.94,7.56],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":677,"del":77,"ins":141},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":5.94,"ci95":[4.94,7.54],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":680,"del":75,"ins":142},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":122.1,"ci95":[119.64,124.58],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":19571,"del":3445,"ins":5846},"empty_hyp":4,"utts_over_50pct":980}, - {"dataset":"fleurs","split":"test","language":"sd","quant":"Q5_K_M","metric":"wer","err_pct":128.06,"ci95":[125.23,131.4],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20457,"del":2539,"ins":7276},"empty_hyp":4,"utts_over_50pct":980}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":10.21,"ci95":[9.44,11.03],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1290,"del":141,"ins":125},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q5_K_M","metric":"wer","err_pct":10.2,"ci95":[9.42,11.02],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1281,"del":155,"ins":119},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":20.56,"ci95":[19.59,21.52],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2703,"del":270,"ins":422},"empty_hyp":0,"utts_over_50pct":23}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q5_K_M","metric":"wer","err_pct":20.61,"ci95":[19.67,21.57],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2703,"del":270,"ins":430},"empty_hyp":0,"utts_over_50pct":19}, - {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":110.94,"ci95":[109.37,112.62],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12894,"del":310,"ins":4547},"empty_hyp":0,"utts_over_50pct":923}, - {"dataset":"fleurs","split":"test","language":"sn","quant":"Q5_K_M","metric":"wer","err_pct":110.86,"ci95":[109.03,112.89],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12886,"del":338,"ins":4513},"empty_hyp":0,"utts_over_50pct":922}, - {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":101.29,"ci95":[99.86,102.77],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18032,"del":3950,"ins":2514},"empty_hyp":3,"utts_over_50pct":1019}, - {"dataset":"fleurs","split":"test","language":"so","quant":"Q5_K_M","metric":"wer","err_pct":101.56,"ci95":[100.27,102.96],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17641,"del":4394,"ins":2528},"empty_hyp":5,"utts_over_50pct":1019}, - {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":32.36,"ci95":[29.53,35.38],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4167,"del":176,"ins":140},"empty_hyp":0,"utts_over_50pct":170}, - {"dataset":"fleurs","split":"test","language":"sr","quant":"Q5_K_M","metric":"wer","err_pct":33.46,"ci95":[30.54,36.32],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4332,"del":167,"ins":136},"empty_hyp":0,"utts_over_50pct":177}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":8.72,"ci95":[8.12,9.34],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1053,"del":167,"ins":121},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q5_K_M","metric":"wer","err_pct":8.78,"ci95":[8.18,9.39],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1064,"del":161,"ins":126},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":33.96,"ci95":[32.53,35.33],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2595,"del":279,"ins":521},"empty_hyp":0,"utts_over_50pct":63}, - {"dataset":"fleurs","split":"test","language":"sw","quant":"Q5_K_M","metric":"wer","err_pct":34.08,"ci95":[32.64,35.49],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2620,"del":279,"ins":508},"empty_hyp":0,"utts_over_50pct":65}, - {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":27.41,"ci95":[26.29,28.76],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5586,"del":1714,"ins":1929},"empty_hyp":0,"utts_over_50pct":39}, - {"dataset":"fleurs","split":"test","language":"ta","quant":"Q5_K_M","metric":"wer","err_pct":27.94,"ci95":[26.78,29.32],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5722,"del":1633,"ins":2050},"empty_hyp":0,"utts_over_50pct":39}, - {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":63.03,"ci95":[60.4,65.94],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8435,"del":4727,"ins":1087},"empty_hyp":2,"utts_over_50pct":238}, - {"dataset":"fleurs","split":"test","language":"te","quant":"Q5_K_M","metric":"wer","err_pct":63.98,"ci95":[61.06,66.91],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8839,"del":4468,"ins":1158},"empty_hyp":0,"utts_over_50pct":238}, - {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":106.06,"ci95":[104.44,107.88],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11801,"del":798,"ins":1225},"empty_hyp":0,"utts_over_50pct":598}, - {"dataset":"fleurs","split":"test","language":"tg","quant":"Q5_K_M","metric":"wer","err_pct":105.09,"ci95":[103.64,106.6],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11682,"del":810,"ins":1205},"empty_hyp":1,"utts_over_50pct":598}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":13.15,"ci95":[12.45,14.04],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6162,"del":3459,"ins":3205},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q5_K_M","metric":"cer","err_pct":13.3,"ci95":[12.63,14.18],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6276,"del":3480,"ins":3212},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":6.97,"ci95":[6.33,7.64],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":655,"del":139,"ins":133},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q5_K_M","metric":"wer","err_pct":7.15,"ci95":[6.49,7.79],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":671,"del":140,"ins":139},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":7.31,"ci95":[6.72,7.87],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":832,"del":108,"ins":110},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q5_K_M","metric":"wer","err_pct":7.22,"ci95":[6.63,7.79],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":818,"del":113,"ins":107},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":23.19,"ci95":[21.92,24.57],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1569,"del":168,"ins":234},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"ur","quant":"Q5_K_M","metric":"wer","err_pct":23.35,"ci95":[22.07,24.71],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1583,"del":168,"ins":233},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":102.52,"ci95":[101.45,103.64],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13634,"del":1908,"ins":828},"empty_hyp":0,"utts_over_50pct":862}, - {"dataset":"fleurs","split":"test","language":"uz","quant":"Q5_K_M","metric":"wer","err_pct":102.65,"ci95":[101.44,103.9],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13489,"del":2051,"ins":851},"empty_hyp":0,"utts_over_50pct":862}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.48,"ci95":[8.85,10.17],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1970,"del":282,"ins":215},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q5_K_M","metric":"wer","err_pct":9.43,"ci95":[8.85,10.07],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1964,"del":263,"ins":227},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":99.38,"ci95":[98.13,100.68],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17716,"del":1333,"ins":2972},"empty_hyp":0,"utts_over_50pct":830}, - {"dataset":"fleurs","split":"test","language":"yo","quant":"Q5_K_M","metric":"wer","err_pct":100.0,"ci95":[98.67,101.44],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17730,"del":1410,"ins":3019},"empty_hyp":0,"utts_over_50pct":829}, - {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":34.62,"ci95":[33.41,36.13],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9232,"del":303,"ins":504},"empty_hyp":0,"utts_over_50pct":69}, - {"dataset":"fleurs","split":"test","language":"yue","quant":"Q5_K_M","metric":"cer","err_pct":35.58,"ci95":[34.14,37.39],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9298,"del":288,"ins":732},"empty_hyp":0,"utts_over_50pct":78}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.5,"ci95":[7.65,9.4],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1379,"del":1471,"ins":182},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":8.62,"ci95":[7.76,9.49],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1434,"del":1468,"ins":172},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.01,"ci95":[1.83,2.21],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":765,"del":183,"ins":117},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.01,"ci95":[1.82,2.22],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":185,"ins":117},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.01,"ci95":[1.82,2.2],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":185,"ins":111},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.03,"ci95":[1.83,2.25],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":174,"ins":131},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.04,"ci95":[1.85,2.26],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":784,"del":188,"ins":111},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.0,"ci95":[1.82,2.21],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"errors":{"sub":761,"del":183,"ins":117},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.0,"ci95":[1.82,2.2],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"errors":{"sub":765,"del":177,"ins":116},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.96,"ci95":[1.78,2.17],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"errors":{"sub":762,"del":172,"ins":108},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.0,"ci95":[1.82,2.22],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"errors":{"sub":765,"del":167,"ins":131},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.0,"ci95":[1.81,2.21],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"errors":{"sub":777,"del":180,"ins":105},"empty_hyp":0,"utts_over_50pct":6} + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":36.06,"ci95":[33.6,38.5],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1651,"del":326,"ins":133},"empty_hyp":0,"utts_over_50pct":50,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":146.29,"ci95":[142.41,150.14],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8041,"del":508,"ins":3979},"empty_hyp":0,"utts_over_50pct":516,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":15.48,"ci95":[14.1,16.99],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":923,"del":312,"ins":40},"empty_hyp":0,"utts_over_50pct":12,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":101.22,"ci95":[100.8,101.73],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":25156,"del":21677,"ins":733},"empty_hyp":5,"utts_over_50pct":984,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":23.15,"ci95":[22.1,24.28],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3443,"del":342,"ins":364},"empty_hyp":0,"utts_over_50pct":41,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":50.65,"ci95":[49.58,51.71],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9393,"del":571,"ins":585},"empty_hyp":0,"utts_over_50pct":464,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":13.58,"ci95":[12.78,14.38],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1565,"del":217,"ins":142},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":67.53,"ci95":[66.01,68.93],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18201,"del":9171,"ins":2863},"empty_hyp":1,"utts_over_50pct":683,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":14.77,"ci95":[14.06,15.48],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2262,"del":304,"ins":214},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":5.42,"ci95":[5.01,5.89],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":958,"del":188,"ins":166},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":11.81,"ci95":[11.06,12.54],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1337,"del":131,"ins":149},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":36.42,"ci95":[35.37,37.52],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7517,"del":948,"ins":1078},"empty_hyp":0,"utts_over_50pct":169,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":13.6,"ci95":[12.93,14.3],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2121,"del":291,"ins":330},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.54,"ci95":[4.14,4.96],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":616,"del":100,"ins":134},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":13.26,"ci95":[12.35,14.13],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1763,"del":151,"ins":98},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.38,"ci95":[3.95,4.84],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":446,"del":107,"ins":84},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.12,"ci95":[2.8,3.48],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":529,"del":103,"ins":95},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":18.44,"ci95":[17.5,19.37],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2055,"del":247,"ins":442},"empty_hyp":0,"utts_over_50pct":29,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":30.56,"ci95":[29.52,31.66],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4263,"del":251,"ins":1628},"empty_hyp":0,"utts_over_50pct":83,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":8.29,"ci95":[7.65,8.93],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":961,"del":136,"ins":129},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":12.08,"ci95":[11.43,12.72],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2349,"del":474,"ins":368},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.51,"ci95":[5.01,6.06],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":757,"del":132,"ins":103},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":12.76,"ci95":[12.22,13.36],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2392,"del":250,"ins":189},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":78.95,"ci95":[77.6,80.23],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15141,"del":19233,"ins":1145},"empty_hyp":6,"utts_over_50pct":813,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":97.24,"ci95":[95.3,99.32],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10766,"del":3171,"ins":1557},"empty_hyp":0,"utts_over_50pct":618,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":29.71,"ci95":[28.05,31.36],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3185,"del":570,"ins":358},"empty_hyp":0,"utts_over_50pct":127,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":18.85,"ci95":[17.82,20.1],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2200,"del":923,"ins":413},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":12.54,"ci95":[11.83,13.26],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1791,"del":223,"ins":212},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":15.07,"ci95":[14.25,15.92],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2051,"del":231,"ins":291},"empty_hyp":0,"utts_over_50pct":16,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":45.62,"ci95":[44.42,46.72],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6640,"del":960,"ins":686},"empty_hyp":0,"utts_over_50pct":334,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":7.2,"ci95":[6.56,7.82],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":724,"del":115,"ins":137},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":21.39,"ci95":[17.91,25.44],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":179,"del":17,"ins":25},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.77,"ci95":[2.45,3.08],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":439,"del":69,"ins":81},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":4.82,"ci95":[4.4,5.3],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1109,"del":295,"ins":171},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":109.21,"ci95":[107.78,110.55],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11569,"del":5555,"ins":1594},"empty_hyp":3,"utts_over_50pct":979,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":21.27,"ci95":[20.15,22.31],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2480,"del":245,"ins":468},"empty_hyp":0,"utts_over_50pct":41,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":32.57,"ci95":[31.26,34.08],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5855,"del":5913,"ins":1954},"empty_hyp":0,"utts_over_50pct":101,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.24,"ci95":[4.3,6.25],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":350,"del":529,"ins":47},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":87.21,"ci95":[86.38,88.1],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15457,"del":2032,"ins":790},"empty_hyp":0,"utts_over_50pct":927,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":75.39,"ci95":[72.93,78.09],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5670,"del":599,"ins":1608},"empty_hyp":0,"utts_over_50pct":398,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":25.11,"ci95":[24.23,26.06],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3887,"del":211,"ins":204},"empty_hyp":0,"utts_over_50pct":62,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":19.53,"ci95":[18.64,20.43],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2588,"del":163,"ins":259},"empty_hyp":0,"utts_over_50pct":19,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":48.91,"ci95":[47.53,50.35],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11122,"del":1818,"ins":2234},"empty_hyp":0,"utts_over_50pct":409,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":17.85,"ci95":[17.07,18.66],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3048,"del":244,"ins":472},"empty_hyp":0,"utts_over_50pct":20,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":98.75,"ci95":[98.01,99.54],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41848,"del":10353,"ins":1361},"empty_hyp":0,"utts_over_50pct":940,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":101.49,"ci95":[100.04,103.08],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15122,"del":2192,"ins":1495},"empty_hyp":0,"utts_over_50pct":949,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":36.12,"ci95":[35.26,36.99],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11530,"del":3929,"ins":3077},"empty_hyp":0,"utts_over_50pct":155,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":8.64,"ci95":[8.0,9.3],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1073,"del":97,"ins":105},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":70.92,"ci95":[69.87,71.96],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13004,"del":1412,"ins":1350},"empty_hyp":0,"utts_over_50pct":822,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":9.1,"ci95":[8.23,10.07],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":535,"del":81,"ins":77},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":43.15,"ci95":[42.1,44.17],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9161,"del":2433,"ins":2796},"empty_hyp":0,"utts_over_50pct":207,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":5.98,"ci95":[5.35,6.64],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":370,"del":61,"ins":71},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":70.94,"ci95":[69.87,72.07],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15960,"del":1678,"ins":1089},"empty_hyp":0,"utts_over_50pct":898,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":99.53,"ci95":[98.36,100.52],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":22923,"del":1664,"ins":799},"empty_hyp":0,"utts_over_50pct":559,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":5.81,"ci95":[5.26,6.45],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":676,"del":84,"ins":76},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":91.81,"ci95":[90.6,93.25],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10325,"del":1018,"ins":790},"empty_hyp":0,"utts_over_50pct":512,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":4.17,"ci95":[3.73,4.69],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":94,"ins":181},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":10.9,"ci95":[10.18,11.65],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1871,"del":238,"ins":159},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.93,"ci95":[4.94,7.56],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":677,"del":77,"ins":141},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":122.1,"ci95":[119.64,124.58],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":19571,"del":3445,"ins":5846},"empty_hyp":4,"utts_over_50pct":980,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":10.21,"ci95":[9.44,11.03],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1290,"del":141,"ins":125},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":20.56,"ci95":[19.59,21.52],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2703,"del":270,"ins":422},"empty_hyp":0,"utts_over_50pct":23,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":110.94,"ci95":[109.37,112.62],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12894,"del":310,"ins":4547},"empty_hyp":0,"utts_over_50pct":923,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":101.29,"ci95":[99.86,102.77],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18032,"del":3950,"ins":2514},"empty_hyp":3,"utts_over_50pct":1019,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":32.36,"ci95":[29.53,35.38],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4167,"del":176,"ins":140},"empty_hyp":0,"utts_over_50pct":170,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":8.72,"ci95":[8.12,9.34],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1053,"del":167,"ins":121},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":33.96,"ci95":[32.53,35.33],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2595,"del":279,"ins":521},"empty_hyp":0,"utts_over_50pct":63,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":27.41,"ci95":[26.29,28.76],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5586,"del":1714,"ins":1929},"empty_hyp":0,"utts_over_50pct":39,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":63.03,"ci95":[60.4,65.94],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8435,"del":4727,"ins":1087},"empty_hyp":2,"utts_over_50pct":238,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":106.06,"ci95":[104.44,107.88],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11801,"del":798,"ins":1225},"empty_hyp":0,"utts_over_50pct":598,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":13.15,"ci95":[12.45,14.04],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6162,"del":3459,"ins":3205},"empty_hyp":0,"utts_over_50pct":12,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":6.97,"ci95":[6.33,7.64],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":655,"del":139,"ins":133},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":7.31,"ci95":[6.72,7.87],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":832,"del":108,"ins":110},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":23.19,"ci95":[21.92,24.57],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1569,"del":168,"ins":234},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":102.52,"ci95":[101.45,103.64],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13634,"del":1908,"ins":828},"empty_hyp":0,"utts_over_50pct":862,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.48,"ci95":[8.85,10.17],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1970,"del":282,"ins":215},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":99.38,"ci95":[98.13,100.68],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17716,"del":1333,"ins":2972},"empty_hyp":0,"utts_over_50pct":830,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":34.62,"ci95":[33.41,36.13],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9232,"del":303,"ins":504},"empty_hyp":0,"utts_over_50pct":69,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.5,"ci95":[7.65,9.4],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1379,"del":1471,"ins":182},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.01,"ci95":[1.83,2.21],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":765,"del":183,"ins":117},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.01,"ci95":[1.82,2.22],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":185,"ins":117},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.01,"ci95":[1.82,2.2],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":185,"ins":111},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.03,"ci95":[1.83,2.25],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":769,"del":174,"ins":131},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.04,"ci95":[1.85,2.26],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":784,"del":188,"ins":111},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":95.2,"ci95":[93.97,96.37],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":29731,"del":27154,"ins":3767},"empty_hyp":2,"utts_over_50pct":771,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":115.41,"ci95":[111.93,119.15],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":25892,"del":10285,"ins":7018},"empty_hyp":0,"utts_over_50pct":405,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":121.67,"ci95":[117.84,125.71],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39288,"del":15150,"ins":16732},"empty_hyp":1,"utts_over_50pct":880,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":8606.1,"xrt_compute":1.278,"load_ms":371.9,"mel_ms":18.3,"encode_ms":8156.7,"decode_ms":431.1,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5698.2,"xrt_compute":1.93,"load_ms":222.4,"mel_ms":18.2,"encode_ms":5406.3,"decode_ms":273.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6073.7,"xrt_compute":1.811,"load_ms":146.4,"mel_ms":18.1,"encode_ms":5779.5,"decode_ms":276.1,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":1060.0,"xrt_compute":10.377,"load_ms":793.8,"mel_ms":19.6,"encode_ms":877.0,"decode_ms":163.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1050.0,"xrt_compute":10.476,"load_ms":450.2,"mel_ms":18.9,"encode_ms":905.6,"decode_ms":125.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1061.6,"xrt_compute":10.361,"load_ms":285.2,"mel_ms":19.6,"encode_ms":928.0,"decode_ms":114.0,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":11870.0,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5890.0,"xrt_compute":1.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15340.0,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7600.0,"xrt_compute":1.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":641.1,"xrt_compute":55.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":288.7,"xrt_compute":38.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":11870.6,"xrt_compute":2.976,"load_ms":147.4,"mel_ms":6.4,"encode_ms":5615.0,"decode_ms":6249.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":11870.9,"xrt_wall":2.976}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5887.0,"xrt_compute":1.869,"load_ms":146.3,"mel_ms":5.7,"encode_ms":5630.3,"decode_ms":251.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":5887.1,"xrt_wall":1.868}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15342.6,"xrt_compute":2.303,"load_ms":206.3,"mel_ms":6.2,"encode_ms":7301.2,"decode_ms":8035.2,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15342.8,"xrt_wall":2.303}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7596.9,"xrt_compute":1.448,"load_ms":212.2,"mel_ms":5.6,"encode_ms":7279.3,"decode_ms":312.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7597.1,"xrt_wall":1.448}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":666.0,"xrt_compute":53.052,"load_ms":145.6,"mel_ms":7.1,"encode_ms":238.3,"decode_ms":420.6,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":666.0,"xrt_wall":53.048}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":288.9,"xrt_compute":38.073,"load_ms":135.9,"mel_ms":5.8,"encode_ms":237.6,"decode_ms":45.5,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":289.0,"xrt_wall":38.068}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":649.5,"xrt_compute":54.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":286.1,"xrt_compute":38.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":32216.9,"xrt_compute":1.097,"load_ms":423.1,"mel_ms":54.5,"encode_ms":15063.5,"decode_ms":17098.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":15744.4,"xrt_compute":0.699,"load_ms":419.9,"mel_ms":46.4,"encode_ms":14898.3,"decode_ms":799.7,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":40179.2,"xrt_compute":0.879,"load_ms":661.3,"mel_ms":62.1,"encode_ms":18767.6,"decode_ms":21349.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":19850.7,"xrt_compute":0.554,"load_ms":666.1,"mel_ms":49.1,"encode_ms":18807.3,"decode_ms":994.3,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":10262.0,"xrt_compute":3.443,"load_ms":361.5,"mel_ms":42.6,"encode_ms":4503.0,"decode_ms":5716.4,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4915.7,"xrt_compute":2.238,"load_ms":348.9,"mel_ms":42.0,"encode_ms":4507.6,"decode_ms":366.2,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":10160.7,"xrt_compute":3.477,"load_ms":555.3,"mel_ms":44.3,"encode_ms":4395.9,"decode_ms":5720.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4773.2,"xrt_compute":2.305,"load_ms":547.3,"mel_ms":39.4,"encode_ms":4365.9,"decode_ms":367.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null} + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":288.3,"xrt_compute":38.161,"load_ms":221.6,"mel_ms":6.0,"encode_ms":233.9,"decode_ms":48.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":288.3,"xrt_wall":38.156}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":32216.9,"xrt_compute":1.097,"load_ms":423.1,"mel_ms":54.5,"encode_ms":15063.5,"decode_ms":17098.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":32217.3,"xrt_wall":1.097}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":15744.4,"xrt_compute":0.699,"load_ms":419.9,"mel_ms":46.4,"encode_ms":14898.3,"decode_ms":799.7,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15744.7,"xrt_wall":0.699}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":40179.2,"xrt_compute":0.879,"load_ms":661.3,"mel_ms":62.1,"encode_ms":18767.6,"decode_ms":21349.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":40179.5,"xrt_wall":0.879}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":19850.7,"xrt_compute":0.554,"load_ms":666.1,"mel_ms":49.1,"encode_ms":18807.3,"decode_ms":994.3,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19851.0,"xrt_wall":0.554}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":10262.0,"xrt_compute":3.443,"load_ms":361.5,"mel_ms":42.6,"encode_ms":4503.0,"decode_ms":5716.4,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":10262.4,"xrt_wall":3.443}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4915.7,"xrt_compute":2.238,"load_ms":348.9,"mel_ms":42.0,"encode_ms":4507.6,"decode_ms":366.2,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4915.9,"xrt_wall":2.238}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":10160.7,"xrt_compute":3.477,"load_ms":555.3,"mel_ms":44.3,"encode_ms":4395.9,"decode_ms":5720.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":10161.1,"xrt_wall":3.477}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4773.2,"xrt_compute":2.305,"load_ms":547.3,"mel_ms":39.4,"encode_ms":4365.9,"decode_ms":367.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4773.4,"xrt_wall":2.304} ], "architecture_pattern": "encoder-decoder-cross-attention", "language_aliases": { diff --git a/catalog/whisper-large-v3.json b/catalog/whisper-large-v3.json index 8cf0d2fb..e22ed264 100644 --- a/catalog/whisper-large-v3.json +++ b/catalog/whisper-large-v3.json @@ -3,7 +3,7 @@ "variant": "whisper-large-v3", "family": "whisper", "display_name": "whisper-large-v3", - "params": 1543507040, + "params": 1543516688, "license": { "spdx": "apache-2.0", "display": "Apache-2.0" @@ -25,9 +25,9 @@ "long_form_strategy": "chunked-unbounded", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":false}, + "translate": {"supported":true,"verified":false,"targets":["en"],"pairs":null}, "lang_detect": {"supported":true,"verified":false}, - "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["segment"]}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -40,214 +40,118 @@ {"quant":"Q4_K_M","filename":"whisper-large-v3-Q4_K_M.gguf","size_bytes":997303008} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":32.43,"ci95":[30.62,34.37],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1498,"del":265,"ins":135},"empty_hyp":0,"utts_over_50pct":29}, - {"dataset":"fleurs","split":"test","language":"af","quant":"Q5_K_M","metric":"wer","err_pct":32.62,"ci95":[30.85,34.45],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1499,"del":264,"ins":146},"empty_hyp":0,"utts_over_50pct":29}, - {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":132.7,"ci95":[128.33,137.71],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6805,"del":1749,"ins":2810},"empty_hyp":0,"utts_over_50pct":516}, - {"dataset":"fleurs","split":"test","language":"am","quant":"Q5_K_M","metric":"wer","err_pct":132.8,"ci95":[128.47,137.23],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7023,"del":1531,"ins":2819},"empty_hyp":1,"utts_over_50pct":516}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":14.92,"ci95":[13.55,16.39],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":883,"del":299,"ins":47},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":15.07,"ci95":[13.7,16.55],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":880,"del":314,"ins":47},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":104.77,"ci95":[104.31,105.27],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":43092,"del":3842,"ins":2300},"empty_hyp":1,"utts_over_50pct":984}, - {"dataset":"fleurs","split":"test","language":"as","quant":"Q5_K_M","metric":"wer","err_pct":104.63,"ci95":[104.16,105.18],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":42743,"del":4196,"ins":2231},"empty_hyp":2,"utts_over_50pct":984}, - {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":21.1,"ci95":[20.13,22.06],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3148,"del":338,"ins":296},"empty_hyp":0,"utts_over_50pct":27}, - {"dataset":"fleurs","split":"test","language":"az","quant":"Q5_K_M","metric":"wer","err_pct":21.38,"ci95":[20.4,22.39],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3174,"del":369,"ins":290},"empty_hyp":0,"utts_over_50pct":33}, - {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":43.78,"ci95":[42.88,44.74],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7979,"del":547,"ins":591},"empty_hyp":0,"utts_over_50pct":271}, - {"dataset":"fleurs","split":"test","language":"be","quant":"Q5_K_M","metric":"wer","err_pct":43.65,"ci95":[42.74,44.61],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7958,"del":558,"ins":575},"empty_hyp":0,"utts_over_50pct":276}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":12.82,"ci95":[12.0,13.63],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1466,"del":195,"ins":156},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q5_K_M","metric":"wer","err_pct":12.88,"ci95":[12.08,13.71],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1485,"del":187,"ins":153},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":55.03,"ci95":[53.68,56.39],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12373,"del":9950,"ins":2315},"empty_hyp":1,"utts_over_50pct":438}, - {"dataset":"fleurs","split":"test","language":"bn","quant":"Q5_K_M","metric":"wer","err_pct":55.59,"ci95":[54.3,56.99],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11992,"del":10793,"ins":2105},"empty_hyp":0,"utts_over_50pct":448}, - {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":13.5,"ci95":[12.8,14.17],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2047,"del":302,"ins":193},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"bs","quant":"Q5_K_M","metric":"wer","err_pct":13.46,"ci95":[12.79,14.13],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2042,"del":303,"ins":190},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":4.97,"ci95":[4.52,5.44],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":868,"del":168,"ins":168},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ca","quant":"Q5_K_M","metric":"wer","err_pct":4.87,"ci95":[4.49,5.27],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":878,"del":132,"ins":171},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":10.5,"ci95":[9.79,11.22],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1170,"del":129,"ins":139},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q5_K_M","metric":"wer","err_pct":10.56,"ci95":[9.85,11.29],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1177,"del":131,"ins":138},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":30.67,"ci95":[29.64,31.68],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6204,"del":929,"ins":904},"empty_hyp":0,"utts_over_50pct":90}, - {"dataset":"fleurs","split":"test","language":"cy","quant":"Q5_K_M","metric":"wer","err_pct":30.87,"ci95":[29.86,31.89],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6222,"del":930,"ins":937},"empty_hyp":0,"utts_over_50pct":92}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":12.48,"ci95":[11.78,13.16],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1937,"del":251,"ins":327},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q5_K_M","metric":"wer","err_pct":12.55,"ci95":[11.88,13.23],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1936,"del":257,"ins":337},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.13,"ci95":[3.74,4.51],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":550,"del":104,"ins":118},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":4.19,"ci95":[3.8,4.58],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":558,"del":106,"ins":120},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":11.53,"ci95":[10.7,12.34],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1528,"del":136,"ins":85},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":11.71,"ci95":[10.91,12.54],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1556,"del":138,"ins":83},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.03,"ci95":[3.59,4.46],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":110,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":4.03,"ci95":[3.59,4.45],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":109,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.06,"ci95":[3.63,4.49],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":406,"del":115,"ins":70},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":4.09,"ci95":[3.65,4.53],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":407,"del":116,"ins":72},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":2.7,"ci95":[2.41,3.01],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":459,"del":99,"ins":71},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":2.71,"ci95":[2.42,3.0],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":460,"del":97,"ins":74},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":18.3,"ci95":[17.41,19.25],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2027,"del":266,"ins":430},"empty_hyp":0,"utts_over_50pct":18}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q5_K_M","metric":"wer","err_pct":18.31,"ci95":[17.37,19.21],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2026,"del":268,"ins":430},"empty_hyp":0,"utts_over_50pct":19}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":30.11,"ci95":[29.13,31.18],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4173,"del":250,"ins":1630},"empty_hyp":0,"utts_over_50pct":80}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q6_K","metric":"wer","err_pct":30.16,"ci95":[29.11,31.22],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4173,"del":248,"ins":1642},"empty_hyp":0,"utts_over_50pct":79}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q5_K_M","metric":"wer","err_pct":30.27,"ci95":[29.21,31.46],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4181,"del":226,"ins":1678},"empty_hyp":0,"utts_over_50pct":79}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q4_K_M","metric":"wer","err_pct":30.46,"ci95":[29.36,31.71],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4195,"del":222,"ins":1706},"empty_hyp":0,"utts_over_50pct":79}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":7.73,"ci95":[7.12,8.32],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":904,"del":125,"ins":114},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q5_K_M","metric":"wer","err_pct":7.85,"ci95":[7.24,8.47],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":925,"del":125,"ins":112},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":11.82,"ci95":[11.17,12.51],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2237,"del":507,"ins":379},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q6_K","metric":"wer","err_pct":11.66,"ci95":[11.04,12.31],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2225,"del":502,"ins":354},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q5_K_M","metric":"wer","err_pct":11.73,"ci95":[11.12,12.39],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2253,"del":502,"ins":345},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q4_K_M","metric":"wer","err_pct":11.71,"ci95":[11.09,12.36],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2267,"del":470,"ins":357},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.39,"ci95":[4.88,5.94],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":732,"del":148,"ins":90},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":5.37,"ci95":[4.87,5.9],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":728,"del":139,"ins":99},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":13.27,"ci95":[12.74,13.87],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2458,"del":248,"ins":238},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"gl","quant":"Q5_K_M","metric":"wer","err_pct":13.36,"ci95":[12.82,13.99],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2489,"del":250,"ins":224},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":66.38,"ci95":[64.99,67.88],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11626,"del":16597,"ins":1640},"empty_hyp":4,"utts_over_50pct":650}, - {"dataset":"fleurs","split":"test","language":"gu","quant":"Q5_K_M","metric":"wer","err_pct":66.87,"ci95":[65.41,68.28],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11551,"del":16715,"ins":1817},"empty_hyp":12,"utts_over_50pct":659}, - {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":85.65,"ci95":[84.44,86.99],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10593,"del":1944,"ins":1111},"empty_hyp":0,"utts_over_50pct":610}, - {"dataset":"fleurs","split":"test","language":"ha","quant":"Q5_K_M","metric":"wer","err_pct":85.62,"ci95":[84.39,86.88],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10615,"del":1926,"ins":1101},"empty_hyp":0,"utts_over_50pct":611}, - {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":26.73,"ci95":[25.1,28.27],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2795,"del":592,"ins":313},"empty_hyp":0,"utts_over_50pct":103}, - {"dataset":"fleurs","split":"test","language":"he","quant":"Q5_K_M","metric":"wer","err_pct":26.74,"ci95":[25.08,28.34],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2825,"del":565,"ins":312},"empty_hyp":0,"utts_over_50pct":98}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":17.06,"ci95":[15.97,18.29],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1908,"del":924,"ins":368},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q6_K","metric":"wer","err_pct":17.31,"ci95":[16.28,18.56],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1922,"del":954,"ins":370},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":17.21,"ci95":[16.16,18.4],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1917,"del":935,"ins":375},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q4_K_M","metric":"wer","err_pct":17.18,"ci95":[16.12,18.37],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1924,"del":936,"ins":362},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":10.94,"ci95":[10.34,11.55],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1586,"del":178,"ins":178},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q5_K_M","metric":"wer","err_pct":11.0,"ci95":[10.4,11.61],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1598,"del":178,"ins":176},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":13.4,"ci95":[12.72,14.14],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1820,"del":190,"ins":279},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q5_K_M","metric":"wer","err_pct":13.59,"ci95":[12.9,14.31],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1841,"del":199,"ins":281},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":43.64,"ci95":[42.4,44.86],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6202,"del":1153,"ins":570},"empty_hyp":0,"utts_over_50pct":284}, - {"dataset":"fleurs","split":"test","language":"hy","quant":"Q5_K_M","metric":"wer","err_pct":43.38,"ci95":[42.15,44.54],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6218,"del":1123,"ins":537},"empty_hyp":0,"utts_over_50pct":280}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":6.08,"ci95":[5.48,6.67],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":83,"ins":121},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q5_K_M","metric":"wer","err_pct":6.14,"ci95":[5.56,6.73],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":629,"del":90,"ins":113},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":31.85,"ci95":[27.47,36.75],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":272,"del":23,"ins":34},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"is","quant":"Q5_K_M","metric":"wer","err_pct":31.95,"ci95":[27.48,36.73],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":275,"del":22,"ins":33},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.54,"ci95":[2.16,2.98],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":374,"del":113,"ins":52},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q6_K","metric":"wer","err_pct":2.49,"ci95":[2.16,2.85],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":380,"del":92,"ins":57},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":2.51,"ci95":[2.14,2.91],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":382,"del":99,"ins":53},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q4_K_M","metric":"wer","err_pct":2.53,"ci95":[2.14,2.94],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":383,"del":105,"ins":50},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":4.81,"ci95":[4.25,5.61],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1057,"del":360,"ins":155},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":4.81,"ci95":[4.22,5.6],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1037,"del":383,"ins":149},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":93.97,"ci95":[93.03,94.94],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10347,"del":4748,"ins":1011},"empty_hyp":0,"utts_over_50pct":964}, - {"dataset":"fleurs","split":"test","language":"ka","quant":"Q5_K_M","metric":"wer","err_pct":94.83,"ci95":[93.92,95.81],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10532,"del":4706,"ins":1015},"empty_hyp":0,"utts_over_50pct":962}, - {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":33.07,"ci95":[32.07,34.13],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4150,"del":391,"ins":424},"empty_hyp":0,"utts_over_50pct":95}, - {"dataset":"fleurs","split":"test","language":"kk","quant":"Q5_K_M","metric":"wer","err_pct":33.18,"ci95":[32.15,34.19],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4137,"del":423,"ins":422},"empty_hyp":0,"utts_over_50pct":93}, - {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":101.09,"ci95":[99.27,102.93],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39194,"del":14305,"ins":10904},"empty_hyp":0,"utts_over_50pct":771}, - {"dataset":"fleurs","split":"test","language":"km","quant":"Q5_K_M","metric":"cer","err_pct":101.57,"ci95":[99.75,103.45],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39554,"del":14055,"ins":11100},"empty_hyp":1,"utts_over_50pct":771}, - {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":31.99,"ci95":[30.69,33.47],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5727,"del":6119,"ins":1634},"empty_hyp":1,"utts_over_50pct":90}, - {"dataset":"fleurs","split":"test","language":"kn","quant":"Q5_K_M","metric":"wer","err_pct":32.15,"ci95":[30.81,33.63],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5708,"del":6193,"ins":1645},"empty_hyp":1,"utts_over_50pct":86}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":4.89,"ci95":[3.93,5.9],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":302,"del":526,"ins":37},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q6_K","metric":"cer","err_pct":4.86,"ci95":[3.9,5.87],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":294,"del":529,"ins":37},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":4.84,"ci95":[3.86,5.86],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":294,"del":527,"ins":35},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q4_K_M","metric":"cer","err_pct":4.86,"ci95":[3.9,5.86],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":296,"del":531,"ins":33},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":85.67,"ci95":[84.45,86.95],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15504,"del":1429,"ins":1024},"empty_hyp":0,"utts_over_50pct":921}, - {"dataset":"fleurs","split":"test","language":"lb","quant":"Q5_K_M","metric":"wer","err_pct":84.88,"ci95":[84.02,85.74],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15392,"del":1651,"ins":748},"empty_hyp":0,"utts_over_50pct":922}, - {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":72.22,"ci95":[70.26,74.29],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5560,"del":429,"ins":1557},"empty_hyp":0,"utts_over_50pct":408}, - {"dataset":"fleurs","split":"test","language":"ln","quant":"Q5_K_M","metric":"wer","err_pct":72.13,"ci95":[70.08,74.19],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5558,"del":458,"ins":1521},"empty_hyp":0,"utts_over_50pct":404}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":100.28,"ci95":[99.24,101.49],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33708,"del":2361,"ins":1462},"empty_hyp":0,"utts_over_50pct":405}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q5_K_M","metric":"cer","err_pct":100.4,"ci95":[99.04,102.25],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33209,"del":2839,"ins":1529},"empty_hyp":1,"utts_over_50pct":405}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":24.55,"ci95":[23.68,25.41],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3793,"del":201,"ins":212},"empty_hyp":0,"utts_over_50pct":61}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q5_K_M","metric":"wer","err_pct":24.49,"ci95":[23.61,25.38],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3784,"del":207,"ins":205},"empty_hyp":0,"utts_over_50pct":59}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":19.21,"ci95":[18.35,20.07],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2560,"del":159,"ins":242},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q5_K_M","metric":"wer","err_pct":19.38,"ci95":[18.5,20.22],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2582,"del":159,"ins":247},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":38.78,"ci95":[37.57,40.01],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8945,"del":1195,"ins":1889},"empty_hyp":0,"utts_over_50pct":255}, - {"dataset":"fleurs","split":"test","language":"mi","quant":"Q5_K_M","metric":"wer","err_pct":38.9,"ci95":[37.69,40.08],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9011,"del":1170,"ins":1888},"empty_hyp":0,"utts_over_50pct":259}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":15.09,"ci95":[14.29,15.89],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2541,"del":234,"ins":407},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q5_K_M","metric":"wer","err_pct":15.21,"ci95":[14.41,16.04],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2562,"del":239,"ins":406},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":100.17,"ci95":[99.88,100.48],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":40925,"del":13002,"ins":404},"empty_hyp":0,"utts_over_50pct":957}, - {"dataset":"fleurs","split":"test","language":"ml","quant":"Q5_K_M","metric":"wer","err_pct":100.18,"ci95":[99.93,100.45],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39940,"del":14068,"ins":326},"empty_hyp":0,"utts_over_50pct":957}, - {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":85.6,"ci95":[84.78,86.45],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13800,"del":979,"ins":1085},"empty_hyp":0,"utts_over_50pct":946}, - {"dataset":"fleurs","split":"test","language":"mn","quant":"Q5_K_M","metric":"wer","err_pct":86.06,"ci95":[85.22,86.87],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13842,"del":944,"ins":1163},"empty_hyp":0,"utts_over_50pct":947}, - {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":34.3,"ci95":[33.52,35.13],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11097,"del":3989,"ins":2516},"empty_hyp":0,"utts_over_50pct":110}, - {"dataset":"fleurs","split":"test","language":"mr","quant":"Q5_K_M","metric":"wer","err_pct":34.35,"ci95":[33.57,35.23],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11071,"del":4026,"ins":2531},"empty_hyp":0,"utts_over_50pct":118}, - {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":7.59,"ci95":[7.04,8.19],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":937,"del":96,"ins":86},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ms","quant":"Q5_K_M","metric":"wer","err_pct":7.65,"ci95":[7.07,8.23],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":940,"del":98,"ins":90},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":68.79,"ci95":[67.66,70.06],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12676,"del":1117,"ins":1501},"empty_hyp":0,"utts_over_50pct":801}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q5_K_M","metric":"wer","err_pct":68.72,"ci95":[67.76,69.67],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12764,"del":1157,"ins":1356},"empty_hyp":0,"utts_over_50pct":813}, - {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":143.39,"ci95":[138.96,148.17],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":44509,"del":13259,"ins":26105},"empty_hyp":15,"utts_over_50pct":880}, - {"dataset":"fleurs","split":"test","language":"my","quant":"Q5_K_M","metric":"cer","err_pct":141.43,"ci95":[137.29,145.72],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":43699,"del":13877,"ins":25148},"empty_hyp":14,"utts_over_50pct":880}, - {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":8.19,"ci95":[7.34,9.09],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":492,"del":67,"ins":65},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"nb","quant":"Q5_K_M","metric":"wer","err_pct":8.12,"ci95":[7.29,8.98],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":490,"del":68,"ins":61},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":40.44,"ci95":[39.64,41.28],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8605,"del":2155,"ins":2725},"empty_hyp":0,"utts_over_50pct":144}, - {"dataset":"fleurs","split":"test","language":"ne","quant":"Q5_K_M","metric":"wer","err_pct":40.27,"ci95":[39.39,41.17],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8602,"del":2137,"ins":2688},"empty_hyp":0,"utts_over_50pct":143}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":5.42,"ci95":[4.81,6.07],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":327,"del":63,"ins":65},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q5_K_M","metric":"wer","err_pct":5.45,"ci95":[4.84,6.14],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":332,"del":63,"ins":63},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":69.15,"ci95":[68.2,70.07],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15986,"del":1325,"ins":945},"empty_hyp":0,"utts_over_50pct":872}, - {"dataset":"fleurs","split":"test","language":"oc","quant":"Q5_K_M","metric":"wer","err_pct":69.59,"ci95":[68.66,70.56],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16014,"del":1428,"ins":931},"empty_hyp":0,"utts_over_50pct":883}, - {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":57.39,"ci95":[55.51,59.08],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7879,"del":6045,"ins":713},"empty_hyp":2,"utts_over_50pct":303}, - {"dataset":"fleurs","split":"test","language":"pa","quant":"Q5_K_M","metric":"wer","err_pct":59.86,"ci95":[57.99,61.74],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7763,"del":6821,"ins":684},"empty_hyp":2,"utts_over_50pct":319}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":4.69,"ci95":[4.15,5.26],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":526,"del":95,"ins":54},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q5_K_M","metric":"wer","err_pct":4.72,"ci95":[4.22,5.31],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":533,"del":92,"ins":54},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":89.14,"ci95":[88.29,90.04],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10194,"del":926,"ins":661},"empty_hyp":0,"utts_over_50pct":512}, - {"dataset":"fleurs","split":"test","language":"ps","quant":"Q5_K_M","metric":"wer","err_pct":89.29,"ci95":[88.39,90.24],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10214,"del":917,"ins":670},"empty_hyp":0,"utts_over_50pct":512}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":3.88,"ci95":[3.45,4.37],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":580,"del":99,"ins":154},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q5_K_M","metric":"wer","err_pct":3.85,"ci95":[3.42,4.34],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":571,"del":99,"ins":157},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":9.2,"ci95":[8.56,9.85],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1532,"del":223,"ins":158},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q5_K_M","metric":"wer","err_pct":9.26,"ci95":[8.61,9.92],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1539,"del":223,"ins":165},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":4.96,"ci95":[4.51,5.41],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":633,"del":72,"ins":44},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":4.9,"ci95":[4.48,5.36],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":625,"del":71,"ins":44},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":184.2,"ci95":[182.18,186.34],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":23422,"del":132,"ins":19988},"empty_hyp":0,"utts_over_50pct":980}, - {"dataset":"fleurs","split":"test","language":"sd","quant":"Q5_K_M","metric":"wer","err_pct":183.27,"ci95":[181.16,185.44],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":23312,"del":244,"ins":19765},"empty_hyp":0,"utts_over_50pct":980}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":9.25,"ci95":[8.57,10.01],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1168,"del":146,"ins":96},"empty_hyp":1,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q5_K_M","metric":"wer","err_pct":9.22,"ci95":[8.54,9.98],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1161,"del":149,"ins":96},"empty_hyp":1,"utts_over_50pct":7}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":19.15,"ci95":[18.25,20.02],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2549,"del":229,"ins":384},"empty_hyp":0,"utts_over_50pct":21}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q5_K_M","metric":"wer","err_pct":19.33,"ci95":[18.46,20.22],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2575,"del":233,"ins":385},"empty_hyp":0,"utts_over_50pct":22}, - {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":115.38,"ci95":[113.66,117.14],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13054,"del":159,"ins":5247},"empty_hyp":0,"utts_over_50pct":924}, - {"dataset":"fleurs","split":"test","language":"sn","quant":"Q5_K_M","metric":"wer","err_pct":114.88,"ci95":[113.3,116.65],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13051,"del":187,"ins":5143},"empty_hyp":0,"utts_over_50pct":924}, - {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":91.1,"ci95":[90.11,92.16],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17706,"del":1512,"ins":2815},"empty_hyp":1,"utts_over_50pct":1015}, - {"dataset":"fleurs","split":"test","language":"so","quant":"Q5_K_M","metric":"wer","err_pct":91.44,"ci95":[90.44,92.47],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17723,"del":1547,"ins":2844},"empty_hyp":1,"utts_over_50pct":1018}, - {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":28.49,"ci95":[25.44,31.46],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3680,"del":149,"ins":118},"empty_hyp":0,"utts_over_50pct":127}, - {"dataset":"fleurs","split":"test","language":"sr","quant":"Q5_K_M","metric":"wer","err_pct":27.55,"ci95":[24.55,30.6],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3557,"del":147,"ins":112},"empty_hyp":0,"utts_over_50pct":119}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":7.8,"ci95":[7.22,8.37],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":930,"del":155,"ins":115},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q5_K_M","metric":"wer","err_pct":8.01,"ci95":[7.38,8.68],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":954,"del":152,"ins":126},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":34.57,"ci95":[33.19,35.91],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2697,"del":301,"ins":458},"empty_hyp":0,"utts_over_50pct":72}, - {"dataset":"fleurs","split":"test","language":"sw","quant":"Q5_K_M","metric":"wer","err_pct":34.85,"ci95":[33.54,36.14],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2721,"del":309,"ins":454},"empty_hyp":0,"utts_over_50pct":76}, - {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":20.04,"ci95":[18.55,21.85],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3722,"del":1327,"ins":1697},"empty_hyp":0,"utts_over_50pct":16}, - {"dataset":"fleurs","split":"test","language":"ta","quant":"Q5_K_M","metric":"wer","err_pct":19.92,"ci95":[18.42,21.73],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3739,"del":1351,"ins":1616},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":65.84,"ci95":[63.45,68.22],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7074,"del":6984,"ins":826},"empty_hyp":7,"utts_over_50pct":278}, - {"dataset":"fleurs","split":"test","language":"te","quant":"Q5_K_M","metric":"wer","err_pct":67.5,"ci95":[64.84,69.88],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7061,"del":7301,"ins":898},"empty_hyp":10,"utts_over_50pct":294}, - {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":80.86,"ci95":[78.75,83.24],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8522,"del":336,"ins":1681},"empty_hyp":0,"utts_over_50pct":561}, - {"dataset":"fleurs","split":"test","language":"tg","quant":"Q5_K_M","metric":"wer","err_pct":81.19,"ci95":[79.09,83.61],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8516,"del":345,"ins":1721},"empty_hyp":0,"utts_over_50pct":567}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":8.78,"ci95":[8.1,9.55],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3851,"del":2090,"ins":2618},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q5_K_M","metric":"cer","err_pct":8.88,"ci95":[8.17,9.65],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3889,"del":2167,"ins":2603},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":6.51,"ci95":[5.9,7.13],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":616,"del":129,"ins":120},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q6_K","metric":"wer","err_pct":6.48,"ci95":[5.88,7.11],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":612,"del":128,"ins":122},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q5_K_M","metric":"wer","err_pct":6.55,"ci95":[5.95,7.19],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":130,"ins":121},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q4_K_M","metric":"wer","err_pct":6.61,"ci95":[6.02,7.25],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":622,"del":133,"ins":124},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":6.28,"ci95":[5.74,6.83],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":722,"del":95,"ins":85},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q5_K_M","metric":"wer","err_pct":6.34,"ci95":[5.81,6.88],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":729,"del":95,"ins":87},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":21.75,"ci95":[20.42,23.08],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1446,"del":169,"ins":233},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"ur","quant":"Q5_K_M","metric":"wer","err_pct":21.72,"ci95":[20.4,23.04],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1444,"del":168,"ins":234},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":86.28,"ci95":[85.19,87.37],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12025,"del":972,"ins":780},"empty_hyp":0,"utts_over_50pct":847}, - {"dataset":"fleurs","split":"test","language":"uz","quant":"Q5_K_M","metric":"wer","err_pct":86.03,"ci95":[84.98,87.22],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12000,"del":1003,"ins":735},"empty_hyp":1,"utts_over_50pct":848}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":8.74,"ci95":[8.12,9.46],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1771,"del":287,"ins":215},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q6_K","metric":"wer","err_pct":8.74,"ci95":[8.13,9.41],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1770,"del":287,"ins":216},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q5_K_M","metric":"wer","err_pct":8.85,"ci95":[8.24,9.56],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1795,"del":283,"ins":226},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q4_K_M","metric":"wer","err_pct":8.93,"ci95":[8.29,9.66],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1800,"del":303,"ins":220},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":97.26,"ci95":[96.45,98.11],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17488,"del":2843,"ins":1221},"empty_hyp":0,"utts_over_50pct":827}, - {"dataset":"fleurs","split":"test","language":"yo","quant":"Q5_K_M","metric":"wer","err_pct":97.49,"ci95":[96.64,98.39],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17436,"del":2892,"ins":1274},"empty_hyp":0,"utts_over_50pct":827}, - {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":22.06,"ci95":[20.16,24.13],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3416,"del":1614,"ins":1366},"empty_hyp":0,"utts_over_50pct":77}, - {"dataset":"fleurs","split":"test","language":"yue","quant":"Q5_K_M","metric":"cer","err_pct":22.06,"ci95":[20.15,24.13],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3301,"del":1749,"ins":1347},"empty_hyp":0,"utts_over_50pct":71}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":7.98,"ci95":[7.12,8.82],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1179,"del":1484,"ins":181},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":7.84,"ci95":[7.0,8.67],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1135,"del":1481,"ins":178},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.81,"ci95":[1.66,1.96],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":702,"del":144,"ins":116},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.82,"ci95":[1.67,1.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":704,"del":146,"ins":117},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.83,"ci95":[1.68,1.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":707,"del":145,"ins":117},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.84,"ci95":[1.7,2.0],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":709,"del":150,"ins":119},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.86,"ci95":[1.71,2.01],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":714,"del":157,"ins":117},"empty_hyp":0,"utts_over_50pct":6} + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":32.43,"ci95":[30.62,34.37],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1498,"del":265,"ins":135},"empty_hyp":0,"utts_over_50pct":29,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":132.7,"ci95":[128.33,137.71],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6805,"del":1749,"ins":2810},"empty_hyp":0,"utts_over_50pct":516,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":14.92,"ci95":[13.55,16.39],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":883,"del":299,"ins":47},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":104.77,"ci95":[104.31,105.27],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":43092,"del":3842,"ins":2300},"empty_hyp":1,"utts_over_50pct":984,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":21.1,"ci95":[20.13,22.06],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3148,"del":338,"ins":296},"empty_hyp":0,"utts_over_50pct":27,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":43.78,"ci95":[42.88,44.74],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7979,"del":547,"ins":591},"empty_hyp":0,"utts_over_50pct":271,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":12.82,"ci95":[12.0,13.63],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1466,"del":195,"ins":156},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":55.03,"ci95":[53.68,56.39],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12373,"del":9950,"ins":2315},"empty_hyp":1,"utts_over_50pct":438,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":13.5,"ci95":[12.8,14.17],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2047,"del":302,"ins":193},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":4.97,"ci95":[4.52,5.44],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":868,"del":168,"ins":168},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":10.5,"ci95":[9.79,11.22],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1170,"del":129,"ins":139},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":30.67,"ci95":[29.64,31.68],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6204,"del":929,"ins":904},"empty_hyp":0,"utts_over_50pct":90,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":12.48,"ci95":[11.78,13.16],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1937,"del":251,"ins":327},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":4.13,"ci95":[3.74,4.51],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":550,"del":104,"ins":118},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":11.53,"ci95":[10.7,12.34],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1528,"del":136,"ins":85},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.03,"ci95":[3.59,4.46],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":110,"ins":72},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":2.7,"ci95":[2.41,3.01],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":459,"del":99,"ins":71},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":18.3,"ci95":[17.41,19.25],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2027,"del":266,"ins":430},"empty_hyp":0,"utts_over_50pct":18,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":30.11,"ci95":[29.13,31.18],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4173,"del":250,"ins":1630},"empty_hyp":0,"utts_over_50pct":80,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":7.73,"ci95":[7.12,8.32],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":904,"del":125,"ins":114},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":11.82,"ci95":[11.17,12.51],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2237,"del":507,"ins":379},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":5.39,"ci95":[4.88,5.94],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":732,"del":148,"ins":90},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":13.27,"ci95":[12.74,13.87],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2458,"del":248,"ins":238},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":66.38,"ci95":[64.99,67.88],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11626,"del":16597,"ins":1640},"empty_hyp":4,"utts_over_50pct":650,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":85.65,"ci95":[84.44,86.99],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10593,"del":1944,"ins":1111},"empty_hyp":0,"utts_over_50pct":610,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":26.73,"ci95":[25.1,28.27],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2795,"del":592,"ins":313},"empty_hyp":0,"utts_over_50pct":103,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":17.06,"ci95":[15.97,18.29],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1908,"del":924,"ins":368},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":10.94,"ci95":[10.34,11.55],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1586,"del":178,"ins":178},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":13.4,"ci95":[12.72,14.14],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1820,"del":190,"ins":279},"empty_hyp":0,"utts_over_50pct":12,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":43.64,"ci95":[42.4,44.86],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6202,"del":1153,"ins":570},"empty_hyp":0,"utts_over_50pct":284,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":6.08,"ci95":[5.48,6.67],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":620,"del":83,"ins":121},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":31.85,"ci95":[27.47,36.75],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":272,"del":23,"ins":34},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":2.54,"ci95":[2.16,2.98],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":374,"del":113,"ins":52},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":4.81,"ci95":[4.25,5.61],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1057,"del":360,"ins":155},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":93.97,"ci95":[93.03,94.94],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10347,"del":4748,"ins":1011},"empty_hyp":0,"utts_over_50pct":964,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":33.07,"ci95":[32.07,34.13],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4150,"del":391,"ins":424},"empty_hyp":0,"utts_over_50pct":95,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":31.99,"ci95":[30.69,33.47],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5727,"del":6119,"ins":1634},"empty_hyp":1,"utts_over_50pct":90,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":4.89,"ci95":[3.93,5.9],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":302,"del":526,"ins":37},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":85.67,"ci95":[84.45,86.95],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15504,"del":1429,"ins":1024},"empty_hyp":0,"utts_over_50pct":921,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":72.22,"ci95":[70.26,74.29],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5560,"del":429,"ins":1557},"empty_hyp":0,"utts_over_50pct":408,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":24.55,"ci95":[23.68,25.41],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3793,"del":201,"ins":212},"empty_hyp":0,"utts_over_50pct":61,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":19.21,"ci95":[18.35,20.07],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2560,"del":159,"ins":242},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":38.78,"ci95":[37.57,40.01],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8945,"del":1195,"ins":1889},"empty_hyp":0,"utts_over_50pct":255,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":15.09,"ci95":[14.29,15.89],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2541,"del":234,"ins":407},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":100.17,"ci95":[99.88,100.48],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":40925,"del":13002,"ins":404},"empty_hyp":0,"utts_over_50pct":957,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":85.6,"ci95":[84.78,86.45],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13800,"del":979,"ins":1085},"empty_hyp":0,"utts_over_50pct":946,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":34.3,"ci95":[33.52,35.13],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11097,"del":3989,"ins":2516},"empty_hyp":0,"utts_over_50pct":110,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":7.59,"ci95":[7.04,8.19],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":937,"del":96,"ins":86},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":68.79,"ci95":[67.66,70.06],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12676,"del":1117,"ins":1501},"empty_hyp":0,"utts_over_50pct":801,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":8.19,"ci95":[7.34,9.09],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":492,"del":67,"ins":65},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":40.44,"ci95":[39.64,41.28],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8605,"del":2155,"ins":2725},"empty_hyp":0,"utts_over_50pct":144,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":5.42,"ci95":[4.81,6.07],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":327,"del":63,"ins":65},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":69.15,"ci95":[68.2,70.07],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15986,"del":1325,"ins":945},"empty_hyp":0,"utts_over_50pct":872,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":57.39,"ci95":[55.51,59.08],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7879,"del":6045,"ins":713},"empty_hyp":2,"utts_over_50pct":303,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":4.69,"ci95":[4.15,5.26],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":526,"del":95,"ins":54},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":89.14,"ci95":[88.29,90.04],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10194,"del":926,"ins":661},"empty_hyp":0,"utts_over_50pct":512,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":3.88,"ci95":[3.45,4.37],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":580,"del":99,"ins":154},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":9.2,"ci95":[8.56,9.85],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1532,"del":223,"ins":158},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":4.96,"ci95":[4.51,5.41],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":633,"del":72,"ins":44},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":184.2,"ci95":[182.18,186.34],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":23422,"del":132,"ins":19988},"empty_hyp":0,"utts_over_50pct":980,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":9.25,"ci95":[8.57,10.01],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1168,"del":146,"ins":96},"empty_hyp":1,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":19.15,"ci95":[18.25,20.02],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2549,"del":229,"ins":384},"empty_hyp":0,"utts_over_50pct":21,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":115.38,"ci95":[113.66,117.14],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13054,"del":159,"ins":5247},"empty_hyp":0,"utts_over_50pct":924,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":91.1,"ci95":[90.11,92.16],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17706,"del":1512,"ins":2815},"empty_hyp":1,"utts_over_50pct":1015,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":28.49,"ci95":[25.44,31.46],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3680,"del":149,"ins":118},"empty_hyp":0,"utts_over_50pct":127,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":7.8,"ci95":[7.22,8.37],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":930,"del":155,"ins":115},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":34.57,"ci95":[33.19,35.91],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2697,"del":301,"ins":458},"empty_hyp":0,"utts_over_50pct":72,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":20.04,"ci95":[18.55,21.85],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3722,"del":1327,"ins":1697},"empty_hyp":0,"utts_over_50pct":16,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":65.84,"ci95":[63.45,68.22],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7074,"del":6984,"ins":826},"empty_hyp":7,"utts_over_50pct":278,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":80.86,"ci95":[78.75,83.24],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8522,"del":336,"ins":1681},"empty_hyp":0,"utts_over_50pct":561,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":8.78,"ci95":[8.1,9.55],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3851,"del":2090,"ins":2618},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":6.51,"ci95":[5.9,7.13],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":616,"del":129,"ins":120},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":6.28,"ci95":[5.74,6.83],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":722,"del":95,"ins":85},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":21.75,"ci95":[20.42,23.08],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1446,"del":169,"ins":233},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":86.28,"ci95":[85.19,87.37],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12025,"del":972,"ins":780},"empty_hyp":0,"utts_over_50pct":847,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":8.74,"ci95":[8.12,9.46],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1771,"del":287,"ins":215},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":97.26,"ci95":[96.45,98.11],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17488,"del":2843,"ins":1221},"empty_hyp":0,"utts_over_50pct":827,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"yue","quant":"Q8_0","metric":"cer","err_pct":22.06,"ci95":[20.16,24.13],"n_utts":819,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3416,"del":1614,"ins":1366},"empty_hyp":0,"utts_over_50pct":77,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":7.98,"ci95":[7.12,8.82],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1179,"del":1484,"ins":181},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":1.81,"ci95":[1.66,1.96],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":702,"del":144,"ins":116},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":1.82,"ci95":[1.67,1.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":704,"del":146,"ins":117},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":1.83,"ci95":[1.68,1.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":707,"del":145,"ins":117},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":1.84,"ci95":[1.7,2.0],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":709,"del":150,"ins":119},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":1.86,"ci95":[1.71,2.01],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":714,"del":157,"ins":117},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":101.09,"ci95":[99.27,102.93],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39194,"del":14305,"ins":10904},"empty_hyp":0,"utts_over_50pct":771,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":100.28,"ci95":[99.24,101.49],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33708,"del":2361,"ins":1462},"empty_hyp":0,"utts_over_50pct":405,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":143.39,"ci95":[138.96,148.17],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":44509,"del":13259,"ins":26105},"empty_hyp":15,"utts_over_50pct":880,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":11300.0,"xrt_compute":0.973,"load_ms":667.5,"mel_ms":19.8,"encode_ms":8189.5,"decode_ms":3090.8,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7438.7,"xrt_compute":1.479,"load_ms":382.5,"mel_ms":19.0,"encode_ms":5442.6,"decode_ms":1977.1,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7811.4,"xrt_compute":1.408,"load_ms":313.5,"mel_ms":18.6,"encode_ms":5786.4,"decode_ms":2006.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":1875.3,"xrt_compute":5.866,"load_ms":1447.0,"mel_ms":19.5,"encode_ms":877.4,"decode_ms":978.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1684.8,"xrt_compute":6.529,"load_ms":797.7,"mel_ms":19.1,"encode_ms":906.3,"decode_ms":759.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1633.8,"xrt_compute":6.733,"load_ms":503.2,"mel_ms":19.6,"encode_ms":927.5,"decode_ms":686.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15452.3,"xrt_compute":2.287,"load_ms":223.3,"mel_ms":6.5,"encode_ms":5614.1,"decode_ms":9831.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15452.5,"xrt_wall":2.286}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7484.3,"xrt_compute":1.47,"load_ms":233.2,"mel_ms":5.4,"encode_ms":5610.1,"decode_ms":1868.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7484.4,"xrt_wall":1.47}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":19861.9,"xrt_compute":1.779,"load_ms":342.4,"mel_ms":5.7,"encode_ms":7273.3,"decode_ms":12582.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19862.2,"xrt_wall":1.779}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9679.5,"xrt_compute":1.136,"load_ms":341.5,"mel_ms":5.6,"encode_ms":7265.5,"decode_ms":2408.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9679.6,"xrt_wall":1.136}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":511.9,"xrt_compute":21.489,"load_ms":228.4,"mel_ms":5.9,"encode_ms":239.5,"decode_ms":266.5,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":511.9,"xrt_wall":21.488}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":516.9,"xrt_compute":21.282,"load_ms":364.2,"mel_ms":5.9,"encode_ms":233.1,"decode_ms":277.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":516.9,"xrt_wall":21.281}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":43175.4,"xrt_compute":0.818,"load_ms":684.6,"mel_ms":52.0,"encode_ms":14572.9,"decode_ms":28550.5,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":43175.8,"xrt_wall":0.818}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6398.7,"xrt_compute":1.719,"load_ms":994.0,"mel_ms":42.2,"encode_ms":4198.3,"decode_ms":2158.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6398.9,"xrt_wall":1.719} ] } diff --git a/catalog/whisper-large.json b/catalog/whisper-large.json index 28e78b9f..1b77d93b 100644 --- a/catalog/whisper-large.json +++ b/catalog/whisper-large.json @@ -20,14 +20,14 @@ "my", "ne", "nl", "nn", "no", "oc", "pa", "pl", "ps", "pt", "ro", "ru", "sa", "sd", "si", "sk", "sl", "sn", "so", "sq", "sr", "su", "sv", "sw", "ta", "te", "tg", "th", "tk", "tl", "tr", "tt", "uk", "ur", "uz", "vi", - "yi", "yo", "yue", "zh" + "yi", "yo", "zh" ], "long_form_strategy": "chunked-unbounded", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":false}, + "translate": {"supported":true,"verified":false,"targets":["en"],"pairs":null}, "lang_detect": {"supported":true,"verified":false}, - "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["segment"]}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -41,128 +41,82 @@ {"quant":"Q4_K_M","filename":"whisper-large-Q4_K_M.gguf","size_bytes":996526048} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":44.92,"ci95":[42.61,47.28],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2113,"del":306,"ins":210},"empty_hyp":1,"utts_over_50pct":93}, - {"dataset":"fleurs","split":"test","language":"af","quant":"Q5_K_M","metric":"wer","err_pct":45.45,"ci95":[43.11,47.85],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2111,"del":321,"ins":228},"empty_hyp":1,"utts_over_50pct":96}, - {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":133.86,"ci95":[128.35,140.33],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6600,"del":1957,"ins":2907},"empty_hyp":5,"utts_over_50pct":516}, - {"dataset":"fleurs","split":"test","language":"am","quant":"Q5_K_M","metric":"wer","err_pct":135.57,"ci95":[129.81,141.88],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6091,"del":2467,"ins":3052},"empty_hyp":6,"utts_over_50pct":516}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":19.47,"ci95":[18.01,21.12],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1198,"del":329,"ins":77},"empty_hyp":0,"utts_over_50pct":18}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":19.42,"ci95":[17.9,21.14],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1183,"del":341,"ins":76},"empty_hyp":0,"utts_over_50pct":16}, - {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":105.09,"ci95":[104.38,106.0],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33038,"del":13910,"ins":2436},"empty_hyp":0,"utts_over_50pct":984}, - {"dataset":"fleurs","split":"test","language":"as","quant":"Q5_K_M","metric":"wer","err_pct":104.44,"ci95":[103.85,105.07],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":31689,"del":15264,"ins":2124},"empty_hyp":1,"utts_over_50pct":984}, - {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":30.38,"ci95":[29.46,31.21],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4687,"del":436,"ins":322},"empty_hyp":0,"utts_over_50pct":72}, - {"dataset":"fleurs","split":"test","language":"az","quant":"Q5_K_M","metric":"wer","err_pct":30.33,"ci95":[29.43,31.18],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4672,"del":445,"ins":319},"empty_hyp":0,"utts_over_50pct":77}, - {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":58.26,"ci95":[57.26,59.33],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10751,"del":652,"ins":731},"empty_hyp":0,"utts_over_50pct":650}, - {"dataset":"fleurs","split":"test","language":"be","quant":"Q5_K_M","metric":"wer","err_pct":58.16,"ci95":[57.21,59.08],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10777,"del":668,"ins":667},"empty_hyp":0,"utts_over_50pct":651}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":19.89,"ci95":[18.96,20.85],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2307,"del":286,"ins":226},"empty_hyp":0,"utts_over_50pct":17}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q5_K_M","metric":"wer","err_pct":20.2,"ci95":[19.27,21.17],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2343,"del":290,"ins":229},"empty_hyp":0,"utts_over_50pct":20}, - {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":105.08,"ci95":[104.55,105.69],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39224,"del":5467,"ins":2355},"empty_hyp":0,"utts_over_50pct":920}, - {"dataset":"fleurs","split":"test","language":"bn","quant":"Q5_K_M","metric":"wer","err_pct":104.75,"ci95":[104.29,105.25],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39483,"del":5203,"ins":2212},"empty_hyp":1,"utts_over_50pct":920}, - {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":22.2,"ci95":[21.32,23.09],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3408,"del":462,"ins":310},"empty_hyp":0,"utts_over_50pct":39}, - {"dataset":"fleurs","split":"test","language":"bs","quant":"Q5_K_M","metric":"wer","err_pct":22.38,"ci95":[21.5,23.33],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3434,"del":461,"ins":319},"empty_hyp":0,"utts_over_50pct":43}, - {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":7.01,"ci95":[6.46,7.61],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1197,"del":286,"ins":216},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ca","quant":"Q5_K_M","metric":"wer","err_pct":7.06,"ci95":[6.53,7.66],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1213,"del":281,"ins":217},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":18.77,"ci95":[17.92,19.75],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2172,"del":175,"ins":223},"empty_hyp":0,"utts_over_50pct":16}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q5_K_M","metric":"wer","err_pct":19.04,"ci95":[18.2,20.04],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2209,"del":194,"ins":204},"empty_hyp":0,"utts_over_50pct":19}, - {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":36.33,"ci95":[35.35,37.3],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7435,"del":801,"ins":1283},"empty_hyp":1,"utts_over_50pct":164}, - {"dataset":"fleurs","split":"test","language":"cy","quant":"Q5_K_M","metric":"wer","err_pct":36.6,"ci95":[35.56,37.64],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7483,"del":809,"ins":1298},"empty_hyp":2,"utts_over_50pct":170}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":17.82,"ci95":[16.95,18.65],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2802,"del":353,"ins":436},"empty_hyp":0,"utts_over_50pct":30}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q5_K_M","metric":"wer","err_pct":17.77,"ci95":[16.9,18.58],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2808,"del":345,"ins":429},"empty_hyp":0,"utts_over_50pct":28}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":5.04,"ci95":[4.63,5.47],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":702,"del":111,"ins":130},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":5.06,"ci95":[4.66,5.5],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":704,"del":115,"ins":128},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":18.79,"ci95":[17.47,20.14],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2200,"del":490,"ins":161},"empty_hyp":0,"utts_over_50pct":31}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q5_K_M","metric":"wer","err_pct":19.67,"ci95":[18.27,21.08],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2245,"del":580,"ins":160},"empty_hyp":0,"utts_over_50pct":37}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.46,"ci95":[3.9,5.11],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":416,"del":149,"ins":84},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.49,"ci95":[3.93,5.13],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":420,"del":151,"ins":83},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.55,"ci95":[3.18,3.98],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":600,"del":133,"ins":96},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q5_K_M","metric":"wer","err_pct":3.63,"ci95":[3.23,4.07],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":596,"del":153,"ins":98},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":27.31,"ci95":[26.31,28.35],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3118,"del":410,"ins":536},"empty_hyp":0,"utts_over_50pct":81}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q5_K_M","metric":"wer","err_pct":27.45,"ci95":[26.46,28.46],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3149,"del":399,"ins":537},"empty_hyp":0,"utts_over_50pct":82}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":37.88,"ci95":[36.76,39.01],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5654,"del":428,"ins":1532},"empty_hyp":0,"utts_over_50pct":186}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q5_K_M","metric":"wer","err_pct":38.19,"ci95":[37.05,39.36],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5682,"del":457,"ins":1538},"empty_hyp":0,"utts_over_50pct":185}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":12.73,"ci95":[12.01,13.53],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1514,"del":167,"ins":202},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q5_K_M","metric":"wer","err_pct":12.81,"ci95":[12.11,13.62],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1522,"del":164,"ins":209},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":15.44,"ci95":[14.78,16.15],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3038,"del":423,"ins":620},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q5_K_M","metric":"wer","err_pct":15.62,"ci95":[14.88,16.45],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3041,"del":459,"ins":629},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":6.95,"ci95":[6.39,7.59],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":947,"del":169,"ins":134},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q5_K_M","metric":"wer","err_pct":6.96,"ci95":[6.39,7.56],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":953,"del":164,"ins":136},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":20.1,"ci95":[19.39,20.93],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3582,"del":482,"ins":394},"empty_hyp":0,"utts_over_50pct":21}, - {"dataset":"fleurs","split":"test","language":"gl","quant":"Q5_K_M","metric":"wer","err_pct":20.01,"ci95":[19.3,20.8],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3592,"del":446,"ins":401},"empty_hyp":0,"utts_over_50pct":20}, - {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":104.29,"ci95":[103.91,104.68],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41887,"del":2986,"ins":2046},"empty_hyp":0,"utts_over_50pct":1000}, - {"dataset":"fleurs","split":"test","language":"gu","quant":"Q5_K_M","metric":"wer","err_pct":104.15,"ci95":[103.76,104.55],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41634,"del":3240,"ins":1982},"empty_hyp":0,"utts_over_50pct":1000}, - {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":90.12,"ci95":[88.77,91.57],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10808,"del":2550,"ins":1001},"empty_hyp":1,"utts_over_50pct":620}, - {"dataset":"fleurs","split":"test","language":"ha","quant":"Q5_K_M","metric":"wer","err_pct":89.84,"ci95":[88.52,91.31],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10773,"del":2531,"ins":1011},"empty_hyp":1,"utts_over_50pct":620}, - {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":30.18,"ci95":[28.45,31.92],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3239,"del":587,"ins":351},"empty_hyp":0,"utts_over_50pct":128}, - {"dataset":"fleurs","split":"test","language":"he","quant":"Q5_K_M","metric":"wer","err_pct":30.36,"ci95":[28.67,32.07],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3282,"del":581,"ins":339},"empty_hyp":0,"utts_over_50pct":125}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":29.1,"ci95":[27.16,31.25],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3293,"del":1570,"ins":595},"empty_hyp":0,"utts_over_50pct":36}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q5_K_M","metric":"wer","err_pct":29.46,"ci95":[27.57,31.69],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3250,"del":1647,"ins":628},"empty_hyp":1,"utts_over_50pct":38}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":18.32,"ci95":[17.52,19.12],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2654,"del":322,"ins":276},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q5_K_M","metric":"wer","err_pct":18.46,"ci95":[17.64,19.28],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2666,"del":329,"ins":281},"empty_hyp":0,"utts_over_50pct":17}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":21.97,"ci95":[21.06,22.93],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2990,"del":351,"ins":410},"empty_hyp":0,"utts_over_50pct":37}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q5_K_M","metric":"wer","err_pct":22.34,"ci95":[21.38,23.41],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3012,"del":366,"ins":437},"empty_hyp":0,"utts_over_50pct":41}, - {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":54.73,"ci95":[53.53,55.85],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8043,"del":1408,"ins":489},"empty_hyp":0,"utts_over_50pct":524}, - {"dataset":"fleurs","split":"test","language":"hy","quant":"Q5_K_M","metric":"wer","err_pct":55.56,"ci95":[54.29,56.88],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8192,"del":1310,"ins":589},"empty_hyp":0,"utts_over_50pct":540}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":8.93,"ci95":[8.27,9.68],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":972,"del":96,"ins":143},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q5_K_M","metric":"wer","err_pct":8.78,"ci95":[8.09,9.54],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":962,"del":92,"ins":136},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":49.76,"ci95":[42.72,58.2],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":409,"del":31,"ins":74},"empty_hyp":0,"utts_over_50pct":20}, - {"dataset":"fleurs","split":"test","language":"is","quant":"Q5_K_M","metric":"wer","err_pct":47.73,"ci95":[43.05,52.62],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":409,"del":29,"ins":55},"empty_hyp":0,"utts_over_50pct":20}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.67,"ci95":[3.26,4.11],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":570,"del":124,"ins":85},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q5_K_M","metric":"wer","err_pct":3.83,"ci95":[3.41,4.27],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":587,"del":128,"ins":98},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":6.95,"ci95":[6.39,7.5],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1569,"del":439,"ins":260},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q5_K_M","metric":"cer","err_pct":7.01,"ci95":[6.47,7.56],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1581,"del":440,"ins":266},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":119.65,"ci95":[116.17,122.89],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10777,"del":6338,"ins":3391},"empty_hyp":10,"utts_over_50pct":979}, - {"dataset":"fleurs","split":"test","language":"ka","quant":"Q5_K_M","metric":"wer","err_pct":116.9,"ci95":[113.65,120.05],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10003,"del":7112,"ins":2920},"empty_hyp":13,"utts_over_50pct":979}, - {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":47.29,"ci95":[46.19,48.4],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5942,"del":514,"ins":644},"empty_hyp":0,"utts_over_50pct":324}, - {"dataset":"fleurs","split":"test","language":"kk","quant":"Q5_K_M","metric":"wer","err_pct":47.41,"ci95":[46.29,48.51],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5977,"del":522,"ins":619},"empty_hyp":0,"utts_over_50pct":326}, - {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":118.15,"ci95":[114.41,122.27],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":29338,"del":32074,"ins":13862},"empty_hyp":128,"utts_over_50pct":771}, - {"dataset":"fleurs","split":"test","language":"km","quant":"Q5_K_M","metric":"cer","err_pct":117.17,"ci95":[113.18,120.94],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":28375,"del":33150,"ins":13122},"empty_hyp":136,"utts_over_50pct":771}, - {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":74.18,"ci95":[72.35,76.2],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15951,"del":14036,"ins":1267},"empty_hyp":1,"utts_over_50pct":549}, - {"dataset":"fleurs","split":"test","language":"kn","quant":"Q5_K_M","metric":"wer","err_pct":76.96,"ci95":[74.98,78.99],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15522,"del":15604,"ins":1300},"empty_hyp":2,"utts_over_50pct":579}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.25,"ci95":[4.26,6.34],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":350,"del":534,"ins":45},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q5_K_M","metric":"cer","err_pct":5.32,"ci95":[4.37,6.41],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":363,"del":531,"ins":47},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":91.22,"ci95":[89.48,93.29],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15211,"del":2637,"ins":1271},"empty_hyp":1,"utts_over_50pct":926}, - {"dataset":"fleurs","split":"test","language":"lb","quant":"Q5_K_M","metric":"wer","err_pct":90.46,"ci95":[89.17,91.84],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15238,"del":2627,"ins":1096},"empty_hyp":1,"utts_over_50pct":927}, - {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":81.13,"ci95":[78.91,83.39],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6249,"del":417,"ins":1811},"empty_hyp":0,"utts_over_50pct":435}, - {"dataset":"fleurs","split":"test","language":"ln","quant":"Q5_K_M","metric":"wer","err_pct":82.01,"ci95":[80.0,84.19],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6340,"del":422,"ins":1807},"empty_hyp":0,"utts_over_50pct":443}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":102.35,"ci95":[101.26,103.98],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35086,"del":1850,"ins":1371},"empty_hyp":0,"utts_over_50pct":405}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q5_K_M","metric":"cer","err_pct":101.54,"ci95":[101.02,102.1],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35121,"del":1775,"ins":1107},"empty_hyp":0,"utts_over_50pct":405}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":37.58,"ci95":[36.63,38.51],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5758,"del":319,"ins":362},"empty_hyp":0,"utts_over_50pct":194}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q5_K_M","metric":"wer","err_pct":37.48,"ci95":[36.55,38.4],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5726,"del":338,"ins":358},"empty_hyp":0,"utts_over_50pct":190}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":30.18,"ci95":[29.26,31.23],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4018,"del":295,"ins":340},"empty_hyp":0,"utts_over_50pct":85}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q5_K_M","metric":"wer","err_pct":30.06,"ci95":[29.11,31.1],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3989,"del":297,"ins":348},"empty_hyp":0,"utts_over_50pct":80}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":22.81,"ci95":[21.91,23.68],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3886,"del":364,"ins":560},"empty_hyp":0,"utts_over_50pct":41}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q5_K_M","metric":"wer","err_pct":22.95,"ci95":[22.07,23.87],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3914,"del":364,"ins":560},"empty_hyp":0,"utts_over_50pct":49}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.72,"ci95":[2.42,3.06],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":912,"del":309,"ins":221},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.72,"ci95":[2.42,3.06],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":910,"del":311,"ins":221},"empty_hyp":1,"utts_over_50pct":13}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.71,"ci95":[2.4,3.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":908,"del":290,"ins":237},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.62,"ci95":[2.36,2.92],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":912,"del":299,"ins":181},"empty_hyp":0,"utts_over_50pct":13}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.84,"ci95":[2.48,3.31],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":916,"del":283,"ins":309},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.67,"ci95":[2.38,2.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":933,"del":292,"ins":191},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.7,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":44.92,"ci95":[42.61,47.28],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2113,"del":306,"ins":210},"empty_hyp":1,"utts_over_50pct":93,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":133.86,"ci95":[128.35,140.33],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6600,"del":1957,"ins":2907},"empty_hyp":5,"utts_over_50pct":516,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":19.47,"ci95":[18.01,21.12],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1198,"del":329,"ins":77},"empty_hyp":0,"utts_over_50pct":18,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":105.09,"ci95":[104.38,106.0],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33038,"del":13910,"ins":2436},"empty_hyp":0,"utts_over_50pct":984,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":30.38,"ci95":[29.46,31.21],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4687,"del":436,"ins":322},"empty_hyp":0,"utts_over_50pct":72,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":58.26,"ci95":[57.26,59.33],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10751,"del":652,"ins":731},"empty_hyp":0,"utts_over_50pct":650,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":19.89,"ci95":[18.96,20.85],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2307,"del":286,"ins":226},"empty_hyp":0,"utts_over_50pct":17,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":105.08,"ci95":[104.55,105.69],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39224,"del":5467,"ins":2355},"empty_hyp":0,"utts_over_50pct":920,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":22.2,"ci95":[21.32,23.09],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3408,"del":462,"ins":310},"empty_hyp":0,"utts_over_50pct":39,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":7.01,"ci95":[6.46,7.61],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1197,"del":286,"ins":216},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":18.77,"ci95":[17.92,19.75],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2172,"del":175,"ins":223},"empty_hyp":0,"utts_over_50pct":16,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":36.33,"ci95":[35.35,37.3],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7435,"del":801,"ins":1283},"empty_hyp":1,"utts_over_50pct":164,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":17.82,"ci95":[16.95,18.65],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2802,"del":353,"ins":436},"empty_hyp":0,"utts_over_50pct":30,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":5.04,"ci95":[4.63,5.47],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":702,"del":111,"ins":130},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":18.79,"ci95":[17.47,20.14],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2200,"del":490,"ins":161},"empty_hyp":0,"utts_over_50pct":31,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.46,"ci95":[3.9,5.11],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":416,"del":149,"ins":84},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.55,"ci95":[3.18,3.98],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":600,"del":133,"ins":96},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":27.31,"ci95":[26.31,28.35],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3118,"del":410,"ins":536},"empty_hyp":0,"utts_over_50pct":81,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":37.88,"ci95":[36.76,39.01],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5654,"del":428,"ins":1532},"empty_hyp":0,"utts_over_50pct":186,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":12.73,"ci95":[12.01,13.53],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1514,"del":167,"ins":202},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":15.44,"ci95":[14.78,16.15],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3038,"del":423,"ins":620},"empty_hyp":0,"utts_over_50pct":10,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":6.95,"ci95":[6.39,7.59],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":947,"del":169,"ins":134},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":20.1,"ci95":[19.39,20.93],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3582,"del":482,"ins":394},"empty_hyp":0,"utts_over_50pct":21,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":104.29,"ci95":[103.91,104.68],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41887,"del":2986,"ins":2046},"empty_hyp":0,"utts_over_50pct":1000,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":90.12,"ci95":[88.77,91.57],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10808,"del":2550,"ins":1001},"empty_hyp":1,"utts_over_50pct":620,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":30.18,"ci95":[28.45,31.92],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3239,"del":587,"ins":351},"empty_hyp":0,"utts_over_50pct":128,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":29.1,"ci95":[27.16,31.25],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3293,"del":1570,"ins":595},"empty_hyp":0,"utts_over_50pct":36,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":18.32,"ci95":[17.52,19.12],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2654,"del":322,"ins":276},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":21.97,"ci95":[21.06,22.93],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2990,"del":351,"ins":410},"empty_hyp":0,"utts_over_50pct":37,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":54.73,"ci95":[53.53,55.85],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8043,"del":1408,"ins":489},"empty_hyp":0,"utts_over_50pct":524,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":8.93,"ci95":[8.27,9.68],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":972,"del":96,"ins":143},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":49.76,"ci95":[42.72,58.2],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":409,"del":31,"ins":74},"empty_hyp":0,"utts_over_50pct":20,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":3.67,"ci95":[3.26,4.11],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":570,"del":124,"ins":85},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":6.95,"ci95":[6.39,7.5],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1569,"del":439,"ins":260},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":119.65,"ci95":[116.17,122.89],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10777,"del":6338,"ins":3391},"empty_hyp":10,"utts_over_50pct":979,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":47.29,"ci95":[46.19,48.4],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5942,"del":514,"ins":644},"empty_hyp":0,"utts_over_50pct":324,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":74.18,"ci95":[72.35,76.2],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15951,"del":14036,"ins":1267},"empty_hyp":1,"utts_over_50pct":549,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.25,"ci95":[4.26,6.34],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":350,"del":534,"ins":45},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":91.22,"ci95":[89.48,93.29],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15211,"del":2637,"ins":1271},"empty_hyp":1,"utts_over_50pct":926,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":81.13,"ci95":[78.91,83.39],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6249,"del":417,"ins":1811},"empty_hyp":0,"utts_over_50pct":435,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":37.58,"ci95":[36.63,38.51],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5758,"del":319,"ins":362},"empty_hyp":0,"utts_over_50pct":194,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":30.18,"ci95":[29.26,31.23],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4018,"del":295,"ins":340},"empty_hyp":0,"utts_over_50pct":85,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":22.81,"ci95":[21.91,23.68],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3886,"del":364,"ins":560},"empty_hyp":0,"utts_over_50pct":41,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.72,"ci95":[2.42,3.06],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":912,"del":309,"ins":221},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.72,"ci95":[2.42,3.06],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":910,"del":311,"ins":221},"empty_hyp":1,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.71,"ci95":[2.4,3.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":908,"del":290,"ins":237},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.62,"ci95":[2.36,2.92],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":912,"del":299,"ins":181},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.84,"ci95":[2.48,3.31],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":916,"del":283,"ins":309},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.67,"ci95":[2.38,2.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":933,"del":292,"ins":191},"empty_hyp":0,"utts_over_50pct":10,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":118.15,"ci95":[114.41,122.27],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":29338,"del":32074,"ins":13862},"empty_hyp":128,"utts_over_50pct":771,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":102.35,"ci95":[101.26,103.98],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35086,"del":1850,"ins":1371},"empty_hyp":0,"utts_over_50pct":405,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":11258.4,"xrt_compute":0.977,"load_ms":664.5,"mel_ms":18.9,"encode_ms":8274.1,"decode_ms":2965.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7360.6,"xrt_compute":1.494,"load_ms":379.9,"mel_ms":18.0,"encode_ms":5448.0,"decode_ms":1894.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7747.0,"xrt_compute":1.42,"load_ms":276.7,"mel_ms":17.6,"encode_ms":5789.3,"decode_ms":1940.2,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":1793.7,"xrt_compute":6.133,"load_ms":1455.8,"mel_ms":19.4,"encode_ms":878.6,"decode_ms":895.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1629.7,"xrt_compute":6.75,"load_ms":822.3,"mel_ms":19.0,"encode_ms":906.1,"decode_ms":704.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1591.5,"xrt_compute":6.912,"load_ms":493.0,"mel_ms":19.1,"encode_ms":928.1,"decode_ms":644.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15493.6,"xrt_compute":2.28,"load_ms":223.9,"mel_ms":5.5,"encode_ms":5603.2,"decode_ms":9884.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15493.8,"xrt_wall":2.28}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7434.2,"xrt_compute":1.48,"load_ms":245.7,"mel_ms":4.9,"encode_ms":5610.0,"decode_ms":1819.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7434.4,"xrt_wall":1.48}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":19876.9,"xrt_compute":1.778,"load_ms":359.9,"mel_ms":4.9,"encode_ms":7284.5,"decode_ms":12587.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19877.1,"xrt_wall":1.778}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9632.9,"xrt_compute":1.142,"load_ms":367.4,"mel_ms":4.1,"encode_ms":7296.6,"decode_ms":2332.2,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9632.6,"xrt_wall":1.142}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":43981.0,"xrt_compute":0.803,"load_ms":730.3,"mel_ms":55.6,"encode_ms":14707.6,"decode_ms":29217.8,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":43981.1,"xrt_wall":0.803}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":26183.9,"xrt_compute":0.42,"load_ms":1218.4,"mel_ms":46.8,"encode_ms":18835.4,"decode_ms":7301.7,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":26184.1,"xrt_wall":0.42}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6271.9,"xrt_compute":1.754,"load_ms":981.5,"mel_ms":43.2,"encode_ms":4212.5,"decode_ms":2016.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6272.0,"xrt_wall":1.754} ] } diff --git a/catalog/whisper-medium.en.json b/catalog/whisper-medium.en.json index 8e8fd211..77522d9d 100644 --- a/catalog/whisper-medium.en.json +++ b/catalog/whisper-medium.en.json @@ -31,38 +31,38 @@ {"quant":"Q4_K_M","filename":"whisper-medium.en-Q4_K_M.gguf","size_bytes":504025856} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.88,"ci95":[4.32,5.56],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":457,"del":158,"ins":96},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.74,"ci95":[2.52,2.99],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":960,"del":337,"ins":155},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.73,"ci95":[2.51,2.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":959,"del":335,"ins":155},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.72,"ci95":[2.51,2.97],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":956,"del":337,"ins":151},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.82,"ci95":[2.54,3.15],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":956,"del":331,"ins":211},"empty_hyp":0,"utts_over_50pct":7}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.75,"ci95":[2.53,2.99],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":963,"del":325,"ins":168},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.91,"ci95":[2.55,3.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":976,"del":303,"ins":266},"empty_hyp":0,"utts_over_50pct":8}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.83,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.74,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.88,"ci95":[4.32,5.56],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":457,"del":158,"ins":96},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.74,"ci95":[2.52,2.99],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":960,"del":337,"ins":155},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.73,"ci95":[2.51,2.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":959,"del":335,"ins":155},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.72,"ci95":[2.51,2.97],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":956,"del":337,"ins":151},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.82,"ci95":[2.54,3.15],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":956,"del":331,"ins":211},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.75,"ci95":[2.53,2.99],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":963,"del":325,"ins":168},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.91,"ci95":[2.55,3.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":976,"del":303,"ins":266},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":5584.3,"xrt_compute":1.97,"load_ms":352.3,"mel_ms":18.1,"encode_ms":4140.3,"decode_ms":1425.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3739.5,"xrt_compute":2.942,"load_ms":210.2,"mel_ms":17.6,"encode_ms":2818.4,"decode_ms":903.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3919.9,"xrt_compute":2.806,"load_ms":133.9,"mel_ms":17.6,"encode_ms":2990.1,"decode_ms":912.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":972.8,"xrt_compute":11.307,"load_ms":748.6,"mel_ms":18.8,"encode_ms":463.7,"decode_ms":490.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":900.4,"xrt_compute":12.216,"load_ms":421.6,"mel_ms":18.3,"encode_ms":477.3,"decode_ms":404.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":865.1,"xrt_compute":12.716,"load_ms":282.0,"mel_ms":18.4,"encode_ms":488.5,"decode_ms":358.2,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":48.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":45.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":46.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7231.8,"xrt_compute":4.886,"load_ms":126.8,"mel_ms":5.0,"encode_ms":2866.7,"decode_ms":4360.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7231.7,"xrt_wall":4.886}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3373.9,"xrt_compute":3.26,"load_ms":136.9,"mel_ms":5.6,"encode_ms":2866.1,"decode_ms":502.2,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3374.0,"xrt_wall":3.26}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9073.0,"xrt_compute":3.894,"load_ms":190.8,"mel_ms":4.8,"encode_ms":3632.3,"decode_ms":5435.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9073.1,"xrt_wall":3.894}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4293.5,"xrt_compute":2.562,"load_ms":198.3,"mel_ms":4.4,"encode_ms":3656.0,"decode_ms":633.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4293.6,"xrt_wall":2.562}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":48.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":45.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":46.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":21069.1,"xrt_compute":1.677,"load_ms":382.4,"mel_ms":51.8,"encode_ms":7364.8,"decode_ms":13652.6,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":21069.2,"xrt_wall":1.677}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":9357.7,"xrt_compute":1.176,"load_ms":379.1,"mel_ms":44.4,"encode_ms":7436.0,"decode_ms":1877.3,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9357.9,"xrt_wall":1.175}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":26625.9,"xrt_compute":1.327,"load_ms":598.8,"mel_ms":52.1,"encode_ms":9385.6,"decode_ms":17188.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":26626.1,"xrt_wall":1.327}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":11529.7,"xrt_compute":0.954,"load_ms":597.5,"mel_ms":43.1,"encode_ms":9204.4,"decode_ms":2282.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":11529.9,"xrt_wall":0.954}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2882.6,"xrt_compute":3.816,"load_ms":503.1,"mel_ms":41.0,"encode_ms":2047.3,"decode_ms":794.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2882.7,"xrt_wall":3.816} ] } diff --git a/catalog/whisper-medium.json b/catalog/whisper-medium.json index 9bdd02c3..026ab942 100644 --- a/catalog/whisper-medium.json +++ b/catalog/whisper-medium.json @@ -25,9 +25,9 @@ "long_form_strategy": "chunked-unbounded", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"targets":["en"],"verified":false}, + "translate": {"supported":true,"verified":false,"targets":["en"],"pairs":null}, "lang_detect": {"supported":true,"verified":false}, - "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["segment"]}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -41,117 +41,118 @@ {"quant":"Q4_K_M","filename":"whisper-medium-Q4_K_M.gguf","size_bytes":504102848} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":47.33,"ci95":[45.26,49.54],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2217,"del":331,"ins":222},"empty_hyp":1,"utts_over_50pct":109}, - {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":116.27,"ci95":[112.69,120.65],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4276,"del":4283,"ins":1398},"empty_hyp":13,"utts_over_50pct":516}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":21.9,"ci95":[20.4,23.52],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1384,"del":328,"ins":92},"empty_hyp":1,"utts_over_50pct":24}, - {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":101.63,"ci95":[100.95,102.58],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18442,"del":28506,"ins":812},"empty_hyp":32,"utts_over_50pct":984}, - {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":34.57,"ci95":[33.63,35.47],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5326,"del":471,"ins":399},"empty_hyp":0,"utts_over_50pct":123}, - {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":61.87,"ci95":[61.01,62.73],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11460,"del":744,"ins":681},"empty_hyp":0,"utts_over_50pct":761}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":23.0,"ci95":[22.0,24.03],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2645,"del":358,"ins":257},"empty_hyp":0,"utts_over_50pct":27}, - {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":102.52,"ci95":[101.97,103.14],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":22763,"del":21923,"ins":1214},"empty_hyp":17,"utts_over_50pct":920}, - {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":26.69,"ci95":[25.6,27.94],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4160,"del":544,"ins":321},"empty_hyp":0,"utts_over_50pct":69}, - {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":8.02,"ci95":[7.47,8.58],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1422,"del":284,"ins":237},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":22.85,"ci95":[21.93,23.89],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2670,"del":209,"ins":250},"empty_hyp":0,"utts_over_50pct":31}, - {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":40.08,"ci95":[39.13,41.07],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8213,"del":907,"ins":1381},"empty_hyp":2,"utts_over_50pct":222}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":21.17,"ci95":[20.35,22.01],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3320,"del":385,"ins":562},"empty_hyp":0,"utts_over_50pct":35}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.23,"ci95":[5.74,6.71],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":853,"del":129,"ins":184},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":20.06,"ci95":[19.06,21.13],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2638,"del":242,"ins":164},"empty_hyp":0,"utts_over_50pct":29}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.64,"ci95":[4.2,5.15],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":464,"del":107,"ins":105},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.8,"ci95":[3.42,4.2],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":658,"del":131,"ins":97},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":31.52,"ci95":[30.39,32.63],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3643,"del":367,"ins":680},"empty_hyp":0,"utts_over_50pct":111}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":42.57,"ci95":[41.43,43.78],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6452,"del":549,"ins":1556},"empty_hyp":1,"utts_over_50pct":241}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":14.67,"ci95":[13.94,15.57],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1746,"del":178,"ins":247},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":18.36,"ci95":[17.6,19.2],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3631,"del":666,"ins":556},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":8.07,"ci95":[7.43,8.8],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1101,"del":201,"ins":151},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":22.24,"ci95":[21.48,23.08],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4030,"del":433,"ins":471},"empty_hyp":0,"utts_over_50pct":27}, - {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":104.11,"ci95":[103.71,104.53],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41921,"del":2955,"ins":1960},"empty_hyp":1,"utts_over_50pct":1000}, - {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":95.12,"ci95":[93.21,97.17],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9066,"del":4896,"ins":1194},"empty_hyp":9,"utts_over_50pct":620}, - {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":33.69,"ci95":[32.08,35.46],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3633,"del":677,"ins":353},"empty_hyp":3,"utts_over_50pct":140}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":26.09,"ci95":[24.77,27.63],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3102,"del":1185,"ins":606},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":21.19,"ci95":[20.29,22.07],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3039,"del":425,"ins":298},"empty_hyp":0,"utts_over_50pct":33}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":26.07,"ci95":[25.08,27.04],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3554,"del":389,"ins":509},"empty_hyp":0,"utts_over_50pct":61}, - {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":58.42,"ci95":[57.36,59.46],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8851,"del":1166,"ins":594},"empty_hyp":0,"utts_over_50pct":613}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":10.79,"ci95":[10.01,11.69],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1148,"del":131,"ins":184},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":51.6,"ci95":[47.14,56.58],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":442,"del":36,"ins":55},"empty_hyp":0,"utts_over_50pct":25}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":4.17,"ci95":[3.75,4.65],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":121,"ins":96},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":7.35,"ci95":[6.79,7.91],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1733,"del":353,"ins":313},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":128.01,"ci95":[123.78,132.1],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10194,"del":6941,"ins":4804},"empty_hyp":6,"utts_over_50pct":979}, - {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":53.09,"ci95":[51.93,54.34],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6733,"del":624,"ins":615},"empty_hyp":0,"utts_over_50pct":446}, - {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":108.92,"ci95":[106.01,112.36],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20297,"del":42057,"ins":7036},"empty_hyp":232,"utts_over_50pct":771}, - {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":87.3,"ci95":[85.89,88.77],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13965,"del":21068,"ins":1752},"empty_hyp":89,"utts_over_50pct":767}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.46,"ci95":[4.53,6.45],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":520,"ins":40},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":98.33,"ci95":[96.12,101.1],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15744,"del":2687,"ins":2180},"empty_hyp":0,"utts_over_50pct":932}, - {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":92.09,"ci95":[89.41,94.9],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6091,"del":1684,"ins":1848},"empty_hyp":4,"utts_over_50pct":457}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":101.16,"ci95":[100.74,101.59],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":34910,"del":2014,"ins":936},"empty_hyp":0,"utts_over_50pct":405}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":43.34,"ci95":[42.26,44.4],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6604,"del":372,"ins":450},"empty_hyp":0,"utts_over_50pct":309}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":33.58,"ci95":[32.56,34.62],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4501,"del":267,"ins":409},"empty_hyp":0,"utts_over_50pct":106}, - {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":95.79,"ci95":[92.89,98.86],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13857,"del":11921,"ins":3939},"empty_hyp":33,"utts_over_50pct":867}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":24.75,"ci95":[23.74,25.86],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4134,"del":550,"ins":534},"empty_hyp":0,"utts_over_50pct":61}, - {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":101.0,"ci95":[100.56,101.54],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15995,"del":38186,"ins":597},"empty_hyp":68,"utts_over_50pct":958}, - {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":110.55,"ci95":[108.56,112.6],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13110,"del":5312,"ins":2065},"empty_hyp":4,"utts_over_50pct":949}, - {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":58.43,"ci95":[56.53,60.21],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15064,"del":12384,"ins":2533},"empty_hyp":5,"utts_over_50pct":474}, - {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":13.23,"ci95":[12.44,14.03],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1674,"del":129,"ins":149},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":85.06,"ci95":[84.12,86.01],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15307,"del":2503,"ins":1100},"empty_hyp":1,"utts_over_50pct":918}, - {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":117.51,"ci95":[114.11,121.31],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":27200,"del":30958,"ins":10578},"empty_hyp":9,"utts_over_50pct":880}, - {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":13.66,"ci95":[12.66,14.67],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":846,"del":97,"ins":98},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":54.08,"ci95":[52.85,55.3],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11663,"del":3261,"ins":3109},"empty_hyp":5,"utts_over_50pct":396}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":10.4,"ci95":[9.48,11.33],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":652,"del":94,"ins":127},"empty_hyp":0,"utts_over_50pct":0}, - {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":81.55,"ci95":[80.44,82.77],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17947,"del":1612,"ins":1971},"empty_hyp":0,"utts_over_50pct":958}, - {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":103.19,"ci95":[102.42,104.2],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":21364,"del":4096,"ins":859},"empty_hyp":2,"utts_over_50pct":574}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":8.59,"ci95":[7.97,9.27],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1004,"del":103,"ins":129},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":105.77,"ci95":[103.72,108.13],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6456,"del":6602,"ins":920},"empty_hyp":4,"utts_over_50pct":512}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":5.07,"ci95":[4.61,5.57],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":125,"ins":200},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":24.17,"ci95":[23.1,25.29],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4326,"del":362,"ins":339},"empty_hyp":0,"utts_over_50pct":63}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":7.3,"ci95":[6.71,7.85],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":922,"del":88,"ins":92},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":132.27,"ci95":[129.31,135.25],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15137,"del":8469,"ins":7659},"empty_hyp":7,"utts_over_50pct":980}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":18.73,"ci95":[17.83,19.63],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2411,"del":238,"ins":207},"empty_hyp":3,"utts_over_50pct":15}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":33.98,"ci95":[32.85,34.99],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4555,"del":457,"ins":600},"empty_hyp":0,"utts_over_50pct":129}, - {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":134.28,"ci95":[128.93,140.03],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9511,"del":6457,"ins":5516},"empty_hyp":20,"utts_over_50pct":925}, - {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":102.63,"ci95":[101.53,104.07],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12572,"del":11593,"ins":657},"empty_hyp":36,"utts_over_50pct":1019}, - {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":55.14,"ci95":[51.94,58.16],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7014,"del":399,"ins":225},"empty_hyp":0,"utts_over_50pct":315}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":12.47,"ci95":[11.7,13.21],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1487,"del":235,"ins":196},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":57.09,"ci95":[55.23,58.92],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4195,"del":943,"ins":569},"empty_hyp":0,"utts_over_50pct":299}, - {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":23.72,"ci95":[22.33,25.5],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4480,"del":1412,"ins":2094},"empty_hyp":0,"utts_over_50pct":23}, - {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":102.69,"ci95":[101.92,103.57],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11459,"del":10956,"ins":800},"empty_hyp":56,"utts_over_50pct":472}, - {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":76.32,"ci95":[75.16,77.38],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8545,"del":669,"ins":734},"empty_hyp":0,"utts_over_50pct":578}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":16.08,"ci95":[15.23,16.99],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7429,"del":4562,"ins":3687},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":9.35,"ci95":[8.65,10.19],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":937,"del":147,"ins":159},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":11.59,"ci95":[10.77,12.39],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1333,"del":186,"ins":146},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":28.67,"ci95":[27.22,30.21],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1988,"del":188,"ins":260},"empty_hyp":0,"utts_over_50pct":18}, - {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":115.02,"ci95":[111.22,119.5],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11393,"del":3591,"ins":3382},"empty_hyp":9,"utts_over_50pct":861}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.74,"ci95":[12.94,14.63],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2896,"del":391,"ins":289},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":109.0,"ci95":[106.23,111.93],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13499,"del":8066,"ins":2588},"empty_hyp":2,"utts_over_50pct":831}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":13.13,"ci95":[11.97,14.25],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2999,"del":1485,"ins":197},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.64,"ci95":[2.41,2.91],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1001,"del":198,"ins":200},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.63,"ci95":[2.4,2.9],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1000,"del":197,"ins":200},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.64,"ci95":[2.41,2.91],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1003,"del":200,"ins":199},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.59,"ci95":[2.39,2.79],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":998,"del":213,"ins":160},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.62,"ci95":[2.42,2.83],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1013,"del":218,"ins":159},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.59,"ci95":[2.39,2.8],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1013,"del":207,"ins":153},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.63,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":47.33,"ci95":[45.26,49.54],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2217,"del":331,"ins":222},"empty_hyp":1,"utts_over_50pct":109,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":116.27,"ci95":[112.69,120.65],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4276,"del":4283,"ins":1398},"empty_hyp":13,"utts_over_50pct":516,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":21.9,"ci95":[20.4,23.52],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1384,"del":328,"ins":92},"empty_hyp":1,"utts_over_50pct":24,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":101.63,"ci95":[100.95,102.58],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18442,"del":28506,"ins":812},"empty_hyp":32,"utts_over_50pct":984,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":34.57,"ci95":[33.63,35.47],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5326,"del":471,"ins":399},"empty_hyp":0,"utts_over_50pct":123,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":61.87,"ci95":[61.01,62.73],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11460,"del":744,"ins":681},"empty_hyp":0,"utts_over_50pct":761,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":23.0,"ci95":[22.0,24.03],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2645,"del":358,"ins":257},"empty_hyp":0,"utts_over_50pct":27,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":102.52,"ci95":[101.97,103.14],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":22763,"del":21923,"ins":1214},"empty_hyp":17,"utts_over_50pct":920,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":26.69,"ci95":[25.6,27.94],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4160,"del":544,"ins":321},"empty_hyp":0,"utts_over_50pct":69,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":8.02,"ci95":[7.47,8.58],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1422,"del":284,"ins":237},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":22.85,"ci95":[21.93,23.89],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2670,"del":209,"ins":250},"empty_hyp":0,"utts_over_50pct":31,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":40.08,"ci95":[39.13,41.07],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8213,"del":907,"ins":1381},"empty_hyp":2,"utts_over_50pct":222,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":21.17,"ci95":[20.35,22.01],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3320,"del":385,"ins":562},"empty_hyp":0,"utts_over_50pct":35,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.23,"ci95":[5.74,6.71],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":853,"del":129,"ins":184},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":20.06,"ci95":[19.06,21.13],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2638,"del":242,"ins":164},"empty_hyp":0,"utts_over_50pct":29,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.64,"ci95":[4.2,5.15],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":464,"del":107,"ins":105},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":3.8,"ci95":[3.42,4.2],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":658,"del":131,"ins":97},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":31.52,"ci95":[30.39,32.63],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3643,"del":367,"ins":680},"empty_hyp":0,"utts_over_50pct":111,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":42.57,"ci95":[41.43,43.78],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6452,"del":549,"ins":1556},"empty_hyp":1,"utts_over_50pct":241,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":14.67,"ci95":[13.94,15.57],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1746,"del":178,"ins":247},"empty_hyp":0,"utts_over_50pct":10,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":18.36,"ci95":[17.6,19.2],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3631,"del":666,"ins":556},"empty_hyp":0,"utts_over_50pct":10,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":8.07,"ci95":[7.43,8.8],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1101,"del":201,"ins":151},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":22.24,"ci95":[21.48,23.08],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4030,"del":433,"ins":471},"empty_hyp":0,"utts_over_50pct":27,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":104.11,"ci95":[103.71,104.53],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":41921,"del":2955,"ins":1960},"empty_hyp":1,"utts_over_50pct":1000,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":95.12,"ci95":[93.21,97.17],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9066,"del":4896,"ins":1194},"empty_hyp":9,"utts_over_50pct":620,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":33.69,"ci95":[32.08,35.46],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3633,"del":677,"ins":353},"empty_hyp":3,"utts_over_50pct":140,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":26.09,"ci95":[24.77,27.63],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3102,"del":1185,"ins":606},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":21.19,"ci95":[20.29,22.07],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3039,"del":425,"ins":298},"empty_hyp":0,"utts_over_50pct":33,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":26.07,"ci95":[25.08,27.04],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3554,"del":389,"ins":509},"empty_hyp":0,"utts_over_50pct":61,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":58.42,"ci95":[57.36,59.46],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8851,"del":1166,"ins":594},"empty_hyp":0,"utts_over_50pct":613,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":10.79,"ci95":[10.01,11.69],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1148,"del":131,"ins":184},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":51.6,"ci95":[47.14,56.58],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":442,"del":36,"ins":55},"empty_hyp":0,"utts_over_50pct":25,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":4.17,"ci95":[3.75,4.65],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":670,"del":121,"ins":96},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":7.35,"ci95":[6.79,7.91],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1733,"del":353,"ins":313},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":128.01,"ci95":[123.78,132.1],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10194,"del":6941,"ins":4804},"empty_hyp":6,"utts_over_50pct":979,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":53.09,"ci95":[51.93,54.34],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6733,"del":624,"ins":615},"empty_hyp":0,"utts_over_50pct":446,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":87.3,"ci95":[85.89,88.77],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13965,"del":21068,"ins":1752},"empty_hyp":89,"utts_over_50pct":767,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":5.46,"ci95":[4.53,6.45],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":405,"del":520,"ins":40},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":98.33,"ci95":[96.12,101.1],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15744,"del":2687,"ins":2180},"empty_hyp":0,"utts_over_50pct":932,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":92.09,"ci95":[89.41,94.9],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6091,"del":1684,"ins":1848},"empty_hyp":4,"utts_over_50pct":457,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":43.34,"ci95":[42.26,44.4],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6604,"del":372,"ins":450},"empty_hyp":0,"utts_over_50pct":309,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":33.58,"ci95":[32.56,34.62],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4501,"del":267,"ins":409},"empty_hyp":0,"utts_over_50pct":106,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":95.79,"ci95":[92.89,98.86],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13857,"del":11921,"ins":3939},"empty_hyp":33,"utts_over_50pct":867,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":24.75,"ci95":[23.74,25.86],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4134,"del":550,"ins":534},"empty_hyp":0,"utts_over_50pct":61,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":101.0,"ci95":[100.56,101.54],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15995,"del":38186,"ins":597},"empty_hyp":68,"utts_over_50pct":958,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":110.55,"ci95":[108.56,112.6],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13110,"del":5312,"ins":2065},"empty_hyp":4,"utts_over_50pct":949,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":58.43,"ci95":[56.53,60.21],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15064,"del":12384,"ins":2533},"empty_hyp":5,"utts_over_50pct":474,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":13.23,"ci95":[12.44,14.03],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1674,"del":129,"ins":149},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":85.06,"ci95":[84.12,86.01],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15307,"del":2503,"ins":1100},"empty_hyp":1,"utts_over_50pct":918,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":13.66,"ci95":[12.66,14.67],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":846,"del":97,"ins":98},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":54.08,"ci95":[52.85,55.3],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11663,"del":3261,"ins":3109},"empty_hyp":5,"utts_over_50pct":396,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":10.4,"ci95":[9.48,11.33],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":652,"del":94,"ins":127},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":81.55,"ci95":[80.44,82.77],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17947,"del":1612,"ins":1971},"empty_hyp":0,"utts_over_50pct":958,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":103.19,"ci95":[102.42,104.2],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":21364,"del":4096,"ins":859},"empty_hyp":2,"utts_over_50pct":574,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":8.59,"ci95":[7.97,9.27],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1004,"del":103,"ins":129},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":105.77,"ci95":[103.72,108.13],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6456,"del":6602,"ins":920},"empty_hyp":4,"utts_over_50pct":512,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":5.07,"ci95":[4.61,5.57],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":763,"del":125,"ins":200},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":24.17,"ci95":[23.1,25.29],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4326,"del":362,"ins":339},"empty_hyp":0,"utts_over_50pct":63,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":7.3,"ci95":[6.71,7.85],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":922,"del":88,"ins":92},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":132.27,"ci95":[129.31,135.25],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15137,"del":8469,"ins":7659},"empty_hyp":7,"utts_over_50pct":980,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":18.73,"ci95":[17.83,19.63],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2411,"del":238,"ins":207},"empty_hyp":3,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":33.98,"ci95":[32.85,34.99],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4555,"del":457,"ins":600},"empty_hyp":0,"utts_over_50pct":129,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":134.28,"ci95":[128.93,140.03],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9511,"del":6457,"ins":5516},"empty_hyp":20,"utts_over_50pct":925,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":102.63,"ci95":[101.53,104.07],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12572,"del":11593,"ins":657},"empty_hyp":36,"utts_over_50pct":1019,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":55.14,"ci95":[51.94,58.16],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7014,"del":399,"ins":225},"empty_hyp":0,"utts_over_50pct":315,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":12.47,"ci95":[11.7,13.21],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1487,"del":235,"ins":196},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":57.09,"ci95":[55.23,58.92],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4195,"del":943,"ins":569},"empty_hyp":0,"utts_over_50pct":299,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":23.72,"ci95":[22.33,25.5],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4480,"del":1412,"ins":2094},"empty_hyp":0,"utts_over_50pct":23,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":102.69,"ci95":[101.92,103.57],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11459,"del":10956,"ins":800},"empty_hyp":56,"utts_over_50pct":472,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":76.32,"ci95":[75.16,77.38],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8545,"del":669,"ins":734},"empty_hyp":0,"utts_over_50pct":578,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":16.08,"ci95":[15.23,16.99],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7429,"del":4562,"ins":3687},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":9.35,"ci95":[8.65,10.19],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":937,"del":147,"ins":159},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":11.59,"ci95":[10.77,12.39],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1333,"del":186,"ins":146},"empty_hyp":0,"utts_over_50pct":10,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":28.67,"ci95":[27.22,30.21],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1988,"del":188,"ins":260},"empty_hyp":0,"utts_over_50pct":18,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":115.02,"ci95":[111.22,119.5],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11393,"del":3591,"ins":3382},"empty_hyp":9,"utts_over_50pct":861,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.74,"ci95":[12.94,14.63],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2896,"del":391,"ins":289},"empty_hyp":0,"utts_over_50pct":11,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":109.0,"ci95":[106.23,111.93],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13499,"del":8066,"ins":2588},"empty_hyp":2,"utts_over_50pct":831,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":13.13,"ci95":[11.97,14.25],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2999,"del":1485,"ins":197},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":2.64,"ci95":[2.41,2.91],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1001,"del":198,"ins":200},"empty_hyp":0,"utts_over_50pct":11,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.63,"ci95":[2.4,2.9],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1000,"del":197,"ins":200},"empty_hyp":0,"utts_over_50pct":11,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.64,"ci95":[2.41,2.91],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1003,"del":200,"ins":199},"empty_hyp":0,"utts_over_50pct":11,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.59,"ci95":[2.39,2.79],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":998,"del":213,"ins":160},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.62,"ci95":[2.42,2.83],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1013,"del":218,"ins":159},"empty_hyp":0,"utts_over_50pct":10,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.59,"ci95":[2.39,2.8],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1013,"del":207,"ins":153},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":108.92,"ci95":[106.01,112.36],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20297,"del":42057,"ins":7036},"empty_hyp":232,"utts_over_50pct":771,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":101.16,"ci95":[100.74,101.59],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":34910,"del":2014,"ins":936},"empty_hyp":0,"utts_over_50pct":405,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":117.51,"ci95":[114.11,121.31],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":27200,"del":30958,"ins":10578},"empty_hyp":9,"utts_over_50pct":880,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":5568.7,"xrt_compute":1.975,"load_ms":354.1,"mel_ms":17.9,"encode_ms":4118.2,"decode_ms":1432.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3743.0,"xrt_compute":2.939,"load_ms":214.5,"mel_ms":17.8,"encode_ms":2816.5,"decode_ms":908.6,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3926.9,"xrt_compute":2.801,"load_ms":150.8,"mel_ms":17.9,"encode_ms":2988.2,"decode_ms":920.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":985.6,"xrt_compute":11.161,"load_ms":730.6,"mel_ms":18.7,"encode_ms":465.2,"decode_ms":501.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":904.5,"xrt_compute":12.162,"load_ms":419.7,"mel_ms":18.4,"encode_ms":478.1,"decode_ms":408.0,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":874.6,"xrt_compute":12.578,"load_ms":272.0,"mel_ms":17.9,"encode_ms":489.4,"decode_ms":367.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":46.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":40.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":39.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7929.8,"xrt_compute":4.456,"load_ms":140.8,"mel_ms":4.7,"encode_ms":2999.1,"decode_ms":4925.9,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7929.8,"xrt_wall":4.456}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3897.1,"xrt_compute":2.823,"load_ms":138.5,"mel_ms":4.0,"encode_ms":3004.2,"decode_ms":888.9,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3897.2,"xrt_wall":2.823}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9621.8,"xrt_compute":3.672,"load_ms":200.8,"mel_ms":4.6,"encode_ms":3664.9,"decode_ms":5952.3,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9621.9,"xrt_wall":3.672}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4749.7,"xrt_compute":2.316,"load_ms":189.6,"mel_ms":4.0,"encode_ms":3667.9,"decode_ms":1077.8,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4749.8,"xrt_wall":2.316}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":46.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":40.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":39.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":22572.1,"xrt_compute":1.565,"load_ms":387.2,"mel_ms":51.0,"encode_ms":7456.6,"decode_ms":15064.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":22572.2,"xrt_wall":1.565}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":10474.5,"xrt_compute":1.05,"load_ms":384.6,"mel_ms":45.6,"encode_ms":7439.6,"decode_ms":2989.4,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":10474.7,"xrt_wall":1.05}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":27874.3,"xrt_compute":1.268,"load_ms":608.1,"mel_ms":54.0,"encode_ms":9436.2,"decode_ms":18384.1,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":27874.4,"xrt_wall":1.268}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":13137.6,"xrt_compute":0.837,"load_ms":608.4,"mel_ms":45.4,"encode_ms":9381.5,"decode_ms":3710.6,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":13137.8,"xrt_wall":0.837}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-small.en.json b/catalog/whisper-small.en.json index 3f4576a0..7314d642 100644 --- a/catalog/whisper-small.en.json +++ b/catalog/whisper-small.en.json @@ -31,39 +31,38 @@ {"quant":"Q4_K_M","filename":"whisper-small.en-Q4_K_M.gguf","size_bytes":171553856} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.14,"ci95":[5.47,6.87],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":576,"del":176,"ins":142},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.11,"ci95":[2.83,3.46],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1170,"del":229,"ins":248},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.97,"ci95":[2.77,3.2],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1168,"del":230,"ins":176},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.09,"ci95":[2.81,3.45],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1168,"del":227,"ins":242},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.97,"ci95":[2.77,3.21],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1174,"del":226,"ins":174},"empty_hyp":0,"utts_over_50pct":9}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.11,"ci95":[2.82,3.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1173,"del":234,"ins":244},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.09,"ci95":[2.86,3.34],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1194,"del":243,"ins":199},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.09,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.12,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.08,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.14,"ci95":[5.47,6.87],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":576,"del":176,"ins":142},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.11,"ci95":[2.83,3.46],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1170,"del":229,"ins":248},"empty_hyp":0,"utts_over_50pct":11,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":2.97,"ci95":[2.77,3.2],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1168,"del":230,"ins":176},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.09,"ci95":[2.81,3.45],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1168,"del":227,"ins":242},"empty_hyp":0,"utts_over_50pct":11,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.97,"ci95":[2.77,3.21],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1174,"del":226,"ins":174},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.11,"ci95":[2.82,3.49],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1173,"del":234,"ins":244},"empty_hyp":0,"utts_over_50pct":11,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.09,"ci95":[2.86,3.34],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1194,"del":243,"ins":199},"empty_hyp":0,"utts_over_50pct":12,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":1615.4,"xrt_compute":6.809,"load_ms":144.6,"mel_ms":17.7,"encode_ms":1283.2,"decode_ms":314.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1141.5,"xrt_compute":9.637,"load_ms":102.7,"mel_ms":17.8,"encode_ms":928.0,"decode_ms":195.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1416.9,"xrt_compute":7.763,"load_ms":82.1,"mel_ms":17.4,"encode_ms":985.8,"decode_ms":413.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":421.4,"xrt_compute":26.104,"load_ms":255.6,"mel_ms":18.1,"encode_ms":154.5,"decode_ms":248.8,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":235.3,"xrt_compute":46.746,"load_ms":169.2,"mel_ms":17.5,"encode_ms":158.9,"decode_ms":58.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":463.6,"xrt_compute":23.728,"load_ms":122.7,"mel_ms":18.1,"encode_ms":162.1,"decode_ms":283.4,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":107.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":107.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":106.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":102.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":12.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2520.9,"xrt_compute":14.015,"load_ms":77.8,"mel_ms":5.8,"encode_ms":933.8,"decode_ms":1581.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2521.0,"xrt_wall":14.015}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1127.6,"xrt_compute":9.755,"load_ms":82.4,"mel_ms":4.8,"encode_ms":937.0,"decode_ms":185.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1127.7,"xrt_wall":9.755}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2889.1,"xrt_compute":12.229,"load_ms":95.9,"mel_ms":5.5,"encode_ms":1100.6,"decode_ms":1783.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2889.2,"xrt_wall":12.229}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1310.6,"xrt_compute":8.393,"load_ms":83.6,"mel_ms":5.1,"encode_ms":1094.6,"decode_ms":210.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1310.6,"xrt_wall":8.393}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":107.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":107.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":106.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":102.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7163.0,"xrt_compute":4.933,"load_ms":178.6,"mel_ms":47.7,"encode_ms":2376.3,"decode_ms":4739.0,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7163.1,"xrt_wall":4.932}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2948.9,"xrt_compute":3.73,"load_ms":175.9,"mel_ms":42.4,"encode_ms":2274.9,"decode_ms":631.5,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2949.0,"xrt_wall":3.73}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8382.5,"xrt_compute":4.215,"load_ms":247.0,"mel_ms":49.5,"encode_ms":2821.8,"decode_ms":5511.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":8382.7,"xrt_wall":4.215}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3678.8,"xrt_compute":2.99,"load_ms":251.6,"mel_ms":45.8,"encode_ms":2834.7,"decode_ms":798.3,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3678.9,"xrt_wall":2.99}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":12.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-small.json b/catalog/whisper-small.json index c5ba44b2..12d2525e 100644 --- a/catalog/whisper-small.json +++ b/catalog/whisper-small.json @@ -25,9 +25,9 @@ "long_form_strategy": "chunked-unbounded", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"targets":["en"],"verified":false}, + "translate": {"supported":true,"verified":false,"targets":["en"],"pairs":null}, "lang_detect": {"supported":true,"verified":false}, - "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["segment"]}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -41,118 +41,118 @@ {"quant":"Q4_K_M","filename":"whisper-small-Q4_K_M.gguf","size_bytes":171630656} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":62.2,"ci95":[59.75,64.6],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2942,"del":371,"ins":327},"empty_hyp":1,"utts_over_50pct":184}, - {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":128.3,"ci95":[123.47,133.78],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7256,"del":1300,"ins":2432},"empty_hyp":5,"utts_over_50pct":516}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":32.15,"ci95":[30.52,33.87],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2186,"del":338,"ins":124},"empty_hyp":0,"utts_over_50pct":62}, - {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":104.15,"ci95":[103.27,105.12],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":27225,"del":19755,"ins":1962},"empty_hyp":11,"utts_over_50pct":984}, - {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":51.64,"ci95":[50.65,52.57],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7924,"del":703,"ins":629},"empty_hyp":0,"utts_over_50pct":461}, - {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":76.85,"ci95":[75.97,77.8],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13938,"del":972,"ins":1095},"empty_hyp":0,"utts_over_50pct":940}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":40.39,"ci95":[39.26,41.61],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4549,"del":565,"ins":610},"empty_hyp":0,"utts_over_50pct":184}, - {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":103.04,"ci95":[102.14,104.02],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20511,"del":24224,"ins":1398},"empty_hyp":14,"utts_over_50pct":920}, - {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":42.35,"ci95":[41.23,43.44],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6420,"del":792,"ins":761},"empty_hyp":0,"utts_over_50pct":284}, - {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":14.19,"ci95":[13.47,14.81],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2599,"del":377,"ins":463},"empty_hyp":0,"utts_over_50pct":10}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":40.57,"ci95":[39.32,41.83],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4568,"del":491,"ins":496},"empty_hyp":0,"utts_over_50pct":180}, - {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":64.47,"ci95":[63.31,65.55],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12549,"del":1076,"ins":3267},"empty_hyp":2,"utts_over_50pct":795}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":35.52,"ci95":[34.52,36.61],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5540,"del":637,"ins":983},"empty_hyp":1,"utts_over_50pct":179}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":9.86,"ci95":[9.23,10.49],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1401,"del":228,"ins":217},"empty_hyp":0,"utts_over_50pct":1}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":33.98,"ci95":[32.74,35.34],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4373,"del":466,"ins":317},"empty_hyp":0,"utts_over_50pct":98}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.51,"ci95":[5.88,7.22],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":626,"del":158,"ins":164},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":5.92,"ci95":[5.49,6.37],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1020,"del":192,"ins":169},"empty_hyp":0,"utts_over_50pct":3}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":54.79,"ci95":[53.58,55.93],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6485,"del":733,"ins":935},"empty_hyp":0,"utts_over_50pct":527}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":58.44,"ci95":[57.1,59.92],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9373,"del":771,"ins":1602},"empty_hyp":0,"utts_over_50pct":590}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":26.48,"ci95":[25.4,27.59],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3107,"del":358,"ins":452},"empty_hyp":0,"utts_over_50pct":75}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":28.52,"ci95":[27.52,29.53],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5541,"del":943,"ins":1053},"empty_hyp":0,"utts_over_50pct":81}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":13.3,"ci95":[12.47,14.19],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1820,"del":267,"ins":306},"empty_hyp":0,"utts_over_50pct":11}, - {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":32.72,"ci95":[31.82,33.69],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5810,"del":732,"ins":717},"empty_hyp":0,"utts_over_50pct":108}, - {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":104.02,"ci95":[103.44,104.59],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":37575,"del":7389,"ins":1833},"empty_hyp":3,"utts_over_50pct":1000}, - {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":94.21,"ci95":[92.9,95.9],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10866,"del":3080,"ins":1066},"empty_hyp":5,"utts_over_50pct":620}, - {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":46.06,"ci95":[44.34,47.8],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5157,"del":766,"ins":453},"empty_hyp":1,"utts_over_50pct":289}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":42.05,"ci95":[39.97,44.32],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4697,"del":2288,"ins":901},"empty_hyp":0,"utts_over_50pct":81}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":36.05,"ci95":[35.0,37.15],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5195,"del":606,"ins":599},"empty_hyp":0,"utts_over_50pct":163}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":42.39,"ci95":[41.32,43.49],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5727,"del":650,"ins":861},"empty_hyp":0,"utts_over_50pct":269}, - {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":87.84,"ci95":[86.83,88.93],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12647,"del":2219,"ins":1087},"empty_hyp":0,"utts_over_50pct":925}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":18.02,"ci95":[17.02,19.15],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1938,"del":197,"ins":309},"empty_hyp":0,"utts_over_50pct":33}, - {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":74.54,"ci95":[69.87,80.21],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":623,"del":42,"ins":105},"empty_hyp":0,"utts_over_50pct":43}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":7.97,"ci95":[7.4,8.52],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1284,"del":213,"ins":196},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":12.81,"ci95":[12.05,13.52],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3160,"del":507,"ins":514},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":130.64,"ci95":[125.94,135.97],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9677,"del":7454,"ins":5259},"empty_hyp":17,"utts_over_50pct":979}, - {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":73.54,"ci95":[72.52,74.64],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9347,"del":918,"ins":777},"empty_hyp":0,"utts_over_50pct":794}, - {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":116.96,"ci95":[113.31,120.85],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":28044,"del":34512,"ins":11959},"empty_hyp":29,"utts_over_50pct":771}, - {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":99.65,"ci95":[98.84,100.59],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15683,"del":24930,"ins":1374},"empty_hyp":59,"utts_over_50pct":838}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":7.7,"ci95":[6.65,8.76],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":751,"del":548,"ins":62},"empty_hyp":0,"utts_over_50pct":2}, - {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":110.02,"ci95":[107.69,112.73],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14841,"del":5194,"ins":3025},"empty_hyp":3,"utts_over_50pct":932}, - {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":98.65,"ci95":[95.84,101.91],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7129,"del":1357,"ins":1822},"empty_hyp":1,"utts_over_50pct":472}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":101.52,"ci95":[100.96,102.18],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35194,"del":1900,"ins":900},"empty_hyp":0,"utts_over_50pct":405}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":70.21,"ci95":[68.92,71.71],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10337,"del":639,"ins":1053},"empty_hyp":0,"utts_over_50pct":856}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":57.42,"ci95":[56.2,58.69],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7448,"del":609,"ins":795},"empty_hyp":0,"utts_over_50pct":533}, - {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":62.82,"ci95":[61.29,64.46],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14048,"del":2879,"ins":2561},"empty_hyp":0,"utts_over_50pct":714}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":41.53,"ci95":[40.36,42.67],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6896,"del":760,"ins":1099},"empty_hyp":0,"utts_over_50pct":283}, - {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":100.35,"ci95":[100.05,100.79],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12515,"del":41676,"ins":237},"empty_hyp":30,"utts_over_50pct":958}, - {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":142.37,"ci95":[136.73,148.04],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11557,"del":6971,"ins":7856},"empty_hyp":5,"utts_over_50pct":949}, - {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":63.66,"ci95":[62.16,65.15],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18096,"del":11034,"ins":3537},"empty_hyp":1,"utts_over_50pct":686}, - {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":21.48,"ci95":[20.38,22.72],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2669,"del":192,"ins":308},"empty_hyp":0,"utts_over_50pct":34}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":97.32,"ci95":[95.64,99.2],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14303,"del":5979,"ins":1355},"empty_hyp":1,"utts_over_50pct":926}, - {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":132.91,"ci95":[127.85,138.7],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33204,"del":24938,"ins":19602},"empty_hyp":10,"utts_over_50pct":880}, - {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":25.53,"ci95":[24.2,26.95],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1546,"del":193,"ins":206},"empty_hyp":0,"utts_over_50pct":20}, - {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":70.48,"ci95":[69.13,71.94],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14229,"del":5862,"ins":3409},"empty_hyp":4,"utts_over_50pct":653}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":18.48,"ci95":[17.29,19.57],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1183,"del":138,"ins":231},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":90.43,"ci95":[87.82,93.27],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16820,"del":3823,"ins":3231},"empty_hyp":3,"utts_over_50pct":973}, - {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":101.31,"ci95":[100.72,102.18],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15183,"del":10299,"ins":358},"empty_hyp":4,"utts_over_50pct":574}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":16.82,"ci95":[15.87,17.8],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1938,"del":216,"ins":266},"empty_hyp":0,"utts_over_50pct":18}, - {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":93.61,"ci95":[92.96,94.25],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9931,"del":2216,"ins":224},"empty_hyp":1,"utts_over_50pct":512}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":7.65,"ci95":[6.96,8.31],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1180,"del":185,"ins":278},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":33.88,"ci95":[32.65,35.07],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5666,"del":674,"ins":707},"empty_hyp":0,"utts_over_50pct":160}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":11.9,"ci95":[11.19,12.62],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1488,"del":163,"ins":146},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":112.24,"ci95":[110.08,114.51],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17543,"del":6065,"ins":2923},"empty_hyp":6,"utts_over_50pct":980}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":36.05,"ci95":[34.98,37.21],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4592,"del":442,"ins":462},"empty_hyp":2,"utts_over_50pct":136}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":52.7,"ci95":[51.43,53.95],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6902,"del":697,"ins":1104},"empty_hyp":0,"utts_over_50pct":441}, - {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":132.9,"ci95":[128.31,138.18],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8931,"del":6863,"ins":5470},"empty_hyp":11,"utts_over_50pct":925}, - {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":103.39,"ci95":[102.69,104.15],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":19764,"del":4416,"ins":824},"empty_hyp":3,"utts_over_50pct":1019}, - {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":44.91,"ci95":[42.81,47.03],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5295,"del":447,"ins":479},"empty_hyp":0,"utts_over_50pct":191}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":23.1,"ci95":[21.94,24.32],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2667,"del":409,"ins":478},"empty_hyp":0,"utts_over_50pct":51}, - {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":76.22,"ci95":[74.6,77.92],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5696,"del":914,"ins":1010},"empty_hyp":2,"utts_over_50pct":447}, - {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":35.35,"ci95":[33.42,37.78],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6572,"del":1889,"ins":3438},"empty_hyp":0,"utts_over_50pct":67}, - {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":102.23,"ci95":[101.21,103.53],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7500,"del":15074,"ins":537},"empty_hyp":55,"utts_over_50pct":472}, - {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":86.78,"ci95":[85.6,87.89],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9590,"del":681,"ins":1040},"empty_hyp":0,"utts_over_50pct":593}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":22.55,"ci95":[21.71,23.49],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11005,"del":6214,"ins":4771},"empty_hyp":0,"utts_over_50pct":20}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":15.95,"ci95":[14.93,17.0],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1651,"del":202,"ins":268},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":20.42,"ci95":[19.43,21.41],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2378,"del":272,"ins":285},"empty_hyp":0,"utts_over_50pct":29}, - {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":39.75,"ci95":[38.23,41.19],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2715,"del":339,"ins":324},"empty_hyp":0,"utts_over_50pct":49}, - {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":114.92,"ci95":[111.78,118.41],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12794,"del":2162,"ins":3394},"empty_hyp":15,"utts_over_50pct":862}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":22.47,"ci95":[21.57,23.47],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5010,"del":382,"ins":455},"empty_hyp":0,"utts_over_50pct":41}, - {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":118.5,"ci95":[114.83,122.44],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13451,"del":8340,"ins":4468},"empty_hyp":9,"utts_over_50pct":831}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":23.06,"ci95":[21.79,24.35],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6447,"del":1536,"ins":239},"empty_hyp":0,"utts_over_50pct":60}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.34,"ci95":[3.11,3.58],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1325,"del":245,"ins":199},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.33,"ci95":[3.11,3.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1324,"del":245,"ins":198},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.33,"ci95":[3.11,3.56],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1327,"del":243,"ins":195},"empty_hyp":0,"utts_over_50pct":12}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.33,"ci95":[3.11,3.56],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1331,"del":238,"ins":196},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.37,"ci95":[3.15,3.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1328,"del":240,"ins":219},"empty_hyp":0,"utts_over_50pct":14}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.4,"ci95":[3.18,3.64],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1367,"del":235,"ins":200},"empty_hyp":0,"utts_over_50pct":15}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.33,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.34,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":62.2,"ci95":[59.75,64.6],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2942,"del":371,"ins":327},"empty_hyp":1,"utts_over_50pct":184,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":128.3,"ci95":[123.47,133.78],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7256,"del":1300,"ins":2432},"empty_hyp":5,"utts_over_50pct":516,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":32.15,"ci95":[30.52,33.87],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2186,"del":338,"ins":124},"empty_hyp":0,"utts_over_50pct":62,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":104.15,"ci95":[103.27,105.12],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":27225,"del":19755,"ins":1962},"empty_hyp":11,"utts_over_50pct":984,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":51.64,"ci95":[50.65,52.57],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7924,"del":703,"ins":629},"empty_hyp":0,"utts_over_50pct":461,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":76.85,"ci95":[75.97,77.8],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13938,"del":972,"ins":1095},"empty_hyp":0,"utts_over_50pct":940,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":40.39,"ci95":[39.26,41.61],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4549,"del":565,"ins":610},"empty_hyp":0,"utts_over_50pct":184,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":103.04,"ci95":[102.14,104.02],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":20511,"del":24224,"ins":1398},"empty_hyp":14,"utts_over_50pct":920,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":42.35,"ci95":[41.23,43.44],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6420,"del":792,"ins":761},"empty_hyp":0,"utts_over_50pct":284,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":14.19,"ci95":[13.47,14.81],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2599,"del":377,"ins":463},"empty_hyp":0,"utts_over_50pct":10,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":40.57,"ci95":[39.32,41.83],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4568,"del":491,"ins":496},"empty_hyp":0,"utts_over_50pct":180,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":64.47,"ci95":[63.31,65.55],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12549,"del":1076,"ins":3267},"empty_hyp":2,"utts_over_50pct":795,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":35.52,"ci95":[34.52,36.61],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5540,"del":637,"ins":983},"empty_hyp":1,"utts_over_50pct":179,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":9.86,"ci95":[9.23,10.49],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1401,"del":228,"ins":217},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":33.98,"ci95":[32.74,35.34],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4373,"del":466,"ins":317},"empty_hyp":0,"utts_over_50pct":98,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":6.51,"ci95":[5.88,7.22],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":626,"del":158,"ins":164},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":5.92,"ci95":[5.49,6.37],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1020,"del":192,"ins":169},"empty_hyp":0,"utts_over_50pct":3,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":54.79,"ci95":[53.58,55.93],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6485,"del":733,"ins":935},"empty_hyp":0,"utts_over_50pct":527,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":58.44,"ci95":[57.1,59.92],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9373,"del":771,"ins":1602},"empty_hyp":0,"utts_over_50pct":590,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":26.48,"ci95":[25.4,27.59],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3107,"del":358,"ins":452},"empty_hyp":0,"utts_over_50pct":75,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":28.52,"ci95":[27.52,29.53],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5541,"del":943,"ins":1053},"empty_hyp":0,"utts_over_50pct":81,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":13.3,"ci95":[12.47,14.19],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1820,"del":267,"ins":306},"empty_hyp":0,"utts_over_50pct":11,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":32.72,"ci95":[31.82,33.69],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5810,"del":732,"ins":717},"empty_hyp":0,"utts_over_50pct":108,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":104.02,"ci95":[103.44,104.59],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":37575,"del":7389,"ins":1833},"empty_hyp":3,"utts_over_50pct":1000,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":94.21,"ci95":[92.9,95.9],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10866,"del":3080,"ins":1066},"empty_hyp":5,"utts_over_50pct":620,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":46.06,"ci95":[44.34,47.8],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5157,"del":766,"ins":453},"empty_hyp":1,"utts_over_50pct":289,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":42.05,"ci95":[39.97,44.32],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4697,"del":2288,"ins":901},"empty_hyp":0,"utts_over_50pct":81,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":36.05,"ci95":[35.0,37.15],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5195,"del":606,"ins":599},"empty_hyp":0,"utts_over_50pct":163,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":42.39,"ci95":[41.32,43.49],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5727,"del":650,"ins":861},"empty_hyp":0,"utts_over_50pct":269,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":87.84,"ci95":[86.83,88.93],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12647,"del":2219,"ins":1087},"empty_hyp":0,"utts_over_50pct":925,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":18.02,"ci95":[17.02,19.15],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1938,"del":197,"ins":309},"empty_hyp":0,"utts_over_50pct":33,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":74.54,"ci95":[69.87,80.21],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":623,"del":42,"ins":105},"empty_hyp":0,"utts_over_50pct":43,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":7.97,"ci95":[7.4,8.52],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1284,"del":213,"ins":196},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":12.81,"ci95":[12.05,13.52],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3160,"del":507,"ins":514},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":130.64,"ci95":[125.94,135.97],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9677,"del":7454,"ins":5259},"empty_hyp":17,"utts_over_50pct":979,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":73.54,"ci95":[72.52,74.64],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9347,"del":918,"ins":777},"empty_hyp":0,"utts_over_50pct":794,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":99.65,"ci95":[98.84,100.59],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15683,"del":24930,"ins":1374},"empty_hyp":59,"utts_over_50pct":838,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":7.7,"ci95":[6.65,8.76],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":751,"del":548,"ins":62},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":110.02,"ci95":[107.69,112.73],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14841,"del":5194,"ins":3025},"empty_hyp":3,"utts_over_50pct":932,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":98.65,"ci95":[95.84,101.91],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7129,"del":1357,"ins":1822},"empty_hyp":1,"utts_over_50pct":472,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":70.21,"ci95":[68.92,71.71],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10337,"del":639,"ins":1053},"empty_hyp":0,"utts_over_50pct":856,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":57.42,"ci95":[56.2,58.69],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7448,"del":609,"ins":795},"empty_hyp":0,"utts_over_50pct":533,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":62.82,"ci95":[61.29,64.46],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14048,"del":2879,"ins":2561},"empty_hyp":0,"utts_over_50pct":714,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":41.53,"ci95":[40.36,42.67],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6896,"del":760,"ins":1099},"empty_hyp":0,"utts_over_50pct":283,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":100.35,"ci95":[100.05,100.79],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12515,"del":41676,"ins":237},"empty_hyp":30,"utts_over_50pct":958,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":142.37,"ci95":[136.73,148.04],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11557,"del":6971,"ins":7856},"empty_hyp":5,"utts_over_50pct":949,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":63.66,"ci95":[62.16,65.15],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18096,"del":11034,"ins":3537},"empty_hyp":1,"utts_over_50pct":686,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":21.48,"ci95":[20.38,22.72],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2669,"del":192,"ins":308},"empty_hyp":0,"utts_over_50pct":34,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":97.32,"ci95":[95.64,99.2],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14303,"del":5979,"ins":1355},"empty_hyp":1,"utts_over_50pct":926,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":25.53,"ci95":[24.2,26.95],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1546,"del":193,"ins":206},"empty_hyp":0,"utts_over_50pct":20,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":70.48,"ci95":[69.13,71.94],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14229,"del":5862,"ins":3409},"empty_hyp":4,"utts_over_50pct":653,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":18.48,"ci95":[17.29,19.57],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1183,"del":138,"ins":231},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":90.43,"ci95":[87.82,93.27],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16820,"del":3823,"ins":3231},"empty_hyp":3,"utts_over_50pct":973,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":101.31,"ci95":[100.72,102.18],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15183,"del":10299,"ins":358},"empty_hyp":4,"utts_over_50pct":574,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":16.82,"ci95":[15.87,17.8],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1938,"del":216,"ins":266},"empty_hyp":0,"utts_over_50pct":18,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":93.61,"ci95":[92.96,94.25],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9931,"del":2216,"ins":224},"empty_hyp":1,"utts_over_50pct":512,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":7.65,"ci95":[6.96,8.31],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1180,"del":185,"ins":278},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":33.88,"ci95":[32.65,35.07],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5666,"del":674,"ins":707},"empty_hyp":0,"utts_over_50pct":160,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":11.9,"ci95":[11.19,12.62],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1488,"del":163,"ins":146},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":112.24,"ci95":[110.08,114.51],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17543,"del":6065,"ins":2923},"empty_hyp":6,"utts_over_50pct":980,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":36.05,"ci95":[34.98,37.21],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4592,"del":442,"ins":462},"empty_hyp":2,"utts_over_50pct":136,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":52.7,"ci95":[51.43,53.95],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6902,"del":697,"ins":1104},"empty_hyp":0,"utts_over_50pct":441,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":132.9,"ci95":[128.31,138.18],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8931,"del":6863,"ins":5470},"empty_hyp":11,"utts_over_50pct":925,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":103.39,"ci95":[102.69,104.15],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":19764,"del":4416,"ins":824},"empty_hyp":3,"utts_over_50pct":1019,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":44.91,"ci95":[42.81,47.03],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5295,"del":447,"ins":479},"empty_hyp":0,"utts_over_50pct":191,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":23.1,"ci95":[21.94,24.32],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2667,"del":409,"ins":478},"empty_hyp":0,"utts_over_50pct":51,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":76.22,"ci95":[74.6,77.92],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5696,"del":914,"ins":1010},"empty_hyp":2,"utts_over_50pct":447,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":35.35,"ci95":[33.42,37.78],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6572,"del":1889,"ins":3438},"empty_hyp":0,"utts_over_50pct":67,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":102.23,"ci95":[101.21,103.53],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7500,"del":15074,"ins":537},"empty_hyp":55,"utts_over_50pct":472,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":86.78,"ci95":[85.6,87.89],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9590,"del":681,"ins":1040},"empty_hyp":0,"utts_over_50pct":593,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":22.55,"ci95":[21.71,23.49],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11005,"del":6214,"ins":4771},"empty_hyp":0,"utts_over_50pct":20,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":15.95,"ci95":[14.93,17.0],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1651,"del":202,"ins":268},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":20.42,"ci95":[19.43,21.41],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2378,"del":272,"ins":285},"empty_hyp":0,"utts_over_50pct":29,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":39.75,"ci95":[38.23,41.19],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2715,"del":339,"ins":324},"empty_hyp":0,"utts_over_50pct":49,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":114.92,"ci95":[111.78,118.41],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12794,"del":2162,"ins":3394},"empty_hyp":15,"utts_over_50pct":862,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":22.47,"ci95":[21.57,23.47],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5010,"del":382,"ins":455},"empty_hyp":0,"utts_over_50pct":41,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":118.5,"ci95":[114.83,122.44],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13451,"del":8340,"ins":4468},"empty_hyp":9,"utts_over_50pct":831,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":23.06,"ci95":[21.79,24.35],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6447,"del":1536,"ins":239},"empty_hyp":0,"utts_over_50pct":60,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":3.34,"ci95":[3.11,3.58],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1325,"del":245,"ins":199},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":3.33,"ci95":[3.11,3.57],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1324,"del":245,"ins":198},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.33,"ci95":[3.11,3.56],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1327,"del":243,"ins":195},"empty_hyp":0,"utts_over_50pct":12,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.33,"ci95":[3.11,3.56],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1331,"del":238,"ins":196},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.37,"ci95":[3.15,3.6],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1328,"del":240,"ins":219},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.4,"ci95":[3.18,3.64],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1367,"del":235,"ins":200},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":116.96,"ci95":[113.31,120.85],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":28044,"del":34512,"ins":11959},"empty_hyp":29,"utts_over_50pct":771,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":101.52,"ci95":[100.96,102.18],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35194,"del":1900,"ins":900},"empty_hyp":0,"utts_over_50pct":405,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":132.91,"ci95":[127.85,138.7],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":33204,"del":24938,"ins":19602},"empty_hyp":10,"utts_over_50pct":880,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":1789.3,"xrt_compute":6.147,"load_ms":152.2,"mel_ms":17.8,"encode_ms":1297.5,"decode_ms":474.0,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1257.8,"xrt_compute":8.745,"load_ms":102.8,"mel_ms":17.8,"encode_ms":934.2,"decode_ms":305.8,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1340.9,"xrt_compute":8.203,"load_ms":67.1,"mel_ms":17.4,"encode_ms":1005.0,"decode_ms":318.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":358.6,"xrt_compute":30.679,"load_ms":255.5,"mel_ms":17.8,"encode_ms":154.5,"decode_ms":186.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":331.3,"xrt_compute":33.198,"load_ms":166.9,"mel_ms":18.1,"encode_ms":158.5,"decode_ms":154.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":323.5,"xrt_compute":33.999,"load_ms":109.7,"mel_ms":17.8,"encode_ms":162.1,"decode_ms":143.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":103.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":96.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":101.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":97.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":13.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2737.6,"xrt_compute":12.906,"load_ms":77.5,"mel_ms":5.9,"encode_ms":989.8,"decode_ms":1742.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2737.7,"xrt_wall":12.906}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1303.4,"xrt_compute":8.44,"load_ms":73.7,"mel_ms":5.2,"encode_ms":995.6,"decode_ms":302.6,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1303.4,"xrt_wall":8.439}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3006.7,"xrt_compute":11.751,"load_ms":99.6,"mel_ms":5.2,"encode_ms":1091.9,"decode_ms":1909.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3006.8,"xrt_wall":11.751}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1426.9,"xrt_compute":7.709,"load_ms":98.0,"mel_ms":5.2,"encode_ms":1090.7,"decode_ms":331.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1426.9,"xrt_wall":7.709}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":103.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":96.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":101.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":97.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7467.3,"xrt_compute":4.732,"load_ms":179.5,"mel_ms":50.9,"encode_ms":2377.2,"decode_ms":5039.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7467.4,"xrt_wall":4.731}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3266.7,"xrt_compute":3.367,"load_ms":178.0,"mel_ms":41.2,"encode_ms":2266.7,"decode_ms":958.8,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3266.8,"xrt_wall":3.367}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8906.3,"xrt_compute":3.967,"load_ms":244.0,"mel_ms":53.4,"encode_ms":2840.7,"decode_ms":6012.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":8906.5,"xrt_wall":3.967}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3948.1,"xrt_compute":2.786,"load_ms":243.9,"mel_ms":40.9,"encode_ms":2776.2,"decode_ms":1130.9,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3948.1,"xrt_wall":2.786}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":13.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-tiny.en.json b/catalog/whisper-tiny.en.json index e0571a8f..4c0f498e 100644 --- a/catalog/whisper-tiny.en.json +++ b/catalog/whisper-tiny.en.json @@ -31,40 +31,38 @@ {"quant":"Q4_K_M","filename":"whisper-tiny.en-Q4_K_M.gguf","size_bytes":43545248} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":10.72,"ci95":[9.89,11.58],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1097,"del":172,"ins":292},"empty_hyp":0,"utts_over_50pct":6}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":5.77,"ci95":[5.46,6.09],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2290,"del":343,"ins":429},"empty_hyp":0,"utts_over_50pct":26}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":5.78,"ci95":[5.46,6.09],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2284,"del":352,"ins":429},"empty_hyp":0,"utts_over_50pct":25}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.72,"ci95":[5.41,6.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2275,"del":327,"ins":432},"empty_hyp":0,"utts_over_50pct":25}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":5.83,"ci95":[5.51,6.16],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2296,"del":345,"ins":449},"empty_hyp":0,"utts_over_50pct":26}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.91,"ci95":[5.58,6.23],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2324,"del":336,"ins":475},"empty_hyp":0,"utts_over_50pct":27}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":5.96,"ci95":[5.64,6.3],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2318,"del":345,"ins":499},"empty_hyp":0,"utts_over_50pct":29}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":5.77,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":5.8,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.89,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":5.99,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":10.72,"ci95":[9.89,11.58],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1097,"del":172,"ins":292},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":5.77,"ci95":[5.46,6.09],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2290,"del":343,"ins":429},"empty_hyp":0,"utts_over_50pct":26,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":5.78,"ci95":[5.46,6.09],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2284,"del":352,"ins":429},"empty_hyp":0,"utts_over_50pct":25,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":5.72,"ci95":[5.41,6.03],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2275,"del":327,"ins":432},"empty_hyp":0,"utts_over_50pct":25,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":5.83,"ci95":[5.51,6.16],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2296,"del":345,"ins":449},"empty_hyp":0,"utts_over_50pct":26,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":5.91,"ci95":[5.58,6.23],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2324,"del":336,"ins":475},"empty_hyp":0,"utts_over_50pct":27,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":5.96,"ci95":[5.64,6.3],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2318,"del":345,"ins":499},"empty_hyp":0,"utts_over_50pct":29,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":224.5,"xrt_compute":48.989,"load_ms":65.0,"mel_ms":17.5,"encode_ms":153.7,"decode_ms":53.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":180.0,"xrt_compute":61.102,"load_ms":59.4,"mel_ms":17.2,"encode_ms":121.6,"decode_ms":41.3,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":163.6,"xrt_compute":67.251,"load_ms":57.4,"mel_ms":17.2,"encode_ms":125.9,"decode_ms":20.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":73.3,"xrt_compute":150.082,"load_ms":66.8,"mel_ms":17.4,"encode_ms":23.0,"decode_ms":32.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":69.1,"xrt_compute":159.267,"load_ms":57.9,"mel_ms":17.3,"encode_ms":23.7,"decode_ms":28.1,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":51.7,"xrt_compute":212.768,"load_ms":62.0,"mel_ms":17.2,"encode_ms":23.7,"decode_ms":10.7,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":92.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":90.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":66.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":280.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":323.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":278.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":281.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":25.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":29.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":65.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":56.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":65.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":56.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":381.7,"xrt_compute":92.554,"load_ms":41.8,"mel_ms":5.0,"encode_ms":125.2,"decode_ms":251.6,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":381.8,"xrt_wall":92.544}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":161.4,"xrt_compute":68.147,"load_ms":50.9,"mel_ms":5.0,"encode_ms":124.6,"decode_ms":31.7,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":161.4,"xrt_wall":68.135}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":389.4,"xrt_compute":90.744,"load_ms":52.4,"mel_ms":5.3,"encode_ms":129.5,"decode_ms":254.6,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":389.4,"xrt_wall":90.735}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":165.0,"xrt_compute":66.669,"load_ms":55.3,"mel_ms":4.2,"encode_ms":128.7,"decode_ms":32.0,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":165.0,"xrt_wall":66.656}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":280.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":323.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":278.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":281.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1087.9,"xrt_compute":32.476,"load_ms":95.7,"mel_ms":41.0,"encode_ms":285.9,"decode_ms":761.0,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1088.0,"xrt_wall":32.473}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":435.6,"xrt_compute":25.252,"load_ms":93.4,"mel_ms":41.7,"encode_ms":283.0,"decode_ms":110.9,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":435.8,"xrt_wall":25.242}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1187.0,"xrt_compute":29.766,"load_ms":95.3,"mel_ms":44.4,"encode_ms":326.1,"decode_ms":816.5,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1187.1,"xrt_wall":29.764}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":492.8,"xrt_compute":22.32,"load_ms":96.5,"mel_ms":47.4,"encode_ms":323.5,"decode_ms":121.9,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":493.0,"xrt_wall":22.311}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":65.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":56.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":65.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":56.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-tiny.json b/catalog/whisper-tiny.json index 3e66545e..cc5cd58d 100644 --- a/catalog/whisper-tiny.json +++ b/catalog/whisper-tiny.json @@ -25,9 +25,9 @@ "long_form_strategy": "chunked-unbounded", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"targets":["en"],"verified":false}, + "translate": {"supported":true,"verified":false,"targets":["en"],"pairs":null}, "lang_detect": {"supported":true,"verified":false}, - "timestamps": {"supported":true,"granularities":["segment"],"verified":false}, + "timestamps": {"supported":true,"verified":false,"granularities":["segment"]}, "streaming": {"supported":false}, "diarize": {"supported":false}, "batching": {"supported":true,"verified":false} @@ -41,122 +41,118 @@ {"quant":"Q4_K_M","filename":"whisper-tiny-Q4_K_M.gguf","size_bytes":43621792} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":95.3,"ci95":[92.75,97.9],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3884,"del":1188,"ins":505},"empty_hyp":0,"utts_over_50pct":261}, - {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":122.14,"ci95":[118.55,125.97],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5399,"del":3160,"ins":1901},"empty_hyp":39,"utts_over_50pct":516}, - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":67.48,"ci95":[65.37,69.5],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4632,"del":603,"ins":323},"empty_hyp":0,"utts_over_50pct":341}, - {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":100.56,"ci95":[100.15,101.06],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10468,"del":36519,"ins":270},"empty_hyp":28,"utts_over_50pct":984}, - {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":94.73,"ci95":[93.35,96.23],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13375,"del":2022,"ins":1583},"empty_hyp":6,"utts_over_50pct":922}, - {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":96.03,"ci95":[95.33,96.92],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17196,"del":1334,"ins":1469},"empty_hyp":1,"utts_over_50pct":966}, - {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":84.87,"ci95":[83.52,86.32],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9159,"del":1504,"ins":1364},"empty_hyp":0,"utts_over_50pct":650}, - {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":100.37,"ci95":[100.05,100.83],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12551,"del":32205,"ins":180},"empty_hyp":13,"utts_over_50pct":920}, - {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":87.22,"ci95":[85.97,88.45],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12685,"del":1895,"ins":1842},"empty_hyp":8,"utts_over_50pct":916}, - {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":46.33,"ci95":[45.13,47.46],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8391,"del":1048,"ins":1786},"empty_hyp":0,"utts_over_50pct":358}, - {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":87.17,"ci95":[85.89,88.48],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9464,"del":1164,"ins":1308},"empty_hyp":0,"utts_over_50pct":711}, - {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":116.68,"ci95":[114.19,119.56],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18637,"del":4958,"ins":6979},"empty_hyp":3,"utts_over_50pct":1021}, - {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":88.42,"ci95":[86.83,90.31],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12334,"del":2877,"ins":2611},"empty_hyp":2,"utts_over_50pct":890}, - {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":31.56,"ci95":[30.53,32.7],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4414,"del":540,"ins":952},"empty_hyp":0,"utts_over_50pct":119}, - {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":77.76,"ci95":[75.95,79.8],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9028,"del":1488,"ins":1283},"empty_hyp":0,"utts_over_50pct":610}, - {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":13.84,"ci95":[12.85,14.94],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1377,"del":216,"ins":421},"empty_hyp":0,"utts_over_50pct":16}, - {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":18.95,"ci95":[18.18,19.77],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3282,"del":439,"ins":697},"empty_hyp":0,"utts_over_50pct":20}, - {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":101.33,"ci95":[99.81,102.93],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11464,"del":946,"ins":2668},"empty_hyp":2,"utts_over_50pct":891}, - {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":100.18,"ci95":[97.96,102.5],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15164,"del":2249,"ins":2723},"empty_hyp":1,"utts_over_50pct":871}, - {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":68.58,"ci95":[67.17,70.11],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7738,"del":675,"ins":1732},"empty_hyp":1,"utts_over_50pct":720}, - {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":70.63,"ci95":[69.17,72.18],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13748,"del":1873,"ins":3045},"empty_hyp":0,"utts_over_50pct":805}, - {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":44.19,"ci95":[42.58,45.78],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5719,"del":578,"ins":1655},"empty_hyp":0,"utts_over_50pct":227}, - {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":59.44,"ci95":[58.41,60.62],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10333,"del":1492,"ins":1359},"empty_hyp":0,"utts_over_50pct":630}, - {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":100.26,"ci95":[100.02,100.57],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17845,"del":27120,"ins":140},"empty_hyp":3,"utts_over_50pct":1000}, - {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":105.17,"ci95":[102.75,108.2],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8174,"del":7090,"ins":1494},"empty_hyp":17,"utts_over_50pct":621}, - {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":77.35,"ci95":[75.88,78.82],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8820,"del":927,"ins":960},"empty_hyp":1,"utts_over_50pct":698}, - {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":101.52,"ci95":[100.33,103.06],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7832,"del":10913,"ins":296},"empty_hyp":3,"utts_over_50pct":418}, - {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":84.36,"ci95":[83.29,85.63],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11902,"del":1309,"ins":1763},"empty_hyp":0,"utts_over_50pct":891}, - {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":90.54,"ci95":[88.94,92.19],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10744,"del":2052,"ins":2665},"empty_hyp":10,"utts_over_50pct":883}, - {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":110.5,"ci95":[108.71,112.3],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11422,"del":6734,"ins":1913},"empty_hyp":8,"utts_over_50pct":932}, - {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":60.49,"ci95":[58.53,62.76],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6055,"del":1143,"ins":1005},"empty_hyp":1,"utts_over_50pct":406}, - {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":115.88,"ci95":[108.2,125.7],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":773,"del":211,"ins":213},"empty_hyp":0,"utts_over_50pct":46}, - {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":31.24,"ci95":[30.23,32.38],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4968,"del":699,"ins":971},"empty_hyp":0,"utts_over_50pct":114}, - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":39.38,"ci95":[37.82,40.98],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9377,"del":1337,"ins":2142},"empty_hyp":0,"utts_over_50pct":127}, - {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":110.34,"ci95":[108.68,112.16],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7520,"del":9618,"ins":1774},"empty_hyp":52,"utts_over_50pct":979}, - {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":136.56,"ci95":[131.42,141.63],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11205,"del":3587,"ins":5713},"empty_hyp":20,"utts_over_50pct":856}, - {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":111.78,"ci95":[108.85,114.96],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":27592,"del":34973,"ins":8650},"empty_hyp":132,"utts_over_50pct":771}, - {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":100.32,"ci95":[100.1,100.62],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14520,"del":27608,"ins":143},"empty_hyp":18,"utts_over_50pct":838}, - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":19.07,"ci95":[17.69,20.43],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2539,"del":686,"ins":147},"empty_hyp":0,"utts_over_50pct":5}, - {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":99.69,"ci95":[98.93,100.53],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11165,"del":9208,"ins":522},"empty_hyp":10,"utts_over_50pct":934}, - {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":103.55,"ci95":[101.39,106.01],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5722,"del":4118,"ins":980},"empty_hyp":13,"utts_over_50pct":478}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":105.48,"ci95":[102.73,108.71],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13913,"del":22957,"ins":2606},"empty_hyp":21,"utts_over_50pct":405}, - {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":105.0,"ci95":[103.27,106.96],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13218,"del":2585,"ins":2187},"empty_hyp":11,"utts_over_50pct":986}, - {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":95.98,"ci95":[94.86,97.2],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12048,"del":1009,"ins":1739},"empty_hyp":0,"utts_over_50pct":849}, - {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":96.27,"ci95":[95.25,97.41],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13868,"del":14682,"ins":1315},"empty_hyp":18,"utts_over_50pct":1006}, - {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":78.61,"ci95":[77.42,79.85],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12387,"del":2356,"ins":1831},"empty_hyp":6,"utts_over_50pct":933}, - {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":100.03,"ci95":[99.99,100.1],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12520,"del":41715,"ins":19},"empty_hyp":51,"utts_over_50pct":958}, - {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":110.21,"ci95":[107.98,112.39],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9447,"del":9084,"ins":1893},"empty_hyp":12,"utts_over_50pct":949}, - {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":100.82,"ci95":[100.19,101.75],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17619,"del":33662,"ins":455},"empty_hyp":38,"utts_over_50pct":1015}, - {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":62.17,"ci95":[60.25,64.27],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6685,"del":1333,"ins":1153},"empty_hyp":8,"utts_over_50pct":465}, - {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":99.85,"ci95":[99.1,100.67],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10746,"del":10997,"ins":456},"empty_hyp":39,"utts_over_50pct":926}, - {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":108.53,"ci95":[106.54,110.87],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16331,"del":41931,"ins":5222},"empty_hyp":251,"utts_over_50pct":880}, - {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":67.36,"ci95":[65.41,69.32],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3845,"del":511,"ins":776},"empty_hyp":1,"utts_over_50pct":299}, - {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":101.3,"ci95":[100.35,102.76],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11005,"del":22325,"ins":447},"empty_hyp":17,"utts_over_50pct":726}, - {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":54.86,"ci95":[53.09,56.75],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3348,"del":336,"ins":923},"empty_hyp":0,"utts_over_50pct":206}, - {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":96.44,"ci95":[94.89,98.25],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14923,"del":8583,"ins":1953},"empty_hyp":2,"utts_over_50pct":995}, - {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":100.54,"ci95":[100.06,101.23],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7117,"del":18386,"ins":141},"empty_hyp":53,"utts_over_50pct":574}, - {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":54.22,"ci95":[52.62,55.68],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5939,"del":575,"ins":1287},"empty_hyp":1,"utts_over_50pct":420}, - {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":101.04,"ci95":[100.5,101.76],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5378,"del":7820,"ins":155},"empty_hyp":12,"utts_over_50pct":512}, - {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":24.07,"ci95":[23.02,25.16],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3734,"del":478,"ins":956},"empty_hyp":0,"utts_over_50pct":63}, - {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":82.43,"ci95":[81.13,83.73],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12506,"del":2196,"ins":2443},"empty_hyp":1,"utts_over_50pct":835}, - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":35.64,"ci95":[34.38,36.82],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4164,"del":528,"ins":691},"empty_hyp":0,"utts_over_50pct":145}, - {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":105.42,"ci95":[103.11,108.5],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7382,"del":16251,"ins":1286},"empty_hyp":48,"utts_over_50pct":980}, - {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":82.2,"ci95":[81.01,83.37],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9724,"del":1396,"ins":1412},"empty_hyp":24,"utts_over_50pct":768}, - {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":91.29,"ci95":[90.06,92.5],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11428,"del":2007,"ins":1641},"empty_hyp":1,"utts_over_50pct":831}, - {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":118.33,"ci95":[115.19,121.59],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7804,"del":8054,"ins":3075},"empty_hyp":29,"utts_over_50pct":925}, - {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":105.31,"ci95":[103.9,106.84],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9314,"del":14793,"ins":1363},"empty_hyp":54,"utts_over_50pct":1019}, - {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":89.2,"ci95":[87.49,90.79],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9565,"del":1404,"ins":1387},"empty_hyp":2,"utts_over_50pct":688}, - {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":59.36,"ci95":[57.64,61.07],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6557,"del":743,"ins":1833},"empty_hyp":0,"utts_over_50pct":482}, - {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":99.96,"ci95":[98.66,101.47],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5865,"del":3501,"ins":627},"empty_hyp":26,"utts_over_50pct":487}, - {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":87.46,"ci95":[84.77,90.18],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15264,"del":4859,"ins":9319},"empty_hyp":7,"utts_over_50pct":541}, - {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":101.18,"ci95":[100.3,102.48],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5218,"del":17381,"ins":275},"empty_hyp":40,"utts_over_50pct":472}, - {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":102.39,"ci95":[100.82,104.35],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10290,"del":1778,"ins":1278},"empty_hyp":4,"utts_over_50pct":600}, - {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":54.82,"ci95":[53.08,56.73],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":28128,"del":15641,"ins":9688},"empty_hyp":12,"utts_over_50pct":377}, - {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":47.98,"ci95":[46.56,49.5],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4900,"del":561,"ins":919},"empty_hyp":1,"utts_over_50pct":312}, - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":57.49,"ci95":[56.26,58.8],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6515,"del":705,"ins":1042},"empty_hyp":0,"utts_over_50pct":479}, - {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":71.42,"ci95":[68.68,74.47],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4547,"del":931,"ins":591},"empty_hyp":0,"utts_over_50pct":264}, - {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":103.19,"ci95":[102.2,104.3],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6596,"del":9262,"ins":619},"empty_hyp":42,"utts_over_50pct":862}, - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":64.49,"ci95":[62.89,65.97],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13099,"del":2224,"ins":1456},"empty_hyp":3,"utts_over_50pct":600}, - {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":102.29,"ci95":[101.01,103.99],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8727,"del":13191,"ins":748},"empty_hyp":9,"utts_over_50pct":831}, - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":41.91,"ci95":[40.85,42.93],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12681,"del":1869,"ins":393},"empty_hyp":0,"utts_over_50pct":265}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":7.49,"ci95":[7.16,7.87],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2956,"del":382,"ins":633},"empty_hyp":0,"utts_over_50pct":37}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":7.48,"ci95":[7.15,7.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2955,"del":382,"ins":632},"empty_hyp":0,"utts_over_50pct":35}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.52,"ci95":[7.18,7.88],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2964,"del":383,"ins":642},"empty_hyp":0,"utts_over_50pct":38}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":7.54,"ci95":[7.21,7.9],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2966,"del":384,"ins":649},"empty_hyp":0,"utts_over_50pct":38}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":7.82,"ci95":[7.37,8.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2996,"del":401,"ins":749},"empty_hyp":0,"utts_over_50pct":47}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":7.78,"ci95":[7.44,8.15],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3033,"del":353,"ins":738},"empty_hyp":0,"utts_over_50pct":44}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":7.54,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":7.49,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.53,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":7.63,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":7.63,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":7.76,"ci95":[null,null],"n_utts":2620,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null} + {"dataset":"fleurs","split":"test","language":"af","quant":"Q8_0","metric":"wer","err_pct":95.3,"ci95":[92.75,97.9],"n_utts":264,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3884,"del":1188,"ins":505},"empty_hyp":0,"utts_over_50pct":261,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"am","quant":"Q8_0","metric":"wer","err_pct":122.14,"ci95":[118.55,125.97],"n_utts":516,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5399,"del":3160,"ins":1901},"empty_hyp":39,"utts_over_50pct":516,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":67.48,"ci95":[65.37,69.5],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4632,"del":603,"ins":323},"empty_hyp":0,"utts_over_50pct":341,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"as","quant":"Q8_0","metric":"wer","err_pct":100.56,"ci95":[100.15,101.06],"n_utts":984,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10468,"del":36519,"ins":270},"empty_hyp":28,"utts_over_50pct":984,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"az","quant":"Q8_0","metric":"wer","err_pct":94.73,"ci95":[93.35,96.23],"n_utts":923,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13375,"del":2022,"ins":1583},"empty_hyp":6,"utts_over_50pct":922,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"be","quant":"Q8_0","metric":"wer","err_pct":96.03,"ci95":[95.33,96.92],"n_utts":967,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17196,"del":1334,"ins":1469},"empty_hyp":1,"utts_over_50pct":966,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bg","quant":"Q8_0","metric":"wer","err_pct":84.87,"ci95":[83.52,86.32],"n_utts":658,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9159,"del":1504,"ins":1364},"empty_hyp":0,"utts_over_50pct":650,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bn","quant":"Q8_0","metric":"wer","err_pct":100.37,"ci95":[100.05,100.83],"n_utts":920,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12551,"del":32205,"ins":180},"empty_hyp":13,"utts_over_50pct":920,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"bs","quant":"Q8_0","metric":"wer","err_pct":87.22,"ci95":[85.97,88.45],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12685,"del":1895,"ins":1842},"empty_hyp":8,"utts_over_50pct":916,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ca","quant":"Q8_0","metric":"wer","err_pct":46.33,"ci95":[45.13,47.46],"n_utts":940,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8391,"del":1048,"ins":1786},"empty_hyp":0,"utts_over_50pct":358,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cs","quant":"Q8_0","metric":"wer","err_pct":87.17,"ci95":[85.89,88.48],"n_utts":723,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9464,"del":1164,"ins":1308},"empty_hyp":0,"utts_over_50pct":711,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"cy","quant":"Q8_0","metric":"wer","err_pct":116.68,"ci95":[114.19,119.56],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":18637,"del":4958,"ins":6979},"empty_hyp":3,"utts_over_50pct":1021,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"da","quant":"Q8_0","metric":"wer","err_pct":88.42,"ci95":[86.83,90.31],"n_utts":930,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12334,"del":2877,"ins":2611},"empty_hyp":2,"utts_over_50pct":890,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":31.56,"ci95":[30.53,32.7],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4414,"del":540,"ins":952},"empty_hyp":0,"utts_over_50pct":119,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"el","quant":"Q8_0","metric":"wer","err_pct":77.76,"ci95":[75.95,79.8],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9028,"del":1488,"ins":1283},"empty_hyp":0,"utts_over_50pct":610,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":13.84,"ci95":[12.85,14.94],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1377,"del":216,"ins":421},"empty_hyp":0,"utts_over_50pct":16,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"es","quant":"Q8_0","metric":"wer","err_pct":18.95,"ci95":[18.18,19.77],"n_utts":908,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3282,"del":439,"ins":697},"empty_hyp":0,"utts_over_50pct":20,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"et","quant":"Q8_0","metric":"wer","err_pct":101.33,"ci95":[99.81,102.93],"n_utts":893,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11464,"del":946,"ins":2668},"empty_hyp":2,"utts_over_50pct":891,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fa","quant":"Q8_0","metric":"wer","err_pct":100.18,"ci95":[97.96,102.5],"n_utts":871,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15164,"del":2249,"ins":2723},"empty_hyp":1,"utts_over_50pct":871,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fi","quant":"Q8_0","metric":"wer","err_pct":68.58,"ci95":[67.17,70.11],"n_utts":918,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7738,"del":675,"ins":1732},"empty_hyp":1,"utts_over_50pct":720,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fil","quant":"Q8_0","metric":"wer","err_pct":70.63,"ci95":[69.17,72.18],"n_utts":964,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13748,"del":1873,"ins":3045},"empty_hyp":0,"utts_over_50pct":805,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"fr","quant":"Q8_0","metric":"wer","err_pct":44.19,"ci95":[42.58,45.78],"n_utts":676,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5719,"del":578,"ins":1655},"empty_hyp":0,"utts_over_50pct":227,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gl","quant":"Q8_0","metric":"wer","err_pct":59.44,"ci95":[58.41,60.62],"n_utts":927,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10333,"del":1492,"ins":1359},"empty_hyp":0,"utts_over_50pct":630,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"gu","quant":"Q8_0","metric":"wer","err_pct":100.26,"ci95":[100.02,100.57],"n_utts":1000,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17845,"del":27120,"ins":140},"empty_hyp":3,"utts_over_50pct":1000,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ha","quant":"Q8_0","metric":"wer","err_pct":105.17,"ci95":[102.75,108.2],"n_utts":621,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8174,"del":7090,"ins":1494},"empty_hyp":17,"utts_over_50pct":621,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"he","quant":"Q8_0","metric":"wer","err_pct":77.35,"ci95":[75.88,78.82],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8820,"del":927,"ins":960},"empty_hyp":1,"utts_over_50pct":698,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hi","quant":"Q8_0","metric":"wer","err_pct":101.52,"ci95":[100.33,103.06],"n_utts":418,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7832,"del":10913,"ins":296},"empty_hyp":3,"utts_over_50pct":418,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hr","quant":"Q8_0","metric":"wer","err_pct":84.36,"ci95":[83.29,85.63],"n_utts":914,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11902,"del":1309,"ins":1763},"empty_hyp":0,"utts_over_50pct":891,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hu","quant":"Q8_0","metric":"wer","err_pct":90.54,"ci95":[88.94,92.19],"n_utts":905,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10744,"del":2052,"ins":2665},"empty_hyp":10,"utts_over_50pct":883,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"hy","quant":"Q8_0","metric":"wer","err_pct":110.5,"ci95":[108.71,112.3],"n_utts":932,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11422,"del":6734,"ins":1913},"empty_hyp":8,"utts_over_50pct":932,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"id","quant":"Q8_0","metric":"wer","err_pct":60.49,"ci95":[58.53,62.76],"n_utts":687,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6055,"del":1143,"ins":1005},"empty_hyp":1,"utts_over_50pct":406,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"is","quant":"Q8_0","metric":"wer","err_pct":115.88,"ci95":[108.2,125.7],"n_utts":46,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":773,"del":211,"ins":213},"empty_hyp":0,"utts_over_50pct":46,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"it","quant":"Q8_0","metric":"wer","err_pct":31.24,"ci95":[30.23,32.38],"n_utts":865,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4968,"del":699,"ins":971},"empty_hyp":0,"utts_over_50pct":114,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":39.38,"ci95":[37.82,40.98],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9377,"del":1337,"ins":2142},"empty_hyp":0,"utts_over_50pct":127,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ka","quant":"Q8_0","metric":"wer","err_pct":110.34,"ci95":[108.68,112.16],"n_utts":979,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7520,"del":9618,"ins":1774},"empty_hyp":52,"utts_over_50pct":979,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kk","quant":"Q8_0","metric":"wer","err_pct":136.56,"ci95":[131.42,141.63],"n_utts":856,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11205,"del":3587,"ins":5713},"empty_hyp":20,"utts_over_50pct":856,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"kn","quant":"Q8_0","metric":"wer","err_pct":100.32,"ci95":[100.1,100.62],"n_utts":838,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14520,"del":27608,"ins":143},"empty_hyp":18,"utts_over_50pct":838,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":19.07,"ci95":[17.69,20.43],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2539,"del":686,"ins":147},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lb","quant":"Q8_0","metric":"wer","err_pct":99.69,"ci95":[98.93,100.53],"n_utts":934,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11165,"del":9208,"ins":522},"empty_hyp":10,"utts_over_50pct":934,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ln","quant":"Q8_0","metric":"wer","err_pct":103.55,"ci95":[101.39,106.01],"n_utts":478,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5722,"del":4118,"ins":980},"empty_hyp":13,"utts_over_50pct":478,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lt","quant":"Q8_0","metric":"wer","err_pct":105.0,"ci95":[103.27,106.96],"n_utts":986,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13218,"del":2585,"ins":2187},"empty_hyp":11,"utts_over_50pct":986,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lv","quant":"Q8_0","metric":"wer","err_pct":95.98,"ci95":[94.86,97.2],"n_utts":851,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12048,"del":1009,"ins":1739},"empty_hyp":0,"utts_over_50pct":849,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mi","quant":"Q8_0","metric":"wer","err_pct":96.27,"ci95":[95.25,97.41],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13868,"del":14682,"ins":1315},"empty_hyp":18,"utts_over_50pct":1006,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mk","quant":"Q8_0","metric":"wer","err_pct":78.61,"ci95":[77.42,79.85],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12387,"del":2356,"ins":1831},"empty_hyp":6,"utts_over_50pct":933,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ml","quant":"Q8_0","metric":"wer","err_pct":100.03,"ci95":[99.99,100.1],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12520,"del":41715,"ins":19},"empty_hyp":51,"utts_over_50pct":958,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mn","quant":"Q8_0","metric":"wer","err_pct":110.21,"ci95":[107.98,112.39],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9447,"del":9084,"ins":1893},"empty_hyp":12,"utts_over_50pct":949,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mr","quant":"Q8_0","metric":"wer","err_pct":100.82,"ci95":[100.19,101.75],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":17619,"del":33662,"ins":455},"empty_hyp":38,"utts_over_50pct":1015,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ms","quant":"Q8_0","metric":"wer","err_pct":62.17,"ci95":[60.25,64.27],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6685,"del":1333,"ins":1153},"empty_hyp":8,"utts_over_50pct":465,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mt","quant":"Q8_0","metric":"wer","err_pct":99.85,"ci95":[99.1,100.67],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10746,"del":10997,"ins":456},"empty_hyp":39,"utts_over_50pct":926,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nb","quant":"Q8_0","metric":"wer","err_pct":67.36,"ci95":[65.41,69.32],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3845,"del":511,"ins":776},"empty_hyp":1,"utts_over_50pct":299,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ne","quant":"Q8_0","metric":"wer","err_pct":101.3,"ci95":[100.35,102.76],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11005,"del":22325,"ins":447},"empty_hyp":17,"utts_over_50pct":726,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"nl","quant":"Q8_0","metric":"wer","err_pct":54.86,"ci95":[53.09,56.75],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3348,"del":336,"ins":923},"empty_hyp":0,"utts_over_50pct":206,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"oc","quant":"Q8_0","metric":"wer","err_pct":96.44,"ci95":[94.89,98.25],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":14923,"del":8583,"ins":1953},"empty_hyp":2,"utts_over_50pct":995,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pa","quant":"Q8_0","metric":"wer","err_pct":100.54,"ci95":[100.06,101.23],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7117,"del":18386,"ins":141},"empty_hyp":53,"utts_over_50pct":574,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pl","quant":"Q8_0","metric":"wer","err_pct":54.22,"ci95":[52.62,55.68],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5939,"del":575,"ins":1287},"empty_hyp":1,"utts_over_50pct":420,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ps","quant":"Q8_0","metric":"wer","err_pct":101.04,"ci95":[100.5,101.76],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5378,"del":7820,"ins":155},"empty_hyp":12,"utts_over_50pct":512,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"pt","quant":"Q8_0","metric":"wer","err_pct":24.07,"ci95":[23.02,25.16],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3734,"del":478,"ins":956},"empty_hyp":0,"utts_over_50pct":63,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ro","quant":"Q8_0","metric":"wer","err_pct":82.43,"ci95":[81.13,83.73],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12506,"del":2196,"ins":2443},"empty_hyp":1,"utts_over_50pct":835,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":35.64,"ci95":[34.38,36.82],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4164,"del":528,"ins":691},"empty_hyp":0,"utts_over_50pct":145,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sd","quant":"Q8_0","metric":"wer","err_pct":105.42,"ci95":[103.11,108.5],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7382,"del":16251,"ins":1286},"empty_hyp":48,"utts_over_50pct":980,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sk","quant":"Q8_0","metric":"wer","err_pct":82.2,"ci95":[81.01,83.37],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9724,"del":1396,"ins":1412},"empty_hyp":24,"utts_over_50pct":768,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sl","quant":"Q8_0","metric":"wer","err_pct":91.29,"ci95":[90.06,92.5],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":11428,"del":2007,"ins":1641},"empty_hyp":1,"utts_over_50pct":831,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sn","quant":"Q8_0","metric":"wer","err_pct":118.33,"ci95":[115.19,121.59],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":7804,"del":8054,"ins":3075},"empty_hyp":29,"utts_over_50pct":925,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"so","quant":"Q8_0","metric":"wer","err_pct":105.31,"ci95":[103.9,106.84],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9314,"del":14793,"ins":1363},"empty_hyp":54,"utts_over_50pct":1019,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sr","quant":"Q8_0","metric":"wer","err_pct":89.2,"ci95":[87.49,90.79],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":9565,"del":1404,"ins":1387},"empty_hyp":2,"utts_over_50pct":688,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sv","quant":"Q8_0","metric":"wer","err_pct":59.36,"ci95":[57.64,61.07],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6557,"del":743,"ins":1833},"empty_hyp":0,"utts_over_50pct":482,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"sw","quant":"Q8_0","metric":"wer","err_pct":99.96,"ci95":[98.66,101.47],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5865,"del":3501,"ins":627},"empty_hyp":26,"utts_over_50pct":487,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ta","quant":"Q8_0","metric":"wer","err_pct":87.46,"ci95":[84.77,90.18],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":15264,"del":4859,"ins":9319},"empty_hyp":7,"utts_over_50pct":541,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"te","quant":"Q8_0","metric":"wer","err_pct":101.18,"ci95":[100.3,102.48],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":5218,"del":17381,"ins":275},"empty_hyp":40,"utts_over_50pct":472,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tg","quant":"Q8_0","metric":"wer","err_pct":102.39,"ci95":[100.82,104.35],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":10290,"del":1778,"ins":1278},"empty_hyp":4,"utts_over_50pct":600,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"th","quant":"Q8_0","metric":"cer","err_pct":54.82,"ci95":[53.08,56.73],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":28128,"del":15641,"ins":9688},"empty_hyp":12,"utts_over_50pct":377,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"tr","quant":"Q8_0","metric":"wer","err_pct":47.98,"ci95":[46.56,49.5],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4900,"del":561,"ins":919},"empty_hyp":1,"utts_over_50pct":312,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":57.49,"ci95":[56.26,58.8],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6515,"del":705,"ins":1042},"empty_hyp":0,"utts_over_50pct":479,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ur","quant":"Q8_0","metric":"wer","err_pct":71.42,"ci95":[68.68,74.47],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":4547,"del":931,"ins":591},"empty_hyp":0,"utts_over_50pct":264,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uz","quant":"Q8_0","metric":"wer","err_pct":103.19,"ci95":[102.2,104.3],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":6596,"del":9262,"ins":619},"empty_hyp":42,"utts_over_50pct":862,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":64.49,"ci95":[62.89,65.97],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13099,"del":2224,"ins":1456},"empty_hyp":3,"utts_over_50pct":600,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"yo","quant":"Q8_0","metric":"wer","err_pct":102.29,"ci95":[101.01,103.99],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":8727,"del":13191,"ins":748},"empty_hyp":9,"utts_over_50pct":831,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":41.91,"ci95":[40.85,42.93],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":12681,"del":1869,"ins":393},"empty_hyp":0,"utts_over_50pct":265,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F32","metric":"wer","err_pct":7.49,"ci95":[7.16,7.87],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2956,"del":382,"ins":633},"empty_hyp":0,"utts_over_50pct":37,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"F16","metric":"wer","err_pct":7.48,"ci95":[7.15,7.85],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2955,"del":382,"ins":632},"empty_hyp":0,"utts_over_50pct":35,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.52,"ci95":[7.18,7.88],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2964,"del":383,"ins":642},"empty_hyp":0,"utts_over_50pct":38,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":7.54,"ci95":[7.21,7.9],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2966,"del":384,"ins":649},"empty_hyp":0,"utts_over_50pct":38,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":7.82,"ci95":[7.37,8.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2996,"del":401,"ins":749},"empty_hyp":0,"utts_over_50pct":47,"measurement_provenance":"legacy-published"}, + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":7.78,"ci95":[7.44,8.15],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3033,"del":353,"ins":738},"empty_hyp":0,"utts_over_50pct":44,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":111.78,"ci95":[108.85,114.96],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":27592,"del":34973,"ins":8650},"empty_hyp":132,"utts_over_50pct":771,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":105.48,"ci95":[102.73,108.71],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":13913,"del":22957,"ins":2606},"empty_hyp":21,"utts_over_50pct":405,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":108.53,"ci95":[106.54,110.87],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":16331,"del":41931,"ins":5222},"empty_hyp":251,"utts_over_50pct":880,"measurement_provenance":"legacy-published"} ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": 1, + "timestamps": "none" + }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":238.9,"xrt_compute":46.048,"load_ms":63.3,"mel_ms":17.8,"encode_ms":152.9,"decode_ms":68.2,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":185.2,"xrt_compute":59.392,"load_ms":59.3,"mel_ms":17.6,"encode_ms":122.1,"decode_ms":45.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":229.2,"xrt_compute":48.002,"load_ms":64.7,"mel_ms":17.4,"encode_ms":145.2,"decode_ms":66.5,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":92.1,"xrt_compute":119.477,"load_ms":89.2,"mel_ms":18.0,"encode_ms":23.2,"decode_ms":50.9,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":89.1,"xrt_compute":123.519,"load_ms":57.7,"mel_ms":17.5,"encode_ms":23.4,"decode_ms":48.2,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":90.7,"xrt_compute":121.245,"load_ms":72.2,"mel_ms":17.3,"encode_ms":23.4,"decode_ms":50.0,"engine_sha":"11156dd","measured_on":"2026-04-26","thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":90.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":64.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":89.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":63.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":301.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":290.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":301.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":302.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":20.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":66.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":52.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":66.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":55.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":390.3,"xrt_compute":90.515,"load_ms":52.2,"mel_ms":5.6,"encode_ms":125.3,"decode_ms":259.5,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":390.4,"xrt_wall":90.508}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":169.7,"xrt_compute":64.806,"load_ms":51.2,"mel_ms":3.9,"encode_ms":124.5,"decode_ms":41.4,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":169.8,"xrt_wall":64.795}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":396.2,"xrt_compute":89.169,"load_ms":55.7,"mel_ms":5.1,"encode_ms":128.9,"decode_ms":262.2,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":396.3,"xrt_wall":89.16}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":174.7,"xrt_compute":62.972,"load_ms":52.6,"mel_ms":4.0,"encode_ms":128.4,"decode_ms":42.2,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":174.7,"xrt_wall":62.961}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":301.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":290.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":301.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":302.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1139.2,"xrt_compute":31.014,"load_ms":95.6,"mel_ms":43.5,"encode_ms":291.6,"decode_ms":804.1,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1139.3,"xrt_wall":31.012}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":466.3,"xrt_compute":23.589,"load_ms":136.9,"mel_ms":38.8,"encode_ms":281.9,"decode_ms":145.6,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":466.5,"xrt_wall":23.579}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1228.3,"xrt_compute":28.764,"load_ms":100.3,"mel_ms":50.9,"encode_ms":328.2,"decode_ms":849.3,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1228.4,"xrt_wall":28.762}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":530.6,"xrt_compute":20.73,"load_ms":119.7,"mel_ms":45.7,"encode_ms":325.3,"decode_ms":159.6,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":530.8,"xrt_wall":20.724}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":66.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":52.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":66.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":55.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/docs/_templates/model-card.md.j2 b/docs/_templates/model-card.md.j2 index 2b5dc72f..6729841f 100644 --- a/docs/_templates/model-card.md.j2 +++ b/docs/_templates/model-card.md.j2 @@ -140,12 +140,7 @@ Wall-clock latency, mean over iterations after warmup. Speedup over realtime in Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models {{ variant }} \ - --quants q8_0,q4_k_m \ - --samples jfk \ - --iters 3 --warmup 1 \ - --name {{ variant }}-publication +uv run scripts/bench/run.py --profile --models {{ variant }} ``` {% else %} Performance numbers are pending. Run `uv run scripts/bench/run.py --models {{ variant }}` to generate them. diff --git a/docs/models/canary-180m-flash.md b/docs/models/canary-180m-flash.md index c0799ca5..4bd8726c 100644 --- a/docs/models/canary-180m-flash.md +++ b/docs/models/canary-180m-flash.md @@ -27,14 +27,16 @@ pinned 2026-05-08. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [canary-180m-flash-F32.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-F32.gguf) | 721 MB | 1.94% | -| F16 | [canary-180m-flash-F16.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-F16.gguf) | 364 MB | 1.94% | -| Q8_0 | [canary-180m-flash-Q8_0.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-Q8_0.gguf) | 208 MB | 1.93% | -| Q6_K | [canary-180m-flash-Q6_K.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-Q6_K.gguf) | 168 MB | 1.93% | -| Q5_K_M | [canary-180m-flash-Q5_K_M.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-Q5_K_M.gguf) | 151 MB | 1.90% | -| Q4_K_M | [canary-180m-flash-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-Q4_K_M.gguf) | 133 MB | 1.93% | +| F32 | [canary-180m-flash-F32.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-F32.gguf) | 756 MB | 1.94% | +| F16 | [canary-180m-flash-F16.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-F16.gguf) | 382 MB | 1.94% | +| Q8_0 | [canary-180m-flash-Q8_0.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-Q8_0.gguf) | 218 MB | 1.93% | +| Q6_K | [canary-180m-flash-Q6_K.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-Q6_K.gguf) | 176 MB | 1.93% | +| Q5_K_M | [canary-180m-flash-Q5_K_M.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-Q5_K_M.gguf) | 159 MB | 1.90% | +| Q4_K_M | [canary-180m-flash-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-Q4_K_M.gguf) | 139 MB | 1.93% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.94%. diff --git a/docs/models/canary-1b-flash.md b/docs/models/canary-1b-flash.md index 0148f79c..4e79394d 100644 --- a/docs/models/canary-1b-flash.md +++ b/docs/models/canary-1b-flash.md @@ -23,14 +23,16 @@ pinned 2026-05-08. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [canary-1b-flash-F32.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-F32.gguf) | 3.3 GB | 1.62% | -| F16 | [canary-1b-flash-F16.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-F16.gguf) | 1.7 GB | 1.62% | -| Q8_0 | [canary-1b-flash-Q8_0.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-Q8_0.gguf) | 1.0 GB | 1.62% | -| Q6_K | [canary-1b-flash-Q6_K.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-Q6_K.gguf) | 818 MB | 1.65% | -| Q5_K_M | [canary-1b-flash-Q5_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-Q5_K_M.gguf) | 734 MB | 1.64% | -| Q4_K_M | [canary-1b-flash-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-Q4_K_M.gguf) | 646 MB | 1.59% | +| F32 | [canary-1b-flash-F32.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-F32.gguf) | 3.56 GB | 1.62% | +| F16 | [canary-1b-flash-F16.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-F16.gguf) | 1.79 GB | 1.62% | +| Q8_0 | [canary-1b-flash-Q8_0.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-Q8_0.gguf) | 1.05 GB | 1.62% | +| Q6_K | [canary-1b-flash-Q6_K.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-Q6_K.gguf) | 858 MB | 1.65% | +| Q5_K_M | [canary-1b-flash-Q5_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-Q5_K_M.gguf) | 770 MB | 1.64% | +| Q4_K_M | [canary-1b-flash-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-Q4_K_M.gguf) | 677 MB | 1.59% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.62%. diff --git a/docs/models/canary-1b-v2.md b/docs/models/canary-1b-v2.md index 6358f791..9eacbb7b 100644 --- a/docs/models/canary-1b-v2.md +++ b/docs/models/canary-1b-v2.md @@ -35,14 +35,16 @@ pinned 2026-05-08. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [canary-1b-v2-F32.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-F32.gguf) | 3.7 GB | 1.92% | -| F16 | [canary-1b-v2-F16.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-F16.gguf) | 1.8 GB | 1.92% | -| Q8_0 | [canary-1b-v2-Q8_0.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-Q8_0.gguf) | 1.1 GB | 1.91% | -| Q6_K | [canary-1b-v2-Q6_K.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-Q6_K.gguf) | 889 MB | 1.94% | -| Q5_K_M | [canary-1b-v2-Q5_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-Q5_K_M.gguf) | 798 MB | 1.93% | -| Q4_K_M | [canary-1b-v2-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-Q4_K_M.gguf) | 701 MB | 1.91% | +| F32 | [canary-1b-v2-F32.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-F32.gguf) | 3.92 GB | 1.92% | +| F16 | [canary-1b-v2-F16.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-F16.gguf) | 1.97 GB | 1.92% | +| Q8_0 | [canary-1b-v2-Q8_0.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-Q8_0.gguf) | 1.14 GB | 1.91% | +| Q6_K | [canary-1b-v2-Q6_K.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-Q6_K.gguf) | 932 MB | 1.94% | +| Q5_K_M | [canary-1b-v2-Q5_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-Q5_K_M.gguf) | 837 MB | 1.93% | +| Q4_K_M | [canary-1b-v2-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-Q4_K_M.gguf) | 735 MB | 1.91% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.92%. diff --git a/docs/models/canary-1b.md b/docs/models/canary-1b.md index 6b893ff7..b474b2a8 100644 --- a/docs/models/canary-1b.md +++ b/docs/models/canary-1b.md @@ -27,14 +27,16 @@ pinned 2026-05-08. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [canary-1b-F32.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-F32.gguf) | 3.8 GB | 1.55% | -| F16 | [canary-1b-F16.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-F16.gguf) | 1.9 GB | 1.55% | -| Q8_0 | [canary-1b-Q8_0.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-Q8_0.gguf) | 1.1 GB | 1.55% | -| Q6_K | [canary-1b-Q6_K.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-Q6_K.gguf) | 891 MB | 1.57% | -| Q5_K_M | [canary-1b-Q5_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-Q5_K_M.gguf) | 799 MB | 1.57% | -| Q4_K_M | [canary-1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-Q4_K_M.gguf) | 696 MB | 1.55% | +| F32 | [canary-1b-F32.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-F32.gguf) | 4.09 GB | 1.55% | +| F16 | [canary-1b-F16.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-F16.gguf) | 2.05 GB | 1.55% | +| Q8_0 | [canary-1b-Q8_0.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-Q8_0.gguf) | 1.16 GB | 1.55% | +| Q6_K | [canary-1b-Q6_K.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-Q6_K.gguf) | 934 MB | 1.57% | +| Q5_K_M | [canary-1b-Q5_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-Q5_K_M.gguf) | 838 MB | 1.57% | +| Q4_K_M | [canary-1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-Q4_K_M.gguf) | 730 MB | 1.55% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.55%. diff --git a/docs/models/canary-qwen-2.5b.md b/docs/models/canary-qwen-2.5b.md index 3aef2ecb..4155ce02 100644 --- a/docs/models/canary-qwen-2.5b.md +++ b/docs/models/canary-qwen-2.5b.md @@ -32,14 +32,16 @@ exact per-session value. See the [input-length contract](../input-limits.md). ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [canary-qwen-2.5b-BF16.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-BF16.gguf) | 4.73 GB | 1.63% | -| F16 | [canary-qwen-2.5b-F16.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-F16.gguf) | 4.73 GB | 1.63% | -| Q8_0 | [canary-qwen-2.5b-Q8_0.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-Q8_0.gguf) | 2.61 GB | 1.63% | -| Q6_K | [canary-qwen-2.5b-Q6_K.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-Q6_K.gguf) | 2.06 GB | 1.63% | -| Q5_K_M | [canary-qwen-2.5b-Q5_K_M.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-Q5_K_M.gguf) | 1.85 GB | 1.63% | -| Q4_K_M | [canary-qwen-2.5b-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-Q4_K_M.gguf) | 1.62 GB | 1.63% | +| BF16 | [canary-qwen-2.5b-BF16.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-BF16.gguf) | 5.08 GB | 1.63% | +| F16 | [canary-qwen-2.5b-F16.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-F16.gguf) | 5.08 GB | 1.63% | +| Q8_0 | [canary-qwen-2.5b-Q8_0.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-Q8_0.gguf) | 2.80 GB | 1.63% | +| Q6_K | [canary-qwen-2.5b-Q6_K.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-Q6_K.gguf) | 2.21 GB | 1.63% | +| Q5_K_M | [canary-qwen-2.5b-Q5_K_M.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-Q5_K_M.gguf) | 1.98 GB | 1.63% | +| Q4_K_M | [canary-qwen-2.5b-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-Q4_K_M.gguf) | 1.74 GB | 1.63% | + WER measured on the full LibriSpeech `test-clean` split (2620 utterances) with the Whisper-style English text normalizer and jiwer 3.x. The diff --git a/docs/models/cohere-transcribe-03-2026.md b/docs/models/cohere-transcribe-03-2026.md index f605605b..bd8abe6a 100644 --- a/docs/models/cohere-transcribe-03-2026.md +++ b/docs/models/cohere-transcribe-03-2026.md @@ -28,14 +28,16 @@ it into shorter segments. See the [input-length contract](../input-limits.md). ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [cohere-transcribe-03-2026-BF16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-BF16.gguf) | 4.10 GB | 1.26% | -| F16 | [cohere-transcribe-03-2026-F16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-F16.gguf) | 4.11 GB | 1.26% | -| Q8_0 | [cohere-transcribe-03-2026-Q8_0.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-Q8_0.gguf) | 2.41 GB | 1.27% | -| Q6_K | [cohere-transcribe-03-2026-Q6_K.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-Q6_K.gguf) | 1.97 GB | 1.27% | -| Q5_K_M | [cohere-transcribe-03-2026-Q5_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-Q5_K_M.gguf) | 1.76 GB | 1.25% | -| Q4_K_M | [cohere-transcribe-03-2026-Q4_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-Q4_K_M.gguf) | 1.55 GB | 1.25% | +| BF16 | [cohere-transcribe-03-2026-BF16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-BF16.gguf) | 4.11 GB | 1.26% | +| F16 | [cohere-transcribe-03-2026-F16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-F16.gguf) | 4.11 GB | 1.26% | +| Q8_0 | [cohere-transcribe-03-2026-Q8_0.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-Q8_0.gguf) | 2.41 GB | 1.27% | +| Q6_K | [cohere-transcribe-03-2026-Q6_K.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-Q6_K.gguf) | 1.97 GB | 1.27% | +| Q5_K_M | [cohere-transcribe-03-2026-Q5_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-Q5_K_M.gguf) | 1.77 GB | 1.25% | +| Q4_K_M | [cohere-transcribe-03-2026-Q4_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-Q4_K_M.gguf) | 1.56 GB | 1.24% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. BF16 reference baseline: 1.26%. diff --git a/docs/models/cohere-transcribe-arabic-07-2026.md b/docs/models/cohere-transcribe-arabic-07-2026.md index dab9f280..22ab0835 100644 --- a/docs/models/cohere-transcribe-arabic-07-2026.md +++ b/docs/models/cohere-transcribe-arabic-07-2026.md @@ -29,14 +29,16 @@ it into shorter segments. See the [input-length contract](../input-limits.md). ## Download -| Quantization | Download | Size | WER (FLEURS Arabic test) | + +| Quantization | Download | Size | WER (FLEURS Arabic test) | | --- | --- | ---: | ---: | -| BF16 | [cohere-transcribe-arabic-07-2026-BF16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-BF16.gguf) | 4.10 GB | 11.02% | -| F16 | [cohere-transcribe-arabic-07-2026-F16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-F16.gguf) | 4.11 GB | 11.00% | -| Q8_0 | [cohere-transcribe-arabic-07-2026-Q8_0.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q8_0.gguf) | 2.41 GB | 11.06% | -| Q6_K | [cohere-transcribe-arabic-07-2026-Q6_K.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q6_K.gguf) | 1.97 GB | 11.07% | -| Q5_K_M | [cohere-transcribe-arabic-07-2026-Q5_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q5_K_M.gguf) | 1.77 GB | 10.95% | -| Q4_K_M | [cohere-transcribe-arabic-07-2026-Q4_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q4_K_M.gguf) | 1.56 GB | 11.18% | +| BF16 | [cohere-transcribe-arabic-07-2026-BF16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-BF16.gguf) | 4.11 GB | - | +| F16 | [cohere-transcribe-arabic-07-2026-F16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-F16.gguf) | 4.11 GB | - | +| Q8_0 | [cohere-transcribe-arabic-07-2026-Q8_0.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q8_0.gguf) | 2.41 GB | 11.06% | +| Q6_K | [cohere-transcribe-arabic-07-2026-Q6_K.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q6_K.gguf) | 1.97 GB | - | +| Q5_K_M | [cohere-transcribe-arabic-07-2026-Q5_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q5_K_M.gguf) | 1.77 GB | - | +| Q4_K_M | [cohere-transcribe-arabic-07-2026-Q4_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q4_K_M.gguf) | 1.56 GB | - | + WER is measured on the full FLEURS Arabic (`ar_eg`) test split (428 utterances) with greedy decoding and no external LM, scored with the Whisper diff --git a/docs/models/diar_streaming_sortformer_4spk-v2.1.md b/docs/models/diar_streaming_sortformer_4spk-v2.1.md index 9c2f44d1..f5feb3a6 100644 --- a/docs/models/diar_streaming_sortformer_4spk-v2.1.md +++ b/docs/models/diar_streaming_sortformer_4spk-v2.1.md @@ -24,11 +24,11 @@ pinned 2026-07-19. ## Download -| Quantization | Download | Size | DER (AMI IHM test) | +| Quantization | Download | Size | DER (AMI IHM test) | | --- | --- | ---: | ---: | -| F32 | [diar_streaming_sortformer_4spk-v2.1-F32.gguf](https://huggingface.co/handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf/resolve/main/diar_streaming_sortformer_4spk-v2.1-F32.gguf) | 471 MB | 14.59% | -| F16 | [diar_streaming_sortformer_4spk-v2.1-F16.gguf](https://huggingface.co/handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf/resolve/main/diar_streaming_sortformer_4spk-v2.1-F16.gguf) | 237 MB | 14.23% | -| Q8_0 | [diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf](https://huggingface.co/handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf/resolve/main/diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf) | 139 MB | 14.73% | +| F32 | [diar_streaming_sortformer_4spk-v2.1-F32.gguf](https://huggingface.co/handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf/resolve/main/diar_streaming_sortformer_4spk-v2.1-F32.gguf) | 471 MB | 14.59% | +| F16 | [diar_streaming_sortformer_4spk-v2.1-F16.gguf](https://huggingface.co/handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf/resolve/main/diar_streaming_sortformer_4spk-v2.1-F16.gguf) | 237 MB | 14.23% | +| Q8_0 | [diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf](https://huggingface.co/handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf/resolve/main/diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf) | 139 MB | 14.73% | DER is measured on the full AMI IHM test set (16 meetings, ~9 h) against forced-alignment RTTMs with dihard3-dev post-processing, collar 0.0, diff --git a/docs/models/fun-asr-mlt-nano-2512.md b/docs/models/fun-asr-mlt-nano-2512.md index a7e34600..640de7f2 100644 --- a/docs/models/fun-asr-mlt-nano-2512.md +++ b/docs/models/fun-asr-mlt-nano-2512.md @@ -44,14 +44,16 @@ pinned 2026-05-06. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [Fun-ASR-MLT-Nano-2512-BF16.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-BF16.gguf) | 1590 MB | 1.74% | -| F16 | [Fun-ASR-MLT-Nano-2512-F16.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-F16.gguf) | 1590 MB | 1.74% | -| Q8_0 | [Fun-ASR-MLT-Nano-2512-Q8_0.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-Q8_0.gguf) | 850 MB | 1.74% | -| Q6_K | [Fun-ASR-MLT-Nano-2512-Q6_K.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-Q6_K.gguf) | 659 MB | 1.69% | -| Q5_K_M | [Fun-ASR-MLT-Nano-2512-Q5_K_M.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-Q5_K_M.gguf) | 602 MB | 1.77% | -| Q4_K_M | [Fun-ASR-MLT-Nano-2512-Q4_K_M.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-Q4_K_M.gguf) | 531 MB | 1.89% | +| BF16 | [Fun-ASR-MLT-Nano-2512-BF16.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-BF16.gguf) | 1.67 GB | 1.74% | +| F16 | [Fun-ASR-MLT-Nano-2512-F16.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-F16.gguf) | 1.67 GB | 1.74% | +| Q8_0 | [Fun-ASR-MLT-Nano-2512-Q8_0.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-Q8_0.gguf) | 891 MB | 1.74% | +| Q6_K | [Fun-ASR-MLT-Nano-2512-Q6_K.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-Q6_K.gguf) | 691 MB | 1.69% | +| Q5_K_M | [Fun-ASR-MLT-Nano-2512-Q5_K_M.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-Q5_K_M.gguf) | 631 MB | 1.77% | +| Q4_K_M | [Fun-ASR-MLT-Nano-2512-Q4_K_M.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-Q4_K_M.gguf) | 557 MB | 1.89% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy LLM decoding via the bundled Qwen3-0.6B head. diff --git a/docs/models/fun-asr-nano-2512.md b/docs/models/fun-asr-nano-2512.md index 4ac5a283..e0035103 100644 --- a/docs/models/fun-asr-nano-2512.md +++ b/docs/models/fun-asr-nano-2512.md @@ -32,14 +32,16 @@ pinned 2026-05-06. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [Fun-ASR-Nano-2512-BF16.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-BF16.gguf) | 1590 MB | 1.78% | -| F16 | [Fun-ASR-Nano-2512-F16.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-F16.gguf) | 1590 MB | 1.79% | -| Q8_0 | [Fun-ASR-Nano-2512-Q8_0.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-Q8_0.gguf) | 850 MB | 1.79% | -| Q6_K | [Fun-ASR-Nano-2512-Q6_K.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-Q6_K.gguf) | 659 MB | 1.78% | -| Q5_K_M | [Fun-ASR-Nano-2512-Q5_K_M.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-Q5_K_M.gguf) | 602 MB | 1.82% | -| Q4_K_M | [Fun-ASR-Nano-2512-Q4_K_M.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-Q4_K_M.gguf) | 531 MB | 1.92% | +| BF16 | [Fun-ASR-Nano-2512-BF16.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-BF16.gguf) | 1.67 GB | 1.78% | +| F16 | [Fun-ASR-Nano-2512-F16.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-F16.gguf) | 1.67 GB | 1.79% | +| Q8_0 | [Fun-ASR-Nano-2512-Q8_0.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-Q8_0.gguf) | 891 MB | 1.79% | +| Q6_K | [Fun-ASR-Nano-2512-Q6_K.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-Q6_K.gguf) | 691 MB | 1.78% | +| Q5_K_M | [Fun-ASR-Nano-2512-Q5_K_M.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-Q5_K_M.gguf) | 631 MB | 1.82% | +| Q4_K_M | [Fun-ASR-Nano-2512-Q4_K_M.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-Q4_K_M.gguf) | 557 MB | 1.92% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy LLM decoding via the bundled Qwen3-0.6B head. Publisher diff --git a/docs/models/gigaam-v3-ctc.md b/docs/models/gigaam-v3-ctc.md index 046d7265..a64547c2 100644 --- a/docs/models/gigaam-v3-ctc.md +++ b/docs/models/gigaam-v3-ctc.md @@ -31,14 +31,16 @@ pinned 2026-05-12. ## Download -| Quantization | Download | Size | WER (FLEURS ru) | + +| Quantization | Download | Size | WER (FLEURS ru) | | --- | --- | ---: | ---: | -| F32 | [gigaam-v3-ctc-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-F32.gguf) | 842 MB | 8.42% | -| F16 | [gigaam-v3-ctc-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-F16.gguf) | 428 MB | 8.42% | -| Q8_0 | [gigaam-v3-ctc-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q8_0.gguf) | 259 MB | 8.40% | -| Q6_K | [gigaam-v3-ctc-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q6_K.gguf) | 216 MB | 8.38% | -| Q5_K_M | [gigaam-v3-ctc-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q5_K_M.gguf) | 195 MB | 8.29% | -| Q4_K_M | [gigaam-v3-ctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q4_K_M.gguf) | 174 MB | 8.42% | +| F32 | [gigaam-v3-ctc-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-F32.gguf) | 883 MB | - | +| F16 | [gigaam-v3-ctc-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-F16.gguf) | 449 MB | - | +| Q8_0 | [gigaam-v3-ctc-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q8_0.gguf) | 272 MB | 8.42% | +| Q6_K | [gigaam-v3-ctc-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q6_K.gguf) | 226 MB | - | +| Q5_K_M | [gigaam-v3-ctc-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q5_K_M.gguf) | 205 MB | - | +| Q4_K_M | [gigaam-v3-ctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q4_K_M.gguf) | 182 MB | - | + WER is measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: **8.42%**. diff --git a/docs/models/gigaam-v3-e2e-ctc.md b/docs/models/gigaam-v3-e2e-ctc.md index 2d81f8b4..0f7de6f5 100644 --- a/docs/models/gigaam-v3-e2e-ctc.md +++ b/docs/models/gigaam-v3-e2e-ctc.md @@ -31,14 +31,16 @@ pinned 2026-05-12. ## Download -| Quantization | Download | Size | WER (FLEURS ru) | + +| Quantization | Download | Size | WER (FLEURS ru) | | --- | --- | ---: | ---: | -| F32 | [gigaam-v3-e2e-ctc-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-F32.gguf) | 843 MB | 5.50% | -| F16 | [gigaam-v3-e2e-ctc-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-F16.gguf) | 428 MB | 5.50% | -| Q8_0 | [gigaam-v3-e2e-ctc-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q8_0.gguf) | 260 MB | 5.50% | -| Q6_K | [gigaam-v3-e2e-ctc-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q6_K.gguf) | 216 MB | 5.56% | -| Q5_K_M | [gigaam-v3-e2e-ctc-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q5_K_M.gguf) | 195 MB | 5.58% | -| Q4_K_M | [gigaam-v3-e2e-ctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q4_K_M.gguf) | 174 MB | 5.57% | +| F32 | [gigaam-v3-e2e-ctc-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-F32.gguf) | 884 MB | - | +| F16 | [gigaam-v3-e2e-ctc-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-F16.gguf) | 449 MB | - | +| Q8_0 | [gigaam-v3-e2e-ctc-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q8_0.gguf) | 272 MB | 5.53% | +| Q6_K | [gigaam-v3-e2e-ctc-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q6_K.gguf) | 226 MB | - | +| Q5_K_M | [gigaam-v3-e2e-ctc-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q5_K_M.gguf) | 205 MB | - | +| Q4_K_M | [gigaam-v3-e2e-ctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q4_K_M.gguf) | 182 MB | - | + WER is measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: **5.50%**. diff --git a/docs/models/gigaam-v3-e2e-rnnt.md b/docs/models/gigaam-v3-e2e-rnnt.md index 75b9eb4a..ed9d829b 100644 --- a/docs/models/gigaam-v3-e2e-rnnt.md +++ b/docs/models/gigaam-v3-e2e-rnnt.md @@ -31,14 +31,16 @@ pinned 2026-05-12. ## Download -| Quantization | Download | Size | WER (FLEURS ru) | + +| Quantization | Download | Size | WER (FLEURS ru) | | --- | --- | ---: | ---: | -| F32 | [gigaam-v3-e2e-rnnt-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-F32.gguf) | 849 MB | 5.35% | -| F16 | [gigaam-v3-e2e-rnnt-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-F16.gguf) | 431 MB | 5.35% | -| Q8_0 | [gigaam-v3-e2e-rnnt-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q8_0.gguf) | 261 MB | 5.36% | -| Q6_K | [gigaam-v3-e2e-rnnt-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q6_K.gguf) | 217 MB | 5.37% | -| Q5_K_M | [gigaam-v3-e2e-rnnt-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q5_K_M.gguf) | 197 MB | 5.42% | -| Q4_K_M | [gigaam-v3-e2e-rnnt-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q4_K_M.gguf) | 175 MB | 5.36% | +| F32 | [gigaam-v3-e2e-rnnt-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-F32.gguf) | 890 MB | - | +| F16 | [gigaam-v3-e2e-rnnt-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-F16.gguf) | 452 MB | - | +| Q8_0 | [gigaam-v3-e2e-rnnt-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q8_0.gguf) | 274 MB | 5.35% | +| Q6_K | [gigaam-v3-e2e-rnnt-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q6_K.gguf) | 228 MB | - | +| Q5_K_M | [gigaam-v3-e2e-rnnt-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q5_K_M.gguf) | 206 MB | - | +| Q4_K_M | [gigaam-v3-e2e-rnnt-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q4_K_M.gguf) | 184 MB | - | + WER is measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: **5.35%**. diff --git a/docs/models/gigaam-v3-rnnt.md b/docs/models/gigaam-v3-rnnt.md index 62a72b72..89e4546a 100644 --- a/docs/models/gigaam-v3-rnnt.md +++ b/docs/models/gigaam-v3-rnnt.md @@ -31,14 +31,16 @@ pinned 2026-05-12. ## Download -| Quantization | Download | Size | WER (FLEURS ru) | + +| Quantization | Download | Size | WER (FLEURS ru) | | --- | --- | ---: | ---: | -| F32 | [gigaam-v3-rnnt-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-F32.gguf) | 846 MB | 8.08% | -| F16 | [gigaam-v3-rnnt-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-F16.gguf) | 430 MB | 8.08% | -| Q8_0 | [gigaam-v3-rnnt-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q8_0.gguf) | 260 MB | 8.08% | -| Q6_K | [gigaam-v3-rnnt-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q6_K.gguf) | 217 MB | 8.07% | -| Q5_K_M | [gigaam-v3-rnnt-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q5_K_M.gguf) | 196 MB | 8.12% | -| Q4_K_M | [gigaam-v3-rnnt-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q4_K_M.gguf) | 175 MB | 8.12% | +| F32 | [gigaam-v3-rnnt-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-F32.gguf) | 888 MB | - | +| F16 | [gigaam-v3-rnnt-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-F16.gguf) | 451 MB | - | +| Q8_0 | [gigaam-v3-rnnt-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q8_0.gguf) | 273 MB | 8.07% | +| Q6_K | [gigaam-v3-rnnt-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q6_K.gguf) | 227 MB | - | +| Q5_K_M | [gigaam-v3-rnnt-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q5_K_M.gguf) | 206 MB | - | +| Q4_K_M | [gigaam-v3-rnnt-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q4_K_M.gguf) | 183 MB | - | + WER is measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: **8.08%**. diff --git a/docs/models/granite-4.0-1b-speech.md b/docs/models/granite-4.0-1b-speech.md index 7f415dbc..271ecb89 100644 --- a/docs/models/granite-4.0-1b-speech.md +++ b/docs/models/granite-4.0-1b-speech.md @@ -26,14 +26,16 @@ pinned 2026-05-17. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [granite-4.0-1b-speech-BF16.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-BF16.gguf) | 4.63 GB | 1.42% | -| F16 | [granite-4.0-1b-speech-F16.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-F16.gguf) | 4.63 GB | 1.42% | -| Q8_0 | [granite-4.0-1b-speech-Q8_0.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-Q8_0.gguf) | 2.56 GB | 1.44% | -| Q6_K | [granite-4.0-1b-speech-Q6_K.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-Q6_K.gguf) | 2.02 GB | 1.41% | -| Q5_K_M | [granite-4.0-1b-speech-Q5_K_M.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-Q5_K_M.gguf) | 1.83 GB | 1.42% | -| Q4_K_M | [granite-4.0-1b-speech-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-Q4_K_M.gguf) | 1.60 GB | 1.48% | +| BF16 | [granite-4.0-1b-speech-BF16.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-BF16.gguf) | 4.63 GB | 1.42% | +| F16 | [granite-4.0-1b-speech-F16.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-F16.gguf) | 4.63 GB | 1.42% | +| Q8_0 | [granite-4.0-1b-speech-Q8_0.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-Q8_0.gguf) | 2.56 GB | 1.44% | +| Q6_K | [granite-4.0-1b-speech-Q6_K.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-Q6_K.gguf) | 2.02 GB | 1.41% | +| Q5_K_M | [granite-4.0-1b-speech-Q5_K_M.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-Q5_K_M.gguf) | 1.83 GB | 1.42% | +| Q4_K_M | [granite-4.0-1b-speech-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-Q4_K_M.gguf) | 1.60 GB | 1.48% | + WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding. The BF16 reference baseline (transformers, re-run locally diff --git a/docs/models/granite-speech-4.1-2b-nar.md b/docs/models/granite-speech-4.1-2b-nar.md index 4201f8f7..9274e4c6 100644 --- a/docs/models/granite-speech-4.1-2b-nar.md +++ b/docs/models/granite-speech-4.1-2b-nar.md @@ -24,14 +24,16 @@ the README's canonical inference target). ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [granite-speech-4.1-2b-nar-BF16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-BF16.gguf) | 4.20 GB | 1.29% | -| F16 | [granite-speech-4.1-2b-nar-F16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-F16.gguf) | 4.21 GB | 1.29% | -| Q8_0 | [granite-speech-4.1-2b-nar-Q8_0.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-Q8_0.gguf) | 2.33 GB | 1.29% | -| Q6_K | [granite-speech-4.1-2b-nar-Q6_K.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-Q6_K.gguf) | 1.84 GB | 1.29% | -| Q5_K_M | [granite-speech-4.1-2b-nar-Q5_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-Q5_K_M.gguf) | 1.66 GB | 1.25% | -| Q4_K_M | [granite-speech-4.1-2b-nar-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-Q4_K_M.gguf) | 1.45 GB | 1.35% | +| BF16 | [granite-speech-4.1-2b-nar-BF16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-BF16.gguf) | 4.51 GB | 1.29% | +| F16 | [granite-speech-4.1-2b-nar-F16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-F16.gguf) | 4.52 GB | 1.29% | +| Q8_0 | [granite-speech-4.1-2b-nar-Q8_0.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-Q8_0.gguf) | 2.50 GB | 1.29% | +| Q6_K | [granite-speech-4.1-2b-nar-Q6_K.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-Q6_K.gguf) | 1.98 GB | 1.29% | +| Q5_K_M | [granite-speech-4.1-2b-nar-Q5_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-Q5_K_M.gguf) | 1.78 GB | 1.28% | +| Q4_K_M | [granite-speech-4.1-2b-nar-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-Q4_K_M.gguf) | 1.56 GB | 1.34% | + WER measured on the full LibriSpeech test-clean split (2620 utterances). BF16 reference baseline (transformers `model.transcribe`, MPS, re-run diff --git a/docs/models/granite-speech-4.1-2b-plus.md b/docs/models/granite-speech-4.1-2b-plus.md index a3cc164a..a31ade14 100644 --- a/docs/models/granite-speech-4.1-2b-plus.md +++ b/docs/models/granite-speech-4.1-2b-plus.md @@ -30,14 +30,16 @@ pinned 2026-05-17. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [granite-speech-4.1-2b-plus-BF16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-BF16.gguf) | 4.23 GB | 1.49% | -| F16 | [granite-speech-4.1-2b-plus-F16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-F16.gguf) | 4.23 GB | 1.48% | -| Q8_0 | [granite-speech-4.1-2b-plus-Q8_0.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-Q8_0.gguf) | 2.35 GB | 1.50% | -| Q6_K | [granite-speech-4.1-2b-plus-Q6_K.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-Q6_K.gguf) | 1.86 GB | 1.46% | -| Q5_K_M | [granite-speech-4.1-2b-plus-Q5_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-Q5_K_M.gguf) | 1.69 GB | 1.48% | -| Q4_K_M | [granite-speech-4.1-2b-plus-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-Q4_K_M.gguf) | 1.49 GB | 1.56% | +| BF16 | [granite-speech-4.1-2b-plus-BF16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-BF16.gguf) | 4.23 GB | 1.49% | +| F16 | [granite-speech-4.1-2b-plus-F16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-F16.gguf) | 4.23 GB | 1.48% | +| Q8_0 | [granite-speech-4.1-2b-plus-Q8_0.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-Q8_0.gguf) | 2.35 GB | 1.50% | +| Q6_K | [granite-speech-4.1-2b-plus-Q6_K.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-Q6_K.gguf) | 1.86 GB | 1.46% | +| Q5_K_M | [granite-speech-4.1-2b-plus-Q5_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-Q5_K_M.gguf) | 1.69 GB | 1.48% | +| Q4_K_M | [granite-speech-4.1-2b-plus-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-Q4_K_M.gguf) | 1.49 GB | 1.56% | + WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and the model-card chat template (system prompt + leading- diff --git a/docs/models/granite-speech-4.1-2b.md b/docs/models/granite-speech-4.1-2b.md index d0fd3b9c..a66188b5 100644 --- a/docs/models/granite-speech-4.1-2b.md +++ b/docs/models/granite-speech-4.1-2b.md @@ -27,14 +27,16 @@ pinned 2026-05-17. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [granite-speech-4.1-2b-BF16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-BF16.gguf) | 4.63 GB | 1.31% | -| F16 | [granite-speech-4.1-2b-F16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-F16.gguf) | 4.63 GB | 1.32% | -| Q8_0 | [granite-speech-4.1-2b-Q8_0.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-Q8_0.gguf) | 2.56 GB | 1.32% | -| Q6_K | [granite-speech-4.1-2b-Q6_K.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-Q6_K.gguf) | 2.02 GB | 1.29% | -| Q5_K_M | [granite-speech-4.1-2b-Q5_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-Q5_K_M.gguf) | 1.83 GB | 1.33% | -| Q4_K_M | [granite-speech-4.1-2b-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-Q4_K_M.gguf) | 1.60 GB | 1.37% | +| BF16 | [granite-speech-4.1-2b-BF16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-BF16.gguf) | 4.63 GB | 1.31% | +| F16 | [granite-speech-4.1-2b-F16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-F16.gguf) | 4.63 GB | 1.32% | +| Q8_0 | [granite-speech-4.1-2b-Q8_0.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-Q8_0.gguf) | 2.56 GB | 1.32% | +| Q6_K | [granite-speech-4.1-2b-Q6_K.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-Q6_K.gguf) | 2.02 GB | 1.29% | +| Q5_K_M | [granite-speech-4.1-2b-Q5_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-Q5_K_M.gguf) | 1.83 GB | 1.33% | +| Q4_K_M | [granite-speech-4.1-2b-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-Q4_K_M.gguf) | 1.60 GB | 1.37% | + WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and the model-card prompt `transcribe the speech with proper diff --git a/docs/models/medasr.md b/docs/models/medasr.md index f28569d0..879ac5f3 100644 --- a/docs/models/medasr.md +++ b/docs/models/medasr.md @@ -22,14 +22,16 @@ long recordings for best results. See the ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [medasr-F32.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-F32.gguf) | 417 MB | 17.88% | -| F16 | [medasr-F16.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-F16.gguf) | 202 MB | 17.88% | -| Q8_0 | [medasr-Q8_0.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-Q8_0.gguf) | 122 MB | 17.86% | -| Q6_K | [medasr-Q6_K.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-Q6_K.gguf) | 101 MB | 17.93% | -| Q5_K_M | [medasr-Q5_K_M.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-Q5_K_M.gguf) | 90 MB | 17.91% | -| Q4_K_M | [medasr-Q4_K_M.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-Q4_K_M.gguf) | 79 MB | 18.14% | +| F32 | [medasr-F32.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-F32.gguf) | 421 MB | 17.88% | +| F16 | [medasr-F16.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-F16.gguf) | 211 MB | 17.88% | +| Q8_0 | [medasr-Q8_0.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-Q8_0.gguf) | 128 MB | 17.86% | +| Q6_K | [medasr-Q6_K.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-Q6_K.gguf) | 106 MB | 17.93% | +| Q5_K_M | [medasr-Q5_K_M.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-Q5_K_M.gguf) | 94 MB | 17.91% | +| Q4_K_M | [medasr-Q4_K_M.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-Q4_K_M.gguf) | 83 MB | 18.14% | + **Recommended default: Q8_0.** Smallest preset with no statistically detectable WER degradation versus F32 (122 MB; +0.00 pp within bootstrap CI). Q4_K_M shows a real +0.26 pp degradation on LibriSpeech and is shipped for completeness but **not recommended** — prefer Q5_K_M if you need smaller than Q8_0. diff --git a/docs/models/moonshine-base.md b/docs/models/moonshine-base.md index 71a5629f..aa2e2d20 100644 --- a/docs/models/moonshine-base.md +++ b/docs/models/moonshine-base.md @@ -27,11 +27,13 @@ on 2026-05-05. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [moonshine-base-F32.gguf](https://huggingface.co/handy-computer/moonshine-base-gguf/resolve/main/moonshine-base-F32.gguf) | 236 MB | 3.28% | -| F16 | [moonshine-base-F16.gguf](https://huggingface.co/handy-computer/moonshine-base-gguf/resolve/main/moonshine-base-F16.gguf) | 126 MB | 3.28% | -| Q8_0 | [moonshine-base-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-base-gguf/resolve/main/moonshine-base-Q8_0.gguf) | 74 MB | 3.26% | +| F32 | [moonshine-base-F32.gguf](https://huggingface.co/handy-computer/moonshine-base-gguf/resolve/main/moonshine-base-F32.gguf) | 248 MB | 3.28% | +| F16 | [moonshine-base-F16.gguf](https://huggingface.co/handy-computer/moonshine-base-gguf/resolve/main/moonshine-base-F16.gguf) | 132 MB | 3.28% | +| Q8_0 | [moonshine-base-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-base-gguf/resolve/main/moonshine-base-Q8_0.gguf) | 77 MB | 3.26% | + WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, `num_beams=1`, `max_length=194` — diff --git a/docs/models/moonshine-streaming-medium.md b/docs/models/moonshine-streaming-medium.md index 4bb12d4a..3bd0b4c1 100644 --- a/docs/models/moonshine-streaming-medium.md +++ b/docs/models/moonshine-streaming-medium.md @@ -22,11 +22,13 @@ pinned 2026-05-06. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [moonshine-streaming-medium-F32.gguf](https://huggingface.co/handy-computer/moonshine-streaming-medium-gguf/resolve/main/moonshine-streaming-medium-F32.gguf) | 1015 MB | 2.16% | -| F16 | [moonshine-streaming-medium-F16.gguf](https://huggingface.co/handy-computer/moonshine-streaming-medium-gguf/resolve/main/moonshine-streaming-medium-F16.gguf) | 509 MB | 2.16% | -| Q8_0 | [moonshine-streaming-medium-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-streaming-medium-gguf/resolve/main/moonshine-streaming-medium-Q8_0.gguf) | 282 MB | 2.16% | +| F32 | [moonshine-streaming-medium-F32.gguf](https://huggingface.co/handy-computer/moonshine-streaming-medium-gguf/resolve/main/moonshine-streaming-medium-F32.gguf) | 1.07 GB | 2.16% | +| F16 | [moonshine-streaming-medium-F16.gguf](https://huggingface.co/handy-computer/moonshine-streaming-medium-gguf/resolve/main/moonshine-streaming-medium-F16.gguf) | 534 MB | 2.16% | +| Q8_0 | [moonshine-streaming-medium-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-streaming-medium-gguf/resolve/main/moonshine-streaming-medium-Q8_0.gguf) | 296 MB | 2.16% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference diff --git a/docs/models/moonshine-streaming-small.md b/docs/models/moonshine-streaming-small.md index 9368e237..a61fd22e 100644 --- a/docs/models/moonshine-streaming-small.md +++ b/docs/models/moonshine-streaming-small.md @@ -22,11 +22,13 @@ pinned 2026-05-06. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [moonshine-streaming-small-F32.gguf](https://huggingface.co/handy-computer/moonshine-streaming-small-gguf/resolve/main/moonshine-streaming-small-F32.gguf) | 536 MB | 2.53% | -| F16 | [moonshine-streaming-small-F16.gguf](https://huggingface.co/handy-computer/moonshine-streaming-small-gguf/resolve/main/moonshine-streaming-small-F16.gguf) | 269 MB | 2.53% | -| Q8_0 | [moonshine-streaming-small-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-streaming-small-gguf/resolve/main/moonshine-streaming-small-Q8_0.gguf) | 189 MB | 2.54% | +| F32 | [moonshine-streaming-small-F32.gguf](https://huggingface.co/handy-computer/moonshine-streaming-small-gguf/resolve/main/moonshine-streaming-small-F32.gguf) | 562 MB | 2.53% | +| F16 | [moonshine-streaming-small-F16.gguf](https://huggingface.co/handy-computer/moonshine-streaming-small-gguf/resolve/main/moonshine-streaming-small-F16.gguf) | 282 MB | 2.53% | +| Q8_0 | [moonshine-streaming-small-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-streaming-small-gguf/resolve/main/moonshine-streaming-small-Q8_0.gguf) | 199 MB | 2.54% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference diff --git a/docs/models/moonshine-streaming-tiny.md b/docs/models/moonshine-streaming-tiny.md index 05882c21..f7ce8acb 100644 --- a/docs/models/moonshine-streaming-tiny.md +++ b/docs/models/moonshine-streaming-tiny.md @@ -20,11 +20,13 @@ pinned 2026-05-06. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [moonshine-streaming-tiny-F32.gguf](https://huggingface.co/handy-computer/moonshine-streaming-tiny-gguf/resolve/main/moonshine-streaming-tiny-F32.gguf) | 169 MB | 4.53% | -| F16 | [moonshine-streaming-tiny-F16.gguf](https://huggingface.co/handy-computer/moonshine-streaming-tiny-gguf/resolve/main/moonshine-streaming-tiny-F16.gguf) | 85 MB | 4.53% | -| Q8_0 | [moonshine-streaming-tiny-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-streaming-tiny-gguf/resolve/main/moonshine-streaming-tiny-Q8_0.gguf) | 48 MB | 4.52% | +| F32 | [moonshine-streaming-tiny-F32.gguf](https://huggingface.co/handy-computer/moonshine-streaming-tiny-gguf/resolve/main/moonshine-streaming-tiny-F32.gguf) | 178 MB | 4.53% | +| F16 | [moonshine-streaming-tiny-F16.gguf](https://huggingface.co/handy-computer/moonshine-streaming-tiny-gguf/resolve/main/moonshine-streaming-tiny-F16.gguf) | 90 MB | 4.53% | +| Q8_0 | [moonshine-streaming-tiny-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-streaming-tiny-gguf/resolve/main/moonshine-streaming-tiny-Q8_0.gguf) | 50 MB | 4.52% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference diff --git a/docs/models/moonshine-tiny.md b/docs/models/moonshine-tiny.md index 2065de75..97d411de 100644 --- a/docs/models/moonshine-tiny.md +++ b/docs/models/moonshine-tiny.md @@ -26,11 +26,13 @@ on 2026-05-05. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [moonshine-tiny-F32.gguf](https://huggingface.co/handy-computer/moonshine-tiny-gguf/resolve/main/moonshine-tiny-F32.gguf) | 105 MB | 4.58% | -| F16 | [moonshine-tiny-F16.gguf](https://huggingface.co/handy-computer/moonshine-tiny-gguf/resolve/main/moonshine-tiny-F16.gguf) | 57 MB | 4.58% | -| Q8_0 | [moonshine-tiny-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-tiny-gguf/resolve/main/moonshine-tiny-Q8_0.gguf) | 34 MB | 4.60% | +| F32 | [moonshine-tiny-F32.gguf](https://huggingface.co/handy-computer/moonshine-tiny-gguf/resolve/main/moonshine-tiny-F32.gguf) | 110 MB | 4.58% | +| F16 | [moonshine-tiny-F16.gguf](https://huggingface.co/handy-computer/moonshine-tiny-gguf/resolve/main/moonshine-tiny-F16.gguf) | 59 MB | 4.58% | +| Q8_0 | [moonshine-tiny-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-tiny-gguf/resolve/main/moonshine-tiny-Q8_0.gguf) | 35 MB | 4.60% | + WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, `num_beams=1`, `max_length=194` — diff --git a/docs/models/moss-transcribe-diarize.md b/docs/models/moss-transcribe-diarize.md index e1d920f1..f3e9099c 100644 --- a/docs/models/moss-transcribe-diarize.md +++ b/docs/models/moss-transcribe-diarize.md @@ -37,14 +37,16 @@ into shorter pieces. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [MOSS-Transcribe-Diarize-BF16.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-BF16.gguf) | 1.83 GB | 2.08% | -| F16 | [MOSS-Transcribe-Diarize-F16.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-F16.gguf) | 1.83 GB | 2.07% | -| Q8_0 | [MOSS-Transcribe-Diarize-Q8_0.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-Q8_0.gguf) | 987 MB | 1.93% | -| Q6_K | [MOSS-Transcribe-Diarize-Q6_K.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-Q6_K.gguf) | 768 MB | 1.96% | -| Q5_K_M | [MOSS-Transcribe-Diarize-Q5_K_M.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-Q5_K_M.gguf) | 700 MB | 1.99% | -| Q4_K_M | [MOSS-Transcribe-Diarize-Q4_K_M.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-Q4_K_M.gguf) | 617 MB | 2.59% | +| BF16 | [MOSS-Transcribe-Diarize-BF16.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-BF16.gguf) | 1.83 GB | 2.08% | +| F16 | [MOSS-Transcribe-Diarize-F16.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-F16.gguf) | 1.83 GB | 2.07% | +| Q8_0 | [MOSS-Transcribe-Diarize-Q8_0.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-Q8_0.gguf) | 987 MB | 1.93% | +| Q6_K | [MOSS-Transcribe-Diarize-Q6_K.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-Q6_K.gguf) | 768 MB | 1.96% | +| Q5_K_M | [MOSS-Transcribe-Diarize-Q5_K_M.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-Q5_K_M.gguf) | 700 MB | 1.99% | +| Q4_K_M | [MOSS-Transcribe-Diarize-Q4_K_M.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-Q4_K_M.gguf) | 617 MB | 2.59% | + These WER values describe this dataset only, not a general quality ranking. A quant that scores slightly better here is not necessarily better in real-world diff --git a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md index e3f0a38d..d93f0a0d 100644 --- a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md +++ b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md @@ -13,12 +13,13 @@ word-level timestamps are available. Upstream this is a **multitalker (speaker-attributed)** checkpoint: it can transcribe several overlapping speakers into per-speaker channels. This -port ships that path too, via **bundle GGUFs** that embed the +port ships that path too: every published GGUF is a **bundle** that embeds +the [`nvidia/diar_streaming_sortformer_4spk-v2.1`](https://huggingface.co/nvidia/diar_streaming_sortformer_4spk-v2.1) -streaming diarizer alongside the ASR model. A plain (non-bundle) GGUF runs -the model's `single_speaker_mode` ASR path — a cache-aware streaming RNN-T -with the checkpoint's always-on layer-0 speaker-kernel injection. A bundle -GGUF with `--diarize` runs the full multitalker pipeline and emits a +streaming diarizer alongside the ASR model. Run it without `--diarize` and +you get the model's `single_speaker_mode` ASR path — a cache-aware streaming +RNN-T with the checkpoint's always-on layer-0 speaker-kernel injection. Run +it with `--diarize` and you get the full multitalker pipeline and a speaker-tagged transcript (see [Multitalker](#multitalker-speaker-attributed-asr)). @@ -36,14 +37,16 @@ pinned 2026-07-12. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean, offline) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean, offline) | | --- | --- | ---: | ---: | -| F32 | [multitalker-parakeet-streaming-0.6b-v1-F32.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/multitalker-parakeet-streaming-0.6b-v1-F32.gguf) | 2.49 GB | 2.19% | -| F16 | [multitalker-parakeet-streaming-0.6b-v1-F16.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/multitalker-parakeet-streaming-0.6b-v1-F16.gguf) | 1.25 GB | 2.19% | -| Q8_0 | [multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf) | 734 MB | 2.18% | -| Q6_K | [multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf) | 604 MB | 2.20% | -| Q5_K_M | [multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf) | 542 MB | 2.18% | -| Q4_K_M | [multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf) | 478 MB | 2.18% | +| F32 | [bundle/multitalker-parakeet-streaming-0.6b-v1-F32.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-F32.gguf) | 2.96 GB | 2.19% | +| F16 | [bundle/multitalker-parakeet-streaming-0.6b-v1-F16.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-F16.gguf) | 1.48 GB | 2.19% | +| Q8_0 | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf) | 873 MB | 2.18% | +| Q6_K | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf) | 743 MB | 2.20% | +| Q5_K_M | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf) | 681 MB | 2.18% | +| Q4_K_M | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf) | 617 MB | 2.18% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) in `single_speaker_mode` with greedy RNN-T decoding, whisper-normalizer @@ -52,20 +55,10 @@ The measured NeMo `single_speaker_mode` reference on the same split is 2.19%, and NVIDIA's self-reported number is 2.19% (from the [HF model card](https://huggingface.co/nvidia/multitalker-parakeet-streaming-0.6b-v1)). -### Multitalker bundles +### Bundle dtypes -Bundle GGUFs embed the streaming Sortformer diarizer. The tier names the -ASR half's dtype; the embedded diarizer is F32 for the F32 bundle, F16 for -F16, and Q8_0 for all k-quant tiers. - -| Bundle | Download | Size | -| --- | --- | ---: | -| F32 | [bundle/multitalker-parakeet-streaming-0.6b-v1-F32.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-F32.gguf) | 2.96 GB | -| F16 | [bundle/multitalker-parakeet-streaming-0.6b-v1-F16.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-F16.gguf) | 1.48 GB | -| Q8_0 | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf) | 873 MB | -| Q6_K | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf) | 743 MB | -| Q5_K_M | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf) | 681 MB | -| Q4_K_M | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf) | 617 MB | +The tier names the ASR half's dtype; the embedded Sortformer diarizer is F32 +for the F32 bundle, F16 for F16, and Q8_0 for all k-quant tiers. ## Streaming parity diff --git a/docs/models/nemotron-3.5-asr-streaming-0.6b.md b/docs/models/nemotron-3.5-asr-streaming-0.6b.md index 8dbaaedd..9e97a979 100644 --- a/docs/models/nemotron-3.5-asr-streaming-0.6b.md +++ b/docs/models/nemotron-3.5-asr-streaming-0.6b.md @@ -53,14 +53,16 @@ stays unbounded for the same reason. See the ## Download -| Quantization | Download | Size | + +| Quantization | Download | Size | | --- | --- | ---: | -| F32 | [nemotron-3.5-asr-streaming-0.6b-F32.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-F32.gguf) | 2.38 GB | -| F16 | [nemotron-3.5-asr-streaming-0.6b-F16.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-F16.gguf) | 1.19 GB | -| Q8_0 | [nemotron-3.5-asr-streaming-0.6b-Q8_0.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-Q8_0.gguf) | 716 MB | -| Q6_K | [nemotron-3.5-asr-streaming-0.6b-Q6_K.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-Q6_K.gguf) | 593 MB | -| Q5_K_M | [nemotron-3.5-asr-streaming-0.6b-Q5_K_M.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-Q5_K_M.gguf) | 534 MB | -| Q4_K_M | [nemotron-3.5-asr-streaming-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-Q4_K_M.gguf) | 473 MB | +| F32 | [nemotron-3.5-asr-streaming-0.6b-F32.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-F32.gguf) | 2.55 GB | +| F16 | [nemotron-3.5-asr-streaming-0.6b-F16.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-F16.gguf) | 1.28 GB | +| Q8_0 | [nemotron-3.5-asr-streaming-0.6b-Q8_0.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-Q8_0.gguf) | 751 MB | +| Q6_K | [nemotron-3.5-asr-streaming-0.6b-Q6_K.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-Q6_K.gguf) | 621 MB | +| Q5_K_M | [nemotron-3.5-asr-streaming-0.6b-Q5_K_M.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-Q5_K_M.gguf) | 560 MB | +| Q4_K_M | [nemotron-3.5-asr-streaming-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-Q4_K_M.gguf) | 496 MB | + **Accuracy.** Word error rate at the offline `att_context_size=[56,13]` (1.12 s) setting, `--language en-US`, greedy RNN-T. C++ hypotheses were @@ -194,9 +196,9 @@ on WER (Stage 7), not tensor tolerances. - The auxiliary CTC head present in the upstream checkpoint is dropped at conversion (the RNN-T head is the inference path); CTC-argmax timestamps are not available. -- WER is gated on English only (FLEURS test en + LibriSpeech test-clean - against the NeMo Oracle). The other 39 locales are exercised - functionally but not WER-scored here. Published latency numbers cover +- The measured-Oracle release gate uses English (FLEURS test en + + LibriSpeech test-clean). The publication catalog additionally carries a + Q8_0 FLEURS result for every supported language. Published latency numbers cover the offline `[56, 13]` path; the sub-1.12 s streaming settings are functionally validated (byte-equal at R=13) but not separately benchmarked. diff --git a/docs/models/nemotron-speech-streaming-en-0.6b.md b/docs/models/nemotron-speech-streaming-en-0.6b.md index 5083de66..d575cf32 100644 --- a/docs/models/nemotron-speech-streaming-en-0.6b.md +++ b/docs/models/nemotron-speech-streaming-en-0.6b.md @@ -35,14 +35,16 @@ pinned 2026-05-11. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean, offline) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean, offline) | | --- | --- | ---: | ---: | -| F32 | [nemotron-speech-streaming-en-0.6b-F32.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-F32.gguf) | 2.30 GB | 2.31% | -| F16 | [nemotron-speech-streaming-en-0.6b-F16.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-F16.gguf) | 1.16 GB | 2.31% | -| Q8_0 | [nemotron-speech-streaming-en-0.6b-Q8_0.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-Q8_0.gguf) | 696 MB | 2.31% | -| Q6_K | [nemotron-speech-streaming-en-0.6b-Q6_K.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-Q6_K.gguf) | 573 MB | 2.29% | -| Q5_K_M | [nemotron-speech-streaming-en-0.6b-Q5_K_M.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-Q5_K_M.gguf) | 514 MB | 2.34% | -| Q4_K_M | [nemotron-speech-streaming-en-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-Q4_K_M.gguf) | 453 MB | 2.38% | +| F32 | [nemotron-speech-streaming-en-0.6b-F32.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-F32.gguf) | 2.47 GB | 2.31% | +| F16 | [nemotron-speech-streaming-en-0.6b-F16.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-F16.gguf) | 1.24 GB | 2.31% | +| Q8_0 | [nemotron-speech-streaming-en-0.6b-Q8_0.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-Q8_0.gguf) | 730 MB | 2.31% | +| Q6_K | [nemotron-speech-streaming-en-0.6b-Q6_K.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-Q6_K.gguf) | 600 MB | 2.29% | +| Q5_K_M | [nemotron-speech-streaming-en-0.6b-Q5_K_M.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-Q5_K_M.gguf) | 539 MB | 2.34% | +| Q4_K_M | [nemotron-speech-streaming-en-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-Q4_K_M.gguf) | 475 MB | 2.38% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding. F32 reference baseline: 2.31%. diff --git a/docs/models/parakeet-ctc-0.6b.md b/docs/models/parakeet-ctc-0.6b.md index a5d1dcc7..4b6655b5 100644 --- a/docs/models/parakeet-ctc-0.6b.md +++ b/docs/models/parakeet-ctc-0.6b.md @@ -25,14 +25,16 @@ pinned 2026-05-10. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [parakeet-ctc-0.6b-F32.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-F32.gguf) | 2.44 GB | 1.87% | -| F16 | [parakeet-ctc-0.6b-F16.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-F16.gguf) | 1.22 GB | 1.87% | -| Q8_0 | [parakeet-ctc-0.6b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-Q8_0.gguf) | 722 MB | 1.87% | -| Q6_K | [parakeet-ctc-0.6b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-Q6_K.gguf) | 594 MB | 1.84% | -| Q5_K_M | [parakeet-ctc-0.6b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-Q5_K_M.gguf) | 533 MB | 1.87% | -| Q4_K_M | [parakeet-ctc-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-Q4_K_M.gguf) | 469 MB | 1.90% | +| F32 | [parakeet-ctc-0.6b-F32.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-F32.gguf) | 2.44 GB | 1.87% | +| F16 | [parakeet-ctc-0.6b-F16.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-F16.gguf) | 1.22 GB | 1.87% | +| Q8_0 | [parakeet-ctc-0.6b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-Q8_0.gguf) | 722 MB | 1.87% | +| Q6_K | [parakeet-ctc-0.6b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-Q6_K.gguf) | 594 MB | 1.84% | +| Q5_K_M | [parakeet-ctc-0.6b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-Q5_K_M.gguf) | 533 MB | 1.87% | +| Q4_K_M | [parakeet-ctc-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-Q4_K_M.gguf) | 469 MB | 1.90% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.87% (from the [HF model card](https://huggingface.co/nvidia/parakeet-ctc-0.6b)). diff --git a/docs/models/parakeet-ctc-1.1b.md b/docs/models/parakeet-ctc-1.1b.md index 5a410e88..d0181ec1 100644 --- a/docs/models/parakeet-ctc-1.1b.md +++ b/docs/models/parakeet-ctc-1.1b.md @@ -24,14 +24,16 @@ pinned 2026-05-10. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [parakeet-ctc-1.1b-F32.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-F32.gguf) | 4.25 GB | 1.85% | -| F16 | [parakeet-ctc-1.1b-F16.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-F16.gguf) | 2.13 GB | 1.85% | -| Q8_0 | [parakeet-ctc-1.1b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-Q8_0.gguf) | 1.26 GB | 1.85% | -| Q6_K | [parakeet-ctc-1.1b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-Q6_K.gguf) | 1.04 GB | 1.85% | -| Q5_K_M | [parakeet-ctc-1.1b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-Q5_K_M.gguf) | 929 MB | 1.84% | -| Q4_K_M | [parakeet-ctc-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-Q4_K_M.gguf) | 818 MB | 1.90% | +| F32 | [parakeet-ctc-1.1b-F32.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-F32.gguf) | 4.25 GB | 1.85% | +| F16 | [parakeet-ctc-1.1b-F16.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-F16.gguf) | 2.13 GB | 1.85% | +| Q8_0 | [parakeet-ctc-1.1b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-Q8_0.gguf) | 1.26 GB | 1.85% | +| Q6_K | [parakeet-ctc-1.1b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-Q6_K.gguf) | 1.04 GB | 1.85% | +| Q5_K_M | [parakeet-ctc-1.1b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-Q5_K_M.gguf) | 929 MB | 1.84% | +| Q4_K_M | [parakeet-ctc-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-Q4_K_M.gguf) | 818 MB | 1.90% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.85%. NVIDIA's self-reported number on the same split is 1.83% (from the [HF model card](https://huggingface.co/nvidia/parakeet-ctc-1.1b)). diff --git a/docs/models/parakeet-primeline.md b/docs/models/parakeet-primeline.md index 4c3ae0f3..6021b0c4 100644 --- a/docs/models/parakeet-primeline.md +++ b/docs/models/parakeet-primeline.md @@ -24,14 +24,16 @@ pinned 2026-08-16. ## Download -| Quantization | Download | Size | WER (FLEURS de test) | + +| Quantization | Download | Size | WER (FLEURS de test) | | --- | --- | ---: | ---: | -| F32 | [parakeet-primeline-F32.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-F32.gguf) | 2.51 GB | 6.00% | -| F16 | [parakeet-primeline-F16.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-F16.gguf) | 1.26 GB | 6.00% | -| Q8_0 | [parakeet-primeline-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q8_0.gguf) | 740 MB | 6.00% | -| Q6_K | [parakeet-primeline-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q6_K.gguf) | 610 MB | 5.96% | -| Q5_K_M | [parakeet-primeline-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q5_K_M.gguf) | 549 MB | 5.99% | -| Q4_K_M | [parakeet-primeline-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q4_K_M.gguf) | 485 MB | 5.98% | +| F32 | [parakeet-primeline-F32.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-F32.gguf) | 2.51 GB | - | +| F16 | [parakeet-primeline-F16.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-F16.gguf) | 1.26 GB | - | +| Q8_0 | [parakeet-primeline-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q8_0.gguf) | 740 MB | 5.98% | +| Q6_K | [parakeet-primeline-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q6_K.gguf) | 610 MB | - | +| Q5_K_M | [parakeet-primeline-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q5_K_M.gguf) | 549 MB | - | +| Q4_K_M | [parakeet-primeline-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q4_K_M.gguf) | 485 MB | - | + WER is measured on the full FLEURS German test split (862 utterances) with greedy transducer decoding and no external LM. The reference diff --git a/docs/models/parakeet-rnnt-0.6b.md b/docs/models/parakeet-rnnt-0.6b.md index a3cf5f17..4f517afa 100644 --- a/docs/models/parakeet-rnnt-0.6b.md +++ b/docs/models/parakeet-rnnt-0.6b.md @@ -26,14 +26,16 @@ pinned 2026-05-10. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [parakeet-rnnt-0.6b-F32.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-F32.gguf) | 2.47 GB | 1.62% | -| F16 | [parakeet-rnnt-0.6b-F16.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-F16.gguf) | 1.24 GB | 1.62% | -| Q8_0 | [parakeet-rnnt-0.6b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-Q8_0.gguf) | 730 MB | 1.62% | -| Q6_K | [parakeet-rnnt-0.6b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-Q6_K.gguf) | 601 MB | 1.62% | -| Q5_K_M | [parakeet-rnnt-0.6b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-Q5_K_M.gguf) | 540 MB | 1.62% | -| Q4_K_M | [parakeet-rnnt-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-Q4_K_M.gguf) | 476 MB | 1.59% | +| F32 | [parakeet-rnnt-0.6b-F32.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-F32.gguf) | 2.47 GB | 1.62% | +| F16 | [parakeet-rnnt-0.6b-F16.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-F16.gguf) | 1.24 GB | 1.62% | +| Q8_0 | [parakeet-rnnt-0.6b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-Q8_0.gguf) | 730 MB | 1.62% | +| Q6_K | [parakeet-rnnt-0.6b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-Q6_K.gguf) | 601 MB | 1.62% | +| Q5_K_M | [parakeet-rnnt-0.6b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-Q5_K_M.gguf) | 540 MB | 1.62% | +| Q4_K_M | [parakeet-rnnt-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-Q4_K_M.gguf) | 476 MB | 1.66% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.62%. NVIDIA's self-reported number on the same split is 1.63% (from the [HF model card](https://huggingface.co/nvidia/parakeet-rnnt-0.6b)). diff --git a/docs/models/parakeet-rnnt-1.1b.md b/docs/models/parakeet-rnnt-1.1b.md index db6c2048..8be5cd54 100644 --- a/docs/models/parakeet-rnnt-1.1b.md +++ b/docs/models/parakeet-rnnt-1.1b.md @@ -24,14 +24,16 @@ pinned 2026-05-10. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [parakeet-rnnt-1.1b-F32.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-F32.gguf) | 4.28 GB | 1.45% | -| F16 | [parakeet-rnnt-1.1b-F16.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-F16.gguf) | 2.15 GB | 1.45% | -| Q8_0 | [parakeet-rnnt-1.1b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-Q8_0.gguf) | 1.27 GB | 1.46% | -| Q6_K | [parakeet-rnnt-1.1b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-Q6_K.gguf) | 1.04 GB | 1.43% | -| Q5_K_M | [parakeet-rnnt-1.1b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-Q5_K_M.gguf) | 936 MB | 1.43% | -| Q4_K_M | [parakeet-rnnt-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-Q4_K_M.gguf) | 825 MB | 1.41% | +| F32 | [parakeet-rnnt-1.1b-F32.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-F32.gguf) | 4.28 GB | 1.45% | +| F16 | [parakeet-rnnt-1.1b-F16.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-F16.gguf) | 2.15 GB | 1.45% | +| Q8_0 | [parakeet-rnnt-1.1b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-Q8_0.gguf) | 1.27 GB | 1.46% | +| Q6_K | [parakeet-rnnt-1.1b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-Q6_K.gguf) | 1.04 GB | 1.43% | +| Q5_K_M | [parakeet-rnnt-1.1b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-Q5_K_M.gguf) | 936 MB | 1.43% | +| Q4_K_M | [parakeet-rnnt-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-Q4_K_M.gguf) | 825 MB | 1.41% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.45%. NVIDIA's self-reported number on the same split is 1.46% (from the [HF model card](https://huggingface.co/nvidia/parakeet-rnnt-1.1b)). diff --git a/docs/models/parakeet-tdt-0.6b-v2.md b/docs/models/parakeet-tdt-0.6b-v2.md index 87ada6d3..b6c8f2f0 100644 --- a/docs/models/parakeet-tdt-0.6b-v2.md +++ b/docs/models/parakeet-tdt-0.6b-v2.md @@ -20,14 +20,16 @@ pinned 2026-04-15. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [parakeet-tdt-0.6b-v2-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-F32.gguf) | 2.47 GB | 1.68% | -| F16 | [parakeet-tdt-0.6b-v2-F16.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-F16.gguf) | 1.24 GB | 1.68% | -| Q8_0 | [parakeet-tdt-0.6b-v2-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-Q8_0.gguf) | 730 MB | 1.69% | -| Q6_K | [parakeet-tdt-0.6b-v2-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-Q6_K.gguf) | 608 MB | 1.70% | -| Q5_K_M | [parakeet-tdt-0.6b-v2-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-Q5_K_M.gguf) | 547 MB | 1.70% | -| Q4_K_M | [parakeet-tdt-0.6b-v2-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-Q4_K_M.gguf) | 483 MB | 1.72% | +| F32 | [parakeet-tdt-0.6b-v2-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-F32.gguf) | 2.47 GB | 1.68% | +| F16 | [parakeet-tdt-0.6b-v2-F16.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-F16.gguf) | 1.24 GB | 1.68% | +| Q8_0 | [parakeet-tdt-0.6b-v2-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-Q8_0.gguf) | 730 MB | 1.69% | +| Q6_K | [parakeet-tdt-0.6b-v2-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-Q6_K.gguf) | 600 MB | 1.70% | +| Q5_K_M | [parakeet-tdt-0.6b-v2-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-Q5_K_M.gguf) | 539 MB | 1.70% | +| Q4_K_M | [parakeet-tdt-0.6b-v2-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-Q4_K_M.gguf) | 475 MB | 1.72% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy transducer decoding and no external LM. F32 reference baseline: diff --git a/docs/models/parakeet-tdt-0.6b-v3.md b/docs/models/parakeet-tdt-0.6b-v3.md index 567fd42a..c33d588b 100644 --- a/docs/models/parakeet-tdt-0.6b-v3.md +++ b/docs/models/parakeet-tdt-0.6b-v3.md @@ -23,14 +23,16 @@ pinned 2026-04-16. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [parakeet-tdt-0.6b-v3-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-F32.gguf) | 2.51 GB | 1.95% | -| F16 | [parakeet-tdt-0.6b-v3-F16.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-F16.gguf) | 1.26 GB | 1.95% | -| Q8_0 | [parakeet-tdt-0.6b-v3-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-Q8_0.gguf) | 740 MB | 1.94% | -| Q6_K | [parakeet-tdt-0.6b-v3-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-Q6_K.gguf) | 627 MB | 1.93% | -| Q5_K_M | [parakeet-tdt-0.6b-v3-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-Q5_K_M.gguf) | 565 MB | 1.92% | -| Q4_K_M | [parakeet-tdt-0.6b-v3-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-Q4_K_M.gguf) | 502 MB | 1.98% | +| F32 | [parakeet-tdt-0.6b-v3-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-F32.gguf) | 2.51 GB | 1.95% | +| F16 | [parakeet-tdt-0.6b-v3-F16.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-F16.gguf) | 1.26 GB | 1.95% | +| Q8_0 | [parakeet-tdt-0.6b-v3-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-Q8_0.gguf) | 740 MB | 1.94% | +| Q6_K | [parakeet-tdt-0.6b-v3-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-Q6_K.gguf) | 610 MB | 1.93% | +| Q5_K_M | [parakeet-tdt-0.6b-v3-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-Q5_K_M.gguf) | 549 MB | 1.92% | +| Q4_K_M | [parakeet-tdt-0.6b-v3-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-Q4_K_M.gguf) | 485 MB | 1.98% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy transducer decoding and no external LM. F32 reference baseline: diff --git a/docs/models/parakeet-tdt-1.1b.md b/docs/models/parakeet-tdt-1.1b.md index 261c683d..7454a0ba 100644 --- a/docs/models/parakeet-tdt-1.1b.md +++ b/docs/models/parakeet-tdt-1.1b.md @@ -25,14 +25,16 @@ pinned 2026-05-10. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [parakeet-tdt-1.1b-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-F32.gguf) | 4.28 GB | 1.39% | -| F16 | [parakeet-tdt-1.1b-F16.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-F16.gguf) | 2.15 GB | 1.39% | -| Q8_0 | [parakeet-tdt-1.1b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-Q8_0.gguf) | 1.27 GB | 1.38% | -| Q6_K | [parakeet-tdt-1.1b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-Q6_K.gguf) | 1.04 GB | 1.40% | -| Q5_K_M | [parakeet-tdt-1.1b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-Q5_K_M.gguf) | 936 MB | 1.39% | -| Q4_K_M | [parakeet-tdt-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-Q4_K_M.gguf) | 825 MB | 1.42% | +| F32 | [parakeet-tdt-1.1b-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-F32.gguf) | 4.28 GB | 1.39% | +| F16 | [parakeet-tdt-1.1b-F16.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-F16.gguf) | 2.15 GB | 1.39% | +| Q8_0 | [parakeet-tdt-1.1b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-Q8_0.gguf) | 1.27 GB | 1.38% | +| Q6_K | [parakeet-tdt-1.1b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-Q6_K.gguf) | 1.04 GB | 1.40% | +| Q5_K_M | [parakeet-tdt-1.1b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-Q5_K_M.gguf) | 936 MB | 1.39% | +| Q4_K_M | [parakeet-tdt-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-Q4_K_M.gguf) | 825 MB | 1.42% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT decoding and no external LM. F32 reference baseline: 1.39%. NVIDIA's self-reported number on the same split is 1.39% (from the [HF model card](https://huggingface.co/nvidia/parakeet-tdt-1.1b)). diff --git a/docs/models/parakeet-tdt_ctc-1.1b.md b/docs/models/parakeet-tdt_ctc-1.1b.md index 175da9bb..5c526b03 100644 --- a/docs/models/parakeet-tdt_ctc-1.1b.md +++ b/docs/models/parakeet-tdt_ctc-1.1b.md @@ -24,14 +24,16 @@ pinned 2026-05-10. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [parakeet-tdt_ctc-1.1b-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-F32.gguf) | 4.28 GB | 1.87% | -| F16 | [parakeet-tdt_ctc-1.1b-F16.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-F16.gguf) | 2.15 GB | 1.87% | -| Q8_0 | [parakeet-tdt_ctc-1.1b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-Q8_0.gguf) | 1.27 GB | 1.87% | -| Q6_K | [parakeet-tdt_ctc-1.1b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-Q6_K.gguf) | 1.04 GB | 1.87% | -| Q5_K_M | [parakeet-tdt_ctc-1.1b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-Q5_K_M.gguf) | 936 MB | 1.87% | -| Q4_K_M | [parakeet-tdt_ctc-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-Q4_K_M.gguf) | 825 MB | 1.91% | +| F32 | [parakeet-tdt_ctc-1.1b-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-F32.gguf) | 4.28 GB | 1.87% | +| F16 | [parakeet-tdt_ctc-1.1b-F16.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-F16.gguf) | 2.15 GB | 1.87% | +| Q8_0 | [parakeet-tdt_ctc-1.1b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-Q8_0.gguf) | 1.27 GB | 1.87% | +| Q6_K | [parakeet-tdt_ctc-1.1b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-Q6_K.gguf) | 1.04 GB | 1.87% | +| Q5_K_M | [parakeet-tdt_ctc-1.1b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-Q5_K_M.gguf) | 936 MB | 1.87% | +| Q4_K_M | [parakeet-tdt_ctc-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-Q4_K_M.gguf) | 825 MB | 1.91% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.82% (from the [HF model card](https://huggingface.co/nvidia/parakeet-tdt_ctc-1.1b)). diff --git a/docs/models/parakeet-tdt_ctc-110m.md b/docs/models/parakeet-tdt_ctc-110m.md index abf0dbb3..11786d32 100644 --- a/docs/models/parakeet-tdt_ctc-110m.md +++ b/docs/models/parakeet-tdt_ctc-110m.md @@ -22,14 +22,16 @@ pinned 2026-05-10. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [parakeet-tdt_ctc-110m-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-F32.gguf) | 457 MB | 2.43% | -| F16 | [parakeet-tdt_ctc-110m-F16.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-F16.gguf) | 229 MB | 2.43% | -| Q8_0 | [parakeet-tdt_ctc-110m-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-Q8_0.gguf) | 135 MB | 2.43% | -| Q6_K | [parakeet-tdt_ctc-110m-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-Q6_K.gguf) | 112 MB | 2.44% | -| Q5_K_M | [parakeet-tdt_ctc-110m-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-Q5_K_M.gguf) | 101 MB | 2.47% | -| Q4_K_M | [parakeet-tdt_ctc-110m-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-Q4_K_M.gguf) | 90 MB | 2.53% | +| F32 | [parakeet-tdt_ctc-110m-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-F32.gguf) | 457 MB | 2.43% | +| F16 | [parakeet-tdt_ctc-110m-F16.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-F16.gguf) | 229 MB | 2.43% | +| Q8_0 | [parakeet-tdt_ctc-110m-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-Q8_0.gguf) | 135 MB | 2.43% | +| Q6_K | [parakeet-tdt_ctc-110m-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-Q6_K.gguf) | 112 MB | 2.44% | +| Q5_K_M | [parakeet-tdt_ctc-110m-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-Q5_K_M.gguf) | 101 MB | 2.47% | +| Q4_K_M | [parakeet-tdt_ctc-110m-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-Q4_K_M.gguf) | 90 MB | 2.53% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT decoding and no external LM. F32 reference baseline: 2.43%. NVIDIA's self-reported number on the same split is 2.40% (from the [HF model card](https://huggingface.co/nvidia/parakeet-tdt_ctc-110m)). diff --git a/docs/models/parakeet-unified-en-0.6b.md b/docs/models/parakeet-unified-en-0.6b.md index 39c6b10d..829b5a0f 100644 --- a/docs/models/parakeet-unified-en-0.6b.md +++ b/docs/models/parakeet-unified-en-0.6b.md @@ -38,14 +38,16 @@ pinned 2026-05-10. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean, offline) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean, offline) | | --- | --- | ---: | ---: | -| F32 | [parakeet-unified-en-0.6b-F32.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-F32.gguf) | 2.47 GB | 1.59% | -| F16 | [parakeet-unified-en-0.6b-F16.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-F16.gguf) | 1.24 GB | 1.59% | -| Q8_0 | [parakeet-unified-en-0.6b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-Q8_0.gguf) | 731 MB | 1.60% | -| Q6_K | [parakeet-unified-en-0.6b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-Q6_K.gguf) | 602 MB | 1.61% | -| Q5_K_M | [parakeet-unified-en-0.6b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-Q5_K_M.gguf) | 541 MB | 1.58% | -| Q4_K_M | [parakeet-unified-en-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-Q4_K_M.gguf) | 477 MB | 1.62% | +| F32 | [parakeet-unified-en-0.6b-F32.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-F32.gguf) | 2.47 GB | 1.59% | +| F16 | [parakeet-unified-en-0.6b-F16.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-F16.gguf) | 1.24 GB | 1.59% | +| Q8_0 | [parakeet-unified-en-0.6b-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-Q8_0.gguf) | 731 MB | 1.60% | +| Q6_K | [parakeet-unified-en-0.6b-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-Q6_K.gguf) | 602 MB | 1.61% | +| Q5_K_M | [parakeet-unified-en-0.6b-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-Q5_K_M.gguf) | 541 MB | 1.58% | +| Q4_K_M | [parakeet-unified-en-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-Q4_K_M.gguf) | 477 MB | 1.62% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.59%. NVIDIA's self-reported number on the same split is 1.63% (from the [HF model card](https://huggingface.co/nvidia/parakeet-unified-en-0.6b)). diff --git a/docs/models/qwen3-asr-0.6b.md b/docs/models/qwen3-asr-0.6b.md index d36a91e2..29e0b6c2 100644 --- a/docs/models/qwen3-asr-0.6b.md +++ b/docs/models/qwen3-asr-0.6b.md @@ -23,14 +23,16 @@ Ported from upstream commit ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [Qwen3-ASR-0.6B-BF16.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-BF16.gguf) | 1499 MB | 2.11% | -| F16 | [Qwen3-ASR-0.6B-F16.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-F16.gguf) | 1507 MB | 2.12% | -| Q8_0 | [Qwen3-ASR-0.6B-Q8_0.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-Q8_0.gguf) | 811 MB | 2.11% | -| Q6_K | [Qwen3-ASR-0.6B-Q6_K.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-Q6_K.gguf) | 763 MB | 2.10% | -| Q5_K_M | [Qwen3-ASR-0.6B-Q5_K_M.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-Q5_K_M.gguf) | 707 MB | 2.21% | -| Q4_K_M | [Qwen3-ASR-0.6B-Q4_K_M.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-Q4_K_M.gguf) | 654 MB | 2.26% | +| BF16 | [Qwen3-ASR-0.6B-BF16.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-BF16.gguf) | 1.57 GB | 2.12% | +| F16 | [Qwen3-ASR-0.6B-F16.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-F16.gguf) | 1.58 GB | 2.12% | +| Q8_0 | [Qwen3-ASR-0.6B-Q8_0.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-Q8_0.gguf) | 850 MB | 2.11% | +| Q6_K | [Qwen3-ASR-0.6B-Q6_K.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-Q6_K.gguf) | 690 MB | 2.11% | +| Q5_K_M | [Qwen3-ASR-0.6B-Q5_K_M.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-Q5_K_M.gguf) | 645 MB | 2.21% | +| Q4_K_M | [Qwen3-ASR-0.6B-Q4_K_M.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-Q4_K_M.gguf) | 590 MB | 2.26% | + WER measured on LibriSpeech `test-clean` (2620 utterances), Whisper-style English text normalizer, jiwer 3.x, metal backend on Apple M4. Reproduce diff --git a/docs/models/qwen3-asr-1.7b.md b/docs/models/qwen3-asr-1.7b.md index e32f5ca4..e28930e8 100644 --- a/docs/models/qwen3-asr-1.7b.md +++ b/docs/models/qwen3-asr-1.7b.md @@ -22,14 +22,16 @@ Ported from upstream commit ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [Qwen3-ASR-1.7B-BF16.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-BF16.gguf) | 3894 MB | 1.62% | -| F16 | [Qwen3-ASR-1.7B-F16.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-F16.gguf) | 3902 MB | 1.62% | -| Q8_0 | [Qwen3-ASR-1.7B-Q8_0.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-Q8_0.gguf) | 2084 MB | 1.61% | -| Q6_K | [Qwen3-ASR-1.7B-Q6_K.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-Q6_K.gguf) | 1614 MB | 1.65% | -| Q5_K_M | [Qwen3-ASR-1.7B-Q5_K_M.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-Q5_K_M.gguf) | 1447 MB | 1.65% | -| Q4_K_M | [Qwen3-ASR-1.7B-Q4_K_M.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-Q4_K_M.gguf) | 1259 MB | 1.81% | +| BF16 | [Qwen3-ASR-1.7B-BF16.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-BF16.gguf) | 4.08 GB | 1.62% | +| F16 | [Qwen3-ASR-1.7B-F16.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-F16.gguf) | 4.09 GB | 1.62% | +| Q8_0 | [Qwen3-ASR-1.7B-Q8_0.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-Q8_0.gguf) | 2.19 GB | 1.62% | +| Q6_K | [Qwen3-ASR-1.7B-Q6_K.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-Q6_K.gguf) | 1.69 GB | 1.65% | +| Q5_K_M | [Qwen3-ASR-1.7B-Q5_K_M.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-Q5_K_M.gguf) | 1.52 GB | 1.65% | +| Q4_K_M | [Qwen3-ASR-1.7B-Q4_K_M.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-Q4_K_M.gguf) | 1.32 GB | 1.81% | + WER measured on LibriSpeech `test-clean` (2620 utterances), Whisper-style English text normalizer, jiwer 3.x, metal backend on Apple M4. Reproduce diff --git a/docs/models/sensevoice-small.md b/docs/models/sensevoice-small.md index c8129a2d..aa2e3a81 100644 --- a/docs/models/sensevoice-small.md +++ b/docs/models/sensevoice-small.md @@ -38,14 +38,16 @@ recordings (e.g. with VAD) for best results. See the ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [SenseVoiceSmall-F32.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-F32.gguf) | 893 MB | 3.13% | -| F16 | [SenseVoiceSmall-F16.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-F16.gguf) | 449 MB | 3.13% | -| Q8_0 | [SenseVoiceSmall-Q8_0.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-Q8_0.gguf) | 241 MB | 3.13% | -| Q6_K | [SenseVoiceSmall-Q6_K.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-Q6_K.gguf) | 187 MB | 3.14% | -| Q5_K_M | [SenseVoiceSmall-Q5_K_M.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-Q5_K_M.gguf) | 164 MB | 3.18% | -| Q4_K_M | [SenseVoiceSmall-Q4_K_M.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-Q4_K_M.gguf) | 139 MB | 3.45% | +| F32 | [SenseVoiceSmall-F32.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-F32.gguf) | 937 MB | 3.13% | +| F16 | [SenseVoiceSmall-F16.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-F16.gguf) | 470 MB | 3.13% | +| Q8_0 | [SenseVoiceSmall-Q8_0.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-Q8_0.gguf) | 253 MB | 3.13% | +| Q6_K | [SenseVoiceSmall-Q6_K.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-Q6_K.gguf) | 196 MB | 3.14% | +| Q5_K_M | [SenseVoiceSmall-Q5_K_M.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-Q5_K_M.gguf) | 172 MB | 3.18% | +| Q4_K_M | [SenseVoiceSmall-Q4_K_M.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-Q4_K_M.gguf) | 146 MB | 3.45% | + WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding. The publisher does not report a numerical diff --git a/docs/models/voxtral-mini-3b-2507.md b/docs/models/voxtral-mini-3b-2507.md index 3b6b3cd1..f215c585 100644 --- a/docs/models/voxtral-mini-3b-2507.md +++ b/docs/models/voxtral-mini-3b-2507.md @@ -29,14 +29,16 @@ pinned 2026-06-06. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [Voxtral-Mini-3B-2507-BF16.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-BF16.gguf) | 9.37 GB | 1.88% | -| F16 | [Voxtral-Mini-3B-2507-F16.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-F16.gguf) | 9.38 GB | 1.89% | -| Q8_0 | [Voxtral-Mini-3B-2507-Q8_0.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-Q8_0.gguf) | 5.00 GB | 1.87% | -| Q6_K | [Voxtral-Mini-3B-2507-Q6_K.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-Q6_K.gguf) | 3.87 GB | 1.87% | -| Q5_K_M | [Voxtral-Mini-3B-2507-Q5_K_M.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-Q5_K_M.gguf) | 3.46 GB | 1.91% | -| Q4_K_M | [Voxtral-Mini-3B-2507-Q4_K_M.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-Q4_K_M.gguf) | 2.98 GB | 1.94% | +| BF16 | [Voxtral-Mini-3B-2507-BF16.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-BF16.gguf) | 9.37 GB | 1.88% | +| F16 | [Voxtral-Mini-3B-2507-F16.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-F16.gguf) | 9.38 GB | 1.89% | +| Q8_0 | [Voxtral-Mini-3B-2507-Q8_0.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-Q8_0.gguf) | 5.00 GB | 1.87% | +| Q6_K | [Voxtral-Mini-3B-2507-Q6_K.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-Q6_K.gguf) | 3.87 GB | 1.87% | +| Q5_K_M | [Voxtral-Mini-3B-2507-Q5_K_M.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-Q5_K_M.gguf) | 3.46 GB | 1.91% | +| Q4_K_M | [Voxtral-Mini-3B-2507-Q4_K_M.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-Q4_K_M.gguf) | 2.98 GB | 1.94% | + WER measured on the full LibriSpeech `test-clean` split (2620 utterances) with the Whisper-style English text normalizer, batch size 8 on an NVIDIA diff --git a/docs/models/voxtral-small-24b-2507.md b/docs/models/voxtral-small-24b-2507.md index e23feb17..d7eeb96c 100644 --- a/docs/models/voxtral-small-24b-2507.md +++ b/docs/models/voxtral-small-24b-2507.md @@ -34,14 +34,16 @@ pinned 2026-06-05. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [Voxtral-Small-24B-2507-BF16.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-BF16.gguf) | 48.54 GB | 1.56% | -| F16 | [Voxtral-Small-24B-2507-F16.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-F16.gguf) | 48.55 GB | 1.57% | -| Q8_0 | [Voxtral-Small-24B-2507-Q8_0.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-Q8_0.gguf) | 25.81 GB | 1.56% | -| Q6_K | [Voxtral-Small-24B-2507-Q6_K.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-Q6_K.gguf) | 19.94 GB | 1.58% | -| Q5_K_M | [Voxtral-Small-24B-2507-Q5_K_M.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-Q5_K_M.gguf) | 17.14 GB | 1.60% | -| Q4_K_M | [Voxtral-Small-24B-2507-Q4_K_M.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-Q4_K_M.gguf) | 14.30 GB | 2.11% | +| BF16 | [Voxtral-Small-24B-2507-BF16.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-BF16.gguf) | 48.54 GB | 1.56% | +| F16 | [Voxtral-Small-24B-2507-F16.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-F16.gguf) | 48.55 GB | 1.57% | +| Q8_0 | [Voxtral-Small-24B-2507-Q8_0.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-Q8_0.gguf) | 25.81 GB | 1.56% | +| Q6_K | [Voxtral-Small-24B-2507-Q6_K.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-Q6_K.gguf) | 19.94 GB | 1.58% | +| Q5_K_M | [Voxtral-Small-24B-2507-Q5_K_M.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-Q5_K_M.gguf) | 17.14 GB | 1.60% | +| Q4_K_M | [Voxtral-Small-24B-2507-Q4_K_M.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-Q4_K_M.gguf) | 14.30 GB | 2.11% | + WER measured on the full LibriSpeech `test-clean` split (2620 utterances) with the Whisper-style English text normalizer, batch size 8 on an NVIDIA diff --git a/docs/models/whisper-base.en.md b/docs/models/whisper-base.en.md index af23eece..fc2d94c0 100644 --- a/docs/models/whisper-base.en.md +++ b/docs/models/whisper-base.en.md @@ -20,16 +20,18 @@ on 2026-04-26. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [whisper-base.en-F32.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-F32.gguf) | 279 MB | 4.14% | -| F16 | [whisper-base.en-F16.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-F16.gguf) | 144 MB | 4.13% | -| Q8_0 | [whisper-base.en-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-Q8_0.gguf) | 81 MB | 4.16% | -| Q6_K | [whisper-base.en-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-Q6_K.gguf) | 65 MB | 4.15% | -| Q5_K_M | [whisper-base.en-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-Q5_K_M.gguf) | 61 MB | 4.16% | -| Q4_K_M | [whisper-base.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-Q4_K_M.gguf) | 56 MB | 4.29% | - -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and segment timestamps enabled — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. +| F32 | [whisper-base.en-F32.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-F32.gguf) | 292 MB | 4.30% | +| F16 | [whisper-base.en-F16.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-F16.gguf) | 151 MB | 4.13% | +| Q8_0 | [whisper-base.en-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-Q8_0.gguf) | 85 MB | 4.16% | +| Q6_K | [whisper-base.en-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-Q6_K.gguf) | 68 MB | 4.15% | +| Q5_K_M | [whisper-base.en-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-Q5_K_M.gguf) | 64 MB | 4.16% | +| Q4_K_M | [whisper-base.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-Q4_K_M.gguf) | 59 MB | 4.29% | + + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. ## Quick Start diff --git a/docs/models/whisper-base.md b/docs/models/whisper-base.md index a01e31ec..8f0e01dc 100644 --- a/docs/models/whisper-base.md +++ b/docs/models/whisper-base.md @@ -20,16 +20,18 @@ on 2026-04-26. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [whisper-base-F32.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-F32.gguf) | 279 MB | 5.10% | -| F16 | [whisper-base-F16.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-F16.gguf) | 144 MB | 5.10% | -| Q8_0 | [whisper-base-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-Q8_0.gguf) | 81 MB | 5.12% | -| Q6_K | [whisper-base-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-Q6_K.gguf) | 65 MB | 5.12% | -| Q5_K_M | [whisper-base-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-Q5_K_M.gguf) | 61 MB | 5.19% | -| Q4_K_M | [whisper-base-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-Q4_K_M.gguf) | 56 MB | 5.36% | - -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and segment timestamps enabled — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. +| F32 | [whisper-base-F32.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-F32.gguf) | 292 MB | 5.11% | +| F16 | [whisper-base-F16.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-F16.gguf) | 151 MB | 5.10% | +| Q8_0 | [whisper-base-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-Q8_0.gguf) | 85 MB | 5.12% | +| Q6_K | [whisper-base-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-Q6_K.gguf) | 68 MB | 5.11% | +| Q5_K_M | [whisper-base-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-Q5_K_M.gguf) | 64 MB | 5.19% | +| Q4_K_M | [whisper-base-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-Q4_K_M.gguf) | 59 MB | 5.36% | + + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. ## Quick Start diff --git a/docs/models/whisper-large-v2.md b/docs/models/whisper-large-v2.md index 974d4027..502d87fe 100644 --- a/docs/models/whisper-large-v2.md +++ b/docs/models/whisper-large-v2.md @@ -20,16 +20,18 @@ on 2026-04-26. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [whisper-large-v2-F32.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-F32.gguf) | 5.75 GB | 2.68% | -| F16 | [whisper-large-v2-F16.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-F16.gguf) | 2.89 GB | 2.94% | -| Q8_0 | [whisper-large-v2-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-Q8_0.gguf) | 1.55 GB | 2.65% | -| Q6_K | [whisper-large-v2-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-Q6_K.gguf) | 1.21 GB | 2.83% | -| Q5_K_M | [whisper-large-v2-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-Q5_K_M.gguf) | 1.08 GB | 2.72% | -| Q4_K_M | [whisper-large-v2-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-Q4_K_M.gguf) | 950 MB | 2.46% | - -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and segment timestamps enabled — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. +| F32 | [whisper-large-v2-F32.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-F32.gguf) | 6.18 GB | 2.67% | +| F16 | [whisper-large-v2-F16.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-F16.gguf) | 3.11 GB | 2.68% | +| Q8_0 | [whisper-large-v2-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-Q8_0.gguf) | 1.67 GB | 2.97% | +| Q6_K | [whisper-large-v2-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-Q6_K.gguf) | 1.30 GB | 2.83% | +| Q5_K_M | [whisper-large-v2-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-Q5_K_M.gguf) | 1.16 GB | 2.71% | +| Q4_K_M | [whisper-large-v2-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-Q4_K_M.gguf) | 997 MB | 2.46% | + + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. ## Quick Start diff --git a/docs/models/whisper-large-v3-turbo.md b/docs/models/whisper-large-v3-turbo.md index 797a9d02..7b872494 100644 --- a/docs/models/whisper-large-v3-turbo.md +++ b/docs/models/whisper-large-v3-turbo.md @@ -20,15 +20,17 @@ on 2026-04-26. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F16 | [whisper-large-v3-turbo-F16.gguf](https://huggingface.co/handy-computer/whisper-large-v3-turbo-gguf/resolve/main/whisper-large-v3-turbo-F16.gguf) | 1.51 GB | 2.01% | -| Q8_0 | [whisper-large-v3-turbo-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-large-v3-turbo-gguf/resolve/main/whisper-large-v3-turbo-Q8_0.gguf) | 845 MB | 2.01% | -| Q6_K | [whisper-large-v3-turbo-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-large-v3-turbo-gguf/resolve/main/whisper-large-v3-turbo-Q6_K.gguf) | 660 MB | 2.01% | -| Q5_K_M | [whisper-large-v3-turbo-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v3-turbo-gguf/resolve/main/whisper-large-v3-turbo-Q5_K_M.gguf) | 591 MB | 2.03% | -| Q4_K_M | [whisper-large-v3-turbo-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v3-turbo-gguf/resolve/main/whisper-large-v3-turbo-Q4_K_M.gguf) | 511 MB | 2.04% | - -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and segment timestamps enabled — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. +| F16 | [whisper-large-v3-turbo-F16.gguf](https://huggingface.co/handy-computer/whisper-large-v3-turbo-gguf/resolve/main/whisper-large-v3-turbo-F16.gguf) | 1.63 GB | 2.01% | +| Q8_0 | [whisper-large-v3-turbo-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-large-v3-turbo-gguf/resolve/main/whisper-large-v3-turbo-Q8_0.gguf) | 886 MB | 2.01% | +| Q6_K | [whisper-large-v3-turbo-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-large-v3-turbo-gguf/resolve/main/whisper-large-v3-turbo-Q6_K.gguf) | 693 MB | 2.01% | +| Q5_K_M | [whisper-large-v3-turbo-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v3-turbo-gguf/resolve/main/whisper-large-v3-turbo-Q5_K_M.gguf) | 620 MB | 2.03% | +| Q4_K_M | [whisper-large-v3-turbo-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v3-turbo-gguf/resolve/main/whisper-large-v3-turbo-Q4_K_M.gguf) | 536 MB | 2.04% | + + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. ## Quick Start diff --git a/docs/models/whisper-large-v3.md b/docs/models/whisper-large-v3.md index 5fc3fd02..e1cba1dd 100644 --- a/docs/models/whisper-large-v3.md +++ b/docs/models/whisper-large-v3.md @@ -20,15 +20,17 @@ on 2026-04-26. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F16 | [whisper-large-v3-F16.gguf](https://huggingface.co/handy-computer/whisper-large-v3-gguf/resolve/main/whisper-large-v3-F16.gguf) | 2.88 GB | 1.81% | -| Q8_0 | [whisper-large-v3-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-large-v3-gguf/resolve/main/whisper-large-v3-Q8_0.gguf) | 1.55 GB | 1.82% | -| Q6_K | [whisper-large-v3-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-large-v3-gguf/resolve/main/whisper-large-v3-Q6_K.gguf) | 1.21 GB | 1.83% | -| Q5_K_M | [whisper-large-v3-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v3-gguf/resolve/main/whisper-large-v3-Q5_K_M.gguf) | 1.08 GB | 1.84% | -| Q4_K_M | [whisper-large-v3-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v3-gguf/resolve/main/whisper-large-v3-Q4_K_M.gguf) | 951 MB | 1.86% | - -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and segment timestamps enabled — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. +| F16 | [whisper-large-v3-F16.gguf](https://huggingface.co/handy-computer/whisper-large-v3-gguf/resolve/main/whisper-large-v3-F16.gguf) | 3.11 GB | 1.81% | +| Q8_0 | [whisper-large-v3-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-large-v3-gguf/resolve/main/whisper-large-v3-Q8_0.gguf) | 1.67 GB | 1.82% | +| Q6_K | [whisper-large-v3-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-large-v3-gguf/resolve/main/whisper-large-v3-Q6_K.gguf) | 1.30 GB | 1.83% | +| Q5_K_M | [whisper-large-v3-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v3-gguf/resolve/main/whisper-large-v3-Q5_K_M.gguf) | 1.16 GB | 1.84% | +| Q4_K_M | [whisper-large-v3-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v3-gguf/resolve/main/whisper-large-v3-Q4_K_M.gguf) | 997 MB | 1.86% | + + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. ## Quick Start diff --git a/docs/models/whisper-large.md b/docs/models/whisper-large.md index 8306a0a3..608919a5 100644 --- a/docs/models/whisper-large.md +++ b/docs/models/whisper-large.md @@ -20,16 +20,18 @@ on 2026-04-26. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [whisper-large-F32.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-F32.gguf) | 5.75 GB | 2.72% | -| F16 | [whisper-large-F16.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-F16.gguf) | 2.89 GB | 2.74% | -| Q8_0 | [whisper-large-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-Q8_0.gguf) | 1.55 GB | 2.74% | -| Q6_K | [whisper-large-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-Q6_K.gguf) | 1.21 GB | 2.62% | -| Q5_K_M | [whisper-large-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-Q5_K_M.gguf) | 1.08 GB | 2.70% | -| Q4_K_M | [whisper-large-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-Q4_K_M.gguf) | 950 MB | 2.67% | - -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and segment timestamps enabled — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. +| F32 | [whisper-large-F32.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-F32.gguf) | 6.18 GB | 2.72% | +| F16 | [whisper-large-F16.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-F16.gguf) | 3.11 GB | 2.72% | +| Q8_0 | [whisper-large-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-Q8_0.gguf) | 1.67 GB | 2.71% | +| Q6_K | [whisper-large-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-Q6_K.gguf) | 1.30 GB | 2.62% | +| Q5_K_M | [whisper-large-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-Q5_K_M.gguf) | 1.16 GB | 2.84% | +| Q4_K_M | [whisper-large-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-Q4_K_M.gguf) | 997 MB | 2.67% | + + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. ## Quick Start diff --git a/docs/models/whisper-medium.en.md b/docs/models/whisper-medium.en.md index 3842e1d1..f0d3b26c 100644 --- a/docs/models/whisper-medium.en.md +++ b/docs/models/whisper-medium.en.md @@ -20,16 +20,18 @@ on 2026-04-26. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [whisper-medium.en-F32.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-F32.gguf) | 2.85 GB | 2.74% | -| F16 | [whisper-medium.en-F16.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-F16.gguf) | 1.44 GB | 2.73% | -| Q8_0 | [whisper-medium.en-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-Q8_0.gguf) | 793 MB | 2.72% | -| Q6_K | [whisper-medium.en-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-Q6_K.gguf) | 618 MB | 2.83% | -| Q5_K_M | [whisper-medium.en-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-Q5_K_M.gguf) | 556 MB | 2.74% | -| Q4_K_M | [whisper-medium.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-Q4_K_M.gguf) | 481 MB | 2.91% | - -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and segment timestamps enabled — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. +| F32 | [whisper-medium.en-F32.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-F32.gguf) | 3.06 GB | 2.74% | +| F16 | [whisper-medium.en-F16.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-F16.gguf) | 1.54 GB | 2.73% | +| Q8_0 | [whisper-medium.en-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-Q8_0.gguf) | 831 MB | 2.72% | +| Q6_K | [whisper-medium.en-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-Q6_K.gguf) | 648 MB | 2.82% | +| Q5_K_M | [whisper-medium.en-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-Q5_K_M.gguf) | 583 MB | 2.75% | +| Q4_K_M | [whisper-medium.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-Q4_K_M.gguf) | 504 MB | 2.91% | + + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. ## Quick Start diff --git a/docs/models/whisper-medium.md b/docs/models/whisper-medium.md index 62b2c725..14f2a201 100644 --- a/docs/models/whisper-medium.md +++ b/docs/models/whisper-medium.md @@ -20,16 +20,18 @@ on 2026-04-26. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [whisper-medium-F32.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-F32.gguf) | 2.85 GB | 2.63% | -| F16 | [whisper-medium-F16.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-F16.gguf) | 1.44 GB | 2.63% | -| Q8_0 | [whisper-medium-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-Q8_0.gguf) | 793 MB | 2.64% | -| Q6_K | [whisper-medium-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-Q6_K.gguf) | 618 MB | 2.59% | -| Q5_K_M | [whisper-medium-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-Q5_K_M.gguf) | 556 MB | 2.62% | -| Q4_K_M | [whisper-medium-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-Q4_K_M.gguf) | 481 MB | 2.59% | - -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and segment timestamps enabled — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. +| F32 | [whisper-medium-F32.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-F32.gguf) | 3.06 GB | 2.64% | +| F16 | [whisper-medium-F16.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-F16.gguf) | 1.54 GB | 2.63% | +| Q8_0 | [whisper-medium-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-Q8_0.gguf) | 832 MB | 2.64% | +| Q6_K | [whisper-medium-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-Q6_K.gguf) | 648 MB | 2.59% | +| Q5_K_M | [whisper-medium-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-Q5_K_M.gguf) | 583 MB | 2.62% | +| Q4_K_M | [whisper-medium-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-Q4_K_M.gguf) | 504 MB | 2.59% | + + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. ## Quick Start diff --git a/docs/models/whisper-small.en.md b/docs/models/whisper-small.en.md index 8297555c..e7233736 100644 --- a/docs/models/whisper-small.en.md +++ b/docs/models/whisper-small.en.md @@ -20,16 +20,18 @@ on 2026-04-26. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [whisper-small.en-F32.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-F32.gguf) | 924 MB | 3.09% | -| F16 | [whisper-small.en-F16.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-F16.gguf) | 470 MB | 2.97% | -| Q8_0 | [whisper-small.en-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-Q8_0.gguf) | 257 MB | 3.09% | -| Q6_K | [whisper-small.en-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-Q6_K.gguf) | 202 MB | 2.97% | -| Q5_K_M | [whisper-small.en-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-Q5_K_M.gguf) | 185 MB | 3.12% | -| Q4_K_M | [whisper-small.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-Q4_K_M.gguf) | 164 MB | 3.08% | - -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and segment timestamps enabled — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. +| F32 | [whisper-small.en-F32.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-F32.gguf) | 969 MB | 3.11% | +| F16 | [whisper-small.en-F16.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-F16.gguf) | 493 MB | 2.97% | +| Q8_0 | [whisper-small.en-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-Q8_0.gguf) | 270 MB | 3.09% | +| Q6_K | [whisper-small.en-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-Q6_K.gguf) | 212 MB | 2.97% | +| Q5_K_M | [whisper-small.en-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-Q5_K_M.gguf) | 194 MB | 3.11% | +| Q4_K_M | [whisper-small.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-Q4_K_M.gguf) | 172 MB | 3.09% | + + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. ## Quick Start diff --git a/docs/models/whisper-small.md b/docs/models/whisper-small.md index ac8c44e0..93c386dd 100644 --- a/docs/models/whisper-small.md +++ b/docs/models/whisper-small.md @@ -20,16 +20,18 @@ on 2026-04-26. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [whisper-small-F32.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-F32.gguf) | 924 MB | 3.33% | -| F16 | [whisper-small-F16.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-F16.gguf) | 470 MB | 3.34% | -| Q8_0 | [whisper-small-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-Q8_0.gguf) | 257 MB | 3.33% | -| Q6_K | [whisper-small-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-Q6_K.gguf) | 202 MB | 3.33% | -| Q5_K_M | [whisper-small-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-Q5_K_M.gguf) | 185 MB | 3.37% | -| Q4_K_M | [whisper-small-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-Q4_K_M.gguf) | 164 MB | 3.40% | - -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and segment timestamps enabled — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. +| F32 | [whisper-small-F32.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-F32.gguf) | 969 MB | 3.34% | +| F16 | [whisper-small-F16.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-F16.gguf) | 493 MB | 3.33% | +| Q8_0 | [whisper-small-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-Q8_0.gguf) | 270 MB | 3.33% | +| Q6_K | [whisper-small-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-Q6_K.gguf) | 212 MB | 3.33% | +| Q5_K_M | [whisper-small-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-Q5_K_M.gguf) | 194 MB | 3.37% | +| Q4_K_M | [whisper-small-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-Q4_K_M.gguf) | 172 MB | 3.40% | + + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. ## Quick Start diff --git a/docs/models/whisper-tiny.en.md b/docs/models/whisper-tiny.en.md index f1bb0b10..e3c3ff7c 100644 --- a/docs/models/whisper-tiny.en.md +++ b/docs/models/whisper-tiny.en.md @@ -20,16 +20,18 @@ on 2026-04-26. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [whisper-tiny.en-F32.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-F32.gguf) | 146 MB | 5.77% | -| F16 | [whisper-tiny.en-F16.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-F16.gguf) | 76 MB | 5.77% | -| Q8_0 | [whisper-tiny.en-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-Q8_0.gguf) | 44 MB | 5.72% | -| Q6_K | [whisper-tiny.en-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-Q6_K.gguf) | 43 MB | 5.80% | -| Q5_K_M | [whisper-tiny.en-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-Q5_K_M.gguf) | 42 MB | 5.89% | -| Q4_K_M | [whisper-tiny.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-Q4_K_M.gguf) | 42 MB | 5.99% | - -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and segment timestamps enabled — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. +| F32 | [whisper-tiny.en-F32.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-F32.gguf) | 153 MB | 5.77% | +| F16 | [whisper-tiny.en-F16.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-F16.gguf) | 80 MB | 5.78% | +| Q8_0 | [whisper-tiny.en-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-Q8_0.gguf) | 46 MB | 5.72% | +| Q6_K | [whisper-tiny.en-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-Q6_K.gguf) | 45 MB | 5.83% | +| Q5_K_M | [whisper-tiny.en-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-Q5_K_M.gguf) | 44 MB | 5.91% | +| Q4_K_M | [whisper-tiny.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-Q4_K_M.gguf) | 44 MB | 5.96% | + + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. ## Quick Start diff --git a/docs/models/whisper-tiny.md b/docs/models/whisper-tiny.md index 9510ddfb..b8be36cb 100644 --- a/docs/models/whisper-tiny.md +++ b/docs/models/whisper-tiny.md @@ -20,16 +20,18 @@ on 2026-04-26. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| F32 | [whisper-tiny-F32.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-F32.gguf) | 146 MB | 7.54% | -| F16 | [whisper-tiny-F16.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-F16.gguf) | 76 MB | 7.49% | -| Q8_0 | [whisper-tiny-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-Q8_0.gguf) | 44 MB | 7.53% | -| Q6_K | [whisper-tiny-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-Q6_K.gguf) | 43 MB | 7.63% | -| Q5_K_M | [whisper-tiny-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-Q5_K_M.gguf) | 42 MB | 7.63% | -| Q4_K_M | [whisper-tiny-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-Q4_K_M.gguf) | 42 MB | 7.76% | - -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and segment timestamps enabled — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. +| F32 | [whisper-tiny-F32.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-F32.gguf) | 153 MB | 7.49% | +| F16 | [whisper-tiny-F16.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-F16.gguf) | 80 MB | 7.48% | +| Q8_0 | [whisper-tiny-Q8_0.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-Q8_0.gguf) | 46 MB | 7.52% | +| Q6_K | [whisper-tiny-Q6_K.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-Q6_K.gguf) | 45 MB | 7.54% | +| Q5_K_M | [whisper-tiny-Q5_K_M.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-Q5_K_M.gguf) | 44 MB | 7.82% | +| Q4_K_M | [whisper-tiny-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-Q4_K_M.gguf) | 44 MB | 7.78% | + + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. ## Quick Start diff --git a/docs/models/whisper.md b/docs/models/whisper.md index cb940ded..06d175f6 100644 --- a/docs/models/whisper.md +++ b/docs/models/whisper.md @@ -38,7 +38,8 @@ see the family doc at WER is on LibriSpeech test-clean for the **Q8_0** preset (the default recommended quant), measured by transcribe.cpp's WER pipeline with -segment timestamps enabled. See each per-variant doc for the full quant +timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness +default). See each per-variant doc for the full quant matrix (F32/F16/Q8_0/Q6_K/Q5_K_M/Q4_K_M) and a discussion of how our numbers compare to OpenAI's self-reported figures. Numbers come from single Metal-backed runs; Metal's non-deterministic parallel reductions add ~0.1pp run-to-run variance on the noise floor. diff --git a/docs/tools/wer.md b/docs/tools/wer.md index d7be66da..b4691a82 100644 --- a/docs/tools/wer.md +++ b/docs/tools/wer.md @@ -45,6 +45,32 @@ The recipe is **stamped into the hyp JSONL `batch_header`** (`recipe` field) by `run.py`, so every artifact is self-describing and a methodology drift shows up in the file rather than silently shifting the number. +## Publication profile + +[`catalog/_benchmark_profiles.json`](../../catalog/_benchmark_profiles.json) +is the executable publication contract. For accuracy it requires LibriSpeech +test-clean at every downloaded quant for English-capable models, plus FLEURS +test Q8_0 for every supported language represented by FLEURS. Run missing +cells on Modal without restating datasets, quants, batching, language prompts, +or GPU as flags: + +```bash +modal run scripts/wer/remote/modal_sweep.py::publication_sweep \ + --models # add --plan-only to inspect the expansion +``` + +Score the JSONLs named by the sweep, then ingest and enforce the model's exact +published set: + +```bash +uv run scripts/catalog/ingest_accuracy.py --models +uv run scripts/catalog/check.py --publication-profile --models +``` + +Arbitrary `run.py` and `modal_sweep.py::sweep` invocations remain useful for +experiments, but only profile-stamped full-split reports can be ingested as +published accuracy. + **What does and doesn't move WER (measured on whisper-medium F16):** - **Timestamps move it ~0.2pp.** `segment` → 2.63%, `none` → 2.81%. This is diff --git a/scripts/bench/run.py b/scripts/bench/run.py index 3e103bee..359291ee 100755 --- a/scripts/bench/run.py +++ b/scripts/bench/run.py @@ -17,7 +17,8 @@ Usage: uv run scripts/bench/run.py # all variants - uv run scripts/bench/run.py --models Qwen3-ASR-0.6B + uv run scripts/bench/run.py --profile --models Qwen3-ASR-0.6B # publication matrix + uv run scripts/bench/run.py --models Qwen3-ASR-0.6B # experiment uv run scripts/bench/run.py --models Qwen/Qwen3-ASR-0.6B # HF slug form uv run scripts/bench/run.py --models Qwen3-ASR-0.6B,Qwen3-ASR-1.7B uv run scripts/bench/run.py --models parakeet-tdt-0.6b-v3 --quants f16 @@ -103,6 +104,12 @@ from datetime import datetime, timezone from pathlib import Path +CATALOG_DIR = Path(__file__).resolve().parents[1] / "catalog" +if str(CATALOG_DIR) not in sys.path: + sys.path.insert(0, str(CATALOG_DIR)) +import common as catalog_common # noqa: E402 +import profiles as benchmark_profiles # noqa: E402 + DEFAULT_QUANTS = ["f16", "q8_0", "q4_k_m"] DEFAULT_SAMPLES = ["jfk", "dots"] @@ -657,16 +664,29 @@ def parse_args() -> argparse.Namespace: "'Qwen3-ASR-0.6B', HF form like 'Qwen/Qwen3-ASR-0.6B', " "or paths to .gguf files); default: all variants " "under models/") - p.add_argument("--quants", type=str, default=",".join(DEFAULT_QUANTS)) - p.add_argument("--samples", type=str, default=",".join(DEFAULT_SAMPLES)) - p.add_argument("--iters", type=int, default=2) - p.add_argument("--warmup", type=int, default=1) + p.add_argument("--quants", type=str, default=None, + help="comma-separated quants (default: f16,q8_0,q4_k_m). " + "Not used with --profile.") + p.add_argument("--samples", type=str, default=None, + help="comma-separated samples (default: jfk,dots). " + "Not used with --profile.") + p.add_argument("--iters", type=int, default=None) + p.add_argument("--warmup", type=int, default=None) p.add_argument("--backends", type=str, default=None, help="comma-separated list: metal,cpu,vulkan or 'all' " "(default: auto-detect)") p.add_argument("--name", type=str, default=None, help="stable label for named baselines " "(replaces timestamp in output filename)") + p.add_argument("--publication", action="store_true", + help="mark a manually specified matrix as publishable. " + "Prefer --profile, which derives and validates the " + "whole publication protocol.") + p.add_argument("--profile", nargs="?", const="", + help="run a catalog publication profile; optionally name " + "it (default: catalog/_benchmark_profiles.json default). " + "The profile supplies quants, samples, target backends, " + "iteration counts, and cooldown policy.") p.add_argument("--bench-bin", type=Path, default=None, help="legacy override for the bench binary " "(only valid when exactly one backend is selected)") @@ -674,7 +694,7 @@ def parse_args() -> argparse.Namespace: help="output root (default: reports/perf)") p.add_argument("--dry-run", action="store_true", help="print selected backends + matrix without running") - p.add_argument("--cooldown-tctl-c", type=float, default=0.0, + p.add_argument("--cooldown-tctl-c", type=float, default=None, help="if >0, wait between cells for k10temp Tctl to drop " "below this value (°C) to avoid thermal bias; " "publication benches use 55") @@ -693,9 +713,30 @@ def _run_one_backend(backend: BackendSpec, git_sha: str) -> int: """Run the full variant matrix against a single backend. Returns exit code.""" exit_code = 0 - name_slug = slugify(args.name) if args.name else None for variant, group in by_variant.items(): + # Profile runs contain only cells assigned to this machine/backend, + # including model-specific reviewed exceptions. + if args.profile is not None: + record = args._catalog_records[variant] + expected = benchmark_profiles.apply_exceptions( + record, "speed", + benchmark_profiles.expected_speed(record, args._profile_data)) + expected_keys = { + (cell["machine"], cell["backend"], cell["quant"].lower(), cell["sample"]) + for cell in expected + } + machine_slug = benchmark_profiles.canonical_machine(machine["slug"]) + group = [cell for cell in group + if (machine_slug, backend.name, cell.quant.lower(), cell.sample) + in expected_keys] + if not group: + continue + + # A publication run names itself after the variant unless told + # otherwise, so the file on disk says what it is. + run_name = args.name or (f"{variant}-publication" if args.publication else None) + name_slug = slugify(run_name) if run_name else None runs: list[dict] = [] for cell in group: print(f"[{backend.name}][{variant}] {cell.quant} \u00d7 {cell.sample} ...", @@ -723,7 +764,11 @@ def _run_one_backend(backend: BackendSpec, aggregate = { "schema": "transcribe-bench-driver-v1", "timestamp": timestamp, - "name": args.name or "", + "name": run_name or "", + # Eligibility for the catalog is a property the run declares, not + # something an importer infers from the filename later. + "publication": bool(args.publication), + "publication_profile": args._profile_id, "machine": machine, "git_sha": git_sha, "variant": variant, @@ -753,15 +798,67 @@ def main() -> int: timestamp = now_utc_iso() slug_ts = timestamp_for_filename(timestamp) - quants = [q.strip() for q in args.quants.split(",") if q.strip()] - sample_stems = [s.strip() for s in args.samples.split(",") if s.strip()] model_tokens: list[str] | None = None if args.models: model_tokens = [t.strip() for t in args.models.split(",") if t.strip()] + args._profile_id = None + args._profile_data = None + args._catalog_records = {} + if args.profile is not None: + conflicting = [name for name, value in ( + ("--quants", args.quants), ("--samples", args.samples), + ("--backends", args.backends), ("--iters", args.iters), + ("--warmup", args.warmup), ("--cooldown-tctl-c", args.cooldown_tctl_c), + ("--name", args.name)) if value is not None] + if conflicting: + print(f"error: --profile supplies {', '.join(conflicting)}; do not override it", + file=sys.stderr) + return 2 + try: + args._profile_id, args._profile_data = benchmark_profiles.load_profile( + args.profile or None) + except (OSError, ValueError, json.JSONDecodeError) as exc: + print(f"error: {exc}", file=sys.stderr) + return 2 + args._catalog_records = catalog_common.load_records() + target = benchmark_profiles.target_for_machine( + args._profile_data, machine["slug"]) + if target is None: + print(f"error: machine {machine['slug']!r} is not a target in " + f"profile {args._profile_id}", file=sys.stderr) + return 2 + speed = args._profile_data["speed"] + quants = sorted({item["quant"] for record in args._catalog_records.values() + for item in record.get("downloads", [])}) + sample_stems = list(speed["samples"]) + args.backends = ",".join(target["backends"]) + args.iters = int(speed["iterations"]) + args.warmup = int(speed["warmup"]) + args.cooldown_tctl_c = float(target.get("cooldown_tctl_c", 0.0)) + args.publication = True + else: + quants = [q.strip() for q in (args.quants or ",".join(DEFAULT_QUANTS)).split(",") + if q.strip()] + sample_stems = [s.strip() for s in (args.samples or ",".join(DEFAULT_SAMPLES)).split(",") + if s.strip()] + args.iters = 2 if args.iters is None else args.iters + args.warmup = 1 if args.warmup is None else args.warmup + args.cooldown_tctl_c = 0.0 if args.cooldown_tctl_c is None else args.cooldown_tctl_c + backends = resolve_backends(repo, args.backends, args.bench_bin) cells = discover_matrix(repo, model_tokens, quants, sample_stems) + if args.profile is not None: + # A local models directory may contain unpublished experiments. A + # profile runs only files named by catalog downloads. + allowed = { + (variant, item["quant"].lower()) + for variant, record in args._catalog_records.items() + for item in record.get("downloads", []) + } + cells = [cell for cell in cells + if (cell.variant, cell.quant.lower()) in allowed] by_variant = group_by_variant(cells) if args.dry_run: diff --git a/scripts/catalog/backfill_provenance.py b/scripts/catalog/backfill_provenance.py new file mode 100755 index 00000000..f480f108 --- /dev/null +++ b/scripts/catalog/backfill_provenance.py @@ -0,0 +1,67 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# /// +"""Mark migrated published measurements whose original run SHA is unavailable. + +This does not invent an engine commit or timing breakdown. It records the +narrow fact we do know: the number survived in a model card/publication before +profile-stamped reports existed. New measurements must carry engine_sha and are +never eligible for this marker. +""" +from __future__ import annotations + +import argparse +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +import common # noqa: E402 + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--models", default="") + parser.add_argument("--write", action="store_true") + args = parser.parse_args() + + records = common.load_records() + selected = {item.strip() for item in args.models.split(",") if item.strip()} + unknown = selected - records.keys() + if unknown: + print(f"unknown catalog variant(s): {', '.join(sorted(unknown))}", file=sys.stderr) + return 2 + + rows_changed = records_changed = 0 + by_section = {"accuracy_benchmarks": 0, "speed_benchmarks": 0} + for variant, record in records.items(): + if selected and variant not in selected: + continue + changed = False + for section in by_section: + for row in record.get(section, []): + if row.get("engine_sha") or row.get("measurement_provenance"): + continue + # Both row types have a user-facing published number. Speed's + # durable legacy number may be xRT-only (total_ms is null). + if section == "speed_benchmarks" and row.get("xrt_compute") is None: + continue + row["measurement_provenance"] = "legacy-published" + rows_changed += 1 + by_section[section] += 1 + changed = True + if changed: + records_changed += 1 + if args.write: + common.write_record(common.CATALOG_DIR / f"{variant}.json", record) + + print(f"legacy provenance: {rows_changed} row(s) across {records_changed} record(s) " + f"({by_section['accuracy_benchmarks']} accuracy, " + f"{by_section['speed_benchmarks']} speed)") + if not args.write: + print("dry run: pass --write to apply") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/catalog/cards.py b/scripts/catalog/cards.py new file mode 100644 index 00000000..5e171069 --- /dev/null +++ b/scripts/catalog/cards.py @@ -0,0 +1,102 @@ +"""Derive an HF card spec from a catalog record. + +Split out of scripts/hf_cards/generate.py so the catalog checks can verify a +card spec without pulling in jinja2 and huggingface-hub. Pure stdlib: it takes +and returns plain dicts, and knows nothing about YAML or templates. +""" +from __future__ import annotations + +import pathlib +import statistics +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +import common # noqa: E402 + +CAP_FLAGS = ("streaming", "translate", "lang_detect") +DEFAULT_SIZE = {"units": "dec", "gb_dp": 2, "mb_only": False} + + +def derive_capabilities(record: dict) -> dict: + """The boolean flags the `transcribe_cpp:` metadata block carries.""" + caps = record.get("capabilities", {}) + out = {flag: bool(caps.get(flag, {}).get("supported")) for flag in CAP_FLAGS} + if caps.get("diarize", {}).get("supported"): + out["diarize"] = True + granularities = caps.get("timestamps", {}).get("granularities") or [] + # Advertise the finest granularity the port actually emits. + out["timestamps"] = next((g for g in ("token", "word", "segment") + if g in granularities), "none") + return out + + +def derive_perf(record: dict, default_quant: str | None) -> dict: + """Speedup over realtime per rig/backend, at the card's default quant. + + One published figure per (rig, backend), averaged over the benchmark + samples -- which is what the hand-written specs already did. Deriving it + keeps the metadata block from drifting when a sweep is re-run, and picks + up rigs a hand-written spec never got around to listing. + """ + cells: dict[tuple[str, str], list[float]] = {} + for row in record.get("speed_benchmarks", []): + if row["quant"] != default_quant: + continue + cells.setdefault((row["machine"], row["backend"]), []).append(row["xrt_compute"]) + perf: dict[str, dict[str, float]] = {} + for (machine, backend), values in sorted(cells.items()): + mean = round(statistics.fmean(values), 1) + perf.setdefault(machine, {})[backend] = int(mean) if mean == int(mean) else mean + return perf + + +def derive_quants(record: dict, size: dict) -> list[dict]: + errors = common.headline_rows(record) + quants = [] + for item in record.get("downloads", []): + entry = {"name": item["quant"], "filename": item["filename"], + "size": common.fmt_size(item["size_bytes"], **size)} + row = errors.get(item["quant"]) + if row is not None: + entry["wer"] = common.fmt_err(row) + quants.append(entry) + return quants + + +def derive_spec(record: dict, editorial: dict) -> dict: + """Everything the catalog can supply, before the editorial YAML lands.""" + downloads = record.get("downloads", []) + index = editorial.get("default_quant_index", 0) + default_quant = downloads[index]["quant"] if index < len(downloads) else None + size = {**DEFAULT_SIZE, **(editorial.get("size") or {})} + spec = { + "hf_repo": record["upstream_repo"], + "target_repo": record.get("published_repo"), + "upstream_commit": record["upstream_commit"], + "license": record["license"]["spdx"], + "license_display": record["license"]["display"], + "languages": list(record.get("languages", [])), + "capabilities": derive_capabilities(record), + "quants": derive_quants(record, size), + "perf": derive_perf(record, default_quant), + } + label = common.headline_label(record) + if label: + spec["wer"] = {"source": label} + return spec + + +def merge(base: dict, over: dict) -> dict: + """Editorial values win. Nested dicts merge; lists replace wholesale.""" + out = dict(base) + for key, value in over.items(): + if isinstance(value, dict) and isinstance(out.get(key), dict): + out[key] = merge(out[key], value) + else: + out[key] = value + return out + + +def merge_quants(derived: list[dict], overrides: dict) -> list[dict]: + """Per-quant editorial extras (a second metric column), keyed by quant.""" + return [merge(q, overrides.get(q["name"], {})) for q in derived] diff --git a/scripts/catalog/check.py b/scripts/catalog/check.py index 347e9b1f..78c01a47 100755 --- a/scripts/catalog/check.py +++ b/scripts/catalog/check.py @@ -1,14 +1,18 @@ #!/usr/bin/env -S uv run --script # /// script # requires-python = ">=3.11" -# dependencies = ["jsonschema"] +# dependencies = ["jsonschema", "pyyaml"] # /// """Validate the durable catalog JSON records. -Checks the JSON schema plus cross-row integrity that the schema cannot express, -such as benchmark rows referencing a quant the variant does not publish. +Checks the JSON schema, cross-row integrity the schema cannot express (a +benchmark row referencing a quant the variant does not publish), that every +record is paired with the card spec and doc the schema says it owns, and that +no card spec re-states a value the catalog already derives. uv run scripts/catalog/check.py + uv run scripts/catalog/check.py --publication-profile + uv run scripts/catalog/check.py --publication-profile --models whisper-tiny uv run scripts/catalog/check.py --dir catalog """ from __future__ import annotations @@ -19,9 +23,13 @@ import pathlib import sys +import yaml from jsonschema import Draft202012Validator REPO = pathlib.Path(__file__).resolve().parents[2] +sys.path.insert(0, str(REPO / "scripts" / "catalog")) +import cards # noqa: E402 +import profiles # noqa: E402 def load(d: pathlib.Path) -> dict[str, dict]: @@ -61,17 +69,218 @@ def integrity_pass(records: dict) -> int: +def pairing_pass(records: dict) -> int: + """Every record owns a card spec; a doc is expected unless waived. + + A dozen variants are documented inside a family page rather than a page of + their own (the Moonshine language fine-tunes), so a missing doc is a note + rather than a failure -- but a missing card spec means nothing can be + published for that variant at all. + """ + bad, undocumented = 0, [] + for name in records: + if not (REPO / "scripts" / "hf_cards" / f"{name}.yaml").exists(): + bad += 1 + print(f" FAIL {name}: no scripts/hf_cards/{name}.yaml") + if not (REPO / "docs" / "models" / f"{name}.md").exists(): + undocumented.append(name) + print(f"pairing {len(records) - bad}/{len(records)} have a card spec; " + f"{len(records) - len(undocumented)}/{len(records)} have their own doc") + if undocumented: + print(f" documented elsewhere: {', '.join(undocumented)}") + return bad + + +def derivable_pass(records: dict) -> int: + """A card spec must not re-state what the catalog already derives.""" + stale = 0 + for name, record in records.items(): + path = REPO / "scripts" / "hf_cards" / f"{name}.yaml" + if not path.exists(): + continue + editorial = yaml.safe_load(path.read_text()) or {} + derived = cards.derive_spec(record, editorial) + for key, value in derived.items(): + if key in editorial and editorial[key] == value: + stale += 1 + print(f" FAIL {name}: {path.name} re-states {key}, which the " + f"catalog already derives identically") + print(f"card specs {len(records) - stale}/{len(records)} carry no derived duplicates") + return stale + + +def publication_pass(records: dict, profile_id: str | None, enforce: bool) -> int: + """Check publication matrices, including explicit legacy accuracy rows.""" + try: + resolved_id, profile = profiles.load_profile(profile_id) + except (OSError, ValueError, json.JSONDecodeError) as exc: + print(f"publication FAIL: {exc}") + return 1 + + problems = 0 + totals = collections.Counter() + for name, record in records.items(): + accuracy_raw = profiles.expected_accuracy(record, profile) + speed_raw = profiles.expected_speed(record, profile) + accuracy = profiles.apply_exceptions(record, "accuracy", accuracy_raw) + speed = profiles.apply_exceptions(record, "speed", speed_raw) + exceptions = record.get("benchmark_exceptions") or [] + + # An exception must exclude a real profile requirement. This catches + # stale or misspelled waivers instead of retaining them forever. + stale_exceptions = 0 + for exception in exceptions: + kind = exception.get("kind") + candidates = accuracy_raw if kind == "accuracy" else speed_raw + if kind not in ("accuracy", "speed") or not any( + profiles.exception_matches(exception, kind, cell) + for cell in candidates): + stale_exceptions += 1 + per_model = collections.Counter(stale_exception=stale_exceptions) + + # Accuracy is closed by dataset/language/quant/metric. New results + # match the profile recipe exactly; explicitly marked legacy results + # retain the published recipe (or null when it did not survive). + expected_by_key = { + profiles.cell_key(cell, "accuracy"): cell for cell in accuracy + } + expected_keys = set(expected_by_key) + expected_by_core = { + profiles.accuracy_core_key(cell): profiles.cell_key(cell, "accuracy") + for cell in accuracy + } + accuracy_rows = record.get("accuracy_benchmarks", []) + accuracy_counts = collections.Counter( + profiles.cell_key(row, "accuracy") for row in accuracy_rows) + accuracy_covered, accuracy_extra, accuracy_invalid = set(), set(), set() + for row in accuracy_rows: + key = profiles.cell_key(row, "accuracy") + legacy = row.get("measurement_provenance") == "legacy-published" + if key in expected_keys: + target_key = key + elif legacy: + # Grandfather a published pre-profile result under its honest + # batch/timestamp recipe; do not relabel it as the new recipe. + target_key = expected_by_core.get(profiles.accuracy_core_key(row)) + else: + target_key = None + if target_key is None: + accuracy_extra.add(key) + continue + accuracy_covered.add(target_key) + target = expected_by_key[target_key] + if (not profiles.has_measurement_provenance(row) + or (not legacy and ( + row.get("backend") != target.get("backend") + or row.get("language_hint") != target.get("runtime_language")))): + accuracy_invalid.add(target_key) + per_model["accuracy_missing"] = len(expected_keys - accuracy_covered) + per_model["accuracy_invalid"] = len(accuracy_invalid) + per_model["accuracy_extra"] = len(accuracy_extra) + per_model["accuracy_duplicate"] = sum( + count - 1 for count in accuracy_counts.values() if count > 1) + totals["accuracy_required"] += len(expected_keys) + for suffix in ("missing", "invalid", "extra", "duplicate"): + totals[f"accuracy_{suffix}"] += per_model[f"accuracy_{suffix}"] + + # Both published samples are required for each quant selected by the + # profile on every machine/backend target. + speed_expected = {profiles.cell_key(cell, "speed") for cell in speed} + speed_rows = record.get("speed_benchmarks", []) + speed_counts = collections.Counter( + profiles.cell_key(row, "speed") for row in speed_rows) + speed_actual = set(speed_counts) + invalid_speed = { + profiles.cell_key(row, "speed") for row in speed_rows + if profiles.cell_key(row, "speed") in speed_expected + and (row.get("xrt_compute") is None + or not profiles.has_measurement_provenance(row)) + } + per_model["speed_missing"] = len(speed_expected - speed_actual) + per_model["speed_invalid"] = len(invalid_speed) + per_model["speed_extra"] = len(speed_actual - speed_expected) + per_model["speed_duplicate"] = sum( + count - 1 for count in speed_counts.values() if count > 1) + totals["speed_required"] += len(speed_expected) + for suffix in ("missing", "invalid", "extra", "duplicate"): + totals[f"speed_{suffix}"] += per_model[f"speed_{suffix}"] + + count = sum(per_model.values()) + if count: + problems += count + details = ", ".join(f"{key}={value}" for key, value in per_model.items() if value) + print(f" {'FAIL' if enforce else 'TODO'} {name}: {details}") + + print(f"publication {resolved_id}: accuracy {totals['accuracy_required']} required, " + f"{totals['accuracy_missing']} missing, {totals['accuracy_invalid']} invalid, " + f"{totals['accuracy_extra']} extra; speed " + f"{totals['speed_required']} required, {totals['speed_missing']} missing, " + f"{totals['speed_invalid']} invalid, {totals['speed_extra']} extra") + if problems and not enforce: + print(" audit only; pass --publication-profile to enforce this gate") + return problems if enforce else 0 + + +def provenance_pass(records: dict) -> int: + """Every number names its run or explicitly declares its legacy origin.""" + bad, legacy_speed, legacy_acc = 0, 0, 0 + total_speed = total_acc = 0 + for name, record in records.items(): + for section, kind in (("accuracy_benchmarks", "accuracy"), + ("speed_benchmarks", "speed")): + for row in record.get(section, []): + if kind == "accuracy": + total_acc += 1 + else: + total_speed += 1 + if row.get("measurement_provenance") == "legacy-published": + if kind == "accuracy": + legacy_acc += 1 + else: + legacy_speed += 1 + continue + if not row.get("engine_sha"): + bad += 1 + print(f" FAIL {name}: {kind} row has neither engine_sha nor " + f"measurement_provenance=legacy-published") + print(f"provenance {total_speed - legacy_speed}/{total_speed} speed and " + f"{total_acc - legacy_acc}/{total_acc} accuracy row(s) name a build; " + f"{legacy_speed + legacy_acc} explicitly marked legacy-published") + if legacy_speed: + print(f" {legacy_speed} legacy speed row(s) retain published xRT only; " + f"re-benchmark for stage timings, long-form, and memory") + return bad + + def main() -> int: ap = argparse.ArgumentParser() ap.add_argument("--dir", default=str(REPO / "catalog")) + ap.add_argument("--publication-profile", nargs="?", const="", + help="enforce exact accuracy and speed matrices; optionally " + "name a profile (default: " + "catalog/_benchmark_profiles.json default)") + ap.add_argument("--models", default="", + help="comma-separated variants (default: all)") args = ap.parse_args() d = pathlib.Path(args.dir) schema = json.loads((REPO / "catalog/_schema.json").read_text()) records = load(d) + selected = {item.strip() for item in args.models.split(",") if item.strip()} + unknown = selected - records.keys() + if unknown: + print(f"unknown catalog variant(s): {', '.join(sorted(unknown))}", file=sys.stderr) + return 2 + if selected: + records = {name: record for name, record in records.items() if name in selected} if not records: print(f"no records in {d}", file=sys.stderr) return 2 - bad = schema_pass(records, schema) + integrity_pass(records) + enforce_publication = args.publication_profile is not None + selected_profile = args.publication_profile or None + bad = (schema_pass(records, schema) + integrity_pass(records) + + pairing_pass(records) + derivable_pass(records) + + provenance_pass(records) + + publication_pass(records, selected_profile, enforce_publication)) return 1 if bad else 0 diff --git a/scripts/catalog/common.py b/scripts/catalog/common.py new file mode 100644 index 00000000..032e58f8 --- /dev/null +++ b/scripts/catalog/common.py @@ -0,0 +1,285 @@ +"""Shared helpers for reading catalog records and rendering them. + +Pure stdlib, so every consumer -- check.py, db.py, render.py and +scripts/hf_cards/generate.py -- can import it without a dependency block. + +The catalog stores identity and exact numbers. Everything about how a number +LOOKS (units, decimal places, column padding, a dataset's display name) is a +rendering concern and lives here or in the marker that calls the renderer. +""" +from __future__ import annotations + +import json +import pathlib + +REPO = pathlib.Path(__file__).resolve().parents[2] +CATALOG_DIR = REPO / "catalog" +DOCS_DIR = REPO / "docs" / "models" +CARDS_DIR = REPO / "scripts" / "hf_cards" + +HEADLINE_KEYS = ("dataset", "split", "language", "metric", "batch_size", "timestamps") + + +# -------------------------------------------------------------------------- +# loading + + +def load_records(directory: pathlib.Path | None = None) -> dict[str, dict]: + """Every catalog record, keyed by variant. `_`-prefixed files are tooling.""" + directory = directory or CATALOG_DIR + return {path.stem: json.loads(path.read_text()) + for path in sorted(directory.glob("*.json")) + if not path.name.startswith("_")} + + +def load_record(variant: str, directory: pathlib.Path | None = None) -> dict: + path = (directory or CATALOG_DIR) / f"{variant}.json" + if not path.exists(): + raise FileNotFoundError(f"no catalog record for {variant!r} at {path}") + return json.loads(path.read_text()) + + +# -------------------------------------------------------------------------- +# sizes +# +# Published docs settled on three different conventions for the same byte +# count: decimal MB/GB, binary sizes labelled MB/GB, and always-MB. Which one a +# given table uses is a property of that table, recorded in its marker, not of +# the record -- so adopting markers into existing docs changes no published +# string. Normalising on one convention is a separate, deliberate edit. + +SIZE_BASE = {"dec": (10**6, 10**9), "bin": (2**20, 2**30)} + + +def fmt_size(size_bytes: int, units: str = "dec", gb_dp: int = 2, + mb_only: bool = False) -> str: + """Render a byte count the way a download table prints it.""" + mb, gb = SIZE_BASE[units] + if mb_only or size_bytes < gb: + return f"{size_bytes / mb:.0f} MB" + return f"{size_bytes / gb:.{gb_dp}f} GB" + + +def size_conventions() -> list[dict]: + """Every convention `fmt_size` can produce, best-guess order first. + + Used by `render.py --adopt` to work out which one a doc already uses. + """ + return [{"units": u, "gb_dp": d, "mb_only": m} + for u in ("dec", "bin") for m in (False, True) for d in (2, 1)] + + +# -------------------------------------------------------------------------- +# accuracy + +DATASET_LABELS = { + ("librispeech", "test-clean"): "LibriSpeech test-clean", + ("ami", "ihm-test"): "AMI IHM test", +} + + +def dataset_label(dataset: str, split: str, language: str) -> str: + if dataset == "fleurs": + return f"FLEURS {language}" + return DATASET_LABELS.get((dataset, split), f"{dataset} {split}") + + +def headline(record: dict) -> dict | None: + """The benchmark row-set a variant publishes in its download table. + + A variant can carry several runs of the same dataset that differ only in + batch size or timestamp mode, so the pointer names the full identity + tuple rather than just the dataset. + """ + return record.get("headline_benchmark") + + +def headline_rows(record: dict) -> dict[str, dict]: + """{quant: accuracy row} for the headline benchmark. Empty if unset.""" + target = headline(record) + if not target: + return {} + rows = {} + for row in record.get("accuracy_benchmarks", []): + # A null recipe field in the pointer is an intentional wildcard for a + # legacy table assembled before recipe metadata was standardized. + if all(target.get(key) is None or row.get(key) == target.get(key) + for key in HEADLINE_KEYS): + rows[row["quant"]] = row + return rows + + +def headline_label(record: dict) -> str: + target = headline(record) + if not target: + return "" + return dataset_label(target["dataset"], target["split"], target["language"]) + + +def fmt_err(row: dict | None, dp: int = 2) -> str: + """An error rate as a card prints it. `-` when the cell was not measured.""" + if row is None: + return "-" + return f"{row['err_pct']:.{dp}f}%" + + +# -------------------------------------------------------------------------- +# speed + + +def fmt_ms(total_ms: float, dp_ms: int = 0, dp_s: int = 2) -> str: + if total_ms < 1000: + return f"{total_ms:.{dp_ms}f} ms" + return f"{total_ms / 1000:.{dp_s}f} s" + + +def fmt_xrt(xrt: float, dp: int | None = None) -> str: + """Speedup over realtime. Below 10x a single decimal carries real signal.""" + if dp is None: + dp = 1 if xrt < 10 else 0 + return f"{xrt:.{dp}f}×" + + +def perf_rows(record: dict, machine: str) -> dict[tuple[str, str, str], dict]: + """{(backend, sample, quant): row} for one machine.""" + return {(row["backend"], row["sample"], row["quant"]): row + for row in record.get("speed_benchmarks", []) + if row["machine"] == machine} + + +# -------------------------------------------------------------------------- +# downloads + + +def downloads(record: dict) -> dict[str, dict]: + return {item["quant"]: item for item in record.get("downloads", [])} + + +def download_url(record: dict, filename: str) -> str: + repo = record.get("published_repo") + if not repo: + return "" + return f"https://huggingface.co/{repo}/resolve/main/{filename}" + + +# -------------------------------------------------------------------------- +# markdown tables + + +MAX_PAD = 14 + + +def render_table(header: list[str], aligns: list[str], rows: list[list[str]], + rule_fill: bool = False, max_pad: int = MAX_PAD, + pad_header: bool = True) -> list[str]: + """A GitHub markdown table, columns padded so the source reads as a grid. + + `aligns` is "l" or "r" per column. `rule_fill` draws the separator out to + the column width (`| ------- |`) instead of the short form (`| --- |`); + both are used in docs/models and neither renders differently. + + Columns wider than `max_pad` are left ragged: a download table's link + column runs past 120 characters, and padding it buys nothing while making + every other cell unreadable in the source. + """ + source = [header] + rows if pad_header else rows + widths = [max(len(row[i]) for row in source) for i in range(len(header))] + widths = [0 if width > max_pad else width for width in widths] + + def line(cells: list[str], pad: bool = True) -> str: + return "| " + " | ".join( + (cell.rjust(width) if align == "r" else cell.ljust(width)) if pad else cell + for cell, width, align in zip(cells, widths, aligns)).rstrip() + " |" + + head = line(header, pad_header) + if rule_fill: + rules = ["-" * max(width - 1, 2) + ":" if align == "r" else "-" * max(width, 3) + for width, align in zip(widths, aligns)] + return [head, "| " + " | ".join(rules) + " |"] + [line(row) for row in rows] + rules = ["---:" if align == "r" else "---" for align in aligns] + return [head, "| " + " | ".join(rules) + " |"] + [line(row) for row in rows] + + +# -------------------------------------------------------------------------- +# writing records + +WRAP_WIDTH = 79 + + +def _compact(value) -> str: + return json.dumps(value, separators=(",", ":"), ensure_ascii=False) + + +def _fill(items: list[str], pad: str, inner: str) -> str: + """A scalar array too long for one line, filled to WRAP_WIDTH.""" + lines, current = [], "" + for index, item in enumerate(items): + piece = item + ("," if index < len(items) - 1 else "") + candidate = (current + " " + piece) if current else inner + piece + if current and len(candidate) > WRAP_WIDTH: + lines.append(current) + current = inner + piece + else: + current = candidate + if current: + lines.append(current) + return "[\n" + "\n".join(lines) + "\n" + pad + "]" + + +def _holds_records(value) -> bool: + """True when `value` contains a list of objects somewhere inside. + + That is the shape worth expanding: a streaming block's `presets` is a list + of rows a reader scans, while an accuracy row's `errors` is three counts + that belong on the row's own line. Both sit at the same depth, so depth + alone cannot tell them apart. + """ + if isinstance(value, list): + return any(isinstance(item, dict) for item in value) or \ + any(_holds_records(item) for item in value) + if isinstance(value, dict): + return any(_holds_records(item) for item in value.values()) + return False + + +def _fmt(value, depth: int = 0, indent: int = 2) -> str: + pad, inner = " " * (indent * depth), " " * (indent * (depth + 1)) + if isinstance(value, list): + if not any(isinstance(item, (dict, list)) for item in value): + one = _compact(value) + if len(pad) + len(one) <= WRAP_WIDTH or not value: + return one + return _fill([json.dumps(v, ensure_ascii=False) for v in value], pad, inner) + if depth >= 2 and not _holds_records(value): + return _compact(value) + if not value: + return "[]" + body = ",\n".join(inner + _fmt(item, depth + 1, indent) for item in value) + return "[\n" + body + "\n" + pad + "]" + if isinstance(value, dict): + if depth >= 2 and not _holds_records(value): + return _compact(value) + if not value: + return "{}" + body = ",\n".join(f"{inner}{json.dumps(key, ensure_ascii=False)}: " + f"{_fmt(val, depth + 1, indent)}" + for key, val in value.items()) + return "{\n" + body + "\n" + pad + "}" + return _compact(value) + + +def dumps_record(record: dict) -> str: + """Serialize a record the way every checked-in record is written. + + Top level and depth-1 containers expand one entry per line; anything + deeper, and any array of scalars, stays compact -- so a benchmark row is + one greppable line and a 99-language list wraps instead of running 99 + lines. Plain `json.dumps(indent=2)` writes the same data as a file five to + eight times longer, which turns a one-value correction into an + unreviewable diff. Every writer here goes through this. + """ + return _fmt(record) + "\n" + + +def write_record(path: pathlib.Path, record: dict) -> None: + path.write_text(dumps_record(record)) diff --git a/scripts/catalog/db.py b/scripts/catalog/db.py index 6fe499a4..be44eefc 100755 --- a/scripts/catalog/db.py +++ b/scripts/catalog/db.py @@ -22,12 +22,14 @@ import sys from datetime import datetime, timezone +import profiles + REPO = pathlib.Path(__file__).resolve().parents[2] DEFAULT_DB = REPO / "reports" / "wer" / "wer.db" ORIGINAL_DB = REPO / "reports" / "wer" / "wer.db.original" SCHEMA = """ -PRAGMA user_version = 8; +PRAGMA user_version = 10; CREATE TABLE meta(key TEXT PRIMARY KEY, value TEXT NOT NULL); CREATE TABLE models( @@ -46,7 +48,14 @@ encoder_window_s REAL, long_form_strategy TEXT NOT NULL, max_audio_s REAL, - max_output_tokens INTEGER + max_output_tokens INTEGER, + -- Which results row-set this model publishes as its headline number. A + -- model carries several runs of one dataset that differ only in batch + -- size or timestamp mode, so the pointer names the whole identity. + headline_dataset TEXT, + headline_metric TEXT, + headline_batch_size INTEGER, + headline_timestamps TEXT ); CREATE TABLE languages( @@ -106,6 +115,7 @@ batch_size INTEGER, timestamps TEXT, engine_sha TEXT, + measurement_provenance TEXT, measured_on TEXT, substitutions INTEGER, deletions INTEGER, @@ -136,6 +146,7 @@ encode_ms REAL, decode_ms REAL, engine_sha TEXT, + measurement_provenance TEXT, measured_on TEXT, thermal_gated INTEGER, PRIMARY KEY(model, rig, backend, quant, sample) @@ -148,15 +159,28 @@ CREATE VIEW accuracy AS SELECT r.model AS variant, d.source AS dataset, d.split, d.lang AS language, r.quant, r.metric, r.err_pct, r.ci_lo, r.ci_hi, r.n_utts, - r.batch_size, r.timestamps, r.engine_sha, r.measured_on, + r.batch_size, r.timestamps, r.engine_sha, r.measurement_provenance, + r.measured_on, r.substitutions, r.deletions, r.insertions, r.empty_hyp, r.utts_over_50pct FROM results r JOIN datasets d ON d.dataset = r.dataset; +-- The per-quant column a model card and its doc print. +CREATE VIEW headline AS +SELECT r.model AS variant, d.source AS dataset, d.split, d.lang AS language, + r.quant, r.metric, r.err_pct, r.ci_lo, r.ci_hi, r.n_utts +FROM results r +JOIN models m ON m.model = r.model +JOIN datasets d ON d.dataset = r.dataset +WHERE r.dataset = m.headline_dataset + AND r.metric = m.headline_metric + AND (m.headline_batch_size IS NULL OR r.batch_size = m.headline_batch_size) + AND (m.headline_timestamps IS NULL OR r.timestamps = m.headline_timestamps); + CREATE VIEW speed AS SELECT model AS variant, rig AS machine, backend, quant, sample, sample_s AS sample_duration_s, total_ms, xrt AS xrt_compute, - load_ms, mel_ms, encode_ms, decode_ms, engine_sha, measured_on, - thermal_gated + load_ms, mel_ms, encode_ms, decode_ms, engine_sha, + measurement_provenance, measured_on, thermal_gated FROM perf; """ @@ -213,13 +237,16 @@ def build(directory: pathlib.Path, out: pathlib.Path) -> dict[str, int]: for record in records: model = record["variant"] license_info = record["license"] - con.execute("INSERT INTO models VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", ( + headline = record.get("headline_benchmark") or {} + con.execute("INSERT INTO models VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", ( model, record["family"], record["display_name"], record["params"], record["params"] / 1e6, record.get("architecture_pattern"), license_info["spdx"], license_info["display"], record["upstream_repo"], record["upstream_commit"], record.get("published_repo"), record.get("language_tag_form"), record.get("encoder_window_s"), record["long_form_strategy"], - record.get("max_audio_s"), record.get("max_output_tokens"))) + record.get("max_audio_s"), record.get("max_output_tokens"), + dataset_id(headline) if headline else None, headline.get("metric"), + headline.get("batch_size"), headline.get("timestamps"))) con.executemany("INSERT INTO model_languages VALUES (?,?)", [ (model, str(lang)) for lang in record.get("languages", [])]) con.executemany("INSERT INTO language_aliases VALUES (?,?,?)", [ @@ -235,29 +262,34 @@ def build(directory: pathlib.Path, out: pathlib.Path) -> dict[str, int]: item["size_bytes"] / 1e9) for item in record.get("downloads", [])]) con.executemany( "INSERT INTO results(dataset,model,quant,metric,err_pct,ci_lo,ci_hi,n_utts," - "batch_size,timestamps,engine_sha,measured_on,substitutions,deletions,insertions," - "empty_hyp,utts_over_50pct) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ + "batch_size,timestamps,engine_sha,measurement_provenance,measured_on," + "substitutions,deletions,insertions,empty_hyp,utts_over_50pct) " + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ (dataset_id(row), model, row["quant"], row["metric"], row["err_pct"], (row.get("ci95") or [None, None])[0], (row.get("ci95") or [None, None])[1], row["n_utts"], row.get("batch_size"), row.get("timestamps"), row.get("engine_sha"), - row.get("measured_on"), (row.get("errors") or {}).get("sub"), + row.get("measurement_provenance"), row.get("measured_on"), + (row.get("errors") or {}).get("sub"), (row.get("errors") or {}).get("del"), (row.get("errors") or {}).get("ins"), row.get("empty_hyp"), row.get("utts_over_50pct")) for row in record.get("accuracy_benchmarks", [])]) con.executemany( - "INSERT INTO perf VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ + "INSERT INTO perf VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ (model, row["machine"], row["backend"], row["quant"], row["sample"], row["sample_duration_s"], row.get("total_ms"), row["xrt_compute"], row.get("load_ms"), row.get("mel_ms"), row.get("encode_ms"), - row.get("decode_ms"), row.get("engine_sha"), row.get("measured_on"), + row.get("decode_ms"), row.get("engine_sha"), + row.get("measurement_provenance"), row.get("measured_on"), None if row.get("thermal_gated") is None else int(row["thermal_gated"])) for row in record.get("speed_benchmarks", [])]) + profile_id, _ = profiles.load_profile() con.executemany("INSERT INTO meta VALUES (?,?)", [ ("generated", datetime.now(timezone.utc).isoformat(timespec="seconds")), ("source", "catalog/*.json"), + ("benchmark_profile", profile_id), ("rebuild", "uv run scripts/catalog/db.py (drops and recreates; never hand-edit)"), ("dataset_scope", "all catalog accuracy rows"), ]) diff --git a/scripts/catalog/ingest_accuracy.py b/scripts/catalog/ingest_accuracy.py new file mode 100755 index 00000000..8a30bca1 --- /dev/null +++ b/scripts/catalog/ingest_accuracy.py @@ -0,0 +1,156 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# /// +"""Ingest profile-stamped WER scores into accuracy_benchmarks. + +Only exact cells selected by the publication profile are eligible. The Modal +publication sweep writes the hypotheses; score them locally first, then run: + + for f in reports/wer/*.jsonl; do uv run scripts/wer/score.py "$f"; done + uv run scripts/catalog/ingest_accuracy.py --dry-run + uv run scripts/catalog/ingest_accuracy.py +""" +from __future__ import annotations + +import argparse +import json +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +import common # noqa: E402 +import profiles # noqa: E402 + +REPORTS = common.REPO / "reports" / "wer" + + +def score_path(record: dict, cell: dict, reports: pathlib.Path) -> pathlib.Path: + filename = next(item["filename"] for item in record["downloads"] + if item["quant"] == cell["quant"]) + model = pathlib.Path(filename).stem + dataset = (f"fleurs-{cell['language']}" if cell["dataset"] == "fleurs" + else f"{cell['dataset']}-{cell['split']}") + batch = "" if cell["batch_size"] <= 1 else f".b{cell['batch_size']}" + timestamps = "" if cell["timestamps"] == "none" else f".ts-{cell['timestamps']}" + return reports / f"{model}.{dataset}{batch}{timestamps}.score.json" + + +def row_from_score(cell: dict, score: dict) -> dict: + per_utterance = score.get("per_utterance") or [] + metric = cell["metric"] + return { + "dataset": cell["dataset"], + "split": cell["split"], + "language": cell["language"], + "language_hint": cell["runtime_language"], + "backend": cell["backend"], + "quant": cell["quant"], + "metric": metric, + "err_pct": score["error_rate_pct"], + "ci95": [round(score["error_rate_ci_lo"] * 100, 2), + round(score["error_rate_ci_hi"] * 100, 2)], + "n_utts": score["n"], + "batch_size": cell["batch_size"], + "timestamps": cell["timestamps"], + "engine_sha": score["engine_sha"], + "measured_on": None, + "errors": { + "sub": score["substitutions"], + "del": score["deletions"], + "ins": score["insertions"], + }, + "empty_hyp": sum(1 for row in per_utterance + if not str(row.get("hyp") or "").strip()), + "utts_over_50pct": sum(1 for row in per_utterance + if float(row.get(metric, 0.0)) > 0.5), + } + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--reports", default=str(REPORTS)) + parser.add_argument("--profile", default=None) + parser.add_argument("--models", default="", + help="comma-separated variants (default: all)") + parser.add_argument("--dry-run", action="store_true") + args = parser.parse_args() + + profile_id, profile = profiles.load_profile(args.profile) + reports = pathlib.Path(args.reports) + selected = {item.strip() for item in args.models.split(",") if item.strip()} + records = common.load_records() + unknown = selected - records.keys() + if unknown: + print(f"error: no catalog record for {', '.join(sorted(unknown))}", file=sys.stderr) + return 2 + + added = replaced = rejected = missing = 0 + for variant, record in records.items(): + if selected and variant not in selected: + continue + path = common.CATALOG_DIR / f"{variant}.json" + rows = record.get("accuracy_benchmarks", []) + changed = False + expected = profiles.apply_exceptions( + record, "accuracy", profiles.expected_accuracy(record, profile)) + for cell in expected: + source_path = score_path(record, cell, reports) + if not source_path.exists(): + missing += 1 + continue + score = json.loads(source_path.read_text()) + recipe = score.get("recipe") or {} + reasons = [] + if recipe.get("publication_profile") != profile_id: + reasons.append(f"profile={recipe.get('publication_profile')!r}") + if score.get("metric") != cell["metric"]: + reasons.append(f"metric={score.get('metric')!r}") + if score.get("batch_size") != cell["batch_size"]: + reasons.append(f"batch_size={score.get('batch_size')!r}") + if score.get("timestamps") != cell["timestamps"]: + reasons.append(f"timestamps={score.get('timestamps')!r}") + if recipe.get("backend") != cell["backend"]: + reasons.append(f"backend={recipe.get('backend')!r}") + if not score.get("engine_sha"): + reasons.append("engine_sha is empty") + if reasons: + rejected += 1 + print(f" reject {source_path.name}: {', '.join(reasons)}") + continue + + key = profiles.cell_key(cell, "accuracy") + indices = [index for index, row in enumerate(rows) + if profiles.cell_key(row, "accuracy") == key] + if not indices: + # A fresh exact run supersedes the matching historical table + # row even if that row used an older/unknown recipe. + core = profiles.accuracy_core_key(cell) + indices = [index for index, row in enumerate(rows) + if row.get("measurement_provenance") == "legacy-published" + and profiles.accuracy_core_key(row) == core] + new_row = row_from_score(cell, score) + if indices: + first = indices[0] + if rows[first] == new_row and len(indices) == 1: + continue + rows[first] = new_row + for index in reversed(indices[1:]): + del rows[index] + replaced += 1 + else: + rows.append(new_row) + added += 1 + changed = True + if changed and not args.dry_run: + common.write_record(path, record) + + print(f"profile {profile_id}: {added} added, {replaced} replaced, " + f"{rejected} rejected, {missing} score file(s) absent") + if args.dry_run: + print("dry run: nothing written") + return 1 if rejected else 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/catalog/ingest_perf.py b/scripts/catalog/ingest_perf.py new file mode 100755 index 00000000..3e070b6f --- /dev/null +++ b/scripts/catalog/ingest_perf.py @@ -0,0 +1,344 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# /// +"""Fold bench driver reports into the catalog's speed_benchmarks rows. + +`scripts/bench/run.py` writes one report per (variant, backend) under +reports/perf//, and reports/ is gitignored -- so the latency +breakdown only exists on the machine that measured it. This is the hop that +moves it into the catalog, where it is durable and publishable. + +A cell is identified by (machine, backend, quant, sample). Many reports cover +the same cell, because porting-6-bench runs a hypothesis loop over it, and +those iterations are NOT interchangeable with the published figure -- CPU +cells in particular swing tens of percent with thermal state. So selection is +by intent first: a profile-stamped publication run beats a manual/legacy +publication run, which beats any experiment, and only within a tier does the +newest timestamp win. + + uv run scripts/catalog/ingest_perf.py --dry-run + uv run scripts/catalog/ingest_perf.py + uv run scripts/catalog/ingest_perf.py --reports reports/perf +""" +from __future__ import annotations + +import argparse +import collections +import json +import pathlib +import re +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +import common # noqa: E402 +import profiles # noqa: E402 + +REPORTS = common.REPO / "reports" / "perf" + +# The bench driver derives a slug from the CPU model string; the catalog uses a +# shorter house name. One physical machine must land on exactly one catalog +# slug, so the mapping lives here rather than being inferred from the +# directory name -- reports/perf/amd-ryzen-7-4750u-pro is a stale hand-made +# directory holding reports whose own payload says the auto-detected slug. +MACHINE_ALIASES = { + "apple-m4": "m4", + "apple-m4-max": "m4-max", + "amd-ryzen-7-pro-4750u-with-radeon-graphics": "ryzen-4750u", + "amd-ryzen-7-4750u-pro": "ryzen-4750u", +} + +# models//-.gguf -- the quant is the last dash-separated +# field, and K-quants carry underscores (Q4_K_M) so the split is on "-". +QUANT_RE = re.compile(r"-([A-Za-z0-9_]+)\.gguf$") + + +def quant_of(model_path: str) -> str | None: + match = QUANT_RE.search(model_path) + return match.group(1) if match else None + + +def variant_of(report: dict, model_path: str) -> str | None: + """Reports carry `variant` or the older `family`; the path is definitive.""" + parts = pathlib.PurePosixPath(model_path.replace("\\", "/")).parts + if "models" in parts: + index = len(parts) - 1 - parts[::-1].index("models") + if index + 1 < len(parts): + return parts[index + 1] + return report.get("variant") + + +def intent(report: dict) -> int: + """Rank a bench run by publication intent. Lower wins. + + A profile-stamped run wins over a manually selected publication run: the + latter says the operator intended to publish it, while the former also + proves which checked-in matrix selected it. + """ + if report.get("publication") is True and report.get("publication_profile"): + return 0 + if report.get("publication") is True: + return 1 + if "publication" in report: + return 2 # explicitly declared not publishable + stem = re.sub(r"-?20\d{6}t\d{6}z", "", (report.get("name") or "").lower()).rstrip("-") + if stem.endswith("publication"): + return 1 + return 2 + + +def cells(report: dict) -> list[dict]: + """One catalog-shaped row per run in a bench driver report.""" + out = [] + for run in report.get("runs", []): + model_path, quant = run.get("model_path", ""), quant_of(run.get("model_path", "")) + variant = variant_of(report, model_path) + summary, duration = run.get("summary") or {}, run.get("sample_duration_s") + total = (summary.get("total_ms") or {}).get("mean") + wall = (summary.get("wall_ms") or {}).get("mean") + if not (variant and quant and duration and total): + continue + + def mean(field: str): + value = (summary.get(field) or {}).get("mean") + return None if value is None else round(value, 1) + + out.append({ + "_rank": (intent(report), ), + "_profile": report.get("publication_profile"), + "variant": variant, + "machine": MACHINE_ALIASES.get(report["machine"]["slug"], report["machine"]["slug"]), + # The run's own `backend` is the runtime device name (MTL0), not + # the canonical backend; the driver records that at the top level. + "backend": (report.get("backend") or run.get("backend", "")).lower(), + "quant": quant, + "sample": pathlib.PurePosixPath(run.get("sample_path", "")).stem, + "sample_duration_s": duration, + "total_ms": round(total, 1), + # xrt is recomputed from the unrounded mean rather than carried + # over: a stored value that no longer matches its own latency is + # the drift this ingest exists to remove. + "xrt_compute": round(duration / (total / 1000), 3), + "wall_ms": None if wall is None else round(wall, 1), + "xrt_wall": None if wall is None else round(duration / (wall / 1000), 3), + "load_ms": None if run.get("load_ms") is None else round(run["load_ms"], 1), + "mel_ms": mean("mel_ms"), + "encode_ms": mean("encode_ms"), + "decode_ms": mean("decode_ms"), + "engine_sha": report.get("git_sha"), + "measured_on": (report.get("timestamp") or "")[:10] or None, + "_when": report.get("timestamp") or "", + "_file": report["_file"], + }) + return out + + +def collect(reports_dir: pathlib.Path, + allow_experiments: bool = False) -> tuple[dict, list[str]]: + """Best measurement per cell, plus notes about what was skipped. + + "Best" means publication-grade: porting-6-bench leaves a long tail of + hypothesis-loop runs per cell, and on CPU those differ from the published + figure by tens of percent. They are measurements of a question, not of the + shipped build, so by default they are not eligible at all. + """ + best: dict[tuple, dict] = {} + superseded, unreadable, experiments = collections.Counter(), [], 0 + for path in sorted(reports_dir.glob("*/*.json")): + try: + report = json.loads(path.read_text()) + except (json.JSONDecodeError, UnicodeDecodeError): + unreadable.append(str(path.relative_to(common.REPO))) + continue + if not isinstance(report, dict) or report.get("schema") != "transcribe-bench-driver-v1": + kind = report.get("schema") if isinstance(report, dict) else type(report).__name__ + unreadable.append(f"{path.relative_to(common.REPO)} (schema {kind!r})") + continue + report["_file"] = str(path.relative_to(common.REPO)) + for row in cells(report): + if row["_rank"][0] == 2 and not allow_experiments: + experiments += 1 + continue + key = (row["variant"], row["machine"], row["backend"], row["quant"], row["sample"]) + previous = best.get(key) + order = (row["_rank"], row["_when"]) + if previous is None or order < (previous["_rank"], previous["_when"]): + # A better-intentioned run always wins; among equals, the newest. + if previous is not None and row["_rank"] > previous["_rank"]: + order = None + if previous is None or (order is not None + and (row["_rank"] < previous["_rank"] + or (row["_rank"] == previous["_rank"] + and row["_when"] > previous["_when"]))): + if previous is not None: + superseded[key] += 1 + best[key] = row + else: + superseded[key] += 1 + notes = [f"{path}: unreadable or not a bench report" for path in unreadable] + if experiments: + notes.append(f"{experiments} experiment/baseline run(s) ignored " + f"(--allow-experiments to include)") + if superseded: + notes.append(f"{sum(superseded.values())} older report(s) superseded on " + f"{len(superseded)} cell(s)") + return best, notes + + +FIELDS = ("sample_duration_s", "total_ms", "xrt_compute", "wall_ms", "xrt_wall", + "load_ms", "mel_ms", "encode_ms", "decode_ms", "engine_sha", "measured_on") + + +def catalog_row(source: dict) -> dict: + """Strip importer bookkeeping from one measured, catalog-shaped cell.""" + return {field: source[field] for field in ( + "machine", "backend", "quant", "sample", *FIELDS + )} | {"thermal_gated": None} + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--reports", default=str(REPORTS)) + parser.add_argument("--dry-run", action="store_true") + parser.add_argument("--drift", type=float, default=2.0, + help="percent xrt change worth reporting (default 2)") + parser.add_argument("--max-drift", type=float, default=5.0, + help="refuse a row whose xRT would move more than this " + "percent, since the stored value is what the doc " + "published (default 5). --force takes it anyway.") + parser.add_argument("--force", action="store_true", + help="apply measurements even when they contradict the " + "published xRT") + parser.add_argument("--allow-experiments", action="store_true", + help="also ingest reports not marked for publication. " + "Off by default: a hypothesis-loop run is not a " + "publishable number.") + args = parser.parse_args() + + reports_dir = pathlib.Path(args.reports) + if not reports_dir.exists(): + print(f"no reports at {reports_dir}", file=sys.stderr) + return 2 + measured, notes = collect(reports_dir, args.allow_experiments) + print(f"{len(measured)} measured cell(s) across " + f"{len({key[1] for key in measured})} machine slug(s)") + by_intent = collections.Counter(row["_rank"][0] for row in measured.values()) + labels = {0: "profile-stamped publication run", + 1: "manual or legacy publication run", + 2: "experiment or baseline only"} + for rank in sorted(by_intent): + print(f" {by_intent[rank]:5d} {labels[rank]}") + for note in notes: + print(f" note: {note}") + + profile_id, profile = profiles.load_profile() + filled = updated = added = matched = 0 + drift, refused, unmatched = [], [], [] + for variant, record in common.load_records().items(): + path = common.CATALOG_DIR / f"{variant}.json" + rows = record.get("speed_benchmarks", []) + changed = False + for row in rows: + key = (variant, row["machine"], row["backend"], row["quant"], row["sample"]) + source = measured.pop(key, None) + if source is None: + continue + matched += 1 + was_null = row.get("total_ms") is None + before = row.get("xrt_compute") + # A stored xRT may have been published as compute or as wall (the + # granite tables quote wall, where the two differ by up to 1.46x). + # Gate on whichever the doc evidently used, so a definition + # mismatch is not mistaken for a stale build. + candidates = [c for c in (source["xrt_compute"], source["xrt_wall"]) + if c is not None] + after = min(candidates, key=lambda c: abs(c - before)) if before else source["xrt_compute"] + moved = abs(after - before) / before * 100 if before else 0.0 + if before and moved > args.max_drift and not args.force: + # The stored xRT is the number the doc published. A report that + # disagrees this much is a different build, not a better + # reading of the same one -- refuse it and name the gap. + refused.append((variant, row["machine"], row["backend"], row["quant"], + row["sample"], before, after, row.get("engine_sha"), + source["engine_sha"])) + continue + for field in FIELDS: + if row.get(field) != source[field]: + row[field] = source[field] + changed = True + if source.get("engine_sha") and row.pop("measurement_provenance", None): + changed = True + if was_null: + filled += 1 + elif changed: + updated += 1 + if before and moved > args.drift: + drift.append((variant, row["machine"], row["backend"], row["quant"], + row["sample"], before, after)) + # Profile runs can create rows; the old importer could only refresh + # placeholders, which made a newly required quant impossible to ingest + # without first hand-authoring empty catalog cells. + expected = profiles.apply_exceptions( + record, "speed", profiles.expected_speed(record, profile)) + expected_keys = { + (variant, cell["machine"], cell["backend"], cell["quant"], cell["sample"]) + for cell in expected + } + existing_keys = { + (variant, row["machine"], row["backend"], row["quant"], row["sample"]) + for row in rows + } + for key in sorted(expected_keys - existing_keys): + source = measured.get(key) + if source is None or source.get("_profile") != profile_id: + continue + rows.append(catalog_row(source)) + measured.pop(key) + matched += 1 + added += 1 + changed = True + if changed and not args.dry_run: + common.write_record(path, record) + + for key in measured: + unmatched.append(key) + print(f"\nmatched {matched} catalog row(s): {added} added, " + f"{filled} had no latency, {updated} already did and were refreshed, " + f"{len(refused)} refused") + if refused: + print(f"\n{len(refused)} row(s) refused: the newest report on file is a " + f"different build from the one the doc published, so taking it " + f"would silently restate a published number.") + print(" re-run the publication sweep, or pass --force:") + by_variant = collections.Counter() + shas = collections.defaultdict(set) + for variant, _, _, _, _, _, _, _, report_sha in refused: + by_variant[variant] += 1 + shas[variant].add(report_sha or "?") + for variant, count in by_variant.most_common(16): + print(f" {count:3d} cell(s) {variant:42s} on file: " + f"{', '.join(sorted(shas[variant]))}") + if len(by_variant) > 16: + print(f" ... and {len(by_variant) - 16} more variant(s)") + if drift: + print(f"\n{len(drift)} cell(s) whose xRT moved more than {args.drift}%:") + for variant, machine, backend, quant, sample, before, after in sorted( + drift, key=lambda d: -abs(d[6] - d[5]) / d[5]): + pct = round(100 * (after - before) / before) + print(f" {variant:38s} {machine:12s} {backend:7s} {quant:7s} " + f"{sample:5s} {before:>8} -> {after:<8} {pct:+d}%") + if unmatched: + print(f"\n{len(unmatched)} measured cell(s) with no catalog row " + f"(a bench of something the catalog does not publish):") + counts = collections.Counter(key[0] for key in unmatched) + for variant, count in counts.most_common(12): + print(f" {variant:42s} {count}") + if len(counts) > 12: + print(f" ... and {len(counts) - 12} more variant(s)") + if args.dry_run: + print("\ndry run: nothing written") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/catalog/profiles.py b/scripts/catalog/profiles.py new file mode 100644 index 00000000..d94a97aa --- /dev/null +++ b/scripts/catalog/profiles.py @@ -0,0 +1,205 @@ +"""Publication-profile loading and benchmark matrix expansion. + +The profile is policy: it defines the exact rows the catalog publishes. The +catalog arrays contain measurements only; experiments remain in reports/. +Keep this module stdlib-only so local checks, bench runs, and Modal dispatch +all consume the same expansion logic. +""" +from __future__ import annotations + +import json +import pathlib +import sys +from typing import Iterable + +REPO = pathlib.Path(__file__).resolve().parents[2] +PROFILE_PATH = REPO / "catalog" / "_benchmark_profiles.json" +WER_DIR = REPO / "scripts" / "wer" +if str(WER_DIR) not in sys.path: + sys.path.insert(0, str(WER_DIR)) + +from languages import ( # noqa: E402 + CER_LANGUAGES, + FLEURS_CANONICAL_BY_CONFIG, + FLEURS_LANGS, +) + +MACHINE_ALIASES = { + "apple-m4": "m4", + "apple-m4-max": "m4-max", + "amd-ryzen-7-pro-4750u-with-radeon-graphics": "ryzen-4750u", + "amd-ryzen-7-4750u-pro": "ryzen-4750u", +} + + +def load_profiles(path: pathlib.Path = PROFILE_PATH) -> dict: + data = json.loads(path.read_text()) + if not isinstance(data.get("profiles"), dict) or not data["profiles"]: + raise ValueError(f"{path}: profiles must be a non-empty object") + default = data.get("default") + if default not in data["profiles"]: + raise ValueError(f"{path}: default profile {default!r} is not defined") + return data + + +def load_profile(profile_id: str | None = None) -> tuple[str, dict]: + data = load_profiles() + profile_id = profile_id or data["default"] + try: + return profile_id, data["profiles"][profile_id] + except KeyError as exc: + raise ValueError( + f"unknown benchmark profile {profile_id!r}; choose one of " + f"{sorted(data['profiles'])}" + ) from exc + + +def canonical_machine(slug: str) -> str: + return MACHINE_ALIASES.get(slug, slug) + + +def _aliases(record: dict) -> dict[str, str]: + return {str(k).lower(): str(v).lower() + for k, v in (record.get("language_aliases") or {}).items()} + + +def canonical_fleurs_language(tag: str, record: dict) -> str | None: + """Return the canonical FLEURS language represented by a model tag. + + The catalog stores model-advertised spellings, while accuracy rows store + dataset spellings. Locale tags normally collapse to their primary subtag; + zh-TW is deliberately excluded because FLEURS has only Simplified + Mandarin. Explicit language_aliases handle tl/fil, no/nb, and jw/jv. + """ + value = str(tag).lower() + value = _aliases(record).get(value, value) + if value == "zh-tw": + return None + candidate = value if value in FLEURS_LANGS else value.split("-", 1)[0] + candidate = _aliases(record).get(candidate, candidate) + config = FLEURS_LANGS.get(candidate) + return FLEURS_CANONICAL_BY_CONFIG.get(config) if config else None + + +def fleurs_languages(record: dict) -> list[str]: + out: list[str] = [] + for advertised in record.get("languages", []): + canonical = canonical_fleurs_language(str(advertised), record) + if canonical and canonical not in out: + out.append(canonical) + return out + + +def runtime_language(record: dict, canonical: str) -> str: + """Choose the model spelling used to run one canonical dataset language.""" + for advertised in record.get("languages", []): + if canonical_fleurs_language(str(advertised), record) == canonical: + return str(advertised) + return canonical + + +def download_quants(record: dict) -> list[str]: + return [str(item["quant"]) for item in record.get("downloads", [])] + + +def _quants(spec: str | list[str], record: dict) -> list[str]: + if spec == "all-downloads": + return download_quants(record) + if not isinstance(spec, list): + raise ValueError(f"invalid quant selector {spec!r}") + available = set(download_quants(record)) + return [str(quant) for quant in spec if str(quant) in available] + + +def expected_accuracy(record: dict, profile: dict) -> list[dict]: + """Expand a profile into publication accuracy cells for one model.""" + cells: list[dict] = [] + if not (record.get("capabilities", {}).get("transcribe", {}).get("supported")): + return cells + for suite in profile.get("accuracy", []): + selector = suite["languages"] + if selector == "english-if-supported": + languages = ["en"] if "en" in fleurs_languages(record) else [] + elif selector == "supported-intersect-fleurs": + languages = fleurs_languages(record) + else: + raise ValueError(f"unknown language selector {selector!r}") + for language in languages: + for quant in _quants(suite["quants"], record): + cells.append({ + "dataset": suite["dataset"], + "split": suite["split"], + "language": language, + "runtime_language": runtime_language(record, language), + "quant": quant, + "metric": "cer" if language in CER_LANGUAGES else "wer", + "batch_size": suite["batch_size"], + "sort_by_length": suite.get("sort_by_length", False), + "timestamps": suite["timestamps"], + "gpu": suite.get("gpu"), + "backend": suite.get("backend"), + }) + return cells + + +def expected_speed(record: dict, profile: dict) -> list[dict]: + """Expand the exact publication speed matrix for one model.""" + spec = profile["speed"] + override = (spec.get("model_overrides") or {}).get(record["variant"], {}) + samples = override.get("samples", spec.get("samples", [])) + cells: list[dict] = [] + for target in spec.get("targets", []): + for backend in target.get("backends", []): + for quant in _quants(spec["quants"], record): + for sample in samples: + cells.append({ + "machine": target["machine"], + "backend": backend, + "quant": quant, + "sample": sample, + }) + return cells + + +def has_measurement_provenance(row: dict) -> bool: + return bool(row.get("engine_sha")) or row.get("measurement_provenance") == "legacy-published" + + +ACCURACY_CORE_KEY = ("dataset", "split", "language", "quant", "metric") +ACCURACY_KEY = (*ACCURACY_CORE_KEY, "batch_size", "timestamps") +SPEED_KEY = ("machine", "backend", "quant", "sample") + + +def accuracy_core_key(cell: dict) -> tuple: + return tuple(cell.get(field) for field in ACCURACY_CORE_KEY) + + +def cell_key(cell: dict, kind: str) -> tuple: + fields = ACCURACY_KEY if kind == "accuracy" else SPEED_KEY + return tuple(cell.get(field) for field in fields) + + +def exception_matches(exception: dict, kind: str, cell: dict) -> bool: + if exception.get("kind") != kind: + return False + match = exception.get("match") or {} + return all(value == "*" or cell.get(field) == value + for field, value in match.items()) + + +def apply_exceptions(record: dict, kind: str, cells: Iterable[dict]) -> list[dict]: + exceptions = record.get("benchmark_exceptions") or [] + return [cell for cell in cells + if not any(exception_matches(exc, kind, cell) for exc in exceptions)] + + +def target_for_machine(profile: dict, machine_slug: str) -> dict | None: + machine = canonical_machine(machine_slug) + return next((target for target in profile["speed"].get("targets", []) + if target["machine"] == machine), None) + + +def dataset_spec(cell: dict) -> str: + if cell["dataset"] == "fleurs": + return f"fleurs:{cell['language']}" + return f"{cell['dataset']}:{cell['split']}" diff --git a/scripts/catalog/prune_benchmarks.py b/scripts/catalog/prune_benchmarks.py new file mode 100755 index 00000000..9347a254 --- /dev/null +++ b/scripts/catalog/prune_benchmarks.py @@ -0,0 +1,135 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# /// +"""Remove benchmark rows outside the selected publication profile. + +The catalog is intentionally not a run archive. This migration keeps one row +per required cell, updates a stale headline pointer to the equivalent profile +recipe, and removes everything else. It never invents a missing measurement. +""" +from __future__ import annotations + +import argparse +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +import common # noqa: E402 +import profiles # noqa: E402 + + +def choose_headline(record: dict, expected: list[dict]) -> dict | None: + if not expected: + return None + current = record.get("headline_benchmark") or {} + if current and common.headline_rows(record): + return current + # Preserve the editorial dataset/language choice while moving it onto the + # profile recipe. If it is no longer eligible, prefer LibriSpeech, then the + # first profile cell (normally the model's first FLEURS language). + candidates = [cell for cell in expected + if all(cell.get(key) == current.get(key) + for key in ("dataset", "split", "language", "metric"))] + if not candidates: + candidates = [cell for cell in expected + if cell["dataset"] == "librispeech"] + cell = (candidates or expected)[0] + return {key: cell[key] for key in common.HEADLINE_KEYS} + + +def dedupe_profile_rows(rows: list[dict], expected_keys: set[tuple], kind: str + ) -> tuple[list[dict], int, int]: + kept: list[dict] = [] + by_key: dict[tuple, int] = {} + extra = duplicate = 0 + for row in rows: + key = profiles.cell_key(row, kind) + if key not in expected_keys: + extra += 1 + continue + if key not in by_key: + by_key[key] = len(kept) + kept.append(row) + continue + duplicate += 1 + previous = kept[by_key[key]] + # Prefer a reproducible measurement over an unattributed legacy row. + previous_valid = bool(previous.get("engine_sha")) and ( + kind != "speed" or previous.get("total_ms") is not None) + row_valid = bool(row.get("engine_sha")) and ( + kind != "speed" or row.get("total_ms") is not None) + if row_valid and not previous_valid: + kept[by_key[key]] = row + return kept, extra, duplicate + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--profile", default=None) + parser.add_argument("--models", default="") + parser.add_argument("--write", action="store_true", + help="apply the migration (default: report only)") + args = parser.parse_args() + + profile_id, profile = profiles.load_profile(args.profile) + records = common.load_records() + selected = {item.strip() for item in args.models.split(",") if item.strip()} + unknown = selected - records.keys() + if unknown: + print(f"unknown catalog variant(s): {', '.join(sorted(unknown))}", file=sys.stderr) + return 2 + + total_extra = total_duplicate = headlines = changed_records = 0 + for variant, record in records.items(): + if selected and variant not in selected: + continue + changed = False + expected_accuracy = profiles.apply_exceptions( + record, "accuracy", profiles.expected_accuracy(record, profile)) + expected_cores = {profiles.accuracy_core_key(cell) + for cell in expected_accuracy} + # Retain honest pre-profile rows for a required dataset/language/quant + # even when the surviving publication did not record the standardized + # batch/timestamp recipe. + expected_accuracy += [ + row for row in record.get("accuracy_benchmarks", []) + if row.get("measurement_provenance") == "legacy-published" + and profiles.accuracy_core_key(row) in expected_cores + ] + expected_speed = profiles.apply_exceptions( + record, "speed", profiles.expected_speed(record, profile)) + for kind, section, expected in ( + ("accuracy", "accuracy_benchmarks", expected_accuracy), + ("speed", "speed_benchmarks", expected_speed), + ): + keys = {profiles.cell_key(cell, kind) for cell in expected} + kept, extra, duplicate = dedupe_profile_rows( + record.get(section, []), keys, kind) + if extra or duplicate: + record[section] = kept + total_extra += extra + total_duplicate += duplicate + changed = True + headline = choose_headline(record, expected_accuracy) + if record.get("headline_benchmark") != headline: + record["headline_benchmark"] = headline + headlines += 1 + changed = True + if changed: + changed_records += 1 + print(f" {variant}: profile rows={len(record['accuracy_benchmarks'])} accuracy, " + f"{len(record['speed_benchmarks'])} speed") + if args.write: + common.write_record(common.CATALOG_DIR / f"{variant}.json", record) + + print(f"profile {profile_id}: {total_extra} extra and {total_duplicate} duplicate " + f"row(s) removed across {changed_records} record(s); " + f"{headlines} headline pointer(s) updated") + if not args.write: + print("dry run: pass --write to apply") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/catalog/render.py b/scripts/catalog/render.py new file mode 100755 index 00000000..2de6d488 --- /dev/null +++ b/scripts/catalog/render.py @@ -0,0 +1,358 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# /// +"""Render catalog-derived tables into docs/models/*.md. + +The docs are hand-written prose with a few tables that restate numbers the +catalog already owns. Rather than generate whole files, this rewrites only the +regions a doc explicitly delegates: + + + | Quantization | Download | Size | WER (LibriSpeech test-clean) | + ... + + +Everything outside a marker pair is untouched. The variant is the file stem +unless the marker overrides it with `variant=`, so family docs can pull a +table for a model they are not named after. + + uv run scripts/catalog/render.py # rewrite marked regions + uv run scripts/catalog/render.py --check # fail if any is stale + uv run scripts/catalog/render.py --adopt # wrap existing tables + +`--adopt` is a one-time migration: it finds a download table that is already +correct, wraps it in a marker, and records the units convention that table +uses so adoption changes no published string. Normalising conventions is then +a separate, deliberate edit to the marker. +""" +from __future__ import annotations + +import argparse +import difflib +import pathlib +import re +import shlex +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +import common # noqa: E402 + +OPEN = re.compile(r"^(\s*)\s*$") +CLOSE = re.compile(r"^\s*\s*$") + + +class RenderError(Exception): + """A marker names something the catalog cannot currently supply.""" + + +def parse_attrs(text: str) -> dict[str, str]: + attrs = {} + for token in shlex.split(text): + key, _, value = token.partition("=") + attrs[key] = value + return attrs + + +def as_bool(value: str | None, default: bool) -> bool: + if value is None: + return default + return value.lower() in ("1", "true", "yes") + + +def fmt_attrs(attrs: dict[str, object]) -> str: + out = [] + for key, value in attrs.items(): + if isinstance(value, bool): + value = "true" if value else "false" + value = str(value) + out.append(f'{key}="{value}"' if " " in value or "," in value else f"{key}={value}") + return " ".join(out) + + +# -------------------------------------------------------------------------- +# blocks + + +def block_downloads(record: dict, attrs: dict[str, str]) -> list[str]: + """The Download table: one row per published GGUF, plus the headline metric.""" + units = attrs.get("units", "dec") + gb_dp = int(attrs.get("gb_dp", 2)) + mb_only = as_bool(attrs.get("mb_only"), False) + want_metric = as_bool(attrs.get("metric"), True) + + rows_by_quant = common.headline_rows(record) if want_metric else {} + target = common.headline(record) + if want_metric and not target: + raise RenderError("metric column requested but headline_benchmark is null") + + header = ["Quantization", "Download", "Size"] + aligns = ["l", "l", "r"] + if want_metric: + label = attrs.get("label") or common.headline_label(record) + metric = attrs.get("metric_name") or target["metric"].upper() + header.append(f"{metric} ({label})") + aligns.append("r") + + body = [] + for item in record.get("downloads", []): + url = common.download_url(record, item["filename"]) + if not url: + raise RenderError("published_repo is null, so downloads have no URL") + cells = [item["quant"], f"[{item['filename']}]({url})", + common.fmt_size(item["size_bytes"], units, gb_dp, mb_only)] + if want_metric: + cells.append(common.fmt_err(rows_by_quant.get(item["quant"]))) + body.append(cells) + if not body: + raise RenderError("no downloads") + return common.render_table(header, aligns, body) + + +def block_perf(record: dict, attrs: dict[str, str]) -> list[str]: + """A per-machine latency grid: rows are (backend, sample), columns quants.""" + machine = attrs.get("machine") + if not machine: + raise RenderError("perf block needs machine=") + rows = common.perf_rows(record, machine) + if not rows: + raise RenderError(f"no speed_benchmarks rows for machine {machine!r}") + + def ordered(index: int, override: str | None) -> list[str]: + if override: + return override.split(",") + seen = [] + for key in rows: + if key[index] not in seen: + seen.append(key[index]) + return seen + + backends = ordered(0, attrs.get("backends")) + samples = ordered(1, attrs.get("samples")) + quants = ordered(2, attrs.get("quants")) + dp_ms = int(attrs.get("dp_ms", 0)) + dp_xrt = attrs.get("dp_xrt") + dp_xrt = None if dp_xrt is None else int(dp_xrt) + + body, blocked = [], [] + for backend in backends: + for sample in samples: + present = [rows.get((backend, sample, q)) for q in quants] + if not any(present): + continue + duration = next(r["sample_duration_s"] for r in present if r) + cells = [backend.capitalize() if backend != "cpu" else "CPU", + f"{sample} ({duration:.1f}s)"] + for quant, row in zip(quants, present): + if row is None: + cells.append("-") + continue + if row.get("total_ms") is None: + blocked.append(f"{backend}/{sample}/{quant}") + cells.append("-") + continue + cells.append(f"{common.fmt_ms(row['total_ms'], dp_ms)} " + f"({common.fmt_xrt(row['xrt_compute'], dp_xrt)})") + body.append(cells) + if blocked: + raise RenderError( + f"{len(blocked)} cell(s) on {machine} have no total_ms, so latency " + f"cannot be rendered: {', '.join(blocked[:4])}" + + (" ..." if len(blocked) > 4 else "")) + if not body: + raise RenderError(f"no rows matched on {machine}") + return common.render_table(["Backend", "Sample"] + quants, + ["l", "l"] + ["r"] * len(quants), body, + rule_fill=True) + + +BLOCKS = {"downloads": block_downloads, "perf": block_perf} + + +# -------------------------------------------------------------------------- +# file rewriting + + +def rewrite(path: pathlib.Path, records: dict[str, dict]) -> tuple[str, list[str]]: + lines = path.read_text().splitlines() + out, errors, index = [], [], 0 + while index < len(lines): + match = OPEN.match(lines[index]) + if not match: + out.append(lines[index]) + index += 1 + continue + indent, name, raw = match.groups() + close = next((j for j in range(index + 1, len(lines)) if CLOSE.match(lines[j])), None) + if close is None: + errors.append(f"{path.name}:{index + 1}: catalog:{name} has no ") + out.append(lines[index]) + index += 1 + continue + out.append(lines[index]) + attrs = parse_attrs(raw) + variant = attrs.get("variant", path.stem) + try: + if name not in BLOCKS: + raise RenderError(f"unknown block type {name!r}") + if variant not in records: + raise RenderError(f"no catalog record for {variant!r}") + rendered = BLOCKS[name](records[variant], attrs) + except RenderError as exc: + errors.append(f"{path.name}:{index + 1}: catalog:{name} {variant}: {exc}") + out.extend(lines[index + 1:close]) # leave the region alone + else: + out.extend(indent + line for line in rendered) + out.append(lines[close]) + index = close + 1 + return "\n".join(out) + "\n", errors + + +# -------------------------------------------------------------------------- +# adoption + + +DOWNLOAD_HEADER = re.compile(r"^\|\s*Quantization\s*\|\s*Download\s*\|\s*Size\s*\|(.*)$") +DOWNLOAD_ROW = re.compile(r"^\|\s*(\S+)\s*\|\s*\[[^\]]+\]\([^)]+\)\s*\|\s*([\d.]+\s*[GM]i?B)\s*\|") + + +def detect_units(record: dict, published: dict[str, str]) -> dict[str, object] | None: + """Which size convention reproduces this table's existing strings.""" + sizes = common.downloads(record) + best, score = None, -1 + for convention in common.size_conventions(): + hit = sum(1 for quant, text in published.items() + if quant in sizes + and common.fmt_size(sizes[quant]["size_bytes"], **convention) == text) + if hit > score: + best, score = convention, hit + return best if score == len(published) else None + + +def adopt(path: pathlib.Path, records: dict[str, dict], + units: dict | None = None) -> tuple[str, str]: + """Wrap an existing Download table in a marker. + + With `units` unset the table must already be self-consistent, and adoption + changes no published string. Passing a convention instead adopts on the + house standard and lets the next render correct whatever was stale. + """ + record = records.get(path.stem) + if record is None: + return "", "no catalog record" + lines = path.read_text().splitlines() + if any(OPEN.match(line) for line in lines): + return "", "already has markers" + + start = next((i for i, line in enumerate(lines) if DOWNLOAD_HEADER.match(line)), None) + if start is None: + return "", "no Download table" + tail = DOWNLOAD_HEADER.match(lines[start]).group(1) + end = start + 2 + published = {} + while end < len(lines) and lines[end].startswith("|"): + row = DOWNLOAD_ROW.match(lines[end]) + if not row: + return "", "download row this renderer cannot reproduce" + published[row.group(1)] = re.sub(r"\s+", " ", row.group(2)).strip() + end += 1 + + if {d["quant"] for d in record.get("downloads", [])} != set(published): + return "", "table and catalog list different quants" + convention = detect_units(record, published) if units is None else dict(units) + if convention is None: + return "", "sizes match no single units convention (stale or hand-edited)" + covered = set(common.headline_rows(record)) + if covered and not set(published) <= covered: + return "", ("headline_benchmark covers only " + + ", ".join(sorted(covered)) + "; table publishes more") + + attrs: dict[str, object] = dict(convention) + columns = [c.strip() for c in tail.split("|") if c.strip()] + if not columns: + attrs["metric"] = False + else: + head = columns[0] + if len(columns) > 1: + return "", "second metric column is not supported yet" + label = re.match(r"^(\w+)\s*\((.+)\)$", head) + if not label: + return "", f"cannot parse metric header {head!r}" + attrs["metric_name"], attrs["label"] = label.group(1), label.group(2) + target = common.headline(record) + if not target: + return "", "headline_benchmark is null" + if attrs["metric_name"] == target["metric"].upper(): + del attrs["metric_name"] + if attrs["label"] == common.headline_label(record): + del attrs["label"] + + body = lines[:start] + [f""] \ + + lines[start:end] + [""] + lines[end:] + return "\n".join(body) + "\n", "" + + +# -------------------------------------------------------------------------- + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--check", action="store_true", + help="report stale regions and exit non-zero; write nothing") + parser.add_argument("--adopt", action="store_true", + help="one-time: wrap existing correct tables in markers") + parser.add_argument("--adopt-units", choices=("dec", "bin"), + help="adopt on this units convention instead of " + "detecting the table's own; stale sizes are then " + "corrected by the next render") + parser.add_argument("--docs", default=str(common.DOCS_DIR)) + parser.add_argument("paths", nargs="*", help="limit to these files") + args = parser.parse_args() + + records = common.load_records() + docs = ([pathlib.Path(p) for p in args.paths] + or sorted(pathlib.Path(args.docs).glob("*.md"))) + + if args.adopt: + units = {"units": args.adopt_units, "gb_dp": 2, "mb_only": False} \ + if args.adopt_units else None + adopted, skipped = 0, [] + for path in docs: + text, why = adopt(path, records, units) + if why: + skipped.append((path.name, why)) + continue + path.write_text(text) + adopted += 1 + print(f"adopted {adopted} download table(s)") + for name, why in skipped: + print(f" skipped {name}: {why}") + return 0 + + stale, errors, rendered = [], [], 0 + for path in docs: + current = path.read_text() + text, file_errors = rewrite(path, records) + errors.extend(file_errors) + if not any(OPEN.match(line) for line in current.splitlines()): + continue + rendered += 1 + if text == current: + continue + stale.append(path) + if args.check: + diff = difflib.unified_diff(current.splitlines(), text.splitlines(), + f"a/{path}", f"b/{path}", lineterm="", n=1) + print("\n".join(diff)) + else: + path.write_text(text) + + for error in errors: + print(f" error: {error}", file=sys.stderr) + verb = "stale" if args.check else "rewritten" + print(f"{rendered} doc(s) with markers; {len(stale)} {verb}; {len(errors)} error(s)") + return 1 if (args.check and stale) or errors else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/catalog/sync_capabilities.py b/scripts/catalog/sync_capabilities.py new file mode 100755 index 00000000..92ad12ea --- /dev/null +++ b/scripts/catalog/sync_capabilities.py @@ -0,0 +1,529 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# dependencies = ["gguf", "huggingface-hub", "requests"] +# /// +"""Keep a record's `capabilities` block and its GGUF's KVs in agreement. + +Two directions: + + (default) GGUF -> catalog. Read the truth back out of the file. + --repair catalog -> GGUF. Rewrite a local GGUF so its stt.capability.* + KVs declare what the record says, dropping any key spelled in a + way no loader reads. + +`--repair` exists because absence is not falsity. read_capability_bool() +returns OK and leaves the field ALONE when a key is missing, so a missing KV +inherits the family default -- and granite's default is deliberately +`supports_translate = true` so each variant's GGUF can lower it. The -plus +GGUF spelled that key `stt.capability.translation`, the lowering never +happened, and a model that does not translate has been advertising that it +does. Declaring every capability explicitly is what makes the file mean what +it says regardless of the loader's defaults. + +Hand-writing this block is how moss-transcribe-diarize shipped as +diarize:false and how whisper-large-v3 came to claim translate:false while its +own GGUF says otherwise. This reads the truth back out instead. + +Sources, and the reason each is what it is: + + translate / lang_detect / streaming / diarize + `stt.capability.*` KVs, which is exactly what read_capability_kv() in + src/transcribe-meta.cpp feeds to the public capability surface. + timestamps.granularities + NOT a KV. `max_timestamp_kind` is a family invariant applied in each + family's load(), so the ceiling is scraped out of + src/arch//capabilities.cpp and cannot drift from the C++. + Granite scopes it per variant off stt.capability.word_timestamps. + transcribe / batching + Left alone: batching sits behind the transcribe_model_supports() probe + rather than the capability struct, so reading it needs a loaded model. + +A GGUF is read locally when present, otherwise its header is range-fetched +from the published repo (a few MB, not the weights). + + uv run scripts/catalog/sync_capabilities.py --dry-run + uv run scripts/catalog/sync_capabilities.py --local-only + uv run scripts/catalog/sync_capabilities.py + uv run scripts/catalog/sync_capabilities.py --repair [...] +""" +from __future__ import annotations + +import argparse +import collections +import json +import os +import pathlib +import re +import sys +import tempfile + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +import common # noqa: E402 + +ARCH = common.REPO / "src" / "arch" + +# catalog `family` -> src/arch directory, where the two spellings diverge. +FAMILY_DIRS = { + "cohere_asr": "cohere", + "granite_speech": "granite", + "granite_speech_nar": "granite_nar", +} + +KIND_RE = re.compile(r"max_timestamp_kind\s*=\s*TRANSCRIBE_TIMESTAMPS_(\w+)") + +KV = { + "translate": "stt.capability.translate", + "lang_detect": "stt.capability.lang_detect", + "streaming": "stt.capability.streaming", + "diarize": "stt.capability.speaker_diarization", +} + + +def family_ceiling(family: str) -> str | None: + """The family's max_timestamp_kind, read straight out of the C++.""" + path = ARCH / FAMILY_DIRS.get(family, family) / "capabilities.cpp" + if not path.exists(): + return None + match = KIND_RE.search(path.read_text()) + return match.group(1).lower() if match else None + + +def granularities(ceiling: str | None) -> list[str]: + """Just the ceiling. max_timestamp_kind is the finest the family emits; + whether it also assembles coarser output is a run() question, so listing + the coarser kinds here would be a claim the C++ does not make.""" + return [] if not ceiling or ceiling == "none" else [ceiling] + + +def read_kvs(reader) -> dict: + """Every stt.capability.* / stt.translation.* KV the file carries.""" + out = {} + for key, field in reader.fields.items(): + if not (key.startswith("stt.capability.") or key.startswith("stt.translation.")): + continue + try: + parts = field.parts + if field.types and field.types[0].name == "ARRAY": + out[key] = [bytes(parts[i]).decode("utf-8", "replace") + if parts[i].dtype.kind in "iu" and len(parts[i]) > 1 + else parts[i].tolist() for i in field.data] + out[key] = [v if isinstance(v, str) else + bytes(bytearray(v)).decode("utf-8", "replace") + for v in out[key]] + else: + value = parts[field.data[0]] + out[key] = bool(value[0]) if field.types[0].name == "BOOL" else value.tolist()[0] + except (IndexError, KeyError, AttributeError, UnicodeDecodeError): + continue + return out + + +def open_gguf(record: dict, local_only: bool): + """A GGUFReader over a local file, else over a range-fetched header.""" + from gguf import GGUFReader + + names = {item["filename"] for item in record["downloads"]} + for directory in sorted((common.REPO / "models").glob("*")): + if not directory.is_dir(): + continue + for path in sorted(directory.glob("*.gguf")): + if path.name in names: + return GGUFReader(str(path)), f"local {path.name}", None + if local_only or not record.get("published_repo"): + return None, None, "no local GGUF" + + # Header-only read: pad the temp file out to the declared size so + # GGUFReader's memmap of the tensor region stays in bounds and is never + # touched. Same trick as scripts/audit_gguf_metadata.py. + import requests + from huggingface_hub import get_hf_file_metadata, hf_hub_url + from huggingface_hub.utils import build_hf_headers + + filename = sorted(record["downloads"], key=lambda d: d["size_bytes"])[0]["filename"] + try: + url = hf_hub_url(record["published_repo"], filename) + total = get_hf_file_metadata(url).size + prefix = min(24 * 1024 * 1024, total) + headers = build_hf_headers() + headers["Range"] = f"bytes=0-{prefix - 1}" + response = requests.get(url, headers=headers, timeout=120) + response.raise_for_status() + except Exception as exc: # noqa: BLE001 - any transport failure is just "unavailable" + return None, None, f"{type(exc).__name__}: {str(exc)[:70]}" + with tempfile.NamedTemporaryFile(suffix=".gguf", delete=False) as handle: + tmp = pathlib.Path(handle.name) + handle.write(response.content) + handle.truncate(total) + try: + return GGUFReader(str(tmp)), f"hub {record['published_repo']}", None + finally: + tmp.unlink(missing_ok=True) + + +def build(record: dict, kvs: dict) -> dict: + """The capabilities block this GGUF implies, keeping human-set flags.""" + previous = record.get("capabilities", {}) + + def carry(name: str, supported: bool, extra: dict | None = None) -> dict: + block = {"supported": supported} + if supported: + was = previous.get(name, {}) + block["verified"] = bool(was.get("verified")) if was.get("supported") else False + block.update(extra or {}) + if was.get("note"): + block["note"] = was["note"] + return block + + caps = {"transcribe": previous.get("transcribe", {"supported": True, "verified": False})} + + targets = kvs.get("stt.translation.target_languages") + pairs = kvs.get("stt.translation.pairs") + translate = bool(kvs.get(KV["translate"], False)) + extra = {} + if translate: + extra = {"targets": targets or None, "pairs": pairs or None} + caps["translate"] = carry("translate", translate, extra) + caps["lang_detect"] = carry("lang_detect", bool(kvs.get(KV["lang_detect"], False))) + + ceiling = family_ceiling(record["family"]) + if record["family"].startswith("granite_speech") and not kvs.get( + "stt.capability.word_timestamps", False): + # Granite scopes the ceiling per variant, in arch/granite/model.cpp. + ceiling = "none" + grans = granularities(ceiling) + caps["timestamps"] = carry("timestamps", bool(grans), {"granularities": grans} if grans else None) + + caps["streaming"] = carry("streaming", bool(kvs.get(KV["streaming"], False))) + if caps["streaming"]["supported"]: + for key in ("mode", "presets"): + if key in previous.get("streaming", {}): + caps["streaming"][key] = previous["streaming"][key] + caps["diarize"] = carry("diarize", bool(kvs.get(KV["diarize"], False))) + if caps["diarize"]["supported"]: + for key in ("max_speakers", "granularity", "markup"): + if key in previous.get("diarize", {}): + caps["diarize"][key] = previous["diarize"][key] + caps["batching"] = previous.get("batching", {"supported": False}) + for optional in ("punctuation", "casing", "itn"): + if optional in previous: + caps[optional] = previous[optional] + return caps + + +# -------------------------------------------------------------------------- +# repair: catalog -> GGUF + + +# Where each catalog capability lands as a KV. `timestamps` is deliberately +# absent: the ceiling is a family invariant in C++, not a per-file claim, and +# granite's per-variant lowering rides on word_timestamps instead. +REPAIR_KEYS = { + "translate": "stt.capability.translate", + "lang_detect": "stt.capability.lang_detect", + "streaming": "stt.capability.streaming", + "diarize": "stt.capability.speaker_diarization", +} +# Spellings that were shipped but that no loader reads. Dropped on repair so +# the file does not carry two contradictory answers. +DEAD_KEYS = {"stt.capability.translation"} + + +def identity_kvs(record: dict) -> dict[str, object]: + """The general.* block a fresh conversion would emit for this record. + + Files converted before add_general_identity() landed in + scripts/lib/gguf_common.py carry a bare slug instead of an identity, so + an inspector cannot say who made the model or under what licence. Only + name / basename / author / licence text come from the record's `identity` + block; the rest is derived, because a second copy of a fact the catalog + already holds is a second thing to drift. + + `general.size_label` is carried rather than computed from `params`: most + converters bucket the parameter count, but the parakeet profiles hardcode + a marketing label ("0.6B" for a 638M-parameter nemotron), so a derived + value would not be what a fresh conversion writes. + + `general.languages` is deliberately NOT derived here: a file's advertised + language list may narrow the record's on purpose (nemotron ships 40 + locales in its prompt table and advertises the 32 it can actually + transcribe), so the record is the wrong source and the file already + carries the right answer. + """ + ident = record.get("identity") + if not ident: + return {} + org, _, _ = record["upstream_repo"].partition("/") + kvs: dict[str, object] = { + "general.name": ident["name"], + "general.basename": ident["basename"], + "general.author": ident["author"], + "general.organization": org, + "general.license": record["license"]["spdx"], + "general.repo_url": f"https://huggingface.co/{record['upstream_repo']}", + } + if ident.get("size_label"): + kvs["general.size_label"] = ident["size_label"] + if ident.get("license_name"): + kvs["general.license.name"] = ident["license_name"] + if ident.get("license_link"): + kvs["general.license.link"] = ident["license_link"] + return kvs + + +def repair_file(path: pathlib.Path, record: dict, out: pathlib.Path) -> dict: + """Copy a GGUF, forcing its capability KVs to match the record. + + Tensor data is passed through untouched -- this changes what the file + says about itself, never what it computes. + + Missing `general.*` identity keys are added too, written BEFORE the copy + so they land ahead of the bulk tokenizer arrays: appending them would push + a key past the trailer and cost a header range-read the very thing the + trailer layout buys. An identity key the file already carries is left + exactly as it is and reported, never overwritten -- the file was written + by its converter and the catalog is the newcomer here. + """ + from gguf import GGUFReader, GGUFValueType + + sys.path.insert(0, str(common.REPO / "scripts")) + from lib.gguf_common import gguf_writer # noqa: PLC0415 + + reader = GGUFReader(str(path)) + arch = str(reader.fields["general.architecture"].contents()) + writer = gguf_writer(str(out), arch) + + want = {REPAIR_KEYS[name]: bool(block.get("supported")) + for name, block in record["capabilities"].items() + if name in REPAIR_KEYS} + changed = {} + + for key, value in identity_kvs(record).items(): + if key not in reader.fields: + writer.add_string(key, value) + changed[key] = f"added = {value!r}" + elif str(reader.fields[key].contents()) != str(value): + changed[key] = (f"KEPT file value {reader.fields[key].contents()!r} " + f"(catalog says {value!r})") + + for key, field in reader.fields.items(): + if key.startswith("GGUF.") or key == "general.architecture": + continue + if key in DEAD_KEYS: + changed[key] = "removed (read by no loader)" + continue + if key in want: + if bool(field.contents()) != want[key]: + changed[key] = f"{bool(field.contents())} -> {want[key]}" + writer.add_bool(key, want[key]) + want.pop(key) + continue + vtype = field.types[0] + sub = field.types[1] if len(field.types) > 1 else None + writer.add_key_value(key, field.contents(), + vtype if vtype != GGUFValueType.ARRAY else vtype, + sub_type=sub) + for key, value in want.items(): # capabilities the file never stated + writer.add_bool(key, value) + changed[key] = f"added = {value}" + + for tensor in reader.tensors: + writer.add_tensor(tensor.name, tensor.data, raw_dtype=tensor.tensor_type) + writer.write_header_to_file() + writer.write_kv_data_to_file() + writer.write_tensors_to_file() + writer.close() + return changed + + +def published_header(record: dict, filename: str): + """A GGUFReader over the published file's header, range-fetched. + + Same trick as open_gguf(), but for one named file rather than the + cheapest one, because the guard below has to compare like with like. + """ + from gguf import GGUFReader + import requests + from huggingface_hub import get_hf_file_metadata, hf_hub_url + from huggingface_hub.utils import build_hf_headers + + url = hf_hub_url(record["published_repo"], filename) + total = get_hf_file_metadata(url).size + headers = build_hf_headers() + headers["Range"] = f"bytes=0-{min(24 * 1024 * 1024, total) - 1}" + response = requests.get(url, headers=headers, timeout=300) + response.raise_for_status() + with tempfile.NamedTemporaryFile(suffix=".gguf", delete=False) as handle: + tmp = pathlib.Path(handle.name) + handle.write(response.content) + handle.truncate(total) + try: + return GGUFReader(str(tmp)) + finally: + tmp.unlink(missing_ok=True) + + +def divergence(local, published, intended: set[str]) -> list[str]: + """Ways the local file differs from the published one beyond `intended`. + + A repair rewrites a local file and the result gets uploaded, so the local + file is only a safe base if it IS what is published. A stale mirror looks + identical to a repairable file -- same name, same quant, plausible KVs -- + and silently republishing it reverts whatever the published file gained + since. That is not hypothetical: a stale granite-nar mirror here carried + an older upstream snapshot (ctc_bpe 100353 vs the published 100352) and + lacked stt.granite_nar.encoder.bpe_blank_id, so repairing and uploading it + would have published different weights under an unchanged filename. + + Tensor shapes and dtypes are compared as well as KVs, since a different + build is the case that actually matters and it shows up there first. + """ + problems = [] + lt = {t.name: (tuple(int(x) for x in t.shape), t.tensor_type) for t in local.tensors} + pt = {t.name: (tuple(int(x) for x in t.shape), t.tensor_type) for t in published.tensors} + for name in sorted(pt.keys() - lt.keys()): + problems.append(f"tensor {name} missing locally") + for name in sorted(lt.keys() - pt.keys()): + problems.append(f"tensor {name} not in the published file") + for name in sorted(pt.keys() & lt.keys()): + if pt[name] != lt[name]: + problems.append(f"tensor {name}: published {pt[name][0]} " + f"{pt[name][1].name}, local {lt[name][0]} {lt[name][1].name}") + for key in sorted(set(published.fields) | set(local.fields)): + if key.startswith("GGUF.") or key in intended: + continue + here = local.fields[key].contents() if key in local.fields else None + there = published.fields[key].contents() if key in published.fields else None + if str(here)[:400] != str(there)[:400]: + problems.append(f"{key}: published {str(there)[:60]!r}, local {str(here)[:60]!r}") + return problems + + +def run_repair(variants: list[str], dry_run: bool, check_published: bool = True) -> int: + records = common.load_records() + names = variants or sorted(records) + touched, refused = 0, 0 + for variant in names: + record = records.get(variant) + if record is None: + print(f" skip {variant}: no catalog record") + continue + for item in record["downloads"]: + path = common.REPO / "models" / variant / item["filename"] + if not path.exists(): + alt = next((p for p in (common.REPO / "models").glob(f"*/{item['filename']}")), None) + path = alt if alt else path + if not path.exists(): + print(f" skip {variant}/{item['quant']}: {item['filename']} not on disk") + continue + intended = set(REPAIR_KEYS.values()) | DEAD_KEYS | set(identity_kvs(record)) + if check_published and record.get("published_repo"): + try: + remote = published_header(record, item["filename"]) + except Exception as exc: # noqa: BLE001 + print(f" refuse {variant}/{item['quant']}: cannot read the " + f"published header to compare ({type(exc).__name__}: " + f"{str(exc)[:60]}); pass --skip-published-check to " + f"repair without the comparison") + refused += 1 + continue + from gguf import GGUFReader + problems = divergence(GGUFReader(str(path)), remote, intended) + if problems: + print(f" REFUSE {variant}/{item['quant']}: local file is not " + f"what is published -- repairing it would republish a " + f"different build:") + for line in problems[:6]: + print(f" {line}") + if len(problems) > 6: + print(f" ... and {len(problems) - 6} more") + print(f" re-download from {record['published_repo']} " + f"first, or pass --skip-published-check if the local " + f"file is deliberately newer") + refused += 1 + continue + out = path.with_suffix(".gguf.repaired") + if dry_run: + from gguf import GGUFReader + kvs = read_kvs(GGUFReader(str(path))) + want = {REPAIR_KEYS[n]: bool(b.get("supported")) + for n, b in record["capabilities"].items() if n in REPAIR_KEYS} + diff = {k: f"{kvs.get(k)} -> {v}" for k, v in want.items() if kvs.get(k) != v} + diff.update({k: "removed" for k in kvs if k in DEAD_KEYS}) + fields = GGUFReader(str(path)).fields + for key, value in identity_kvs(record).items(): + if key not in fields: + diff[key] = f"added = {value!r}" + elif str(fields[key].contents()) != str(value): + diff[key] = (f"KEPT file value {fields[key].contents()!r} " + f"(catalog says {value!r})") + print(f" {variant}/{item['quant']}: {diff or 'already correct'}") + continue + changed = repair_file(path, record, out) + os.replace(out, path) + touched += 1 + print(f" {variant}/{item['quant']}: {changed or 'no change'}") + print(f"\n{touched} file(s) rewritten" + (" (dry run)" if dry_run else "") + + (f", {refused} refused" if refused else "")) + return 1 if refused else 0 + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--dry-run", action="store_true") + parser.add_argument("--local-only", action="store_true", + help="skip the hub fallback") + parser.add_argument("--repair", nargs="*", metavar="VARIANT", + help="rewrite local GGUFs so their capability KVs " + "declare what the catalog record says (all " + "variants when given no names)") + parser.add_argument("--skip-published-check", action="store_true", + help="repair even when the local file diverges from " + "the published one. Only for a local file that is " + "deliberately newer than the Hub.") + args = parser.parse_args() + + if args.repair is not None: + return run_repair(args.repair, args.dry_run, + check_published=not args.skip_published_check) + + changed, unreachable, sources = [], [], collections.Counter() + for variant, record in common.load_records().items(): + reader, source, error = open_gguf(record, args.local_only) + if reader is None: + unreachable.append((variant, error)) + continue + sources[source.split()[0]] += 1 + caps = build(record, read_kvs(reader)) + before = record.get("capabilities", {}) + if caps == before: + continue + diff = [f"{name}: {before.get(name, {}).get('supported')} -> {block['supported']}" + for name, block in caps.items() + if before.get(name, {}).get("supported") != block.get("supported")] + grain_before = (before.get("timestamps") or {}).get("granularities") + grain_after = (caps.get("timestamps") or {}).get("granularities") + if grain_before != grain_after and not any(d.startswith("timestamps") for d in diff): + diff.append(f"timestamps: {grain_before} -> {grain_after}") + changed.append((variant, diff)) + if not args.dry_run: + record["capabilities"] = caps + (common.CATALOG_DIR / f"{variant}.json").write_text( + common.dumps_record(record)) + + print(f"read {sum(sources.values())} GGUF(s): " + + ", ".join(f"{count} {where}" for where, count in sources.most_common())) + print(f"{len(changed)} record(s) corrected\n") + for variant, diff in changed: + print(f" {variant:42s} {'; '.join(diff) or 'payload only'}") + if unreachable: + print(f"\n{len(unreachable)} record(s) with no readable GGUF:") + for variant, error in unreachable: + print(f" {variant:42s} {error}") + if args.dry_run: + print("\ndry run: nothing written") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/compose-multitalker-bundle.py b/scripts/compose-multitalker-bundle.py index d4314e80..1c21f2ee 100644 --- a/scripts/compose-multitalker-bundle.py +++ b/scripts/compose-multitalker-bundle.py @@ -70,6 +70,13 @@ # Keys the GGUFReader synthesizes (virtual) or the writer emits itself. SKIP_COPY_KEYS = {"general.architecture"} +# Capability KVs describe the FILE, and the file being written is not the ASR +# half: embedding a diarizer is precisely what makes the bundle diarize. The +# ASR half either says speaker_diarization=false or omits it, so copying it +# verbatim is how the bundle came to advertise diarize:false while the runtime +# diarize path was implemented and working. Drop it on copy and state it below. +SKIP_COPY_KEYS |= {"stt.capability.speaker_diarization"} + # Diarizer checkpoints the runtime's multitalker path is validated against. # run_multitalker pins the reference operating point (14-frame chunk # cadence, spkcache/FIFO/update 188, gating threshold 0.5, 2-chunk gating @@ -143,6 +150,10 @@ def main() -> int: continue copy_kv(writer, field) + # Model-level diarization capability: a property of the bundle, not of + # either half. read_capability_kv() and the catalog both read this. + writer.add_bool("stt.capability.speaker_diarization", True) + writer.add_bool("stt.parakeet.diarizer.embedded", True) writer.add_string("stt.parakeet.diarizer.variant", diar.fields["stt.variant"].contents()) writer.add_string("stt.parakeet.diarizer.tensor_prefix", DIAR_TENSOR_PREFIX) diff --git a/scripts/hf_cards/breeze-asr-25.yaml b/scripts/hf_cards/breeze-asr-25.yaml index d639861d..fbfb4a40 100644 --- a/scripts/hf_cards/breeze-asr-25.yaml +++ b/scripts/hf_cards/breeze-asr-25.yaml @@ -1,14 +1,10 @@ # Spec for the HF README of handy-computer/Breeze-ASR-25-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: MediaTek-Research/Breeze-ASR-25 -target_repo: handy-computer/Breeze-ASR-25-gguf # Pure fine-tune of whisper-large-v2 (identical architecture), so the model # page points at the whisper-large-v2 doc rather than a Breeze-specific one. transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large-v2.md -# Pinned at download (the snapshot the GGUFs were converted from). -upstream_commit: cffe7ccb404d025296a00758d0a33468bec3a9d0 pin_date: 2026-06-29 validation: @@ -16,8 +12,6 @@ validation: commit: 3848875 date: 2026-06-29 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition # Breeze-ASR-25 is a Whisper-large-v2 fine-tune. It inherits Whisper's @@ -53,31 +47,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. Same Whisper -# code path as whisper-large-v2 (the library exposes translation, language -# detection and segment timestamps for any Whisper GGUF), though this -# fine-tune is specialized for zh/en transcription. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, published raw as rtf_ -# in the metadata block. Breeze-ASR-25 is byte-for-byte the same architecture -# and tensor shapes as Whisper large-v2 (1.5B params, 32+32 layers, -# d_model 1280); RTF is a function of shapes/quant/backend, not weight values, -# so these are inherited verbatim from whisper-large-v2 rather than re-benched. -perf: - m4-max: - metal: 23.7 - cpu: 1.5 - ryzen-4750u: - vulkan: 2.1 - cpu: 0.6 - wer: - source: LibriSpeech test-clean metadata_key: librispeech_test_clean source2: FLEURS zh notes: | diff --git a/scripts/hf_cards/canary-180m-flash.yaml b/scripts/hf_cards/canary-180m-flash.yaml index 0af40950..69a46bf4 100644 --- a/scripts/hf_cards/canary-180m-flash.yaml +++ b/scripts/hf_cards/canary-180m-flash.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/canary-180m-flash-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/canary-180m-flash -target_repo: handy-computer/canary-180m-flash-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-180m-flash.md -upstream_commit: b12ab41 pin_date: 2026-05-08 # Validation pin for the most recent upload. Updated on each release — @@ -15,14 +12,7 @@ validation: commit: db53eda date: 2026-05-08 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - de - - es - - fr tags: - gguf - transcribe.cpp @@ -45,25 +35,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 139.6 - cpu: 74 - ryzen-4750u: - vulkan: 31.9 - cpu: 21.3 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.94%. @@ -71,29 +43,3 @@ wer: difference out of ~27k reference words), so the F32 port matches the reference framework at the noise floor. NVIDIA's self-reported number on the upstream model card is 1.87%. - -quants: - - name: F32 - filename: canary-180m-flash-F32.gguf - size: 721 MB - wer: 1.94% - - name: F16 - filename: canary-180m-flash-F16.gguf - size: 364 MB - wer: 1.94% - - name: Q8_0 - filename: canary-180m-flash-Q8_0.gguf - size: 208 MB - wer: 1.93% - - name: Q6_K - filename: canary-180m-flash-Q6_K.gguf - size: 168 MB - wer: 1.93% - - name: Q5_K_M - filename: canary-180m-flash-Q5_K_M.gguf - size: 151 MB - wer: 1.90% - - name: Q4_K_M - filename: canary-180m-flash-Q4_K_M.gguf - size: 133 MB - wer: 1.93% diff --git a/scripts/hf_cards/canary-1b-flash.yaml b/scripts/hf_cards/canary-1b-flash.yaml index 135debe2..63ada9a1 100644 --- a/scripts/hf_cards/canary-1b-flash.yaml +++ b/scripts/hf_cards/canary-1b-flash.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/canary-1b-flash-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/canary-1b-flash -target_repo: handy-computer/canary-1b-flash-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-1b-flash.md -upstream_commit: a9a55e0 pin_date: 2026-05-08 validation: @@ -13,14 +10,7 @@ validation: commit: db53eda date: 2026-05-08 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - de - - es - - fr tags: - gguf - transcribe.cpp @@ -43,52 +33,8 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 99.6 - cpu: 20.4 - ryzen-4750u: - vulkan: 14.4 - cpu: 6.9 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.62%. NVIDIA's self-reported number on the upstream model card is 1.48%. - -quants: - - name: F32 - filename: canary-1b-flash-F32.gguf - size: 3.3 GB - wer: 1.62% - - name: F16 - filename: canary-1b-flash-F16.gguf - size: 1.7 GB - wer: 1.62% - - name: Q8_0 - filename: canary-1b-flash-Q8_0.gguf - size: 1.0 GB - wer: 1.62% - - name: Q6_K - filename: canary-1b-flash-Q6_K.gguf - size: 818 MB - wer: 1.65% - - name: Q5_K_M - filename: canary-1b-flash-Q5_K_M.gguf - size: 734 MB - wer: 1.64% - - name: Q4_K_M - filename: canary-1b-flash-Q4_K_M.gguf - size: 646 MB - wer: 1.59% diff --git a/scripts/hf_cards/canary-1b-v2.yaml b/scripts/hf_cards/canary-1b-v2.yaml index 6e76e333..514cca59 100644 --- a/scripts/hf_cards/canary-1b-v2.yaml +++ b/scripts/hf_cards/canary-1b-v2.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/canary-1b-v2-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/canary-1b-v2 -target_repo: handy-computer/canary-1b-v2-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-1b-v2.md -upstream_commit: 87bc526 pin_date: 2026-05-08 validation: @@ -13,35 +10,7 @@ validation: commit: db53eda date: 2026-05-08 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - bg - - hr - - cs - - da - - nl - - en - - et - - fi - - fr - - de - - el - - hu - - it - - lv - - lt - - mt - - pl - - pt - - ro - - sk - - sl - - es - - sv - - ru - - uk tags: - gguf - transcribe.cpp @@ -65,54 +34,10 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 85.2 - cpu: 18.9 - ryzen-4750u: - vulkan: 13.2 - cpu: 6.7 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.92%. NVIDIA's self-reported number on the upstream model card is 2.18%; our F32 port comes in slightly under the upstream-reported number (Δ −0.26pp) and is likely down to scoring differences. - -quants: - - name: F32 - filename: canary-1b-v2-F32.gguf - size: 3.7 GB - wer: 1.92% - - name: F16 - filename: canary-1b-v2-F16.gguf - size: 1.8 GB - wer: 1.92% - - name: Q8_0 - filename: canary-1b-v2-Q8_0.gguf - size: 1.1 GB - wer: 1.91% - - name: Q6_K - filename: canary-1b-v2-Q6_K.gguf - size: 889 MB - wer: 1.94% - - name: Q5_K_M - filename: canary-1b-v2-Q5_K_M.gguf - size: 798 MB - wer: 1.93% - - name: Q4_K_M - filename: canary-1b-v2-Q4_K_M.gguf - size: 701 MB - wer: 1.91% diff --git a/scripts/hf_cards/canary-1b.yaml b/scripts/hf_cards/canary-1b.yaml index f560caec..04b46713 100644 --- a/scripts/hf_cards/canary-1b.yaml +++ b/scripts/hf_cards/canary-1b.yaml @@ -7,11 +7,8 @@ # into every preset; the YAML below mirrors that distinction so the HF # card surfaces the constraint to anyone clicking through to download. -hf_repo: nvidia/canary-1b -target_repo: handy-computer/canary-1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-1b.md -upstream_commit: 1698acf pin_date: 2026-05-08 validation: @@ -19,14 +16,7 @@ validation: commit: db53eda date: 2026-05-08 -license: cc-by-nc-4.0 -license_display: CC-BY-NC-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - de - - es - - fr tags: - gguf - transcribe.cpp @@ -50,54 +40,10 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 42.5 - cpu: 19.4 - ryzen-4750u: - vulkan: 8.9 - cpu: 5.6 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.55%. NVIDIA's self-reported number on the upstream model card is 1.48%; likely this is due to differences in how we score WER, based on the results we have from canary-180m-flash. - -quants: - - name: F32 - filename: canary-1b-F32.gguf - size: 3.8 GB - wer: 1.55% - - name: F16 - filename: canary-1b-F16.gguf - size: 1.9 GB - wer: 1.55% - - name: Q8_0 - filename: canary-1b-Q8_0.gguf - size: 1.1 GB - wer: 1.55% - - name: Q6_K - filename: canary-1b-Q6_K.gguf - size: 891 MB - wer: 1.57% - - name: Q5_K_M - filename: canary-1b-Q5_K_M.gguf - size: 799 MB - wer: 1.57% - - name: Q4_K_M - filename: canary-1b-Q4_K_M.gguf - size: 696 MB - wer: 1.55% diff --git a/scripts/hf_cards/canary-qwen-2.5b.yaml b/scripts/hf_cards/canary-qwen-2.5b.yaml index d66fc243..4411a634 100644 --- a/scripts/hf_cards/canary-qwen-2.5b.yaml +++ b/scripts/hf_cards/canary-qwen-2.5b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/canary-qwen-2.5b-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/canary-qwen-2.5b -target_repo: handy-computer/canary-qwen-2.5b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-qwen-2.5b.md -upstream_commit: b1469e1bba1cfe140205529c79c434ca47180960 pin_date: 2026-05-15 validation: @@ -13,11 +10,7 @@ validation: commit: 6f6c699 date: 2026-05-16 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -40,25 +33,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 39.8 - cpu: 7.3 - ryzen-4750u: - vulkan: 4.1 - cpu: 2.1 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech `test-clean` split (2620 English utterances) with the Whisper-style English text normalizer and jiwer @@ -72,29 +47,3 @@ wer: precision (homophones, word-boundary flips, function-word substitutions). Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. - -quants: - - name: BF16 - filename: canary-qwen-2.5b-BF16.gguf - size: 4.73 GB - wer: 1.63% - - name: F16 - filename: canary-qwen-2.5b-F16.gguf - size: 4.73 GB - wer: 1.63% - - name: Q8_0 - filename: canary-qwen-2.5b-Q8_0.gguf - size: 2.61 GB - wer: 1.63% - - name: Q6_K - filename: canary-qwen-2.5b-Q6_K.gguf - size: 2.06 GB - wer: 1.63% - - name: Q5_K_M - filename: canary-qwen-2.5b-Q5_K_M.gguf - size: 1.85 GB - wer: 1.63% - - name: Q4_K_M - filename: canary-qwen-2.5b-Q4_K_M.gguf - size: 1.62 GB - wer: 1.63% diff --git a/scripts/hf_cards/check_release.py b/scripts/hf_cards/check_release.py new file mode 100644 index 00000000..0f925017 --- /dev/null +++ b/scripts/hf_cards/check_release.py @@ -0,0 +1,79 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# dependencies = ["pyyaml"] +# /// +"""Check the date and validation pin in an HF card before upload.""" +from __future__ import annotations + +import argparse +import datetime as dt +import pathlib +import re +import subprocess +import sys + +import yaml + +REPO = pathlib.Path(__file__).resolve().parents[2] +HEX_SHA = re.compile(r"^[0-9a-fA-F]{7,40}$") + + +def as_date(value, field: str) -> dt.date: + if isinstance(value, dt.date): + return value + try: + return dt.date.fromisoformat(str(value)) + except ValueError as exc: + raise ValueError(f"{field} must be an ISO date, got {value!r}") from exc + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("variant") + parser.add_argument("--date", default=dt.datetime.now(dt.timezone.utc).date().isoformat(), + help="UTC ship date expected in validation.date (default: today)") + args = parser.parse_args() + + expected_date = as_date(args.date, "--date") + path = REPO / "scripts" / "hf_cards" / f"{args.variant}.yaml" + if not path.exists(): + print(f"FAIL: no HF card spec at {path}", file=sys.stderr) + return 2 + spec = yaml.safe_load(path.read_text()) or {} + errors = [] + try: + pin_date = as_date(spec.get("pin_date"), "pin_date") + if pin_date > expected_date: + errors.append(f"pin_date {pin_date} is after ship date {expected_date}") + except ValueError as exc: + errors.append(str(exc)) + + validation = spec.get("validation") or {} + try: + validation_date = as_date(validation.get("date"), "validation.date") + if validation_date != expected_date: + errors.append( + f"validation.date is {validation_date}, expected ship date {expected_date}" + ) + except ValueError as exc: + errors.append(str(exc)) + commit = str(validation.get("commit") or "") + if not HEX_SHA.fullmatch(commit): + errors.append(f"validation.commit is not a commit SHA: {commit!r}") + elif subprocess.run( + ["git", "cat-file", "-e", f"{commit}^{{commit}}"], cwd=REPO, + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, + ).returncode != 0: + errors.append(f"validation.commit {commit} is not present in this checkout") + + if errors: + for error in errors: + print(f"FAIL {args.variant}: {error}", file=sys.stderr) + return 1 + print(f"OK {args.variant}: pin_date={pin_date}, validation={commit} on {expected_date}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/hf_cards/cohere-transcribe-03-2026.yaml b/scripts/hf_cards/cohere-transcribe-03-2026.yaml index c9f41060..edab89c3 100644 --- a/scripts/hf_cards/cohere-transcribe-03-2026.yaml +++ b/scripts/hf_cards/cohere-transcribe-03-2026.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/cohere-transcribe-03-2026-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: CohereLabs/cohere-transcribe-03-2026 -target_repo: handy-computer/cohere-transcribe-03-2026-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/cohere-transcribe-03-2026.md -upstream_commit: 76b8b23 pin_date: 2026-04-16 # Validation pin for the most recent upload. Updated on each release — @@ -15,24 +12,7 @@ validation: commit: bf0d0b7 date: 2026-04-18 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - de - - es - - it - - pt - - nl - - pl - - el - - ar - - ja - - zh - - vi - - ko tags: - gguf - transcribe.cpp @@ -52,25 +32,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 73 - cpu: 9 - ryzen-4750u: - vulkan: 8 - cpu: 3 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. BF16 reference baseline: 1.26%. diff --git a/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml b/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml index a0278e98..17f4c3cb 100644 --- a/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml +++ b/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/cohere-transcribe-arabic-07-2026-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: CohereLabs/cohere-transcribe-arabic-07-2026 -target_repo: handy-computer/cohere-transcribe-arabic-07-2026-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/cohere-transcribe-arabic-07-2026.md -upstream_commit: 0a8193c pin_date: 2026-07-07 # Validation pin for the most recent upload. Updated on each release — @@ -15,8 +12,6 @@ validation: commit: d89ecb7 date: 2026-07-07 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition languages: - ar @@ -42,24 +37,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend. Measured on -# cohere-transcribe-03-2026 (identical architecture and tensor shapes; -# only weight values differ), see docs/models. -perf: - m4-max: - metal: 73 - cpu: 9 - ryzen-4750u: - vulkan: 8 - cpu: 3 - wer: metadata_key: fleurs_ar_test source: FLEURS Arabic test @@ -71,29 +48,3 @@ wer: 11.02%, and every quant falls inside the reference's 95% confidence interval. FLEURS Arabic is Egyptian-dialect speech; upstream numbers published on other Arabic test sets are not directly comparable. - -quants: - - name: BF16 - filename: cohere-transcribe-arabic-07-2026-BF16.gguf - size: 4.10 GB - wer: 11.02% - - name: F16 - filename: cohere-transcribe-arabic-07-2026-F16.gguf - size: 4.11 GB - wer: 11.00% - - name: Q8_0 - filename: cohere-transcribe-arabic-07-2026-Q8_0.gguf - size: 2.41 GB - wer: 11.06% - - name: Q6_K - filename: cohere-transcribe-arabic-07-2026-Q6_K.gguf - size: 1.97 GB - wer: 11.07% - - name: Q5_K_M - filename: cohere-transcribe-arabic-07-2026-Q5_K_M.gguf - size: 1.77 GB - wer: 10.95% - - name: Q4_K_M - filename: cohere-transcribe-arabic-07-2026-Q4_K_M.gguf - size: 1.56 GB - wer: 11.18% diff --git a/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml b/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml index 61a9ab43..336c4193 100644 --- a/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml +++ b/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml @@ -4,11 +4,8 @@ # Diarizer family: metric is DER (not WER); pipeline_tag follows the # upstream NVIDIA card's diarization tagging rather than ASR. -hf_repo: nvidia/diar_streaming_sortformer_4spk-v2.1 -target_repo: handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/diar_streaming_sortformer_4spk-v2.1.md -upstream_commit: fafaab5 pin_date: 2026-07-19 # Validation pin for the most recent upload. Updated on each release — @@ -18,11 +15,7 @@ validation: commit: d42c3bb date: 2026-07-22 -license: other -license_display: NVIDIA Open Model License pipeline_tag: voice-activity-detection -languages: - - en tags: - gguf - transcribe.cpp @@ -51,15 +44,7 @@ capabilities: lang_detect: false timestamps: none # segment times are diarization output, not transcript timestamps -# Speedup-over-realtime (×RT) per rig/backend, hand-authored from the bench; -# published raw as rtf_ in the metadata block. -perf: - m4: - cpu: 51 - metal: 110 - wer: - source: AMI IHM test metadata_key: ami_ihm_test notes: | DER measured on the full AMI IHM test set (16 meetings, ~9 h) against @@ -70,17 +55,3 @@ wer: RTTM source and post-processing; compare like with like. Only near-reference tiers ship for this family (k-quant tiers withdrawn; see the transcribe.cpp family doc, "Quant policy (Stage 7)"). - -quants: - - name: F32 - filename: diar_streaming_sortformer_4spk-v2.1-F32.gguf - size: 471 MB - wer: 14.59% - - name: F16 - filename: diar_streaming_sortformer_4spk-v2.1-F16.gguf - size: 237 MB - wer: 14.23% - - name: Q8_0 - filename: diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf - size: 139 MB - wer: 14.73% diff --git a/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml b/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml index b124dff4..102ef5f4 100644 --- a/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml +++ b/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml @@ -1,12 +1,8 @@ # Spec for the HF README of handy-computer/Fun-ASR-MLT-Nano-2512-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: FunAudioLLM/Fun-ASR-MLT-Nano-2512 -target_repo: handy-computer/Fun-ASR-MLT-Nano-2512-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/fun-asr-mlt-nano-2512.md -# Pinned at intake (Stage 1). -upstream_commit: cf67a938bf2829959d08fdfb84e186eff02a67ff pin_date: 2026-05-06 # Validation pin for the most recent upload. Updated on each release — @@ -16,45 +12,7 @@ validation: commit: f094d28 date: 2026-05-06 -# Upstream license is "FunASR-Model-License-1.1" — not a standard SPDX id. -# The HF YAML field accepts a free-form `other` plus a license_name / -# license_link override on the upstream card; the renderer emits -# `license: other` and surfaces the human-facing form via `license_display`. -license: other -license_display: FunASR Model Open Source License Agreement v1.1 pipeline_tag: automatic-speech-recognition -languages: - - zh - - en - - yue - - ja - - ko - - vi - - id - - th - - ms - - tl - - ar - - hi - - bg - - hr - - cs - - da - - nl - - et - - fi - - el - - hu - - ga - - lv - - lt - - mt - - pl - - pt - - ro - - sk - - sl - - sv tags: - gguf - transcribe.cpp @@ -86,25 +44,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 68 - cpu: 16 - ryzen-4750u: - vulkan: 9 - cpu: 4.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy LLM decoding via the bundled Qwen3-0.6B head. The publisher @@ -116,29 +56,3 @@ wer: English only; the strength of the MLT variant is multilingual coverage, not English accuracy. For the other 30 languages, run your own representative manifest. - -quants: - - name: BF16 - filename: Fun-ASR-MLT-Nano-2512-BF16.gguf - size: 1590 MB - wer: 1.74% - - name: F16 - filename: Fun-ASR-MLT-Nano-2512-F16.gguf - size: 1590 MB - wer: 1.74% - - name: Q8_0 - filename: Fun-ASR-MLT-Nano-2512-Q8_0.gguf - size: 850 MB - wer: 1.74% - - name: Q6_K - filename: Fun-ASR-MLT-Nano-2512-Q6_K.gguf - size: 659 MB - wer: 1.69% - - name: Q5_K_M - filename: Fun-ASR-MLT-Nano-2512-Q5_K_M.gguf - size: 602 MB - wer: 1.77% - - name: Q4_K_M - filename: Fun-ASR-MLT-Nano-2512-Q4_K_M.gguf - size: 531 MB - wer: 1.89% diff --git a/scripts/hf_cards/fun-asr-nano-2512.yaml b/scripts/hf_cards/fun-asr-nano-2512.yaml index 7e512abd..08ea566c 100644 --- a/scripts/hf_cards/fun-asr-nano-2512.yaml +++ b/scripts/hf_cards/fun-asr-nano-2512.yaml @@ -1,12 +1,8 @@ # Spec for the HF README of handy-computer/Fun-ASR-Nano-2512-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: FunAudioLLM/Fun-ASR-Nano-2512 -target_repo: handy-computer/Fun-ASR-Nano-2512-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/fun-asr-nano-2512.md -# Pinned at intake (Stage 1). -upstream_commit: a7088d620f755dcdca575b63db184c3ad55b2865 pin_date: 2026-05-06 # Validation pin for the most recent upload. Updated on each release — @@ -16,17 +12,7 @@ validation: commit: f094d28 date: 2026-05-06 -# Upstream license is "FunASR-Model-License-1.1" — not a standard SPDX id. -# The HF YAML field accepts a free-form `other` plus a license_name / -# license_link override on the upstream card; the renderer emits -# `license: other` and surfaces the human-facing form via `license_display`. -license: other -license_display: FunASR Model Open Source License Agreement v1.1 pipeline_tag: automatic-speech-recognition -languages: - - zh - - en - - ja tags: - gguf - transcribe.cpp @@ -52,25 +38,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 77.5 - cpu: 27 - ryzen-4750u: - vulkan: 10.5 - cpu: 6.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy LLM decoding via the bundled Qwen3-0.6B head. Publisher @@ -81,29 +49,3 @@ wer: -0.01 percentage-points. LibriSpeech is an English-only benchmark; Chinese (AISHELL-1, WenetSpeech) and Japanese (CommonVoice JA) are the recommended complementary checks. - -quants: - - name: BF16 - filename: Fun-ASR-Nano-2512-BF16.gguf - size: 1590 MB - wer: 1.78% - - name: F16 - filename: Fun-ASR-Nano-2512-F16.gguf - size: 1590 MB - wer: 1.79% - - name: Q8_0 - filename: Fun-ASR-Nano-2512-Q8_0.gguf - size: 850 MB - wer: 1.79% - - name: Q6_K - filename: Fun-ASR-Nano-2512-Q6_K.gguf - size: 659 MB - wer: 1.78% - - name: Q5_K_M - filename: Fun-ASR-Nano-2512-Q5_K_M.gguf - size: 602 MB - wer: 1.82% - - name: Q4_K_M - filename: Fun-ASR-Nano-2512-Q4_K_M.gguf - size: 531 MB - wer: 1.92% diff --git a/scripts/hf_cards/generate.py b/scripts/hf_cards/generate.py index 5a027fc0..5e00ec33 100755 --- a/scripts/hf_cards/generate.py +++ b/scripts/hf_cards/generate.py @@ -9,8 +9,17 @@ # /// """Generate the HuggingFace README.md for a transcribe.cpp GGUF repo. -Reads a YAML spec (see parakeet-tdt-0.6b-v2.yaml for an example), fetches the -upstream model card at the pinned commit, and renders template.md.j2. +The spec is assembled from two sources. Everything measurable -- the upstream +and published repos, the pinned commit, licence, languages, the quant table +with its file sizes and headline error rates, the capability flags and the +per-rig speedups -- is DERIVED from the variant's catalog/.json +record. The YAML alongside this script carries only what a human writes: the +summary, tags, pipeline tag, validation pin, and prose notes. A key present in +the YAML still wins, so a card can narrow a derived value deliberately +(Breeze-ASR-25 advertises 2 of the 99 languages its tokenizer inherits). + +Fetches the upstream model card at the pinned commit and renders +template.md.j2. Default output is models//README.md alongside the GGUFs, so `hf upload models/ .` picks it up in the same call. @@ -34,10 +43,18 @@ HERE = Path(__file__).parent REPO_ROOT = HERE.parent.parent +sys.path.insert(0, str(REPO_ROOT / "scripts" / "catalog")) +import cards # noqa: E402 def load_spec(path: Path) -> dict: - with path.open() as f: - return yaml.safe_load(f) + """The editorial YAML merged onto everything derived from the catalog.""" + editorial = yaml.safe_load(path.read_text()) or {} + record = cards.common.load_record(editorial.get("variant", path.stem)) + spec = cards.merge(cards.derive_spec(record, editorial), editorial) + spec["quants"] = cards.merge_quants(spec["quants"], editorial.get("quant_overrides", {})) + for key in ("variant", "size", "quant_overrides"): + spec.pop(key, None) + return spec def build_transcribe_cpp_block(spec: dict) -> str: @@ -54,9 +71,12 @@ def build_transcribe_cpp_block(spec: dict) -> str: dataset_key = wer.get("metadata_key", "librispeech_test_clean") block: dict = {} # Headline dataset: per-quant WER taken from the `quants:` column. - block[f"wer_{dataset_key}"] = { - q["name"].lower(): float(str(q["wer"]).rstrip("%")) for q in spec["quants"] + headline = { + q["name"].lower(): float(str(q["wer"]).rstrip("%")) + for q in spec["quants"] if q.get("wer") is not None } + if headline: + block[f"wer_{dataset_key}"] = headline # Any additional per-quant WER maps listed inline under `wer:` (keyed by # dataset name, e.g. `librispeech_test_clean:`) are emitted as their own # `wer_` blocks. Only dict values count as datasets; scalar keys diff --git a/scripts/hf_cards/gigaam-v3-ctc.yaml b/scripts/hf_cards/gigaam-v3-ctc.yaml index 178cbd00..71dbfe59 100644 --- a/scripts/hf_cards/gigaam-v3-ctc.yaml +++ b/scripts/hf_cards/gigaam-v3-ctc.yaml @@ -1,13 +1,8 @@ # Spec for the HF README of handy-computer/gigaam-v3-ctc-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: ai-sage/GigaAM-v3 -target_repo: handy-computer/gigaam-v3-ctc-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/gigaam-v3-ctc.md -# Upstream branch: ctc. Each gigaam-v3 variant lives on its own -# HF branch; the SHA below pins this variant's branch revision. -upstream_commit: 15ef3b5 pin_date: 2026-05-12 # Upstream README lives only on the main branch (per-variant branches # ship empty README stubs); fetch the family card from main. @@ -20,11 +15,7 @@ validation: commit: 42b96d9 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ru tags: - gguf - transcribe.cpp @@ -40,51 +31,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 146 - cpu: 29 - ryzen-4750u: - vulkan: 33 - cpu: 9 - wer: metadata_key: fleurs_ru - source: FLEURS ru notes: | WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 8.42%. Upstream `gigaam` author package measured on the same manifest: 9.81%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. - -quants: - - name: F32 - filename: gigaam-v3-ctc-F32.gguf - size: 842 MB - wer: 8.42% - - name: F16 - filename: gigaam-v3-ctc-F16.gguf - size: 428 MB - wer: 8.42% - - name: Q8_0 - filename: gigaam-v3-ctc-Q8_0.gguf - size: 259 MB - wer: 8.40% - - name: Q6_K - filename: gigaam-v3-ctc-Q6_K.gguf - size: 216 MB - wer: 8.38% - - name: Q5_K_M - filename: gigaam-v3-ctc-Q5_K_M.gguf - size: 195 MB - wer: 8.29% - - name: Q4_K_M - filename: gigaam-v3-ctc-Q4_K_M.gguf - size: 174 MB - wer: 8.42% diff --git a/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml b/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml index 0e4d9d0c..543cb66e 100644 --- a/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml +++ b/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml @@ -1,13 +1,8 @@ # Spec for the HF README of handy-computer/gigaam-v3-e2e-ctc-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: ai-sage/GigaAM-v3 -target_repo: handy-computer/gigaam-v3-e2e-ctc-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/gigaam-v3-e2e-ctc.md -# Upstream branch: e2e_ctc. Each gigaam-v3 variant lives on its own -# HF branch; the SHA below pins this variant's branch revision. -upstream_commit: cec030b pin_date: 2026-05-12 # Upstream README lives only on the main branch (per-variant branches # ship empty README stubs); fetch the family card from main. @@ -20,11 +15,7 @@ validation: commit: 42b96d9 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ru tags: - gguf - transcribe.cpp @@ -40,26 +31,8 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 112 - cpu: 27 - ryzen-4750u: - vulkan: 30 - cpu: 9 - wer: metadata_key: fleurs_ru - source: FLEURS ru notes: | WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 5.50%. Upstream `gigaam` author package measured on the same manifest: 6.93%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. diff --git a/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml b/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml index 63d5dafc..24cc8b9f 100644 --- a/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml +++ b/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml @@ -1,13 +1,8 @@ # Spec for the HF README of handy-computer/gigaam-v3-e2e-rnnt-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: ai-sage/GigaAM-v3 -target_repo: handy-computer/gigaam-v3-e2e-rnnt-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/gigaam-v3-e2e-rnnt.md -# Upstream branch: main (= v3_e2e_rnnt). Each gigaam-v3 variant lives on its own -# HF branch; the SHA below pins this variant's branch revision. -upstream_commit: ec1dc1f pin_date: 2026-05-12 # Upstream README lives only on the main branch; this variant IS main, so # upstream_card_commit matches upstream_commit. Made explicit for symmetry @@ -21,11 +16,7 @@ validation: commit: 42b96d9 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ru tags: - gguf - transcribe.cpp @@ -41,51 +32,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 88 - cpu: 25 - ryzen-4750u: - vulkan: 22 - cpu: 8 - wer: metadata_key: fleurs_ru - source: FLEURS ru notes: | WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 5.35%. Upstream `gigaam` author package measured on the same manifest: 6.78%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. - -quants: - - name: F32 - filename: gigaam-v3-e2e-rnnt-F32.gguf - size: 849 MB - wer: 5.35% - - name: F16 - filename: gigaam-v3-e2e-rnnt-F16.gguf - size: 431 MB - wer: 5.35% - - name: Q8_0 - filename: gigaam-v3-e2e-rnnt-Q8_0.gguf - size: 261 MB - wer: 5.36% - - name: Q6_K - filename: gigaam-v3-e2e-rnnt-Q6_K.gguf - size: 217 MB - wer: 5.37% - - name: Q5_K_M - filename: gigaam-v3-e2e-rnnt-Q5_K_M.gguf - size: 197 MB - wer: 5.42% - - name: Q4_K_M - filename: gigaam-v3-e2e-rnnt-Q4_K_M.gguf - size: 175 MB - wer: 5.36% diff --git a/scripts/hf_cards/gigaam-v3-rnnt.yaml b/scripts/hf_cards/gigaam-v3-rnnt.yaml index 0adca61d..c95f4667 100644 --- a/scripts/hf_cards/gigaam-v3-rnnt.yaml +++ b/scripts/hf_cards/gigaam-v3-rnnt.yaml @@ -1,13 +1,8 @@ # Spec for the HF README of handy-computer/gigaam-v3-rnnt-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: ai-sage/GigaAM-v3 -target_repo: handy-computer/gigaam-v3-rnnt-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/gigaam-v3-rnnt.md -# Upstream branch: rnnt. Each gigaam-v3 variant lives on its own -# HF branch; the SHA below pins this variant's branch revision. -upstream_commit: c7f128b pin_date: 2026-05-12 # Upstream README lives only on the main branch (per-variant branches # ship empty README stubs); fetch the family card from main. @@ -20,11 +15,7 @@ validation: commit: 42b96d9 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ru tags: - gguf - transcribe.cpp @@ -40,51 +31,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 110 - cpu: 27 - ryzen-4750u: - vulkan: 25 - cpu: 9 - wer: metadata_key: fleurs_ru - source: FLEURS ru notes: | WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 8.08%. Upstream `gigaam` author package measured on the same manifest: 9.46%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. - -quants: - - name: F32 - filename: gigaam-v3-rnnt-F32.gguf - size: 846 MB - wer: 8.08% - - name: F16 - filename: gigaam-v3-rnnt-F16.gguf - size: 430 MB - wer: 8.08% - - name: Q8_0 - filename: gigaam-v3-rnnt-Q8_0.gguf - size: 260 MB - wer: 8.08% - - name: Q6_K - filename: gigaam-v3-rnnt-Q6_K.gguf - size: 217 MB - wer: 8.07% - - name: Q5_K_M - filename: gigaam-v3-rnnt-Q5_K_M.gguf - size: 196 MB - wer: 8.12% - - name: Q4_K_M - filename: gigaam-v3-rnnt-Q4_K_M.gguf - size: 175 MB - wer: 8.12% diff --git a/scripts/hf_cards/granite-4.0-1b-speech.yaml b/scripts/hf_cards/granite-4.0-1b-speech.yaml index 24b3ac96..5d9c7124 100644 --- a/scripts/hf_cards/granite-4.0-1b-speech.yaml +++ b/scripts/hf_cards/granite-4.0-1b-speech.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/granite-4.0-1b-speech-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: ibm-granite/granite-4.0-1b-speech -target_repo: handy-computer/granite-4.0-1b-speech-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-4.0-1b-speech.md -upstream_commit: bd87ab8 pin_date: 2026-05-17 validation: @@ -13,16 +10,7 @@ validation: commit: 275332d date: 2026-05-17 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - de - - es - - pt - - ja tags: - gguf - transcribe.cpp @@ -45,57 +33,10 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 36.5 - cpu: 6 - m4: - metal: 11 - cpu: 5 - ryzen-4750u: - vulkan: 2.95 - cpu: 1.6 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding. BF16 reference baseline (re-run locally with the model card's exact prompt): 1.42% — matches the upstream Open ASR Leaderboard number exactly. Text normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. - -quants: - - name: BF16 - filename: granite-4.0-1b-speech-BF16.gguf - size: 4.63 GB - wer: 1.42% - - name: F16 - filename: granite-4.0-1b-speech-F16.gguf - size: 4.63 GB - wer: 1.42% - - name: Q8_0 - filename: granite-4.0-1b-speech-Q8_0.gguf - size: 2.56 GB - wer: 1.44% - - name: Q6_K - filename: granite-4.0-1b-speech-Q6_K.gguf - size: 2.02 GB - wer: 1.41% - - name: Q5_K_M - filename: granite-4.0-1b-speech-Q5_K_M.gguf - size: 1.83 GB - wer: 1.42% - - name: Q4_K_M - filename: granite-4.0-1b-speech-Q4_K_M.gguf - size: 1.60 GB - wer: 1.48% diff --git a/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml b/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml index d624036f..36dafaf6 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/granite-speech-4.1-2b-nar-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: ibm-granite/granite-speech-4.1-2b-nar -target_repo: handy-computer/granite-speech-4.1-2b-nar-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-speech-4.1-2b-nar.md -upstream_commit: 99a4df9 pin_date: 2026-05-24 validation: @@ -13,15 +10,7 @@ validation: commit: c53af2c date: 2026-05-24 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - de - - es - - pt tags: - gguf - transcribe.cpp @@ -46,28 +35,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 56 - cpu: 5 - m4: - metal: 18 - cpu: 4 - ryzen-4750u: - vulkan: 3.65 - cpu: 1.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances). BF16 reference baseline (transformers `model.transcribe`, MPS, re-run @@ -81,29 +49,3 @@ wer: NAR LM uses `create_bidirectional_mask()` natively. F16, Q8_0, and Q6_K all match BF16's 1.29%; Q5_K_M dips slightly to 1.25% (within overlapping CIs). - -quants: - - name: BF16 - filename: granite-speech-4.1-2b-nar-BF16.gguf - size: 4.20 GB - wer: 1.29% - - name: F16 - filename: granite-speech-4.1-2b-nar-F16.gguf - size: 4.21 GB - wer: 1.29% - - name: Q8_0 - filename: granite-speech-4.1-2b-nar-Q8_0.gguf - size: 2.33 GB - wer: 1.29% - - name: Q6_K - filename: granite-speech-4.1-2b-nar-Q6_K.gguf - size: 1.84 GB - wer: 1.29% - - name: Q5_K_M - filename: granite-speech-4.1-2b-nar-Q5_K_M.gguf - size: 1.66 GB - wer: 1.25% - - name: Q4_K_M - filename: granite-speech-4.1-2b-nar-Q4_K_M.gguf - size: 1.45 GB - wer: 1.35% diff --git a/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml b/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml index e37d0d03..4f0de61d 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/granite-speech-4.1-2b-plus-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: ibm-granite/granite-speech-4.1-2b-plus -target_repo: handy-computer/granite-speech-4.1-2b-plus-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-speech-4.1-2b-plus.md -upstream_commit: edd3bf5 pin_date: 2026-05-17 validation: @@ -13,15 +10,7 @@ validation: commit: 275332d date: 2026-05-17 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - de - - es - - pt tags: - gguf - transcribe.cpp @@ -60,21 +49,7 @@ capabilities: lang_detect: false timestamps: word # none | segment | word | token -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 33 - cpu: 5.2 - m4: - metal: 11 - cpu: 5 - ryzen-4750u: - vulkan: 2.75 - cpu: 1.4 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and the model-card chat template (system prompt + @@ -87,29 +62,3 @@ wer: without it the model emits 25-27 empty hypotheses on short test-clean clips and WER blows up to ~26%. The transcribe.cpp runtime hard-codes the prompt correctly; this note only matters if you reproduce the reference. - -quants: - - name: BF16 - filename: granite-speech-4.1-2b-plus-BF16.gguf - size: 4.23 GB - wer: 1.49% - - name: F16 - filename: granite-speech-4.1-2b-plus-F16.gguf - size: 4.23 GB - wer: 1.48% - - name: Q8_0 - filename: granite-speech-4.1-2b-plus-Q8_0.gguf - size: 2.35 GB - wer: 1.50% - - name: Q6_K - filename: granite-speech-4.1-2b-plus-Q6_K.gguf - size: 1.86 GB - wer: 1.46% - - name: Q5_K_M - filename: granite-speech-4.1-2b-plus-Q5_K_M.gguf - size: 1.69 GB - wer: 1.48% - - name: Q4_K_M - filename: granite-speech-4.1-2b-plus-Q4_K_M.gguf - size: 1.49 GB - wer: 1.56% diff --git a/scripts/hf_cards/granite-speech-4.1-2b.yaml b/scripts/hf_cards/granite-speech-4.1-2b.yaml index 94ce2399..eb1ccb61 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/granite-speech-4.1-2b-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: ibm-granite/granite-speech-4.1-2b -target_repo: handy-computer/granite-speech-4.1-2b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-speech-4.1-2b.md -upstream_commit: 8f4bb5f pin_date: 2026-05-17 validation: @@ -13,16 +10,7 @@ validation: commit: 275332d date: 2026-05-17 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - de - - es - - pt - - ja tags: - gguf - transcribe.cpp @@ -46,28 +34,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 33 - cpu: 5.8 - m4: - metal: 12 - cpu: 4 - ryzen-4750u: - vulkan: 2.80 - cpu: 1.4 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding. BF16 reference baseline (re-run locally with the @@ -75,29 +42,3 @@ wer: 1.33%, likely a minor normalization difference on the publisher side and well within bootstrap CI overlap. Text normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. - -quants: - - name: BF16 - filename: granite-speech-4.1-2b-BF16.gguf - size: 4.63 GB - wer: 1.31% - - name: F16 - filename: granite-speech-4.1-2b-F16.gguf - size: 4.63 GB - wer: 1.32% - - name: Q8_0 - filename: granite-speech-4.1-2b-Q8_0.gguf - size: 2.56 GB - wer: 1.32% - - name: Q6_K - filename: granite-speech-4.1-2b-Q6_K.gguf - size: 2.02 GB - wer: 1.29% - - name: Q5_K_M - filename: granite-speech-4.1-2b-Q5_K_M.gguf - size: 1.83 GB - wer: 1.33% - - name: Q4_K_M - filename: granite-speech-4.1-2b-Q4_K_M.gguf - size: 1.60 GB - wer: 1.37% diff --git a/scripts/hf_cards/medasr.yaml b/scripts/hf_cards/medasr.yaml index 4aad6245..8b6ba787 100644 --- a/scripts/hf_cards/medasr.yaml +++ b/scripts/hf_cards/medasr.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/medasr-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: google/medasr -target_repo: handy-computer/medasr-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/medasr.md -upstream_commit: ae1e484 pin_date: 2026-06-04 # Validation pin for the most recent upload. Updated on each release; @@ -15,11 +12,7 @@ validation: commit: 782abfd date: 2026-06-04 -license: other -license_display: Health AI Developer Foundations pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -36,50 +29,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 354.5 - cpu: 65.5 - ryzen-4750u: - vulkan: 71 - cpu: 19.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2,620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline (HuggingFace transformers, Mac MPS): 17.88%; transcribe.cpp F32 matches exactly. Absolute WER is higher than general-purpose ASR (e.g. Whisper-base ~5%) because the model is fine-tuned for medical dictation — on the publisher's internal RAD-DICT / GENERAL-DICT / FM-DICT datasets the model scores 6.6%–9.3%, but those datasets are not publicly reproducible. Q8_0 is the recommended default (smallest preset with no statistically detectable WER degradation); Q4_K_M shows a real +0.26 pp degradation and is shipped for completeness but not recommended — prefer Q5_K_M if you need smaller than Q8_0. - -quants: - - name: F32 - filename: medasr-F32.gguf - size: 417 MB - wer: 17.88% - - name: F16 - filename: medasr-F16.gguf - size: 202 MB - wer: 17.88% - - name: Q8_0 - filename: medasr-Q8_0.gguf - size: 122 MB - wer: 17.86% - - name: Q6_K - filename: medasr-Q6_K.gguf - size: 101 MB - wer: 17.93% - - name: Q5_K_M - filename: medasr-Q5_K_M.gguf - size: 90 MB - wer: 17.91% - - name: Q4_K_M - filename: medasr-Q4_K_M.gguf - size: 79 MB - wer: 18.14% diff --git a/scripts/hf_cards/moonshine-base-ar.yaml b/scripts/hf_cards/moonshine-base-ar.yaml index bf3996d8..c44c9b4c 100644 --- a/scripts/hf_cards/moonshine-base-ar.yaml +++ b/scripts/hf_cards/moonshine-base-ar.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-ar-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-base-ar -target_repo: handy-computer/moonshine-base-ar-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 264cc18 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ar tags: - gguf - transcribe.cpp @@ -37,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-base (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 79.5 - cpu: 80.5 - ryzen-4750u: - vulkan: 34.5 - cpu: 22 wer: metadata_key: fleurs_ar @@ -68,17 +45,3 @@ wer: same manifest: **24.51% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-base-ar-F32.gguf - size: 236 MB - wer: 24.45% - - name: F16 - filename: moonshine-base-ar-F16.gguf - size: 126 MB - wer: 24.45% - - name: Q8_0 - filename: moonshine-base-ar-Q8_0.gguf - size: 74 MB - wer: 24.50% diff --git a/scripts/hf_cards/moonshine-base-ja.yaml b/scripts/hf_cards/moonshine-base-ja.yaml index 6c00dd76..30249aa8 100644 --- a/scripts/hf_cards/moonshine-base-ja.yaml +++ b/scripts/hf_cards/moonshine-base-ja.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-ja-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-base-ja -target_repo: handy-computer/moonshine-base-ja-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: f9d4e6a pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ja tags: - gguf - transcribe.cpp @@ -37,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 metric: CER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-base (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 79.5 - cpu: 80.5 - ryzen-4750u: - vulkan: 34.5 - cpu: 22 wer: metadata_key: fleurs_ja @@ -68,17 +45,3 @@ wer: same manifest: **10.69% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-base-ja-F32.gguf - size: 236 MB - wer: 10.84% - - name: F16 - filename: moonshine-base-ja-F16.gguf - size: 126 MB - wer: 10.81% - - name: Q8_0 - filename: moonshine-base-ja-Q8_0.gguf - size: 74 MB - wer: 10.53% diff --git a/scripts/hf_cards/moonshine-base-ko.yaml b/scripts/hf_cards/moonshine-base-ko.yaml index e6145987..277321a4 100644 --- a/scripts/hf_cards/moonshine-base-ko.yaml +++ b/scripts/hf_cards/moonshine-base-ko.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-ko-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-base-ko -target_repo: handy-computer/moonshine-base-ko-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: fff6035 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ko tags: - gguf - transcribe.cpp @@ -37,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 metric: CER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-base (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 79.5 - cpu: 80.5 - ryzen-4750u: - vulkan: 34.5 - cpu: 22 wer: metadata_key: fleurs_ko @@ -68,17 +45,3 @@ wer: same manifest: **8.19% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-base-ko-F32.gguf - size: 236 MB - wer: 8.00% - - name: F16 - filename: moonshine-base-ko-F16.gguf - size: 126 MB - wer: 8.00% - - name: Q8_0 - filename: moonshine-base-ko-Q8_0.gguf - size: 74 MB - wer: 8.13% diff --git a/scripts/hf_cards/moonshine-base-uk.yaml b/scripts/hf_cards/moonshine-base-uk.yaml index c4041fbe..8b2da438 100644 --- a/scripts/hf_cards/moonshine-base-uk.yaml +++ b/scripts/hf_cards/moonshine-base-uk.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-uk-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-base-uk -target_repo: handy-computer/moonshine-base-uk-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: a52b2e9 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - uk tags: - gguf - transcribe.cpp @@ -37,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-base (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 79.5 - cpu: 80.5 - ryzen-4750u: - vulkan: 34.5 - cpu: 22 wer: metadata_key: fleurs_uk @@ -68,17 +45,3 @@ wer: same manifest: **14.51% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-base-uk-F32.gguf - size: 236 MB - wer: 14.49% - - name: F16 - filename: moonshine-base-uk-F16.gguf - size: 126 MB - wer: 14.49% - - name: Q8_0 - filename: moonshine-base-uk-Q8_0.gguf - size: 74 MB - wer: 14.39% diff --git a/scripts/hf_cards/moonshine-base-vi.yaml b/scripts/hf_cards/moonshine-base-vi.yaml index 2b78e809..b775b878 100644 --- a/scripts/hf_cards/moonshine-base-vi.yaml +++ b/scripts/hf_cards/moonshine-base-vi.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-vi-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-base-vi -target_repo: handy-computer/moonshine-base-vi-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 0ee9ce9 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - vi tags: - gguf - transcribe.cpp @@ -37,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-base (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 79.5 - cpu: 80.5 - ryzen-4750u: - vulkan: 34.5 - cpu: 22 wer: metadata_key: fleurs_vi @@ -68,17 +45,3 @@ wer: same manifest: **9.66% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-base-vi-F32.gguf - size: 236 MB - wer: 9.67% - - name: F16 - filename: moonshine-base-vi-F16.gguf - size: 126 MB - wer: 9.66% - - name: Q8_0 - filename: moonshine-base-vi-Q8_0.gguf - size: 74 MB - wer: 9.79% diff --git a/scripts/hf_cards/moonshine-base-zh.yaml b/scripts/hf_cards/moonshine-base-zh.yaml index 537e289d..e706b0ae 100644 --- a/scripts/hf_cards/moonshine-base-zh.yaml +++ b/scripts/hf_cards/moonshine-base-zh.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-zh-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-base-zh -target_repo: handy-computer/moonshine-base-zh-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 1df4f95 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - zh tags: - gguf - transcribe.cpp @@ -37,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 metric: CER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-base (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 79.5 - cpu: 80.5 - ryzen-4750u: - vulkan: 34.5 - cpu: 22 wer: metadata_key: fleurs_zh @@ -68,17 +45,3 @@ wer: same manifest: **16.61% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-base-zh-F32.gguf - size: 236 MB - wer: 16.65% - - name: F16 - filename: moonshine-base-zh-F16.gguf - size: 126 MB - wer: 16.65% - - name: Q8_0 - filename: moonshine-base-zh-Q8_0.gguf - size: 74 MB - wer: 17.00% diff --git a/scripts/hf_cards/moonshine-base.yaml b/scripts/hf_cards/moonshine-base.yaml index d2a57521..ba95d3df 100644 --- a/scripts/hf_cards/moonshine-base.yaml +++ b/scripts/hf_cards/moonshine-base.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-base -target_repo: handy-computer/moonshine-base-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-base.md -upstream_commit: 7a73d8d pin_date: 2026-05-05 validation: @@ -13,11 +10,7 @@ validation: commit: 07a8a84 date: 2026-05-05 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -37,25 +30,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 79.5 - cpu: 80.5 - ryzen-4750u: - vulkan: 34.5 - cpu: 22 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, num_beams=1, @@ -65,17 +40,3 @@ wer: to upstream within rounding and well within the ±1.00 pp Stage 7 acceptance gate. Q8_0 lands at 3.26%, slightly under F32 — that delta sits inside the 95% bootstrap CI and is noise, not a real improvement. - -quants: - - name: F32 - filename: moonshine-base-F32.gguf - size: 236 MB - wer: 3.28% - - name: F16 - filename: moonshine-base-F16.gguf - size: 126 MB - wer: 3.28% - - name: Q8_0 - filename: moonshine-base-Q8_0.gguf - size: 74 MB - wer: 3.26% diff --git a/scripts/hf_cards/moonshine-streaming-medium.yaml b/scripts/hf_cards/moonshine-streaming-medium.yaml index 59bc161a..3dcc869e 100644 --- a/scripts/hf_cards/moonshine-streaming-medium.yaml +++ b/scripts/hf_cards/moonshine-streaming-medium.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-streaming-medium-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-streaming-medium -target_repo: handy-computer/moonshine-streaming-medium-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-streaming-medium.md -upstream_commit: 57b8436 pin_date: 2026-05-06 validation: @@ -13,11 +10,7 @@ validation: commit: 0d312ce date: 2026-05-06 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -39,25 +32,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 63 - cpu: 35.5 - ryzen-4750u: - vulkan: 14 - cpu: 7.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference @@ -69,17 +44,3 @@ wer: found to be at 99.6% identical hypotheses to our port), and is not a numerical drift. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. - -quants: - - name: F32 - filename: moonshine-streaming-medium-F32.gguf - size: 1015 MB - wer: 2.16% - - name: F16 - filename: moonshine-streaming-medium-F16.gguf - size: 509 MB - wer: 2.16% - - name: Q8_0 - filename: moonshine-streaming-medium-Q8_0.gguf - size: 282 MB - wer: 2.16% diff --git a/scripts/hf_cards/moonshine-streaming-small.yaml b/scripts/hf_cards/moonshine-streaming-small.yaml index a8557d40..fdbd0bd5 100644 --- a/scripts/hf_cards/moonshine-streaming-small.yaml +++ b/scripts/hf_cards/moonshine-streaming-small.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-streaming-small-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-streaming-small -target_repo: handy-computer/moonshine-streaming-small-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-streaming-small.md -upstream_commit: 2c03650 pin_date: 2026-05-06 validation: @@ -13,11 +10,7 @@ validation: commit: 0d312ce date: 2026-05-06 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -38,25 +31,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 96 - cpu: 57 - ryzen-4750u: - vulkan: 23.5 - cpu: 12 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference @@ -67,17 +42,3 @@ wer: the same manifest, 99.6% identical hypotheses to our F32) and confirmed it is not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. - -quants: - - name: F32 - filename: moonshine-streaming-small-F32.gguf - size: 536 MB - wer: 2.53% - - name: F16 - filename: moonshine-streaming-small-F16.gguf - size: 269 MB - wer: 2.53% - - name: Q8_0 - filename: moonshine-streaming-small-Q8_0.gguf - size: 189 MB - wer: 2.54% diff --git a/scripts/hf_cards/moonshine-streaming-tiny.yaml b/scripts/hf_cards/moonshine-streaming-tiny.yaml index d92e2581..37acda3e 100644 --- a/scripts/hf_cards/moonshine-streaming-tiny.yaml +++ b/scripts/hf_cards/moonshine-streaming-tiny.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-streaming-tiny-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-streaming-tiny -target_repo: handy-computer/moonshine-streaming-tiny-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-streaming-tiny.md -upstream_commit: f8e9dfd pin_date: 2026-05-06 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 0d312ce date: 2026-05-06 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -39,25 +32,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 159 - cpu: 211 - ryzen-4750u: - vulkan: 59.5 - cpu: 54.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference @@ -68,17 +43,3 @@ wer: table; the +0.04pp residual is a scoring / text-normalization difference vs that methodology, not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. - -quants: - - name: F32 - filename: moonshine-streaming-tiny-F32.gguf - size: 169 MB - wer: 4.53% - - name: F16 - filename: moonshine-streaming-tiny-F16.gguf - size: 85 MB - wer: 4.53% - - name: Q8_0 - filename: moonshine-streaming-tiny-Q8_0.gguf - size: 48 MB - wer: 4.52% diff --git a/scripts/hf_cards/moonshine-tiny-ar.yaml b/scripts/hf_cards/moonshine-tiny-ar.yaml index 55ddc3e4..97e2504a 100644 --- a/scripts/hf_cards/moonshine-tiny-ar.yaml +++ b/scripts/hf_cards/moonshine-tiny-ar.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-ar-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-tiny-ar -target_repo: handy-computer/moonshine-tiny-ar-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 99e7fee pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ar tags: - gguf - transcribe.cpp @@ -37,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-tiny (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 127 - cpu: 153.5 - ryzen-4750u: - vulkan: 56 - cpu: 45.5 wer: metadata_key: fleurs_ar @@ -68,17 +45,3 @@ wer: same manifest: **27.13% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-tiny-ar-F32.gguf - size: 105 MB - wer: 27.11% - - name: F16 - filename: moonshine-tiny-ar-F16.gguf - size: 57 MB - wer: 27.11% - - name: Q8_0 - filename: moonshine-tiny-ar-Q8_0.gguf - size: 34 MB - wer: 26.79% diff --git a/scripts/hf_cards/moonshine-tiny-ja.yaml b/scripts/hf_cards/moonshine-tiny-ja.yaml index 2c206aaf..b19f1613 100644 --- a/scripts/hf_cards/moonshine-tiny-ja.yaml +++ b/scripts/hf_cards/moonshine-tiny-ja.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-ja-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-tiny-ja -target_repo: handy-computer/moonshine-tiny-ja-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 02ca41b pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ja tags: - gguf - transcribe.cpp @@ -37,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 metric: CER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-tiny (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 127 - cpu: 153.5 - ryzen-4750u: - vulkan: 56 - cpu: 45.5 wer: metadata_key: fleurs_ja @@ -68,17 +45,3 @@ wer: same manifest: **13.23% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-tiny-ja-F32.gguf - size: 105 MB - wer: 13.20% - - name: F16 - filename: moonshine-tiny-ja-F16.gguf - size: 57 MB - wer: 13.20% - - name: Q8_0 - filename: moonshine-tiny-ja-Q8_0.gguf - size: 34 MB - wer: 13.36% diff --git a/scripts/hf_cards/moonshine-tiny-ko.yaml b/scripts/hf_cards/moonshine-tiny-ko.yaml index 23ffcff2..b400a73f 100644 --- a/scripts/hf_cards/moonshine-tiny-ko.yaml +++ b/scripts/hf_cards/moonshine-tiny-ko.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-ko-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-tiny-ko -target_repo: handy-computer/moonshine-tiny-ko-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 80995f0 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ko tags: - gguf - transcribe.cpp @@ -37,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 metric: CER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-tiny (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 127 - cpu: 153.5 - ryzen-4750u: - vulkan: 56 - cpu: 45.5 wer: metadata_key: fleurs_ko @@ -68,17 +45,3 @@ wer: same manifest: **8.99% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-tiny-ko-F32.gguf - size: 105 MB - wer: 8.97% - - name: F16 - filename: moonshine-tiny-ko-F16.gguf - size: 57 MB - wer: 8.97% - - name: Q8_0 - filename: moonshine-tiny-ko-Q8_0.gguf - size: 34 MB - wer: 8.98% diff --git a/scripts/hf_cards/moonshine-tiny-uk.yaml b/scripts/hf_cards/moonshine-tiny-uk.yaml index 8a5f0620..066febd8 100644 --- a/scripts/hf_cards/moonshine-tiny-uk.yaml +++ b/scripts/hf_cards/moonshine-tiny-uk.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-uk-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-tiny-uk -target_repo: handy-computer/moonshine-tiny-uk-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 8cf70f4 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - uk tags: - gguf - transcribe.cpp @@ -37,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-tiny (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 127 - cpu: 153.5 - ryzen-4750u: - vulkan: 56 - cpu: 45.5 wer: metadata_key: fleurs_uk @@ -68,17 +45,3 @@ wer: same manifest: **18.86% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-tiny-uk-F32.gguf - size: 105 MB - wer: 18.83% - - name: F16 - filename: moonshine-tiny-uk-F16.gguf - size: 57 MB - wer: 18.82% - - name: Q8_0 - filename: moonshine-tiny-uk-Q8_0.gguf - size: 34 MB - wer: 18.89% diff --git a/scripts/hf_cards/moonshine-tiny-vi.yaml b/scripts/hf_cards/moonshine-tiny-vi.yaml index b6356db9..1770a5ca 100644 --- a/scripts/hf_cards/moonshine-tiny-vi.yaml +++ b/scripts/hf_cards/moonshine-tiny-vi.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-vi-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-tiny-vi -target_repo: handy-computer/moonshine-tiny-vi-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: d4d20da pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - vi tags: - gguf - transcribe.cpp @@ -37,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-tiny (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 127 - cpu: 153.5 - ryzen-4750u: - vulkan: 56 - cpu: 45.5 wer: metadata_key: fleurs_vi @@ -68,17 +45,3 @@ wer: same manifest: **13.18% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-tiny-vi-F32.gguf - size: 105 MB - wer: 13.16% - - name: F16 - filename: moonshine-tiny-vi-F16.gguf - size: 57 MB - wer: 13.17% - - name: Q8_0 - filename: moonshine-tiny-vi-Q8_0.gguf - size: 34 MB - wer: 13.16% diff --git a/scripts/hf_cards/moonshine-tiny-zh.yaml b/scripts/hf_cards/moonshine-tiny-zh.yaml index c1780651..cb6e6b18 100644 --- a/scripts/hf_cards/moonshine-tiny-zh.yaml +++ b/scripts/hf_cards/moonshine-tiny-zh.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-zh-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-tiny-zh -target_repo: handy-computer/moonshine-tiny-zh-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: "3306270" pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - zh tags: - gguf - transcribe.cpp @@ -37,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 metric: CER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-tiny (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 127 - cpu: 153.5 - ryzen-4750u: - vulkan: 56 - cpu: 45.5 wer: metadata_key: fleurs_zh @@ -68,17 +45,3 @@ wer: same manifest: **13.72% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-tiny-zh-F32.gguf - size: 105 MB - wer: 13.70% - - name: F16 - filename: moonshine-tiny-zh-F16.gguf - size: 57 MB - wer: 13.70% - - name: Q8_0 - filename: moonshine-tiny-zh-Q8_0.gguf - size: 34 MB - wer: 13.78% diff --git a/scripts/hf_cards/moonshine-tiny.yaml b/scripts/hf_cards/moonshine-tiny.yaml index a777d281..a25776e7 100644 --- a/scripts/hf_cards/moonshine-tiny.yaml +++ b/scripts/hf_cards/moonshine-tiny.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: UsefulSensors/moonshine-tiny -target_repo: handy-computer/moonshine-tiny-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-tiny.md -upstream_commit: 390624e pin_date: 2026-05-05 validation: @@ -13,11 +10,7 @@ validation: commit: 07a8a84 date: 2026-05-05 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -35,25 +28,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 127 - cpu: 153.5 - ryzen-4750u: - vulkan: 56 - cpu: 45.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, num_beams=1, @@ -62,17 +37,3 @@ wer: Our F32 reference baseline lands at 4.58%, within rounding of upstream and well within the ±1.00 pp Stage 7 acceptance gate. Q8_0 drift is +0.02 pp vs F32 — within bootstrap CI noise. - -quants: - - name: F32 - filename: moonshine-tiny-F32.gguf - size: 105 MB - wer: 4.58% - - name: F16 - filename: moonshine-tiny-F16.gguf - size: 57 MB - wer: 4.58% - - name: Q8_0 - filename: moonshine-tiny-Q8_0.gguf - size: 34 MB - wer: 4.60% diff --git a/scripts/hf_cards/moss-transcribe-diarize.yaml b/scripts/hf_cards/moss-transcribe-diarize.yaml index d9ceb748..d7313d4f 100644 --- a/scripts/hf_cards/moss-transcribe-diarize.yaml +++ b/scripts/hf_cards/moss-transcribe-diarize.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/MOSS-Transcribe-Diarize-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: OpenMOSS-Team/MOSS-Transcribe-Diarize -target_repo: handy-computer/MOSS-Transcribe-Diarize-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moss-transcribe-diarize.md -upstream_commit: d7231bb pin_date: 2026-07-12 validation: @@ -13,12 +10,7 @@ validation: commit: 3f5e15c date: 2026-07-12 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - zh tags: - gguf - transcribe.cpp @@ -48,19 +40,7 @@ capabilities: lang_detect: false timestamps: segment # none | segment | word | token -# Speedup-over-realtime (xRT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. Values average the Q8_0 jfk and -# dots publication cells. -perf: - m4-max: - metal: 28.1 - cpu: 5.8 - ryzen-4750u: - vulkan: 3.0 - cpu: 1.6 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech `test-clean` split (2620 English utterances) with the Whisper-style English text normalizer and jiwer @@ -81,29 +61,3 @@ wer: Q5_K_M or higher if those tail failures matter. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py --dediarize`; public `full_text` applies equivalent marker removal. - -quants: - - name: BF16 - filename: MOSS-Transcribe-Diarize-BF16.gguf - size: 1.83 GB - wer: 2.08% - - name: F16 - filename: MOSS-Transcribe-Diarize-F16.gguf - size: 1.83 GB - wer: 2.07% - - name: Q8_0 - filename: MOSS-Transcribe-Diarize-Q8_0.gguf - size: 987 MB - wer: 1.93% - - name: Q6_K - filename: MOSS-Transcribe-Diarize-Q6_K.gguf - size: 768 MB - wer: 1.96% - - name: Q5_K_M - filename: MOSS-Transcribe-Diarize-Q5_K_M.gguf - size: 700 MB - wer: 1.99% - - name: Q4_K_M - filename: MOSS-Transcribe-Diarize-Q4_K_M.gguf - size: 617 MB - wer: 2.59% diff --git a/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml b/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml index 0aee60b2..6065cdfe 100644 --- a/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml +++ b/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/multitalker-parakeet-streaming-0.6b-v1 -target_repo: handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/multitalker-parakeet-streaming-0.6b-v1.md -upstream_commit: 8749fc7 pin_date: 2026-07-12 # Validation pin for the most recent upload. Updated on each release; @@ -15,18 +12,9 @@ validation: commit: 3083021 date: 2026-08-03 -# Upstream is the NVIDIA Open Model License (not a standard SPDX id), so -# the HF `license` field gets `other` and `license_name` / `license_link` -# carry the actual identifier + URL into the YAML frontmatter (HF prefers -# this when license=other). `license_display` is the human-facing form -# rendered in the README body. -license: other license_name: nvidia-open-model-license license_link: https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/ -license_display: NVIDIA Open Model License pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -46,25 +34,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - diarize: true - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (xRT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. Values average the Q8_0 jfk and -# dots publication cells. -perf: - m4-max: - metal: 178.3 - cpu: 34.6 - ryzen-4750u: - cpu: 13 - vulkan: 25 - metrics: cpwer_ami_ihm_test: bundle_f32_kernel: 19.35 @@ -95,29 +64,3 @@ wer: -m bundle/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf \ meeting.wav ``` - -quants: - - name: F32 - filename: multitalker-parakeet-streaming-0.6b-v1-F32.gguf - size: 2.49 GB - wer: 2.19% - - name: F16 - filename: multitalker-parakeet-streaming-0.6b-v1-F16.gguf - size: 1.25 GB - wer: 2.19% - - name: Q8_0 - filename: multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf - size: 734 MB - wer: 2.18% - - name: Q6_K - filename: multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf - size: 604 MB - wer: 2.20% - - name: Q5_K_M - filename: multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf - size: 542 MB - wer: 2.18% - - name: Q4_K_M - filename: multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf - size: 478 MB - wer: 2.18% diff --git a/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml b/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml index 660bfed1..9183d7df 100644 --- a/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml +++ b/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/nemotron-3.5-asr-streaming-0.6b -target_repo: handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/nemotron-3.5-asr-streaming-0.6b.md -upstream_commit: 24b151a pin_date: 2026-06-08 # Validation pin for the most recent upload. Updated on each release; @@ -15,13 +12,8 @@ validation: commit: 909e94e date: 2026-06-08 -# Upstream is OpenMDW-1.1, not a standard SPDX id, so the HF `license` -# field gets `other` and `license_name` / `license_link` carry the actual -# identifier + URL. `license_display` is the human-facing form. -license: other license_name: openmdw-1.1 license_link: https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b -license_display: OpenMDW-1.1 pipeline_tag: automatic-speech-recognition languages: - en @@ -69,23 +61,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: true - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 98 - cpu: 29 - ryzen-4750u: - vulkan: 14.5 - cpu: 7.5 - wer: metadata_key: fleurs_en source: FLEURS test en (en-US), offline att_context_size=[56, 13] @@ -98,29 +73,3 @@ wer: q6_k: 3.07 q5_k_m: 3.10 q4_k_m: 3.28 - -quants: - - name: F32 - filename: nemotron-3.5-asr-streaming-0.6b-F32.gguf - size: 2.38 GB - wer: 7.97% - - name: F16 - filename: nemotron-3.5-asr-streaming-0.6b-F16.gguf - size: 1.19 GB - wer: 7.97% - - name: Q8_0 - filename: nemotron-3.5-asr-streaming-0.6b-Q8_0.gguf - size: 716 MB - wer: 7.88% - - name: Q6_K - filename: nemotron-3.5-asr-streaming-0.6b-Q6_K.gguf - size: 593 MB - wer: 8.02% - - name: Q5_K_M - filename: nemotron-3.5-asr-streaming-0.6b-Q5_K_M.gguf - size: 534 MB - wer: 8.15% - - name: Q4_K_M - filename: nemotron-3.5-asr-streaming-0.6b-Q4_K_M.gguf - size: 473 MB - wer: 8.49% diff --git a/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml b/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml index 67cb8fa0..ef3fc162 100644 --- a/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml +++ b/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/nemotron-speech-streaming-en-0.6b-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/nemotron-speech-streaming-en-0.6b -target_repo: handy-computer/nemotron-speech-streaming-en-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/nemotron-speech-streaming-en-0.6b.md -upstream_commit: ef3bf40 pin_date: 2026-05-11 # Validation pin for the most recent upload. Updated on each release; @@ -15,18 +12,9 @@ validation: commit: 12f1076 date: 2026-05-11 -# Upstream is the NVIDIA Open Model License (not a standard SPDX id), so -# the HF `license` field gets `other` and `license_name` / `license_link` -# carry the actual identifier + URL into the YAML frontmatter (HF prefers -# this when license=other). `license_display` is the human-facing form -# rendered in the README body. -license: other license_name: nvidia-open-model-license license_link: https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/ -license_display: NVIDIA Open Model License pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -43,50 +31,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 154.5 - cpu: 32 - ryzen-4750u: - vulkan: 13 - cpu: 7.5 - wer: source: LibriSpeech test-clean, offline notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding. F32 reference baseline: 2.31%. NVIDIA's self-reported number on the same split at att_context_size=[70, 13] (1.12s chunk, w/o PnC) is 2.32%. - -quants: - - name: F32 - filename: nemotron-speech-streaming-en-0.6b-F32.gguf - size: 2.30 GB - wer: 2.31% - - name: F16 - filename: nemotron-speech-streaming-en-0.6b-F16.gguf - size: 1.16 GB - wer: 2.31% - - name: Q8_0 - filename: nemotron-speech-streaming-en-0.6b-Q8_0.gguf - size: 696 MB - wer: 2.31% - - name: Q6_K - filename: nemotron-speech-streaming-en-0.6b-Q6_K.gguf - size: 573 MB - wer: 2.29% - - name: Q5_K_M - filename: nemotron-speech-streaming-en-0.6b-Q5_K_M.gguf - size: 514 MB - wer: 2.34% - - name: Q4_K_M - filename: nemotron-speech-streaming-en-0.6b-Q4_K_M.gguf - size: 453 MB - wer: 2.38% diff --git a/scripts/hf_cards/parakeet-ctc-0.6b.yaml b/scripts/hf_cards/parakeet-ctc-0.6b.yaml index 3b6c5cbe..d0721de2 100644 --- a/scripts/hf_cards/parakeet-ctc-0.6b.yaml +++ b/scripts/hf_cards/parakeet-ctc-0.6b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-ctc-0.6b-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/parakeet-ctc-0.6b -target_repo: handy-computer/parakeet-ctc-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-ctc-0.6b.md -upstream_commit: ad09ba1 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -34,50 +27,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 218.5 - cpu: 30.5 - ryzen-4750u: - vulkan: 22.5 - cpu: 10 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.87%. - -quants: - - name: F32 - filename: parakeet-ctc-0.6b-F32.gguf - size: 2.44 GB - wer: 1.87% - - name: F16 - filename: parakeet-ctc-0.6b-F16.gguf - size: 1.22 GB - wer: 1.87% - - name: Q8_0 - filename: parakeet-ctc-0.6b-Q8_0.gguf - size: 722 MB - wer: 1.87% - - name: Q6_K - filename: parakeet-ctc-0.6b-Q6_K.gguf - size: 594 MB - wer: 1.84% - - name: Q5_K_M - filename: parakeet-ctc-0.6b-Q5_K_M.gguf - size: 533 MB - wer: 1.87% - - name: Q4_K_M - filename: parakeet-ctc-0.6b-Q4_K_M.gguf - size: 469 MB - wer: 1.90% diff --git a/scripts/hf_cards/parakeet-ctc-1.1b.yaml b/scripts/hf_cards/parakeet-ctc-1.1b.yaml index dedc092b..e5c97736 100644 --- a/scripts/hf_cards/parakeet-ctc-1.1b.yaml +++ b/scripts/hf_cards/parakeet-ctc-1.1b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-ctc-1.1b-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/parakeet-ctc-1.1b -target_repo: handy-computer/parakeet-ctc-1.1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-ctc-1.1b.md -upstream_commit: a707e81 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -34,50 +27,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 139.5 - cpu: 17.5 - ryzen-4750u: - vulkan: 14 - cpu: 6 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.85%. NVIDIA's self-reported number on the same split is 1.83%. - -quants: - - name: F32 - filename: parakeet-ctc-1.1b-F32.gguf - size: 4.25 GB - wer: 1.85% - - name: F16 - filename: parakeet-ctc-1.1b-F16.gguf - size: 2.13 GB - wer: 1.85% - - name: Q8_0 - filename: parakeet-ctc-1.1b-Q8_0.gguf - size: 1.26 GB - wer: 1.85% - - name: Q6_K - filename: parakeet-ctc-1.1b-Q6_K.gguf - size: 1.04 GB - wer: 1.85% - - name: Q5_K_M - filename: parakeet-ctc-1.1b-Q5_K_M.gguf - size: 929 MB - wer: 1.84% - - name: Q4_K_M - filename: parakeet-ctc-1.1b-Q4_K_M.gguf - size: 818 MB - wer: 1.90% diff --git a/scripts/hf_cards/parakeet-primeline.yaml b/scripts/hf_cards/parakeet-primeline.yaml index 31c2812c..e690d916 100644 --- a/scripts/hf_cards/parakeet-primeline.yaml +++ b/scripts/hf_cards/parakeet-primeline.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-primeline-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: primeline/parakeet-primeline -target_repo: handy-computer/parakeet-primeline-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-primeline.md -upstream_commit: 3f1a9bc pin_date: 2026-08-16 validation: @@ -13,8 +10,6 @@ validation: commit: 856d7c1 date: 2026-08-16 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition languages: - de @@ -66,23 +61,6 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: true - timestamps: token # none | segment | word | token - -# Perf inherited from parakeet-tdt-0.6b-v3. The checkpoint is a -# weights-only fine-tune whose encoder/decoder/joint config is identical, -# so RTF is unchanged; not separately benched. -perf: - m4-max: - metal: 151 - cpu: 28 - ryzen-4750u: - vulkan: 12.5 - cpu: 7.5 wer: metadata_key: fleurs_de @@ -106,29 +84,3 @@ wer: produces the same spellings on the same utterances. FLEURS references use `ß` throughout, which costs roughly 1.05pp: folding `ß`→`ss` on both sides gives 4.92% for the reference and 4.94% for F32. - -quants: - - name: F32 - filename: parakeet-primeline-F32.gguf - size: 2.51 GB - wer: 6.00% - - name: F16 - filename: parakeet-primeline-F16.gguf - size: 1.26 GB - wer: 6.00% - - name: Q8_0 - filename: parakeet-primeline-Q8_0.gguf - size: 740 MB - wer: 6.00% - - name: Q6_K - filename: parakeet-primeline-Q6_K.gguf - size: 610 MB - wer: 5.96% - - name: Q5_K_M - filename: parakeet-primeline-Q5_K_M.gguf - size: 549 MB - wer: 5.99% - - name: Q4_K_M - filename: parakeet-primeline-Q4_K_M.gguf - size: 485 MB - wer: 5.98% diff --git a/scripts/hf_cards/parakeet-rnnt-0.6b.yaml b/scripts/hf_cards/parakeet-rnnt-0.6b.yaml index e423d54e..f3ed6b59 100644 --- a/scripts/hf_cards/parakeet-rnnt-0.6b.yaml +++ b/scripts/hf_cards/parakeet-rnnt-0.6b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-rnnt-0.6b-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/parakeet-rnnt-0.6b -target_repo: handy-computer/parakeet-rnnt-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-rnnt-0.6b.md -upstream_commit: c0c1f09 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -34,50 +27,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 185.5 - cpu: 30 - ryzen-4750u: - vulkan: 14.5 - cpu: 8 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.62%. NVIDIA's self-reported number on the same split is 1.63%. - -quants: - - name: F32 - filename: parakeet-rnnt-0.6b-F32.gguf - size: 2.47 GB - wer: 1.62% - - name: F16 - filename: parakeet-rnnt-0.6b-F16.gguf - size: 1.24 GB - wer: 1.62% - - name: Q8_0 - filename: parakeet-rnnt-0.6b-Q8_0.gguf - size: 730 MB - wer: 1.62% - - name: Q6_K - filename: parakeet-rnnt-0.6b-Q6_K.gguf - size: 601 MB - wer: 1.62% - - name: Q5_K_M - filename: parakeet-rnnt-0.6b-Q5_K_M.gguf - size: 540 MB - wer: 1.62% - - name: Q4_K_M - filename: parakeet-rnnt-0.6b-Q4_K_M.gguf - size: 476 MB - wer: 1.59% diff --git a/scripts/hf_cards/parakeet-rnnt-1.1b.yaml b/scripts/hf_cards/parakeet-rnnt-1.1b.yaml index 5a272b10..4771bbe8 100644 --- a/scripts/hf_cards/parakeet-rnnt-1.1b.yaml +++ b/scripts/hf_cards/parakeet-rnnt-1.1b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-rnnt-1.1b-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/parakeet-rnnt-1.1b -target_repo: handy-computer/parakeet-rnnt-1.1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-rnnt-1.1b.md -upstream_commit: a07b19e pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -34,50 +27,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 125.5 - cpu: 17.5 - ryzen-4750u: - vulkan: 11 - cpu: 5.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.45%. NVIDIA's self-reported number on the same split is 1.46%. - -quants: - - name: F32 - filename: parakeet-rnnt-1.1b-F32.gguf - size: 4.28 GB - wer: 1.45% - - name: F16 - filename: parakeet-rnnt-1.1b-F16.gguf - size: 2.15 GB - wer: 1.45% - - name: Q8_0 - filename: parakeet-rnnt-1.1b-Q8_0.gguf - size: 1.27 GB - wer: 1.46% - - name: Q6_K - filename: parakeet-rnnt-1.1b-Q6_K.gguf - size: 1.04 GB - wer: 1.43% - - name: Q5_K_M - filename: parakeet-rnnt-1.1b-Q5_K_M.gguf - size: 936 MB - wer: 1.43% - - name: Q4_K_M - filename: parakeet-rnnt-1.1b-Q4_K_M.gguf - size: 825 MB - wer: 1.41% diff --git a/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml b/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml index 68036aea..c8fcf796 100644 --- a/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml +++ b/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-tdt-0.6b-v2-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/parakeet-tdt-0.6b-v2 -target_repo: handy-computer/parakeet-tdt-0.6b-v2-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt-0.6b-v2.md -upstream_commit: 1b149a3 pin_date: 2026-04-15 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: bf0d0b7 date: 2026-04-18 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -38,54 +31,10 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, hand-authored from the bench; -# published raw as rtf_ in the metadata block. -perf: - ryzen-4750u: - cpu: 8 - vulkan: 15 - m4-max: - cpu: 29 - metal: 175 - wer: - source: LibriSpeech test-clean # metadata_key: librispeech_test_clean # names the wer_ field; override when scored on another corpus notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy transducer decoding and no external LM. F32 reference baseline: 1.68%. NVIDIA's self-reported number on the same split is 1.69%, so the F32 and Q8_0 ports match the upstream reference within rounding. - -quants: - - name: F32 - filename: parakeet-tdt-0.6b-v2-F32.gguf - size: 2.47 GB - wer: 1.68% - - name: F16 - filename: parakeet-tdt-0.6b-v2-F16.gguf - size: 1.24 GB - wer: 1.68% - - name: Q8_0 - filename: parakeet-tdt-0.6b-v2-Q8_0.gguf - size: 730 MB - wer: 1.69% - - name: Q6_K - filename: parakeet-tdt-0.6b-v2-Q6_K.gguf - size: 608 MB - wer: 1.70% - - name: Q5_K_M - filename: parakeet-tdt-0.6b-v2-Q5_K_M.gguf - size: 547 MB - wer: 1.70% - - name: Q4_K_M - filename: parakeet-tdt-0.6b-v2-Q4_K_M.gguf - size: 483 MB - wer: 1.72% diff --git a/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml b/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml index 77cc80f2..15ae634b 100644 --- a/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml +++ b/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-tdt-0.6b-v3-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/parakeet-tdt-0.6b-v3 -target_repo: handy-computer/parakeet-tdt-0.6b-v3-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt-0.6b-v3.md -upstream_commit: 6d590f7 pin_date: 2026-04-16 # Validation pin for the most recent upload. Updated on each release — @@ -15,35 +12,7 @@ validation: commit: bf0d0b7 date: 2026-04-18 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - bg - - hr - - cs - - da - - nl - - en - - et - - fi - - fr - - de - - el - - hu - - it - - lv - - lt - - mt - - pl - - pt - - ro - - ru - - sk - - sl - - es - - sv - - uk tags: - gguf - transcribe.cpp @@ -63,52 +32,8 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: true - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 151 - cpu: 28 - ryzen-4750u: - vulkan: 12.5 - cpu: 7.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy transducer decoding and no external LM. F32 reference baseline: 1.95%. NVIDIA's self-reported number on the same split is 1.93%. - -quants: - - name: F32 - filename: parakeet-tdt-0.6b-v3-F32.gguf - size: 2.51 GB - wer: 1.95% - - name: F16 - filename: parakeet-tdt-0.6b-v3-F16.gguf - size: 1.26 GB - wer: 1.95% - - name: Q8_0 - filename: parakeet-tdt-0.6b-v3-Q8_0.gguf - size: 740 MB - wer: 1.94% - - name: Q6_K - filename: parakeet-tdt-0.6b-v3-Q6_K.gguf - size: 627 MB - wer: 1.93% - - name: Q5_K_M - filename: parakeet-tdt-0.6b-v3-Q5_K_M.gguf - size: 565 MB - wer: 1.92% - - name: Q4_K_M - filename: parakeet-tdt-0.6b-v3-Q4_K_M.gguf - size: 502 MB - wer: 1.98% diff --git a/scripts/hf_cards/parakeet-tdt-1.1b.yaml b/scripts/hf_cards/parakeet-tdt-1.1b.yaml index 2c9834b8..0ff2b45a 100644 --- a/scripts/hf_cards/parakeet-tdt-1.1b.yaml +++ b/scripts/hf_cards/parakeet-tdt-1.1b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-tdt-1.1b-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/parakeet-tdt-1.1b -target_repo: handy-computer/parakeet-tdt-1.1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt-1.1b.md -upstream_commit: 53276c6 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -35,50 +28,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 125.5 - cpu: 17.5 - ryzen-4750u: - vulkan: 11.5 - cpu: 5.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.39%. NVIDIA's self-reported number on the same split is 1.39%. - -quants: - - name: F32 - filename: parakeet-tdt-1.1b-F32.gguf - size: 4.28 GB - wer: 1.39% - - name: F16 - filename: parakeet-tdt-1.1b-F16.gguf - size: 2.15 GB - wer: 1.39% - - name: Q8_0 - filename: parakeet-tdt-1.1b-Q8_0.gguf - size: 1.27 GB - wer: 1.38% - - name: Q6_K - filename: parakeet-tdt-1.1b-Q6_K.gguf - size: 1.04 GB - wer: 1.40% - - name: Q5_K_M - filename: parakeet-tdt-1.1b-Q5_K_M.gguf - size: 936 MB - wer: 1.39% - - name: Q4_K_M - filename: parakeet-tdt-1.1b-Q4_K_M.gguf - size: 825 MB - wer: 1.42% diff --git a/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml b/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml index 9ff8ea1a..e95cc10f 100644 --- a/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml +++ b/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-tdt_ctc-1.1b-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/parakeet-tdt_ctc-1.1b -target_repo: handy-computer/parakeet-tdt_ctc-1.1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt_ctc-1.1b.md -upstream_commit: 675e786 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -35,50 +28,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 125.5 - cpu: 18.5 - ryzen-4750u: - vulkan: 11 - cpu: 5.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.82%. - -quants: - - name: F32 - filename: parakeet-tdt_ctc-1.1b-F32.gguf - size: 4.28 GB - wer: 1.87% - - name: F16 - filename: parakeet-tdt_ctc-1.1b-F16.gguf - size: 2.15 GB - wer: 1.87% - - name: Q8_0 - filename: parakeet-tdt_ctc-1.1b-Q8_0.gguf - size: 1.27 GB - wer: 1.87% - - name: Q6_K - filename: parakeet-tdt_ctc-1.1b-Q6_K.gguf - size: 1.04 GB - wer: 1.87% - - name: Q5_K_M - filename: parakeet-tdt_ctc-1.1b-Q5_K_M.gguf - size: 936 MB - wer: 1.87% - - name: Q4_K_M - filename: parakeet-tdt_ctc-1.1b-Q4_K_M.gguf - size: 825 MB - wer: 1.91% diff --git a/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml b/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml index ff44530e..dc820140 100644 --- a/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml +++ b/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-tdt_ctc-110m-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/parakeet-tdt_ctc-110m -target_repo: handy-computer/parakeet-tdt_ctc-110m-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt_ctc-110m.md -upstream_commit: 431a349 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -35,50 +28,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 347.5 - cpu: 116 - ryzen-4750u: - vulkan: 32.5 - cpu: 23.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 2.43%. NVIDIA's self-reported number on the same split is 2.40%. - -quants: - - name: F32 - filename: parakeet-tdt_ctc-110m-F32.gguf - size: 457 MB - wer: 2.43% - - name: F16 - filename: parakeet-tdt_ctc-110m-F16.gguf - size: 229 MB - wer: 2.43% - - name: Q8_0 - filename: parakeet-tdt_ctc-110m-Q8_0.gguf - size: 135 MB - wer: 2.43% - - name: Q6_K - filename: parakeet-tdt_ctc-110m-Q6_K.gguf - size: 112 MB - wer: 2.44% - - name: Q5_K_M - filename: parakeet-tdt_ctc-110m-Q5_K_M.gguf - size: 101 MB - wer: 2.47% - - name: Q4_K_M - filename: parakeet-tdt_ctc-110m-Q4_K_M.gguf - size: 90 MB - wer: 2.53% diff --git a/scripts/hf_cards/parakeet-unified-en-0.6b.yaml b/scripts/hf_cards/parakeet-unified-en-0.6b.yaml index 76827d67..141795c9 100644 --- a/scripts/hf_cards/parakeet-unified-en-0.6b.yaml +++ b/scripts/hf_cards/parakeet-unified-en-0.6b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-unified-en-0.6b-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: nvidia/parakeet-unified-en-0.6b -target_repo: handy-computer/parakeet-unified-en-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-unified-en-0.6b.md -upstream_commit: d4ac992 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -34,50 +27,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 163 - cpu: 28.5 - ryzen-4750u: - vulkan: 12.5 - cpu: 7.5 - wer: source: LibriSpeech test-clean, offline notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.59%. NVIDIA's self-reported number on the same split is 1.63%. - -quants: - - name: F32 - filename: parakeet-unified-en-0.6b-F32.gguf - size: 2.47 GB - wer: 1.59% - - name: F16 - filename: parakeet-unified-en-0.6b-F16.gguf - size: 1.24 GB - wer: 1.59% - - name: Q8_0 - filename: parakeet-unified-en-0.6b-Q8_0.gguf - size: 731 MB - wer: 1.60% - - name: Q6_K - filename: parakeet-unified-en-0.6b-Q6_K.gguf - size: 602 MB - wer: 1.61% - - name: Q5_K_M - filename: parakeet-unified-en-0.6b-Q5_K_M.gguf - size: 541 MB - wer: 1.58% - - name: Q4_K_M - filename: parakeet-unified-en-0.6b-Q4_K_M.gguf - size: 477 MB - wer: 1.62% diff --git a/scripts/hf_cards/qwen3-asr-0.6b.yaml b/scripts/hf_cards/qwen3-asr-0.6b.yaml index 230a585d..bcbc8f2c 100644 --- a/scripts/hf_cards/qwen3-asr-0.6b.yaml +++ b/scripts/hf_cards/qwen3-asr-0.6b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/qwen3-asr-0.6b-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: Qwen/Qwen3-ASR-0.6B -target_repo: handy-computer/Qwen3-ASR-0.6B-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/qwen3-asr-0.6b.md -upstream_commit: 5eb144179a02acc5e5ba31e748d22b0cf3e303b0 pin_date: 2026-04-19 # Validation pin for the most recent upload. Updated on each release — @@ -15,40 +12,7 @@ validation: commit: 3f61df7 date: 2026-04-20 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - zh - - en - - yue - - ar - - de - - fr - - es - - pt - - id - - it - - ko - - ru - - th - - vi - - ja - - tr - - hi - - ms - - nl - - sv - - da - - fi - - pl - - cs - - fil - - fa - - el - - ro - - hu - - mk tags: - gguf - transcribe.cpp @@ -67,25 +31,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: true - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 65 - cpu: 16.5 - ryzen-4750u: - vulkan: 8 - cpu: 4.3 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech `test-clean` split (2620 English utterances) with the Whisper-style English text normalizer and jiwer 3.x, @@ -94,29 +40,3 @@ wer: are all within bootstrap CI of each other; Q5_K_M and Q4_K_M show a small but real regression driven by the tied token-embedding / head. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. - -quants: - - name: BF16 - filename: Qwen3-ASR-0.6B-BF16.gguf - size: 1.46 GB - wer: 2.11% - - name: F16 - filename: Qwen3-ASR-0.6B-F16.gguf - size: 1.47 GB - wer: 2.12% - - name: Q8_0 - filename: Qwen3-ASR-0.6B-Q8_0.gguf - size: 811 MB - wer: 2.11% - - name: Q6_K - filename: Qwen3-ASR-0.6B-Q6_K.gguf - size: 763 MB - wer: 2.10% - - name: Q5_K_M - filename: Qwen3-ASR-0.6B-Q5_K_M.gguf - size: 707 MB - wer: 2.21% - - name: Q4_K_M - filename: Qwen3-ASR-0.6B-Q4_K_M.gguf - size: 654 MB - wer: 2.26% diff --git a/scripts/hf_cards/qwen3-asr-1.7b.yaml b/scripts/hf_cards/qwen3-asr-1.7b.yaml index 33cd6ebf..46cba086 100644 --- a/scripts/hf_cards/qwen3-asr-1.7b.yaml +++ b/scripts/hf_cards/qwen3-asr-1.7b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/qwen3-asr-1.7b-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: Qwen/Qwen3-ASR-1.7B -target_repo: handy-computer/Qwen3-ASR-1.7B-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/qwen3-asr-1.7b.md -upstream_commit: 7278e1e70fe206f11671096ffdd38061171dd6e5 pin_date: 2026-04-19 # Validation pin for the most recent upload. Updated on each release — @@ -15,40 +12,7 @@ validation: commit: 3f61df7 date: 2026-04-20 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - zh - - en - - yue - - ar - - de - - fr - - es - - pt - - id - - it - - ko - - ru - - th - - vi - - ja - - tr - - hi - - ms - - nl - - sv - - da - - fi - - pl - - cs - - fil - - fa - - el - - ro - - hu - - mk tags: - gguf - transcribe.cpp @@ -69,25 +33,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: true - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 39.5 - cpu: 8 - ryzen-4750u: - vulkan: 3.8 - cpu: 2 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech `test-clean` split (2620 English utterances) with the Whisper-style English text normalizer and jiwer 3.x, @@ -97,29 +43,3 @@ wer: Q6_K / Q5_K_M are all within bootstrap CI of each other, and Q4_K_M regresses only ~0.2 WER points. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. - -quants: - - name: BF16 - filename: Qwen3-ASR-1.7B-BF16.gguf - size: 3.80 GB - wer: 1.62% - - name: F16 - filename: Qwen3-ASR-1.7B-F16.gguf - size: 3.81 GB - wer: 1.62% - - name: Q8_0 - filename: Qwen3-ASR-1.7B-Q8_0.gguf - size: 2.04 GB - wer: 1.61% - - name: Q6_K - filename: Qwen3-ASR-1.7B-Q6_K.gguf - size: 1.58 GB - wer: 1.65% - - name: Q5_K_M - filename: Qwen3-ASR-1.7B-Q5_K_M.gguf - size: 1.41 GB - wer: 1.65% - - name: Q4_K_M - filename: Qwen3-ASR-1.7B-Q4_K_M.gguf - size: 1.23 GB - wer: 1.81% diff --git a/scripts/hf_cards/sensevoice-small.yaml b/scripts/hf_cards/sensevoice-small.yaml index bc8b1a4f..f4cd163b 100644 --- a/scripts/hf_cards/sensevoice-small.yaml +++ b/scripts/hf_cards/sensevoice-small.yaml @@ -1,12 +1,8 @@ # Spec for the HF README of handy-computer/SenseVoiceSmall-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: FunAudioLLM/SenseVoiceSmall -target_repo: handy-computer/SenseVoiceSmall-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/sensevoice-small.md -# Pinned at intake (Stage 1). -upstream_commit: 3eb3b4eeffc2f2dde6051b853983753db33e35c3 pin_date: 2026-05-06 # Validation pin for the most recent upload. Updated on each release — @@ -16,20 +12,7 @@ validation: commit: f094d28 date: 2026-05-06 -# Upstream license is "model-license" (FunASR's MODEL_LICENSE), not a -# standard SPDX id. The HF YAML field accepts a free-form `other` plus a -# license_name / license_link override on the upstream card; the renderer -# emits `license: other` and surfaces the human-facing form via -# `license_display`. -license: other -license_display: model-license (FunASR MODEL_LICENSE) pipeline_tag: automatic-speech-recognition -languages: - - zh - - yue - - en - - ja - - ko tags: - gguf - transcribe.cpp @@ -52,25 +35,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: true - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 289.5 - cpu: 51.5 - ryzen-4750u: - vulkan: 32.5 - cpu: 15.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding. The publisher does not report a numerical @@ -80,29 +45,3 @@ wer: that baseline within +0.002 percentage-points. LibriSpeech is an English benchmark; SenseVoice's strongest case is Mandarin, and AISHELL-1 (CER) is the recommended complementary check. - -quants: - - name: F32 - filename: SenseVoiceSmall-F32.gguf - size: 893 MB - wer: 3.13% - - name: F16 - filename: SenseVoiceSmall-F16.gguf - size: 449 MB - wer: 3.13% - - name: Q8_0 - filename: SenseVoiceSmall-Q8_0.gguf - size: 241 MB - wer: 3.13% - - name: Q6_K - filename: SenseVoiceSmall-Q6_K.gguf - size: 187 MB - wer: 3.14% - - name: Q5_K_M - filename: SenseVoiceSmall-Q5_K_M.gguf - size: 164 MB - wer: 3.18% - - name: Q4_K_M - filename: SenseVoiceSmall-Q4_K_M.gguf - size: 139 MB - wer: 3.45% diff --git a/scripts/hf_cards/template.md.j2 b/scripts/hf_cards/template.md.j2 index cc165dbc..89baa40f 100644 --- a/scripts/hf_cards/template.md.j2 +++ b/scripts/hf_cards/template.md.j2 @@ -42,7 +42,7 @@ on {{ validation.date }}. | Quantization | Download | Size | {{ metric|default("WER") }} ({{ wer.source }}){% if wer.source2 is defined %} | {{ metric2|default("CER") }} ({{ wer.source2 }}){% endif %} | | --- | --- | ---: | ---:{% if wer.source2 is defined %} | ---:{% endif %} | {%- for q in quants %} -| {{ q.name }} | [{{ q.filename }}](https://huggingface.co/{{ target_repo }}/resolve/main/{{ q.filename }}) | {{ q.size }} | {{ q.wer }}{% if wer.source2 is defined %} | {{ q.wer2 }}{% endif %} | +| {{ q.name }} | [{{ q.filename }}](https://huggingface.co/{{ target_repo }}/resolve/main/{{ q.filename }}) | {{ q.size }} | {{ q.wer | default("-") }}{% if wer.source2 is defined %} | {{ q.wer2 | default("-") }}{% endif %} | {%- endfor %} {{ wer.notes }} diff --git a/scripts/hf_cards/voxtral-mini-3b-2507.yaml b/scripts/hf_cards/voxtral-mini-3b-2507.yaml index 368b9808..7a9cc042 100644 --- a/scripts/hf_cards/voxtral-mini-3b-2507.yaml +++ b/scripts/hf_cards/voxtral-mini-3b-2507.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/Voxtral-Mini-3B-2507-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: mistralai/Voxtral-Mini-3B-2507 -target_repo: handy-computer/Voxtral-Mini-3B-2507-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/voxtral-mini-3b-2507.md -upstream_commit: "3060fe3" pin_date: 2026-06-06 # Validation pin for the most recent upload. Updated on each release — @@ -15,18 +12,7 @@ validation: commit: 483c122 date: 2026-06-06 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - de - - es - - it - - pt - - nl - - hi tags: - gguf - transcribe.cpp @@ -48,25 +34,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 14.9 - cpu: 2 - ryzen-4750u: - vulkan: 1.2 - cpu: 0.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the Whisper English text normalizer, batch size 8 on an NVIDIA L40S. @@ -75,29 +43,3 @@ wer: 1.87%; the BF16 GGUF matches within rounding. The BF16-vs-reference parity is the family's tensor-level numerical gate — 43 checkpointed tensors within tolerance, transcript byte-exact. - -quants: - - name: BF16 - filename: Voxtral-Mini-3B-2507-BF16.gguf - size: 9.37 GB - wer: 1.88% - - name: F16 - filename: Voxtral-Mini-3B-2507-F16.gguf - size: 9.38 GB - wer: 1.89% - - name: Q8_0 - filename: Voxtral-Mini-3B-2507-Q8_0.gguf - size: 5.00 GB - wer: 1.87% - - name: Q6_K - filename: Voxtral-Mini-3B-2507-Q6_K.gguf - size: 3.87 GB - wer: 1.87% - - name: Q5_K_M - filename: Voxtral-Mini-3B-2507-Q5_K_M.gguf - size: 3.46 GB - wer: 1.91% - - name: Q4_K_M - filename: Voxtral-Mini-3B-2507-Q4_K_M.gguf - size: 2.98 GB - wer: 1.94% diff --git a/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml b/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml index 17ccce9c..f9c8d49a 100644 --- a/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml +++ b/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/Voxtral-Mini-4B-Realtime-2602-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: mistralai/Voxtral-Mini-4B-Realtime-2602 -target_repo: handy-computer/Voxtral-Mini-4B-Realtime-2602-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/voxtral-realtime.md -upstream_commit: "2769294" pin_date: 2026-06-06 # Validation pin for the most recent upload. Updated on each release — @@ -15,23 +12,7 @@ validation: commit: 483c122 date: 2026-06-06 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - es - - de - - ru - - zh - - ja - - it - - pt - - nl - - ar - - hi - - ko tags: - gguf - transcribe.cpp @@ -56,25 +37,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: true - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 8.6 - cpu: 2.5 - ryzen-4750u: - vulkan: 0.9 - cpu: 0.6 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the Whisper English text normalizer, offline path at delay 6, batch size 8 @@ -85,29 +48,3 @@ wer: (2.07-2.09%), so the quantization ladder is WER-neutral down to Q4_K_M. The model is multilingual (13 languages, auto-detect); the published WER is English only. - -quants: - - name: BF16 - filename: Voxtral-Mini-4B-Realtime-2602-BF16.gguf - size: 8.87 GB - wer: 2.08% - - name: F16 - filename: Voxtral-Mini-4B-Realtime-2602-F16.gguf - size: 8.88 GB - wer: 2.09% - - name: Q8_0 - filename: Voxtral-Mini-4B-Realtime-2602-Q8_0.gguf - size: 4.73 GB - wer: 2.07% - - name: Q6_K - filename: Voxtral-Mini-4B-Realtime-2602-Q6_K.gguf - size: 3.66 GB - wer: 2.08% - - name: Q5_K_M - filename: Voxtral-Mini-4B-Realtime-2602-Q5_K_M.gguf - size: 3.28 GB - wer: 2.08% - - name: Q4_K_M - filename: Voxtral-Mini-4B-Realtime-2602-Q4_K_M.gguf - size: 2.83 GB - wer: 2.08% diff --git a/scripts/hf_cards/voxtral-small-24b-2507.yaml b/scripts/hf_cards/voxtral-small-24b-2507.yaml index 85b5f481..a49c9d83 100644 --- a/scripts/hf_cards/voxtral-small-24b-2507.yaml +++ b/scripts/hf_cards/voxtral-small-24b-2507.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/Voxtral-Small-24B-2507-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: mistralai/Voxtral-Small-24B-2507 -target_repo: handy-computer/Voxtral-Small-24B-2507-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/voxtral-small-24b-2507.md -upstream_commit: da5b424 pin_date: 2026-06-05 # Validation pin for the most recent upload. Updated on each release — @@ -15,18 +12,7 @@ validation: commit: dac22fa date: 2026-06-05 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - de - - es - - it - - pt - - nl - - hi tags: - gguf - transcribe.cpp @@ -46,21 +32,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 3.2 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the Whisper English text normalizer, greedy decoding, batch size 8 on an @@ -69,29 +41,3 @@ wer: at 1.56%. Validation for this variant is end-to-end by WER — the family's tensor-level numerical parity is established by the Voxtral Mini 3B sibling (identical architecture). - -quants: - - name: BF16 - filename: Voxtral-Small-24B-2507-BF16.gguf - size: 48.54 GB - wer: 1.56% - - name: F16 - filename: Voxtral-Small-24B-2507-F16.gguf - size: 48.55 GB - wer: 1.57% - - name: Q8_0 - filename: Voxtral-Small-24B-2507-Q8_0.gguf - size: 25.81 GB - wer: 1.56% - - name: Q6_K - filename: Voxtral-Small-24B-2507-Q6_K.gguf - size: 19.94 GB - wer: 1.58% - - name: Q5_K_M - filename: Voxtral-Small-24B-2507-Q5_K_M.gguf - size: 17.14 GB - wer: 1.60% - - name: Q4_K_M - filename: Voxtral-Small-24B-2507-Q4_K_M.gguf - size: 14.30 GB - wer: 2.11% diff --git a/scripts/hf_cards/whisper-base.en.yaml b/scripts/hf_cards/whisper-base.en.yaml index 5a8d8489..2f0e0d1e 100644 --- a/scripts/hf_cards/whisper-base.en.yaml +++ b/scripts/hf_cards/whisper-base.en.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-base.en-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: openai/whisper-base.en -target_repo: handy-computer/whisper-base.en-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-base.en.md -upstream_commit: 911407f pin_date: 2026-04-25 validation: @@ -13,11 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - "en" tags: - gguf - transcribe.cpp @@ -32,50 +25,6 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 211.9 - cpu: 38.2 - ryzen-4750u: - vulkan: 36.2 - cpu: 12.8 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 4.25%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-base.en-F32.gguf - size: 279 MB - wer: 4.14% - - name: F16 - filename: whisper-base.en-F16.gguf - size: 144 MB - wer: 4.13% - - name: Q8_0 - filename: whisper-base.en-Q8_0.gguf - size: 81 MB - wer: 4.16% - - name: Q6_K - filename: whisper-base.en-Q6_K.gguf - size: 65 MB - wer: 4.15% - - name: Q5_K_M - filename: whisper-base.en-Q5_K_M.gguf - size: 61 MB - wer: 4.16% - - name: Q4_K_M - filename: whisper-base.en-Q4_K_M.gguf - size: 56 MB - wer: 4.29% diff --git a/scripts/hf_cards/whisper-base.yaml b/scripts/hf_cards/whisper-base.yaml index 75cf6650..91ab199c 100644 --- a/scripts/hf_cards/whisper-base.yaml +++ b/scripts/hf_cards/whisper-base.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-base-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: openai/whisper-base -target_repo: handy-computer/whisper-base-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-base.md -upstream_commit: e37978b pin_date: 2026-04-25 validation: @@ -13,8 +10,6 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition languages: - "en" @@ -129,50 +124,6 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 209.4 - cpu: 36.6 - ryzen-4750u: - vulkan: 34.8 - cpu: 11.9 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.009%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-base-F32.gguf - size: 279 MB - wer: 5.10% - - name: F16 - filename: whisper-base-F16.gguf - size: 144 MB - wer: 5.10% - - name: Q8_0 - filename: whisper-base-Q8_0.gguf - size: 81 MB - wer: 5.12% - - name: Q6_K - filename: whisper-base-Q6_K.gguf - size: 65 MB - wer: 5.12% - - name: Q5_K_M - filename: whisper-base-Q5_K_M.gguf - size: 61 MB - wer: 5.19% - - name: Q4_K_M - filename: whisper-base-Q4_K_M.gguf - size: 56 MB - wer: 5.36% diff --git a/scripts/hf_cards/whisper-large-v2.yaml b/scripts/hf_cards/whisper-large-v2.yaml index 67f57d01..e5eda663 100644 --- a/scripts/hf_cards/whisper-large-v2.yaml +++ b/scripts/hf_cards/whisper-large-v2.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-large-v2-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: openai/whisper-large-v2 -target_repo: handy-computer/whisper-large-v2-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large-v2.md -upstream_commit: ae46427 pin_date: 2026-04-25 validation: @@ -13,8 +10,6 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition languages: - "en" @@ -129,50 +124,6 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 23.7 - cpu: 1.5 - ryzen-4750u: - vulkan: 2.1 - cpu: 0.6 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.83%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-large-v2-F32.gguf - size: 5.75 GB - wer: 2.68% - - name: F16 - filename: whisper-large-v2-F16.gguf - size: 2.89 GB - wer: 2.68% - - name: Q8_0 - filename: whisper-large-v2-Q8_0.gguf - size: 1.55 GB - wer: 2.65% - - name: Q6_K - filename: whisper-large-v2-Q6_K.gguf - size: 1.21 GB - wer: 2.83% - - name: Q5_K_M - filename: whisper-large-v2-Q5_K_M.gguf - size: 1.08 GB - wer: 2.72% - - name: Q4_K_M - filename: whisper-large-v2-Q4_K_M.gguf - size: 950 MB - wer: 2.46% diff --git a/scripts/hf_cards/whisper-large-v3-turbo.yaml b/scripts/hf_cards/whisper-large-v3-turbo.yaml index 7420cd9f..775924f3 100644 --- a/scripts/hf_cards/whisper-large-v3-turbo.yaml +++ b/scripts/hf_cards/whisper-large-v3-turbo.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-large-v3-turbo-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: openai/whisper-large-v3-turbo -target_repo: handy-computer/whisper-large-v3-turbo-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large-v3-turbo.md -upstream_commit: 41f01f3 pin_date: 2026-04-25 validation: @@ -13,8 +10,6 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition languages: - "en" @@ -130,46 +125,6 @@ summary: | default_quant_index: 1 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 46.4 - cpu: 1.8 - ryzen-4750u: - vulkan: 3.4 - cpu: 0.8 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.10%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F16 - filename: whisper-large-v3-turbo-F16.gguf - size: 1.51 GB - wer: 2.01% - - name: Q8_0 - filename: whisper-large-v3-turbo-Q8_0.gguf - size: 845 MB - wer: 2.01% - - name: Q6_K - filename: whisper-large-v3-turbo-Q6_K.gguf - size: 660 MB - wer: 2.01% - - name: Q5_K_M - filename: whisper-large-v3-turbo-Q5_K_M.gguf - size: 591 MB - wer: 2.03% - - name: Q4_K_M - filename: whisper-large-v3-turbo-Q4_K_M.gguf - size: 511 MB - wer: 2.04% diff --git a/scripts/hf_cards/whisper-large-v3.yaml b/scripts/hf_cards/whisper-large-v3.yaml index 8ae870c8..be6866f8 100644 --- a/scripts/hf_cards/whisper-large-v3.yaml +++ b/scripts/hf_cards/whisper-large-v3.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-large-v3-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: openai/whisper-large-v3 -target_repo: handy-computer/whisper-large-v3-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large-v3.md -upstream_commit: 06f233f pin_date: 2026-04-25 validation: @@ -13,8 +10,6 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition languages: - "en" @@ -130,46 +125,6 @@ summary: | default_quant_index: 1 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 23.6 - cpu: 1.5 - ryzen-4750u: - vulkan: 2.1 - cpu: 0.6 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.01%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F16 - filename: whisper-large-v3-F16.gguf - size: 2.88 GB - wer: 1.81% - - name: Q8_0 - filename: whisper-large-v3-Q8_0.gguf - size: 1.55 GB - wer: 1.82% - - name: Q6_K - filename: whisper-large-v3-Q6_K.gguf - size: 1.21 GB - wer: 1.83% - - name: Q5_K_M - filename: whisper-large-v3-Q5_K_M.gguf - size: 1.08 GB - wer: 1.84% - - name: Q4_K_M - filename: whisper-large-v3-Q4_K_M.gguf - size: 951 MB - wer: 1.86% diff --git a/scripts/hf_cards/whisper-large.yaml b/scripts/hf_cards/whisper-large.yaml index d990dc81..985f8f88 100644 --- a/scripts/hf_cards/whisper-large.yaml +++ b/scripts/hf_cards/whisper-large.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-large-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: openai/whisper-large -target_repo: handy-computer/whisper-large-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large.md -upstream_commit: 4ef9b41 pin_date: 2026-04-25 validation: @@ -13,8 +10,6 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition languages: - "en" @@ -129,50 +124,6 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 24.9 - cpu: 1.5 - ryzen-4750u: - vulkan: 2.1 - cpu: 0.5 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.73%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-large-F32.gguf - size: 5.75 GB - wer: 2.72% - - name: F16 - filename: whisper-large-F16.gguf - size: 2.89 GB - wer: 2.74% - - name: Q8_0 - filename: whisper-large-Q8_0.gguf - size: 1.55 GB - wer: 2.74% - - name: Q6_K - filename: whisper-large-Q6_K.gguf - size: 1.21 GB - wer: 2.62% - - name: Q5_K_M - filename: whisper-large-Q5_K_M.gguf - size: 1.08 GB - wer: 2.70% - - name: Q4_K_M - filename: whisper-large-Q4_K_M.gguf - size: 950 MB - wer: 2.67% diff --git a/scripts/hf_cards/whisper-medium.en.yaml b/scripts/hf_cards/whisper-medium.en.yaml index be11f851..0957fd2b 100644 --- a/scripts/hf_cards/whisper-medium.en.yaml +++ b/scripts/hf_cards/whisper-medium.en.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-medium.en-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: openai/whisper-medium.en -target_repo: handy-computer/whisper-medium.en-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-medium.en.md -upstream_commit: 2e98eb6 pin_date: 2026-04-25 validation: @@ -13,11 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - "en" tags: - gguf - transcribe.cpp @@ -32,50 +25,6 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 45.1 - cpu: 3.2 - ryzen-4750u: - vulkan: 4.6 - cpu: 1.1 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.02%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-medium.en-F32.gguf - size: 2.85 GB - wer: 2.74% - - name: F16 - filename: whisper-medium.en-F16.gguf - size: 1.44 GB - wer: 2.73% - - name: Q8_0 - filename: whisper-medium.en-Q8_0.gguf - size: 793 MB - wer: 2.72% - - name: Q6_K - filename: whisper-medium.en-Q6_K.gguf - size: 618 MB - wer: 2.83% - - name: Q5_K_M - filename: whisper-medium.en-Q5_K_M.gguf - size: 556 MB - wer: 2.74% - - name: Q4_K_M - filename: whisper-medium.en-Q4_K_M.gguf - size: 481 MB - wer: 2.91% diff --git a/scripts/hf_cards/whisper-medium.yaml b/scripts/hf_cards/whisper-medium.yaml index 57a36d43..95b8cabd 100644 --- a/scripts/hf_cards/whisper-medium.yaml +++ b/scripts/hf_cards/whisper-medium.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-medium-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: openai/whisper-medium -target_repo: handy-computer/whisper-medium-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-medium.md -upstream_commit: abdf7c3 pin_date: 2026-04-25 validation: @@ -13,8 +10,6 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition languages: - "en" @@ -129,50 +124,6 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 41.6 - cpu: 3 - ryzen-4750u: - vulkan: 4.3 - cpu: 1.1 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.90%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-medium-F32.gguf - size: 2.85 GB - wer: 2.63% - - name: F16 - filename: whisper-medium-F16.gguf - size: 1.44 GB - wer: 2.63% - - name: Q8_0 - filename: whisper-medium-Q8_0.gguf - size: 793 MB - wer: 2.64% - - name: Q6_K - filename: whisper-medium-Q6_K.gguf - size: 618 MB - wer: 2.59% - - name: Q5_K_M - filename: whisper-medium-Q5_K_M.gguf - size: 556 MB - wer: 2.62% - - name: Q4_K_M - filename: whisper-medium-Q4_K_M.gguf - size: 481 MB - wer: 2.59% diff --git a/scripts/hf_cards/whisper-small.en.yaml b/scripts/hf_cards/whisper-small.en.yaml index 8d05e29c..71bc2cde 100644 --- a/scripts/hf_cards/whisper-small.en.yaml +++ b/scripts/hf_cards/whisper-small.en.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-small.en-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: openai/whisper-small.en -target_repo: handy-computer/whisper-small.en-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-small.en.md -upstream_commit: e872752 pin_date: 2026-04-25 validation: @@ -13,11 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - "en" tags: - gguf - transcribe.cpp @@ -32,50 +25,6 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 104.4 - cpu: 10.3 - ryzen-4750u: - vulkan: 12.8 - cpu: 3.6 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.05%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-small.en-F32.gguf - size: 924 MB - wer: 3.09% - - name: F16 - filename: whisper-small.en-F16.gguf - size: 470 MB - wer: 2.97% - - name: Q8_0 - filename: whisper-small.en-Q8_0.gguf - size: 257 MB - wer: 3.09% - - name: Q6_K - filename: whisper-small.en-Q6_K.gguf - size: 202 MB - wer: 2.97% - - name: Q5_K_M - filename: whisper-small.en-Q5_K_M.gguf - size: 185 MB - wer: 3.12% - - name: Q4_K_M - filename: whisper-small.en-Q4_K_M.gguf - size: 164 MB - wer: 3.08% diff --git a/scripts/hf_cards/whisper-small.yaml b/scripts/hf_cards/whisper-small.yaml index cb8d920c..ebca0b37 100644 --- a/scripts/hf_cards/whisper-small.yaml +++ b/scripts/hf_cards/whisper-small.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-small-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: openai/whisper-small -target_repo: handy-computer/whisper-small-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-small.md -upstream_commit: 973afd2 pin_date: 2026-04-25 validation: @@ -13,8 +10,6 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition languages: - "en" @@ -129,50 +124,6 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 99.2 - cpu: 9.8 - ryzen-4750u: - vulkan: 12.1 - cpu: 3.4 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.432%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-small-F32.gguf - size: 924 MB - wer: 3.33% - - name: F16 - filename: whisper-small-F16.gguf - size: 470 MB - wer: 3.34% - - name: Q8_0 - filename: whisper-small-Q8_0.gguf - size: 257 MB - wer: 3.33% - - name: Q6_K - filename: whisper-small-Q6_K.gguf - size: 202 MB - wer: 3.33% - - name: Q5_K_M - filename: whisper-small-Q5_K_M.gguf - size: 185 MB - wer: 3.37% - - name: Q4_K_M - filename: whisper-small-Q4_K_M.gguf - size: 164 MB - wer: 3.40% diff --git a/scripts/hf_cards/whisper-tiny.en.yaml b/scripts/hf_cards/whisper-tiny.en.yaml index 29779cee..66d24374 100644 --- a/scripts/hf_cards/whisper-tiny.en.yaml +++ b/scripts/hf_cards/whisper-tiny.en.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-tiny.en-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: openai/whisper-tiny.en -target_repo: handy-computer/whisper-tiny.en-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-tiny.en.md -upstream_commit: 87c7102 pin_date: 2026-04-25 validation: @@ -13,11 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - "en" tags: - gguf - transcribe.cpp @@ -32,25 +25,7 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 279.8 - cpu: 78.7 - ryzen-4750u: - vulkan: 60.7 - cpu: 26.1 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.66%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. diff --git a/scripts/hf_cards/whisper-tiny.yaml b/scripts/hf_cards/whisper-tiny.yaml index cbedb7f3..cdaacce9 100644 --- a/scripts/hf_cards/whisper-tiny.yaml +++ b/scripts/hf_cards/whisper-tiny.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-tiny-gguf. # Consumed by scripts/hf_cards/generate.py. -hf_repo: openai/whisper-tiny -target_repo: handy-computer/whisper-tiny-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-tiny.md -upstream_commit: 169d4a4 pin_date: 2026-04-25 validation: @@ -13,8 +10,6 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition languages: - "en" @@ -129,50 +124,6 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 302.1 - cpu: 76.1 - ryzen-4750u: - vulkan: 61 - cpu: 24.8 - wer: - source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 7.54%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-tiny-F32.gguf - size: 146 MB - wer: 7.54% - - name: F16 - filename: whisper-tiny-F16.gguf - size: 76 MB - wer: 7.49% - - name: Q8_0 - filename: whisper-tiny-Q8_0.gguf - size: 44 MB - wer: 7.53% - - name: Q6_K - filename: whisper-tiny-Q6_K.gguf - size: 43 MB - wer: 7.63% - - name: Q5_K_M - filename: whisper-tiny-Q5_K_M.gguf - size: 42 MB - wer: 7.63% - - name: Q4_K_M - filename: whisper-tiny-Q4_K_M.gguf - size: 42 MB - wer: 7.76% diff --git a/scripts/wer/ingest.py b/scripts/wer/ingest.py index a6924b83..fe03c420 100644 --- a/scripts/wer/ingest.py +++ b/scripts/wer/ingest.py @@ -44,60 +44,7 @@ import numpy as np import soundfile as sf - -# -------- BCP-47 → FLEURS config mapping --------------------------------- -# -# FLEURS uses underscore-region codes. Region-ambiguous BCP-47 codes -# (zh, no) pick a sensible default; explicit regional aliases live -# alongside (zh-cn). FLEURS only ships one regional variant for -# most languages, so most entries are unambiguous. -# -# Full FLEURS coverage (102 languages). Add aliases here when a new -# BCP-47 → config shorthand is wanted. -FLEURS_LANGS: dict[str, str] = { - # African - "af": "af_za", "am": "am_et", "ff": "ff_sn", "ha": "ha_ng", - "ig": "ig_ng", "kam": "kam_ke", "kea": "kea_cv", "lg": "lg_ug", - "ln": "ln_cd", "luo": "luo_ke", "nso": "nso_za", "ny": "ny_mw", - "om": "om_et", "sn": "sn_zw", "so": "so_so", "sw": "sw_ke", - "umb": "umb_ao", "wo": "wo_sn", "xh": "xh_za", "yo": "yo_ng", - "zu": "zu_za", - # Arabic, Hebrew, Persian, Kurdish - "ar": "ar_eg", "he": "he_il", "fa": "fa_ir", "ckb": "ckb_iq", - "ps": "ps_af", "ur": "ur_pk", - # South Asian - "as": "as_in", "bn": "bn_in", "gu": "gu_in", "hi": "hi_in", - "kn": "kn_in", "ml": "ml_in", "mr": "mr_in", "ne": "ne_np", - "or": "or_in", "pa": "pa_in", "sd": "sd_in", "ta": "ta_in", - "te": "te_in", - # East / Southeast Asian - "my": "my_mm", "fil": "fil_ph", "tl": "fil_ph", # tl alias - "id": "id_id", "ja": "ja_jp", "jv": "jv_id", "km": "km_kh", - "ko": "ko_kr", "lo": "lo_la", "ms": "ms_my", "th": "th_th", - "vi": "vi_vn", "ceb": "ceb_ph", - # Chinese / Cantonese - "zh": "cmn_hans_cn", # simplified Mandarin (default) - "zh-cn": "cmn_hans_cn", # simplified Mandarin (explicit) - # FLEURS has no Traditional Mandarin, so zh-tw is intentionally unmapped. - # Traditional-script models are scored against cmn_hans_cn with both sides - # OpenCC-folded to one script; see docs/tools/wer.md. - "yue": "yue_hant_hk", # Cantonese (traditional) - # Central Asian - "az": "az_az", "kk": "kk_kz", "ky": "ky_kg", "mn": "mn_mn", - "tg": "tg_tj", "uz": "uz_uz", "hy": "hy_am", "ka": "ka_ge", - # European - "ast": "ast_es", "be": "be_by", "bg": "bg_bg", "bs": "bs_ba", - "ca": "ca_es", "cs": "cs_cz", "cy": "cy_gb", "da": "da_dk", - "de": "de_de", "el": "el_gr", "en": "en_us", "es": "es_419", - "et": "et_ee", "fi": "fi_fi", "fr": "fr_fr", "ga": "ga_ie", - "gl": "gl_es", "hr": "hr_hr", "hu": "hu_hu", "is": "is_is", - "it": "it_it", "lb": "lb_lu", "lt": "lt_lt", "lv": "lv_lv", - "mi": "mi_nz", "mk": "mk_mk", "mt": "mt_mt", "nb": "nb_no", - "no": "nb_no", # Norwegian macro → Bokmål - "nl": "nl_nl", "oc": "oc_fr", "pl": "pl_pl", "pt": "pt_br", - "ro": "ro_ro", "ru": "ru_ru", "sk": "sk_sk", "sl": "sl_si", - "sr": "sr_rs", "sv": "sv_se", "tr": "tr_tr", "uk": "uk_ua", -} +from languages import FLEURS_LANGS # -------- Shared helpers -------------------------------------------------- diff --git a/scripts/wer/languages.py b/scripts/wer/languages.py new file mode 100644 index 00000000..d7816058 --- /dev/null +++ b/scripts/wer/languages.py @@ -0,0 +1,57 @@ +"""Lightweight language metadata shared by WER ingestion and catalog policy.""" +from __future__ import annotations + +# BCP-47 shorthand -> google/fleurs configuration. Keep this module stdlib-only: +# catalog publication planning imports it without installing dataset/audio deps. +FLEURS_LANGS: dict[str, str] = { + # African + "af": "af_za", "am": "am_et", "ff": "ff_sn", "ha": "ha_ng", + "ig": "ig_ng", "kam": "kam_ke", "kea": "kea_cv", "lg": "lg_ug", + "ln": "ln_cd", "luo": "luo_ke", "nso": "nso_za", "ny": "ny_mw", + "om": "om_et", "sn": "sn_zw", "so": "so_so", "sw": "sw_ke", + "umb": "umb_ao", "wo": "wo_sn", "xh": "xh_za", "yo": "yo_ng", + "zu": "zu_za", + # Arabic, Hebrew, Persian, Kurdish + "ar": "ar_eg", "he": "he_il", "fa": "fa_ir", "ckb": "ckb_iq", + "ps": "ps_af", "ur": "ur_pk", + # South Asian + "as": "as_in", "bn": "bn_in", "gu": "gu_in", "hi": "hi_in", + "kn": "kn_in", "ml": "ml_in", "mr": "mr_in", "ne": "ne_np", + "or": "or_in", "pa": "pa_in", "sd": "sd_in", "ta": "ta_in", + "te": "te_in", + # East / Southeast Asian + "my": "my_mm", "fil": "fil_ph", "tl": "fil_ph", + "id": "id_id", "ja": "ja_jp", "jv": "jv_id", "km": "km_kh", + "ko": "ko_kr", "lo": "lo_la", "ms": "ms_my", "th": "th_th", + "vi": "vi_vn", "ceb": "ceb_ph", + # Chinese / Cantonese + "zh": "cmn_hans_cn", "zh-cn": "cmn_hans_cn", + # zh-tw is intentionally absent: FLEURS has no Traditional Mandarin. + "yue": "yue_hant_hk", + # Central Asian + "az": "az_az", "kk": "kk_kz", "ky": "ky_kg", "mn": "mn_mn", + "tg": "tg_tj", "uz": "uz_uz", "hy": "hy_am", "ka": "ka_ge", + # European + "ast": "ast_es", "be": "be_by", "bg": "bg_bg", "bs": "bs_ba", + "ca": "ca_es", "cs": "cs_cz", "cy": "cy_gb", "da": "da_dk", + "de": "de_de", "el": "el_gr", "en": "en_us", "es": "es_419", + "et": "et_ee", "fi": "fi_fi", "fr": "fr_fr", "ga": "ga_ie", + "gl": "gl_es", "hr": "hr_hr", "hu": "hu_hu", "is": "is_is", + "it": "it_it", "lb": "lb_lu", "lt": "lt_lt", "lv": "lv_lv", + "mi": "mi_nz", "mk": "mk_mk", "mt": "mt_mt", "nb": "nb_no", + "no": "nb_no", "nl": "nl_nl", "oc": "oc_fr", "pl": "pl_pl", + "pt": "pt_br", "ro": "ro_ro", "ru": "ru_ru", "sk": "sk_sk", + "sl": "sl_si", "sr": "sr_rs", "sv": "sv_se", "tr": "tr_tr", + "uk": "uk_ua", +} + +# First spelling for a configuration is the canonical catalog spelling. This +# makes aliases deterministic: tl -> fil, no -> nb, zh-cn -> zh. +FLEURS_CANONICAL_BY_CONFIG: dict[str, str] = {} +for _language, _config in FLEURS_LANGS.items(): + FLEURS_CANONICAL_BY_CONFIG.setdefault(_config, _language) + +# Character-based scoring for scripts without reliable whitespace-delimited +# words in FLEURS. Khmer/Lao/Burmese spaces are phrase separators rather than +# dependable word boundaries, so WER would mostly measure orthography policy. +CER_LANGUAGES = {"zh", "yue", "ja", "ko", "th", "km", "lo", "my"} diff --git a/scripts/wer/remote/cache_paths.py b/scripts/wer/remote/cache_paths.py index 5093f4b9..6d4d1e37 100644 --- a/scripts/wer/remote/cache_paths.py +++ b/scripts/wer/remote/cache_paths.py @@ -16,6 +16,8 @@ def hyp_cache_paths( language: str = "", stream_chunk_ms: int = 0, stream_att_right: int = -1, + publication_profile: str = "", + backend: str = "", ) -> tuple[str, str]: """Deterministic Volume paths for the (model, dataset, subset, batch, sort) tuple. @@ -45,8 +47,10 @@ def hyp_cache_paths( # default R), no tag so it stays compatible with already-cached entries; # any explicit R gets its own slot so e.g. R=13 and R=0 never collide. r_tag = "" if stream_att_right < 0 else f".r{stream_att_right}" + profile_tag = "" if not publication_profile else f".profile-{publication_profile}" + backend_tag = "" if not backend else f".backend-{backend}" base = (f"/data/wer/hyps/{hyp_fp}/{slug}." - f"{dataset_id(dataset_spec)}.{subset_tag}{bs_tag}{sort_tag}{ts_tag}{lang_tag}{stream_tag}{r_tag}") + f"{dataset_id(dataset_spec)}.{subset_tag}{bs_tag}{sort_tag}{ts_tag}{lang_tag}{stream_tag}{r_tag}{profile_tag}{backend_tag}") return f"{base}.jsonl", f"{base}.summary.json" diff --git a/scripts/wer/remote/fingerprints.py b/scripts/wer/remote/fingerprints.py index aaa560aa..a9f7eff7 100644 --- a/scripts/wer/remote/fingerprints.py +++ b/scripts/wer/remote/fingerprints.py @@ -54,14 +54,14 @@ def source_fingerprint(root: Path) -> str: def hyp_extra_hash(root: Path) -> str: - """Hash of the Python pieces that affect hyp output: run.py + ingest.py. + """Hash of the Python pieces that affect hyp output and manifests. Folded with SRC_FP into the hyp cache key. Edits to the dispatcher (modal_sweep.py) or to local-only scripts (score.py) do NOT invalidate the hyp cache because they cannot change what the cell produces. """ h = hashlib.sha256() - for name in ("run.py", "ingest.py"): + for name in ("run.py", "ingest.py", "languages.py"): p = root / "scripts" / "wer" / name if p.is_file(): h.update(name.encode()); h.update(b"\0") diff --git a/scripts/wer/remote/modal_sweep.py b/scripts/wer/remote/modal_sweep.py index 503f62ba..7dd50949 100644 --- a/scripts/wer/remote/modal_sweep.py +++ b/scripts/wer/remote/modal_sweep.py @@ -93,6 +93,12 @@ from subprocess_io import run_subprocess_capturing_stderr from workdir import prepare_work +_CATALOG_HELPERS = pathlib.Path(REPO) / "scripts" / "catalog" +if _CATALOG_HELPERS.is_dir() and str(_CATALOG_HELPERS) not in sys.path: + sys.path.insert(0, str(_CATALOG_HELPERS)) +import common as catalog_common +import profiles as benchmark_profiles + # SRC_FP keys the build cache (C++ binary). HYP_FP keys the hyp cache and # folds SRC_FP in so a binary change invalidates hyps too. Splitting them @@ -388,6 +394,27 @@ def list_ggufs(repos: list[str]) -> list[tuple[str, list[str]]]: # streams to Modal logs. # --------------------------------------------------------------------------- +def _local_engine_sha() -> str: + """Short SHA of the dispatching checkout, or "" when the engine is dirty. + + Refuses to name a commit the binary does not correspond to: if src/ or + CMakeLists.txt carry uncommitted edits the build is not that commit, and + no claim beats a wrong one. + """ + import subprocess + root = pathlib.Path(__file__).resolve().parents[3] + try: + dirty = subprocess.run(["git", "status", "--porcelain", "src", "CMakeLists.txt"], + capture_output=True, text=True, timeout=5, cwd=root) + if dirty.returncode != 0 or dirty.stdout.strip(): + return "" + out = subprocess.run(["git", "rev-parse", "--short", "HEAD"], + capture_output=True, text=True, timeout=5, cwd=root) + return out.stdout.strip() if out.returncode == 0 else "" + except (OSError, subprocess.SubprocessError): + return "" + + def _run_wer_impl( model_repo: str, model_file: str, @@ -398,6 +425,9 @@ def _run_wer_impl( sort_by_length: bool = True, timestamps: str = "none", language: str = "", + engine_sha: str = "", + publication_profile: str = "", + backend: str = "", stream_chunk_ms: int = 0, stream_att_right: int = -1, dataset_status: dict | None = None, @@ -419,7 +449,8 @@ def _run_wer_impl( # when a hyp for this (fingerprint, model, dataset, subset) already exists. cache_hyp, cache_sum = hyp_cache_paths( HYP_FP, model_file, dataset_spec, n_utts, batch_size, sort_by_length, - timestamps, language, stream_chunk_ms, stream_att_right) + timestamps, language, stream_chunk_ms, stream_att_right, + publication_profile, backend) if os.path.exists(cache_hyp) and os.path.exists(cache_sum) \ and os.path.getsize(cache_hyp) > 0: _log_prepared_dataset("wer", dataset_status) @@ -459,6 +490,11 @@ def _run_wer_impl( # Force per-line stdout flushing so progress streams live to Modal logs. env = {**os.environ, "PYTHONUNBUFFERED": "1"} + # The container gets a source tree with no .git, so run.py's own + # `git rev-parse` finds nothing and every remote row would land + # unattributable. Hand it the sha of the tree this sweep built from. + if engine_sha: + env["TRANSCRIBE_ENGINE_SHA"] = engine_sha cmd = [ "uv", "run", "scripts/wer/run.py", "--cli", cli_path, @@ -474,6 +510,10 @@ def _run_wer_impl( cmd += ["--timestamps", timestamps] if language: cmd += ["--language", language] + if publication_profile: + cmd += ["--publication-profile", publication_profile] + if backend: + cmd += ["--backend", backend] if stream_chunk_ms and stream_chunk_ms > 0: cmd += ["--stream-chunk-ms", str(stream_chunk_ms)] if stream_att_right >= 0: @@ -577,6 +617,9 @@ def runner( stream_chunk_ms: int = 0, stream_att_right: int = -1, dataset_status: dict | None = None, + engine_sha: str = "", + publication_profile: str = "", + backend: str = "", ) -> dict: # Prefer the build_dir the local entrypoint computed and built into: # SRC_FP can drift between the laptop and the container, so recomputing @@ -586,7 +629,8 @@ def runner( model_repo, model_file, dataset_spec, n_utts, build_dir or default_build_dir, batch_size=batch_size, sort_by_length=sort_by_length, - timestamps=timestamps, language=language, + timestamps=timestamps, language=language, engine_sha=engine_sha, + publication_profile=publication_profile, backend=backend, stream_chunk_ms=stream_chunk_ms, stream_att_right=stream_att_right, dataset_status=dataset_status, @@ -830,6 +874,8 @@ def sweep( language: str = "", stream_chunk_ms: int = 0, stream_att_right: int = -1, + publication_profile: str = "", + backend: str = "", ) -> None: """Fan WER across one or more models on one GPU class. @@ -914,7 +960,8 @@ def sweep( futs = [(c, runner.spawn(c["repo"], c["file"], c["dataset"], n, c["bs"], sort_by_length, build_dir, timestamps, language, stream_chunk_ms, stream_att_right, - dataset_status)) + dataset_status, _local_engine_sha(), + publication_profile, backend)) for c in cells] rows, failures = [], [] @@ -963,6 +1010,99 @@ def sweep( f"do uv run scripts/wer/score.py \"$f\"; done") +@app.local_entrypoint() +def publication_sweep( + models: str, + profile: str = "", + missing_only: bool = True, + clean: bool = False, + plan_only: bool = False, +) -> None: + """Run the accuracy matrix selected by a catalog publication profile. + + Unlike the low-level sweep entrypoint, datasets, quants, batch sizes, + timestamps, language prompts, and GPU are derived from one checked-in + policy. Cells are grouped where possible and delegated to sweep(), which + remains the sole remote execution implementation. + """ + profile_id, profile_data = benchmark_profiles.load_profile(profile or None) + records = catalog_common.load_records() + selected = [item.strip() for item in models.split(",") if item.strip()] + unknown = [item for item in selected if item not in records] + if unknown: + raise SystemExit(f"no catalog record for: {', '.join(unknown)}") + if not selected: + raise SystemExit("--models is required (comma-separated catalog variants)") + + # First collect all required quants for one model/dataset invocation. + invocations: dict[tuple, set[str]] = {} + for variant in selected: + record = records[variant] + expected = benchmark_profiles.apply_exceptions( + record, "accuracy", + benchmark_profiles.expected_accuracy(record, profile_data)) + valid = { + benchmark_profiles.cell_key(row, "accuracy") + for row in record.get("accuracy_benchmarks", []) + if row.get("engine_sha") + } + legacy = { + benchmark_profiles.accuracy_core_key(row) + for row in record.get("accuracy_benchmarks", []) + if row.get("measurement_provenance") == "legacy-published" + } + for cell in expected: + if missing_only and ( + benchmark_profiles.cell_key(cell, "accuracy") in valid + or benchmark_profiles.accuracy_core_key(cell) in legacy): + continue + key = ( + variant, + benchmark_profiles.dataset_spec(cell), + cell["runtime_language"], + cell["batch_size"], + cell["sort_by_length"], + cell["timestamps"], + cell["gpu"], + cell["backend"], + ) + invocations.setdefault(key, set()).add(cell["quant"]) + + # Then combine models whose complete invocation recipe and missing quant + # set are identical. FLEURS commonly collapses dozens of model cells into + # one Modal sweep per language. + grouped: dict[tuple, list[str]] = {} + for key, quants in invocations.items(): + variant, dataset, language, batch_size, sort, timestamps, gpu, backend = key + group_key = (dataset, language, batch_size, sort, timestamps, gpu, backend, + tuple(sorted(quants))) + grouped.setdefault(group_key, []).append(variant) + + print(f"publication profile {profile_id}: {len(invocations)} model/dataset " + f"invocation(s), grouped into {len(grouped)} Modal sweep(s)") + for index, (key, variants) in enumerate(sorted(grouped.items()), 1): + dataset, language, batch_size, sort, timestamps, gpu, backend, quants = key + print(f" [{index}/{len(grouped)}] {dataset} language={language} " + f"batch={batch_size} gpu={gpu}/{backend} quants={','.join(quants)} " + f"models={','.join(sorted(variants))}") + if plan_only: + continue + sweep( + models=",".join(sorted(variants)), + dataset=dataset, + quants=",".join(quants), + gpu=gpu, + n_utts=-1, + clean=clean and index == 1, + batch_sizes=str(batch_size), + sort_by_length=sort, + timestamps=timestamps, + language=language, + publication_profile=profile_id, + backend=backend, + ) + + @app.local_entrypoint() def batch_sweep( model: str, @@ -1039,7 +1179,8 @@ def batch_sweep( # Launch all batch sizes in parallel (each its own container). Pass the # locally-computed build_dir so the runner reads exactly what build() wrote. futs = [(bs, runner.spawn(repo, model_file, dataset, n, bs, sort_by_length, - build_dir, "none", language, 0, -1, dataset_status)) + build_dir, "none", language, 0, -1, dataset_status, + _local_engine_sha(), "", "")) for bs in sizes] rows: list[tuple] = [] diff --git a/scripts/wer/remote/model_specs.py b/scripts/wer/remote/model_specs.py index ced3bcee..13f093c5 100644 --- a/scripts/wer/remote/model_specs.py +++ b/scripts/wer/remote/model_specs.py @@ -1,5 +1,6 @@ from __future__ import annotations +import json from pathlib import Path @@ -9,31 +10,29 @@ def resolve_model(root: Path, spec: str) -> tuple[str, list[str] | None]: Rules: - Spec contains '/': treat as a HF repo path. Filenames are None (caller will discover via the HF API at dispatch time). - - Otherwise: treat as an hf_card slug. Reads - scripts/hf_cards/.yaml, returns its target_repo and the - pinned `quants[].filename` list. + - Otherwise: treat as a variant slug and read catalog/.json for + `published_repo` and the `downloads[].filename` list. + + The catalog is the source here because that is where the published repo + and quant set now live. scripts/hf_cards/.yaml used to carry + `target_repo` and `quants[].filename`; both are derived from the catalog + now, so a card no longer states them and parsing it finds nothing. """ if "/" in spec: return spec, None - card_path = root / "scripts" / "hf_cards" / f"{spec}.yaml" - if not card_path.exists(): + + record_path = root / "catalog" / f"{spec}.json" + if not record_path.exists(): raise SystemExit( - f"no hf_card at {card_path}; pass a HF repo path " - f"(e.g. handy-computer/{spec}-gguf) if the card doesn't exist yet" + f"no catalog record at {record_path}; pass a HF repo path " + f"(e.g. handy-computer/{spec}-gguf) if the variant isn't in the " + f"catalog yet" ) - # Tiny manual parser so the local entrypoint has no non-stdlib deps. The card - # schema has target_repo at top level and filename: only under quants[]. - target_repo: str | None = None - filenames: list[str] = [] - for raw in open(card_path): - line = raw.split("#", 1)[0].rstrip() - stripped = line.strip() - if line.startswith("target_repo:"): - target_repo = line.split(":", 1)[1].strip() - elif stripped.startswith("filename:"): - filenames.append(stripped.split(":", 1)[1].strip()) - if not target_repo: - raise SystemExit(f"hf_card {spec!r}: missing target_repo") + record = json.loads(record_path.read_text()) + repo = record.get("published_repo") + if not repo: + raise SystemExit(f"catalog record {spec!r}: no published_repo") + filenames = [d["filename"] for d in record.get("downloads", []) if d.get("filename")] if not filenames: - raise SystemExit(f"hf_card {spec!r} has no quants[].filename entries") - return target_repo, filenames + raise SystemExit(f"catalog record {spec!r} has no downloads[].filename entries") + return repo, filenames diff --git a/scripts/wer/run.py b/scripts/wer/run.py index 7c281891..5d12bed2 100644 --- a/scripts/wer/run.py +++ b/scripts/wer/run.py @@ -168,6 +168,27 @@ def resolve_dataset(repo: Path, spec: str) -> tuple[Path, str | None]: return manifest, default_lang +def engine_sha() -> str | None: + """Short SHA of the checkout that built transcribe-cli, if it is a repo. + + TRANSCRIBE_ENGINE_SHA overrides the lookup, for a runner that has the + binary but not the checkout: a Modal container is handed a source tree + with no .git, so `git rev-parse` there finds nothing and every remote + sweep would land an unattributable row. The dispatcher passes the sha of + the tree it built from instead. + """ + override = os.environ.get("TRANSCRIBE_ENGINE_SHA", "").strip() + if override: + return override + try: + out = subprocess.run(["git", "rev-parse", "--short", "HEAD"], + capture_output=True, text=True, timeout=5, + cwd=Path(__file__).resolve().parents[2]) + return out.stdout.strip() or None if out.returncode == 0 else None + except (OSError, subprocess.SubprocessError): + return None + + def main() -> int: repo = find_repo_root(Path(__file__).parent) @@ -202,7 +223,7 @@ def main() -> int: "batched encoder pads to the group max). Output is " "keyed by file, so id mapping is preserved.") p.add_argument("--backend", - choices=("auto", "cpu", "cpu_accel", "metal", "vulkan"), + choices=("auto", "cpu", "cpu_accel", "metal", "vulkan", "cuda"), default=None, help="Compute backend (default: transcribe-cli default)") p.add_argument("--kv-type", @@ -217,6 +238,9 @@ def main() -> int: p.add_argument("--diarize", action="store_true", help="Request diarization and retain timed speaker " "intervals for scripts/wer/der.py") + p.add_argument("--publication-profile", default="", + help="publication profile that selected this run; normally " + "set by the profile-aware local or Modal dispatcher") p.add_argument("--stream-chunk-ms", type=int, default=0, help="When > 0, drive each utterance through the " "streaming API in N-ms chunks. Requires a model " @@ -433,6 +457,11 @@ def _dur(e: dict) -> float: "backend": args.backend or "default", "kv_type": args.kv_type or "default", "decode": "greedy+default-fallback", + # The build that produced the hypotheses. A score with no + # engine behind it cannot be reproduced or superseded, and + # the catalog refuses to publish one. + "engine_sha": engine_sha(), + "publication_profile": args.publication_profile or None, } fout.write(json.dumps(result) + "\n") fout.flush() diff --git a/scripts/wer/score.py b/scripts/wer/score.py index 7061c3aa..60d0db37 100644 --- a/scripts/wer/score.py +++ b/scripts/wer/score.py @@ -11,7 +11,7 @@ Routes the metric and text normalizer by language: en → WER + EnglishTextNormalizer - zh/yue/ja/ko/th → CER + BasicTextNormalizer + zh/yue/ja/ko/th/km/lo/my → CER + BasicTextNormalizer other → WER + BasicTextNormalizer Region suffixes (zh-tw, pt-br, ...) are stripped for routing, so @@ -47,10 +47,7 @@ from whisper_normalizer.basic import BasicTextNormalizer from whisper_normalizer.english import EnglishTextNormalizer - -# Languages where CER is the canonical metric. Region suffix is stripped -# before lookup so zh / zh-cn / zh-tw all resolve to the same set entry. -CER_LANGUAGES = {"zh", "yue", "ja", "ko", "th"} +from languages import CER_LANGUAGES # Optional diarization metadata spans: timestamps `[6.98]`, speaker tags @@ -154,6 +151,7 @@ def main() -> int: # per-utterance results. entries: list[dict] = [] header_language: str | None = None + recipe: dict = {} with open(args.report) as f: for line in f: if not line.strip(): @@ -161,6 +159,10 @@ def main() -> int: rec = json.loads(line) if rec.get("type") == "batch_header": header_language = rec.get("language") + # The decode recipe travels with the score, not just with the + # hypotheses: a WER is only comparable to another WER measured + # the same way, and the catalog keys its rows on it. + recipe = rec.get("recipe") or {} continue entries.append(rec) @@ -283,6 +285,10 @@ def main() -> int: "latency_p50_ms": round(lat_p50, 1), "latency_p99_ms": round(lat_p99, 1), "report_file": str(args.report), + "recipe": recipe, + "timestamps": recipe.get("timestamps"), + "batch_size": recipe.get("batch_size"), + "engine_sha": recipe.get("engine_sha"), "per_utterance": per_utt, } # Backward-compat aliases for WER reports. porting-7-wer SKILL.md From 45e34267702311ce613cfab03979d0ac81692ea9 Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sun, 13 Sep 2026 03:22:59 -0700 Subject: [PATCH 06/24] update cards which got broke --- .claude/skills/porting-8-ship/SKILL.md | 16 +- .github/workflows/catalog.yml | 17 +- README.md | 12 +- catalog/_schema.json | 8 +- catalog/cohere-transcribe-arabic-07-2026.json | 6 + .../diar_streaming_sortformer_4spk-v2.1.json | 53 ++++ catalog/gigaam-v3-ctc.json | 10 +- catalog/gigaam-v3-e2e-ctc.json | 12 +- catalog/gigaam-v3-e2e-rnnt.json | 10 +- catalog/gigaam-v3-rnnt.json | 10 +- catalog/moonshine-base-ar.json | 7 +- catalog/moonshine-base-ja.json | 7 +- catalog/moonshine-base-ko.json | 7 +- catalog/moonshine-base-uk.json | 7 +- catalog/moonshine-base-vi.json | 7 +- catalog/moonshine-base-zh.json | 7 +- catalog/moonshine-tiny-ar.json | 7 +- catalog/moonshine-tiny-ja.json | 7 +- catalog/moonshine-tiny-ko.json | 7 +- catalog/moonshine-tiny-uk.json | 7 +- catalog/moonshine-tiny-vi.json | 7 +- catalog/moonshine-tiny-zh.json | 7 +- catalog/nemotron-3.5-asr-streaming-0.6b.json | 10 +- catalog/parakeet-primeline.json | 10 +- .../cohere-transcribe-arabic-07-2026.md | 10 +- .../diar_streaming_sortformer_4spk-v2.1.md | 2 + docs/models/gigaam-v3-ctc.md | 12 +- docs/models/gigaam-v3-e2e-ctc.md | 12 +- docs/models/gigaam-v3-e2e-rnnt.md | 12 +- docs/models/gigaam-v3-rnnt.md | 12 +- docs/models/parakeet-primeline.md | 12 +- scripts/catalog/cards.py | 24 +- scripts/catalog/check.py | 74 +++--- scripts/catalog/sync_hf_cards.py | 230 ++++++++++++++++++ scripts/hf_cards/breeze-asr-25.yaml | 35 +++ scripts/hf_cards/canary-180m-flash.yaml | 53 ++++ scripts/hf_cards/canary-1b-flash.yaml | 53 ++++ scripts/hf_cards/canary-1b-v2.yaml | 74 ++++++ scripts/hf_cards/canary-1b.yaml | 53 ++++ scripts/hf_cards/canary-qwen-2.5b.yaml | 50 ++++ .../hf_cards/cohere-transcribe-03-2026.yaml | 43 ++++ .../cohere-transcribe-arabic-07-2026.yaml | 75 ++++++ .../diar_streaming_sortformer_4spk-v2.1.yaml | 64 +++++ scripts/hf_cards/fun-asr-mlt-nano-2512.yaml | 85 +++++++ scripts/hf_cards/fun-asr-nano-2512.yaml | 57 +++++ scripts/hf_cards/generate.py | 24 +- scripts/hf_cards/gigaam-v3-ctc.yaml | 53 ++++ scripts/hf_cards/gigaam-v3-e2e-ctc.yaml | 32 +++ scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml | 53 ++++ scripts/hf_cards/gigaam-v3-rnnt.yaml | 53 ++++ scripts/hf_cards/granite-4.0-1b-speech.yaml | 55 +++++ .../hf_cards/granite-speech-4.1-2b-nar.yaml | 54 ++++ .../hf_cards/granite-speech-4.1-2b-plus.yaml | 48 ++++ scripts/hf_cards/granite-speech-4.1-2b.yaml | 55 +++++ scripts/hf_cards/medasr.yaml | 50 ++++ scripts/hf_cards/moonshine-base-ar.yaml | 37 +++ scripts/hf_cards/moonshine-base-ja.yaml | 37 +++ scripts/hf_cards/moonshine-base-ko.yaml | 37 +++ scripts/hf_cards/moonshine-base-uk.yaml | 37 +++ scripts/hf_cards/moonshine-base-vi.yaml | 37 +++ scripts/hf_cards/moonshine-base-zh.yaml | 37 +++ scripts/hf_cards/moonshine-base.yaml | 38 +++ .../hf_cards/moonshine-streaming-medium.yaml | 38 +++ .../hf_cards/moonshine-streaming-small.yaml | 38 +++ .../hf_cards/moonshine-streaming-tiny.yaml | 38 +++ scripts/hf_cards/moonshine-tiny-ar.yaml | 37 +++ scripts/hf_cards/moonshine-tiny-ja.yaml | 37 +++ scripts/hf_cards/moonshine-tiny-ko.yaml | 37 +++ scripts/hf_cards/moonshine-tiny-uk.yaml | 37 +++ scripts/hf_cards/moonshine-tiny-vi.yaml | 37 +++ scripts/hf_cards/moonshine-tiny-zh.yaml | 37 +++ scripts/hf_cards/moonshine-tiny.yaml | 38 +++ scripts/hf_cards/moss-transcribe-diarize.yaml | 47 ++++ ...ultitalker-parakeet-streaming-0.6b-v1.yaml | 56 +++++ .../nemotron-3.5-asr-streaming-0.6b.yaml | 55 +++++ .../nemotron-speech-streaming-en-0.6b.yaml | 54 ++++ scripts/hf_cards/parakeet-ctc-0.6b.yaml | 50 ++++ scripts/hf_cards/parakeet-ctc-1.1b.yaml | 50 ++++ scripts/hf_cards/parakeet-primeline.yaml | 53 ++++ scripts/hf_cards/parakeet-rnnt-0.6b.yaml | 50 ++++ scripts/hf_cards/parakeet-rnnt-1.1b.yaml | 50 ++++ scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml | 50 ++++ scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml | 74 ++++++ scripts/hf_cards/parakeet-tdt-1.1b.yaml | 50 ++++ scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml | 50 ++++ scripts/hf_cards/parakeet-tdt_ctc-110m.yaml | 50 ++++ .../hf_cards/parakeet-unified-en-0.6b.yaml | 49 ++++ scripts/hf_cards/qwen3-asr-0.6b.yaml | 79 ++++++ scripts/hf_cards/qwen3-asr-1.7b.yaml | 79 ++++++ scripts/hf_cards/sensevoice-small.yaml | 60 +++++ scripts/hf_cards/template.md.j2 | 5 +- scripts/hf_cards/voxtral-mini-3b-2507.yaml | 58 +++++ .../voxtral-mini-4b-realtime-2602.yaml | 63 +++++ scripts/hf_cards/voxtral-small-24b-2507.yaml | 54 ++++ scripts/hf_cards/whisper-base.en.yaml | 51 ++++ scripts/hf_cards/whisper-base.yaml | 54 ++++ scripts/hf_cards/whisper-large-v2.yaml | 53 ++++ scripts/hf_cards/whisper-large-v3-turbo.yaml | 51 +++- scripts/hf_cards/whisper-large-v3.yaml | 49 ++++ scripts/hf_cards/whisper-large.yaml | 54 ++++ scripts/hf_cards/whisper-medium.en.yaml | 50 ++++ scripts/hf_cards/whisper-medium.yaml | 54 ++++ scripts/hf_cards/whisper-small.en.yaml | 51 ++++ scripts/hf_cards/whisper-small.yaml | 53 ++++ scripts/hf_cards/whisper-tiny.en.yaml | 29 +++ scripts/hf_cards/whisper-tiny.yaml | 53 ++++ 106 files changed, 4030 insertions(+), 169 deletions(-) create mode 100644 catalog/diar_streaming_sortformer_4spk-v2.1.json create mode 100755 scripts/catalog/sync_hf_cards.py diff --git a/.claude/skills/porting-8-ship/SKILL.md b/.claude/skills/porting-8-ship/SKILL.md index de8d6bf1..4e93cd40 100644 --- a/.claude/skills/porting-8-ship/SKILL.md +++ b/.claude/skills/porting-8-ship/SKILL.md @@ -273,10 +273,18 @@ If `sync_capabilities.py` disagrees with what the model actually does, the GGUF is wrong and the fix is a converter change plus a re-export. Do not paper over it with an override in the card spec. -The HF card spec under `scripts/hf_cards/` carries editorial copy only: -summary, tags, pipeline tag, validation pin, prose notes. Repos, commit, -licence, languages, quant table, capability flags and per-rig speedups are all -derived from the catalog record. `check.py` fails if a spec re-states one. +The HF card spec under `scripts/hf_cards/` is a complete, committed input to +`generate.py`. Start with the editorial copy (summary, tags, pipeline tag, +validation pin and prose notes), then populate repos, commit, licence, +languages, quant table, capability flags and per-rig speedups from the catalog: + +```bash +uv run scripts/catalog/sync_hf_cards.py --write --models +``` + +Existing values are preserved unless `--refresh` is passed deliberately. +List exceptional hand-maintained fields under `catalog_sync.preserve` so a +refresh does not replace them. ## Postconditions diff --git a/.github/workflows/catalog.yml b/.github/workflows/catalog.yml index 4994352b..ebd4d8f2 100644 --- a/.github/workflows/catalog.yml +++ b/.github/workflows/catalog.yml @@ -31,18 +31,19 @@ jobs: - uses: astral-sh/setup-uv@v8.2.0 - name: Canonical formatting run: uv run catalog/_format.py --check catalog/*.json - - name: Schema, integrity, pairing and card specs + - name: Schema, integrity and pairing run: uv run scripts/catalog/check.py - - name: Published tables match the catalog - run: uv run scripts/catalog/render.py --check - - name: Catalog HF card specs render + - name: HF card specs are complete and consistent + run: | + uv run scripts/catalog/sync_hf_cards.py --check + uv run scripts/catalog/sync_hf_cards.py --check-consistency + - name: HF card specs render run: | - for record in catalog/*.json; do - variant="$(basename "$record" .json)" - case "$variant" in _*) continue ;; esac - spec="scripts/hf_cards/$variant.yaml" + for spec in scripts/hf_cards/*.yaml; do uv run scripts/hf_cards/generate.py "$spec" --skip-upstream --stdout > /dev/null done + - name: Published tables match the catalog + run: uv run scripts/catalog/render.py --check - name: Rebuild portable database run: | uv run scripts/catalog/db.py --out "$RUNNER_TEMP/catalog.db" diff --git a/README.md b/README.md index d3b3c277..45d0e3f7 100644 --- a/README.md +++ b/README.md @@ -55,12 +55,16 @@ only what sits between the pair: ``` The Hugging Face card specs under [`scripts/hf_cards/`](scripts/hf_cards/) -work the same way: they carry only editorial copy (summary, tags, validation -pin) and `generate.py` derives the repos, licence, languages, quant table and -per-rig speedups from the record. CI fails if either drifts. +are complete, committed inputs to `generate.py`. To create or deliberately +refresh their mechanical fields (repos, licence, languages, capabilities, +quant table, and per-rig speedups) from the catalog, use +`scripts/catalog/sync_hf_cards.py`; editorial copy stays in the YAML. Exceptional +hand-maintained fields can be listed under `catalog_sync.preserve`. ```bash -uv run scripts/catalog/check.py # schema, integrity, pairing, card specs +uv run scripts/catalog/check.py # schema, integrity, pairing +uv run scripts/catalog/sync_hf_cards.py --check +uv run scripts/catalog/sync_hf_cards.py --check-consistency uv run scripts/catalog/render.py # rewrite the marked doc regions uv run scripts/catalog/render.py --check ``` diff --git a/catalog/_schema.json b/catalog/_schema.json index 1b1fc8dc..400d6220 100644 --- a/catalog/_schema.json +++ b/catalog/_schema.json @@ -4,6 +4,7 @@ "title": "transcribe.cpp model catalog record", "description": "", "type": "object", + "additionalProperties": false, "required": [ "schema", "variant", "family", "display_name", "params", "license", "upstream_repo", "upstream_commit", "published_repo", "languages", @@ -36,6 +37,7 @@ }, "license": { "type": "object", + "additionalProperties": false, "required": ["spdx","display"], "properties": { "spdx": { @@ -230,7 +232,7 @@ "type": ["string","null"], "description": "buffered | cache-aware | native." }, - "presets": {"type":["array","null"],"items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"left_ms":{"type":["number","null"]},"chunk_ms":{"type":["number","null"]},"right_ms":{"type":["number","null"]},"lookahead_ms":{"type":["number","null"],"description":"Audio that must be buffered before a chunk's tokens emit. The number a user feels."},"is_default":{"type":["boolean","null"]}}}} + "presets": {"type":["array","null"],"items":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string"},"left_ms":{"type":["number","null"]},"chunk_ms":{"type":["number","null"]},"right_ms":{"type":["number","null"]},"lookahead_ms":{"type":["number","null"],"description":"Audio that must be buffered before a chunk's tokens emit. The number a user feels."},"is_default":{"type":["boolean","null"]}}}} } }, "diarize": { @@ -278,6 +280,7 @@ "description": "The GGUF files we publish.", "items": { "type": "object", + "additionalProperties": false, "required": ["quant","filename","size_bytes"], "properties": { "quant": { @@ -300,6 +303,7 @@ "description": "Published measurements only. New rows match a cell selected by catalog/_benchmark_profiles.json exactly; legacy-published rows may satisfy the same dataset/language/quant/metric under their honestly recorded historical recipe. Full dataset splits only -- a subset run is a bring-up artifact, not a published benchmark.", "items": { "type": "object", + "additionalProperties": false, "required": [ "dataset", "split", "language", "quant", "metric", "err_pct", "ci95", "n_utts", "batch_size", "timestamps", "engine_sha" @@ -373,6 +377,7 @@ }, "errors": { "type": "object", + "additionalProperties": false, "properties": { "sub": { "type": "integer" @@ -429,6 +434,7 @@ "description": "Published measurements only, one row per quant/sample/machine/backend cell selected by catalog/_benchmark_profiles.json. The profile also owns iteration and warmup counts and thermal preconditions; rows carry the measured identity and result.", "items": { "type": "object", + "additionalProperties": false, "required": [ "machine", "backend", "quant", "sample", "sample_duration_s", "total_ms", "xrt_compute", "engine_sha" diff --git a/catalog/cohere-transcribe-arabic-07-2026.json b/catalog/cohere-transcribe-arabic-07-2026.json index b17a668a..83090881 100644 --- a/catalog/cohere-transcribe-arabic-07-2026.json +++ b/catalog/cohere-transcribe-arabic-07-2026.json @@ -31,8 +31,14 @@ {"quant":"Q4_K_M","filename":"cohere-transcribe-arabic-07-2026-Q4_K_M.gguf","size_bytes":1558162848} ], "accuracy_benchmarks": [ + {"dataset":"fleurs","split":"test","language":"ar","quant":"BF16","metric":"wer","err_pct":11.02,"ci95":[9.64,12.53],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":527,"del":286,"ins":95},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"F16","metric":"wer","err_pct":11.0,"ci95":[9.6,12.5],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":525,"del":286,"ins":95},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":11.06,"ci95":[9.62,12.6],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":515,"del":293,"ins":103},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q6_K","metric":"wer","err_pct":11.07,"ci95":[9.63,12.59],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":517,"del":289,"ins":106},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q5_K_M","metric":"wer","err_pct":10.95,"ci95":[9.5,12.49],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":517,"del":298,"ins":87},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q4_K_M","metric":"wer","err_pct":11.18,"ci95":[9.78,12.67],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":526,"del":288,"ins":107},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":4.88,"ci95":[4.25,5.61],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":396,"del":222,"ins":93},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":4.88,"ci95":[4.25,5.57],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":402,"del":215,"ins":93},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":1.34,"ci95":[1.21,1.48],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":531,"del":98,"ins":80},"empty_hyp":0,"utts_over_50pct":2}, {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"BF16","metric":"wer","err_pct":1.33,"ci95":[1.2,1.47],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":527,"del":99,"ins":81},"empty_hyp":0,"utts_over_50pct":2}, {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"F16","metric":"wer","err_pct":1.33,"ci95":[1.2,1.47],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":527,"del":99,"ins":81},"empty_hyp":0,"utts_over_50pct":2}, diff --git a/catalog/diar_streaming_sortformer_4spk-v2.1.json b/catalog/diar_streaming_sortformer_4spk-v2.1.json new file mode 100644 index 00000000..2351f3dc --- /dev/null +++ b/catalog/diar_streaming_sortformer_4spk-v2.1.json @@ -0,0 +1,53 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "diar_streaming_sortformer_4spk-v2.1", + "family": "sortformer", + "display_name": "diar_streaming_sortformer_4spk-v2.1", + "params": 117711368, + "license": { + "spdx": "other", + "display": "NVIDIA Open Model License" + }, + "upstream_repo": "nvidia/diar_streaming_sortformer_4spk-v2.1", + "upstream_commit": "fafaab5", + "published_repo": "handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf", + "languages": ["en"], + "long_form_strategy": "hard-cap", + "capabilities": { + "transcribe": {"supported":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":true,"verified":false}, + "diarize": {"supported":true,"max_speakers":4,"verified":false}, + "batching": {"supported":false} + }, + "downloads": [ + {"quant":"F32","filename":"diar_streaming_sortformer_4spk-v2.1-F32.gguf","size_bytes":470910560}, + {"quant":"F16","filename":"diar_streaming_sortformer_4spk-v2.1-F16.gguf","size_bytes":236606560}, + {"quant":"Q8_0","filename":"diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf","size_bytes":139310336} + ], + "accuracy_benchmarks": [ + {"dataset":"ami","split":"ihm-test","language":"en","quant":"F32","metric":"der","err_pct":14.59,"ci95":[null,null],"n_utts":16,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"ami","split":"ihm-test","language":"en","quant":"F16","metric":"der","err_pct":14.23,"ci95":[null,null],"n_utts":16,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"ami","split":"ihm-test","language":"en","quant":"Q8_0","metric":"der","err_pct":14.73,"ci95":[null,null],"n_utts":16,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} + ], + "headline_benchmark": { + "dataset": "ami", + "split": "ihm-test", + "language": "en", + "metric": "der", + "batch_size": null, + "timestamps": null + }, + "speed_benchmarks": [ + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":136.3,"xrt_compute":80.679,"load_ms":66.4,"mel_ms":0.0,"encode_ms":136.3,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"F16","sample":"dots","sample_duration_s":35.332,"total_ms":794.2,"xrt_compute":44.487,"load_ms":68.5,"mel_ms":0.0,"encode_ms":794.2,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":108.8,"xrt_compute":101.092,"load_ms":49.4,"mel_ms":0.0,"encode_ms":108.8,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":684.9,"xrt_compute":51.588,"load_ms":49.9,"mel_ms":0.0,"encode_ms":684.9,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":68.2,"xrt_compute":161.226,"load_ms":155.2,"mel_ms":0.0,"encode_ms":68.2,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"dots","sample_duration_s":35.332,"total_ms":316.0,"xrt_compute":111.806,"load_ms":68.4,"mel_ms":0.0,"encode_ms":316.0,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":63.8,"xrt_compute":172.416,"load_ms":104.6,"mel_ms":0.0,"encode_ms":63.8,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":317.9,"xrt_compute":111.157,"load_ms":50.4,"mel_ms":0.0,"encode_ms":317.9,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null} + ] +} diff --git a/catalog/gigaam-v3-ctc.json b/catalog/gigaam-v3-ctc.json index 7c5c02b1..05f15391 100644 --- a/catalog/gigaam-v3-ctc.json +++ b/catalog/gigaam-v3-ctc.json @@ -31,14 +31,20 @@ {"quant":"Q4_K_M","filename":"gigaam-v3-ctc-Q4_K_M.gguf","size_bytes":182150080} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.42,"ci95":[7.64,9.15],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":924,"del":104,"ins":243},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.42,"ci95":[7.64,9.15],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":924,"del":104,"ins":243},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"F32","metric":"wer","err_pct":8.42,"ci95":[7.66,9.16],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":925,"del":104,"ins":242},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"F16","metric":"wer","err_pct":8.42,"ci95":[7.66,9.16],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":925,"del":104,"ins":242},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.4,"ci95":[7.65,9.16],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":923,"del":105,"ins":241},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q6_K","metric":"wer","err_pct":8.38,"ci95":[7.64,9.14],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":921,"del":105,"ins":240},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":8.29,"ci95":[7.55,9.02],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":908,"del":103,"ins":241},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q4_K_M","metric":"wer","err_pct":8.42,"ci95":[7.67,9.15],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":926,"del":105,"ins":240},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "ru", "metric": "wer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/gigaam-v3-e2e-ctc.json b/catalog/gigaam-v3-e2e-ctc.json index 7742c068..4fb14833 100644 --- a/catalog/gigaam-v3-e2e-ctc.json +++ b/catalog/gigaam-v3-e2e-ctc.json @@ -31,15 +31,21 @@ {"quant":"Q4_K_M","filename":"gigaam-v3-e2e-ctc-Q4_K_M.gguf","size_bytes":182497888} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.53,"ci95":[5.01,6.07],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":702,"del":84,"ins":49},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.53,"ci95":[5.01,6.07],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":702,"del":84,"ins":49},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"F32","metric":"wer","err_pct":5.5,"ci95":[4.99,6.08],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":699,"del":84,"ins":48},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"F16","metric":"wer","err_pct":5.5,"ci95":[4.99,6.08],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":699,"del":84,"ins":48},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.5,"ci95":[4.98,6.07],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":699,"del":83,"ins":48},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q6_K","metric":"wer","err_pct":5.56,"ci95":[5.03,6.14],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":704,"del":84,"ins":52},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":5.58,"ci95":[5.04,6.15],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":705,"del":86,"ins":51},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q4_K_M","metric":"wer","err_pct":5.57,"ci95":[null,null],"n_utts":775,"batch_size":null,"timestamps":null,"engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "ru", "metric": "wer", - "batch_size": 8, - "timestamps": "none" + "batch_size": null, + "timestamps": null }, "speed_benchmarks": [ {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, diff --git a/catalog/gigaam-v3-e2e-rnnt.json b/catalog/gigaam-v3-e2e-rnnt.json index 2999645f..078923b0 100644 --- a/catalog/gigaam-v3-e2e-rnnt.json +++ b/catalog/gigaam-v3-e2e-rnnt.json @@ -31,14 +31,20 @@ {"quant":"Q4_K_M","filename":"gigaam-v3-e2e-rnnt-Q4_K_M.gguf","size_bytes":183948704} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.35,"ci95":[4.85,5.9],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":98,"ins":49},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.35,"ci95":[4.85,5.9],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":98,"ins":49},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"F32","metric":"wer","err_pct":5.35,"ci95":[4.85,5.9],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":98,"ins":49},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"F16","metric":"wer","err_pct":5.35,"ci95":[4.85,5.9],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":98,"ins":49},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":5.36,"ci95":[4.87,5.89],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":661,"del":97,"ins":51},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q6_K","metric":"wer","err_pct":5.37,"ci95":[4.89,5.9],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":665,"del":98,"ins":48},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":5.42,"ci95":[4.94,5.97],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":672,"del":95,"ins":52},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q4_K_M","metric":"wer","err_pct":5.36,"ci95":[4.84,5.94],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":671,"del":94,"ins":44},"empty_hyp":0,"utts_over_50pct":1,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "ru", "metric": "wer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/gigaam-v3-rnnt.json b/catalog/gigaam-v3-rnnt.json index f5498b92..eeedbb37 100644 --- a/catalog/gigaam-v3-rnnt.json +++ b/catalog/gigaam-v3-rnnt.json @@ -31,14 +31,20 @@ {"quant":"Q4_K_M","filename":"gigaam-v3-rnnt-Q4_K_M.gguf","size_bytes":183246752} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.07,"ci95":[7.34,8.79],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":897,"del":100,"ins":222},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.07,"ci95":[7.34,8.79],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":897,"del":100,"ins":222},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"F32","metric":"wer","err_pct":8.08,"ci95":[7.36,8.78],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":99,"ins":221},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"F16","metric":"wer","err_pct":8.08,"ci95":[7.36,8.78],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":99,"ins":221},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q8_0","metric":"wer","err_pct":8.08,"ci95":[7.35,8.78],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":899,"del":99,"ins":222},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q6_K","metric":"wer","err_pct":8.07,"ci95":[7.35,8.78],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":97,"ins":222},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q5_K_M","metric":"wer","err_pct":8.12,"ci95":[7.38,8.84],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":98,"ins":228},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ru","quant":"Q4_K_M","metric":"wer","err_pct":8.12,"ci95":[7.4,8.85],"n_utts":775,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":901,"del":104,"ins":222},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "ru", "metric": "wer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/moonshine-base-ar.json b/catalog/moonshine-base-ar.json index d247fe17..2f01741e 100644 --- a/catalog/moonshine-base-ar.json +++ b/catalog/moonshine-base-ar.json @@ -28,14 +28,17 @@ {"quant":"Q8_0","filename":"moonshine-base-ar-Q8_0.gguf","size_bytes":77476480} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":24.62,"ci95":[21.58,27.85],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1316,"del":332,"ins":380},"empty_hyp":0,"utts_over_50pct":40,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":24.62,"ci95":[21.58,27.85],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1316,"del":332,"ins":380},"empty_hyp":0,"utts_over_50pct":40,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"F32","metric":"wer","err_pct":24.45,"ci95":[21.6,27.71],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1302,"del":335,"ins":377},"empty_hyp":0,"utts_over_50pct":38,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"F16","metric":"wer","err_pct":24.45,"ci95":[21.6,27.71],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1302,"del":335,"ins":377},"empty_hyp":0,"utts_over_50pct":38,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":24.5,"ci95":[21.63,27.8],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1308,"del":335,"ins":375},"empty_hyp":0,"utts_over_50pct":38,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "ar", "metric": "wer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/moonshine-base-ja.json b/catalog/moonshine-base-ja.json index 6fcae29d..f367dbac 100644 --- a/catalog/moonshine-base-ja.json +++ b/catalog/moonshine-base-ja.json @@ -28,14 +28,17 @@ {"quant":"Q8_0","filename":"moonshine-base-ja-Q8_0.gguf","size_bytes":77476480} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":11.11,"ci95":[10.05,12.36],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2075,"del":750,"ins":803},"empty_hyp":0,"utts_over_50pct":16,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":11.11,"ci95":[10.05,12.36],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2075,"del":750,"ins":803},"empty_hyp":0,"utts_over_50pct":16,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"F32","metric":"cer","err_pct":10.84,"ci95":[9.82,11.93],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2046,"del":765,"ins":727},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"F16","metric":"cer","err_pct":10.81,"ci95":[9.8,11.89],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2048,"del":764,"ins":718},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":10.53,"ci95":[9.62,11.56],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2023,"del":767,"ins":649},"empty_hyp":0,"utts_over_50pct":14,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "ja", "metric": "cer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/moonshine-base-ko.json b/catalog/moonshine-base-ko.json index bdbe4f63..bdf71e50 100644 --- a/catalog/moonshine-base-ko.json +++ b/catalog/moonshine-base-ko.json @@ -28,14 +28,17 @@ {"quant":"Q8_0","filename":"moonshine-base-ko-Q8_0.gguf","size_bytes":77476480} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.12,"ci95":[6.89,9.5],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":701,"del":646,"ins":88},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.12,"ci95":[6.89,9.5],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":701,"del":646,"ins":88},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"F32","metric":"cer","err_pct":8.0,"ci95":[6.76,9.28],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":700,"del":620,"ins":95},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"F16","metric":"cer","err_pct":8.0,"ci95":[6.76,9.28],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":700,"del":620,"ins":95},"empty_hyp":0,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.13,"ci95":[6.88,9.51],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":703,"del":646,"ins":88},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "ko", "metric": "cer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/moonshine-base-uk.json b/catalog/moonshine-base-uk.json index 24246da5..b308e3fa 100644 --- a/catalog/moonshine-base-uk.json +++ b/catalog/moonshine-base-uk.json @@ -28,14 +28,17 @@ {"quant":"Q8_0","filename":"moonshine-base-uk-Q8_0.gguf","size_bytes":77476512} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":14.38,"ci95":[13.42,15.32],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1608,"del":194,"ins":265},"empty_hyp":0,"utts_over_50pct":17,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":14.38,"ci95":[13.42,15.32],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1608,"del":194,"ins":265},"empty_hyp":0,"utts_over_50pct":17,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"F32","metric":"wer","err_pct":14.49,"ci95":[13.45,15.47],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1615,"del":203,"ins":264},"empty_hyp":0,"utts_over_50pct":17,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"F16","metric":"wer","err_pct":14.49,"ci95":[13.45,15.47],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1615,"del":203,"ins":264},"empty_hyp":0,"utts_over_50pct":17,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":14.39,"ci95":[13.36,15.37],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1610,"del":199,"ins":259},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "uk", "metric": "wer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/moonshine-base-vi.json b/catalog/moonshine-base-vi.json index 89a0dbe7..a6fe362d 100644 --- a/catalog/moonshine-base-vi.json +++ b/catalog/moonshine-base-vi.json @@ -28,14 +28,17 @@ {"quant":"Q8_0","filename":"moonshine-base-vi-Q8_0.gguf","size_bytes":77476512} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.96,"ci95":[9.25,10.79],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2019,"del":295,"ins":277},"empty_hyp":1,"utts_over_50pct":6,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.96,"ci95":[9.25,10.79],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2019,"del":295,"ins":277},"empty_hyp":1,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"F32","metric":"wer","err_pct":9.67,"ci95":[9.06,10.33],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2013,"del":228,"ins":274},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"F16","metric":"wer","err_pct":9.66,"ci95":[9.06,10.33],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2013,"del":227,"ins":274},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":9.79,"ci95":[9.14,10.46],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2037,"del":229,"ins":281},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "vi", "metric": "wer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/moonshine-base-zh.json b/catalog/moonshine-base-zh.json index e5079f2a..a519862b 100644 --- a/catalog/moonshine-base-zh.json +++ b/catalog/moonshine-base-zh.json @@ -28,14 +28,17 @@ {"quant":"Q8_0","filename":"moonshine-base-zh-Q8_0.gguf","size_bytes":77476480} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":17.79,"ci95":[15.81,19.77],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2587,"del":1557,"ins":2200},"empty_hyp":0,"utts_over_50pct":59,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":17.79,"ci95":[15.81,19.77],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2587,"del":1557,"ins":2200},"empty_hyp":0,"utts_over_50pct":59,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"F32","metric":"cer","err_pct":16.65,"ci95":[14.89,18.64],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2450,"del":1561,"ins":1927},"empty_hyp":0,"utts_over_50pct":47,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"F16","metric":"cer","err_pct":16.65,"ci95":[14.89,18.64],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2450,"del":1561,"ins":1927},"empty_hyp":0,"utts_over_50pct":47,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":17.0,"ci95":[15.14,18.92],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2449,"del":1555,"ins":2057},"empty_hyp":0,"utts_over_50pct":52,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "zh", "metric": "cer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/moonshine-tiny-ar.json b/catalog/moonshine-tiny-ar.json index c33e77a0..7c69056e 100644 --- a/catalog/moonshine-tiny-ar.json +++ b/catalog/moonshine-tiny-ar.json @@ -28,14 +28,17 @@ {"quant":"Q8_0","filename":"moonshine-tiny-ar-Q8_0.gguf","size_bytes":35466944} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":26.7,"ci95":[24.08,29.47],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1597,"del":339,"ins":263},"empty_hyp":0,"utts_over_50pct":42,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":26.7,"ci95":[24.08,29.47],"n_utts":428,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1597,"del":339,"ins":263},"empty_hyp":0,"utts_over_50pct":42,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"F32","metric":"wer","err_pct":27.11,"ci95":[24.57,29.98],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1603,"del":343,"ins":287},"empty_hyp":0,"utts_over_50pct":44,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"F16","metric":"wer","err_pct":27.11,"ci95":[24.57,29.98],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1603,"del":343,"ins":287},"empty_hyp":0,"utts_over_50pct":44,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ar","quant":"Q8_0","metric":"wer","err_pct":26.79,"ci95":[24.3,29.6],"n_utts":428,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1597,"del":344,"ins":266},"empty_hyp":0,"utts_over_50pct":42,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "ar", "metric": "wer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/moonshine-tiny-ja.json b/catalog/moonshine-tiny-ja.json index 7dc64118..a2bf33ea 100644 --- a/catalog/moonshine-tiny-ja.json +++ b/catalog/moonshine-tiny-ja.json @@ -28,14 +28,17 @@ {"quant":"Q8_0","filename":"moonshine-tiny-ja-Q8_0.gguf","size_bytes":35466944} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":13.44,"ci95":[12.64,14.35],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3039,"del":712,"ins":638},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":13.44,"ci95":[12.64,14.35],"n_utts":650,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3039,"del":712,"ins":638},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"F32","metric":"cer","err_pct":13.2,"ci95":[12.42,14.14],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3010,"del":699,"ins":601},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"F16","metric":"cer","err_pct":13.2,"ci95":[12.41,14.15],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3010,"del":697,"ins":602},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ja","quant":"Q8_0","metric":"cer","err_pct":13.36,"ci95":[12.52,14.33],"n_utts":650,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":3056,"del":697,"ins":608},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "ja", "metric": "cer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/moonshine-tiny-ko.json b/catalog/moonshine-tiny-ko.json index 608b9ff8..4178ce1b 100644 --- a/catalog/moonshine-tiny-ko.json +++ b/catalog/moonshine-tiny-ko.json @@ -28,14 +28,17 @@ {"quant":"Q8_0","filename":"moonshine-tiny-ko-Q8_0.gguf","size_bytes":35466944} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":9.0,"ci95":[7.86,10.19],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":934,"del":561,"ins":96},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":9.0,"ci95":[7.86,10.19],"n_utts":382,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":934,"del":561,"ins":96},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"F32","metric":"cer","err_pct":8.97,"ci95":[7.8,10.21],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":930,"del":561,"ins":95},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"F16","metric":"cer","err_pct":8.97,"ci95":[7.8,10.21],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":930,"del":561,"ins":95},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"ko","quant":"Q8_0","metric":"cer","err_pct":8.98,"ci95":[7.79,10.24],"n_utts":382,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":932,"del":559,"ins":96},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "ko", "metric": "cer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/moonshine-tiny-uk.json b/catalog/moonshine-tiny-uk.json index e1547698..3e85e473 100644 --- a/catalog/moonshine-tiny-uk.json +++ b/catalog/moonshine-tiny-uk.json @@ -28,14 +28,17 @@ {"quant":"Q8_0","filename":"moonshine-tiny-uk-Q8_0.gguf","size_bytes":35466944} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":18.76,"ci95":[17.7,19.93],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2065,"del":229,"ins":402},"empty_hyp":0,"utts_over_50pct":40,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":18.76,"ci95":[17.7,19.93],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2065,"del":229,"ins":402},"empty_hyp":0,"utts_over_50pct":40,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"F32","metric":"wer","err_pct":18.83,"ci95":[17.77,20.0],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2075,"del":225,"ins":406},"empty_hyp":0,"utts_over_50pct":36,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"F16","metric":"wer","err_pct":18.82,"ci95":[17.76,19.99],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2074,"del":224,"ins":407},"empty_hyp":0,"utts_over_50pct":36,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"uk","quant":"Q8_0","metric":"wer","err_pct":18.89,"ci95":[17.83,20.04],"n_utts":750,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2081,"del":223,"ins":411},"empty_hyp":0,"utts_over_50pct":40,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "uk", "metric": "wer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/moonshine-tiny-vi.json b/catalog/moonshine-tiny-vi.json index d2b6bd01..1dff0dcb 100644 --- a/catalog/moonshine-tiny-vi.json +++ b/catalog/moonshine-tiny-vi.json @@ -28,14 +28,17 @@ {"quant":"Q8_0","filename":"moonshine-tiny-vi-Q8_0.gguf","size_bytes":35466944} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.37,"ci95":[12.57,14.23],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2801,"del":279,"ins":400},"empty_hyp":1,"utts_over_50pct":13,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.37,"ci95":[12.57,14.23],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2801,"del":279,"ins":400},"empty_hyp":1,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"F32","metric":"wer","err_pct":13.16,"ci95":[12.42,13.96],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2793,"del":227,"ins":404},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"F16","metric":"wer","err_pct":13.17,"ci95":[12.44,13.97],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2793,"del":227,"ins":407},"empty_hyp":0,"utts_over_50pct":13,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"vi","quant":"Q8_0","metric":"wer","err_pct":13.16,"ci95":[12.41,13.96],"n_utts":857,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2791,"del":230,"ins":404},"empty_hyp":0,"utts_over_50pct":12,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "vi", "metric": "wer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/moonshine-tiny-zh.json b/catalog/moonshine-tiny-zh.json index 284952eb..96b84d88 100644 --- a/catalog/moonshine-tiny-zh.json +++ b/catalog/moonshine-tiny-zh.json @@ -28,14 +28,17 @@ {"quant":"Q8_0","filename":"moonshine-tiny-zh-Q8_0.gguf","size_bytes":35466944} ], "accuracy_benchmarks": [ - {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":13.88,"ci95":[12.83,14.93],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2880,"del":1579,"ins":489},"empty_hyp":0,"utts_over_50pct":20,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":13.88,"ci95":[12.83,14.93],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2880,"del":1579,"ins":489},"empty_hyp":0,"utts_over_50pct":20,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"F32","metric":"cer","err_pct":13.7,"ci95":[12.7,14.68],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2843,"del":1574,"ins":467},"empty_hyp":0,"utts_over_50pct":18,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"F16","metric":"cer","err_pct":13.7,"ci95":[12.7,14.68],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2843,"del":1574,"ins":467},"empty_hyp":0,"utts_over_50pct":18,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":13.78,"ci95":[12.8,14.82],"n_utts":945,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":2846,"del":1581,"ins":487},"empty_hyp":0,"utts_over_50pct":18,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "zh", "metric": "cer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/nemotron-3.5-asr-streaming-0.6b.json b/catalog/nemotron-3.5-asr-streaming-0.6b.json index 1fe787c1..8c34bf5c 100644 --- a/catalog/nemotron-3.5-asr-streaming-0.6b.json +++ b/catalog/nemotron-3.5-asr-streaming-0.6b.json @@ -77,14 +77,20 @@ {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":3.05,"ci95":[2.85,3.26],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1267,"del":197,"ins":154},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":3.08,"ci95":[2.88,3.28],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1272,"del":204,"ins":157},"empty_hyp":0,"utts_over_50pct":8,"measurement_provenance":"legacy-published"}, {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":3.1,"ci95":[2.9,3.3],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1280,"del":203,"ins":159},"empty_hyp":0,"utts_over_50pct":9,"measurement_provenance":"legacy-published"}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.3,"ci95":[3.1,3.51],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1372,"del":219,"ins":161},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"} + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":3.3,"ci95":[3.1,3.51],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":1372,"del":219,"ins":161},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"F32","metric":"wer","err_pct":7.97,"ci95":[7.33,8.7],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":796,"del":265,"ins":99},"empty_hyp":1,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"F16","metric":"wer","err_pct":7.97,"ci95":[7.33,8.7],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":796,"del":264,"ins":100},"empty_hyp":1,"utts_over_50pct":4,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q8_0","metric":"wer","err_pct":7.88,"ci95":[7.25,8.52],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":808,"del":235,"ins":104},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q6_K","metric":"wer","err_pct":8.02,"ci95":[7.39,8.71],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":824,"del":228,"ins":116},"empty_hyp":0,"utts_over_50pct":2,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":8.15,"ci95":[7.46,8.88],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":805,"del":282,"ins":99},"empty_hyp":1,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":8.49,"ci95":[7.8,9.23],"n_utts":647,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":840,"del":289,"ins":107},"empty_hyp":1,"utts_over_50pct":4,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "en", "metric": "wer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/catalog/parakeet-primeline.json b/catalog/parakeet-primeline.json index cde2b2ec..f38795d8 100644 --- a/catalog/parakeet-primeline.json +++ b/catalog/parakeet-primeline.json @@ -65,14 +65,20 @@ {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"F16","metric":"wer","err_pct":2.19,"ci95":[2.04,2.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":866,"del":227,"ins":69},"empty_hyp":0,"utts_over_50pct":5}, {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q6_K","metric":"wer","err_pct":2.19,"ci95":[2.04,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":870,"del":225,"ins":67},"empty_hyp":0,"utts_over_50pct":5}, {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q5_K_M","metric":"wer","err_pct":2.2,"ci95":[2.04,2.37],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":868,"del":228,"ins":70},"empty_hyp":0,"utts_over_50pct":4}, - {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q4_K_M","metric":"wer","err_pct":2.26,"ci95":[2.09,2.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":899,"del":231,"ins":70},"empty_hyp":0,"utts_over_50pct":5} + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q4_K_M","metric":"wer","err_pct":2.26,"ci95":[2.09,2.43],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":"bcd4a0f","measured_on":null,"errors":{"sub":899,"del":231,"ins":70},"empty_hyp":0,"utts_over_50pct":5}, + {"dataset":"fleurs","split":"test","language":"de","quant":"F32","metric":"wer","err_pct":6.0,"ci95":[5.51,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":903,"del":145,"ins":74},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"F16","metric":"wer","err_pct":6.0,"ci95":[5.51,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":903,"del":145,"ins":74},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q8_0","metric":"wer","err_pct":6.0,"ci95":[5.52,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":903,"del":147,"ins":72},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q6_K","metric":"wer","err_pct":5.96,"ci95":[5.5,6.45],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":900,"del":142,"ins":74},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q5_K_M","metric":"wer","err_pct":5.99,"ci95":[5.5,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":896,"del":148,"ins":77},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"de","quant":"Q4_K_M","metric":"wer","err_pct":5.98,"ci95":[5.5,6.48],"n_utts":862,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":905,"del":137,"ins":78},"empty_hyp":0,"utts_over_50pct":0,"measurement_provenance":"legacy-published"} ], "headline_benchmark": { "dataset": "fleurs", "split": "test", "language": "de", "metric": "wer", - "batch_size": 8, + "batch_size": 1, "timestamps": "none" }, "speed_benchmarks": [ diff --git a/docs/models/cohere-transcribe-arabic-07-2026.md b/docs/models/cohere-transcribe-arabic-07-2026.md index 22ab0835..a5716e05 100644 --- a/docs/models/cohere-transcribe-arabic-07-2026.md +++ b/docs/models/cohere-transcribe-arabic-07-2026.md @@ -32,12 +32,12 @@ it into shorter segments. See the [input-length contract](../input-limits.md). | Quantization | Download | Size | WER (FLEURS Arabic test) | | --- | --- | ---: | ---: | -| BF16 | [cohere-transcribe-arabic-07-2026-BF16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-BF16.gguf) | 4.11 GB | - | -| F16 | [cohere-transcribe-arabic-07-2026-F16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-F16.gguf) | 4.11 GB | - | +| BF16 | [cohere-transcribe-arabic-07-2026-BF16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-BF16.gguf) | 4.11 GB | 11.02% | +| F16 | [cohere-transcribe-arabic-07-2026-F16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-F16.gguf) | 4.11 GB | 11.00% | | Q8_0 | [cohere-transcribe-arabic-07-2026-Q8_0.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q8_0.gguf) | 2.41 GB | 11.06% | -| Q6_K | [cohere-transcribe-arabic-07-2026-Q6_K.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q6_K.gguf) | 1.97 GB | - | -| Q5_K_M | [cohere-transcribe-arabic-07-2026-Q5_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q5_K_M.gguf) | 1.77 GB | - | -| Q4_K_M | [cohere-transcribe-arabic-07-2026-Q4_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q4_K_M.gguf) | 1.56 GB | - | +| Q6_K | [cohere-transcribe-arabic-07-2026-Q6_K.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q6_K.gguf) | 1.97 GB | 11.07% | +| Q5_K_M | [cohere-transcribe-arabic-07-2026-Q5_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q5_K_M.gguf) | 1.77 GB | 10.95% | +| Q4_K_M | [cohere-transcribe-arabic-07-2026-Q4_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q4_K_M.gguf) | 1.56 GB | 11.18% | WER is measured on the full FLEURS Arabic (`ar_eg`) test split (428 diff --git a/docs/models/diar_streaming_sortformer_4spk-v2.1.md b/docs/models/diar_streaming_sortformer_4spk-v2.1.md index f5feb3a6..7d039b1c 100644 --- a/docs/models/diar_streaming_sortformer_4spk-v2.1.md +++ b/docs/models/diar_streaming_sortformer_4spk-v2.1.md @@ -24,11 +24,13 @@ pinned 2026-07-19. ## Download + | Quantization | Download | Size | DER (AMI IHM test) | | --- | --- | ---: | ---: | | F32 | [diar_streaming_sortformer_4spk-v2.1-F32.gguf](https://huggingface.co/handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf/resolve/main/diar_streaming_sortformer_4spk-v2.1-F32.gguf) | 471 MB | 14.59% | | F16 | [diar_streaming_sortformer_4spk-v2.1-F16.gguf](https://huggingface.co/handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf/resolve/main/diar_streaming_sortformer_4spk-v2.1-F16.gguf) | 237 MB | 14.23% | | Q8_0 | [diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf](https://huggingface.co/handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf/resolve/main/diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf) | 139 MB | 14.73% | + DER is measured on the full AMI IHM test set (16 meetings, ~9 h) against forced-alignment RTTMs with dihard3-dev post-processing, collar 0.0, diff --git a/docs/models/gigaam-v3-ctc.md b/docs/models/gigaam-v3-ctc.md index a64547c2..f27d025a 100644 --- a/docs/models/gigaam-v3-ctc.md +++ b/docs/models/gigaam-v3-ctc.md @@ -34,12 +34,12 @@ pinned 2026-05-12. | Quantization | Download | Size | WER (FLEURS ru) | | --- | --- | ---: | ---: | -| F32 | [gigaam-v3-ctc-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-F32.gguf) | 883 MB | - | -| F16 | [gigaam-v3-ctc-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-F16.gguf) | 449 MB | - | -| Q8_0 | [gigaam-v3-ctc-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q8_0.gguf) | 272 MB | 8.42% | -| Q6_K | [gigaam-v3-ctc-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q6_K.gguf) | 226 MB | - | -| Q5_K_M | [gigaam-v3-ctc-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q5_K_M.gguf) | 205 MB | - | -| Q4_K_M | [gigaam-v3-ctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q4_K_M.gguf) | 182 MB | - | +| F32 | [gigaam-v3-ctc-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-F32.gguf) | 883 MB | 8.42% | +| F16 | [gigaam-v3-ctc-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-F16.gguf) | 449 MB | 8.42% | +| Q8_0 | [gigaam-v3-ctc-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q8_0.gguf) | 272 MB | 8.40% | +| Q6_K | [gigaam-v3-ctc-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q6_K.gguf) | 226 MB | 8.38% | +| Q5_K_M | [gigaam-v3-ctc-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q5_K_M.gguf) | 205 MB | 8.29% | +| Q4_K_M | [gigaam-v3-ctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q4_K_M.gguf) | 182 MB | 8.42% | WER is measured on the full FLEURS ru test split (775 utterances) with diff --git a/docs/models/gigaam-v3-e2e-ctc.md b/docs/models/gigaam-v3-e2e-ctc.md index 0f7de6f5..4e444133 100644 --- a/docs/models/gigaam-v3-e2e-ctc.md +++ b/docs/models/gigaam-v3-e2e-ctc.md @@ -34,12 +34,12 @@ pinned 2026-05-12. | Quantization | Download | Size | WER (FLEURS ru) | | --- | --- | ---: | ---: | -| F32 | [gigaam-v3-e2e-ctc-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-F32.gguf) | 884 MB | - | -| F16 | [gigaam-v3-e2e-ctc-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-F16.gguf) | 449 MB | - | -| Q8_0 | [gigaam-v3-e2e-ctc-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q8_0.gguf) | 272 MB | 5.53% | -| Q6_K | [gigaam-v3-e2e-ctc-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q6_K.gguf) | 226 MB | - | -| Q5_K_M | [gigaam-v3-e2e-ctc-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q5_K_M.gguf) | 205 MB | - | -| Q4_K_M | [gigaam-v3-e2e-ctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q4_K_M.gguf) | 182 MB | - | +| F32 | [gigaam-v3-e2e-ctc-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-F32.gguf) | 884 MB | 5.50% | +| F16 | [gigaam-v3-e2e-ctc-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-F16.gguf) | 449 MB | 5.50% | +| Q8_0 | [gigaam-v3-e2e-ctc-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q8_0.gguf) | 272 MB | 5.50% | +| Q6_K | [gigaam-v3-e2e-ctc-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q6_K.gguf) | 226 MB | 5.56% | +| Q5_K_M | [gigaam-v3-e2e-ctc-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q5_K_M.gguf) | 205 MB | 5.58% | +| Q4_K_M | [gigaam-v3-e2e-ctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q4_K_M.gguf) | 182 MB | 5.57% | WER is measured on the full FLEURS ru test split (775 utterances) with diff --git a/docs/models/gigaam-v3-e2e-rnnt.md b/docs/models/gigaam-v3-e2e-rnnt.md index ed9d829b..29d7d018 100644 --- a/docs/models/gigaam-v3-e2e-rnnt.md +++ b/docs/models/gigaam-v3-e2e-rnnt.md @@ -34,12 +34,12 @@ pinned 2026-05-12. | Quantization | Download | Size | WER (FLEURS ru) | | --- | --- | ---: | ---: | -| F32 | [gigaam-v3-e2e-rnnt-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-F32.gguf) | 890 MB | - | -| F16 | [gigaam-v3-e2e-rnnt-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-F16.gguf) | 452 MB | - | -| Q8_0 | [gigaam-v3-e2e-rnnt-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q8_0.gguf) | 274 MB | 5.35% | -| Q6_K | [gigaam-v3-e2e-rnnt-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q6_K.gguf) | 228 MB | - | -| Q5_K_M | [gigaam-v3-e2e-rnnt-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q5_K_M.gguf) | 206 MB | - | -| Q4_K_M | [gigaam-v3-e2e-rnnt-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q4_K_M.gguf) | 184 MB | - | +| F32 | [gigaam-v3-e2e-rnnt-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-F32.gguf) | 890 MB | 5.35% | +| F16 | [gigaam-v3-e2e-rnnt-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-F16.gguf) | 452 MB | 5.35% | +| Q8_0 | [gigaam-v3-e2e-rnnt-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q8_0.gguf) | 274 MB | 5.36% | +| Q6_K | [gigaam-v3-e2e-rnnt-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q6_K.gguf) | 228 MB | 5.37% | +| Q5_K_M | [gigaam-v3-e2e-rnnt-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q5_K_M.gguf) | 206 MB | 5.42% | +| Q4_K_M | [gigaam-v3-e2e-rnnt-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q4_K_M.gguf) | 184 MB | 5.36% | WER is measured on the full FLEURS ru test split (775 utterances) with diff --git a/docs/models/gigaam-v3-rnnt.md b/docs/models/gigaam-v3-rnnt.md index 89e4546a..729cca8d 100644 --- a/docs/models/gigaam-v3-rnnt.md +++ b/docs/models/gigaam-v3-rnnt.md @@ -34,12 +34,12 @@ pinned 2026-05-12. | Quantization | Download | Size | WER (FLEURS ru) | | --- | --- | ---: | ---: | -| F32 | [gigaam-v3-rnnt-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-F32.gguf) | 888 MB | - | -| F16 | [gigaam-v3-rnnt-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-F16.gguf) | 451 MB | - | -| Q8_0 | [gigaam-v3-rnnt-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q8_0.gguf) | 273 MB | 8.07% | -| Q6_K | [gigaam-v3-rnnt-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q6_K.gguf) | 227 MB | - | -| Q5_K_M | [gigaam-v3-rnnt-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q5_K_M.gguf) | 206 MB | - | -| Q4_K_M | [gigaam-v3-rnnt-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q4_K_M.gguf) | 183 MB | - | +| F32 | [gigaam-v3-rnnt-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-F32.gguf) | 888 MB | 8.08% | +| F16 | [gigaam-v3-rnnt-F16.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-F16.gguf) | 451 MB | 8.08% | +| Q8_0 | [gigaam-v3-rnnt-Q8_0.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q8_0.gguf) | 273 MB | 8.08% | +| Q6_K | [gigaam-v3-rnnt-Q6_K.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q6_K.gguf) | 227 MB | 8.07% | +| Q5_K_M | [gigaam-v3-rnnt-Q5_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q5_K_M.gguf) | 206 MB | 8.12% | +| Q4_K_M | [gigaam-v3-rnnt-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q4_K_M.gguf) | 183 MB | 8.12% | WER is measured on the full FLEURS ru test split (775 utterances) with diff --git a/docs/models/parakeet-primeline.md b/docs/models/parakeet-primeline.md index 6021b0c4..f18952e5 100644 --- a/docs/models/parakeet-primeline.md +++ b/docs/models/parakeet-primeline.md @@ -27,12 +27,12 @@ pinned 2026-08-16. | Quantization | Download | Size | WER (FLEURS de test) | | --- | --- | ---: | ---: | -| F32 | [parakeet-primeline-F32.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-F32.gguf) | 2.51 GB | - | -| F16 | [parakeet-primeline-F16.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-F16.gguf) | 1.26 GB | - | -| Q8_0 | [parakeet-primeline-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q8_0.gguf) | 740 MB | 5.98% | -| Q6_K | [parakeet-primeline-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q6_K.gguf) | 610 MB | - | -| Q5_K_M | [parakeet-primeline-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q5_K_M.gguf) | 549 MB | - | -| Q4_K_M | [parakeet-primeline-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q4_K_M.gguf) | 485 MB | - | +| F32 | [parakeet-primeline-F32.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-F32.gguf) | 2.51 GB | 6.00% | +| F16 | [parakeet-primeline-F16.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-F16.gguf) | 1.26 GB | 6.00% | +| Q8_0 | [parakeet-primeline-Q8_0.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q8_0.gguf) | 740 MB | 6.00% | +| Q6_K | [parakeet-primeline-Q6_K.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q6_K.gguf) | 610 MB | 5.96% | +| Q5_K_M | [parakeet-primeline-Q5_K_M.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q5_K_M.gguf) | 549 MB | 5.99% | +| Q4_K_M | [parakeet-primeline-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q4_K_M.gguf) | 485 MB | 5.98% | WER is measured on the full FLEURS German test split (862 utterances) diff --git a/scripts/catalog/cards.py b/scripts/catalog/cards.py index 5e171069..71cb6b53 100644 --- a/scripts/catalog/cards.py +++ b/scripts/catalog/cards.py @@ -1,8 +1,8 @@ -"""Derive an HF card spec from a catalog record. +"""Derive mechanical Hugging Face card fields from a catalog record. -Split out of scripts/hf_cards/generate.py so the catalog checks can verify a -card spec without pulling in jinja2 and huggingface-hub. Pure stdlib: it takes -and returns plain dicts, and knows nothing about YAML or templates. +Used by sync_hf_cards.py to populate the committed, standalone YAML specs. +Pure stdlib: it takes and returns plain dicts, and knows nothing about YAML or +templates. """ from __future__ import annotations @@ -84,19 +84,3 @@ def derive_spec(record: dict, editorial: dict) -> dict: if label: spec["wer"] = {"source": label} return spec - - -def merge(base: dict, over: dict) -> dict: - """Editorial values win. Nested dicts merge; lists replace wholesale.""" - out = dict(base) - for key, value in over.items(): - if isinstance(value, dict) and isinstance(out.get(key), dict): - out[key] = merge(out[key], value) - else: - out[key] = value - return out - - -def merge_quants(derived: list[dict], overrides: dict) -> list[dict]: - """Per-quant editorial extras (a second metric column), keyed by quant.""" - return [merge(q, overrides.get(q["name"], {})) for q in derived] diff --git a/scripts/catalog/check.py b/scripts/catalog/check.py index 78c01a47..01b8016a 100755 --- a/scripts/catalog/check.py +++ b/scripts/catalog/check.py @@ -1,14 +1,13 @@ #!/usr/bin/env -S uv run --script # /// script # requires-python = ">=3.11" -# dependencies = ["jsonschema", "pyyaml"] +# dependencies = ["jsonschema"] # /// """Validate the durable catalog JSON records. Checks the JSON schema, cross-row integrity the schema cannot express (a benchmark row referencing a quant the variant does not publish), that every -record is paired with the card spec and doc the schema says it owns, and that -no card spec re-states a value the catalog already derives. +record is paired with the card spec and doc the schema says it owns. uv run scripts/catalog/check.py uv run scripts/catalog/check.py --publication-profile @@ -23,12 +22,10 @@ import pathlib import sys -import yaml from jsonschema import Draft202012Validator REPO = pathlib.Path(__file__).resolve().parents[2] sys.path.insert(0, str(REPO / "scripts" / "catalog")) -import cards # noqa: E402 import profiles # noqa: E402 @@ -68,45 +65,34 @@ def integrity_pass(records: dict) -> int: return bad - def pairing_pass(records: dict) -> int: - """Every record owns a card spec; a doc is expected unless waived. + """Catalog records and card specs pair exactly; docs may be shared. A dozen variants are documented inside a family page rather than a page of their own (the Moonshine language fine-tunes), so a missing doc is a note - rather than a failure -- but a missing card spec means nothing can be - published for that variant at all. + rather than a failure. The card specs under scripts/hf_cards/ are now + committed standalone inputs, so pairing is bidirectional: an orphan spec + no longer renders a card nobody can trace to a record, and a record with + no spec cannot produce an uploadable card at all. """ - bad, undocumented = 0, [] - for name in records: - if not (REPO / "scripts" / "hf_cards" / f"{name}.yaml").exists(): - bad += 1 - print(f" FAIL {name}: no scripts/hf_cards/{name}.yaml") - if not (REPO / "docs" / "models" / f"{name}.md").exists(): - undocumented.append(name) - print(f"pairing {len(records) - bad}/{len(records)} have a card spec; " + card_names = {path.stem for path in (REPO / "scripts" / "hf_cards").glob("*.yaml")} + record_names = set(records) + missing_cards = sorted(record_names - card_names) + missing_records = sorted(card_names - record_names) + undocumented = sorted( + name for name in record_names + if not (REPO / "docs" / "models" / f"{name}.md").exists() + ) + for name in missing_cards: + print(f" FAIL {name}: no scripts/hf_cards/{name}.yaml") + for name in missing_records: + print(f" FAIL scripts/hf_cards/{name}.yaml: no catalog/{name}.json") + paired = len(record_names & card_names) + print(f"pairing {paired}/{len(record_names | card_names)} catalog/card pairs; " f"{len(records) - len(undocumented)}/{len(records)} have their own doc") if undocumented: print(f" documented elsewhere: {', '.join(undocumented)}") - return bad - - -def derivable_pass(records: dict) -> int: - """A card spec must not re-state what the catalog already derives.""" - stale = 0 - for name, record in records.items(): - path = REPO / "scripts" / "hf_cards" / f"{name}.yaml" - if not path.exists(): - continue - editorial = yaml.safe_load(path.read_text()) or {} - derived = cards.derive_spec(record, editorial) - for key, value in derived.items(): - if key in editorial and editorial[key] == value: - stale += 1 - print(f" FAIL {name}: {path.name} re-states {key}, which the " - f"catalog already derives identically") - print(f"card specs {len(records) - stale}/{len(records)} carry no derived duplicates") - return stale + return len(missing_cards) + len(missing_records) def publication_pass(records: dict, profile_id: str | None, enforce: bool) -> int: @@ -120,6 +106,9 @@ def publication_pass(records: dict, profile_id: str | None, enforce: bool) -> in problems = 0 totals = collections.Counter() for name, record in records.items(): + # An ASR publication profile does not apply to standalone diarizers. + if not record.get("capabilities", {}).get("transcribe", {}).get("supported"): + continue accuracy_raw = profiles.expected_accuracy(record, profile) speed_raw = profiles.expected_speed(record, profile) accuracy = profiles.apply_exceptions(record, "accuracy", accuracy_raw) @@ -165,7 +154,13 @@ def publication_pass(records: dict, profile_id: str | None, enforce: bool) -> in else: target_key = None if target_key is None: - accuracy_extra.add(key) + if legacy: + # Preserve pre-profile rows that were already published, + # even when their quant was not selected by today's + # publication matrix. They are archive data, not drift. + totals["accuracy_archived"] += 1 + else: + accuracy_extra.add(key) continue accuracy_covered.add(target_key) target = expected_by_key[target_key] @@ -213,7 +208,7 @@ def publication_pass(records: dict, profile_id: str | None, enforce: bool) -> in print(f"publication {resolved_id}: accuracy {totals['accuracy_required']} required, " f"{totals['accuracy_missing']} missing, {totals['accuracy_invalid']} invalid, " - f"{totals['accuracy_extra']} extra; speed " + f"{totals['accuracy_extra']} extra, {totals['accuracy_archived']} archived legacy; speed " f"{totals['speed_required']} required, {totals['speed_missing']} missing, " f"{totals['speed_invalid']} invalid, {totals['speed_extra']} extra") if problems and not enforce: @@ -278,8 +273,7 @@ def main() -> int: enforce_publication = args.publication_profile is not None selected_profile = args.publication_profile or None bad = (schema_pass(records, schema) + integrity_pass(records) - + pairing_pass(records) + derivable_pass(records) - + provenance_pass(records) + + pairing_pass(records) + provenance_pass(records) + publication_pass(records, selected_profile, enforce_publication)) return 1 if bad else 0 diff --git a/scripts/catalog/sync_hf_cards.py b/scripts/catalog/sync_hf_cards.py new file mode 100755 index 00000000..9024cd52 --- /dev/null +++ b/scripts/catalog/sync_hf_cards.py @@ -0,0 +1,230 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# dependencies = ["ruamel.yaml>=0.18"] +# /// +"""Populate committed Hugging Face YAML specs from the model catalog. + +The YAML files remain complete, standalone inputs to hf_cards/generate.py. +This command fills mechanical fields that are absent from an editorial YAML +skeleton. Pass --refresh to deliberately replace those fields with current +catalog values; without it, already-published YAML values are preserved. +Fields listed under `catalog_sync.preserve` remain hand-maintained even during +a refresh. + + uv run scripts/catalog/sync_hf_cards.py --write + uv run scripts/catalog/sync_hf_cards.py --write --refresh --models whisper-tiny + uv run scripts/catalog/sync_hf_cards.py --check + uv run scripts/catalog/sync_hf_cards.py --check-consistency +""" +from __future__ import annotations + +import argparse +import copy +import pathlib +import sys + +from ruamel.yaml import YAML +from ruamel.yaml.comments import CommentedMap + +HERE = pathlib.Path(__file__).resolve().parent +REPO = HERE.parents[1] +sys.path.insert(0, str(HERE)) +import cards # noqa: E402 + +CARD_DIR = REPO / "scripts" / "hf_cards" +CATALOG_FIELDS = { + "hf_repo", "target_repo", "upstream_commit", "license", "license_display", + "languages", "capabilities", "perf", "quants", +} + + +def yaml_parser() -> YAML: + parser = YAML() + parser.preserve_quotes = True + parser.width = 1000 + parser.indent(mapping=2, sequence=4, offset=2) + return parser + + +def insert_before(doc: CommentedMap, before: str, key: str, value) -> None: + keys = list(doc) + index = keys.index(before) if before in keys else len(keys) + doc.insert(index, key, copy.deepcopy(value)) + + +def merge_quant_extras(derived: list[dict], existing: object) -> list[dict]: + """Keep hand-written extra columns when refreshing catalog columns.""" + if not isinstance(existing, list): + return derived + by_name = { + item.get("name"): item for item in existing + if isinstance(item, dict) and item.get("name") + } + owned = {"name", "filename", "size", "wer"} + out = [] + for item in derived: + merged = dict(item) + for key, value in by_name.get(item["name"], {}).items(): + if key not in owned: + merged[key] = copy.deepcopy(value) + out.append(merged) + return out + + +def set_field(doc: CommentedMap, key: str, value, before: str, refresh: bool) -> bool: + if key in doc and not refresh: + return False + if key in doc: + if doc[key] == value: + return False + doc[key] = copy.deepcopy(value) + else: + insert_before(doc, before, key, value) + return True + + +def preserved_fields(doc: CommentedMap) -> set[str]: + """Catalog-owned fields this card deliberately keeps hand-maintained.""" + preserve = set((doc.get("catalog_sync") or {}).get("preserve", [])) + unknown = preserve - CATALOG_FIELDS + if unknown: + raise ValueError(f"unknown catalog_sync.preserve fields: {sorted(unknown)}") + return preserve + + +def consistency_errors(doc: CommentedMap, record: dict) -> list[str]: + """Catalog-owned fields whose committed value has drifted from the record. + + `--check` only proves every mechanical field is present. This proves the + fields the card does NOT list under `catalog_sync.preserve` still agree + with the catalog. Extra hand-written quant columns are presentation, not + drift, so only the catalog-owned columns are compared. + """ + preserve = preserved_fields(doc) + derived = cards.derive_spec(record, doc) + errors = [] + for key in sorted(CATALOG_FIELDS - {"quants"}): + if key in preserve or key not in doc: + continue + if doc[key] != derived.get(key): + errors.append(f"{key}: {doc[key]!r} != catalog {derived.get(key)!r}") + if "quants" not in preserve: + by_name = {item.get("name"): item for item in derived.get("quants", [])} + for item in doc.get("quants") or []: + current = by_name.get(item.get("name")) + if current is None: + errors.append(f"quants: {item.get('name')!r} is not in the catalog") + continue + for column in ("filename", "size", "wer"): + if column in current and item.get(column) != current[column]: + errors.append(f"quants[{item.get('name')}].{column}: " + f"{item.get(column)!r} != catalog {current[column]!r}") + return errors + + +def sync_document(doc: CommentedMap, record: dict, refresh: bool) -> bool: + """Fill or refresh catalog-owned fields; return whether values changed.""" + preserve = preserved_fields(doc) + derived = cards.derive_spec(record, doc) + derived["quants"] = merge_quant_extras(derived["quants"], doc.get("quants")) + changed = False + for key, before in ( + ("hf_repo", "transcribe_docs_url"), + ("target_repo", "transcribe_docs_url"), + ("upstream_commit", "pin_date"), + ("license", "pipeline_tag"), + ("license_display", "pipeline_tag"), + ("languages", "tags"), + ("capabilities", "wer"), + ("perf", "wer"), + ("quants", "__end__"), + ): + if key not in preserve: + changed |= set_field(doc, key, derived[key], before, refresh) + + # The dataset label is catalog-derived only when the editorial spec has + # not provided more precise display copy. Notes and extra datasets remain + # hand-written in either mode. + if derived.get("wer"): + if "wer" not in doc: + doc["wer"] = CommentedMap() + changed = True + if "source" not in doc["wer"]: + doc["wer"].insert(0, "source", derived["wer"]["source"]) + changed = True + return changed + + +def main() -> int: + ap = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + mode = ap.add_mutually_exclusive_group(required=True) + mode.add_argument("--write", action="store_true", help="update YAML specs in place") + mode.add_argument("--check", action="store_true", help="fail if required fields are absent") + mode.add_argument("--check-consistency", action="store_true", + help="fail if a non-preserved catalog-owned field disagrees " + "with the catalog") + ap.add_argument("--refresh", action="store_true", + help="replace existing mechanical fields (requires --write)") + ap.add_argument("--models", default="", help="comma-separated variants (default: all)") + args = ap.parse_args() + if args.refresh and not args.write: + ap.error("--refresh requires --write") + + selected = {item.strip() for item in args.models.split(",") if item.strip()} + records = cards.common.load_records() + unknown = selected - records.keys() + if unknown: + print(f"unknown catalog variant(s): {', '.join(sorted(unknown))}", file=sys.stderr) + return 2 + + parser = yaml_parser() + changed_paths = [] + drifted = 0 + names = sorted(selected or records.keys()) + for name in names: + path = CARD_DIR / f"{name}.yaml" + if not path.exists(): + print(f"FAIL {name}: no editorial YAML skeleton at {path.relative_to(REPO)}", + file=sys.stderr) + return 1 + doc = parser.load(path.read_text()) or CommentedMap() + try: + if args.check_consistency: + errors = consistency_errors(doc, records[name]) + else: + changed = sync_document(doc, records[name], args.refresh) + except ValueError as exc: + print(f"FAIL {name}: {exc}", file=sys.stderr) + return 1 + + if args.check_consistency: + if errors: + drifted += 1 + print(f"DRIFT {path.relative_to(REPO)}") + for error in errors: + print(f" {error}") + continue + + if not changed: + continue + changed_paths.append(path) + if args.write: + with path.open("w") as stream: + parser.dump(doc, stream) + print(f"updated {path.relative_to(REPO)}") + else: + print(f"INCOMPLETE {path.relative_to(REPO)}") + + if args.check_consistency: + print(f"HF card consistency: {len(names)} checked, " + f"{len(names) - drifted} agree with the catalog, {drifted} drifted") + return 1 if drifted else 0 + + action = "updated" if args.write else "incomplete" + print(f"HF card sync: {len(names)} checked, {len(changed_paths)} {action}") + return 1 if changed_paths and args.check else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/hf_cards/breeze-asr-25.yaml b/scripts/hf_cards/breeze-asr-25.yaml index fbfb4a40..8eb7047e 100644 --- a/scripts/hf_cards/breeze-asr-25.yaml +++ b/scripts/hf_cards/breeze-asr-25.yaml @@ -1,10 +1,14 @@ # Spec for the HF README of handy-computer/Breeze-ASR-25-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: MediaTek-Research/Breeze-ASR-25 +target_repo: handy-computer/Breeze-ASR-25-gguf # Pure fine-tune of whisper-large-v2 (identical architecture), so the model # page points at the whisper-large-v2 doc rather than a Breeze-specific one. transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large-v2.md +# Pinned at download (the snapshot the GGUFs were converted from). +upstream_commit: cffe7ccb404d025296a00758d0a33468bec3a9d0 pin_date: 2026-06-29 validation: @@ -12,7 +16,14 @@ validation: commit: 3848875 date: 2026-06-29 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - languages + - quants # Breeze-ASR-25 is a Whisper-large-v2 fine-tune. It inherits Whisper's # 99-language tokenizer, but MediaTek optimized and validated it for @@ -47,7 +58,31 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. Same Whisper +# code path as whisper-large-v2 (the library exposes translation, language +# detection and segment timestamps for any Whisper GGUF), though this +# fine-tune is specialized for zh/en transcription. +capabilities: + streaming: false + translate: true + lang_detect: true + timestamps: segment # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, published raw as rtf_ +# in the metadata block. Breeze-ASR-25 is byte-for-byte the same architecture +# and tensor shapes as Whisper large-v2 (1.5B params, 32+32 layers, +# d_model 1280); RTF is a function of shapes/quant/backend, not weight values, +# so these are inherited verbatim from whisper-large-v2 rather than re-benched. +perf: + m4-max: + metal: 23.7 + cpu: 1.5 + ryzen-4750u: + vulkan: 2.1 + cpu: 0.6 + wer: + source: LibriSpeech test-clean metadata_key: librispeech_test_clean source2: FLEURS zh notes: | diff --git a/scripts/hf_cards/canary-180m-flash.yaml b/scripts/hf_cards/canary-180m-flash.yaml index 69a46bf4..ffc3325f 100644 --- a/scripts/hf_cards/canary-180m-flash.yaml +++ b/scripts/hf_cards/canary-180m-flash.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/canary-180m-flash-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/canary-180m-flash +target_repo: handy-computer/canary-180m-flash-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-180m-flash.md +upstream_commit: b12ab41 pin_date: 2026-05-08 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,14 @@ validation: commit: db53eda date: 2026-05-08 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - en + - de + - es + - fr tags: - gguf - transcribe.cpp @@ -35,7 +45,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 74.2 + metal: 141.2 + ryzen-4750u: + cpu: 21.4 + vulkan: 32.1 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.94%. @@ -43,3 +70,29 @@ wer: difference out of ~27k reference words), so the F32 port matches the reference framework at the noise floor. NVIDIA's self-reported number on the upstream model card is 1.87%. + +quants: + - name: F32 + filename: canary-180m-flash-F32.gguf + size: 756 MB + wer: 1.94% + - name: F16 + filename: canary-180m-flash-F16.gguf + size: 382 MB + wer: 1.94% + - name: Q8_0 + filename: canary-180m-flash-Q8_0.gguf + size: 218 MB + wer: 1.93% + - name: Q6_K + filename: canary-180m-flash-Q6_K.gguf + size: 176 MB + wer: 1.93% + - name: Q5_K_M + filename: canary-180m-flash-Q5_K_M.gguf + size: 159 MB + wer: 1.90% + - name: Q4_K_M + filename: canary-180m-flash-Q4_K_M.gguf + size: 139 MB + wer: 1.93% diff --git a/scripts/hf_cards/canary-1b-flash.yaml b/scripts/hf_cards/canary-1b-flash.yaml index 63ada9a1..9992b983 100644 --- a/scripts/hf_cards/canary-1b-flash.yaml +++ b/scripts/hf_cards/canary-1b-flash.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/canary-1b-flash-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/canary-1b-flash +target_repo: handy-computer/canary-1b-flash-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-1b-flash.md +upstream_commit: a9a55e0 pin_date: 2026-05-08 validation: @@ -10,7 +13,14 @@ validation: commit: db53eda date: 2026-05-08 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - en + - de + - es + - fr tags: - gguf - transcribe.cpp @@ -33,8 +43,51 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 20.5 + metal: 101.1 + ryzen-4750u: + cpu: 6.9 + vulkan: 14.5 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.62%. NVIDIA's self-reported number on the upstream model card is 1.48%. + +quants: + - name: F32 + filename: canary-1b-flash-F32.gguf + size: 3.56 GB + wer: 1.62% + - name: F16 + filename: canary-1b-flash-F16.gguf + size: 1.79 GB + wer: 1.62% + - name: Q8_0 + filename: canary-1b-flash-Q8_0.gguf + size: 1.05 GB + wer: 1.62% + - name: Q6_K + filename: canary-1b-flash-Q6_K.gguf + size: 858 MB + wer: 1.65% + - name: Q5_K_M + filename: canary-1b-flash-Q5_K_M.gguf + size: 770 MB + wer: 1.64% + - name: Q4_K_M + filename: canary-1b-flash-Q4_K_M.gguf + size: 677 MB + wer: 1.59% diff --git a/scripts/hf_cards/canary-1b-v2.yaml b/scripts/hf_cards/canary-1b-v2.yaml index 514cca59..d296228f 100644 --- a/scripts/hf_cards/canary-1b-v2.yaml +++ b/scripts/hf_cards/canary-1b-v2.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/canary-1b-v2-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/canary-1b-v2 +target_repo: handy-computer/canary-1b-v2-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-1b-v2.md +upstream_commit: 87bc526 pin_date: 2026-05-08 validation: @@ -10,7 +13,35 @@ validation: commit: db53eda date: 2026-05-08 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - bg + - hr + - cs + - da + - nl + - en + - et + - fi + - fr + - de + - el + - hu + - it + - lv + - lt + - mt + - pl + - pt + - ro + - sk + - sl + - es + - sv + - ru + - uk tags: - gguf - transcribe.cpp @@ -34,10 +65,53 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 18.9 + metal: 86.4 + ryzen-4750u: + cpu: 6.6 + vulkan: 13.2 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.92%. NVIDIA's self-reported number on the upstream model card is 2.18%; our F32 port comes in slightly under the upstream-reported number (Δ −0.26pp) and is likely down to scoring differences. + +quants: + - name: F32 + filename: canary-1b-v2-F32.gguf + size: 3.92 GB + wer: 1.92% + - name: F16 + filename: canary-1b-v2-F16.gguf + size: 1.97 GB + wer: 1.92% + - name: Q8_0 + filename: canary-1b-v2-Q8_0.gguf + size: 1.14 GB + wer: 1.91% + - name: Q6_K + filename: canary-1b-v2-Q6_K.gguf + size: 932 MB + wer: 1.94% + - name: Q5_K_M + filename: canary-1b-v2-Q5_K_M.gguf + size: 837 MB + wer: 1.93% + - name: Q4_K_M + filename: canary-1b-v2-Q4_K_M.gguf + size: 735 MB + wer: 1.91% diff --git a/scripts/hf_cards/canary-1b.yaml b/scripts/hf_cards/canary-1b.yaml index 04b46713..25c79388 100644 --- a/scripts/hf_cards/canary-1b.yaml +++ b/scripts/hf_cards/canary-1b.yaml @@ -7,8 +7,11 @@ # into every preset; the YAML below mirrors that distinction so the HF # card surfaces the constraint to anyone clicking through to download. +hf_repo: nvidia/canary-1b +target_repo: handy-computer/canary-1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-1b.md +upstream_commit: 1698acf pin_date: 2026-05-08 validation: @@ -16,7 +19,14 @@ validation: commit: db53eda date: 2026-05-08 +license: cc-by-nc-4.0 +license_display: CC-BY-NC-4.0 pipeline_tag: automatic-speech-recognition +languages: + - en + - de + - es + - fr tags: - gguf - transcribe.cpp @@ -40,10 +50,53 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 19.4 + metal: 43.1 + ryzen-4750u: + cpu: 5.6 + vulkan: 9 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.55%. NVIDIA's self-reported number on the upstream model card is 1.48%; likely this is due to differences in how we score WER, based on the results we have from canary-180m-flash. + +quants: + - name: F32 + filename: canary-1b-F32.gguf + size: 4.09 GB + wer: 1.55% + - name: F16 + filename: canary-1b-F16.gguf + size: 2.05 GB + wer: 1.55% + - name: Q8_0 + filename: canary-1b-Q8_0.gguf + size: 1.16 GB + wer: 1.55% + - name: Q6_K + filename: canary-1b-Q6_K.gguf + size: 934 MB + wer: 1.57% + - name: Q5_K_M + filename: canary-1b-Q5_K_M.gguf + size: 838 MB + wer: 1.57% + - name: Q4_K_M + filename: canary-1b-Q4_K_M.gguf + size: 730 MB + wer: 1.55% diff --git a/scripts/hf_cards/canary-qwen-2.5b.yaml b/scripts/hf_cards/canary-qwen-2.5b.yaml index 4411a634..2be2489a 100644 --- a/scripts/hf_cards/canary-qwen-2.5b.yaml +++ b/scripts/hf_cards/canary-qwen-2.5b.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/canary-qwen-2.5b-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/canary-qwen-2.5b +target_repo: handy-computer/canary-qwen-2.5b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-qwen-2.5b.md +upstream_commit: b1469e1bba1cfe140205529c79c434ca47180960 pin_date: 2026-05-15 validation: @@ -10,7 +13,11 @@ validation: commit: 6f6c699 date: 2026-05-16 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -33,7 +40,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 7.3 + metal: 40.2 + ryzen-4750u: + cpu: 2.1 + vulkan: 4.1 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech `test-clean` split (2620 English utterances) with the Whisper-style English text normalizer and jiwer @@ -47,3 +71,29 @@ wer: precision (homophones, word-boundary flips, function-word substitutions). Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. + +quants: + - name: BF16 + filename: canary-qwen-2.5b-BF16.gguf + size: 5.08 GB + wer: 1.63% + - name: F16 + filename: canary-qwen-2.5b-F16.gguf + size: 5.08 GB + wer: 1.63% + - name: Q8_0 + filename: canary-qwen-2.5b-Q8_0.gguf + size: 2.80 GB + wer: 1.63% + - name: Q6_K + filename: canary-qwen-2.5b-Q6_K.gguf + size: 2.21 GB + wer: 1.63% + - name: Q5_K_M + filename: canary-qwen-2.5b-Q5_K_M.gguf + size: 1.98 GB + wer: 1.63% + - name: Q4_K_M + filename: canary-qwen-2.5b-Q4_K_M.gguf + size: 1.74 GB + wer: 1.63% diff --git a/scripts/hf_cards/cohere-transcribe-03-2026.yaml b/scripts/hf_cards/cohere-transcribe-03-2026.yaml index edab89c3..da2f74b8 100644 --- a/scripts/hf_cards/cohere-transcribe-03-2026.yaml +++ b/scripts/hf_cards/cohere-transcribe-03-2026.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/cohere-transcribe-03-2026-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: CohereLabs/cohere-transcribe-03-2026 +target_repo: handy-computer/cohere-transcribe-03-2026-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/cohere-transcribe-03-2026.md +upstream_commit: 76b8b23 pin_date: 2026-04-16 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,29 @@ validation: commit: bf0d0b7 date: 2026-04-18 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - quants + +languages: + - en + - fr + - de + - es + - it + - pt + - nl + - pl + - el + - ar + - ja + - zh + - vi + - ko tags: - gguf - transcribe.cpp @@ -32,7 +57,25 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + metal: 73 + cpu: 9 + ryzen-4750u: + vulkan: 8 + cpu: 3 + wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. BF16 reference baseline: 1.26%. diff --git a/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml b/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml index 17f4c3cb..8a5671d4 100644 --- a/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml +++ b/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/cohere-transcribe-arabic-07-2026-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: CohereLabs/cohere-transcribe-arabic-07-2026 +target_repo: handy-computer/cohere-transcribe-arabic-07-2026-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/cohere-transcribe-arabic-07-2026.md +upstream_commit: 0a8193c pin_date: 2026-07-07 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,15 @@ validation: commit: d89ecb7 date: 2026-07-07 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - languages + - quants + languages: - ar - en @@ -35,8 +46,47 @@ summary: | language flag (`-l ar` or `-l en`) and produces a transcript. Decoding is autoregressive. +usage: | + Build transcribe.cpp from source: + + ```bash + git clone git@github.com:handy-computer/transcribe.cpp.git + cd transcribe.cpp + cmake -B build && cmake --build build + ``` + + Run on a 16 kHz mono WAV: + + ```bash + build/bin/transcribe-cli \ + -m cohere-transcribe-arabic-07-2026-Q8_0.gguf \ + -l ar \ + input.wav + ``` + + If your audio isn't already 16 kHz mono WAV, convert it first: + + ```bash + ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav + ``` + + See the [transcribe.cpp model page](https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/cohere-transcribe-arabic-07-2026.md) for performance + numbers, numerical validation, and reproduction steps. + default_quant_index: 2 # Q8_0 +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none +perf: + m4-max: + cpu: 9 + metal: 73 + ryzen-4750u: + cpu: 3 + vulkan: 8 wer: metadata_key: fleurs_ar_test source: FLEURS Arabic test @@ -48,3 +98,28 @@ wer: 11.02%, and every quant falls inside the reference's 95% confidence interval. FLEURS Arabic is Egyptian-dialect speech; upstream numbers published on other Arabic test sets are not directly comparable. +quants: + - name: BF16 + filename: cohere-transcribe-arabic-07-2026-BF16.gguf + size: 4.10 GB + wer: 11.02% + - name: F16 + filename: cohere-transcribe-arabic-07-2026-F16.gguf + size: 4.11 GB + wer: 11.00% + - name: Q8_0 + filename: cohere-transcribe-arabic-07-2026-Q8_0.gguf + size: 2.41 GB + wer: 11.06% + - name: Q6_K + filename: cohere-transcribe-arabic-07-2026-Q6_K.gguf + size: 1.97 GB + wer: 11.07% + - name: Q5_K_M + filename: cohere-transcribe-arabic-07-2026-Q5_K_M.gguf + size: 1.77 GB + wer: 10.95% + - name: Q4_K_M + filename: cohere-transcribe-arabic-07-2026-Q4_K_M.gguf + size: 1.56 GB + wer: 11.18% diff --git a/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml b/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml index 336c4193..9e129bc7 100644 --- a/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml +++ b/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml @@ -4,8 +4,11 @@ # Diarizer family: metric is DER (not WER); pipeline_tag follows the # upstream NVIDIA card's diarization tagging rather than ASR. +hf_repo: nvidia/diar_streaming_sortformer_4spk-v2.1 +target_repo: handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/diar_streaming_sortformer_4spk-v2.1.md +upstream_commit: fafaab5 pin_date: 2026-07-19 # Validation pin for the most recent upload. Updated on each release — @@ -15,7 +18,11 @@ validation: commit: d42c3bb date: 2026-07-22 +license: other +license_display: NVIDIA Open Model License pipeline_tag: voice-activity-detection +languages: + - en tags: - gguf - transcribe.cpp @@ -35,6 +42,41 @@ summary: | a run produces speaker segments (start, end, speaker id in arrival order), no text. Takes 16 kHz mono WAV. +usage: | + Build transcribe.cpp from source: + + ```bash + git clone git@github.com:handy-computer/transcribe.cpp.git + cd transcribe.cpp + cmake -B build && cmake --build build + ``` + + Run on a 16 kHz mono WAV. This is a diarizer, not a transcription model — + use the JSONL output to get the speaker segments (the plain output's + `text:` line is empty by design): + + ```bash + echo input.wav > files.txt + build/bin/transcribe-cli \ + -m diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf \ + --batch files.txt --batch-jsonl + # {"file":"input.wav","text":"","speakers":[{"t0_ms":320,"t1_ms":2400,"speaker_id":1},...]} + ``` + + From the C API, read segments via `transcribe_n_speaker_segments` / + `transcribe_get_speaker_segment`, and select the streaming operating + point (latency / accuracy trade-off) with the run extension in + `include/transcribe/sortformer.h`. + + If your audio isn't already 16 kHz mono WAV, convert it first: + + ```bash + ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav + ``` + + See the [transcribe.cpp model page](https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/diar_streaming_sortformer_4spk-v2.1.md) for performance + numbers, numerical validation, and reproduction steps. + default_quant_index: 2 # Q8_0 # Capability flags for the transcribe_cpp metadata block. @@ -42,9 +84,17 @@ capabilities: streaming: true translate: false lang_detect: false + diarize: true timestamps: none # segment times are diarization output, not transcript timestamps +# Speedup-over-realtime (×RT) per rig/backend, hand-authored from the bench; +# published raw as rtf_ in the metadata block. +perf: + m4: + cpu: 76.3 + metal: 141.8 wer: + source: AMI IHM test metadata_key: ami_ihm_test notes: | DER measured on the full AMI IHM test set (16 meetings, ~9 h) against @@ -55,3 +105,17 @@ wer: RTTM source and post-processing; compare like with like. Only near-reference tiers ship for this family (k-quant tiers withdrawn; see the transcribe.cpp family doc, "Quant policy (Stage 7)"). + +quants: + - name: F32 + filename: diar_streaming_sortformer_4spk-v2.1-F32.gguf + size: 471 MB + wer: 14.59% + - name: F16 + filename: diar_streaming_sortformer_4spk-v2.1-F16.gguf + size: 237 MB + wer: 14.23% + - name: Q8_0 + filename: diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf + size: 139 MB + wer: 14.73% diff --git a/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml b/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml index 102ef5f4..4aec4869 100644 --- a/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml +++ b/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml @@ -1,8 +1,12 @@ # Spec for the HF README of handy-computer/Fun-ASR-MLT-Nano-2512-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: FunAudioLLM/Fun-ASR-MLT-Nano-2512 +target_repo: handy-computer/Fun-ASR-MLT-Nano-2512-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/fun-asr-mlt-nano-2512.md +# Pinned at intake (Stage 1). +upstream_commit: cf67a938bf2829959d08fdfb84e186eff02a67ff pin_date: 2026-05-06 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +16,45 @@ validation: commit: f094d28 date: 2026-05-06 +# Upstream license is "FunASR-Model-License-1.1" — not a standard SPDX id. +# The HF YAML field accepts a free-form `other` plus a license_name / +# license_link override on the upstream card; the renderer emits +# `license: other` and surfaces the human-facing form via `license_display`. +license: other +license_display: FunASR Model Open Source License Agreement v1.1 pipeline_tag: automatic-speech-recognition +languages: + - zh + - en + - yue + - ja + - ko + - vi + - id + - th + - ms + - tl + - ar + - hi + - bg + - hr + - cs + - da + - nl + - et + - fi + - el + - hu + - ga + - lv + - lt + - mt + - pl + - pt + - ro + - sk + - sl + - sv tags: - gguf - transcribe.cpp @@ -44,7 +86,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 16 + metal: 68 + ryzen-4750u: + cpu: 4.5 + vulkan: 8.9 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy LLM decoding via the bundled Qwen3-0.6B head. The publisher @@ -56,3 +115,29 @@ wer: English only; the strength of the MLT variant is multilingual coverage, not English accuracy. For the other 30 languages, run your own representative manifest. + +quants: + - name: BF16 + filename: Fun-ASR-MLT-Nano-2512-BF16.gguf + size: 1.67 GB + wer: 1.74% + - name: F16 + filename: Fun-ASR-MLT-Nano-2512-F16.gguf + size: 1.67 GB + wer: 1.74% + - name: Q8_0 + filename: Fun-ASR-MLT-Nano-2512-Q8_0.gguf + size: 891 MB + wer: 1.74% + - name: Q6_K + filename: Fun-ASR-MLT-Nano-2512-Q6_K.gguf + size: 691 MB + wer: 1.69% + - name: Q5_K_M + filename: Fun-ASR-MLT-Nano-2512-Q5_K_M.gguf + size: 631 MB + wer: 1.77% + - name: Q4_K_M + filename: Fun-ASR-MLT-Nano-2512-Q4_K_M.gguf + size: 557 MB + wer: 1.89% diff --git a/scripts/hf_cards/fun-asr-nano-2512.yaml b/scripts/hf_cards/fun-asr-nano-2512.yaml index 08ea566c..fcbbd52c 100644 --- a/scripts/hf_cards/fun-asr-nano-2512.yaml +++ b/scripts/hf_cards/fun-asr-nano-2512.yaml @@ -1,8 +1,12 @@ # Spec for the HF README of handy-computer/Fun-ASR-Nano-2512-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: FunAudioLLM/Fun-ASR-Nano-2512 +target_repo: handy-computer/Fun-ASR-Nano-2512-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/fun-asr-nano-2512.md +# Pinned at intake (Stage 1). +upstream_commit: a7088d620f755dcdca575b63db184c3ad55b2865 pin_date: 2026-05-06 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +16,17 @@ validation: commit: f094d28 date: 2026-05-06 +# Upstream license is "FunASR-Model-License-1.1" — not a standard SPDX id. +# The HF YAML field accepts a free-form `other` plus a license_name / +# license_link override on the upstream card; the renderer emits +# `license: other` and surfaces the human-facing form via `license_display`. +license: other +license_display: FunASR Model Open Source License Agreement v1.1 pipeline_tag: automatic-speech-recognition +languages: + - zh + - en + - ja tags: - gguf - transcribe.cpp @@ -38,7 +52,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 27 + metal: 77.5 + ryzen-4750u: + cpu: 6.5 + vulkan: 11.2 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy LLM decoding via the bundled Qwen3-0.6B head. Publisher @@ -49,3 +80,29 @@ wer: -0.01 percentage-points. LibriSpeech is an English-only benchmark; Chinese (AISHELL-1, WenetSpeech) and Japanese (CommonVoice JA) are the recommended complementary checks. + +quants: + - name: BF16 + filename: Fun-ASR-Nano-2512-BF16.gguf + size: 1.67 GB + wer: 1.78% + - name: F16 + filename: Fun-ASR-Nano-2512-F16.gguf + size: 1.67 GB + wer: 1.79% + - name: Q8_0 + filename: Fun-ASR-Nano-2512-Q8_0.gguf + size: 891 MB + wer: 1.79% + - name: Q6_K + filename: Fun-ASR-Nano-2512-Q6_K.gguf + size: 691 MB + wer: 1.78% + - name: Q5_K_M + filename: Fun-ASR-Nano-2512-Q5_K_M.gguf + size: 631 MB + wer: 1.82% + - name: Q4_K_M + filename: Fun-ASR-Nano-2512-Q4_K_M.gguf + size: 557 MB + wer: 1.92% diff --git a/scripts/hf_cards/generate.py b/scripts/hf_cards/generate.py index 5e00ec33..0ca6c214 100755 --- a/scripts/hf_cards/generate.py +++ b/scripts/hf_cards/generate.py @@ -9,14 +9,9 @@ # /// """Generate the HuggingFace README.md for a transcribe.cpp GGUF repo. -The spec is assembled from two sources. Everything measurable -- the upstream -and published repos, the pinned commit, licence, languages, the quant table -with its file sizes and headline error rates, the capability flags and the -per-rig speedups -- is DERIVED from the variant's catalog/.json -record. The YAML alongside this script carries only what a human writes: the -summary, tags, pipeline tag, validation pin, and prose notes. A key present in -the YAML still wins, so a card can narrow a derived value deliberately -(Breeze-ASR-25 advertises 2 of the 99 languages its tokenizer inherits). +The committed YAML is the complete, standalone upload specification. Use +scripts/catalog/sync_hf_cards.py to populate its mechanical fields from the +catalog; this renderer does not read catalog JSON at generation time. Fetches the upstream model card at the pinned commit and renders template.md.j2. @@ -43,18 +38,11 @@ HERE = Path(__file__).parent REPO_ROOT = HERE.parent.parent -sys.path.insert(0, str(REPO_ROOT / "scripts" / "catalog")) -import cards # noqa: E402 def load_spec(path: Path) -> dict: - """The editorial YAML merged onto everything derived from the catalog.""" - editorial = yaml.safe_load(path.read_text()) or {} - record = cards.common.load_record(editorial.get("variant", path.stem)) - spec = cards.merge(cards.derive_spec(record, editorial), editorial) - spec["quants"] = cards.merge_quants(spec["quants"], editorial.get("quant_overrides", {})) - for key in ("variant", "size", "quant_overrides"): - spec.pop(key, None) - return spec + """Load a complete, standalone card specification.""" + with path.open() as f: + return yaml.safe_load(f) def build_transcribe_cpp_block(spec: dict) -> str: diff --git a/scripts/hf_cards/gigaam-v3-ctc.yaml b/scripts/hf_cards/gigaam-v3-ctc.yaml index 71dbfe59..d0f5d36f 100644 --- a/scripts/hf_cards/gigaam-v3-ctc.yaml +++ b/scripts/hf_cards/gigaam-v3-ctc.yaml @@ -1,8 +1,13 @@ # Spec for the HF README of handy-computer/gigaam-v3-ctc-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: ai-sage/GigaAM-v3 +target_repo: handy-computer/gigaam-v3-ctc-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/gigaam-v3-ctc.md +# Upstream branch: ctc. Each gigaam-v3 variant lives on its own +# HF branch; the SHA below pins this variant's branch revision. +upstream_commit: 15ef3b5 pin_date: 2026-05-12 # Upstream README lives only on the main branch (per-variant branches # ship empty README stubs); fetch the family card from main. @@ -15,7 +20,11 @@ validation: commit: 42b96d9 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - ru tags: - gguf - transcribe.cpp @@ -31,7 +40,51 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + metal: 146 + cpu: 29 + ryzen-4750u: + vulkan: 33 + cpu: 9 + wer: metadata_key: fleurs_ru + source: FLEURS ru notes: | WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 8.42%. Upstream `gigaam` author package measured on the same manifest: 9.81%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. + +quants: + - name: F32 + filename: gigaam-v3-ctc-F32.gguf + size: 883 MB + wer: 8.42% + - name: F16 + filename: gigaam-v3-ctc-F16.gguf + size: 449 MB + wer: 8.42% + - name: Q8_0 + filename: gigaam-v3-ctc-Q8_0.gguf + size: 272 MB + wer: 8.40% + - name: Q6_K + filename: gigaam-v3-ctc-Q6_K.gguf + size: 226 MB + wer: 8.38% + - name: Q5_K_M + filename: gigaam-v3-ctc-Q5_K_M.gguf + size: 205 MB + wer: 8.29% + - name: Q4_K_M + filename: gigaam-v3-ctc-Q4_K_M.gguf + size: 182 MB + wer: 8.42% diff --git a/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml b/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml index 543cb66e..fcb31b03 100644 --- a/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml +++ b/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml @@ -1,8 +1,13 @@ # Spec for the HF README of handy-computer/gigaam-v3-e2e-ctc-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: ai-sage/GigaAM-v3 +target_repo: handy-computer/gigaam-v3-e2e-ctc-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/gigaam-v3-e2e-ctc.md +# Upstream branch: e2e_ctc. Each gigaam-v3 variant lives on its own +# HF branch; the SHA below pins this variant's branch revision. +upstream_commit: cec030b pin_date: 2026-05-12 # Upstream README lives only on the main branch (per-variant branches # ship empty README stubs); fetch the family card from main. @@ -15,7 +20,16 @@ validation: commit: 42b96d9 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - quants + +languages: + - ru tags: - gguf - transcribe.cpp @@ -31,8 +45,26 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + metal: 112 + cpu: 27 + ryzen-4750u: + vulkan: 30 + cpu: 9 + wer: metadata_key: fleurs_ru + source: FLEURS ru notes: | WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 5.50%. Upstream `gigaam` author package measured on the same manifest: 6.93%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. diff --git a/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml b/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml index 24cc8b9f..9848458c 100644 --- a/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml +++ b/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml @@ -1,8 +1,13 @@ # Spec for the HF README of handy-computer/gigaam-v3-e2e-rnnt-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: ai-sage/GigaAM-v3 +target_repo: handy-computer/gigaam-v3-e2e-rnnt-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/gigaam-v3-e2e-rnnt.md +# Upstream branch: main (= v3_e2e_rnnt). Each gigaam-v3 variant lives on its own +# HF branch; the SHA below pins this variant's branch revision. +upstream_commit: ec1dc1f pin_date: 2026-05-12 # Upstream README lives only on the main branch; this variant IS main, so # upstream_card_commit matches upstream_commit. Made explicit for symmetry @@ -16,7 +21,11 @@ validation: commit: 42b96d9 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - ru tags: - gguf - transcribe.cpp @@ -32,7 +41,51 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + metal: 88 + cpu: 25 + ryzen-4750u: + vulkan: 22 + cpu: 8 + wer: metadata_key: fleurs_ru + source: FLEURS ru notes: | WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 5.35%. Upstream `gigaam` author package measured on the same manifest: 6.78%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. + +quants: + - name: F32 + filename: gigaam-v3-e2e-rnnt-F32.gguf + size: 890 MB + wer: 5.35% + - name: F16 + filename: gigaam-v3-e2e-rnnt-F16.gguf + size: 452 MB + wer: 5.35% + - name: Q8_0 + filename: gigaam-v3-e2e-rnnt-Q8_0.gguf + size: 274 MB + wer: 5.36% + - name: Q6_K + filename: gigaam-v3-e2e-rnnt-Q6_K.gguf + size: 228 MB + wer: 5.37% + - name: Q5_K_M + filename: gigaam-v3-e2e-rnnt-Q5_K_M.gguf + size: 206 MB + wer: 5.42% + - name: Q4_K_M + filename: gigaam-v3-e2e-rnnt-Q4_K_M.gguf + size: 184 MB + wer: 5.36% diff --git a/scripts/hf_cards/gigaam-v3-rnnt.yaml b/scripts/hf_cards/gigaam-v3-rnnt.yaml index c95f4667..e9069a76 100644 --- a/scripts/hf_cards/gigaam-v3-rnnt.yaml +++ b/scripts/hf_cards/gigaam-v3-rnnt.yaml @@ -1,8 +1,13 @@ # Spec for the HF README of handy-computer/gigaam-v3-rnnt-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: ai-sage/GigaAM-v3 +target_repo: handy-computer/gigaam-v3-rnnt-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/gigaam-v3-rnnt.md +# Upstream branch: rnnt. Each gigaam-v3 variant lives on its own +# HF branch; the SHA below pins this variant's branch revision. +upstream_commit: c7f128b pin_date: 2026-05-12 # Upstream README lives only on the main branch (per-variant branches # ship empty README stubs); fetch the family card from main. @@ -15,7 +20,11 @@ validation: commit: 42b96d9 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - ru tags: - gguf - transcribe.cpp @@ -31,7 +40,51 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + metal: 110 + cpu: 27 + ryzen-4750u: + vulkan: 25 + cpu: 9 + wer: metadata_key: fleurs_ru + source: FLEURS ru notes: | WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 8.08%. Upstream `gigaam` author package measured on the same manifest: 9.46%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. + +quants: + - name: F32 + filename: gigaam-v3-rnnt-F32.gguf + size: 888 MB + wer: 8.08% + - name: F16 + filename: gigaam-v3-rnnt-F16.gguf + size: 451 MB + wer: 8.08% + - name: Q8_0 + filename: gigaam-v3-rnnt-Q8_0.gguf + size: 273 MB + wer: 8.08% + - name: Q6_K + filename: gigaam-v3-rnnt-Q6_K.gguf + size: 227 MB + wer: 8.07% + - name: Q5_K_M + filename: gigaam-v3-rnnt-Q5_K_M.gguf + size: 206 MB + wer: 8.12% + - name: Q4_K_M + filename: gigaam-v3-rnnt-Q4_K_M.gguf + size: 183 MB + wer: 8.12% diff --git a/scripts/hf_cards/granite-4.0-1b-speech.yaml b/scripts/hf_cards/granite-4.0-1b-speech.yaml index 5d9c7124..bfe3539e 100644 --- a/scripts/hf_cards/granite-4.0-1b-speech.yaml +++ b/scripts/hf_cards/granite-4.0-1b-speech.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/granite-4.0-1b-speech-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: ibm-granite/granite-4.0-1b-speech +target_repo: handy-computer/granite-4.0-1b-speech-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-4.0-1b-speech.md +upstream_commit: bd87ab8 pin_date: 2026-05-17 validation: @@ -10,7 +13,16 @@ validation: commit: 275332d date: 2026-05-17 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +languages: + - en + - fr + - de + - es + - pt + - ja tags: - gguf - transcribe.cpp @@ -33,10 +45,53 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 7.2 + metal: 95.3 + ryzen-4750u: + cpu: 2.1 + vulkan: 5 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding. BF16 reference baseline (re-run locally with the model card's exact prompt): 1.42% — matches the upstream Open ASR Leaderboard number exactly. Text normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. + +quants: + - name: BF16 + filename: granite-4.0-1b-speech-BF16.gguf + size: 4.63 GB + wer: 1.42% + - name: F16 + filename: granite-4.0-1b-speech-F16.gguf + size: 4.63 GB + wer: 1.42% + - name: Q8_0 + filename: granite-4.0-1b-speech-Q8_0.gguf + size: 2.56 GB + wer: 1.44% + - name: Q6_K + filename: granite-4.0-1b-speech-Q6_K.gguf + size: 2.02 GB + wer: 1.41% + - name: Q5_K_M + filename: granite-4.0-1b-speech-Q5_K_M.gguf + size: 1.83 GB + wer: 1.42% + - name: Q4_K_M + filename: granite-4.0-1b-speech-Q4_K_M.gguf + size: 1.60 GB + wer: 1.48% diff --git a/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml b/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml index 36dafaf6..70448394 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/granite-speech-4.1-2b-nar-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: ibm-granite/granite-speech-4.1-2b-nar +target_repo: handy-computer/granite-speech-4.1-2b-nar-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-speech-4.1-2b-nar.md +upstream_commit: 99a4df9 pin_date: 2026-05-24 validation: @@ -10,7 +13,15 @@ validation: commit: c53af2c date: 2026-05-24 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +languages: + - en + - fr + - de + - es + - pt tags: - gguf - transcribe.cpp @@ -35,7 +46,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 5.3 + metal: 72.3 + ryzen-4750u: + cpu: 1.6 + vulkan: 4.2 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances). BF16 reference baseline (transformers `model.transcribe`, MPS, re-run @@ -49,3 +77,29 @@ wer: NAR LM uses `create_bidirectional_mask()` natively. F16, Q8_0, and Q6_K all match BF16's 1.29%; Q5_K_M dips slightly to 1.25% (within overlapping CIs). + +quants: + - name: BF16 + filename: granite-speech-4.1-2b-nar-BF16.gguf + size: 4.51 GB + wer: 1.29% + - name: F16 + filename: granite-speech-4.1-2b-nar-F16.gguf + size: 4.52 GB + wer: 1.29% + - name: Q8_0 + filename: granite-speech-4.1-2b-nar-Q8_0.gguf + size: 2.50 GB + wer: 1.29% + - name: Q6_K + filename: granite-speech-4.1-2b-nar-Q6_K.gguf + size: 1.98 GB + wer: 1.29% + - name: Q5_K_M + filename: granite-speech-4.1-2b-nar-Q5_K_M.gguf + size: 1.78 GB + wer: 1.28% + - name: Q4_K_M + filename: granite-speech-4.1-2b-nar-Q4_K_M.gguf + size: 1.56 GB + wer: 1.34% diff --git a/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml b/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml index 4f0de61d..23869451 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/granite-speech-4.1-2b-plus-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: ibm-granite/granite-speech-4.1-2b-plus +target_repo: handy-computer/granite-speech-4.1-2b-plus-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-speech-4.1-2b-plus.md +upstream_commit: edd3bf5 pin_date: 2026-05-17 validation: @@ -10,7 +13,15 @@ validation: commit: 275332d date: 2026-05-17 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +languages: + - en + - fr + - de + - es + - pt tags: - gguf - transcribe.cpp @@ -47,9 +58,20 @@ capabilities: streaming: false translate: false lang_detect: false + diarize: true timestamps: word # none | segment | word | token +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 6.3 + metal: 90.7 + ryzen-4750u: + cpu: 1.9 + vulkan: 4.9 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and the model-card chat template (system prompt + @@ -62,3 +84,29 @@ wer: without it the model emits 25-27 empty hypotheses on short test-clean clips and WER blows up to ~26%. The transcribe.cpp runtime hard-codes the prompt correctly; this note only matters if you reproduce the reference. + +quants: + - name: BF16 + filename: granite-speech-4.1-2b-plus-BF16.gguf + size: 4.23 GB + wer: 1.49% + - name: F16 + filename: granite-speech-4.1-2b-plus-F16.gguf + size: 4.23 GB + wer: 1.48% + - name: Q8_0 + filename: granite-speech-4.1-2b-plus-Q8_0.gguf + size: 2.35 GB + wer: 1.50% + - name: Q6_K + filename: granite-speech-4.1-2b-plus-Q6_K.gguf + size: 1.86 GB + wer: 1.46% + - name: Q5_K_M + filename: granite-speech-4.1-2b-plus-Q5_K_M.gguf + size: 1.69 GB + wer: 1.48% + - name: Q4_K_M + filename: granite-speech-4.1-2b-plus-Q4_K_M.gguf + size: 1.49 GB + wer: 1.56% diff --git a/scripts/hf_cards/granite-speech-4.1-2b.yaml b/scripts/hf_cards/granite-speech-4.1-2b.yaml index eb1ccb61..7caf797b 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/granite-speech-4.1-2b-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: ibm-granite/granite-speech-4.1-2b +target_repo: handy-computer/granite-speech-4.1-2b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-speech-4.1-2b.md +upstream_commit: 8f4bb5f pin_date: 2026-05-17 validation: @@ -10,7 +13,16 @@ validation: commit: 275332d date: 2026-05-17 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +languages: + - en + - fr + - de + - es + - pt + - ja tags: - gguf - transcribe.cpp @@ -34,7 +46,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 7.1 + metal: 94.9 + ryzen-4750u: + cpu: 2 + vulkan: 5 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding. BF16 reference baseline (re-run locally with the @@ -42,3 +71,29 @@ wer: 1.33%, likely a minor normalization difference on the publisher side and well within bootstrap CI overlap. Text normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. + +quants: + - name: BF16 + filename: granite-speech-4.1-2b-BF16.gguf + size: 4.63 GB + wer: 1.31% + - name: F16 + filename: granite-speech-4.1-2b-F16.gguf + size: 4.63 GB + wer: 1.32% + - name: Q8_0 + filename: granite-speech-4.1-2b-Q8_0.gguf + size: 2.56 GB + wer: 1.32% + - name: Q6_K + filename: granite-speech-4.1-2b-Q6_K.gguf + size: 2.02 GB + wer: 1.29% + - name: Q5_K_M + filename: granite-speech-4.1-2b-Q5_K_M.gguf + size: 1.83 GB + wer: 1.33% + - name: Q4_K_M + filename: granite-speech-4.1-2b-Q4_K_M.gguf + size: 1.60 GB + wer: 1.37% diff --git a/scripts/hf_cards/medasr.yaml b/scripts/hf_cards/medasr.yaml index 8b6ba787..143bb4a5 100644 --- a/scripts/hf_cards/medasr.yaml +++ b/scripts/hf_cards/medasr.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/medasr-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: google/medasr +target_repo: handy-computer/medasr-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/medasr.md +upstream_commit: ae1e484 pin_date: 2026-06-04 # Validation pin for the most recent upload. Updated on each release; @@ -12,7 +15,11 @@ validation: commit: 782abfd date: 2026-06-04 +license: other +license_display: Health AI Developer Foundations pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -29,6 +36,49 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 65.5 + metal: 354.5 + ryzen-4750u: + cpu: 19.8 + vulkan: 71 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2,620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline (HuggingFace transformers, Mac MPS): 17.88%; transcribe.cpp F32 matches exactly. Absolute WER is higher than general-purpose ASR (e.g. Whisper-base ~5%) because the model is fine-tuned for medical dictation — on the publisher's internal RAD-DICT / GENERAL-DICT / FM-DICT datasets the model scores 6.6%–9.3%, but those datasets are not publicly reproducible. Q8_0 is the recommended default (smallest preset with no statistically detectable WER degradation); Q4_K_M shows a real +0.26 pp degradation and is shipped for completeness but not recommended — prefer Q5_K_M if you need smaller than Q8_0. + +quants: + - name: F32 + filename: medasr-F32.gguf + size: 421 MB + wer: 17.88% + - name: F16 + filename: medasr-F16.gguf + size: 211 MB + wer: 17.88% + - name: Q8_0 + filename: medasr-Q8_0.gguf + size: 128 MB + wer: 17.86% + - name: Q6_K + filename: medasr-Q6_K.gguf + size: 106 MB + wer: 17.93% + - name: Q5_K_M + filename: medasr-Q5_K_M.gguf + size: 94 MB + wer: 17.91% + - name: Q4_K_M + filename: medasr-Q4_K_M.gguf + size: 83 MB + wer: 18.14% diff --git a/scripts/hf_cards/moonshine-base-ar.yaml b/scripts/hf_cards/moonshine-base-ar.yaml index c44c9b4c..caccaac5 100644 --- a/scripts/hf_cards/moonshine-base-ar.yaml +++ b/scripts/hf_cards/moonshine-base-ar.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-base-ar-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-base-ar +target_repo: handy-computer/moonshine-base-ar-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md +upstream_commit: 264cc18 pin_date: 2026-05-12 validation: @@ -10,7 +13,11 @@ validation: commit: 90bf720 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - ar tags: - gguf - transcribe.cpp @@ -30,6 +37,22 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Perf inherited from moonshine-base (identical architecture; per- +# language RTF not separately benched). +perf: + m4-max: + metal: 79.5 + cpu: 80.5 + ryzen-4750u: + vulkan: 34.5 + cpu: 22 wer: metadata_key: fleurs_ar @@ -45,3 +68,17 @@ wer: same manifest: **24.51% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). + +quants: + - name: F32 + filename: moonshine-base-ar-F32.gguf + size: 248 MB + wer: 24.45% + - name: F16 + filename: moonshine-base-ar-F16.gguf + size: 132 MB + wer: 24.45% + - name: Q8_0 + filename: moonshine-base-ar-Q8_0.gguf + size: 77 MB + wer: 24.50% diff --git a/scripts/hf_cards/moonshine-base-ja.yaml b/scripts/hf_cards/moonshine-base-ja.yaml index 30249aa8..e7a04ea0 100644 --- a/scripts/hf_cards/moonshine-base-ja.yaml +++ b/scripts/hf_cards/moonshine-base-ja.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-base-ja-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-base-ja +target_repo: handy-computer/moonshine-base-ja-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md +upstream_commit: f9d4e6a pin_date: 2026-05-12 validation: @@ -10,7 +13,11 @@ validation: commit: 90bf720 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - ja tags: - gguf - transcribe.cpp @@ -30,6 +37,22 @@ summary: | default_quant_index: 2 # Q8_0 metric: CER +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Perf inherited from moonshine-base (identical architecture; per- +# language RTF not separately benched). +perf: + m4-max: + metal: 79.5 + cpu: 80.5 + ryzen-4750u: + vulkan: 34.5 + cpu: 22 wer: metadata_key: fleurs_ja @@ -45,3 +68,17 @@ wer: same manifest: **10.69% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). + +quants: + - name: F32 + filename: moonshine-base-ja-F32.gguf + size: 248 MB + wer: 10.84% + - name: F16 + filename: moonshine-base-ja-F16.gguf + size: 132 MB + wer: 10.81% + - name: Q8_0 + filename: moonshine-base-ja-Q8_0.gguf + size: 77 MB + wer: 10.53% diff --git a/scripts/hf_cards/moonshine-base-ko.yaml b/scripts/hf_cards/moonshine-base-ko.yaml index 277321a4..cbdf9115 100644 --- a/scripts/hf_cards/moonshine-base-ko.yaml +++ b/scripts/hf_cards/moonshine-base-ko.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-base-ko-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-base-ko +target_repo: handy-computer/moonshine-base-ko-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md +upstream_commit: fff6035 pin_date: 2026-05-12 validation: @@ -10,7 +13,11 @@ validation: commit: 90bf720 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - ko tags: - gguf - transcribe.cpp @@ -30,6 +37,22 @@ summary: | default_quant_index: 2 # Q8_0 metric: CER +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Perf inherited from moonshine-base (identical architecture; per- +# language RTF not separately benched). +perf: + m4-max: + metal: 79.5 + cpu: 80.5 + ryzen-4750u: + vulkan: 34.5 + cpu: 22 wer: metadata_key: fleurs_ko @@ -45,3 +68,17 @@ wer: same manifest: **8.19% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). + +quants: + - name: F32 + filename: moonshine-base-ko-F32.gguf + size: 248 MB + wer: 8.00% + - name: F16 + filename: moonshine-base-ko-F16.gguf + size: 132 MB + wer: 8.00% + - name: Q8_0 + filename: moonshine-base-ko-Q8_0.gguf + size: 77 MB + wer: 8.13% diff --git a/scripts/hf_cards/moonshine-base-uk.yaml b/scripts/hf_cards/moonshine-base-uk.yaml index 8b2da438..8c8599e4 100644 --- a/scripts/hf_cards/moonshine-base-uk.yaml +++ b/scripts/hf_cards/moonshine-base-uk.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-base-uk-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-base-uk +target_repo: handy-computer/moonshine-base-uk-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md +upstream_commit: a52b2e9 pin_date: 2026-05-12 validation: @@ -10,7 +13,11 @@ validation: commit: 90bf720 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - uk tags: - gguf - transcribe.cpp @@ -30,6 +37,22 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Perf inherited from moonshine-base (identical architecture; per- +# language RTF not separately benched). +perf: + m4-max: + metal: 79.5 + cpu: 80.5 + ryzen-4750u: + vulkan: 34.5 + cpu: 22 wer: metadata_key: fleurs_uk @@ -45,3 +68,17 @@ wer: same manifest: **14.51% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). + +quants: + - name: F32 + filename: moonshine-base-uk-F32.gguf + size: 248 MB + wer: 14.49% + - name: F16 + filename: moonshine-base-uk-F16.gguf + size: 132 MB + wer: 14.49% + - name: Q8_0 + filename: moonshine-base-uk-Q8_0.gguf + size: 77 MB + wer: 14.39% diff --git a/scripts/hf_cards/moonshine-base-vi.yaml b/scripts/hf_cards/moonshine-base-vi.yaml index b775b878..8a3c8186 100644 --- a/scripts/hf_cards/moonshine-base-vi.yaml +++ b/scripts/hf_cards/moonshine-base-vi.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-base-vi-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-base-vi +target_repo: handy-computer/moonshine-base-vi-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md +upstream_commit: 0ee9ce9 pin_date: 2026-05-12 validation: @@ -10,7 +13,11 @@ validation: commit: 90bf720 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - vi tags: - gguf - transcribe.cpp @@ -30,6 +37,22 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Perf inherited from moonshine-base (identical architecture; per- +# language RTF not separately benched). +perf: + m4-max: + metal: 79.5 + cpu: 80.5 + ryzen-4750u: + vulkan: 34.5 + cpu: 22 wer: metadata_key: fleurs_vi @@ -45,3 +68,17 @@ wer: same manifest: **9.66% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). + +quants: + - name: F32 + filename: moonshine-base-vi-F32.gguf + size: 248 MB + wer: 9.67% + - name: F16 + filename: moonshine-base-vi-F16.gguf + size: 132 MB + wer: 9.66% + - name: Q8_0 + filename: moonshine-base-vi-Q8_0.gguf + size: 77 MB + wer: 9.79% diff --git a/scripts/hf_cards/moonshine-base-zh.yaml b/scripts/hf_cards/moonshine-base-zh.yaml index e706b0ae..43fc7437 100644 --- a/scripts/hf_cards/moonshine-base-zh.yaml +++ b/scripts/hf_cards/moonshine-base-zh.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-base-zh-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-base-zh +target_repo: handy-computer/moonshine-base-zh-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md +upstream_commit: 1df4f95 pin_date: 2026-05-12 validation: @@ -10,7 +13,11 @@ validation: commit: 90bf720 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - zh tags: - gguf - transcribe.cpp @@ -30,6 +37,22 @@ summary: | default_quant_index: 2 # Q8_0 metric: CER +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Perf inherited from moonshine-base (identical architecture; per- +# language RTF not separately benched). +perf: + m4-max: + metal: 79.5 + cpu: 80.5 + ryzen-4750u: + vulkan: 34.5 + cpu: 22 wer: metadata_key: fleurs_zh @@ -45,3 +68,17 @@ wer: same manifest: **16.61% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). + +quants: + - name: F32 + filename: moonshine-base-zh-F32.gguf + size: 248 MB + wer: 16.65% + - name: F16 + filename: moonshine-base-zh-F16.gguf + size: 132 MB + wer: 16.65% + - name: Q8_0 + filename: moonshine-base-zh-Q8_0.gguf + size: 77 MB + wer: 17.00% diff --git a/scripts/hf_cards/moonshine-base.yaml b/scripts/hf_cards/moonshine-base.yaml index ba95d3df..06d04470 100644 --- a/scripts/hf_cards/moonshine-base.yaml +++ b/scripts/hf_cards/moonshine-base.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-base-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-base +target_repo: handy-computer/moonshine-base-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-base.md +upstream_commit: 7a73d8d pin_date: 2026-05-05 validation: @@ -10,7 +13,11 @@ validation: commit: 07a8a84 date: 2026-05-05 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -30,7 +37,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 81.7 + metal: 79.5 + ryzen-4750u: + cpu: 22.2 + vulkan: 34.5 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, num_beams=1, @@ -40,3 +64,17 @@ wer: to upstream within rounding and well within the ±1.00 pp Stage 7 acceptance gate. Q8_0 lands at 3.26%, slightly under F32 — that delta sits inside the 95% bootstrap CI and is noise, not a real improvement. + +quants: + - name: F32 + filename: moonshine-base-F32.gguf + size: 248 MB + wer: 3.28% + - name: F16 + filename: moonshine-base-F16.gguf + size: 132 MB + wer: 3.28% + - name: Q8_0 + filename: moonshine-base-Q8_0.gguf + size: 77 MB + wer: 3.26% diff --git a/scripts/hf_cards/moonshine-streaming-medium.yaml b/scripts/hf_cards/moonshine-streaming-medium.yaml index 3dcc869e..b10bc831 100644 --- a/scripts/hf_cards/moonshine-streaming-medium.yaml +++ b/scripts/hf_cards/moonshine-streaming-medium.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-streaming-medium-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-streaming-medium +target_repo: handy-computer/moonshine-streaming-medium-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-streaming-medium.md +upstream_commit: 57b8436 pin_date: 2026-05-06 validation: @@ -10,7 +13,11 @@ validation: commit: 0d312ce date: 2026-05-06 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -32,7 +39,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: true + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 35.5 + metal: 62.9 + ryzen-4750u: + cpu: 7.7 + vulkan: 14.1 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference @@ -44,3 +68,17 @@ wer: found to be at 99.6% identical hypotheses to our port), and is not a numerical drift. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. + +quants: + - name: F32 + filename: moonshine-streaming-medium-F32.gguf + size: 1.07 GB + wer: 2.16% + - name: F16 + filename: moonshine-streaming-medium-F16.gguf + size: 534 MB + wer: 2.16% + - name: Q8_0 + filename: moonshine-streaming-medium-Q8_0.gguf + size: 296 MB + wer: 2.16% diff --git a/scripts/hf_cards/moonshine-streaming-small.yaml b/scripts/hf_cards/moonshine-streaming-small.yaml index fdbd0bd5..76c95df4 100644 --- a/scripts/hf_cards/moonshine-streaming-small.yaml +++ b/scripts/hf_cards/moonshine-streaming-small.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-streaming-small-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-streaming-small +target_repo: handy-computer/moonshine-streaming-small-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-streaming-small.md +upstream_commit: 2c03650 pin_date: 2026-05-06 validation: @@ -10,7 +13,11 @@ validation: commit: 0d312ce date: 2026-05-06 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -31,7 +38,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: true + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 56.9 + metal: 95.6 + ryzen-4750u: + cpu: 11.9 + vulkan: 23.2 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference @@ -42,3 +66,17 @@ wer: the same manifest, 99.6% identical hypotheses to our F32) and confirmed it is not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. + +quants: + - name: F32 + filename: moonshine-streaming-small-F32.gguf + size: 562 MB + wer: 2.53% + - name: F16 + filename: moonshine-streaming-small-F16.gguf + size: 282 MB + wer: 2.53% + - name: Q8_0 + filename: moonshine-streaming-small-Q8_0.gguf + size: 199 MB + wer: 2.54% diff --git a/scripts/hf_cards/moonshine-streaming-tiny.yaml b/scripts/hf_cards/moonshine-streaming-tiny.yaml index 37acda3e..3047c7b1 100644 --- a/scripts/hf_cards/moonshine-streaming-tiny.yaml +++ b/scripts/hf_cards/moonshine-streaming-tiny.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-streaming-tiny-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-streaming-tiny +target_repo: handy-computer/moonshine-streaming-tiny-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-streaming-tiny.md +upstream_commit: f8e9dfd pin_date: 2026-05-06 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,11 @@ validation: commit: 0d312ce date: 2026-05-06 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -32,7 +39,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: true + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 210.8 + metal: 159 + ryzen-4750u: + cpu: 54.4 + vulkan: 59.2 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference @@ -43,3 +67,17 @@ wer: table; the +0.04pp residual is a scoring / text-normalization difference vs that methodology, not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. + +quants: + - name: F32 + filename: moonshine-streaming-tiny-F32.gguf + size: 178 MB + wer: 4.53% + - name: F16 + filename: moonshine-streaming-tiny-F16.gguf + size: 90 MB + wer: 4.53% + - name: Q8_0 + filename: moonshine-streaming-tiny-Q8_0.gguf + size: 50 MB + wer: 4.52% diff --git a/scripts/hf_cards/moonshine-tiny-ar.yaml b/scripts/hf_cards/moonshine-tiny-ar.yaml index 97e2504a..76e6235b 100644 --- a/scripts/hf_cards/moonshine-tiny-ar.yaml +++ b/scripts/hf_cards/moonshine-tiny-ar.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-tiny-ar-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-tiny-ar +target_repo: handy-computer/moonshine-tiny-ar-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md +upstream_commit: 99e7fee pin_date: 2026-05-12 validation: @@ -10,7 +13,11 @@ validation: commit: 90bf720 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - ar tags: - gguf - transcribe.cpp @@ -30,6 +37,22 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Perf inherited from moonshine-tiny (identical architecture; per- +# language RTF not separately benched). +perf: + m4-max: + metal: 127 + cpu: 153.5 + ryzen-4750u: + vulkan: 56 + cpu: 45.5 wer: metadata_key: fleurs_ar @@ -45,3 +68,17 @@ wer: same manifest: **27.13% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). + +quants: + - name: F32 + filename: moonshine-tiny-ar-F32.gguf + size: 110 MB + wer: 27.11% + - name: F16 + filename: moonshine-tiny-ar-F16.gguf + size: 59 MB + wer: 27.11% + - name: Q8_0 + filename: moonshine-tiny-ar-Q8_0.gguf + size: 35 MB + wer: 26.79% diff --git a/scripts/hf_cards/moonshine-tiny-ja.yaml b/scripts/hf_cards/moonshine-tiny-ja.yaml index b19f1613..d396961c 100644 --- a/scripts/hf_cards/moonshine-tiny-ja.yaml +++ b/scripts/hf_cards/moonshine-tiny-ja.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-tiny-ja-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-tiny-ja +target_repo: handy-computer/moonshine-tiny-ja-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md +upstream_commit: 02ca41b pin_date: 2026-05-12 validation: @@ -10,7 +13,11 @@ validation: commit: 90bf720 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - ja tags: - gguf - transcribe.cpp @@ -30,6 +37,22 @@ summary: | default_quant_index: 2 # Q8_0 metric: CER +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Perf inherited from moonshine-tiny (identical architecture; per- +# language RTF not separately benched). +perf: + m4-max: + metal: 127 + cpu: 153.5 + ryzen-4750u: + vulkan: 56 + cpu: 45.5 wer: metadata_key: fleurs_ja @@ -45,3 +68,17 @@ wer: same manifest: **13.23% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). + +quants: + - name: F32 + filename: moonshine-tiny-ja-F32.gguf + size: 110 MB + wer: 13.20% + - name: F16 + filename: moonshine-tiny-ja-F16.gguf + size: 59 MB + wer: 13.20% + - name: Q8_0 + filename: moonshine-tiny-ja-Q8_0.gguf + size: 35 MB + wer: 13.36% diff --git a/scripts/hf_cards/moonshine-tiny-ko.yaml b/scripts/hf_cards/moonshine-tiny-ko.yaml index b400a73f..eb1dad6a 100644 --- a/scripts/hf_cards/moonshine-tiny-ko.yaml +++ b/scripts/hf_cards/moonshine-tiny-ko.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-tiny-ko-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-tiny-ko +target_repo: handy-computer/moonshine-tiny-ko-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md +upstream_commit: 80995f0 pin_date: 2026-05-12 validation: @@ -10,7 +13,11 @@ validation: commit: 90bf720 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - ko tags: - gguf - transcribe.cpp @@ -30,6 +37,22 @@ summary: | default_quant_index: 2 # Q8_0 metric: CER +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Perf inherited from moonshine-tiny (identical architecture; per- +# language RTF not separately benched). +perf: + m4-max: + metal: 127 + cpu: 153.5 + ryzen-4750u: + vulkan: 56 + cpu: 45.5 wer: metadata_key: fleurs_ko @@ -45,3 +68,17 @@ wer: same manifest: **8.99% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). + +quants: + - name: F32 + filename: moonshine-tiny-ko-F32.gguf + size: 110 MB + wer: 8.97% + - name: F16 + filename: moonshine-tiny-ko-F16.gguf + size: 59 MB + wer: 8.97% + - name: Q8_0 + filename: moonshine-tiny-ko-Q8_0.gguf + size: 35 MB + wer: 8.98% diff --git a/scripts/hf_cards/moonshine-tiny-uk.yaml b/scripts/hf_cards/moonshine-tiny-uk.yaml index 066febd8..2801dcb7 100644 --- a/scripts/hf_cards/moonshine-tiny-uk.yaml +++ b/scripts/hf_cards/moonshine-tiny-uk.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-tiny-uk-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-tiny-uk +target_repo: handy-computer/moonshine-tiny-uk-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md +upstream_commit: 8cf70f4 pin_date: 2026-05-12 validation: @@ -10,7 +13,11 @@ validation: commit: 90bf720 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - uk tags: - gguf - transcribe.cpp @@ -30,6 +37,22 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Perf inherited from moonshine-tiny (identical architecture; per- +# language RTF not separately benched). +perf: + m4-max: + metal: 127 + cpu: 153.5 + ryzen-4750u: + vulkan: 56 + cpu: 45.5 wer: metadata_key: fleurs_uk @@ -45,3 +68,17 @@ wer: same manifest: **18.86% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). + +quants: + - name: F32 + filename: moonshine-tiny-uk-F32.gguf + size: 110 MB + wer: 18.83% + - name: F16 + filename: moonshine-tiny-uk-F16.gguf + size: 59 MB + wer: 18.82% + - name: Q8_0 + filename: moonshine-tiny-uk-Q8_0.gguf + size: 35 MB + wer: 18.89% diff --git a/scripts/hf_cards/moonshine-tiny-vi.yaml b/scripts/hf_cards/moonshine-tiny-vi.yaml index 1770a5ca..9d1ce07f 100644 --- a/scripts/hf_cards/moonshine-tiny-vi.yaml +++ b/scripts/hf_cards/moonshine-tiny-vi.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-tiny-vi-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-tiny-vi +target_repo: handy-computer/moonshine-tiny-vi-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md +upstream_commit: d4d20da pin_date: 2026-05-12 validation: @@ -10,7 +13,11 @@ validation: commit: 90bf720 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - vi tags: - gguf - transcribe.cpp @@ -30,6 +37,22 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Perf inherited from moonshine-tiny (identical architecture; per- +# language RTF not separately benched). +perf: + m4-max: + metal: 127 + cpu: 153.5 + ryzen-4750u: + vulkan: 56 + cpu: 45.5 wer: metadata_key: fleurs_vi @@ -45,3 +68,17 @@ wer: same manifest: **13.18% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). + +quants: + - name: F32 + filename: moonshine-tiny-vi-F32.gguf + size: 110 MB + wer: 13.16% + - name: F16 + filename: moonshine-tiny-vi-F16.gguf + size: 59 MB + wer: 13.17% + - name: Q8_0 + filename: moonshine-tiny-vi-Q8_0.gguf + size: 35 MB + wer: 13.16% diff --git a/scripts/hf_cards/moonshine-tiny-zh.yaml b/scripts/hf_cards/moonshine-tiny-zh.yaml index cb6e6b18..701ca35e 100644 --- a/scripts/hf_cards/moonshine-tiny-zh.yaml +++ b/scripts/hf_cards/moonshine-tiny-zh.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-tiny-zh-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-tiny-zh +target_repo: handy-computer/moonshine-tiny-zh-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md +upstream_commit: "3306270" pin_date: 2026-05-12 validation: @@ -10,7 +13,11 @@ validation: commit: 90bf720 date: 2026-05-12 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - zh tags: - gguf - transcribe.cpp @@ -30,6 +37,22 @@ summary: | default_quant_index: 2 # Q8_0 metric: CER +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Perf inherited from moonshine-tiny (identical architecture; per- +# language RTF not separately benched). +perf: + m4-max: + metal: 127 + cpu: 153.5 + ryzen-4750u: + vulkan: 56 + cpu: 45.5 wer: metadata_key: fleurs_zh @@ -45,3 +68,17 @@ wer: same manifest: **13.72% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). + +quants: + - name: F32 + filename: moonshine-tiny-zh-F32.gguf + size: 110 MB + wer: 13.70% + - name: F16 + filename: moonshine-tiny-zh-F16.gguf + size: 59 MB + wer: 13.70% + - name: Q8_0 + filename: moonshine-tiny-zh-Q8_0.gguf + size: 35 MB + wer: 13.78% diff --git a/scripts/hf_cards/moonshine-tiny.yaml b/scripts/hf_cards/moonshine-tiny.yaml index a25776e7..169c03c1 100644 --- a/scripts/hf_cards/moonshine-tiny.yaml +++ b/scripts/hf_cards/moonshine-tiny.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/moonshine-tiny-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: UsefulSensors/moonshine-tiny +target_repo: handy-computer/moonshine-tiny-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-tiny.md +upstream_commit: 390624e pin_date: 2026-05-05 validation: @@ -10,7 +13,11 @@ validation: commit: 07a8a84 date: 2026-05-05 +license: mit +license_display: MIT pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -28,7 +35,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 153.6 + metal: 130.9 + ryzen-4750u: + cpu: 45.4 + vulkan: 54.9 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, num_beams=1, @@ -37,3 +61,17 @@ wer: Our F32 reference baseline lands at 4.58%, within rounding of upstream and well within the ±1.00 pp Stage 7 acceptance gate. Q8_0 drift is +0.02 pp vs F32 — within bootstrap CI noise. + +quants: + - name: F32 + filename: moonshine-tiny-F32.gguf + size: 110 MB + wer: 4.58% + - name: F16 + filename: moonshine-tiny-F16.gguf + size: 59 MB + wer: 4.58% + - name: Q8_0 + filename: moonshine-tiny-Q8_0.gguf + size: 35 MB + wer: 4.60% diff --git a/scripts/hf_cards/moss-transcribe-diarize.yaml b/scripts/hf_cards/moss-transcribe-diarize.yaml index d7313d4f..0880b20a 100644 --- a/scripts/hf_cards/moss-transcribe-diarize.yaml +++ b/scripts/hf_cards/moss-transcribe-diarize.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/MOSS-Transcribe-Diarize-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: OpenMOSS-Team/MOSS-Transcribe-Diarize +target_repo: handy-computer/MOSS-Transcribe-Diarize-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moss-transcribe-diarize.md +upstream_commit: d7231bb pin_date: 2026-07-12 validation: @@ -10,7 +13,12 @@ validation: commit: 3f5e15c date: 2026-07-12 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +languages: + - en + - zh tags: - gguf - transcribe.cpp @@ -38,9 +46,22 @@ capabilities: streaming: false translate: false lang_detect: false + diarize: true timestamps: segment # none | segment | word | token +# Speedup-over-realtime (xRT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. Values average the Q8_0 jfk and +# dots publication cells. +perf: + m4-max: + metal: 28.1 + cpu: 5.8 + ryzen-4750u: + vulkan: 3.0 + cpu: 1.6 + wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech `test-clean` split (2620 English utterances) with the Whisper-style English text normalizer and jiwer @@ -61,3 +82,29 @@ wer: Q5_K_M or higher if those tail failures matter. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py --dediarize`; public `full_text` applies equivalent marker removal. + +quants: + - name: BF16 + filename: MOSS-Transcribe-Diarize-BF16.gguf + size: 1.83 GB + wer: 2.08% + - name: F16 + filename: MOSS-Transcribe-Diarize-F16.gguf + size: 1.83 GB + wer: 2.07% + - name: Q8_0 + filename: MOSS-Transcribe-Diarize-Q8_0.gguf + size: 987 MB + wer: 1.93% + - name: Q6_K + filename: MOSS-Transcribe-Diarize-Q6_K.gguf + size: 768 MB + wer: 1.96% + - name: Q5_K_M + filename: MOSS-Transcribe-Diarize-Q5_K_M.gguf + size: 700 MB + wer: 1.99% + - name: Q4_K_M + filename: MOSS-Transcribe-Diarize-Q4_K_M.gguf + size: 617 MB + wer: 2.59% diff --git a/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml b/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml index 6065cdfe..17e29646 100644 --- a/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml +++ b/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/multitalker-parakeet-streaming-0.6b-v1 +target_repo: handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/multitalker-parakeet-streaming-0.6b-v1.md +upstream_commit: 8749fc7 pin_date: 2026-07-12 # Validation pin for the most recent upload. Updated on each release; @@ -12,9 +15,18 @@ validation: commit: 3083021 date: 2026-08-03 +# Upstream is the NVIDIA Open Model License (not a standard SPDX id), so +# the HF `license` field gets `other` and `license_name` / `license_link` +# carry the actual identifier + URL into the YAML frontmatter (HF prefers +# this when license=other). `license_display` is the human-facing form +# rendered in the README body. +license: other license_name: nvidia-open-model-license license_link: https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/ +license_display: NVIDIA Open Model License pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -34,6 +46,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: true + diarize: true + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (xRT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. Values average the Q8_0 jfk and +# dots publication cells. +perf: + m4-max: + cpu: 34.6 + metal: 180.9 + ryzen-4750u: + cpu: 13.2 + vulkan: 25.2 metrics: cpwer_ami_ihm_test: bundle_f32_kernel: 19.35 @@ -64,3 +94,29 @@ wer: -m bundle/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf \ meeting.wav ``` + +quants: + - name: F32 + filename: bundle/multitalker-parakeet-streaming-0.6b-v1-F32.gguf + size: 2.96 GB + wer: 2.19% + - name: F16 + filename: bundle/multitalker-parakeet-streaming-0.6b-v1-F16.gguf + size: 1.48 GB + wer: 2.19% + - name: Q8_0 + filename: bundle/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf + size: 873 MB + wer: 2.18% + - name: Q6_K + filename: bundle/multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf + size: 743 MB + wer: 2.20% + - name: Q5_K_M + filename: bundle/multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf + size: 681 MB + wer: 2.18% + - name: Q4_K_M + filename: bundle/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf + size: 617 MB + wer: 2.18% diff --git a/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml b/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml index 9183d7df..51511ba4 100644 --- a/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml +++ b/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/nemotron-3.5-asr-streaming-0.6b +target_repo: handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/nemotron-3.5-asr-streaming-0.6b.md +upstream_commit: 24b151a pin_date: 2026-06-08 # Validation pin for the most recent upload. Updated on each release; @@ -12,9 +15,19 @@ validation: commit: 909e94e date: 2026-06-08 +# Upstream is OpenMDW-1.1, not a standard SPDX id, so the HF `license` +# field gets `other` and `license_name` / `license_link` carry the actual +# identifier + URL. `license_display` is the human-facing form. +license: other license_name: openmdw-1.1 license_link: https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b +license_display: OpenMDW-1.1 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - languages + languages: - en - es @@ -61,6 +74,22 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: true + translate: false + lang_detect: true + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 28.9 + metal: 98.5 + ryzen-4750u: + cpu: 7.5 + vulkan: 14.6 wer: metadata_key: fleurs_en source: FLEURS test en (en-US), offline att_context_size=[56, 13] @@ -73,3 +102,29 @@ wer: q6_k: 3.07 q5_k_m: 3.10 q4_k_m: 3.28 + +quants: + - name: F32 + filename: nemotron-3.5-asr-streaming-0.6b-F32.gguf + size: 2.55 GB + wer: 7.97% + - name: F16 + filename: nemotron-3.5-asr-streaming-0.6b-F16.gguf + size: 1.28 GB + wer: 7.97% + - name: Q8_0 + filename: nemotron-3.5-asr-streaming-0.6b-Q8_0.gguf + size: 751 MB + wer: 7.88% + - name: Q6_K + filename: nemotron-3.5-asr-streaming-0.6b-Q6_K.gguf + size: 621 MB + wer: 8.02% + - name: Q5_K_M + filename: nemotron-3.5-asr-streaming-0.6b-Q5_K_M.gguf + size: 560 MB + wer: 8.15% + - name: Q4_K_M + filename: nemotron-3.5-asr-streaming-0.6b-Q4_K_M.gguf + size: 496 MB + wer: 8.49% diff --git a/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml b/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml index ef3fc162..470dec21 100644 --- a/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml +++ b/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/nemotron-speech-streaming-en-0.6b-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/nemotron-speech-streaming-en-0.6b +target_repo: handy-computer/nemotron-speech-streaming-en-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/nemotron-speech-streaming-en-0.6b.md +upstream_commit: ef3bf40 pin_date: 2026-05-11 # Validation pin for the most recent upload. Updated on each release; @@ -12,9 +15,18 @@ validation: commit: 12f1076 date: 2026-05-11 +# Upstream is the NVIDIA Open Model License (not a standard SPDX id), so +# the HF `license` field gets `other` and `license_name` / `license_link` +# carry the actual identifier + URL into the YAML frontmatter (HF prefers +# this when license=other). `license_display` is the human-facing form +# rendered in the README body. +license: other license_name: nvidia-open-model-license license_link: https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/ +license_display: NVIDIA Open Model License pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -31,7 +43,49 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: true + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 30.9 + metal: 154.5 + ryzen-4750u: + cpu: 7.4 + vulkan: 12.8 wer: source: LibriSpeech test-clean, offline notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding. F32 reference baseline: 2.31%. NVIDIA's self-reported number on the same split at att_context_size=[70, 13] (1.12s chunk, w/o PnC) is 2.32%. + +quants: + - name: F32 + filename: nemotron-speech-streaming-en-0.6b-F32.gguf + size: 2.47 GB + wer: 2.31% + - name: F16 + filename: nemotron-speech-streaming-en-0.6b-F16.gguf + size: 1.24 GB + wer: 2.31% + - name: Q8_0 + filename: nemotron-speech-streaming-en-0.6b-Q8_0.gguf + size: 730 MB + wer: 2.31% + - name: Q6_K + filename: nemotron-speech-streaming-en-0.6b-Q6_K.gguf + size: 600 MB + wer: 2.29% + - name: Q5_K_M + filename: nemotron-speech-streaming-en-0.6b-Q5_K_M.gguf + size: 539 MB + wer: 2.34% + - name: Q4_K_M + filename: nemotron-speech-streaming-en-0.6b-Q4_K_M.gguf + size: 475 MB + wer: 2.38% diff --git a/scripts/hf_cards/parakeet-ctc-0.6b.yaml b/scripts/hf_cards/parakeet-ctc-0.6b.yaml index d0721de2..0d012a51 100644 --- a/scripts/hf_cards/parakeet-ctc-0.6b.yaml +++ b/scripts/hf_cards/parakeet-ctc-0.6b.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/parakeet-ctc-0.6b-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/parakeet-ctc-0.6b +target_repo: handy-computer/parakeet-ctc-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-ctc-0.6b.md +upstream_commit: ad09ba1 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,11 @@ validation: commit: 42528dd date: 2026-05-10 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -27,6 +34,49 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 30.3 + metal: 224.7 + ryzen-4750u: + cpu: 10 + vulkan: 22.4 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.87%. + +quants: + - name: F32 + filename: parakeet-ctc-0.6b-F32.gguf + size: 2.44 GB + wer: 1.87% + - name: F16 + filename: parakeet-ctc-0.6b-F16.gguf + size: 1.22 GB + wer: 1.87% + - name: Q8_0 + filename: parakeet-ctc-0.6b-Q8_0.gguf + size: 722 MB + wer: 1.87% + - name: Q6_K + filename: parakeet-ctc-0.6b-Q6_K.gguf + size: 594 MB + wer: 1.84% + - name: Q5_K_M + filename: parakeet-ctc-0.6b-Q5_K_M.gguf + size: 533 MB + wer: 1.87% + - name: Q4_K_M + filename: parakeet-ctc-0.6b-Q4_K_M.gguf + size: 469 MB + wer: 1.90% diff --git a/scripts/hf_cards/parakeet-ctc-1.1b.yaml b/scripts/hf_cards/parakeet-ctc-1.1b.yaml index e5c97736..0b526bb8 100644 --- a/scripts/hf_cards/parakeet-ctc-1.1b.yaml +++ b/scripts/hf_cards/parakeet-ctc-1.1b.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/parakeet-ctc-1.1b-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/parakeet-ctc-1.1b +target_repo: handy-computer/parakeet-ctc-1.1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-ctc-1.1b.md +upstream_commit: a707e81 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,11 @@ validation: commit: 42528dd date: 2026-05-10 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -27,6 +34,49 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 17.8 + metal: 142.8 + ryzen-4750u: + cpu: 6 + vulkan: 14.2 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.85%. NVIDIA's self-reported number on the same split is 1.83%. + +quants: + - name: F32 + filename: parakeet-ctc-1.1b-F32.gguf + size: 4.25 GB + wer: 1.85% + - name: F16 + filename: parakeet-ctc-1.1b-F16.gguf + size: 2.13 GB + wer: 1.85% + - name: Q8_0 + filename: parakeet-ctc-1.1b-Q8_0.gguf + size: 1.26 GB + wer: 1.85% + - name: Q6_K + filename: parakeet-ctc-1.1b-Q6_K.gguf + size: 1.04 GB + wer: 1.85% + - name: Q5_K_M + filename: parakeet-ctc-1.1b-Q5_K_M.gguf + size: 929 MB + wer: 1.84% + - name: Q4_K_M + filename: parakeet-ctc-1.1b-Q4_K_M.gguf + size: 818 MB + wer: 1.90% diff --git a/scripts/hf_cards/parakeet-primeline.yaml b/scripts/hf_cards/parakeet-primeline.yaml index e690d916..4c0ff534 100644 --- a/scripts/hf_cards/parakeet-primeline.yaml +++ b/scripts/hf_cards/parakeet-primeline.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/parakeet-primeline-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: primeline/parakeet-primeline +target_repo: handy-computer/parakeet-primeline-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-primeline.md +upstream_commit: 3f1a9bc pin_date: 2026-08-16 validation: @@ -10,7 +13,14 @@ validation: commit: 856d7c1 date: 2026-08-16 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - languages + languages: - de - bg @@ -61,6 +71,23 @@ summary: | default_quant_index: 2 # Q8_0 metric: WER +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: true + timestamps: token # none | segment | word | token + +# Perf inherited from parakeet-tdt-0.6b-v3. The checkpoint is a +# weights-only fine-tune whose encoder/decoder/joint config is identical, +# so RTF is unchanged; not separately benched. +perf: + m4-max: + metal: 151 + cpu: 28 + ryzen-4750u: + vulkan: 12.5 + cpu: 7.5 wer: metadata_key: fleurs_de @@ -84,3 +111,29 @@ wer: produces the same spellings on the same utterances. FLEURS references use `ß` throughout, which costs roughly 1.05pp: folding `ß`→`ss` on both sides gives 4.92% for the reference and 4.94% for F32. + +quants: + - name: F32 + filename: parakeet-primeline-F32.gguf + size: 2.51 GB + wer: 6.00% + - name: F16 + filename: parakeet-primeline-F16.gguf + size: 1.26 GB + wer: 6.00% + - name: Q8_0 + filename: parakeet-primeline-Q8_0.gguf + size: 740 MB + wer: 6.00% + - name: Q6_K + filename: parakeet-primeline-Q6_K.gguf + size: 610 MB + wer: 5.96% + - name: Q5_K_M + filename: parakeet-primeline-Q5_K_M.gguf + size: 549 MB + wer: 5.99% + - name: Q4_K_M + filename: parakeet-primeline-Q4_K_M.gguf + size: 485 MB + wer: 5.98% diff --git a/scripts/hf_cards/parakeet-rnnt-0.6b.yaml b/scripts/hf_cards/parakeet-rnnt-0.6b.yaml index f3ed6b59..bd19df6a 100644 --- a/scripts/hf_cards/parakeet-rnnt-0.6b.yaml +++ b/scripts/hf_cards/parakeet-rnnt-0.6b.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/parakeet-rnnt-0.6b-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/parakeet-rnnt-0.6b +target_repo: handy-computer/parakeet-rnnt-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-rnnt-0.6b.md +upstream_commit: c0c1f09 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,11 @@ validation: commit: 42528dd date: 2026-05-10 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -27,6 +34,49 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 30 + metal: 185.5 + ryzen-4750u: + cpu: 7.9 + vulkan: 14.4 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.62%. NVIDIA's self-reported number on the same split is 1.63%. + +quants: + - name: F32 + filename: parakeet-rnnt-0.6b-F32.gguf + size: 2.47 GB + wer: 1.62% + - name: F16 + filename: parakeet-rnnt-0.6b-F16.gguf + size: 1.24 GB + wer: 1.62% + - name: Q8_0 + filename: parakeet-rnnt-0.6b-Q8_0.gguf + size: 730 MB + wer: 1.62% + - name: Q6_K + filename: parakeet-rnnt-0.6b-Q6_K.gguf + size: 601 MB + wer: 1.62% + - name: Q5_K_M + filename: parakeet-rnnt-0.6b-Q5_K_M.gguf + size: 540 MB + wer: 1.62% + - name: Q4_K_M + filename: parakeet-rnnt-0.6b-Q4_K_M.gguf + size: 476 MB + wer: 1.66% diff --git a/scripts/hf_cards/parakeet-rnnt-1.1b.yaml b/scripts/hf_cards/parakeet-rnnt-1.1b.yaml index 4771bbe8..3a61f7f8 100644 --- a/scripts/hf_cards/parakeet-rnnt-1.1b.yaml +++ b/scripts/hf_cards/parakeet-rnnt-1.1b.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/parakeet-rnnt-1.1b-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/parakeet-rnnt-1.1b +target_repo: handy-computer/parakeet-rnnt-1.1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-rnnt-1.1b.md +upstream_commit: a07b19e pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,11 @@ validation: commit: 42528dd date: 2026-05-10 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -27,6 +34,49 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 17.5 + metal: 125.5 + ryzen-4750u: + cpu: 5.3 + vulkan: 10.7 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.45%. NVIDIA's self-reported number on the same split is 1.46%. + +quants: + - name: F32 + filename: parakeet-rnnt-1.1b-F32.gguf + size: 4.28 GB + wer: 1.45% + - name: F16 + filename: parakeet-rnnt-1.1b-F16.gguf + size: 2.15 GB + wer: 1.45% + - name: Q8_0 + filename: parakeet-rnnt-1.1b-Q8_0.gguf + size: 1.27 GB + wer: 1.46% + - name: Q6_K + filename: parakeet-rnnt-1.1b-Q6_K.gguf + size: 1.04 GB + wer: 1.43% + - name: Q5_K_M + filename: parakeet-rnnt-1.1b-Q5_K_M.gguf + size: 936 MB + wer: 1.43% + - name: Q4_K_M + filename: parakeet-rnnt-1.1b-Q4_K_M.gguf + size: 825 MB + wer: 1.41% diff --git a/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml b/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml index c8fcf796..fce44754 100644 --- a/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml +++ b/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/parakeet-tdt-0.6b-v2-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/parakeet-tdt-0.6b-v2 +target_repo: handy-computer/parakeet-tdt-0.6b-v2-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt-0.6b-v2.md +upstream_commit: 1b149a3 pin_date: 2026-04-15 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,11 @@ validation: commit: bf0d0b7 date: 2026-04-18 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -31,10 +38,53 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, hand-authored from the bench; +# published raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 29 + metal: 175 + ryzen-4750u: + cpu: 8 + vulkan: 15.4 wer: + source: LibriSpeech test-clean # metadata_key: librispeech_test_clean # names the wer_ field; override when scored on another corpus notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy transducer decoding and no external LM. F32 reference baseline: 1.68%. NVIDIA's self-reported number on the same split is 1.69%, so the F32 and Q8_0 ports match the upstream reference within rounding. + +quants: + - name: F32 + filename: parakeet-tdt-0.6b-v2-F32.gguf + size: 2.47 GB + wer: 1.68% + - name: F16 + filename: parakeet-tdt-0.6b-v2-F16.gguf + size: 1.24 GB + wer: 1.68% + - name: Q8_0 + filename: parakeet-tdt-0.6b-v2-Q8_0.gguf + size: 730 MB + wer: 1.69% + - name: Q6_K + filename: parakeet-tdt-0.6b-v2-Q6_K.gguf + size: 600 MB + wer: 1.70% + - name: Q5_K_M + filename: parakeet-tdt-0.6b-v2-Q5_K_M.gguf + size: 539 MB + wer: 1.70% + - name: Q4_K_M + filename: parakeet-tdt-0.6b-v2-Q4_K_M.gguf + size: 475 MB + wer: 1.72% diff --git a/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml b/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml index 15ae634b..36b4c421 100644 --- a/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml +++ b/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/parakeet-tdt-0.6b-v3-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/parakeet-tdt-0.6b-v3 +target_repo: handy-computer/parakeet-tdt-0.6b-v3-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt-0.6b-v3.md +upstream_commit: 6d590f7 pin_date: 2026-04-16 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,35 @@ validation: commit: bf0d0b7 date: 2026-04-18 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - bg + - hr + - cs + - da + - nl + - en + - et + - fi + - fr + - de + - el + - hu + - it + - lv + - lt + - mt + - pl + - pt + - ro + - ru + - sk + - sl + - es + - sv + - uk tags: - gguf - transcribe.cpp @@ -32,8 +63,51 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: true + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 27.8 + metal: 153.7 + ryzen-4750u: + cpu: 7.4 + vulkan: 12.2 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy transducer decoding and no external LM. F32 reference baseline: 1.95%. NVIDIA's self-reported number on the same split is 1.93%. + +quants: + - name: F32 + filename: parakeet-tdt-0.6b-v3-F32.gguf + size: 2.51 GB + wer: 1.95% + - name: F16 + filename: parakeet-tdt-0.6b-v3-F16.gguf + size: 1.26 GB + wer: 1.95% + - name: Q8_0 + filename: parakeet-tdt-0.6b-v3-Q8_0.gguf + size: 740 MB + wer: 1.94% + - name: Q6_K + filename: parakeet-tdt-0.6b-v3-Q6_K.gguf + size: 610 MB + wer: 1.93% + - name: Q5_K_M + filename: parakeet-tdt-0.6b-v3-Q5_K_M.gguf + size: 549 MB + wer: 1.92% + - name: Q4_K_M + filename: parakeet-tdt-0.6b-v3-Q4_K_M.gguf + size: 485 MB + wer: 1.98% diff --git a/scripts/hf_cards/parakeet-tdt-1.1b.yaml b/scripts/hf_cards/parakeet-tdt-1.1b.yaml index 0ff2b45a..37178b4a 100644 --- a/scripts/hf_cards/parakeet-tdt-1.1b.yaml +++ b/scripts/hf_cards/parakeet-tdt-1.1b.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/parakeet-tdt-1.1b-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/parakeet-tdt-1.1b +target_repo: handy-computer/parakeet-tdt-1.1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt-1.1b.md +upstream_commit: 53276c6 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,11 @@ validation: commit: 42528dd date: 2026-05-10 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -28,6 +35,49 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 17.5 + metal: 127.4 + ryzen-4750u: + cpu: 5.5 + vulkan: 11.6 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.39%. NVIDIA's self-reported number on the same split is 1.39%. + +quants: + - name: F32 + filename: parakeet-tdt-1.1b-F32.gguf + size: 4.28 GB + wer: 1.39% + - name: F16 + filename: parakeet-tdt-1.1b-F16.gguf + size: 2.15 GB + wer: 1.39% + - name: Q8_0 + filename: parakeet-tdt-1.1b-Q8_0.gguf + size: 1.27 GB + wer: 1.38% + - name: Q6_K + filename: parakeet-tdt-1.1b-Q6_K.gguf + size: 1.04 GB + wer: 1.40% + - name: Q5_K_M + filename: parakeet-tdt-1.1b-Q5_K_M.gguf + size: 936 MB + wer: 1.39% + - name: Q4_K_M + filename: parakeet-tdt-1.1b-Q4_K_M.gguf + size: 825 MB + wer: 1.42% diff --git a/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml b/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml index e95cc10f..e5574bed 100644 --- a/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml +++ b/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/parakeet-tdt_ctc-1.1b-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/parakeet-tdt_ctc-1.1b +target_repo: handy-computer/parakeet-tdt_ctc-1.1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt_ctc-1.1b.md +upstream_commit: '675e786' pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,11 @@ validation: commit: 42528dd date: 2026-05-10 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -28,6 +35,49 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 18.3 + metal: 123.9 + ryzen-4750u: + cpu: 5.4 + vulkan: 11.3 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.82%. + +quants: + - name: F32 + filename: parakeet-tdt_ctc-1.1b-F32.gguf + size: 4.28 GB + wer: 1.87% + - name: F16 + filename: parakeet-tdt_ctc-1.1b-F16.gguf + size: 2.15 GB + wer: 1.87% + - name: Q8_0 + filename: parakeet-tdt_ctc-1.1b-Q8_0.gguf + size: 1.27 GB + wer: 1.87% + - name: Q6_K + filename: parakeet-tdt_ctc-1.1b-Q6_K.gguf + size: 1.04 GB + wer: 1.87% + - name: Q5_K_M + filename: parakeet-tdt_ctc-1.1b-Q5_K_M.gguf + size: 936 MB + wer: 1.87% + - name: Q4_K_M + filename: parakeet-tdt_ctc-1.1b-Q4_K_M.gguf + size: 825 MB + wer: 1.91% diff --git a/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml b/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml index dc820140..3136d26b 100644 --- a/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml +++ b/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/parakeet-tdt_ctc-110m-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/parakeet-tdt_ctc-110m +target_repo: handy-computer/parakeet-tdt_ctc-110m-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt_ctc-110m.md +upstream_commit: 431a349 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,11 @@ validation: commit: 42528dd date: 2026-05-10 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -28,6 +35,49 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 113 + metal: 339.2 + ryzen-4750u: + cpu: 23.5 + vulkan: 32.5 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 2.43%. NVIDIA's self-reported number on the same split is 2.40%. + +quants: + - name: F32 + filename: parakeet-tdt_ctc-110m-F32.gguf + size: 457 MB + wer: 2.43% + - name: F16 + filename: parakeet-tdt_ctc-110m-F16.gguf + size: 229 MB + wer: 2.43% + - name: Q8_0 + filename: parakeet-tdt_ctc-110m-Q8_0.gguf + size: 135 MB + wer: 2.43% + - name: Q6_K + filename: parakeet-tdt_ctc-110m-Q6_K.gguf + size: 112 MB + wer: 2.44% + - name: Q5_K_M + filename: parakeet-tdt_ctc-110m-Q5_K_M.gguf + size: 101 MB + wer: 2.47% + - name: Q4_K_M + filename: parakeet-tdt_ctc-110m-Q4_K_M.gguf + size: 90 MB + wer: 2.53% diff --git a/scripts/hf_cards/parakeet-unified-en-0.6b.yaml b/scripts/hf_cards/parakeet-unified-en-0.6b.yaml index 141795c9..6c859a3b 100644 --- a/scripts/hf_cards/parakeet-unified-en-0.6b.yaml +++ b/scripts/hf_cards/parakeet-unified-en-0.6b.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/parakeet-unified-en-0.6b-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: nvidia/parakeet-unified-en-0.6b +target_repo: handy-computer/parakeet-unified-en-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-unified-en-0.6b.md +upstream_commit: d4ac992 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,11 @@ validation: commit: 42528dd date: 2026-05-10 +license: cc-by-4.0 +license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition +languages: + - en tags: - gguf - transcribe.cpp @@ -27,7 +34,49 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: true + translate: false + lang_detect: false + timestamps: token # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 28.5 + metal: 163 + ryzen-4750u: + cpu: 7.5 + vulkan: 12.4 wer: source: LibriSpeech test-clean, offline notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.59%. NVIDIA's self-reported number on the same split is 1.63%. + +quants: + - name: F32 + filename: parakeet-unified-en-0.6b-F32.gguf + size: 2.47 GB + wer: 1.59% + - name: F16 + filename: parakeet-unified-en-0.6b-F16.gguf + size: 1.24 GB + wer: 1.59% + - name: Q8_0 + filename: parakeet-unified-en-0.6b-Q8_0.gguf + size: 731 MB + wer: 1.60% + - name: Q6_K + filename: parakeet-unified-en-0.6b-Q6_K.gguf + size: 602 MB + wer: 1.61% + - name: Q5_K_M + filename: parakeet-unified-en-0.6b-Q5_K_M.gguf + size: 541 MB + wer: 1.58% + - name: Q4_K_M + filename: parakeet-unified-en-0.6b-Q4_K_M.gguf + size: 477 MB + wer: 1.62% diff --git a/scripts/hf_cards/qwen3-asr-0.6b.yaml b/scripts/hf_cards/qwen3-asr-0.6b.yaml index bcbc8f2c..cfdfa154 100644 --- a/scripts/hf_cards/qwen3-asr-0.6b.yaml +++ b/scripts/hf_cards/qwen3-asr-0.6b.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/qwen3-asr-0.6b-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: Qwen/Qwen3-ASR-0.6B +target_repo: handy-computer/Qwen3-ASR-0.6B-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/qwen3-asr-0.6b.md +upstream_commit: 5eb144179a02acc5e5ba31e748d22b0cf3e303b0 pin_date: 2026-04-19 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,40 @@ validation: commit: 3f61df7 date: 2026-04-20 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +languages: + - zh + - en + - yue + - ar + - de + - fr + - es + - pt + - id + - it + - ko + - ru + - th + - vi + - ja + - tr + - hi + - ms + - nl + - sv + - da + - fi + - pl + - cs + - fil + - fa + - el + - ro + - hu + - mk tags: - gguf - transcribe.cpp @@ -31,7 +67,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: true + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 16.5 + metal: 65 + ryzen-4750u: + cpu: 4.4 + vulkan: 8 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech `test-clean` split (2620 English utterances) with the Whisper-style English text normalizer and jiwer 3.x, @@ -40,3 +93,29 @@ wer: are all within bootstrap CI of each other; Q5_K_M and Q4_K_M show a small but real regression driven by the tied token-embedding / head. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. + +quants: + - name: BF16 + filename: Qwen3-ASR-0.6B-BF16.gguf + size: 1.57 GB + wer: 2.12% + - name: F16 + filename: Qwen3-ASR-0.6B-F16.gguf + size: 1.58 GB + wer: 2.12% + - name: Q8_0 + filename: Qwen3-ASR-0.6B-Q8_0.gguf + size: 850 MB + wer: 2.11% + - name: Q6_K + filename: Qwen3-ASR-0.6B-Q6_K.gguf + size: 690 MB + wer: 2.11% + - name: Q5_K_M + filename: Qwen3-ASR-0.6B-Q5_K_M.gguf + size: 645 MB + wer: 2.21% + - name: Q4_K_M + filename: Qwen3-ASR-0.6B-Q4_K_M.gguf + size: 590 MB + wer: 2.26% diff --git a/scripts/hf_cards/qwen3-asr-1.7b.yaml b/scripts/hf_cards/qwen3-asr-1.7b.yaml index 46cba086..04d721b9 100644 --- a/scripts/hf_cards/qwen3-asr-1.7b.yaml +++ b/scripts/hf_cards/qwen3-asr-1.7b.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/qwen3-asr-1.7b-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: Qwen/Qwen3-ASR-1.7B +target_repo: handy-computer/Qwen3-ASR-1.7B-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/qwen3-asr-1.7b.md +upstream_commit: 7278e1e70fe206f11671096ffdd38061171dd6e5 pin_date: 2026-04-19 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,40 @@ validation: commit: 3f61df7 date: 2026-04-20 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +languages: + - zh + - en + - yue + - ar + - de + - fr + - es + - pt + - id + - it + - ko + - ru + - th + - vi + - ja + - tr + - hi + - ms + - nl + - sv + - da + - fi + - pl + - cs + - fil + - fa + - el + - ro + - hu + - mk tags: - gguf - transcribe.cpp @@ -33,7 +69,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: true + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 8 + metal: 39.5 + ryzen-4750u: + cpu: 2 + vulkan: 3.9 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech `test-clean` split (2620 English utterances) with the Whisper-style English text normalizer and jiwer 3.x, @@ -43,3 +96,29 @@ wer: Q6_K / Q5_K_M are all within bootstrap CI of each other, and Q4_K_M regresses only ~0.2 WER points. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. + +quants: + - name: BF16 + filename: Qwen3-ASR-1.7B-BF16.gguf + size: 4.08 GB + wer: 1.62% + - name: F16 + filename: Qwen3-ASR-1.7B-F16.gguf + size: 4.09 GB + wer: 1.62% + - name: Q8_0 + filename: Qwen3-ASR-1.7B-Q8_0.gguf + size: 2.19 GB + wer: 1.62% + - name: Q6_K + filename: Qwen3-ASR-1.7B-Q6_K.gguf + size: 1.69 GB + wer: 1.65% + - name: Q5_K_M + filename: Qwen3-ASR-1.7B-Q5_K_M.gguf + size: 1.52 GB + wer: 1.65% + - name: Q4_K_M + filename: Qwen3-ASR-1.7B-Q4_K_M.gguf + size: 1.32 GB + wer: 1.81% diff --git a/scripts/hf_cards/sensevoice-small.yaml b/scripts/hf_cards/sensevoice-small.yaml index f4cd163b..5f118a3c 100644 --- a/scripts/hf_cards/sensevoice-small.yaml +++ b/scripts/hf_cards/sensevoice-small.yaml @@ -1,8 +1,12 @@ # Spec for the HF README of handy-computer/SenseVoiceSmall-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: FunAudioLLM/SenseVoiceSmall +target_repo: handy-computer/SenseVoiceSmall-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/sensevoice-small.md +# Pinned at intake (Stage 1). +upstream_commit: 3eb3b4eeffc2f2dde6051b853983753db33e35c3 pin_date: 2026-05-06 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +16,20 @@ validation: commit: f094d28 date: 2026-05-06 +# Upstream license is "model-license" (FunASR's MODEL_LICENSE), not a +# standard SPDX id. The HF YAML field accepts a free-form `other` plus a +# license_name / license_link override on the upstream card; the renderer +# emits `license: other` and surfaces the human-facing form via +# `license_display`. +license: other +license_display: model-license (FunASR MODEL_LICENSE) pipeline_tag: automatic-speech-recognition +languages: + - zh + - yue + - en + - ja + - ko tags: - gguf - transcribe.cpp @@ -35,7 +52,24 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: true + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 51.5 + metal: 289.5 + ryzen-4750u: + cpu: 15.9 + vulkan: 33.9 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding. The publisher does not report a numerical @@ -45,3 +79,29 @@ wer: that baseline within +0.002 percentage-points. LibriSpeech is an English benchmark; SenseVoice's strongest case is Mandarin, and AISHELL-1 (CER) is the recommended complementary check. + +quants: + - name: F32 + filename: SenseVoiceSmall-F32.gguf + size: 937 MB + wer: 3.13% + - name: F16 + filename: SenseVoiceSmall-F16.gguf + size: 470 MB + wer: 3.13% + - name: Q8_0 + filename: SenseVoiceSmall-Q8_0.gguf + size: 253 MB + wer: 3.13% + - name: Q6_K + filename: SenseVoiceSmall-Q6_K.gguf + size: 196 MB + wer: 3.14% + - name: Q5_K_M + filename: SenseVoiceSmall-Q5_K_M.gguf + size: 172 MB + wer: 3.18% + - name: Q4_K_M + filename: SenseVoiceSmall-Q4_K_M.gguf + size: 146 MB + wer: 3.45% diff --git a/scripts/hf_cards/template.md.j2 b/scripts/hf_cards/template.md.j2 index 89baa40f..e4d4f259 100644 --- a/scripts/hf_cards/template.md.j2 +++ b/scripts/hf_cards/template.md.j2 @@ -49,6 +49,9 @@ on {{ validation.date }}. ## Usage +{% if usage is defined -%} +{{ usage.rstrip() }} +{% else -%} Build transcribe.cpp from source: ```bash @@ -73,7 +76,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav See the [transcribe.cpp model page]({{ transcribe_docs_url }}) for performance numbers, numerical validation, and reproduction steps. - +{% endif %} ## License Inherited from the base model: **{{ license_display }}**. See the diff --git a/scripts/hf_cards/voxtral-mini-3b-2507.yaml b/scripts/hf_cards/voxtral-mini-3b-2507.yaml index 7a9cc042..368b9808 100644 --- a/scripts/hf_cards/voxtral-mini-3b-2507.yaml +++ b/scripts/hf_cards/voxtral-mini-3b-2507.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/Voxtral-Mini-3B-2507-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: mistralai/Voxtral-Mini-3B-2507 +target_repo: handy-computer/Voxtral-Mini-3B-2507-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/voxtral-mini-3b-2507.md +upstream_commit: "3060fe3" pin_date: 2026-06-06 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,18 @@ validation: commit: 483c122 date: 2026-06-06 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +languages: + - en + - fr + - de + - es + - it + - pt + - nl + - hi tags: - gguf - transcribe.cpp @@ -34,7 +48,25 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: true + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + metal: 14.9 + cpu: 2 + ryzen-4750u: + vulkan: 1.2 + cpu: 0.5 + wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the Whisper English text normalizer, batch size 8 on an NVIDIA L40S. @@ -43,3 +75,29 @@ wer: 1.87%; the BF16 GGUF matches within rounding. The BF16-vs-reference parity is the family's tensor-level numerical gate — 43 checkpointed tensors within tolerance, transcript byte-exact. + +quants: + - name: BF16 + filename: Voxtral-Mini-3B-2507-BF16.gguf + size: 9.37 GB + wer: 1.88% + - name: F16 + filename: Voxtral-Mini-3B-2507-F16.gguf + size: 9.38 GB + wer: 1.89% + - name: Q8_0 + filename: Voxtral-Mini-3B-2507-Q8_0.gguf + size: 5.00 GB + wer: 1.87% + - name: Q6_K + filename: Voxtral-Mini-3B-2507-Q6_K.gguf + size: 3.87 GB + wer: 1.87% + - name: Q5_K_M + filename: Voxtral-Mini-3B-2507-Q5_K_M.gguf + size: 3.46 GB + wer: 1.91% + - name: Q4_K_M + filename: Voxtral-Mini-3B-2507-Q4_K_M.gguf + size: 2.98 GB + wer: 1.94% diff --git a/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml b/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml index f9c8d49a..17ccce9c 100644 --- a/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml +++ b/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/Voxtral-Mini-4B-Realtime-2602-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: mistralai/Voxtral-Mini-4B-Realtime-2602 +target_repo: handy-computer/Voxtral-Mini-4B-Realtime-2602-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/voxtral-realtime.md +upstream_commit: "2769294" pin_date: 2026-06-06 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,23 @@ validation: commit: 483c122 date: 2026-06-06 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +languages: + - en + - fr + - es + - de + - ru + - zh + - ja + - it + - pt + - nl + - ar + - hi + - ko tags: - gguf - transcribe.cpp @@ -37,7 +56,25 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: true + translate: false + lang_detect: true + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + metal: 8.6 + cpu: 2.5 + ryzen-4750u: + vulkan: 0.9 + cpu: 0.6 + wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the Whisper English text normalizer, offline path at delay 6, batch size 8 @@ -48,3 +85,29 @@ wer: (2.07-2.09%), so the quantization ladder is WER-neutral down to Q4_K_M. The model is multilingual (13 languages, auto-detect); the published WER is English only. + +quants: + - name: BF16 + filename: Voxtral-Mini-4B-Realtime-2602-BF16.gguf + size: 8.87 GB + wer: 2.08% + - name: F16 + filename: Voxtral-Mini-4B-Realtime-2602-F16.gguf + size: 8.88 GB + wer: 2.09% + - name: Q8_0 + filename: Voxtral-Mini-4B-Realtime-2602-Q8_0.gguf + size: 4.73 GB + wer: 2.07% + - name: Q6_K + filename: Voxtral-Mini-4B-Realtime-2602-Q6_K.gguf + size: 3.66 GB + wer: 2.08% + - name: Q5_K_M + filename: Voxtral-Mini-4B-Realtime-2602-Q5_K_M.gguf + size: 3.28 GB + wer: 2.08% + - name: Q4_K_M + filename: Voxtral-Mini-4B-Realtime-2602-Q4_K_M.gguf + size: 2.83 GB + wer: 2.08% diff --git a/scripts/hf_cards/voxtral-small-24b-2507.yaml b/scripts/hf_cards/voxtral-small-24b-2507.yaml index a49c9d83..85b5f481 100644 --- a/scripts/hf_cards/voxtral-small-24b-2507.yaml +++ b/scripts/hf_cards/voxtral-small-24b-2507.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/Voxtral-Small-24B-2507-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: mistralai/Voxtral-Small-24B-2507 +target_repo: handy-computer/Voxtral-Small-24B-2507-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/voxtral-small-24b-2507.md +upstream_commit: da5b424 pin_date: 2026-06-05 # Validation pin for the most recent upload. Updated on each release — @@ -12,7 +15,18 @@ validation: commit: dac22fa date: 2026-06-05 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +languages: + - en + - fr + - de + - es + - it + - pt + - nl + - hi tags: - gguf - transcribe.cpp @@ -32,7 +46,21 @@ summary: | default_quant_index: 2 # Q8_0 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: true + timestamps: none # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + metal: 3.2 + wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the Whisper English text normalizer, greedy decoding, batch size 8 on an @@ -41,3 +69,29 @@ wer: at 1.56%. Validation for this variant is end-to-end by WER — the family's tensor-level numerical parity is established by the Voxtral Mini 3B sibling (identical architecture). + +quants: + - name: BF16 + filename: Voxtral-Small-24B-2507-BF16.gguf + size: 48.54 GB + wer: 1.56% + - name: F16 + filename: Voxtral-Small-24B-2507-F16.gguf + size: 48.55 GB + wer: 1.57% + - name: Q8_0 + filename: Voxtral-Small-24B-2507-Q8_0.gguf + size: 25.81 GB + wer: 1.56% + - name: Q6_K + filename: Voxtral-Small-24B-2507-Q6_K.gguf + size: 19.94 GB + wer: 1.58% + - name: Q5_K_M + filename: Voxtral-Small-24B-2507-Q5_K_M.gguf + size: 17.14 GB + wer: 1.60% + - name: Q4_K_M + filename: Voxtral-Small-24B-2507-Q4_K_M.gguf + size: 14.30 GB + wer: 2.11% diff --git a/scripts/hf_cards/whisper-base.en.yaml b/scripts/hf_cards/whisper-base.en.yaml index 2f0e0d1e..0ab944e2 100644 --- a/scripts/hf_cards/whisper-base.en.yaml +++ b/scripts/hf_cards/whisper-base.en.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/whisper-base.en-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: openai/whisper-base.en +target_repo: handy-computer/whisper-base.en-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-base.en.md +upstream_commit: 911407f pin_date: 2026-04-25 validation: @@ -10,7 +13,11 @@ validation: commit: 5.6.1 date: 2026-04-26 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +languages: + - "en" tags: - gguf - transcribe.cpp @@ -25,6 +32,50 @@ summary: | default_quant_index: 2 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: segment # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + metal: 211.9 + cpu: 38.2 + ryzen-4750u: + vulkan: 36.2 + cpu: 12.8 + wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 4.25%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +quants: + - name: F32 + filename: whisper-base.en-F32.gguf + size: 292 MB + wer: 4.30% + - name: F16 + filename: whisper-base.en-F16.gguf + size: 151 MB + wer: 4.13% + - name: Q8_0 + filename: whisper-base.en-Q8_0.gguf + size: 85 MB + wer: 4.16% + - name: Q6_K + filename: whisper-base.en-Q6_K.gguf + size: 68 MB + wer: 4.15% + - name: Q5_K_M + filename: whisper-base.en-Q5_K_M.gguf + size: 64 MB + wer: 4.16% + - name: Q4_K_M + filename: whisper-base.en-Q4_K_M.gguf + size: 59 MB + wer: 4.29% diff --git a/scripts/hf_cards/whisper-base.yaml b/scripts/hf_cards/whisper-base.yaml index 91ab199c..6a125b56 100644 --- a/scripts/hf_cards/whisper-base.yaml +++ b/scripts/hf_cards/whisper-base.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/whisper-base-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: openai/whisper-base +target_repo: handy-computer/whisper-base-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-base.md +upstream_commit: e37978b pin_date: 2026-04-25 validation: @@ -10,7 +13,14 @@ validation: commit: 5.6.1 date: 2026-04-26 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - languages + languages: - "en" - "zh" @@ -124,6 +134,50 @@ summary: | default_quant_index: 2 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: true + timestamps: segment # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + metal: 209.4 + cpu: 36.6 + ryzen-4750u: + vulkan: 34.8 + cpu: 11.9 + wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.009%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +quants: + - name: F32 + filename: whisper-base-F32.gguf + size: 292 MB + wer: 5.11% + - name: F16 + filename: whisper-base-F16.gguf + size: 151 MB + wer: 5.10% + - name: Q8_0 + filename: whisper-base-Q8_0.gguf + size: 85 MB + wer: 5.12% + - name: Q6_K + filename: whisper-base-Q6_K.gguf + size: 68 MB + wer: 5.11% + - name: Q5_K_M + filename: whisper-base-Q5_K_M.gguf + size: 64 MB + wer: 5.19% + - name: Q4_K_M + filename: whisper-base-Q4_K_M.gguf + size: 59 MB + wer: 5.36% diff --git a/scripts/hf_cards/whisper-large-v2.yaml b/scripts/hf_cards/whisper-large-v2.yaml index e5eda663..cfbdc4c1 100644 --- a/scripts/hf_cards/whisper-large-v2.yaml +++ b/scripts/hf_cards/whisper-large-v2.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/whisper-large-v2-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: openai/whisper-large-v2 +target_repo: handy-computer/whisper-large-v2-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large-v2.md +upstream_commit: ae46427 pin_date: 2026-04-25 validation: @@ -10,7 +13,14 @@ validation: commit: 5.6.1 date: 2026-04-26 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - languages + languages: - "en" - "zh" @@ -124,6 +134,49 @@ summary: | default_quant_index: 2 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: true + timestamps: segment # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 1.5 + metal: 24 + ryzen-4750u: + cpu: 0.6 + vulkan: 2.1 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.83%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +quants: + - name: F32 + filename: whisper-large-v2-F32.gguf + size: 6.18 GB + wer: 2.67% + - name: F16 + filename: whisper-large-v2-F16.gguf + size: 3.11 GB + wer: 2.68% + - name: Q8_0 + filename: whisper-large-v2-Q8_0.gguf + size: 1.67 GB + wer: 2.97% + - name: Q6_K + filename: whisper-large-v2-Q6_K.gguf + size: 1.30 GB + wer: 2.83% + - name: Q5_K_M + filename: whisper-large-v2-Q5_K_M.gguf + size: 1.16 GB + wer: 2.71% + - name: Q4_K_M + filename: whisper-large-v2-Q4_K_M.gguf + size: 997 MB + wer: 2.46% diff --git a/scripts/hf_cards/whisper-large-v3-turbo.yaml b/scripts/hf_cards/whisper-large-v3-turbo.yaml index 775924f3..6dd853bd 100644 --- a/scripts/hf_cards/whisper-large-v3-turbo.yaml +++ b/scripts/hf_cards/whisper-large-v3-turbo.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/whisper-large-v3-turbo-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: openai/whisper-large-v3-turbo +target_repo: handy-computer/whisper-large-v3-turbo-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large-v3-turbo.md +upstream_commit: 41f01f3 pin_date: 2026-04-25 validation: @@ -10,7 +13,14 @@ validation: commit: 5.6.1 date: 2026-04-26 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - languages + languages: - "en" - "zh" @@ -121,10 +131,49 @@ tags: - openai summary: | - OpenAI Whisper large-v3-turbo — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). v3 family adds Cantonese (yue) and uses a 128-bin mel input. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. + OpenAI Whisper large-v3-turbo — converted to GGUF for transcribe.cpp. Multilingual transcription and language detection; unlike the full large-v3 model, this turbo variant does not support speech translation. The v3 family adds Cantonese (yue) and uses a 128-bin mel input. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. default_quant_index: 1 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: true + timestamps: segment # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 1.9 + metal: 46.3 + ryzen-4750u: + cpu: 0.7 + vulkan: 2.9 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.10%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +quants: + - name: F16 + filename: whisper-large-v3-turbo-F16.gguf + size: 1.63 GB + wer: 2.01% + - name: Q8_0 + filename: whisper-large-v3-turbo-Q8_0.gguf + size: 886 MB + wer: 2.01% + - name: Q6_K + filename: whisper-large-v3-turbo-Q6_K.gguf + size: 693 MB + wer: 2.01% + - name: Q5_K_M + filename: whisper-large-v3-turbo-Q5_K_M.gguf + size: 620 MB + wer: 2.03% + - name: Q4_K_M + filename: whisper-large-v3-turbo-Q4_K_M.gguf + size: 536 MB + wer: 2.04% diff --git a/scripts/hf_cards/whisper-large-v3.yaml b/scripts/hf_cards/whisper-large-v3.yaml index be6866f8..f4aaf085 100644 --- a/scripts/hf_cards/whisper-large-v3.yaml +++ b/scripts/hf_cards/whisper-large-v3.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/whisper-large-v3-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: openai/whisper-large-v3 +target_repo: handy-computer/whisper-large-v3-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large-v3.md +upstream_commit: 06f233f pin_date: 2026-04-25 validation: @@ -10,7 +13,14 @@ validation: commit: 5.6.1 date: 2026-04-26 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - languages + languages: - "en" - "zh" @@ -125,6 +135,45 @@ summary: | default_quant_index: 1 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: true + timestamps: segment # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 1.5 + metal: 23.5 + ryzen-4750u: + cpu: 0.6 + vulkan: 2.1 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.01%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +quants: + - name: F16 + filename: whisper-large-v3-F16.gguf + size: 3.11 GB + wer: 1.81% + - name: Q8_0 + filename: whisper-large-v3-Q8_0.gguf + size: 1.67 GB + wer: 1.82% + - name: Q6_K + filename: whisper-large-v3-Q6_K.gguf + size: 1.30 GB + wer: 1.83% + - name: Q5_K_M + filename: whisper-large-v3-Q5_K_M.gguf + size: 1.16 GB + wer: 1.84% + - name: Q4_K_M + filename: whisper-large-v3-Q4_K_M.gguf + size: 997 MB + wer: 1.86% diff --git a/scripts/hf_cards/whisper-large.yaml b/scripts/hf_cards/whisper-large.yaml index 985f8f88..1739b2df 100644 --- a/scripts/hf_cards/whisper-large.yaml +++ b/scripts/hf_cards/whisper-large.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/whisper-large-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: openai/whisper-large +target_repo: handy-computer/whisper-large-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large.md +upstream_commit: 4ef9b41 pin_date: 2026-04-25 validation: @@ -10,7 +13,14 @@ validation: commit: 5.6.1 date: 2026-04-26 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - languages + languages: - "en" - "zh" @@ -124,6 +134,50 @@ summary: | default_quant_index: 2 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: true + timestamps: segment # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + metal: 24.9 + cpu: 1.5 + ryzen-4750u: + vulkan: 2.1 + cpu: 0.5 + wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.73%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +quants: + - name: F32 + filename: whisper-large-F32.gguf + size: 6.18 GB + wer: 2.72% + - name: F16 + filename: whisper-large-F16.gguf + size: 3.11 GB + wer: 2.72% + - name: Q8_0 + filename: whisper-large-Q8_0.gguf + size: 1.67 GB + wer: 2.71% + - name: Q6_K + filename: whisper-large-Q6_K.gguf + size: 1.30 GB + wer: 2.62% + - name: Q5_K_M + filename: whisper-large-Q5_K_M.gguf + size: 1.16 GB + wer: 2.84% + - name: Q4_K_M + filename: whisper-large-Q4_K_M.gguf + size: 997 MB + wer: 2.67% diff --git a/scripts/hf_cards/whisper-medium.en.yaml b/scripts/hf_cards/whisper-medium.en.yaml index 0957fd2b..1737de78 100644 --- a/scripts/hf_cards/whisper-medium.en.yaml +++ b/scripts/hf_cards/whisper-medium.en.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/whisper-medium.en-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: openai/whisper-medium.en +target_repo: handy-computer/whisper-medium.en-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-medium.en.md +upstream_commit: 2e98eb6 pin_date: 2026-04-25 validation: @@ -10,7 +13,11 @@ validation: commit: 5.6.1 date: 2026-04-26 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +languages: + - "en" tags: - gguf - transcribe.cpp @@ -25,6 +32,49 @@ summary: | default_quant_index: 2 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: segment # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 3.2 + metal: 45.1 + ryzen-4750u: + cpu: 1.1 + vulkan: 4.5 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.02%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +quants: + - name: F32 + filename: whisper-medium.en-F32.gguf + size: 3.06 GB + wer: 2.74% + - name: F16 + filename: whisper-medium.en-F16.gguf + size: 1.54 GB + wer: 2.73% + - name: Q8_0 + filename: whisper-medium.en-Q8_0.gguf + size: 831 MB + wer: 2.72% + - name: Q6_K + filename: whisper-medium.en-Q6_K.gguf + size: 648 MB + wer: 2.82% + - name: Q5_K_M + filename: whisper-medium.en-Q5_K_M.gguf + size: 583 MB + wer: 2.75% + - name: Q4_K_M + filename: whisper-medium.en-Q4_K_M.gguf + size: 504 MB + wer: 2.91% diff --git a/scripts/hf_cards/whisper-medium.yaml b/scripts/hf_cards/whisper-medium.yaml index 95b8cabd..05d2194f 100644 --- a/scripts/hf_cards/whisper-medium.yaml +++ b/scripts/hf_cards/whisper-medium.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/whisper-medium-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: openai/whisper-medium +target_repo: handy-computer/whisper-medium-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-medium.md +upstream_commit: abdf7c3 pin_date: 2026-04-25 validation: @@ -10,7 +13,14 @@ validation: commit: 5.6.1 date: 2026-04-26 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - languages + languages: - "en" - "zh" @@ -124,6 +134,50 @@ summary: | default_quant_index: 2 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: true + timestamps: segment # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + metal: 41.6 + cpu: 3 + ryzen-4750u: + vulkan: 4.3 + cpu: 1.1 + wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.90%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +quants: + - name: F32 + filename: whisper-medium-F32.gguf + size: 3.06 GB + wer: 2.64% + - name: F16 + filename: whisper-medium-F16.gguf + size: 1.54 GB + wer: 2.63% + - name: Q8_0 + filename: whisper-medium-Q8_0.gguf + size: 832 MB + wer: 2.64% + - name: Q6_K + filename: whisper-medium-Q6_K.gguf + size: 648 MB + wer: 2.59% + - name: Q5_K_M + filename: whisper-medium-Q5_K_M.gguf + size: 583 MB + wer: 2.62% + - name: Q4_K_M + filename: whisper-medium-Q4_K_M.gguf + size: 504 MB + wer: 2.59% diff --git a/scripts/hf_cards/whisper-small.en.yaml b/scripts/hf_cards/whisper-small.en.yaml index 71bc2cde..08b003c4 100644 --- a/scripts/hf_cards/whisper-small.en.yaml +++ b/scripts/hf_cards/whisper-small.en.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/whisper-small.en-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: openai/whisper-small.en +target_repo: handy-computer/whisper-small.en-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-small.en.md +upstream_commit: e872752 pin_date: 2026-04-25 validation: @@ -10,7 +13,11 @@ validation: commit: 5.6.1 date: 2026-04-26 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +languages: + - "en" tags: - gguf - transcribe.cpp @@ -25,6 +32,50 @@ summary: | default_quant_index: 2 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: segment # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + metal: 104.4 + cpu: 10.3 + ryzen-4750u: + vulkan: 12.8 + cpu: 3.6 + wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.05%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +quants: + - name: F32 + filename: whisper-small.en-F32.gguf + size: 969 MB + wer: 3.11% + - name: F16 + filename: whisper-small.en-F16.gguf + size: 493 MB + wer: 2.97% + - name: Q8_0 + filename: whisper-small.en-Q8_0.gguf + size: 270 MB + wer: 3.09% + - name: Q6_K + filename: whisper-small.en-Q6_K.gguf + size: 212 MB + wer: 2.97% + - name: Q5_K_M + filename: whisper-small.en-Q5_K_M.gguf + size: 194 MB + wer: 3.11% + - name: Q4_K_M + filename: whisper-small.en-Q4_K_M.gguf + size: 172 MB + wer: 3.09% diff --git a/scripts/hf_cards/whisper-small.yaml b/scripts/hf_cards/whisper-small.yaml index ebca0b37..6a315081 100644 --- a/scripts/hf_cards/whisper-small.yaml +++ b/scripts/hf_cards/whisper-small.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/whisper-small-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: openai/whisper-small +target_repo: handy-computer/whisper-small-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-small.md +upstream_commit: 973afd2 pin_date: 2026-04-25 validation: @@ -10,7 +13,14 @@ validation: commit: 5.6.1 date: 2026-04-26 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - languages + languages: - "en" - "zh" @@ -124,6 +134,49 @@ summary: | default_quant_index: 2 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: true + timestamps: segment # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 9.7 + metal: 99.2 + ryzen-4750u: + cpu: 3.4 + vulkan: 12.1 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.432%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +quants: + - name: F32 + filename: whisper-small-F32.gguf + size: 969 MB + wer: 3.34% + - name: F16 + filename: whisper-small-F16.gguf + size: 493 MB + wer: 3.33% + - name: Q8_0 + filename: whisper-small-Q8_0.gguf + size: 270 MB + wer: 3.33% + - name: Q6_K + filename: whisper-small-Q6_K.gguf + size: 212 MB + wer: 3.33% + - name: Q5_K_M + filename: whisper-small-Q5_K_M.gguf + size: 194 MB + wer: 3.37% + - name: Q4_K_M + filename: whisper-small-Q4_K_M.gguf + size: 172 MB + wer: 3.40% diff --git a/scripts/hf_cards/whisper-tiny.en.yaml b/scripts/hf_cards/whisper-tiny.en.yaml index 66d24374..84fa6fb3 100644 --- a/scripts/hf_cards/whisper-tiny.en.yaml +++ b/scripts/hf_cards/whisper-tiny.en.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/whisper-tiny.en-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: openai/whisper-tiny.en +target_repo: handy-computer/whisper-tiny.en-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-tiny.en.md +upstream_commit: 87c7102 pin_date: 2026-04-25 validation: @@ -10,7 +13,16 @@ validation: commit: 5.6.1 date: 2026-04-26 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - quants + +languages: + - "en" tags: - gguf - transcribe.cpp @@ -25,7 +37,24 @@ summary: | default_quant_index: 2 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: false + lang_detect: false + timestamps: segment # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 78.7 + metal: 279.8 + ryzen-4750u: + cpu: 26 + vulkan: 60.7 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.66%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. diff --git a/scripts/hf_cards/whisper-tiny.yaml b/scripts/hf_cards/whisper-tiny.yaml index cdaacce9..187342fe 100644 --- a/scripts/hf_cards/whisper-tiny.yaml +++ b/scripts/hf_cards/whisper-tiny.yaml @@ -1,8 +1,11 @@ # Spec for the HF README of handy-computer/whisper-tiny-gguf. # Consumed by scripts/hf_cards/generate.py. +hf_repo: openai/whisper-tiny +target_repo: handy-computer/whisper-tiny-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-tiny.md +upstream_commit: 169d4a4 pin_date: 2026-04-25 validation: @@ -10,7 +13,14 @@ validation: commit: 5.6.1 date: 2026-04-26 +license: apache-2.0 +license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition +catalog_sync: + # These published presentation choices are intentionally hand-maintained. + preserve: + - languages + languages: - "en" - "zh" @@ -124,6 +134,49 @@ summary: | default_quant_index: 2 +# Capability flags for the transcribe_cpp metadata block. +capabilities: + streaming: false + translate: true + lang_detect: true + timestamps: segment # none | segment | word | token + +# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published +# raw as rtf_ in the metadata block. +perf: + m4-max: + cpu: 76.1 + metal: 302.1 + ryzen-4750u: + cpu: 24.7 + vulkan: 61 wer: + source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 7.54%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +quants: + - name: F32 + filename: whisper-tiny-F32.gguf + size: 153 MB + wer: 7.49% + - name: F16 + filename: whisper-tiny-F16.gguf + size: 80 MB + wer: 7.48% + - name: Q8_0 + filename: whisper-tiny-Q8_0.gguf + size: 46 MB + wer: 7.52% + - name: Q6_K + filename: whisper-tiny-Q6_K.gguf + size: 45 MB + wer: 7.54% + - name: Q5_K_M + filename: whisper-tiny-Q5_K_M.gguf + size: 44 MB + wer: 7.82% + - name: Q4_K_M + filename: whisper-tiny-Q4_K_M.gguf + size: 44 MB + wer: 7.78% From 4f3cecd5501c9175b09620851d3eb4e378ae5b18 Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sun, 13 Sep 2026 04:20:10 -0700 Subject: [PATCH 07/24] back to generated yaml --- CONTRIBUTING.md | 4 +- README.md | 22 +- catalog/_format.py | 89 ------ catalog/_schema.json | 32 +- catalog/granite-speech-4.1-2b-nar.json | 8 - catalog/granite-speech-4.1-2b-plus.json | 7 - catalog/medasr.json | 8 - ...ultitalker-parakeet-streaming-0.6b-v1.json | 4 +- catalog/nemotron-3.5-asr-streaming-0.6b.json | 12 +- .../nemotron-speech-streaming-en-0.6b.json | 4 +- catalog/voxtral-small-24b-2507.json | 27 +- docs/models/canary-180m-flash.md | 2 +- docs/models/canary-1b-flash.md | 2 +- docs/models/canary-1b-v2.md | 2 +- docs/models/canary-1b.md | 2 +- docs/models/canary-qwen-2.5b.md | 2 +- docs/models/cohere-transcribe-03-2026.md | 2 +- .../cohere-transcribe-arabic-07-2026.md | 2 +- .../diar_streaming_sortformer_4spk-v2.1.md | 2 +- docs/models/fun-asr-mlt-nano-2512.md | 2 +- docs/models/fun-asr-nano-2512.md | 2 +- docs/models/gigaam-v3-ctc.md | 2 +- docs/models/gigaam-v3-e2e-ctc.md | 2 +- docs/models/gigaam-v3-e2e-rnnt.md | 2 +- docs/models/gigaam-v3-rnnt.md | 2 +- docs/models/granite-4.0-1b-speech.md | 2 +- docs/models/granite-speech-4.1-2b-nar.md | 2 +- docs/models/granite-speech-4.1-2b-plus.md | 2 +- docs/models/granite-speech-4.1-2b.md | 2 +- docs/models/medasr.md | 2 +- docs/models/moonshine-base.md | 2 +- docs/models/moonshine-streaming-medium.md | 2 +- docs/models/moonshine-streaming-small.md | 2 +- docs/models/moonshine-streaming-tiny.md | 2 +- docs/models/moonshine-tiny.md | 2 +- docs/models/moss-transcribe-diarize.md | 2 +- .../multitalker-parakeet-streaming-0.6b-v1.md | 2 +- .../models/nemotron-3.5-asr-streaming-0.6b.md | 2 +- .../nemotron-speech-streaming-en-0.6b.md | 2 +- docs/models/parakeet-ctc-0.6b.md | 2 +- docs/models/parakeet-ctc-1.1b.md | 2 +- docs/models/parakeet-primeline.md | 2 +- docs/models/parakeet-rnnt-0.6b.md | 2 +- docs/models/parakeet-rnnt-1.1b.md | 2 +- docs/models/parakeet-tdt-0.6b-v2.md | 2 +- docs/models/parakeet-tdt-0.6b-v3.md | 2 +- docs/models/parakeet-tdt-1.1b.md | 2 +- docs/models/parakeet-tdt_ctc-1.1b.md | 2 +- docs/models/parakeet-tdt_ctc-110m.md | 2 +- docs/models/parakeet-unified-en-0.6b.md | 2 +- docs/models/qwen3-asr-0.6b.md | 2 +- docs/models/qwen3-asr-1.7b.md | 2 +- docs/models/sensevoice-small.md | 2 +- docs/models/voxtral-mini-3b-2507.md | 2 +- docs/models/voxtral-small-24b-2507.md | 2 +- docs/models/whisper-base.en.md | 2 +- docs/models/whisper-base.md | 2 +- docs/models/whisper-large-v2.md | 2 +- docs/models/whisper-large-v3-turbo.md | 2 +- docs/models/whisper-large-v3.md | 2 +- docs/models/whisper-large.md | 2 +- docs/models/whisper-medium.en.md | 2 +- docs/models/whisper-medium.md | 2 +- docs/models/whisper-small.en.md | 2 +- docs/models/whisper-small.md | 2 +- docs/models/whisper-tiny.en.md | 2 +- docs/models/whisper-tiny.md | 2 +- docs/tools/hf-metadata-schema.md | 13 +- scripts/catalog/backfill_provenance.py | 67 ---- scripts/catalog/cards.py | 86 ----- scripts/catalog/check.py | 15 +- scripts/catalog/common.py | 30 +- scripts/catalog/db.py | 218 +++++-------- scripts/catalog/format.py | 49 +++ scripts/catalog/ingest_perf.py | 23 +- scripts/catalog/prune_benchmarks.py | 135 -------- scripts/catalog/render.py | 129 +------- scripts/catalog/sync_capabilities.py | 301 +----------------- scripts/catalog/sync_hf_cards.py | 230 ------------- scripts/hf_cards/README.md | 15 + scripts/hf_cards/breeze-asr-25.yaml | 78 +---- scripts/hf_cards/canary-180m-flash.yaml | 54 +--- scripts/hf_cards/canary-1b-flash.yaml | 54 +--- scripts/hf_cards/canary-1b-v2.yaml | 75 +---- scripts/hf_cards/canary-1b.yaml | 54 +--- scripts/hf_cards/canary-qwen-2.5b.yaml | 51 +-- .../hf_cards/cohere-transcribe-03-2026.yaml | 70 +--- .../cohere-transcribe-arabic-07-2026.yaml | 53 +-- .../diar_streaming_sortformer_4spk-v2.1.yaml | 39 +-- scripts/hf_cards/fun-asr-mlt-nano-2512.yaml | 86 +---- scripts/hf_cards/fun-asr-nano-2512.yaml | 58 +--- scripts/hf_cards/generate.py | 175 ++++++++-- scripts/hf_cards/gigaam-v3-ctc.yaml | 54 +--- scripts/hf_cards/gigaam-v3-e2e-ctc.yaml | 59 +--- scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml | 54 +--- scripts/hf_cards/gigaam-v3-rnnt.yaml | 54 +--- scripts/hf_cards/granite-4.0-1b-speech.yaml | 56 +--- .../hf_cards/granite-speech-4.1-2b-nar.yaml | 55 +--- .../hf_cards/granite-speech-4.1-2b-plus.yaml | 56 +--- scripts/hf_cards/granite-speech-4.1-2b.yaml | 56 +--- scripts/hf_cards/medasr.yaml | 51 +-- scripts/hf_cards/moonshine-base-ar.yaml | 41 +-- scripts/hf_cards/moonshine-base-ja.yaml | 41 +-- scripts/hf_cards/moonshine-base-ko.yaml | 41 +-- scripts/hf_cards/moonshine-base-uk.yaml | 41 +-- scripts/hf_cards/moonshine-base-vi.yaml | 41 +-- scripts/hf_cards/moonshine-base-zh.yaml | 41 +-- scripts/hf_cards/moonshine-base.yaml | 39 +-- .../hf_cards/moonshine-streaming-medium.yaml | 39 +-- .../hf_cards/moonshine-streaming-small.yaml | 39 +-- .../hf_cards/moonshine-streaming-tiny.yaml | 39 +-- scripts/hf_cards/moonshine-tiny-ar.yaml | 41 +-- scripts/hf_cards/moonshine-tiny-ja.yaml | 41 +-- scripts/hf_cards/moonshine-tiny-ko.yaml | 41 +-- scripts/hf_cards/moonshine-tiny-uk.yaml | 41 +-- scripts/hf_cards/moonshine-tiny-vi.yaml | 41 +-- scripts/hf_cards/moonshine-tiny-zh.yaml | 41 +-- scripts/hf_cards/moonshine-tiny.yaml | 39 +-- scripts/hf_cards/moss-transcribe-diarize.yaml | 55 +--- ...ultitalker-parakeet-streaming-0.6b-v1.yaml | 60 +--- .../nemotron-3.5-asr-streaming-0.6b.yaml | 88 +---- .../nemotron-speech-streaming-en-0.6b.yaml | 58 +--- scripts/hf_cards/parakeet-ctc-0.6b.yaml | 51 +-- scripts/hf_cards/parakeet-ctc-1.1b.yaml | 51 +-- scripts/hf_cards/parakeet-primeline.yaml | 83 +---- scripts/hf_cards/parakeet-rnnt-0.6b.yaml | 51 +-- scripts/hf_cards/parakeet-rnnt-1.1b.yaml | 51 +-- scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml | 51 +-- scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml | 75 +---- scripts/hf_cards/parakeet-tdt-1.1b.yaml | 51 +-- scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml | 51 +-- scripts/hf_cards/parakeet-tdt_ctc-110m.yaml | 51 +-- .../hf_cards/parakeet-unified-en-0.6b.yaml | 51 +-- scripts/hf_cards/qwen3-asr-0.6b.yaml | 80 +---- scripts/hf_cards/qwen3-asr-1.7b.yaml | 80 +---- scripts/hf_cards/sensevoice-small.yaml | 61 +--- scripts/hf_cards/voxtral-mini-3b-2507.yaml | 59 +--- .../voxtral-mini-4b-realtime-2602.yaml | 64 +--- scripts/hf_cards/voxtral-small-24b-2507.yaml | 55 +--- scripts/hf_cards/whisper-base.en.yaml | 52 +-- scripts/hf_cards/whisper-base.yaml | 155 +-------- scripts/hf_cards/whisper-large-v2.yaml | 154 +-------- scripts/hf_cards/whisper-large-v3-turbo.yaml | 151 +-------- scripts/hf_cards/whisper-large-v3.yaml | 151 +-------- scripts/hf_cards/whisper-large.yaml | 155 +-------- scripts/hf_cards/whisper-medium.en.yaml | 51 +-- scripts/hf_cards/whisper-medium.yaml | 155 +-------- scripts/hf_cards/whisper-small.en.yaml | 52 +-- scripts/hf_cards/whisper-small.yaml | 154 +-------- scripts/hf_cards/whisper-tiny.en.yaml | 56 +--- scripts/hf_cards/whisper-tiny.yaml | 154 +-------- 151 files changed, 489 insertions(+), 5897 deletions(-) delete mode 100644 catalog/_format.py delete mode 100755 scripts/catalog/backfill_provenance.py delete mode 100644 scripts/catalog/cards.py create mode 100755 scripts/catalog/format.py delete mode 100755 scripts/catalog/prune_benchmarks.py delete mode 100755 scripts/catalog/sync_hf_cards.py create mode 100644 scripts/hf_cards/README.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2cd33edc..2eb6e1cc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -233,7 +233,7 @@ Required before canonical publication: | Gate | Owner | Requirement | | --- | --- | --- | | WER / benchmarks | maintainer or contributor | Per-quant numbers recorded in `docs/models/.md` | -| HF card | maintainer | `scripts/hf_cards/.yaml` updated and README rendered | +| HF card | maintainer | Catalog record current; README rendered per `scripts/hf_cards/README.md` | | Canonical upload | maintainer | GGUFs uploaded to the `handy-computer` Hugging Face organization | | Download roundtrip | maintainer | Downloaded canonical GGUF reloads and validates cleanly; validation commit recorded in docs/HF card | | Preflight D | maintainer | Planned post-quantization gate once implemented | @@ -256,7 +256,7 @@ project release artifact only after a maintainer publishes it there and records the validation commit in both: - `docs/models/.md` -- `scripts/hf_cards/.yaml`, rendered into the HF README +- `scripts/hf_cards/.yaml` (`validation` block), rendered into the HF README Golden manifests are not mutated for uploads. They pin validation provenance for the port. Release state lives in the model card and rendered HF README; HF diff --git a/README.md b/README.md index 45d0e3f7..c1cdedbd 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,12 @@ C/C++ speech-to-text inference library. Runs diverse STT model families via [GGU | MedASR | `medasr` (Conformer + CTC, English medical-dictation, gated) | [docs/models/medasr.md](docs/models/medasr.md) | | MOSS Transcribe-Diarize | `moss-transcribe-diarize` (audio-LLM; English + Chinese ASR with inline speaker diarization) | [docs/models/moss-transcribe-diarize.md](docs/models/moss-transcribe-diarize.md) | +**Speaker diarization models** (no transcription; verified by DER/JER rather than WER): + +| Family | Variants | Docs | +| --- | --- | --- | +| Sortformer | `diar_streaming_sortformer_4spk-v2.1` (streaming speaker diarizer, up to 4 speakers) | [docs/models/diar_streaming_sortformer_4spk-v2.1.md](docs/models/diar_streaming_sortformer_4spk-v2.1.md) | + Per-variant model cards live under [`docs/models/`](docs/models/). ## Model catalog @@ -55,17 +61,15 @@ only what sits between the pair: ``` The Hugging Face card specs under [`scripts/hf_cards/`](scripts/hf_cards/) -are complete, committed inputs to `generate.py`. To create or deliberately -refresh their mechanical fields (repos, licence, languages, capabilities, -quant table, and per-rig speedups) from the catalog, use -`scripts/catalog/sync_hf_cards.py`; editorial copy stays in the YAML. Exceptional -hand-maintained fields can be listed under `catalog_sync.preserve`. +hold editorial copy only (summary, tags, validation pin, prose notes). +`scripts/hf_cards/generate.py` reads the spec and the catalog record together, +so repos, licence, languages, capabilities, the quant table, and per-rig +speedups are never written into a YAML by hand. ```bash -uv run scripts/catalog/check.py # schema, integrity, pairing -uv run scripts/catalog/sync_hf_cards.py --check -uv run scripts/catalog/sync_hf_cards.py --check-consistency -uv run scripts/catalog/render.py # rewrite the marked doc regions +uv run scripts/catalog/format.py --check # canonical record layout +uv run scripts/catalog/check.py # schema, integrity, pairing +uv run scripts/catalog/render.py # rewrite the marked doc regions uv run scripts/catalog/render.py --check ``` diff --git a/catalog/_format.py b/catalog/_format.py deleted file mode 100644 index cb14237c..00000000 --- a/catalog/_format.py +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env python3 -"""Canonical formatter for the catalog records. Four rules, no judgement calls: - - 1. An element of a ROW array (downloads, accuracy_benchmarks, speed_benchmarks, - and a streaming capability's presets) is exactly one line. A row is a table - row; expanding it across eighteen lines is what makes a 164-cell sweep - unreadable. - 2. A member of a ROW object (capabilities) is one line, unless it carries a - table of its own -- then it expands and its table follows rule 1. - 3. An array of scalars wraps at 78 columns. - 4. Everything else is fully expanded, one member per line, like `jq --indent 2`. - -Rules 1 and 2 key off names that only carry this meaning at the top level of a -record, so they are applied ONLY to the record's own sections -- never inside -_schema.json, where the same words are subschema keys. - - uv run catalog/_format.py catalog/*.json - uv run catalog/_format.py --check catalog/*.json -""" -import json, pathlib, sys - -WRAP = 78 -ROW_ARRAYS = {"downloads", "accuracy_benchmarks", "speed_benchmarks"} -ROW_OBJECTS = {"capabilities"} -NESTED_ROW_ARRAYS = {"presets"} - - -def compact(o): - return json.dumps(o, separators=(",", ":"), ensure_ascii=False) - - -def has_table(v): - return any(isinstance(x, list) and any(isinstance(y, dict) for y in x) - for x in v.values()) if isinstance(v, dict) else False - - -def fmt(o, ind=0, *, row=False, row_object=False, top=False): - pad = " " * ind - if row and not isinstance(o, list): - return compact(o) - if isinstance(o, list): - if not o: - return "[]" - if all(not isinstance(x, (dict, list)) for x in o): - c = compact(o) - if len(c) + ind <= WRAP: - return c - lines, cur = [], pad + " " - for i, x in enumerate(o): - add = json.dumps(x, ensure_ascii=False) + ("," if i < len(o) - 1 else "") - if len(cur) + len(add) + 1 > WRAP and cur.strip(): - lines.append(cur.rstrip()) - cur = pad + " " - cur += add + " " - lines.append(cur.rstrip()) - return "[\n" + "\n".join(lines) + "\n" + pad + "]" - items = [pad + " " + fmt(x, ind + 2, row=row) for x in o] - return "[\n" + ",\n".join(items) + "\n" + pad + "]" - if isinstance(o, dict): - if not o: - return "{}" - items = [] - for k, v in o.items(): - key = json.dumps(k, ensure_ascii=False) - if row_object and isinstance(v, dict) and not has_table(v): - items.append(f"{pad} {key}: {compact(v)}") - else: - items.append(f"{pad} {key}: " + fmt( - v, ind + 2, - row=(top and k in ROW_ARRAYS) or k in NESTED_ROW_ARRAYS, - row_object=top and k in ROW_OBJECTS)) - return "{\n" + ",\n".join(items) + "\n" + pad + "}" - return compact(o) - - -check = "--check" in sys.argv[1:] -paths = [pathlib.Path(arg) for arg in sys.argv[1:] if arg != "--check"] -bad = 0 -for p in paths: - current = p.read_text() - rendered = fmt(json.loads(current), top=True) + "\n" - if check: - if current != rendered: - bad += 1 - print(f"needs formatting: {p}", file=sys.stderr) - else: - p.write_text(rendered) - print(f"{p} {len(rendered.splitlines()):>4} lines") -sys.exit(1 if bad else 0) diff --git a/catalog/_schema.json b/catalog/_schema.json index 400d6220..11bde8de 100644 --- a/catalog/_schema.json +++ b/catalog/_schema.json @@ -45,38 +45,14 @@ }, "display": { "type": "string" - } - } - }, - "identity": { - "type": "object", - "description": "The general.* GGUF identity block, for the parts no other catalog field can supply. organization and repo_url come from upstream_repo, license from license.spdx, size_label from params; general.languages stays whatever the file already carries, which may legitimately narrow this record's languages (nemotron advertises 32 of its 40 locales). scripts/catalog/sync_capabilities.py --repair writes these into a published GGUF that predates add_general_identity() in scripts/lib/gguf_common.py.", - "required": ["name","basename","author"], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "general.name -- the friendly display name, e.g. \"Granite Speech 4.1 2B Plus\"." }, - "basename": { - "type": "string", - "description": "general.basename -- the family slug, e.g. \"granite-speech\"." - }, - "size_label": { - "type": "string", - "description": "general.size_label. Carried, not computed from params: most converters bucket the parameter count but the parakeet profiles hardcode a marketing label (\"0.6B\" for a 638M-parameter nemotron)." - }, - "author": { - "type": "string", - "description": "general.author -- the creating lab, e.g. \"IBM\"." - }, - "license_name": { + "name": { "type": "string", - "description": "general.license.name. Distinct from license.display, which is the human label the docs print." + "description": "HF card license_name, for licences with no SPDX id (spdx \"other\")." }, - "license_link": { + "link": { "type": "string", - "description": "general.license.link -- URL of the full licence text." + "description": "HF card license_link -- URL of the full licence text." } } }, diff --git a/catalog/granite-speech-4.1-2b-nar.json b/catalog/granite-speech-4.1-2b-nar.json index 3ffb6075..c0fcbdd3 100644 --- a/catalog/granite-speech-4.1-2b-nar.json +++ b/catalog/granite-speech-4.1-2b-nar.json @@ -8,14 +8,6 @@ "spdx": "apache-2.0", "display": "Apache-2.0" }, - "identity": { - "name": "Granite Speech 4.1 2B NAR", - "basename": "granite-speech-nar", - "size_label": "2.3B", - "author": "IBM", - "license_name": "Apache License 2.0", - "license_link": "https://www.apache.org/licenses/LICENSE-2.0" - }, "upstream_repo": "ibm-granite/granite-speech-4.1-2b-nar", "upstream_commit": "99a4df9", "published_repo": "handy-computer/granite-speech-4.1-2b-nar-gguf", diff --git a/catalog/granite-speech-4.1-2b-plus.json b/catalog/granite-speech-4.1-2b-plus.json index 81f7bf35..710de847 100644 --- a/catalog/granite-speech-4.1-2b-plus.json +++ b/catalog/granite-speech-4.1-2b-plus.json @@ -8,13 +8,6 @@ "spdx": "apache-2.0", "display": "Apache-2.0" }, - "identity": { - "name": "Granite Speech 4.1 2B Plus", - "basename": "granite-speech", - "author": "IBM", - "license_name": "Apache License 2.0", - "license_link": "https://www.apache.org/licenses/LICENSE-2.0" - }, "upstream_repo": "ibm-granite/granite-speech-4.1-2b-plus", "upstream_commit": "edd3bf5", "published_repo": "handy-computer/granite-speech-4.1-2b-plus-gguf", diff --git a/catalog/medasr.json b/catalog/medasr.json index 06d9ef33..e11a3dca 100644 --- a/catalog/medasr.json +++ b/catalog/medasr.json @@ -8,14 +8,6 @@ "spdx": "other", "display": "Health AI Developer Foundations" }, - "identity": { - "name": "MedASR", - "basename": "medasr", - "size_label": "105M", - "author": "Google", - "license_name": "health-ai-developer-foundations", - "license_link": "https://developers.google.com/health-ai-developer-foundations/terms" - }, "upstream_repo": "google/medasr", "upstream_commit": "ae1e484", "published_repo": "handy-computer/medasr-gguf", diff --git a/catalog/multitalker-parakeet-streaming-0.6b-v1.json b/catalog/multitalker-parakeet-streaming-0.6b-v1.json index 0878ac49..1c38c154 100644 --- a/catalog/multitalker-parakeet-streaming-0.6b-v1.json +++ b/catalog/multitalker-parakeet-streaming-0.6b-v1.json @@ -6,7 +6,9 @@ "params": 739989513, "license": { "spdx": "other", - "display": "NVIDIA Open Model License" + "display": "NVIDIA Open Model License", + "name": "nvidia-open-model-license", + "link": "https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/" }, "upstream_repo": "nvidia/multitalker-parakeet-streaming-0.6b-v1", "upstream_commit": "8749fc7", diff --git a/catalog/nemotron-3.5-asr-streaming-0.6b.json b/catalog/nemotron-3.5-asr-streaming-0.6b.json index 8c34bf5c..5ddbe905 100644 --- a/catalog/nemotron-3.5-asr-streaming-0.6b.json +++ b/catalog/nemotron-3.5-asr-streaming-0.6b.json @@ -6,15 +6,9 @@ "params": 637991968, "license": { "spdx": "other", - "display": "OpenMDW-1.1" - }, - "identity": { - "name": "Nemotron Streaming 3.5", - "basename": "parakeet-rnnt", - "size_label": "0.6B", - "author": "NVIDIA", - "license_name": "openmdw-1.1", - "license_link": "https://openmdw.ai/license/1-1/" + "display": "OpenMDW-1.1", + "name": "openmdw-1.1", + "link": "https://openmdw.ai/license/1-1/" }, "upstream_repo": "nvidia/nemotron-3.5-asr-streaming-0.6b", "upstream_commit": "24b151a", diff --git a/catalog/nemotron-speech-streaming-en-0.6b.json b/catalog/nemotron-speech-streaming-en-0.6b.json index 99ebaebb..3206aa97 100644 --- a/catalog/nemotron-speech-streaming-en-0.6b.json +++ b/catalog/nemotron-speech-streaming-en-0.6b.json @@ -6,7 +6,9 @@ "params": 618079745, "license": { "spdx": "other", - "display": "NVIDIA Open Model License" + "display": "NVIDIA Open Model License", + "name": "nvidia-open-model-license", + "link": "https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/" }, "upstream_repo": "nvidia/nemotron-speech-streaming-en-0.6b", "upstream_commit": "ef3bf40", diff --git a/catalog/voxtral-small-24b-2507.json b/catalog/voxtral-small-24b-2507.json index ff8069ea..57475fcf 100644 --- a/catalog/voxtral-small-24b-2507.json +++ b/catalog/voxtral-small-24b-2507.json @@ -14,30 +14,9 @@ "languages": ["en","fr","de","es","it","pt","nl","hi"], "long_form_strategy": "hard-cap", "benchmark_exceptions": [ - { - "kind": "speed", - "match": { - "machine": "m4-max", - "backend": "cpu" - }, - "reason": "The model card explicitly scopes this 24B GPU-class model to Metal; CPU execution is impractical at its 14.3-25.8 GB publication-quant footprint." - }, - { - "kind": "speed", - "match": { - "machine": "ryzen-4750u", - "backend": "cpu" - }, - "reason": "The model card explicitly omits CPU for this 24B GPU-class model; the publication quants are 14.3 GB and 25.8 GB before runtime state." - }, - { - "kind": "speed", - "match": { - "machine": "ryzen-4750u", - "backend": "vulkan" - }, - "reason": "The smallest downloadable quant is 14.3 GB, exceeding the reference Ryzen 4750U Vulkan device-memory budget." - } + {"kind":"speed","match":{"machine":"m4-max","backend":"cpu"},"reason":"The model card explicitly scopes this 24B GPU-class model to Metal; CPU execution is impractical at its 14.3-25.8 GB publication-quant footprint."}, + {"kind":"speed","match":{"machine":"ryzen-4750u","backend":"cpu"},"reason":"The model card explicitly omits CPU for this 24B GPU-class model; the publication quants are 14.3 GB and 25.8 GB before runtime state."}, + {"kind":"speed","match":{"machine":"ryzen-4750u","backend":"vulkan"},"reason":"The smallest downloadable quant is 14.3 GB, exceeding the reference Ryzen 4750U Vulkan device-memory budget."} ], "capabilities": { "transcribe": {"supported":true,"verified":false}, diff --git a/docs/models/canary-180m-flash.md b/docs/models/canary-180m-flash.md index 4bd8726c..9da29ecb 100644 --- a/docs/models/canary-180m-flash.md +++ b/docs/models/canary-180m-flash.md @@ -27,7 +27,7 @@ pinned 2026-05-08. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [canary-180m-flash-F32.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-F32.gguf) | 756 MB | 1.94% | diff --git a/docs/models/canary-1b-flash.md b/docs/models/canary-1b-flash.md index 4e79394d..e38ef11f 100644 --- a/docs/models/canary-1b-flash.md +++ b/docs/models/canary-1b-flash.md @@ -23,7 +23,7 @@ pinned 2026-05-08. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [canary-1b-flash-F32.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-F32.gguf) | 3.56 GB | 1.62% | diff --git a/docs/models/canary-1b-v2.md b/docs/models/canary-1b-v2.md index 9eacbb7b..97d2253f 100644 --- a/docs/models/canary-1b-v2.md +++ b/docs/models/canary-1b-v2.md @@ -35,7 +35,7 @@ pinned 2026-05-08. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [canary-1b-v2-F32.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-F32.gguf) | 3.92 GB | 1.92% | diff --git a/docs/models/canary-1b.md b/docs/models/canary-1b.md index b474b2a8..9539fb8e 100644 --- a/docs/models/canary-1b.md +++ b/docs/models/canary-1b.md @@ -27,7 +27,7 @@ pinned 2026-05-08. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [canary-1b-F32.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-F32.gguf) | 4.09 GB | 1.55% | diff --git a/docs/models/canary-qwen-2.5b.md b/docs/models/canary-qwen-2.5b.md index 4155ce02..11c58d6c 100644 --- a/docs/models/canary-qwen-2.5b.md +++ b/docs/models/canary-qwen-2.5b.md @@ -32,7 +32,7 @@ exact per-session value. See the [input-length contract](../input-limits.md). ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | BF16 | [canary-qwen-2.5b-BF16.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-BF16.gguf) | 5.08 GB | 1.63% | diff --git a/docs/models/cohere-transcribe-03-2026.md b/docs/models/cohere-transcribe-03-2026.md index bd8abe6a..35aeaccf 100644 --- a/docs/models/cohere-transcribe-03-2026.md +++ b/docs/models/cohere-transcribe-03-2026.md @@ -28,7 +28,7 @@ it into shorter segments. See the [input-length contract](../input-limits.md). ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | BF16 | [cohere-transcribe-03-2026-BF16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-BF16.gguf) | 4.11 GB | 1.26% | diff --git a/docs/models/cohere-transcribe-arabic-07-2026.md b/docs/models/cohere-transcribe-arabic-07-2026.md index a5716e05..a465fce2 100644 --- a/docs/models/cohere-transcribe-arabic-07-2026.md +++ b/docs/models/cohere-transcribe-arabic-07-2026.md @@ -29,7 +29,7 @@ it into shorter segments. See the [input-length contract](../input-limits.md). ## Download - + | Quantization | Download | Size | WER (FLEURS Arabic test) | | --- | --- | ---: | ---: | | BF16 | [cohere-transcribe-arabic-07-2026-BF16.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-BF16.gguf) | 4.11 GB | 11.02% | diff --git a/docs/models/diar_streaming_sortformer_4spk-v2.1.md b/docs/models/diar_streaming_sortformer_4spk-v2.1.md index 7d039b1c..74119251 100644 --- a/docs/models/diar_streaming_sortformer_4spk-v2.1.md +++ b/docs/models/diar_streaming_sortformer_4spk-v2.1.md @@ -24,7 +24,7 @@ pinned 2026-07-19. ## Download - + | Quantization | Download | Size | DER (AMI IHM test) | | --- | --- | ---: | ---: | | F32 | [diar_streaming_sortformer_4spk-v2.1-F32.gguf](https://huggingface.co/handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf/resolve/main/diar_streaming_sortformer_4spk-v2.1-F32.gguf) | 471 MB | 14.59% | diff --git a/docs/models/fun-asr-mlt-nano-2512.md b/docs/models/fun-asr-mlt-nano-2512.md index 640de7f2..0a1e00a3 100644 --- a/docs/models/fun-asr-mlt-nano-2512.md +++ b/docs/models/fun-asr-mlt-nano-2512.md @@ -44,7 +44,7 @@ pinned 2026-05-06. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | BF16 | [Fun-ASR-MLT-Nano-2512-BF16.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-BF16.gguf) | 1.67 GB | 1.74% | diff --git a/docs/models/fun-asr-nano-2512.md b/docs/models/fun-asr-nano-2512.md index e0035103..ac1a3f74 100644 --- a/docs/models/fun-asr-nano-2512.md +++ b/docs/models/fun-asr-nano-2512.md @@ -32,7 +32,7 @@ pinned 2026-05-06. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | BF16 | [Fun-ASR-Nano-2512-BF16.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-BF16.gguf) | 1.67 GB | 1.78% | diff --git a/docs/models/gigaam-v3-ctc.md b/docs/models/gigaam-v3-ctc.md index f27d025a..e5bbf81f 100644 --- a/docs/models/gigaam-v3-ctc.md +++ b/docs/models/gigaam-v3-ctc.md @@ -31,7 +31,7 @@ pinned 2026-05-12. ## Download - + | Quantization | Download | Size | WER (FLEURS ru) | | --- | --- | ---: | ---: | | F32 | [gigaam-v3-ctc-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-F32.gguf) | 883 MB | 8.42% | diff --git a/docs/models/gigaam-v3-e2e-ctc.md b/docs/models/gigaam-v3-e2e-ctc.md index 4e444133..5917c057 100644 --- a/docs/models/gigaam-v3-e2e-ctc.md +++ b/docs/models/gigaam-v3-e2e-ctc.md @@ -31,7 +31,7 @@ pinned 2026-05-12. ## Download - + | Quantization | Download | Size | WER (FLEURS ru) | | --- | --- | ---: | ---: | | F32 | [gigaam-v3-e2e-ctc-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-F32.gguf) | 884 MB | 5.50% | diff --git a/docs/models/gigaam-v3-e2e-rnnt.md b/docs/models/gigaam-v3-e2e-rnnt.md index 29d7d018..f648c619 100644 --- a/docs/models/gigaam-v3-e2e-rnnt.md +++ b/docs/models/gigaam-v3-e2e-rnnt.md @@ -31,7 +31,7 @@ pinned 2026-05-12. ## Download - + | Quantization | Download | Size | WER (FLEURS ru) | | --- | --- | ---: | ---: | | F32 | [gigaam-v3-e2e-rnnt-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-F32.gguf) | 890 MB | 5.35% | diff --git a/docs/models/gigaam-v3-rnnt.md b/docs/models/gigaam-v3-rnnt.md index 729cca8d..ffee1b88 100644 --- a/docs/models/gigaam-v3-rnnt.md +++ b/docs/models/gigaam-v3-rnnt.md @@ -31,7 +31,7 @@ pinned 2026-05-12. ## Download - + | Quantization | Download | Size | WER (FLEURS ru) | | --- | --- | ---: | ---: | | F32 | [gigaam-v3-rnnt-F32.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-F32.gguf) | 888 MB | 8.08% | diff --git a/docs/models/granite-4.0-1b-speech.md b/docs/models/granite-4.0-1b-speech.md index 271ecb89..17f3bb1b 100644 --- a/docs/models/granite-4.0-1b-speech.md +++ b/docs/models/granite-4.0-1b-speech.md @@ -26,7 +26,7 @@ pinned 2026-05-17. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | BF16 | [granite-4.0-1b-speech-BF16.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-BF16.gguf) | 4.63 GB | 1.42% | diff --git a/docs/models/granite-speech-4.1-2b-nar.md b/docs/models/granite-speech-4.1-2b-nar.md index 9274e4c6..d766d514 100644 --- a/docs/models/granite-speech-4.1-2b-nar.md +++ b/docs/models/granite-speech-4.1-2b-nar.md @@ -24,7 +24,7 @@ the README's canonical inference target). ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | BF16 | [granite-speech-4.1-2b-nar-BF16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-BF16.gguf) | 4.51 GB | 1.29% | diff --git a/docs/models/granite-speech-4.1-2b-plus.md b/docs/models/granite-speech-4.1-2b-plus.md index a31ade14..ee03075f 100644 --- a/docs/models/granite-speech-4.1-2b-plus.md +++ b/docs/models/granite-speech-4.1-2b-plus.md @@ -30,7 +30,7 @@ pinned 2026-05-17. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | BF16 | [granite-speech-4.1-2b-plus-BF16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-BF16.gguf) | 4.23 GB | 1.49% | diff --git a/docs/models/granite-speech-4.1-2b.md b/docs/models/granite-speech-4.1-2b.md index a66188b5..d9c6cc04 100644 --- a/docs/models/granite-speech-4.1-2b.md +++ b/docs/models/granite-speech-4.1-2b.md @@ -27,7 +27,7 @@ pinned 2026-05-17. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | BF16 | [granite-speech-4.1-2b-BF16.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-BF16.gguf) | 4.63 GB | 1.31% | diff --git a/docs/models/medasr.md b/docs/models/medasr.md index 879ac5f3..b39103ed 100644 --- a/docs/models/medasr.md +++ b/docs/models/medasr.md @@ -22,7 +22,7 @@ long recordings for best results. See the ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [medasr-F32.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-F32.gguf) | 421 MB | 17.88% | diff --git a/docs/models/moonshine-base.md b/docs/models/moonshine-base.md index aa2e2d20..73894a5b 100644 --- a/docs/models/moonshine-base.md +++ b/docs/models/moonshine-base.md @@ -27,7 +27,7 @@ on 2026-05-05. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [moonshine-base-F32.gguf](https://huggingface.co/handy-computer/moonshine-base-gguf/resolve/main/moonshine-base-F32.gguf) | 248 MB | 3.28% | diff --git a/docs/models/moonshine-streaming-medium.md b/docs/models/moonshine-streaming-medium.md index 3bd0b4c1..190a905a 100644 --- a/docs/models/moonshine-streaming-medium.md +++ b/docs/models/moonshine-streaming-medium.md @@ -22,7 +22,7 @@ pinned 2026-05-06. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [moonshine-streaming-medium-F32.gguf](https://huggingface.co/handy-computer/moonshine-streaming-medium-gguf/resolve/main/moonshine-streaming-medium-F32.gguf) | 1.07 GB | 2.16% | diff --git a/docs/models/moonshine-streaming-small.md b/docs/models/moonshine-streaming-small.md index a61fd22e..323aac00 100644 --- a/docs/models/moonshine-streaming-small.md +++ b/docs/models/moonshine-streaming-small.md @@ -22,7 +22,7 @@ pinned 2026-05-06. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [moonshine-streaming-small-F32.gguf](https://huggingface.co/handy-computer/moonshine-streaming-small-gguf/resolve/main/moonshine-streaming-small-F32.gguf) | 562 MB | 2.53% | diff --git a/docs/models/moonshine-streaming-tiny.md b/docs/models/moonshine-streaming-tiny.md index f7ce8acb..babe08d8 100644 --- a/docs/models/moonshine-streaming-tiny.md +++ b/docs/models/moonshine-streaming-tiny.md @@ -20,7 +20,7 @@ pinned 2026-05-06. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [moonshine-streaming-tiny-F32.gguf](https://huggingface.co/handy-computer/moonshine-streaming-tiny-gguf/resolve/main/moonshine-streaming-tiny-F32.gguf) | 178 MB | 4.53% | diff --git a/docs/models/moonshine-tiny.md b/docs/models/moonshine-tiny.md index 97d411de..1a5e5a93 100644 --- a/docs/models/moonshine-tiny.md +++ b/docs/models/moonshine-tiny.md @@ -26,7 +26,7 @@ on 2026-05-05. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [moonshine-tiny-F32.gguf](https://huggingface.co/handy-computer/moonshine-tiny-gguf/resolve/main/moonshine-tiny-F32.gguf) | 110 MB | 4.58% | diff --git a/docs/models/moss-transcribe-diarize.md b/docs/models/moss-transcribe-diarize.md index f3e9099c..a47bd7b9 100644 --- a/docs/models/moss-transcribe-diarize.md +++ b/docs/models/moss-transcribe-diarize.md @@ -37,7 +37,7 @@ into shorter pieces. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | BF16 | [MOSS-Transcribe-Diarize-BF16.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-BF16.gguf) | 1.83 GB | 2.08% | diff --git a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md index d93f0a0d..af19d1ed 100644 --- a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md +++ b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md @@ -37,7 +37,7 @@ pinned 2026-07-12. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean, offline) | | --- | --- | ---: | ---: | | F32 | [bundle/multitalker-parakeet-streaming-0.6b-v1-F32.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-F32.gguf) | 2.96 GB | 2.19% | diff --git a/docs/models/nemotron-3.5-asr-streaming-0.6b.md b/docs/models/nemotron-3.5-asr-streaming-0.6b.md index 9e97a979..610270f1 100644 --- a/docs/models/nemotron-3.5-asr-streaming-0.6b.md +++ b/docs/models/nemotron-3.5-asr-streaming-0.6b.md @@ -53,7 +53,7 @@ stays unbounded for the same reason. See the ## Download - + | Quantization | Download | Size | | --- | --- | ---: | | F32 | [nemotron-3.5-asr-streaming-0.6b-F32.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-F32.gguf) | 2.55 GB | diff --git a/docs/models/nemotron-speech-streaming-en-0.6b.md b/docs/models/nemotron-speech-streaming-en-0.6b.md index d575cf32..c107be00 100644 --- a/docs/models/nemotron-speech-streaming-en-0.6b.md +++ b/docs/models/nemotron-speech-streaming-en-0.6b.md @@ -35,7 +35,7 @@ pinned 2026-05-11. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean, offline) | | --- | --- | ---: | ---: | | F32 | [nemotron-speech-streaming-en-0.6b-F32.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-F32.gguf) | 2.47 GB | 2.31% | diff --git a/docs/models/parakeet-ctc-0.6b.md b/docs/models/parakeet-ctc-0.6b.md index 4b6655b5..cbc49641 100644 --- a/docs/models/parakeet-ctc-0.6b.md +++ b/docs/models/parakeet-ctc-0.6b.md @@ -25,7 +25,7 @@ pinned 2026-05-10. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [parakeet-ctc-0.6b-F32.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-F32.gguf) | 2.44 GB | 1.87% | diff --git a/docs/models/parakeet-ctc-1.1b.md b/docs/models/parakeet-ctc-1.1b.md index d0181ec1..da1bdd9e 100644 --- a/docs/models/parakeet-ctc-1.1b.md +++ b/docs/models/parakeet-ctc-1.1b.md @@ -24,7 +24,7 @@ pinned 2026-05-10. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [parakeet-ctc-1.1b-F32.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-F32.gguf) | 4.25 GB | 1.85% | diff --git a/docs/models/parakeet-primeline.md b/docs/models/parakeet-primeline.md index f18952e5..098098be 100644 --- a/docs/models/parakeet-primeline.md +++ b/docs/models/parakeet-primeline.md @@ -24,7 +24,7 @@ pinned 2026-08-16. ## Download - + | Quantization | Download | Size | WER (FLEURS de test) | | --- | --- | ---: | ---: | | F32 | [parakeet-primeline-F32.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-F32.gguf) | 2.51 GB | 6.00% | diff --git a/docs/models/parakeet-rnnt-0.6b.md b/docs/models/parakeet-rnnt-0.6b.md index 4f517afa..7210593b 100644 --- a/docs/models/parakeet-rnnt-0.6b.md +++ b/docs/models/parakeet-rnnt-0.6b.md @@ -26,7 +26,7 @@ pinned 2026-05-10. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [parakeet-rnnt-0.6b-F32.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-F32.gguf) | 2.47 GB | 1.62% | diff --git a/docs/models/parakeet-rnnt-1.1b.md b/docs/models/parakeet-rnnt-1.1b.md index 8be5cd54..f4fa195b 100644 --- a/docs/models/parakeet-rnnt-1.1b.md +++ b/docs/models/parakeet-rnnt-1.1b.md @@ -24,7 +24,7 @@ pinned 2026-05-10. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [parakeet-rnnt-1.1b-F32.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-F32.gguf) | 4.28 GB | 1.45% | diff --git a/docs/models/parakeet-tdt-0.6b-v2.md b/docs/models/parakeet-tdt-0.6b-v2.md index b6c8f2f0..34586cb6 100644 --- a/docs/models/parakeet-tdt-0.6b-v2.md +++ b/docs/models/parakeet-tdt-0.6b-v2.md @@ -20,7 +20,7 @@ pinned 2026-04-15. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [parakeet-tdt-0.6b-v2-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-F32.gguf) | 2.47 GB | 1.68% | diff --git a/docs/models/parakeet-tdt-0.6b-v3.md b/docs/models/parakeet-tdt-0.6b-v3.md index c33d588b..94bf005f 100644 --- a/docs/models/parakeet-tdt-0.6b-v3.md +++ b/docs/models/parakeet-tdt-0.6b-v3.md @@ -23,7 +23,7 @@ pinned 2026-04-16. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [parakeet-tdt-0.6b-v3-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-F32.gguf) | 2.51 GB | 1.95% | diff --git a/docs/models/parakeet-tdt-1.1b.md b/docs/models/parakeet-tdt-1.1b.md index 7454a0ba..a6137c0f 100644 --- a/docs/models/parakeet-tdt-1.1b.md +++ b/docs/models/parakeet-tdt-1.1b.md @@ -25,7 +25,7 @@ pinned 2026-05-10. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [parakeet-tdt-1.1b-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-F32.gguf) | 4.28 GB | 1.39% | diff --git a/docs/models/parakeet-tdt_ctc-1.1b.md b/docs/models/parakeet-tdt_ctc-1.1b.md index 5c526b03..9e2812c6 100644 --- a/docs/models/parakeet-tdt_ctc-1.1b.md +++ b/docs/models/parakeet-tdt_ctc-1.1b.md @@ -24,7 +24,7 @@ pinned 2026-05-10. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [parakeet-tdt_ctc-1.1b-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-F32.gguf) | 4.28 GB | 1.87% | diff --git a/docs/models/parakeet-tdt_ctc-110m.md b/docs/models/parakeet-tdt_ctc-110m.md index 11786d32..4592f5ed 100644 --- a/docs/models/parakeet-tdt_ctc-110m.md +++ b/docs/models/parakeet-tdt_ctc-110m.md @@ -22,7 +22,7 @@ pinned 2026-05-10. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [parakeet-tdt_ctc-110m-F32.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-F32.gguf) | 457 MB | 2.43% | diff --git a/docs/models/parakeet-unified-en-0.6b.md b/docs/models/parakeet-unified-en-0.6b.md index 829b5a0f..0d3f49ce 100644 --- a/docs/models/parakeet-unified-en-0.6b.md +++ b/docs/models/parakeet-unified-en-0.6b.md @@ -38,7 +38,7 @@ pinned 2026-05-10. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean, offline) | | --- | --- | ---: | ---: | | F32 | [parakeet-unified-en-0.6b-F32.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-F32.gguf) | 2.47 GB | 1.59% | diff --git a/docs/models/qwen3-asr-0.6b.md b/docs/models/qwen3-asr-0.6b.md index 29e0b6c2..4bd8c8f3 100644 --- a/docs/models/qwen3-asr-0.6b.md +++ b/docs/models/qwen3-asr-0.6b.md @@ -23,7 +23,7 @@ Ported from upstream commit ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | BF16 | [Qwen3-ASR-0.6B-BF16.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-BF16.gguf) | 1.57 GB | 2.12% | diff --git a/docs/models/qwen3-asr-1.7b.md b/docs/models/qwen3-asr-1.7b.md index e28930e8..453cf801 100644 --- a/docs/models/qwen3-asr-1.7b.md +++ b/docs/models/qwen3-asr-1.7b.md @@ -22,7 +22,7 @@ Ported from upstream commit ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | BF16 | [Qwen3-ASR-1.7B-BF16.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-BF16.gguf) | 4.08 GB | 1.62% | diff --git a/docs/models/sensevoice-small.md b/docs/models/sensevoice-small.md index aa2e3a81..b95c0140 100644 --- a/docs/models/sensevoice-small.md +++ b/docs/models/sensevoice-small.md @@ -38,7 +38,7 @@ recordings (e.g. with VAD) for best results. See the ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [SenseVoiceSmall-F32.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-F32.gguf) | 937 MB | 3.13% | diff --git a/docs/models/voxtral-mini-3b-2507.md b/docs/models/voxtral-mini-3b-2507.md index f215c585..c71c6360 100644 --- a/docs/models/voxtral-mini-3b-2507.md +++ b/docs/models/voxtral-mini-3b-2507.md @@ -29,7 +29,7 @@ pinned 2026-06-06. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | BF16 | [Voxtral-Mini-3B-2507-BF16.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-BF16.gguf) | 9.37 GB | 1.88% | diff --git a/docs/models/voxtral-small-24b-2507.md b/docs/models/voxtral-small-24b-2507.md index d7eeb96c..2cfdb0c4 100644 --- a/docs/models/voxtral-small-24b-2507.md +++ b/docs/models/voxtral-small-24b-2507.md @@ -34,7 +34,7 @@ pinned 2026-06-05. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | BF16 | [Voxtral-Small-24B-2507-BF16.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-BF16.gguf) | 48.54 GB | 1.56% | diff --git a/docs/models/whisper-base.en.md b/docs/models/whisper-base.en.md index fc2d94c0..dd095174 100644 --- a/docs/models/whisper-base.en.md +++ b/docs/models/whisper-base.en.md @@ -20,7 +20,7 @@ on 2026-04-26. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [whisper-base.en-F32.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-F32.gguf) | 292 MB | 4.30% | diff --git a/docs/models/whisper-base.md b/docs/models/whisper-base.md index 8f0e01dc..52401302 100644 --- a/docs/models/whisper-base.md +++ b/docs/models/whisper-base.md @@ -20,7 +20,7 @@ on 2026-04-26. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [whisper-base-F32.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-F32.gguf) | 292 MB | 5.11% | diff --git a/docs/models/whisper-large-v2.md b/docs/models/whisper-large-v2.md index 502d87fe..561880fb 100644 --- a/docs/models/whisper-large-v2.md +++ b/docs/models/whisper-large-v2.md @@ -20,7 +20,7 @@ on 2026-04-26. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [whisper-large-v2-F32.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-F32.gguf) | 6.18 GB | 2.67% | diff --git a/docs/models/whisper-large-v3-turbo.md b/docs/models/whisper-large-v3-turbo.md index 7b872494..f127651b 100644 --- a/docs/models/whisper-large-v3-turbo.md +++ b/docs/models/whisper-large-v3-turbo.md @@ -20,7 +20,7 @@ on 2026-04-26. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F16 | [whisper-large-v3-turbo-F16.gguf](https://huggingface.co/handy-computer/whisper-large-v3-turbo-gguf/resolve/main/whisper-large-v3-turbo-F16.gguf) | 1.63 GB | 2.01% | diff --git a/docs/models/whisper-large-v3.md b/docs/models/whisper-large-v3.md index e1cba1dd..d30c7525 100644 --- a/docs/models/whisper-large-v3.md +++ b/docs/models/whisper-large-v3.md @@ -20,7 +20,7 @@ on 2026-04-26. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F16 | [whisper-large-v3-F16.gguf](https://huggingface.co/handy-computer/whisper-large-v3-gguf/resolve/main/whisper-large-v3-F16.gguf) | 3.11 GB | 1.81% | diff --git a/docs/models/whisper-large.md b/docs/models/whisper-large.md index 608919a5..d6193408 100644 --- a/docs/models/whisper-large.md +++ b/docs/models/whisper-large.md @@ -20,7 +20,7 @@ on 2026-04-26. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [whisper-large-F32.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-F32.gguf) | 6.18 GB | 2.72% | diff --git a/docs/models/whisper-medium.en.md b/docs/models/whisper-medium.en.md index f0d3b26c..39317168 100644 --- a/docs/models/whisper-medium.en.md +++ b/docs/models/whisper-medium.en.md @@ -20,7 +20,7 @@ on 2026-04-26. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [whisper-medium.en-F32.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-F32.gguf) | 3.06 GB | 2.74% | diff --git a/docs/models/whisper-medium.md b/docs/models/whisper-medium.md index 14f2a201..87dc0a56 100644 --- a/docs/models/whisper-medium.md +++ b/docs/models/whisper-medium.md @@ -20,7 +20,7 @@ on 2026-04-26. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [whisper-medium-F32.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-F32.gguf) | 3.06 GB | 2.64% | diff --git a/docs/models/whisper-small.en.md b/docs/models/whisper-small.en.md index e7233736..c0be70f5 100644 --- a/docs/models/whisper-small.en.md +++ b/docs/models/whisper-small.en.md @@ -20,7 +20,7 @@ on 2026-04-26. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [whisper-small.en-F32.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-F32.gguf) | 969 MB | 3.11% | diff --git a/docs/models/whisper-small.md b/docs/models/whisper-small.md index 93c386dd..0b092e95 100644 --- a/docs/models/whisper-small.md +++ b/docs/models/whisper-small.md @@ -20,7 +20,7 @@ on 2026-04-26. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [whisper-small-F32.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-F32.gguf) | 969 MB | 3.34% | diff --git a/docs/models/whisper-tiny.en.md b/docs/models/whisper-tiny.en.md index e3c3ff7c..a032309c 100644 --- a/docs/models/whisper-tiny.en.md +++ b/docs/models/whisper-tiny.en.md @@ -20,7 +20,7 @@ on 2026-04-26. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [whisper-tiny.en-F32.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-F32.gguf) | 153 MB | 5.77% | diff --git a/docs/models/whisper-tiny.md b/docs/models/whisper-tiny.md index b8be36cb..6595c553 100644 --- a/docs/models/whisper-tiny.md +++ b/docs/models/whisper-tiny.md @@ -20,7 +20,7 @@ on 2026-04-26. ## Download - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | | F32 | [whisper-tiny-F32.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-F32.gguf) | 153 MB | 7.49% | diff --git a/docs/tools/hf-metadata-schema.md b/docs/tools/hf-metadata-schema.md index 6ad7a22d..bc0ccf60 100644 --- a/docs/tools/hf-metadata-schema.md +++ b/docs/tools/hf-metadata-schema.md @@ -10,12 +10,13 @@ capability flags; any 0–100 score is left to the consumer to compute from thes ## Where it comes from -`scripts/hf_cards/generate.py` serializes the block from a per-model spec -(`scripts/hf_cards/.yaml`) — per-quant WER (`quants:`), realtime factors -(`perf:`), optional task-specific raw measurements (`metrics:`), and capability -flags (`capabilities:`) — into the card via `template.md.j2`. A spec with no -`perf:` emits no block, so the rollout is per-spec and never breaks an -un-migrated card. +`scripts/hf_cards/generate.py` serializes the block from the catalog record +(`catalog/.json`): per-quant error rates from the headline benchmark +rows, realtime factors from the speed rows at the card's default quant, and +capability flags from the record's `capabilities` block. The editorial spec +(`scripts/hf_cards/.yaml`) adds only optional task-specific raw +measurements (`metrics:`) and secondary per-quant maps under `wer:`. A record +with no speed rows at the default quant emits no block. ## Fields diff --git a/scripts/catalog/backfill_provenance.py b/scripts/catalog/backfill_provenance.py deleted file mode 100755 index f480f108..00000000 --- a/scripts/catalog/backfill_provenance.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env -S uv run --script -# /// script -# requires-python = ">=3.11" -# /// -"""Mark migrated published measurements whose original run SHA is unavailable. - -This does not invent an engine commit or timing breakdown. It records the -narrow fact we do know: the number survived in a model card/publication before -profile-stamped reports existed. New measurements must carry engine_sha and are -never eligible for this marker. -""" -from __future__ import annotations - -import argparse -import pathlib -import sys - -sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) -import common # noqa: E402 - - -def main() -> int: - parser = argparse.ArgumentParser() - parser.add_argument("--models", default="") - parser.add_argument("--write", action="store_true") - args = parser.parse_args() - - records = common.load_records() - selected = {item.strip() for item in args.models.split(",") if item.strip()} - unknown = selected - records.keys() - if unknown: - print(f"unknown catalog variant(s): {', '.join(sorted(unknown))}", file=sys.stderr) - return 2 - - rows_changed = records_changed = 0 - by_section = {"accuracy_benchmarks": 0, "speed_benchmarks": 0} - for variant, record in records.items(): - if selected and variant not in selected: - continue - changed = False - for section in by_section: - for row in record.get(section, []): - if row.get("engine_sha") or row.get("measurement_provenance"): - continue - # Both row types have a user-facing published number. Speed's - # durable legacy number may be xRT-only (total_ms is null). - if section == "speed_benchmarks" and row.get("xrt_compute") is None: - continue - row["measurement_provenance"] = "legacy-published" - rows_changed += 1 - by_section[section] += 1 - changed = True - if changed: - records_changed += 1 - if args.write: - common.write_record(common.CATALOG_DIR / f"{variant}.json", record) - - print(f"legacy provenance: {rows_changed} row(s) across {records_changed} record(s) " - f"({by_section['accuracy_benchmarks']} accuracy, " - f"{by_section['speed_benchmarks']} speed)") - if not args.write: - print("dry run: pass --write to apply") - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/catalog/cards.py b/scripts/catalog/cards.py deleted file mode 100644 index 71cb6b53..00000000 --- a/scripts/catalog/cards.py +++ /dev/null @@ -1,86 +0,0 @@ -"""Derive mechanical Hugging Face card fields from a catalog record. - -Used by sync_hf_cards.py to populate the committed, standalone YAML specs. -Pure stdlib: it takes and returns plain dicts, and knows nothing about YAML or -templates. -""" -from __future__ import annotations - -import pathlib -import statistics -import sys - -sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) -import common # noqa: E402 - -CAP_FLAGS = ("streaming", "translate", "lang_detect") -DEFAULT_SIZE = {"units": "dec", "gb_dp": 2, "mb_only": False} - - -def derive_capabilities(record: dict) -> dict: - """The boolean flags the `transcribe_cpp:` metadata block carries.""" - caps = record.get("capabilities", {}) - out = {flag: bool(caps.get(flag, {}).get("supported")) for flag in CAP_FLAGS} - if caps.get("diarize", {}).get("supported"): - out["diarize"] = True - granularities = caps.get("timestamps", {}).get("granularities") or [] - # Advertise the finest granularity the port actually emits. - out["timestamps"] = next((g for g in ("token", "word", "segment") - if g in granularities), "none") - return out - - -def derive_perf(record: dict, default_quant: str | None) -> dict: - """Speedup over realtime per rig/backend, at the card's default quant. - - One published figure per (rig, backend), averaged over the benchmark - samples -- which is what the hand-written specs already did. Deriving it - keeps the metadata block from drifting when a sweep is re-run, and picks - up rigs a hand-written spec never got around to listing. - """ - cells: dict[tuple[str, str], list[float]] = {} - for row in record.get("speed_benchmarks", []): - if row["quant"] != default_quant: - continue - cells.setdefault((row["machine"], row["backend"]), []).append(row["xrt_compute"]) - perf: dict[str, dict[str, float]] = {} - for (machine, backend), values in sorted(cells.items()): - mean = round(statistics.fmean(values), 1) - perf.setdefault(machine, {})[backend] = int(mean) if mean == int(mean) else mean - return perf - - -def derive_quants(record: dict, size: dict) -> list[dict]: - errors = common.headline_rows(record) - quants = [] - for item in record.get("downloads", []): - entry = {"name": item["quant"], "filename": item["filename"], - "size": common.fmt_size(item["size_bytes"], **size)} - row = errors.get(item["quant"]) - if row is not None: - entry["wer"] = common.fmt_err(row) - quants.append(entry) - return quants - - -def derive_spec(record: dict, editorial: dict) -> dict: - """Everything the catalog can supply, before the editorial YAML lands.""" - downloads = record.get("downloads", []) - index = editorial.get("default_quant_index", 0) - default_quant = downloads[index]["quant"] if index < len(downloads) else None - size = {**DEFAULT_SIZE, **(editorial.get("size") or {})} - spec = { - "hf_repo": record["upstream_repo"], - "target_repo": record.get("published_repo"), - "upstream_commit": record["upstream_commit"], - "license": record["license"]["spdx"], - "license_display": record["license"]["display"], - "languages": list(record.get("languages", [])), - "capabilities": derive_capabilities(record), - "quants": derive_quants(record, size), - "perf": derive_perf(record, default_quant), - } - label = common.headline_label(record) - if label: - spec["wer"] = {"source": label} - return spec diff --git a/scripts/catalog/check.py b/scripts/catalog/check.py index 01b8016a..df4c6cd8 100755 --- a/scripts/catalog/check.py +++ b/scripts/catalog/check.py @@ -26,14 +26,10 @@ REPO = pathlib.Path(__file__).resolve().parents[2] sys.path.insert(0, str(REPO / "scripts" / "catalog")) +import common # noqa: E402 import profiles # noqa: E402 -def load(d: pathlib.Path) -> dict[str, dict]: - return {p.stem: json.loads(p.read_text()) - for p in sorted(d.glob("*.json")) if not p.name.startswith("_")} - - def schema_pass(records: dict, schema: dict) -> int: v, bad = Draft202012Validator(schema), 0 for name, rec in records.items(): @@ -70,10 +66,9 @@ def pairing_pass(records: dict) -> int: A dozen variants are documented inside a family page rather than a page of their own (the Moonshine language fine-tunes), so a missing doc is a note - rather than a failure. The card specs under scripts/hf_cards/ are now - committed standalone inputs, so pairing is bidirectional: an orphan spec - no longer renders a card nobody can trace to a record, and a record with - no spec cannot produce an uploadable card at all. + rather than a failure. The editorial card specs under scripts/hf_cards/ + pair one to one with records: generate.py reads both, so an orphan spec + has no catalog to render from and a record with no spec has no card. """ card_names = {path.stem for path in (REPO / "scripts" / "hf_cards").glob("*.yaml")} record_names = set(records) @@ -259,7 +254,7 @@ def main() -> int: args = ap.parse_args() d = pathlib.Path(args.dir) schema = json.loads((REPO / "catalog/_schema.json").read_text()) - records = load(d) + records = common.load_records(d) selected = {item.strip() for item in args.models.split(",") if item.strip()} unknown = selected - records.keys() if unknown: diff --git a/scripts/catalog/common.py b/scripts/catalog/common.py index 032e58f8..7bc13d98 100644 --- a/scripts/catalog/common.py +++ b/scripts/catalog/common.py @@ -41,32 +41,14 @@ def load_record(variant: str, directory: pathlib.Path | None = None) -> dict: # -------------------------------------------------------------------------- # sizes -# -# Published docs settled on three different conventions for the same byte -# count: decimal MB/GB, binary sizes labelled MB/GB, and always-MB. Which one a -# given table uses is a property of that table, recorded in its marker, not of -# the record -- so adopting markers into existing docs changes no published -# string. Normalising on one convention is a separate, deliberate edit. -SIZE_BASE = {"dec": (10**6, 10**9), "bin": (2**20, 2**30)} - -def fmt_size(size_bytes: int, units: str = "dec", gb_dp: int = 2, - mb_only: bool = False) -> str: - """Render a byte count the way a download table prints it.""" - mb, gb = SIZE_BASE[units] - if mb_only or size_bytes < gb: - return f"{size_bytes / mb:.0f} MB" - return f"{size_bytes / gb:.{gb_dp}f} GB" - - -def size_conventions() -> list[dict]: - """Every convention `fmt_size` can produce, best-guess order first. - - Used by `render.py --adopt` to work out which one a doc already uses. - """ - return [{"units": u, "gb_dp": d, "mb_only": m} - for u in ("dec", "bin") for m in (False, True) for d in (2, 1)] +def fmt_size(size_bytes: int) -> str: + """Render a byte count the way a download table prints it: decimal MB + below a gigabyte, decimal GB to two places above.""" + if size_bytes < 10**9: + return f"{size_bytes / 10**6:.0f} MB" + return f"{size_bytes / 10**9:.2f} GB" # -------------------------------------------------------------------------- diff --git a/scripts/catalog/db.py b/scripts/catalog/db.py index be44eefc..919bb4c0 100755 --- a/scripts/catalog/db.py +++ b/scripts/catalog/db.py @@ -4,11 +4,11 @@ # /// """Build the portable catalog database from catalog JSON records. -The SQLite file is a disposable query artifact; catalog/*.json is the source of -truth. The database contains the complete model catalog, every accuracy row and -every speed row. It replaces the former specialized WER database. +The SQLite file is a disposable query artifact; catalog/*.json is the source +of truth. Tables mirror the record sections one to one (downloads, accuracy, +speed) so a query reads like the JSON it came from. - uv run scripts/catalog/db.py + uv run scripts/catalog/db.py # build/catalog.db uv run scripts/catalog/db.py --out path/to/catalog.db """ from __future__ import annotations @@ -17,29 +17,27 @@ import json import os import pathlib -import shutil import sqlite3 import sys from datetime import datetime, timezone -import profiles +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +import common # noqa: E402 +import profiles # noqa: E402 -REPO = pathlib.Path(__file__).resolve().parents[2] -DEFAULT_DB = REPO / "reports" / "wer" / "wer.db" -ORIGINAL_DB = REPO / "reports" / "wer" / "wer.db.original" +DEFAULT_DB = common.REPO / "build" / "catalog.db" SCHEMA = """ -PRAGMA user_version = 10; +PRAGMA user_version = 1; CREATE TABLE meta(key TEXT PRIMARY KEY, value TEXT NOT NULL); CREATE TABLE models( - model TEXT PRIMARY KEY, + variant TEXT PRIMARY KEY, family TEXT NOT NULL, display_name TEXT NOT NULL, params INTEGER NOT NULL, - params_m REAL NOT NULL, architecture_pattern TEXT, - license TEXT NOT NULL, + license_spdx TEXT NOT NULL, license_display TEXT NOT NULL, upstream_repo TEXT NOT NULL, upstream_commit TEXT NOT NULL, @@ -49,7 +47,7 @@ long_form_strategy TEXT NOT NULL, max_audio_s REAL, max_output_tokens INTEGER, - -- Which results row-set this model publishes as its headline number. A + -- Which accuracy row-set this model publishes as its headline number. A -- model carries several runs of one dataset that differ only in batch -- size or timestamp mode, so the pointer names the whole identity. headline_dataset TEXT, @@ -62,50 +60,44 @@ lang TEXT PRIMARY KEY ); CREATE TABLE model_languages( - model TEXT NOT NULL REFERENCES models(model), + variant TEXT NOT NULL REFERENCES models(variant), lang TEXT NOT NULL REFERENCES languages(lang), - PRIMARY KEY(model, lang) + PRIMARY KEY(variant, lang) ); CREATE TABLE language_aliases( - model TEXT NOT NULL REFERENCES models(model), + variant TEXT NOT NULL REFERENCES models(variant), alias TEXT NOT NULL REFERENCES languages(lang), canonical TEXT NOT NULL REFERENCES languages(lang), - PRIMARY KEY(model, alias) + PRIMARY KEY(variant, alias) ); -CREATE VIEW model_languages_canonical AS -SELECT ml.model, COALESCE(a.canonical, ml.lang) AS lang -FROM model_languages ml -LEFT JOIN language_aliases a ON a.model = ml.model AND a.alias = ml.lang; CREATE TABLE capabilities( - model TEXT NOT NULL REFERENCES models(model), + variant TEXT NOT NULL REFERENCES models(variant), capability TEXT NOT NULL, supported INTEGER NOT NULL, verified INTEGER, note TEXT, details_json TEXT NOT NULL, - PRIMARY KEY(model, capability) + PRIMARY KEY(variant, capability) ); -CREATE TABLE quants( - model TEXT NOT NULL REFERENCES models(model), +CREATE TABLE downloads( + variant TEXT NOT NULL REFERENCES models(variant), quant TEXT NOT NULL, filename TEXT NOT NULL, size_bytes INTEGER NOT NULL, - size_gb REAL NOT NULL, - PRIMARY KEY(model, quant) + PRIMARY KEY(variant, quant) ); CREATE TABLE datasets( - dataset TEXT PRIMARY KEY, - source TEXT NOT NULL, + dataset_id TEXT PRIMARY KEY, + dataset TEXT NOT NULL, split TEXT NOT NULL, - lang TEXT NOT NULL REFERENCES languages(lang) + language TEXT NOT NULL REFERENCES languages(lang) ); -CREATE TABLE results( - result_id INTEGER PRIMARY KEY, - dataset TEXT NOT NULL REFERENCES datasets(dataset), - model TEXT NOT NULL REFERENCES models(model), +CREATE TABLE accuracy( + dataset_id TEXT NOT NULL REFERENCES datasets(dataset_id), + variant TEXT NOT NULL REFERENCES models(variant), quant TEXT NOT NULL, metric TEXT NOT NULL, err_pct REAL NOT NULL CHECK(err_pct >= 0), @@ -123,24 +115,23 @@ empty_hyp INTEGER, utts_over_50pct INTEGER ); -CREATE UNIQUE INDEX results_identity ON results( - dataset, model, quant, metric, +CREATE UNIQUE INDEX accuracy_identity ON accuracy( + dataset_id, variant, quant, metric, IFNULL(batch_size, 0), IFNULL(timestamps, '') ); -CREATE TABLE rigs( - rig TEXT PRIMARY KEY, - display TEXT NOT NULL +CREATE TABLE machines( + machine TEXT PRIMARY KEY ); -CREATE TABLE perf( - model TEXT NOT NULL REFERENCES models(model), - rig TEXT NOT NULL REFERENCES rigs(rig), +CREATE TABLE speed( + variant TEXT NOT NULL REFERENCES models(variant), + machine TEXT NOT NULL REFERENCES machines(machine), backend TEXT NOT NULL, quant TEXT NOT NULL, sample TEXT NOT NULL, - sample_s REAL NOT NULL, + sample_duration_s REAL NOT NULL, total_ms REAL, - xrt REAL NOT NULL, + xrt_compute REAL NOT NULL, load_ms REAL, mel_ms REAL, encode_ms REAL, @@ -149,71 +140,44 @@ measurement_provenance TEXT, measured_on TEXT, thermal_gated INTEGER, - PRIMARY KEY(model, rig, backend, quant, sample) + PRIMARY KEY(variant, machine, backend, quant, sample) ); --- Friendly full-catalog views. The base table names retain compatibility with --- the original WER database; these expose the terminology used by catalog JSON. -CREATE VIEW downloads AS -SELECT model AS variant, quant, filename, size_bytes FROM quants; -CREATE VIEW accuracy AS -SELECT r.model AS variant, d.source AS dataset, d.split, d.lang AS language, - r.quant, r.metric, r.err_pct, r.ci_lo, r.ci_hi, r.n_utts, - r.batch_size, r.timestamps, r.engine_sha, r.measurement_provenance, - r.measured_on, - r.substitutions, r.deletions, r.insertions, r.empty_hyp, - r.utts_over_50pct -FROM results r JOIN datasets d ON d.dataset = r.dataset; -- The per-quant column a model card and its doc print. CREATE VIEW headline AS -SELECT r.model AS variant, d.source AS dataset, d.split, d.lang AS language, - r.quant, r.metric, r.err_pct, r.ci_lo, r.ci_hi, r.n_utts -FROM results r -JOIN models m ON m.model = r.model -JOIN datasets d ON d.dataset = r.dataset -WHERE r.dataset = m.headline_dataset - AND r.metric = m.headline_metric - AND (m.headline_batch_size IS NULL OR r.batch_size = m.headline_batch_size) - AND (m.headline_timestamps IS NULL OR r.timestamps = m.headline_timestamps); - -CREATE VIEW speed AS -SELECT model AS variant, rig AS machine, backend, quant, sample, - sample_s AS sample_duration_s, total_ms, xrt AS xrt_compute, - load_ms, mel_ms, encode_ms, decode_ms, engine_sha, - measurement_provenance, measured_on, thermal_gated -FROM perf; +SELECT a.variant, d.dataset, d.split, d.language, + a.quant, a.metric, a.err_pct, a.ci_lo, a.ci_hi, a.n_utts +FROM accuracy a +JOIN models m ON m.variant = a.variant +JOIN datasets d ON d.dataset_id = a.dataset_id +WHERE a.dataset_id = m.headline_dataset + AND a.metric = m.headline_metric + AND (m.headline_batch_size IS NULL OR a.batch_size = m.headline_batch_size) + AND (m.headline_timestamps IS NULL OR a.timestamps = m.headline_timestamps); """ def dataset_id(row: dict) -> str: - source, split, lang = row["dataset"], row["split"], row["language"] - if source == "fleurs" and split == "test": + dataset, split, lang = row["dataset"], row["split"], row["language"] + if dataset == "fleurs" and split == "test": return f"fleurs-{lang}" - if source == "librispeech": + if dataset == "librispeech": return f"librispeech-{split}" - return f"{source}-{split}-{lang}" - - -def load_records(directory: pathlib.Path) -> list[dict]: - return [json.loads(path.read_text()) - for path in sorted(directory.glob("*.json")) - if not path.name.startswith("_")] + return f"{dataset}-{split}-{lang}" -def build(directory: pathlib.Path, out: pathlib.Path) -> dict[str, int]: - records = load_records(directory) +def build(records: dict[str, dict], out: pathlib.Path) -> dict[str, int]: if not records: - raise RuntimeError(f"no catalog records in {directory}") + raise RuntimeError("no catalog records") - langs = {str(lang) for record in records for lang in record.get("languages", [])} - langs.update(row["language"] for record in records + langs = {str(lang) for record in records.values() for lang in record.get("languages", [])} + langs.update(row["language"] for record in records.values() for row in record.get("accuracy_benchmarks", [])) - langs.update(alias for record in records - for alias in (record.get("language_aliases") or {})) - langs.update(canonical for record in records - for canonical in (record.get("language_aliases") or {}).values()) - rigs = {row["machine"] for record in records - for row in record.get("speed_benchmarks", [])} + for record in records.values(): + for alias, canonical in (record.get("language_aliases") or {}).items(): + langs.update((alias, canonical)) + machines = {row["machine"] for record in records.values() + for row in record.get("speed_benchmarks", [])} out.parent.mkdir(parents=True, exist_ok=True) tmp = out.with_suffix(out.suffix + ".tmp") @@ -222,50 +186,45 @@ def build(directory: pathlib.Path, out: pathlib.Path) -> dict[str, int]: try: con.execute("PRAGMA foreign_keys = ON") con.executescript(SCHEMA) - con.executemany("INSERT INTO languages VALUES (?)", [ - (lang,) for lang in sorted(langs)]) - con.executemany("INSERT INTO rigs VALUES (?,?)", [ - (rig, rig.replace("-", " ").title()) for rig in sorted(rigs)]) + con.executemany("INSERT INTO languages VALUES (?)", [(lang,) for lang in sorted(langs)]) + con.executemany("INSERT INTO machines VALUES (?)", [(m,) for m in sorted(machines)]) datasets: dict[str, tuple[str, str, str]] = {} - for record in records: + for record in records.values(): for row in record.get("accuracy_benchmarks", []): datasets[dataset_id(row)] = (row["dataset"], row["split"], row["language"]) con.executemany("INSERT INTO datasets VALUES (?,?,?,?)", [ (key, *value) for key, value in sorted(datasets.items())]) - for record in records: - model = record["variant"] + for variant, record in records.items(): license_info = record["license"] headline = record.get("headline_benchmark") or {} - con.execute("INSERT INTO models VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", ( - model, record["family"], record["display_name"], record["params"], - record["params"] / 1e6, record.get("architecture_pattern"), + con.execute("INSERT INTO models VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", ( + variant, record["family"], record["display_name"], record["params"], + record.get("architecture_pattern"), license_info["spdx"], license_info["display"], record["upstream_repo"], - record["upstream_commit"], record.get("published_repo"), record.get("language_tag_form"), - record.get("encoder_window_s"), record["long_form_strategy"], - record.get("max_audio_s"), record.get("max_output_tokens"), + record["upstream_commit"], record.get("published_repo"), + record.get("language_tag_form"), record.get("encoder_window_s"), + record["long_form_strategy"], record.get("max_audio_s"), + record.get("max_output_tokens"), dataset_id(headline) if headline else None, headline.get("metric"), headline.get("batch_size"), headline.get("timestamps"))) con.executemany("INSERT INTO model_languages VALUES (?,?)", [ - (model, str(lang)) for lang in record.get("languages", [])]) + (variant, str(lang)) for lang in record.get("languages", [])]) con.executemany("INSERT INTO language_aliases VALUES (?,?,?)", [ - (model, alias, canonical) + (variant, alias, canonical) for alias, canonical in (record.get("language_aliases") or {}).items()]) con.executemany("INSERT INTO capabilities VALUES (?,?,?,?,?,?)", [ - (model, name, int(bool(cap.get("supported"))), + (variant, name, int(bool(cap.get("supported"))), None if cap.get("verified") is None else int(cap["verified"]), cap.get("note"), json.dumps(cap, separators=(",", ":"), sort_keys=True)) for name, cap in record.get("capabilities", {}).items()]) - con.executemany("INSERT INTO quants VALUES (?,?,?,?,?)", [ - (model, item["quant"], item["filename"], item["size_bytes"], - item["size_bytes"] / 1e9) for item in record.get("downloads", [])]) + con.executemany("INSERT INTO downloads VALUES (?,?,?,?)", [ + (variant, item["quant"], item["filename"], item["size_bytes"]) + for item in record.get("downloads", [])]) con.executemany( - "INSERT INTO results(dataset,model,quant,metric,err_pct,ci_lo,ci_hi,n_utts," - "batch_size,timestamps,engine_sha,measurement_provenance,measured_on," - "substitutions,deletions,insertions,empty_hyp,utts_over_50pct) " - "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ - (dataset_id(row), model, row["quant"], row["metric"], row["err_pct"], + "INSERT INTO accuracy VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ + (dataset_id(row), variant, row["quant"], row["metric"], row["err_pct"], (row.get("ci95") or [None, None])[0], (row.get("ci95") or [None, None])[1], row["n_utts"], row.get("batch_size"), row.get("timestamps"), row.get("engine_sha"), @@ -276,8 +235,8 @@ def build(directory: pathlib.Path, out: pathlib.Path) -> dict[str, int]: row.get("utts_over_50pct")) for row in record.get("accuracy_benchmarks", [])]) con.executemany( - "INSERT INTO perf VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ - (model, row["machine"], row["backend"], row["quant"], row["sample"], + "INSERT INTO speed VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ + (variant, row["machine"], row["backend"], row["quant"], row["sample"], row["sample_duration_s"], row.get("total_ms"), row["xrt_compute"], row.get("load_ms"), row.get("mel_ms"), row.get("encode_ms"), row.get("decode_ms"), row.get("engine_sha"), @@ -291,13 +250,12 @@ def build(directory: pathlib.Path, out: pathlib.Path) -> dict[str, int]: ("source", "catalog/*.json"), ("benchmark_profile", profile_id), ("rebuild", "uv run scripts/catalog/db.py (drops and recreates; never hand-edit)"), - ("dataset_scope", "all catalog accuracy rows"), ]) con.commit() counts = {table: con.execute(f"SELECT count(*) FROM {table}").fetchone()[0] for table in ("models", "languages", "model_languages", - "language_aliases", "capabilities", "quants", "datasets", - "results", "rigs", "perf")} + "language_aliases", "capabilities", "downloads", "datasets", + "accuracy", "machines", "speed")} finally: con.close() os.replace(tmp, out) @@ -306,23 +264,17 @@ def build(directory: pathlib.Path, out: pathlib.Path) -> dict[str, int]: def main() -> int: parser = argparse.ArgumentParser() - parser.add_argument("--dir", default=str(REPO / "catalog")) + parser.add_argument("--dir", default=str(common.CATALOG_DIR)) parser.add_argument("--out", default=str(DEFAULT_DB)) args = parser.parse_args() - out = pathlib.Path(args.out) - - if out == DEFAULT_DB and out.exists() and not ORIGINAL_DB.exists(): - shutil.copy2(out, ORIGINAL_DB) - print(f"preserved original database: {ORIGINAL_DB}") - try: - counts = build(pathlib.Path(args.dir), out) + counts = build(common.load_records(pathlib.Path(args.dir)), pathlib.Path(args.out)) except (OSError, ValueError, KeyError, sqlite3.Error, RuntimeError) as exc: print(f"error: {exc}", file=sys.stderr) return 1 for table, count in counts.items(): print(f" {table:20s} {count:>6}") - print(f"\n{out}") + print(f"\n{args.out}") return 0 diff --git a/scripts/catalog/format.py b/scripts/catalog/format.py new file mode 100755 index 00000000..90304de6 --- /dev/null +++ b/scripts/catalog/format.py @@ -0,0 +1,49 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# /// +"""Rewrite catalog records in the canonical layout, or check that they are. + +The layout rules live in common.dumps_record, which every catalog writer +already uses; this is the same serializer applied to files edited by hand. + + uv run scripts/catalog/format.py # rewrite every record + uv run scripts/catalog/format.py --check # exit 1 if any record differs +""" +from __future__ import annotations + +import argparse +import json +import pathlib +import sys + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +import common # noqa: E402 + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--check", action="store_true") + parser.add_argument("paths", nargs="*", type=pathlib.Path, + help="records to format (default: every catalog record)") + args = parser.parse_args() + paths = args.paths or sorted( + path for path in common.CATALOG_DIR.glob("*.json") if not path.name.startswith("_")) + stale = [] + for path in paths: + current = path.read_text() + rendered = common.dumps_record(json.loads(current)) + if current == rendered: + continue + stale.append(path) + if not args.check: + path.write_text(rendered) + verb = "need formatting" if args.check else "rewritten" + print(f"{len(paths)} record(s) checked; {len(stale)} {verb}") + for path in stale: + print(f" {path.relative_to(common.REPO)}") + return 1 if (args.check and stale) else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/catalog/ingest_perf.py b/scripts/catalog/ingest_perf.py index 3e070b6f..adf93ba4 100755 --- a/scripts/catalog/ingest_perf.py +++ b/scripts/catalog/ingest_perf.py @@ -36,18 +36,6 @@ REPORTS = common.REPO / "reports" / "perf" -# The bench driver derives a slug from the CPU model string; the catalog uses a -# shorter house name. One physical machine must land on exactly one catalog -# slug, so the mapping lives here rather than being inferred from the -# directory name -- reports/perf/amd-ryzen-7-4750u-pro is a stale hand-made -# directory holding reports whose own payload says the auto-detected slug. -MACHINE_ALIASES = { - "apple-m4": "m4", - "apple-m4-max": "m4-max", - "amd-ryzen-7-pro-4750u-with-radeon-graphics": "ryzen-4750u", - "amd-ryzen-7-4750u-pro": "ryzen-4750u", -} - # models//-.gguf -- the quant is the last dash-separated # field, and K-quants carry underscores (Q4_K_M) so the split is on "-". QUANT_RE = re.compile(r"-([A-Za-z0-9_]+)\.gguf$") @@ -79,12 +67,7 @@ def intent(report: dict) -> int: return 0 if report.get("publication") is True: return 1 - if "publication" in report: - return 2 # explicitly declared not publishable - stem = re.sub(r"-?20\d{6}t\d{6}z", "", (report.get("name") or "").lower()).rstrip("-") - if stem.endswith("publication"): - return 1 - return 2 + return 2 # an experiment, or a report from before the driver stamped intent def cells(report: dict) -> list[dict]: @@ -107,7 +90,7 @@ def mean(field: str): "_rank": (intent(report), ), "_profile": report.get("publication_profile"), "variant": variant, - "machine": MACHINE_ALIASES.get(report["machine"]["slug"], report["machine"]["slug"]), + "machine": profiles.canonical_machine(report["machine"]["slug"]), # The run's own `backend` is the runtime device name (MTL0), not # the canonical backend; the driver records that at the top level. "backend": (report.get("backend") or run.get("backend", "")).lower(), @@ -224,7 +207,7 @@ def main() -> int: f"{len({key[1] for key in measured})} machine slug(s)") by_intent = collections.Counter(row["_rank"][0] for row in measured.values()) labels = {0: "profile-stamped publication run", - 1: "manual or legacy publication run", + 1: "manual publication run (--publication without --profile)", 2: "experiment or baseline only"} for rank in sorted(by_intent): print(f" {by_intent[rank]:5d} {labels[rank]}") diff --git a/scripts/catalog/prune_benchmarks.py b/scripts/catalog/prune_benchmarks.py deleted file mode 100755 index 9347a254..00000000 --- a/scripts/catalog/prune_benchmarks.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env -S uv run --script -# /// script -# requires-python = ">=3.11" -# /// -"""Remove benchmark rows outside the selected publication profile. - -The catalog is intentionally not a run archive. This migration keeps one row -per required cell, updates a stale headline pointer to the equivalent profile -recipe, and removes everything else. It never invents a missing measurement. -""" -from __future__ import annotations - -import argparse -import pathlib -import sys - -sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) -import common # noqa: E402 -import profiles # noqa: E402 - - -def choose_headline(record: dict, expected: list[dict]) -> dict | None: - if not expected: - return None - current = record.get("headline_benchmark") or {} - if current and common.headline_rows(record): - return current - # Preserve the editorial dataset/language choice while moving it onto the - # profile recipe. If it is no longer eligible, prefer LibriSpeech, then the - # first profile cell (normally the model's first FLEURS language). - candidates = [cell for cell in expected - if all(cell.get(key) == current.get(key) - for key in ("dataset", "split", "language", "metric"))] - if not candidates: - candidates = [cell for cell in expected - if cell["dataset"] == "librispeech"] - cell = (candidates or expected)[0] - return {key: cell[key] for key in common.HEADLINE_KEYS} - - -def dedupe_profile_rows(rows: list[dict], expected_keys: set[tuple], kind: str - ) -> tuple[list[dict], int, int]: - kept: list[dict] = [] - by_key: dict[tuple, int] = {} - extra = duplicate = 0 - for row in rows: - key = profiles.cell_key(row, kind) - if key not in expected_keys: - extra += 1 - continue - if key not in by_key: - by_key[key] = len(kept) - kept.append(row) - continue - duplicate += 1 - previous = kept[by_key[key]] - # Prefer a reproducible measurement over an unattributed legacy row. - previous_valid = bool(previous.get("engine_sha")) and ( - kind != "speed" or previous.get("total_ms") is not None) - row_valid = bool(row.get("engine_sha")) and ( - kind != "speed" or row.get("total_ms") is not None) - if row_valid and not previous_valid: - kept[by_key[key]] = row - return kept, extra, duplicate - - -def main() -> int: - parser = argparse.ArgumentParser() - parser.add_argument("--profile", default=None) - parser.add_argument("--models", default="") - parser.add_argument("--write", action="store_true", - help="apply the migration (default: report only)") - args = parser.parse_args() - - profile_id, profile = profiles.load_profile(args.profile) - records = common.load_records() - selected = {item.strip() for item in args.models.split(",") if item.strip()} - unknown = selected - records.keys() - if unknown: - print(f"unknown catalog variant(s): {', '.join(sorted(unknown))}", file=sys.stderr) - return 2 - - total_extra = total_duplicate = headlines = changed_records = 0 - for variant, record in records.items(): - if selected and variant not in selected: - continue - changed = False - expected_accuracy = profiles.apply_exceptions( - record, "accuracy", profiles.expected_accuracy(record, profile)) - expected_cores = {profiles.accuracy_core_key(cell) - for cell in expected_accuracy} - # Retain honest pre-profile rows for a required dataset/language/quant - # even when the surviving publication did not record the standardized - # batch/timestamp recipe. - expected_accuracy += [ - row for row in record.get("accuracy_benchmarks", []) - if row.get("measurement_provenance") == "legacy-published" - and profiles.accuracy_core_key(row) in expected_cores - ] - expected_speed = profiles.apply_exceptions( - record, "speed", profiles.expected_speed(record, profile)) - for kind, section, expected in ( - ("accuracy", "accuracy_benchmarks", expected_accuracy), - ("speed", "speed_benchmarks", expected_speed), - ): - keys = {profiles.cell_key(cell, kind) for cell in expected} - kept, extra, duplicate = dedupe_profile_rows( - record.get(section, []), keys, kind) - if extra or duplicate: - record[section] = kept - total_extra += extra - total_duplicate += duplicate - changed = True - headline = choose_headline(record, expected_accuracy) - if record.get("headline_benchmark") != headline: - record["headline_benchmark"] = headline - headlines += 1 - changed = True - if changed: - changed_records += 1 - print(f" {variant}: profile rows={len(record['accuracy_benchmarks'])} accuracy, " - f"{len(record['speed_benchmarks'])} speed") - if args.write: - common.write_record(common.CATALOG_DIR / f"{variant}.json", record) - - print(f"profile {profile_id}: {total_extra} extra and {total_duplicate} duplicate " - f"row(s) removed across {changed_records} record(s); " - f"{headlines} headline pointer(s) updated") - if not args.write: - print("dry run: pass --write to apply") - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/catalog/render.py b/scripts/catalog/render.py index 2de6d488..0124a45f 100755 --- a/scripts/catalog/render.py +++ b/scripts/catalog/render.py @@ -8,7 +8,7 @@ catalog already owns. Rather than generate whole files, this rewrites only the regions a doc explicitly delegates: - + | Quantization | Download | Size | WER (LibriSpeech test-clean) | ... @@ -19,12 +19,6 @@ uv run scripts/catalog/render.py # rewrite marked regions uv run scripts/catalog/render.py --check # fail if any is stale - uv run scripts/catalog/render.py --adopt # wrap existing tables - -`--adopt` is a one-time migration: it finds a download table that is already -correct, wraps it in a marker, and records the units convention that table -uses so adoption changes no published string. Normalising conventions is then -a separate, deliberate edit to the marker. """ from __future__ import annotations @@ -60,25 +54,12 @@ def as_bool(value: str | None, default: bool) -> bool: return value.lower() in ("1", "true", "yes") -def fmt_attrs(attrs: dict[str, object]) -> str: - out = [] - for key, value in attrs.items(): - if isinstance(value, bool): - value = "true" if value else "false" - value = str(value) - out.append(f'{key}="{value}"' if " " in value or "," in value else f"{key}={value}") - return " ".join(out) - - # -------------------------------------------------------------------------- # blocks def block_downloads(record: dict, attrs: dict[str, str]) -> list[str]: """The Download table: one row per published GGUF, plus the headline metric.""" - units = attrs.get("units", "dec") - gb_dp = int(attrs.get("gb_dp", 2)) - mb_only = as_bool(attrs.get("mb_only"), False) want_metric = as_bool(attrs.get("metric"), True) rows_by_quant = common.headline_rows(record) if want_metric else {} @@ -100,7 +81,7 @@ def block_downloads(record: dict, attrs: dict[str, str]) -> list[str]: if not url: raise RenderError("published_repo is null, so downloads have no URL") cells = [item["quant"], f"[{item['filename']}]({url})", - common.fmt_size(item["size_bytes"], units, gb_dp, mb_only)] + common.fmt_size(item["size_bytes"])] if want_metric: cells.append(common.fmt_err(rows_by_quant.get(item["quant"]))) body.append(cells) @@ -208,90 +189,6 @@ def rewrite(path: pathlib.Path, records: dict[str, dict]) -> tuple[str, list[str return "\n".join(out) + "\n", errors -# -------------------------------------------------------------------------- -# adoption - - -DOWNLOAD_HEADER = re.compile(r"^\|\s*Quantization\s*\|\s*Download\s*\|\s*Size\s*\|(.*)$") -DOWNLOAD_ROW = re.compile(r"^\|\s*(\S+)\s*\|\s*\[[^\]]+\]\([^)]+\)\s*\|\s*([\d.]+\s*[GM]i?B)\s*\|") - - -def detect_units(record: dict, published: dict[str, str]) -> dict[str, object] | None: - """Which size convention reproduces this table's existing strings.""" - sizes = common.downloads(record) - best, score = None, -1 - for convention in common.size_conventions(): - hit = sum(1 for quant, text in published.items() - if quant in sizes - and common.fmt_size(sizes[quant]["size_bytes"], **convention) == text) - if hit > score: - best, score = convention, hit - return best if score == len(published) else None - - -def adopt(path: pathlib.Path, records: dict[str, dict], - units: dict | None = None) -> tuple[str, str]: - """Wrap an existing Download table in a marker. - - With `units` unset the table must already be self-consistent, and adoption - changes no published string. Passing a convention instead adopts on the - house standard and lets the next render correct whatever was stale. - """ - record = records.get(path.stem) - if record is None: - return "", "no catalog record" - lines = path.read_text().splitlines() - if any(OPEN.match(line) for line in lines): - return "", "already has markers" - - start = next((i for i, line in enumerate(lines) if DOWNLOAD_HEADER.match(line)), None) - if start is None: - return "", "no Download table" - tail = DOWNLOAD_HEADER.match(lines[start]).group(1) - end = start + 2 - published = {} - while end < len(lines) and lines[end].startswith("|"): - row = DOWNLOAD_ROW.match(lines[end]) - if not row: - return "", "download row this renderer cannot reproduce" - published[row.group(1)] = re.sub(r"\s+", " ", row.group(2)).strip() - end += 1 - - if {d["quant"] for d in record.get("downloads", [])} != set(published): - return "", "table and catalog list different quants" - convention = detect_units(record, published) if units is None else dict(units) - if convention is None: - return "", "sizes match no single units convention (stale or hand-edited)" - covered = set(common.headline_rows(record)) - if covered and not set(published) <= covered: - return "", ("headline_benchmark covers only " - + ", ".join(sorted(covered)) + "; table publishes more") - - attrs: dict[str, object] = dict(convention) - columns = [c.strip() for c in tail.split("|") if c.strip()] - if not columns: - attrs["metric"] = False - else: - head = columns[0] - if len(columns) > 1: - return "", "second metric column is not supported yet" - label = re.match(r"^(\w+)\s*\((.+)\)$", head) - if not label: - return "", f"cannot parse metric header {head!r}" - attrs["metric_name"], attrs["label"] = label.group(1), label.group(2) - target = common.headline(record) - if not target: - return "", "headline_benchmark is null" - if attrs["metric_name"] == target["metric"].upper(): - del attrs["metric_name"] - if attrs["label"] == common.headline_label(record): - del attrs["label"] - - body = lines[:start] + [f""] \ - + lines[start:end] + [""] + lines[end:] - return "\n".join(body) + "\n", "" - - # -------------------------------------------------------------------------- @@ -299,12 +196,6 @@ def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--check", action="store_true", help="report stale regions and exit non-zero; write nothing") - parser.add_argument("--adopt", action="store_true", - help="one-time: wrap existing correct tables in markers") - parser.add_argument("--adopt-units", choices=("dec", "bin"), - help="adopt on this units convention instead of " - "detecting the table's own; stale sizes are then " - "corrected by the next render") parser.add_argument("--docs", default=str(common.DOCS_DIR)) parser.add_argument("paths", nargs="*", help="limit to these files") args = parser.parse_args() @@ -313,22 +204,6 @@ def main() -> int: docs = ([pathlib.Path(p) for p in args.paths] or sorted(pathlib.Path(args.docs).glob("*.md"))) - if args.adopt: - units = {"units": args.adopt_units, "gb_dp": 2, "mb_only": False} \ - if args.adopt_units else None - adopted, skipped = 0, [] - for path in docs: - text, why = adopt(path, records, units) - if why: - skipped.append((path.name, why)) - continue - path.write_text(text) - adopted += 1 - print(f"adopted {adopted} download table(s)") - for name, why in skipped: - print(f" skipped {name}: {why}") - return 0 - stale, errors, rendered = [], [], 0 for path in docs: current = path.read_text() diff --git a/scripts/catalog/sync_capabilities.py b/scripts/catalog/sync_capabilities.py index 92ad12ea..89e14ea7 100755 --- a/scripts/catalog/sync_capabilities.py +++ b/scripts/catalog/sync_capabilities.py @@ -3,23 +3,13 @@ # requires-python = ">=3.11" # dependencies = ["gguf", "huggingface-hub", "requests"] # /// -"""Keep a record's `capabilities` block and its GGUF's KVs in agreement. +"""Read a record's `capabilities` block back out of its GGUF's KVs. -Two directions: - - (default) GGUF -> catalog. Read the truth back out of the file. - --repair catalog -> GGUF. Rewrite a local GGUF so its stt.capability.* - KVs declare what the record says, dropping any key spelled in a - way no loader reads. - -`--repair` exists because absence is not falsity. read_capability_bool() -returns OK and leaves the field ALONE when a key is missing, so a missing KV -inherits the family default -- and granite's default is deliberately -`supports_translate = true` so each variant's GGUF can lower it. The -plus -GGUF spelled that key `stt.capability.translation`, the lowering never -happened, and a model that does not translate has been advertising that it -does. Declaring every capability explicitly is what makes the file mean what -it says regardless of the loader's defaults. +The GGUF is the truth and the catalog follows it. If the file is wrong, the +fix is a converter change plus a re-export, never an edit to the record: +absence is not falsity, since read_capability_bool() leaves a field alone +when its KV is missing and the family default then applies, so every +converter must declare every capability explicitly. Hand-writing this block is how moss-transcribe-diarize shipped as diarize:false and how whisper-large-v3 came to claim translate:false while its @@ -45,14 +35,12 @@ uv run scripts/catalog/sync_capabilities.py --dry-run uv run scripts/catalog/sync_capabilities.py --local-only uv run scripts/catalog/sync_capabilities.py - uv run scripts/catalog/sync_capabilities.py --repair [...] + uv run scripts/catalog/sync_capabilities.py --check # exit 1 on any disagreement """ from __future__ import annotations import argparse import collections -import json -import os import pathlib import re import sys @@ -211,281 +199,16 @@ def carry(name: str, supported: bool, extra: dict | None = None) -> dict: return caps -# -------------------------------------------------------------------------- -# repair: catalog -> GGUF - - -# Where each catalog capability lands as a KV. `timestamps` is deliberately -# absent: the ceiling is a family invariant in C++, not a per-file claim, and -# granite's per-variant lowering rides on word_timestamps instead. -REPAIR_KEYS = { - "translate": "stt.capability.translate", - "lang_detect": "stt.capability.lang_detect", - "streaming": "stt.capability.streaming", - "diarize": "stt.capability.speaker_diarization", -} -# Spellings that were shipped but that no loader reads. Dropped on repair so -# the file does not carry two contradictory answers. -DEAD_KEYS = {"stt.capability.translation"} - - -def identity_kvs(record: dict) -> dict[str, object]: - """The general.* block a fresh conversion would emit for this record. - - Files converted before add_general_identity() landed in - scripts/lib/gguf_common.py carry a bare slug instead of an identity, so - an inspector cannot say who made the model or under what licence. Only - name / basename / author / licence text come from the record's `identity` - block; the rest is derived, because a second copy of a fact the catalog - already holds is a second thing to drift. - - `general.size_label` is carried rather than computed from `params`: most - converters bucket the parameter count, but the parakeet profiles hardcode - a marketing label ("0.6B" for a 638M-parameter nemotron), so a derived - value would not be what a fresh conversion writes. - - `general.languages` is deliberately NOT derived here: a file's advertised - language list may narrow the record's on purpose (nemotron ships 40 - locales in its prompt table and advertises the 32 it can actually - transcribe), so the record is the wrong source and the file already - carries the right answer. - """ - ident = record.get("identity") - if not ident: - return {} - org, _, _ = record["upstream_repo"].partition("/") - kvs: dict[str, object] = { - "general.name": ident["name"], - "general.basename": ident["basename"], - "general.author": ident["author"], - "general.organization": org, - "general.license": record["license"]["spdx"], - "general.repo_url": f"https://huggingface.co/{record['upstream_repo']}", - } - if ident.get("size_label"): - kvs["general.size_label"] = ident["size_label"] - if ident.get("license_name"): - kvs["general.license.name"] = ident["license_name"] - if ident.get("license_link"): - kvs["general.license.link"] = ident["license_link"] - return kvs - - -def repair_file(path: pathlib.Path, record: dict, out: pathlib.Path) -> dict: - """Copy a GGUF, forcing its capability KVs to match the record. - - Tensor data is passed through untouched -- this changes what the file - says about itself, never what it computes. - - Missing `general.*` identity keys are added too, written BEFORE the copy - so they land ahead of the bulk tokenizer arrays: appending them would push - a key past the trailer and cost a header range-read the very thing the - trailer layout buys. An identity key the file already carries is left - exactly as it is and reported, never overwritten -- the file was written - by its converter and the catalog is the newcomer here. - """ - from gguf import GGUFReader, GGUFValueType - - sys.path.insert(0, str(common.REPO / "scripts")) - from lib.gguf_common import gguf_writer # noqa: PLC0415 - - reader = GGUFReader(str(path)) - arch = str(reader.fields["general.architecture"].contents()) - writer = gguf_writer(str(out), arch) - - want = {REPAIR_KEYS[name]: bool(block.get("supported")) - for name, block in record["capabilities"].items() - if name in REPAIR_KEYS} - changed = {} - - for key, value in identity_kvs(record).items(): - if key not in reader.fields: - writer.add_string(key, value) - changed[key] = f"added = {value!r}" - elif str(reader.fields[key].contents()) != str(value): - changed[key] = (f"KEPT file value {reader.fields[key].contents()!r} " - f"(catalog says {value!r})") - - for key, field in reader.fields.items(): - if key.startswith("GGUF.") or key == "general.architecture": - continue - if key in DEAD_KEYS: - changed[key] = "removed (read by no loader)" - continue - if key in want: - if bool(field.contents()) != want[key]: - changed[key] = f"{bool(field.contents())} -> {want[key]}" - writer.add_bool(key, want[key]) - want.pop(key) - continue - vtype = field.types[0] - sub = field.types[1] if len(field.types) > 1 else None - writer.add_key_value(key, field.contents(), - vtype if vtype != GGUFValueType.ARRAY else vtype, - sub_type=sub) - for key, value in want.items(): # capabilities the file never stated - writer.add_bool(key, value) - changed[key] = f"added = {value}" - - for tensor in reader.tensors: - writer.add_tensor(tensor.name, tensor.data, raw_dtype=tensor.tensor_type) - writer.write_header_to_file() - writer.write_kv_data_to_file() - writer.write_tensors_to_file() - writer.close() - return changed - - -def published_header(record: dict, filename: str): - """A GGUFReader over the published file's header, range-fetched. - - Same trick as open_gguf(), but for one named file rather than the - cheapest one, because the guard below has to compare like with like. - """ - from gguf import GGUFReader - import requests - from huggingface_hub import get_hf_file_metadata, hf_hub_url - from huggingface_hub.utils import build_hf_headers - - url = hf_hub_url(record["published_repo"], filename) - total = get_hf_file_metadata(url).size - headers = build_hf_headers() - headers["Range"] = f"bytes=0-{min(24 * 1024 * 1024, total) - 1}" - response = requests.get(url, headers=headers, timeout=300) - response.raise_for_status() - with tempfile.NamedTemporaryFile(suffix=".gguf", delete=False) as handle: - tmp = pathlib.Path(handle.name) - handle.write(response.content) - handle.truncate(total) - try: - return GGUFReader(str(tmp)) - finally: - tmp.unlink(missing_ok=True) - - -def divergence(local, published, intended: set[str]) -> list[str]: - """Ways the local file differs from the published one beyond `intended`. - - A repair rewrites a local file and the result gets uploaded, so the local - file is only a safe base if it IS what is published. A stale mirror looks - identical to a repairable file -- same name, same quant, plausible KVs -- - and silently republishing it reverts whatever the published file gained - since. That is not hypothetical: a stale granite-nar mirror here carried - an older upstream snapshot (ctc_bpe 100353 vs the published 100352) and - lacked stt.granite_nar.encoder.bpe_blank_id, so repairing and uploading it - would have published different weights under an unchanged filename. - - Tensor shapes and dtypes are compared as well as KVs, since a different - build is the case that actually matters and it shows up there first. - """ - problems = [] - lt = {t.name: (tuple(int(x) for x in t.shape), t.tensor_type) for t in local.tensors} - pt = {t.name: (tuple(int(x) for x in t.shape), t.tensor_type) for t in published.tensors} - for name in sorted(pt.keys() - lt.keys()): - problems.append(f"tensor {name} missing locally") - for name in sorted(lt.keys() - pt.keys()): - problems.append(f"tensor {name} not in the published file") - for name in sorted(pt.keys() & lt.keys()): - if pt[name] != lt[name]: - problems.append(f"tensor {name}: published {pt[name][0]} " - f"{pt[name][1].name}, local {lt[name][0]} {lt[name][1].name}") - for key in sorted(set(published.fields) | set(local.fields)): - if key.startswith("GGUF.") or key in intended: - continue - here = local.fields[key].contents() if key in local.fields else None - there = published.fields[key].contents() if key in published.fields else None - if str(here)[:400] != str(there)[:400]: - problems.append(f"{key}: published {str(there)[:60]!r}, local {str(here)[:60]!r}") - return problems - - -def run_repair(variants: list[str], dry_run: bool, check_published: bool = True) -> int: - records = common.load_records() - names = variants or sorted(records) - touched, refused = 0, 0 - for variant in names: - record = records.get(variant) - if record is None: - print(f" skip {variant}: no catalog record") - continue - for item in record["downloads"]: - path = common.REPO / "models" / variant / item["filename"] - if not path.exists(): - alt = next((p for p in (common.REPO / "models").glob(f"*/{item['filename']}")), None) - path = alt if alt else path - if not path.exists(): - print(f" skip {variant}/{item['quant']}: {item['filename']} not on disk") - continue - intended = set(REPAIR_KEYS.values()) | DEAD_KEYS | set(identity_kvs(record)) - if check_published and record.get("published_repo"): - try: - remote = published_header(record, item["filename"]) - except Exception as exc: # noqa: BLE001 - print(f" refuse {variant}/{item['quant']}: cannot read the " - f"published header to compare ({type(exc).__name__}: " - f"{str(exc)[:60]}); pass --skip-published-check to " - f"repair without the comparison") - refused += 1 - continue - from gguf import GGUFReader - problems = divergence(GGUFReader(str(path)), remote, intended) - if problems: - print(f" REFUSE {variant}/{item['quant']}: local file is not " - f"what is published -- repairing it would republish a " - f"different build:") - for line in problems[:6]: - print(f" {line}") - if len(problems) > 6: - print(f" ... and {len(problems) - 6} more") - print(f" re-download from {record['published_repo']} " - f"first, or pass --skip-published-check if the local " - f"file is deliberately newer") - refused += 1 - continue - out = path.with_suffix(".gguf.repaired") - if dry_run: - from gguf import GGUFReader - kvs = read_kvs(GGUFReader(str(path))) - want = {REPAIR_KEYS[n]: bool(b.get("supported")) - for n, b in record["capabilities"].items() if n in REPAIR_KEYS} - diff = {k: f"{kvs.get(k)} -> {v}" for k, v in want.items() if kvs.get(k) != v} - diff.update({k: "removed" for k in kvs if k in DEAD_KEYS}) - fields = GGUFReader(str(path)).fields - for key, value in identity_kvs(record).items(): - if key not in fields: - diff[key] = f"added = {value!r}" - elif str(fields[key].contents()) != str(value): - diff[key] = (f"KEPT file value {fields[key].contents()!r} " - f"(catalog says {value!r})") - print(f" {variant}/{item['quant']}: {diff or 'already correct'}") - continue - changed = repair_file(path, record, out) - os.replace(out, path) - touched += 1 - print(f" {variant}/{item['quant']}: {changed or 'no change'}") - print(f"\n{touched} file(s) rewritten" + (" (dry run)" if dry_run else "") - + (f", {refused} refused" if refused else "")) - return 1 if refused else 0 - - def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--dry-run", action="store_true") parser.add_argument("--local-only", action="store_true", help="skip the hub fallback") - parser.add_argument("--repair", nargs="*", metavar="VARIANT", - help="rewrite local GGUFs so their capability KVs " - "declare what the catalog record says (all " - "variants when given no names)") - parser.add_argument("--skip-published-check", action="store_true", - help="repair even when the local file diverges from " - "the published one. Only for a local file that is " - "deliberately newer than the Hub.") + parser.add_argument("--check", action="store_true", + help="write nothing; exit 1 if any record disagrees " + "with its GGUF") args = parser.parse_args() - - if args.repair is not None: - return run_repair(args.repair, args.dry_run, - check_published=not args.skip_published_check) + args.dry_run = args.dry_run or args.check changed, unreachable, sources = [], [], collections.Counter() for variant, record in common.load_records().items(): @@ -522,7 +245,7 @@ def main() -> int: print(f" {variant:42s} {error}") if args.dry_run: print("\ndry run: nothing written") - return 0 + return 1 if (args.check and changed) else 0 if __name__ == "__main__": diff --git a/scripts/catalog/sync_hf_cards.py b/scripts/catalog/sync_hf_cards.py deleted file mode 100755 index 9024cd52..00000000 --- a/scripts/catalog/sync_hf_cards.py +++ /dev/null @@ -1,230 +0,0 @@ -#!/usr/bin/env -S uv run --script -# /// script -# requires-python = ">=3.11" -# dependencies = ["ruamel.yaml>=0.18"] -# /// -"""Populate committed Hugging Face YAML specs from the model catalog. - -The YAML files remain complete, standalone inputs to hf_cards/generate.py. -This command fills mechanical fields that are absent from an editorial YAML -skeleton. Pass --refresh to deliberately replace those fields with current -catalog values; without it, already-published YAML values are preserved. -Fields listed under `catalog_sync.preserve` remain hand-maintained even during -a refresh. - - uv run scripts/catalog/sync_hf_cards.py --write - uv run scripts/catalog/sync_hf_cards.py --write --refresh --models whisper-tiny - uv run scripts/catalog/sync_hf_cards.py --check - uv run scripts/catalog/sync_hf_cards.py --check-consistency -""" -from __future__ import annotations - -import argparse -import copy -import pathlib -import sys - -from ruamel.yaml import YAML -from ruamel.yaml.comments import CommentedMap - -HERE = pathlib.Path(__file__).resolve().parent -REPO = HERE.parents[1] -sys.path.insert(0, str(HERE)) -import cards # noqa: E402 - -CARD_DIR = REPO / "scripts" / "hf_cards" -CATALOG_FIELDS = { - "hf_repo", "target_repo", "upstream_commit", "license", "license_display", - "languages", "capabilities", "perf", "quants", -} - - -def yaml_parser() -> YAML: - parser = YAML() - parser.preserve_quotes = True - parser.width = 1000 - parser.indent(mapping=2, sequence=4, offset=2) - return parser - - -def insert_before(doc: CommentedMap, before: str, key: str, value) -> None: - keys = list(doc) - index = keys.index(before) if before in keys else len(keys) - doc.insert(index, key, copy.deepcopy(value)) - - -def merge_quant_extras(derived: list[dict], existing: object) -> list[dict]: - """Keep hand-written extra columns when refreshing catalog columns.""" - if not isinstance(existing, list): - return derived - by_name = { - item.get("name"): item for item in existing - if isinstance(item, dict) and item.get("name") - } - owned = {"name", "filename", "size", "wer"} - out = [] - for item in derived: - merged = dict(item) - for key, value in by_name.get(item["name"], {}).items(): - if key not in owned: - merged[key] = copy.deepcopy(value) - out.append(merged) - return out - - -def set_field(doc: CommentedMap, key: str, value, before: str, refresh: bool) -> bool: - if key in doc and not refresh: - return False - if key in doc: - if doc[key] == value: - return False - doc[key] = copy.deepcopy(value) - else: - insert_before(doc, before, key, value) - return True - - -def preserved_fields(doc: CommentedMap) -> set[str]: - """Catalog-owned fields this card deliberately keeps hand-maintained.""" - preserve = set((doc.get("catalog_sync") or {}).get("preserve", [])) - unknown = preserve - CATALOG_FIELDS - if unknown: - raise ValueError(f"unknown catalog_sync.preserve fields: {sorted(unknown)}") - return preserve - - -def consistency_errors(doc: CommentedMap, record: dict) -> list[str]: - """Catalog-owned fields whose committed value has drifted from the record. - - `--check` only proves every mechanical field is present. This proves the - fields the card does NOT list under `catalog_sync.preserve` still agree - with the catalog. Extra hand-written quant columns are presentation, not - drift, so only the catalog-owned columns are compared. - """ - preserve = preserved_fields(doc) - derived = cards.derive_spec(record, doc) - errors = [] - for key in sorted(CATALOG_FIELDS - {"quants"}): - if key in preserve or key not in doc: - continue - if doc[key] != derived.get(key): - errors.append(f"{key}: {doc[key]!r} != catalog {derived.get(key)!r}") - if "quants" not in preserve: - by_name = {item.get("name"): item for item in derived.get("quants", [])} - for item in doc.get("quants") or []: - current = by_name.get(item.get("name")) - if current is None: - errors.append(f"quants: {item.get('name')!r} is not in the catalog") - continue - for column in ("filename", "size", "wer"): - if column in current and item.get(column) != current[column]: - errors.append(f"quants[{item.get('name')}].{column}: " - f"{item.get(column)!r} != catalog {current[column]!r}") - return errors - - -def sync_document(doc: CommentedMap, record: dict, refresh: bool) -> bool: - """Fill or refresh catalog-owned fields; return whether values changed.""" - preserve = preserved_fields(doc) - derived = cards.derive_spec(record, doc) - derived["quants"] = merge_quant_extras(derived["quants"], doc.get("quants")) - changed = False - for key, before in ( - ("hf_repo", "transcribe_docs_url"), - ("target_repo", "transcribe_docs_url"), - ("upstream_commit", "pin_date"), - ("license", "pipeline_tag"), - ("license_display", "pipeline_tag"), - ("languages", "tags"), - ("capabilities", "wer"), - ("perf", "wer"), - ("quants", "__end__"), - ): - if key not in preserve: - changed |= set_field(doc, key, derived[key], before, refresh) - - # The dataset label is catalog-derived only when the editorial spec has - # not provided more precise display copy. Notes and extra datasets remain - # hand-written in either mode. - if derived.get("wer"): - if "wer" not in doc: - doc["wer"] = CommentedMap() - changed = True - if "source" not in doc["wer"]: - doc["wer"].insert(0, "source", derived["wer"]["source"]) - changed = True - return changed - - -def main() -> int: - ap = argparse.ArgumentParser(description=__doc__.splitlines()[0]) - mode = ap.add_mutually_exclusive_group(required=True) - mode.add_argument("--write", action="store_true", help="update YAML specs in place") - mode.add_argument("--check", action="store_true", help="fail if required fields are absent") - mode.add_argument("--check-consistency", action="store_true", - help="fail if a non-preserved catalog-owned field disagrees " - "with the catalog") - ap.add_argument("--refresh", action="store_true", - help="replace existing mechanical fields (requires --write)") - ap.add_argument("--models", default="", help="comma-separated variants (default: all)") - args = ap.parse_args() - if args.refresh and not args.write: - ap.error("--refresh requires --write") - - selected = {item.strip() for item in args.models.split(",") if item.strip()} - records = cards.common.load_records() - unknown = selected - records.keys() - if unknown: - print(f"unknown catalog variant(s): {', '.join(sorted(unknown))}", file=sys.stderr) - return 2 - - parser = yaml_parser() - changed_paths = [] - drifted = 0 - names = sorted(selected or records.keys()) - for name in names: - path = CARD_DIR / f"{name}.yaml" - if not path.exists(): - print(f"FAIL {name}: no editorial YAML skeleton at {path.relative_to(REPO)}", - file=sys.stderr) - return 1 - doc = parser.load(path.read_text()) or CommentedMap() - try: - if args.check_consistency: - errors = consistency_errors(doc, records[name]) - else: - changed = sync_document(doc, records[name], args.refresh) - except ValueError as exc: - print(f"FAIL {name}: {exc}", file=sys.stderr) - return 1 - - if args.check_consistency: - if errors: - drifted += 1 - print(f"DRIFT {path.relative_to(REPO)}") - for error in errors: - print(f" {error}") - continue - - if not changed: - continue - changed_paths.append(path) - if args.write: - with path.open("w") as stream: - parser.dump(doc, stream) - print(f"updated {path.relative_to(REPO)}") - else: - print(f"INCOMPLETE {path.relative_to(REPO)}") - - if args.check_consistency: - print(f"HF card consistency: {len(names)} checked, " - f"{len(names) - drifted} agree with the catalog, {drifted} drifted") - return 1 if drifted else 0 - - action = "updated" if args.write else "incomplete" - print(f"HF card sync: {len(names)} checked, {len(changed_paths)} {action}") - return 1 if changed_paths and args.check else 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/scripts/hf_cards/README.md b/scripts/hf_cards/README.md new file mode 100644 index 00000000..564556b8 --- /dev/null +++ b/scripts/hf_cards/README.md @@ -0,0 +1,15 @@ +# HF cards + +`.yaml` is prose only: summary, tags, validation pin, notes. Every +number, repo, licence, language, and capability comes from +`catalog/.json`; `generate.py` refuses a spec that states one. + +```bash +uv run scripts/hf_cards/check_release.py # pin + validation date +uv run scripts/hf_cards/generate.py scripts/hf_cards/.yaml + # -> models//README.md +hf upload handy-computer/-gguf models/ . --repo-type model +``` + +Re-render and re-upload whenever the catalog record changes (new WER sweep, +re-bench, capability fix). Repos stay private until a maintainer flips them. diff --git a/scripts/hf_cards/breeze-asr-25.yaml b/scripts/hf_cards/breeze-asr-25.yaml index 8eb7047e..bc9a3aff 100644 --- a/scripts/hf_cards/breeze-asr-25.yaml +++ b/scripts/hf_cards/breeze-asr-25.yaml @@ -1,14 +1,10 @@ # Spec for the HF README of handy-computer/Breeze-ASR-25-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: MediaTek-Research/Breeze-ASR-25 -target_repo: handy-computer/Breeze-ASR-25-gguf # Pure fine-tune of whisper-large-v2 (identical architecture), so the model # page points at the whisper-large-v2 doc rather than a Breeze-specific one. transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large-v2.md -# Pinned at download (the snapshot the GGUFs were converted from). -upstream_commit: cffe7ccb404d025296a00758d0a33468bec3a9d0 pin_date: 2026-06-29 validation: @@ -16,23 +12,7 @@ validation: commit: 3848875 date: 2026-06-29 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - languages - - quants - -# Breeze-ASR-25 is a Whisper-large-v2 fine-tune. It inherits Whisper's -# 99-language tokenizer, but MediaTek optimized and validated it for -# Taiwanese Mandarin (Traditional Chinese) and English only, so we advertise -# just those two — listing all 99 would overclaim coverage the fine-tune -# does not target. -languages: - - zh - - en tags: - gguf - transcribe.cpp @@ -58,33 +38,11 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. Same Whisper -# code path as whisper-large-v2 (the library exposes translation, language -# detection and segment timestamps for any Whisper GGUF), though this -# fine-tune is specialized for zh/en transcription. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, published raw as rtf_ -# in the metadata block. Breeze-ASR-25 is byte-for-byte the same architecture -# and tensor shapes as Whisper large-v2 (1.5B params, 32+32 layers, -# d_model 1280); RTF is a function of shapes/quant/backend, not weight values, -# so these are inherited verbatim from whisper-large-v2 rather than re-benched. -perf: - m4-max: - metal: 23.7 - cpu: 1.5 - ryzen-4750u: - vulkan: 2.1 - cpu: 0.6 - wer: source: LibriSpeech test-clean metadata_key: librispeech_test_clean source2: FLEURS zh + metadata_key2: fleurs_zh notes: | Two benchmarks, both full test splits, decoded on a Modal L40S with the transcribe.cpp default recipe (greedy + temperature fallback, @@ -112,35 +70,3 @@ wer: q6_k: 8.12 q5_k_m: 8.12 q4_k_m: 8.08 - -quants: - - name: BF16 - filename: Breeze-ASR-25-BF16.gguf - size: 3.10 GB - wer: 2.29% - wer2: 8.12% - - name: F16 - filename: Breeze-ASR-25-F16.gguf - size: 3.11 GB - wer: 2.29% - wer2: 8.11% - - name: Q8_0 - filename: Breeze-ASR-25-Q8_0.gguf - size: 1.67 GB - wer: 2.27% - wer2: 8.10% - - name: Q6_K - filename: Breeze-ASR-25-Q6_K.gguf - size: 1.30 GB - wer: 2.29% - wer2: 8.12% - - name: Q5_K_M - filename: Breeze-ASR-25-Q5_K_M.gguf - size: 1.16 GB - wer: 2.25% - wer2: 8.12% - - name: Q4_K_M - filename: Breeze-ASR-25-Q4_K_M.gguf - size: 1.00 GB - wer: 2.26% - wer2: 8.08% diff --git a/scripts/hf_cards/canary-180m-flash.yaml b/scripts/hf_cards/canary-180m-flash.yaml index ffc3325f..49cfde0e 100644 --- a/scripts/hf_cards/canary-180m-flash.yaml +++ b/scripts/hf_cards/canary-180m-flash.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/canary-180m-flash-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/canary-180m-flash -target_repo: handy-computer/canary-180m-flash-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-180m-flash.md -upstream_commit: b12ab41 pin_date: 2026-05-08 # Validation pin for the most recent upload. Updated on each release — @@ -15,14 +12,7 @@ validation: commit: db53eda date: 2026-05-08 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - de - - es - - fr tags: - gguf - transcribe.cpp @@ -45,22 +35,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 74.2 - metal: 141.2 - ryzen-4750u: - cpu: 21.4 - vulkan: 32.1 wer: source: LibriSpeech test-clean notes: | @@ -70,29 +44,3 @@ wer: difference out of ~27k reference words), so the F32 port matches the reference framework at the noise floor. NVIDIA's self-reported number on the upstream model card is 1.87%. - -quants: - - name: F32 - filename: canary-180m-flash-F32.gguf - size: 756 MB - wer: 1.94% - - name: F16 - filename: canary-180m-flash-F16.gguf - size: 382 MB - wer: 1.94% - - name: Q8_0 - filename: canary-180m-flash-Q8_0.gguf - size: 218 MB - wer: 1.93% - - name: Q6_K - filename: canary-180m-flash-Q6_K.gguf - size: 176 MB - wer: 1.93% - - name: Q5_K_M - filename: canary-180m-flash-Q5_K_M.gguf - size: 159 MB - wer: 1.90% - - name: Q4_K_M - filename: canary-180m-flash-Q4_K_M.gguf - size: 139 MB - wer: 1.93% diff --git a/scripts/hf_cards/canary-1b-flash.yaml b/scripts/hf_cards/canary-1b-flash.yaml index 9992b983..9357c6a8 100644 --- a/scripts/hf_cards/canary-1b-flash.yaml +++ b/scripts/hf_cards/canary-1b-flash.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/canary-1b-flash-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/canary-1b-flash -target_repo: handy-computer/canary-1b-flash-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-1b-flash.md -upstream_commit: a9a55e0 pin_date: 2026-05-08 validation: @@ -13,14 +10,7 @@ validation: commit: db53eda date: 2026-05-08 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - de - - es - - fr tags: - gguf - transcribe.cpp @@ -43,51 +33,9 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 20.5 - metal: 101.1 - ryzen-4750u: - cpu: 6.9 - vulkan: 14.5 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.62%. NVIDIA's self-reported number on the upstream model card is 1.48%. - -quants: - - name: F32 - filename: canary-1b-flash-F32.gguf - size: 3.56 GB - wer: 1.62% - - name: F16 - filename: canary-1b-flash-F16.gguf - size: 1.79 GB - wer: 1.62% - - name: Q8_0 - filename: canary-1b-flash-Q8_0.gguf - size: 1.05 GB - wer: 1.62% - - name: Q6_K - filename: canary-1b-flash-Q6_K.gguf - size: 858 MB - wer: 1.65% - - name: Q5_K_M - filename: canary-1b-flash-Q5_K_M.gguf - size: 770 MB - wer: 1.64% - - name: Q4_K_M - filename: canary-1b-flash-Q4_K_M.gguf - size: 677 MB - wer: 1.59% diff --git a/scripts/hf_cards/canary-1b-v2.yaml b/scripts/hf_cards/canary-1b-v2.yaml index d296228f..b29a8f5f 100644 --- a/scripts/hf_cards/canary-1b-v2.yaml +++ b/scripts/hf_cards/canary-1b-v2.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/canary-1b-v2-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/canary-1b-v2 -target_repo: handy-computer/canary-1b-v2-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-1b-v2.md -upstream_commit: 87bc526 pin_date: 2026-05-08 validation: @@ -13,35 +10,7 @@ validation: commit: db53eda date: 2026-05-08 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - bg - - hr - - cs - - da - - nl - - en - - et - - fi - - fr - - de - - el - - hu - - it - - lv - - lt - - mt - - pl - - pt - - ro - - sk - - sl - - es - - sv - - ru - - uk tags: - gguf - transcribe.cpp @@ -65,22 +34,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 18.9 - metal: 86.4 - ryzen-4750u: - cpu: 6.6 - vulkan: 13.2 wer: source: LibriSpeech test-clean notes: | @@ -89,29 +42,3 @@ wer: NVIDIA's self-reported number on the upstream model card is 2.18%; our F32 port comes in slightly under the upstream-reported number (Δ −0.26pp) and is likely down to scoring differences. - -quants: - - name: F32 - filename: canary-1b-v2-F32.gguf - size: 3.92 GB - wer: 1.92% - - name: F16 - filename: canary-1b-v2-F16.gguf - size: 1.97 GB - wer: 1.92% - - name: Q8_0 - filename: canary-1b-v2-Q8_0.gguf - size: 1.14 GB - wer: 1.91% - - name: Q6_K - filename: canary-1b-v2-Q6_K.gguf - size: 932 MB - wer: 1.94% - - name: Q5_K_M - filename: canary-1b-v2-Q5_K_M.gguf - size: 837 MB - wer: 1.93% - - name: Q4_K_M - filename: canary-1b-v2-Q4_K_M.gguf - size: 735 MB - wer: 1.91% diff --git a/scripts/hf_cards/canary-1b.yaml b/scripts/hf_cards/canary-1b.yaml index 25c79388..dc3f7f1b 100644 --- a/scripts/hf_cards/canary-1b.yaml +++ b/scripts/hf_cards/canary-1b.yaml @@ -1,5 +1,5 @@ # Spec for the HF README of handy-computer/canary-1b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. # # canary-1b is the only family member under a non-commercial license. # The converter writes general.license="CC-BY-NC-4.0" and @@ -7,11 +7,8 @@ # into every preset; the YAML below mirrors that distinction so the HF # card surfaces the constraint to anyone clicking through to download. -hf_repo: nvidia/canary-1b -target_repo: handy-computer/canary-1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-1b.md -upstream_commit: 1698acf pin_date: 2026-05-08 validation: @@ -19,14 +16,7 @@ validation: commit: db53eda date: 2026-05-08 -license: cc-by-nc-4.0 -license_display: CC-BY-NC-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - de - - es - - fr tags: - gguf - transcribe.cpp @@ -50,22 +40,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 19.4 - metal: 43.1 - ryzen-4750u: - cpu: 5.6 - vulkan: 9 wer: source: LibriSpeech test-clean notes: | @@ -74,29 +48,3 @@ wer: NVIDIA's self-reported number on the upstream model card is 1.48%; likely this is due to differences in how we score WER, based on the results we have from canary-180m-flash. - -quants: - - name: F32 - filename: canary-1b-F32.gguf - size: 4.09 GB - wer: 1.55% - - name: F16 - filename: canary-1b-F16.gguf - size: 2.05 GB - wer: 1.55% - - name: Q8_0 - filename: canary-1b-Q8_0.gguf - size: 1.16 GB - wer: 1.55% - - name: Q6_K - filename: canary-1b-Q6_K.gguf - size: 934 MB - wer: 1.57% - - name: Q5_K_M - filename: canary-1b-Q5_K_M.gguf - size: 838 MB - wer: 1.57% - - name: Q4_K_M - filename: canary-1b-Q4_K_M.gguf - size: 730 MB - wer: 1.55% diff --git a/scripts/hf_cards/canary-qwen-2.5b.yaml b/scripts/hf_cards/canary-qwen-2.5b.yaml index 2be2489a..f73c9efc 100644 --- a/scripts/hf_cards/canary-qwen-2.5b.yaml +++ b/scripts/hf_cards/canary-qwen-2.5b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/canary-qwen-2.5b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/canary-qwen-2.5b -target_repo: handy-computer/canary-qwen-2.5b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/canary-qwen-2.5b.md -upstream_commit: b1469e1bba1cfe140205529c79c434ca47180960 pin_date: 2026-05-15 validation: @@ -13,11 +10,7 @@ validation: commit: 6f6c699 date: 2026-05-16 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -40,22 +33,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 7.3 - metal: 40.2 - ryzen-4750u: - cpu: 2.1 - vulkan: 4.1 wer: source: LibriSpeech test-clean notes: | @@ -71,29 +48,3 @@ wer: precision (homophones, word-boundary flips, function-word substitutions). Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. - -quants: - - name: BF16 - filename: canary-qwen-2.5b-BF16.gguf - size: 5.08 GB - wer: 1.63% - - name: F16 - filename: canary-qwen-2.5b-F16.gguf - size: 5.08 GB - wer: 1.63% - - name: Q8_0 - filename: canary-qwen-2.5b-Q8_0.gguf - size: 2.80 GB - wer: 1.63% - - name: Q6_K - filename: canary-qwen-2.5b-Q6_K.gguf - size: 2.21 GB - wer: 1.63% - - name: Q5_K_M - filename: canary-qwen-2.5b-Q5_K_M.gguf - size: 1.98 GB - wer: 1.63% - - name: Q4_K_M - filename: canary-qwen-2.5b-Q4_K_M.gguf - size: 1.74 GB - wer: 1.63% diff --git a/scripts/hf_cards/cohere-transcribe-03-2026.yaml b/scripts/hf_cards/cohere-transcribe-03-2026.yaml index da2f74b8..ba2f7914 100644 --- a/scripts/hf_cards/cohere-transcribe-03-2026.yaml +++ b/scripts/hf_cards/cohere-transcribe-03-2026.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/cohere-transcribe-03-2026-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: CohereLabs/cohere-transcribe-03-2026 -target_repo: handy-computer/cohere-transcribe-03-2026-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/cohere-transcribe-03-2026.md -upstream_commit: 76b8b23 pin_date: 2026-04-16 # Validation pin for the most recent upload. Updated on each release — @@ -15,29 +12,7 @@ validation: commit: bf0d0b7 date: 2026-04-18 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - quants - -languages: - - en - - fr - - de - - es - - it - - pt - - nl - - pl - - el - - ar - - ja - - zh - - vi - - ko tags: - gguf - transcribe.cpp @@ -57,23 +32,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 73 - cpu: 9 - ryzen-4750u: - vulkan: 8 - cpu: 3 - wer: source: LibriSpeech test-clean notes: | @@ -83,29 +41,3 @@ wer: (Open ASR Leaderboard, as of 2026-03-26). Both ours and Cohere's numbers use the Whisper EnglishTextNormalizer, so the comparison is apples-to-apples and our port matches the upstream reference within rounding. - -quants: - - name: BF16 - filename: cohere-transcribe-03-2026-BF16.gguf - size: 4.10 GB - wer: 1.26% - - name: F16 - filename: cohere-transcribe-03-2026-F16.gguf - size: 4.11 GB - wer: 1.26% - - name: Q8_0 - filename: cohere-transcribe-03-2026-Q8_0.gguf - size: 2.41 GB - wer: 1.27% - - name: Q6_K - filename: cohere-transcribe-03-2026-Q6_K.gguf - size: 1.97 GB - wer: 1.27% - - name: Q5_K_M - filename: cohere-transcribe-03-2026-Q5_K_M.gguf - size: 1.76 GB - wer: 1.25% - - name: Q4_K_M - filename: cohere-transcribe-03-2026-Q4_K_M.gguf - size: 1.55 GB - wer: 1.25% diff --git a/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml b/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml index 8a5671d4..738009fb 100644 --- a/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml +++ b/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/cohere-transcribe-arabic-07-2026-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: CohereLabs/cohere-transcribe-arabic-07-2026 -target_repo: handy-computer/cohere-transcribe-arabic-07-2026-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/cohere-transcribe-arabic-07-2026.md -upstream_commit: 0a8193c pin_date: 2026-07-07 # Validation pin for the most recent upload. Updated on each release — @@ -15,18 +12,7 @@ validation: commit: d89ecb7 date: 2026-07-07 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - languages - - quants - -languages: - - ar - - en tags: - gguf - transcribe.cpp @@ -75,18 +61,6 @@ usage: | default_quant_index: 2 # Q8_0 -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none -perf: - m4-max: - cpu: 9 - metal: 73 - ryzen-4750u: - cpu: 3 - vulkan: 8 wer: metadata_key: fleurs_ar_test source: FLEURS Arabic test @@ -98,28 +72,3 @@ wer: 11.02%, and every quant falls inside the reference's 95% confidence interval. FLEURS Arabic is Egyptian-dialect speech; upstream numbers published on other Arabic test sets are not directly comparable. -quants: - - name: BF16 - filename: cohere-transcribe-arabic-07-2026-BF16.gguf - size: 4.10 GB - wer: 11.02% - - name: F16 - filename: cohere-transcribe-arabic-07-2026-F16.gguf - size: 4.11 GB - wer: 11.00% - - name: Q8_0 - filename: cohere-transcribe-arabic-07-2026-Q8_0.gguf - size: 2.41 GB - wer: 11.06% - - name: Q6_K - filename: cohere-transcribe-arabic-07-2026-Q6_K.gguf - size: 1.97 GB - wer: 11.07% - - name: Q5_K_M - filename: cohere-transcribe-arabic-07-2026-Q5_K_M.gguf - size: 1.77 GB - wer: 10.95% - - name: Q4_K_M - filename: cohere-transcribe-arabic-07-2026-Q4_K_M.gguf - size: 1.56 GB - wer: 11.18% diff --git a/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml b/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml index 9e129bc7..9c636866 100644 --- a/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml +++ b/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml @@ -1,14 +1,11 @@ # Spec for the HF README of handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. # # Diarizer family: metric is DER (not WER); pipeline_tag follows the # upstream NVIDIA card's diarization tagging rather than ASR. -hf_repo: nvidia/diar_streaming_sortformer_4spk-v2.1 -target_repo: handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/diar_streaming_sortformer_4spk-v2.1.md -upstream_commit: fafaab5 pin_date: 2026-07-19 # Validation pin for the most recent upload. Updated on each release — @@ -18,11 +15,7 @@ validation: commit: d42c3bb date: 2026-07-22 -license: other -license_display: NVIDIA Open Model License pipeline_tag: voice-activity-detection -languages: - - en tags: - gguf - transcribe.cpp @@ -32,8 +25,6 @@ tags: - sortformer - fastconformer -metric: DER - summary: | Streaming speaker diarization: who spoke when, for up to 4 speakers. A FastConformer encoder with an 18-layer Transformer head emitting @@ -79,20 +70,6 @@ usage: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: false - diarize: true - timestamps: none # segment times are diarization output, not transcript timestamps - -# Speedup-over-realtime (×RT) per rig/backend, hand-authored from the bench; -# published raw as rtf_ in the metadata block. -perf: - m4: - cpu: 76.3 - metal: 141.8 wer: source: AMI IHM test metadata_key: ami_ihm_test @@ -105,17 +82,3 @@ wer: RTTM source and post-processing; compare like with like. Only near-reference tiers ship for this family (k-quant tiers withdrawn; see the transcribe.cpp family doc, "Quant policy (Stage 7)"). - -quants: - - name: F32 - filename: diar_streaming_sortformer_4spk-v2.1-F32.gguf - size: 471 MB - wer: 14.59% - - name: F16 - filename: diar_streaming_sortformer_4spk-v2.1-F16.gguf - size: 237 MB - wer: 14.23% - - name: Q8_0 - filename: diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf - size: 139 MB - wer: 14.73% diff --git a/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml b/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml index 4aec4869..4ef49e1e 100644 --- a/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml +++ b/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml @@ -1,12 +1,8 @@ # Spec for the HF README of handy-computer/Fun-ASR-MLT-Nano-2512-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: FunAudioLLM/Fun-ASR-MLT-Nano-2512 -target_repo: handy-computer/Fun-ASR-MLT-Nano-2512-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/fun-asr-mlt-nano-2512.md -# Pinned at intake (Stage 1). -upstream_commit: cf67a938bf2829959d08fdfb84e186eff02a67ff pin_date: 2026-05-06 # Validation pin for the most recent upload. Updated on each release — @@ -16,45 +12,7 @@ validation: commit: f094d28 date: 2026-05-06 -# Upstream license is "FunASR-Model-License-1.1" — not a standard SPDX id. -# The HF YAML field accepts a free-form `other` plus a license_name / -# license_link override on the upstream card; the renderer emits -# `license: other` and surfaces the human-facing form via `license_display`. -license: other -license_display: FunASR Model Open Source License Agreement v1.1 pipeline_tag: automatic-speech-recognition -languages: - - zh - - en - - yue - - ja - - ko - - vi - - id - - th - - ms - - tl - - ar - - hi - - bg - - hr - - cs - - da - - nl - - et - - fi - - el - - hu - - ga - - lv - - lt - - mt - - pl - - pt - - ro - - sk - - sl - - sv tags: - gguf - transcribe.cpp @@ -86,22 +44,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 16 - metal: 68 - ryzen-4750u: - cpu: 4.5 - vulkan: 8.9 wer: source: LibriSpeech test-clean notes: | @@ -115,29 +57,3 @@ wer: English only; the strength of the MLT variant is multilingual coverage, not English accuracy. For the other 30 languages, run your own representative manifest. - -quants: - - name: BF16 - filename: Fun-ASR-MLT-Nano-2512-BF16.gguf - size: 1.67 GB - wer: 1.74% - - name: F16 - filename: Fun-ASR-MLT-Nano-2512-F16.gguf - size: 1.67 GB - wer: 1.74% - - name: Q8_0 - filename: Fun-ASR-MLT-Nano-2512-Q8_0.gguf - size: 891 MB - wer: 1.74% - - name: Q6_K - filename: Fun-ASR-MLT-Nano-2512-Q6_K.gguf - size: 691 MB - wer: 1.69% - - name: Q5_K_M - filename: Fun-ASR-MLT-Nano-2512-Q5_K_M.gguf - size: 631 MB - wer: 1.77% - - name: Q4_K_M - filename: Fun-ASR-MLT-Nano-2512-Q4_K_M.gguf - size: 557 MB - wer: 1.89% diff --git a/scripts/hf_cards/fun-asr-nano-2512.yaml b/scripts/hf_cards/fun-asr-nano-2512.yaml index fcbbd52c..ddf84339 100644 --- a/scripts/hf_cards/fun-asr-nano-2512.yaml +++ b/scripts/hf_cards/fun-asr-nano-2512.yaml @@ -1,12 +1,8 @@ # Spec for the HF README of handy-computer/Fun-ASR-Nano-2512-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: FunAudioLLM/Fun-ASR-Nano-2512 -target_repo: handy-computer/Fun-ASR-Nano-2512-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/fun-asr-nano-2512.md -# Pinned at intake (Stage 1). -upstream_commit: a7088d620f755dcdca575b63db184c3ad55b2865 pin_date: 2026-05-06 # Validation pin for the most recent upload. Updated on each release — @@ -16,17 +12,7 @@ validation: commit: f094d28 date: 2026-05-06 -# Upstream license is "FunASR-Model-License-1.1" — not a standard SPDX id. -# The HF YAML field accepts a free-form `other` plus a license_name / -# license_link override on the upstream card; the renderer emits -# `license: other` and surfaces the human-facing form via `license_display`. -license: other -license_display: FunASR Model Open Source License Agreement v1.1 pipeline_tag: automatic-speech-recognition -languages: - - zh - - en - - ja tags: - gguf - transcribe.cpp @@ -52,22 +38,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 27 - metal: 77.5 - ryzen-4750u: - cpu: 6.5 - vulkan: 11.2 wer: source: LibriSpeech test-clean notes: | @@ -80,29 +50,3 @@ wer: -0.01 percentage-points. LibriSpeech is an English-only benchmark; Chinese (AISHELL-1, WenetSpeech) and Japanese (CommonVoice JA) are the recommended complementary checks. - -quants: - - name: BF16 - filename: Fun-ASR-Nano-2512-BF16.gguf - size: 1.67 GB - wer: 1.78% - - name: F16 - filename: Fun-ASR-Nano-2512-F16.gguf - size: 1.67 GB - wer: 1.79% - - name: Q8_0 - filename: Fun-ASR-Nano-2512-Q8_0.gguf - size: 891 MB - wer: 1.79% - - name: Q6_K - filename: Fun-ASR-Nano-2512-Q6_K.gguf - size: 691 MB - wer: 1.78% - - name: Q5_K_M - filename: Fun-ASR-Nano-2512-Q5_K_M.gguf - size: 631 MB - wer: 1.82% - - name: Q4_K_M - filename: Fun-ASR-Nano-2512-Q4_K_M.gguf - size: 557 MB - wer: 1.92% diff --git a/scripts/hf_cards/generate.py b/scripts/hf_cards/generate.py index 0ca6c214..8f27902c 100755 --- a/scripts/hf_cards/generate.py +++ b/scripts/hf_cards/generate.py @@ -9,15 +9,20 @@ # /// """Generate the HuggingFace README.md for a transcribe.cpp GGUF repo. -The committed YAML is the complete, standalone upload specification. Use -scripts/catalog/sync_hf_cards.py to populate its mechanical fields from the -catalog; this renderer does not read catalog JSON at generation time. +Two inputs, disjoint by construction: -Fetches the upstream model card at the pinned commit and renders -template.md.j2. + catalog/.json identity, repos, licence, languages, + capabilities, downloads, benchmark numbers + scripts/hf_cards/.yaml editorial copy and release state only: + summary, tags, pipeline tag, validation pin, + prose notes, optional usage override -Default output is models//README.md alongside the GGUFs, so -`hf upload models/ .` picks it up in the same call. +Nothing numeric or mechanical is read from the YAML; a number that belongs +on the card belongs in the catalog first. Fetches the upstream model card at +the pinned commit and renders template.md.j2. + +Default output is models//README.md alongside the GGUFs, so +`hf upload models/ .` picks it up in the same call. Usage: uv run scripts/hf_cards/generate.py scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml @@ -28,6 +33,7 @@ from __future__ import annotations import argparse +import statistics import sys from pathlib import Path @@ -37,31 +43,142 @@ HERE = Path(__file__).parent REPO_ROOT = HERE.parent.parent +sys.path.insert(0, str(REPO_ROOT / "scripts" / "catalog")) +import common # noqa: E402 + +# Keys the catalog owns. A spec that states one of these is stale by +# definition, so refuse it rather than let the two quietly diverge again. +CATALOG_OWNED = { + "hf_repo", "target_repo", "upstream_commit", "license", "license_display", + "license_name", "license_link", "languages", "capabilities", "perf", + "quants", "metric", "catalog_sync", +} +CAP_FLAGS = ("streaming", "translate", "lang_detect") def load_spec(path: Path) -> dict: - """Load a complete, standalone card specification.""" + """The editorial half of a card. Fails on any catalog-owned key.""" with path.open() as f: - return yaml.safe_load(f) + spec = yaml.safe_load(f) or {} + stale = sorted(CATALOG_OWNED & spec.keys()) + if stale: + raise SystemExit( + f"{path.name}: {', '.join(stale)} come from catalog/{path.stem}.json; " + f"remove them from the spec") + return spec + + +# -------------------------------------------------------------------------- +# catalog -> card context + + +def derive_capabilities(record: dict) -> dict: + """The boolean flags the `transcribe_cpp:` metadata block carries.""" + caps = record.get("capabilities", {}) + out = {flag: bool(caps.get(flag, {}).get("supported")) for flag in CAP_FLAGS} + if caps.get("diarize", {}).get("supported"): + out["diarize"] = True + granularities = caps.get("timestamps", {}).get("granularities") or [] + # Advertise the finest granularity the port actually emits. + out["timestamps"] = next((g for g in ("token", "word", "segment") + if g in granularities), "none") + return out + + +def derive_perf(record: dict, default_quant: str | None) -> dict: + """Speedup over realtime per rig/backend at the card's default quant, + averaged over the benchmark samples.""" + cells: dict[tuple[str, str], list[float]] = {} + for row in record.get("speed_benchmarks", []): + if row["quant"] != default_quant: + continue + cells.setdefault((row["machine"], row["backend"]), []).append(row["xrt_compute"]) + perf: dict[str, dict[str, float]] = {} + for (machine, backend), values in sorted(cells.items()): + mean = round(statistics.fmean(values), 1) + perf.setdefault(machine, {})[backend] = int(mean) if mean == int(mean) else mean + return perf + +def derive_quants(record: dict, secondary: dict | None) -> list[dict]: + """One row per published GGUF: size, headline error rate, and the optional + second metric column the spec supplies under `wer.`.""" + errors = common.headline_rows(record) + quants = [] + for item in record.get("downloads", []): + entry = {"name": item["quant"], "filename": item["filename"], + "size": common.fmt_size(item["size_bytes"])} + row = errors.get(item["quant"]) + if row is not None: + entry["wer"] = common.fmt_err(row) + if secondary is not None: + value = secondary.get(item["quant"].lower()) + if value is not None: + entry["wer2"] = f"{float(value):.2f}%" + quants.append(entry) + return quants -def build_transcribe_cpp_block(spec: dict) -> str: + +def build_context(record: dict, spec: dict) -> dict: + """Everything the template needs: catalog facts plus the editorial spec.""" + downloads = record.get("downloads", []) + index = spec.get("default_quant_index", 0) + default_quant = downloads[index]["quant"] if index < len(downloads) else None + wer = dict(spec.get("wer") or {}) + if not wer.get("source"): + wer["source"] = common.headline_label(record) + secondary = None + if "source2" in wer: + key2 = wer.get("metadata_key2") + if not key2 or not isinstance(wer.get(key2), dict): + raise SystemExit("wer.source2 needs wer.metadata_key2 naming a " + "{quant: value} map under wer:") + secondary = {str(q).lower(): v for q, v in wer[key2].items()} + headline = common.headline(record) or {} + ctx = { + **spec, + "hf_repo": record["upstream_repo"], + "target_repo": record.get("published_repo"), + "upstream_commit": record["upstream_commit"], + "license": record["license"]["spdx"], + "license_display": record["license"]["display"], + "languages": list(record.get("languages", [])), + "capabilities": derive_capabilities(record), + "perf": derive_perf(record, default_quant), + "quants": derive_quants(record, secondary), + "wer": wer, + } + if headline.get("metric"): + ctx["metric"] = headline["metric"].upper() + for key in ("name", "link"): + if record["license"].get(key): + ctx[f"license_{key}"] = record["license"][key] + if not ctx["target_repo"]: + raise SystemExit(f"{record['variant']}: catalog has no published_repo") + return ctx + + +# -------------------------------------------------------------------------- +# rendering + + +def build_transcribe_cpp_block(ctx: dict) -> str: """Serialize the `transcribe_cpp:` block (raw WER/RTF + capability flags). - See docs/tools/hf-metadata-schema.md. Returns "" when a spec omits `perf`, - opting out of the block. + See docs/tools/hf-metadata-schema.md. Returns "" when the catalog holds no + speed rows for the default quant, opting out of the block. """ - if "perf" not in spec: + if not ctx["perf"]: return "" - caps = spec.get("capabilities", {}) - wer = spec["wer"] + caps = ctx["capabilities"] + wer = ctx["wer"] dataset_key = wer.get("metadata_key", "librispeech_test_clean") block: dict = {} # Headline dataset: per-quant WER taken from the `quants:` column. headline = { q["name"].lower(): float(str(q["wer"]).rstrip("%")) - for q in spec["quants"] if q.get("wer") is not None + for q in ctx["quants"] if q.get("wer") is not None } if headline: block[f"wer_{dataset_key}"] = headline @@ -74,12 +191,12 @@ def build_transcribe_cpp_block(spec: dict) -> str: block[f"wer_{key}"] = { str(q).lower(): float(str(v).rstrip("%")) for q, v in per_quant.items() } - for machine, backends in spec["perf"].items(): + for machine, backends in ctx["perf"].items(): block[f"rtf_{machine.replace('-', '_')}"] = backends # Optional non-WER task metrics (for example cpWER for # speaker-attributed ASR). Values are emitted verbatim so the spec keeps # the metric's natural shape and units. - block.update(spec.get("metrics", {})) + block.update(ctx.get("metrics", {})) block["streaming"] = bool(caps.get("streaming", False)) if "diarize" in caps: block["diarize"] = bool(caps["diarize"]) @@ -107,7 +224,7 @@ def fetch_upstream_card(repo_id: str, revision: str) -> str: return content.strip() -def render(spec: dict, upstream_card: str) -> str: +def render(ctx: dict, upstream_card: str) -> str: env = Environment( loader=FileSystemLoader(HERE), undefined=StrictUndefined, @@ -116,19 +233,19 @@ def render(spec: dict, upstream_card: str) -> str: template = env.get_template("template.md.j2") return template.render( upstream_card=upstream_card, - transcribe_cpp_yaml=build_transcribe_cpp_block(spec), - **spec, + transcribe_cpp_yaml=build_transcribe_cpp_block(ctx), + **ctx, ) def main() -> int: ap = argparse.ArgumentParser(description=__doc__.splitlines()[0]) - ap.add_argument("spec", type=Path, help="Path to the YAML spec file") + ap.add_argument("spec", type=Path, help="Path to the editorial YAML spec") ap.add_argument( "-o", "--output", type=Path, - help="Write to this path. Defaults to models//README.md.", + help="Write to this path. Defaults to models//README.md.", ) ap.add_argument( "--stdout", @@ -143,18 +260,20 @@ def main() -> int: args = ap.parse_args() spec = load_spec(args.spec) + record = common.load_record(args.spec.stem) + ctx = build_context(record, spec) # Most families pin the upstream card to the same SHA as the ported # weights. Multi-branch upstream repos (gigaam) ship the family card # only on `main` while per-variant branches have empty README stubs; # `upstream_card_commit` lets a spec point the card-fetch at a - # different revision than `upstream_commit`. - card_commit = spec.get("upstream_card_commit", spec["upstream_commit"]) + # different revision than the catalog's upstream_commit. + card_commit = spec.get("upstream_card_commit", ctx["upstream_commit"]) upstream = ( "_(upstream card not fetched — run without --skip-upstream to include it)_" if args.skip_upstream - else fetch_upstream_card(spec["hf_repo"], card_commit) + else fetch_upstream_card(ctx["hf_repo"], card_commit) ) - out = render(spec, upstream) + out = render(ctx, upstream) if args.stdout: sys.stdout.write(out) @@ -165,7 +284,7 @@ def main() -> int: # directory `hf upload` will publish. The kebab-cased spec stem is # the internal handle; the filesystem dir mirrors upstream casing # (matches the converter's output dir convention). - upstream_slug = spec["hf_repo"].rsplit("/", 1)[-1] + upstream_slug = ctx["hf_repo"].rsplit("/", 1)[-1] output = args.output or (REPO_ROOT / "models" / upstream_slug / "README.md") output.parent.mkdir(parents=True, exist_ok=True) output.write_text(out) diff --git a/scripts/hf_cards/gigaam-v3-ctc.yaml b/scripts/hf_cards/gigaam-v3-ctc.yaml index d0f5d36f..1d66eac9 100644 --- a/scripts/hf_cards/gigaam-v3-ctc.yaml +++ b/scripts/hf_cards/gigaam-v3-ctc.yaml @@ -1,13 +1,8 @@ # Spec for the HF README of handy-computer/gigaam-v3-ctc-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: ai-sage/GigaAM-v3 -target_repo: handy-computer/gigaam-v3-ctc-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/gigaam-v3-ctc.md -# Upstream branch: ctc. Each gigaam-v3 variant lives on its own -# HF branch; the SHA below pins this variant's branch revision. -upstream_commit: 15ef3b5 pin_date: 2026-05-12 # Upstream README lives only on the main branch (per-variant branches # ship empty README stubs); fetch the family card from main. @@ -20,11 +15,7 @@ validation: commit: 42b96d9 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ru tags: - gguf - transcribe.cpp @@ -40,51 +31,8 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 146 - cpu: 29 - ryzen-4750u: - vulkan: 33 - cpu: 9 - wer: metadata_key: fleurs_ru source: FLEURS ru notes: | WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 8.42%. Upstream `gigaam` author package measured on the same manifest: 9.81%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. - -quants: - - name: F32 - filename: gigaam-v3-ctc-F32.gguf - size: 883 MB - wer: 8.42% - - name: F16 - filename: gigaam-v3-ctc-F16.gguf - size: 449 MB - wer: 8.42% - - name: Q8_0 - filename: gigaam-v3-ctc-Q8_0.gguf - size: 272 MB - wer: 8.40% - - name: Q6_K - filename: gigaam-v3-ctc-Q6_K.gguf - size: 226 MB - wer: 8.38% - - name: Q5_K_M - filename: gigaam-v3-ctc-Q5_K_M.gguf - size: 205 MB - wer: 8.29% - - name: Q4_K_M - filename: gigaam-v3-ctc-Q4_K_M.gguf - size: 182 MB - wer: 8.42% diff --git a/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml b/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml index fcb31b03..fe746809 100644 --- a/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml +++ b/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml @@ -1,13 +1,8 @@ # Spec for the HF README of handy-computer/gigaam-v3-e2e-ctc-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: ai-sage/GigaAM-v3 -target_repo: handy-computer/gigaam-v3-e2e-ctc-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/gigaam-v3-e2e-ctc.md -# Upstream branch: e2e_ctc. Each gigaam-v3 variant lives on its own -# HF branch; the SHA below pins this variant's branch revision. -upstream_commit: cec030b pin_date: 2026-05-12 # Upstream README lives only on the main branch (per-variant branches # ship empty README stubs); fetch the family card from main. @@ -20,16 +15,7 @@ validation: commit: 42b96d9 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - quants - -languages: - - ru tags: - gguf - transcribe.cpp @@ -45,51 +31,8 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 112 - cpu: 27 - ryzen-4750u: - vulkan: 30 - cpu: 9 - wer: metadata_key: fleurs_ru source: FLEURS ru notes: | WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 5.50%. Upstream `gigaam` author package measured on the same manifest: 6.93%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. - -quants: - - name: F32 - filename: gigaam-v3-e2e-ctc-F32.gguf - size: 843 MB - wer: 5.50% - - name: F16 - filename: gigaam-v3-e2e-ctc-F16.gguf - size: 428 MB - wer: 5.50% - - name: Q8_0 - filename: gigaam-v3-e2e-ctc-Q8_0.gguf - size: 260 MB - wer: 5.50% - - name: Q6_K - filename: gigaam-v3-e2e-ctc-Q6_K.gguf - size: 216 MB - wer: 5.56% - - name: Q5_K_M - filename: gigaam-v3-e2e-ctc-Q5_K_M.gguf - size: 195 MB - wer: 5.58% - - name: Q4_K_M - filename: gigaam-v3-e2e-ctc-Q4_K_M.gguf - size: 174 MB - wer: 5.57% diff --git a/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml b/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml index 9848458c..1f3ab84c 100644 --- a/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml +++ b/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml @@ -1,13 +1,8 @@ # Spec for the HF README of handy-computer/gigaam-v3-e2e-rnnt-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: ai-sage/GigaAM-v3 -target_repo: handy-computer/gigaam-v3-e2e-rnnt-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/gigaam-v3-e2e-rnnt.md -# Upstream branch: main (= v3_e2e_rnnt). Each gigaam-v3 variant lives on its own -# HF branch; the SHA below pins this variant's branch revision. -upstream_commit: ec1dc1f pin_date: 2026-05-12 # Upstream README lives only on the main branch; this variant IS main, so # upstream_card_commit matches upstream_commit. Made explicit for symmetry @@ -21,11 +16,7 @@ validation: commit: 42b96d9 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ru tags: - gguf - transcribe.cpp @@ -41,51 +32,8 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 88 - cpu: 25 - ryzen-4750u: - vulkan: 22 - cpu: 8 - wer: metadata_key: fleurs_ru source: FLEURS ru notes: | WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 5.35%. Upstream `gigaam` author package measured on the same manifest: 6.78%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. - -quants: - - name: F32 - filename: gigaam-v3-e2e-rnnt-F32.gguf - size: 890 MB - wer: 5.35% - - name: F16 - filename: gigaam-v3-e2e-rnnt-F16.gguf - size: 452 MB - wer: 5.35% - - name: Q8_0 - filename: gigaam-v3-e2e-rnnt-Q8_0.gguf - size: 274 MB - wer: 5.36% - - name: Q6_K - filename: gigaam-v3-e2e-rnnt-Q6_K.gguf - size: 228 MB - wer: 5.37% - - name: Q5_K_M - filename: gigaam-v3-e2e-rnnt-Q5_K_M.gguf - size: 206 MB - wer: 5.42% - - name: Q4_K_M - filename: gigaam-v3-e2e-rnnt-Q4_K_M.gguf - size: 184 MB - wer: 5.36% diff --git a/scripts/hf_cards/gigaam-v3-rnnt.yaml b/scripts/hf_cards/gigaam-v3-rnnt.yaml index e9069a76..4b3d5694 100644 --- a/scripts/hf_cards/gigaam-v3-rnnt.yaml +++ b/scripts/hf_cards/gigaam-v3-rnnt.yaml @@ -1,13 +1,8 @@ # Spec for the HF README of handy-computer/gigaam-v3-rnnt-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: ai-sage/GigaAM-v3 -target_repo: handy-computer/gigaam-v3-rnnt-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/gigaam-v3-rnnt.md -# Upstream branch: rnnt. Each gigaam-v3 variant lives on its own -# HF branch; the SHA below pins this variant's branch revision. -upstream_commit: c7f128b pin_date: 2026-05-12 # Upstream README lives only on the main branch (per-variant branches # ship empty README stubs); fetch the family card from main. @@ -20,11 +15,7 @@ validation: commit: 42b96d9 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ru tags: - gguf - transcribe.cpp @@ -40,51 +31,8 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 110 - cpu: 27 - ryzen-4750u: - vulkan: 25 - cpu: 9 - wer: metadata_key: fleurs_ru source: FLEURS ru notes: | WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 8.08%. Upstream `gigaam` author package measured on the same manifest: 9.46%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. - -quants: - - name: F32 - filename: gigaam-v3-rnnt-F32.gguf - size: 888 MB - wer: 8.08% - - name: F16 - filename: gigaam-v3-rnnt-F16.gguf - size: 451 MB - wer: 8.08% - - name: Q8_0 - filename: gigaam-v3-rnnt-Q8_0.gguf - size: 273 MB - wer: 8.08% - - name: Q6_K - filename: gigaam-v3-rnnt-Q6_K.gguf - size: 227 MB - wer: 8.07% - - name: Q5_K_M - filename: gigaam-v3-rnnt-Q5_K_M.gguf - size: 206 MB - wer: 8.12% - - name: Q4_K_M - filename: gigaam-v3-rnnt-Q4_K_M.gguf - size: 183 MB - wer: 8.12% diff --git a/scripts/hf_cards/granite-4.0-1b-speech.yaml b/scripts/hf_cards/granite-4.0-1b-speech.yaml index bfe3539e..c4c4aa3d 100644 --- a/scripts/hf_cards/granite-4.0-1b-speech.yaml +++ b/scripts/hf_cards/granite-4.0-1b-speech.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/granite-4.0-1b-speech-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: ibm-granite/granite-4.0-1b-speech -target_repo: handy-computer/granite-4.0-1b-speech-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-4.0-1b-speech.md -upstream_commit: bd87ab8 pin_date: 2026-05-17 validation: @@ -13,16 +10,7 @@ validation: commit: 275332d date: 2026-05-17 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - de - - es - - pt - - ja tags: - gguf - transcribe.cpp @@ -45,22 +33,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 7.2 - metal: 95.3 - ryzen-4750u: - cpu: 2.1 - vulkan: 5 wer: source: LibriSpeech test-clean notes: | @@ -69,29 +41,3 @@ wer: model card's exact prompt): 1.42% — matches the upstream Open ASR Leaderboard number exactly. Text normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. - -quants: - - name: BF16 - filename: granite-4.0-1b-speech-BF16.gguf - size: 4.63 GB - wer: 1.42% - - name: F16 - filename: granite-4.0-1b-speech-F16.gguf - size: 4.63 GB - wer: 1.42% - - name: Q8_0 - filename: granite-4.0-1b-speech-Q8_0.gguf - size: 2.56 GB - wer: 1.44% - - name: Q6_K - filename: granite-4.0-1b-speech-Q6_K.gguf - size: 2.02 GB - wer: 1.41% - - name: Q5_K_M - filename: granite-4.0-1b-speech-Q5_K_M.gguf - size: 1.83 GB - wer: 1.42% - - name: Q4_K_M - filename: granite-4.0-1b-speech-Q4_K_M.gguf - size: 1.60 GB - wer: 1.48% diff --git a/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml b/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml index 70448394..04a4089e 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/granite-speech-4.1-2b-nar-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: ibm-granite/granite-speech-4.1-2b-nar -target_repo: handy-computer/granite-speech-4.1-2b-nar-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-speech-4.1-2b-nar.md -upstream_commit: 99a4df9 pin_date: 2026-05-24 validation: @@ -13,15 +10,7 @@ validation: commit: c53af2c date: 2026-05-24 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - de - - es - - pt tags: - gguf - transcribe.cpp @@ -46,22 +35,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 5.3 - metal: 72.3 - ryzen-4750u: - cpu: 1.6 - vulkan: 4.2 wer: source: LibriSpeech test-clean notes: | @@ -77,29 +50,3 @@ wer: NAR LM uses `create_bidirectional_mask()` natively. F16, Q8_0, and Q6_K all match BF16's 1.29%; Q5_K_M dips slightly to 1.25% (within overlapping CIs). - -quants: - - name: BF16 - filename: granite-speech-4.1-2b-nar-BF16.gguf - size: 4.51 GB - wer: 1.29% - - name: F16 - filename: granite-speech-4.1-2b-nar-F16.gguf - size: 4.52 GB - wer: 1.29% - - name: Q8_0 - filename: granite-speech-4.1-2b-nar-Q8_0.gguf - size: 2.50 GB - wer: 1.29% - - name: Q6_K - filename: granite-speech-4.1-2b-nar-Q6_K.gguf - size: 1.98 GB - wer: 1.29% - - name: Q5_K_M - filename: granite-speech-4.1-2b-nar-Q5_K_M.gguf - size: 1.78 GB - wer: 1.28% - - name: Q4_K_M - filename: granite-speech-4.1-2b-nar-Q4_K_M.gguf - size: 1.56 GB - wer: 1.34% diff --git a/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml b/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml index 23869451..61a87d5b 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/granite-speech-4.1-2b-plus-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: ibm-granite/granite-speech-4.1-2b-plus -target_repo: handy-computer/granite-speech-4.1-2b-plus-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-speech-4.1-2b-plus.md -upstream_commit: edd3bf5 pin_date: 2026-05-17 validation: @@ -13,15 +10,7 @@ validation: commit: 275332d date: 2026-05-17 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - de - - es - - pt tags: - gguf - transcribe.cpp @@ -53,23 +42,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - diarize: true - timestamps: word # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 6.3 - metal: 90.7 - ryzen-4750u: - cpu: 1.9 - vulkan: 4.9 wer: source: LibriSpeech test-clean notes: | @@ -84,29 +56,3 @@ wer: without it the model emits 25-27 empty hypotheses on short test-clean clips and WER blows up to ~26%. The transcribe.cpp runtime hard-codes the prompt correctly; this note only matters if you reproduce the reference. - -quants: - - name: BF16 - filename: granite-speech-4.1-2b-plus-BF16.gguf - size: 4.23 GB - wer: 1.49% - - name: F16 - filename: granite-speech-4.1-2b-plus-F16.gguf - size: 4.23 GB - wer: 1.48% - - name: Q8_0 - filename: granite-speech-4.1-2b-plus-Q8_0.gguf - size: 2.35 GB - wer: 1.50% - - name: Q6_K - filename: granite-speech-4.1-2b-plus-Q6_K.gguf - size: 1.86 GB - wer: 1.46% - - name: Q5_K_M - filename: granite-speech-4.1-2b-plus-Q5_K_M.gguf - size: 1.69 GB - wer: 1.48% - - name: Q4_K_M - filename: granite-speech-4.1-2b-plus-Q4_K_M.gguf - size: 1.49 GB - wer: 1.56% diff --git a/scripts/hf_cards/granite-speech-4.1-2b.yaml b/scripts/hf_cards/granite-speech-4.1-2b.yaml index 7caf797b..eec47191 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/granite-speech-4.1-2b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: ibm-granite/granite-speech-4.1-2b -target_repo: handy-computer/granite-speech-4.1-2b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-speech-4.1-2b.md -upstream_commit: 8f4bb5f pin_date: 2026-05-17 validation: @@ -13,16 +10,7 @@ validation: commit: 275332d date: 2026-05-17 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - de - - es - - pt - - ja tags: - gguf - transcribe.cpp @@ -46,22 +34,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 7.1 - metal: 94.9 - ryzen-4750u: - cpu: 2 - vulkan: 5 wer: source: LibriSpeech test-clean notes: | @@ -71,29 +43,3 @@ wer: 1.33%, likely a minor normalization difference on the publisher side and well within bootstrap CI overlap. Text normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. - -quants: - - name: BF16 - filename: granite-speech-4.1-2b-BF16.gguf - size: 4.63 GB - wer: 1.31% - - name: F16 - filename: granite-speech-4.1-2b-F16.gguf - size: 4.63 GB - wer: 1.32% - - name: Q8_0 - filename: granite-speech-4.1-2b-Q8_0.gguf - size: 2.56 GB - wer: 1.32% - - name: Q6_K - filename: granite-speech-4.1-2b-Q6_K.gguf - size: 2.02 GB - wer: 1.29% - - name: Q5_K_M - filename: granite-speech-4.1-2b-Q5_K_M.gguf - size: 1.83 GB - wer: 1.33% - - name: Q4_K_M - filename: granite-speech-4.1-2b-Q4_K_M.gguf - size: 1.60 GB - wer: 1.37% diff --git a/scripts/hf_cards/medasr.yaml b/scripts/hf_cards/medasr.yaml index 143bb4a5..ef48cb14 100644 --- a/scripts/hf_cards/medasr.yaml +++ b/scripts/hf_cards/medasr.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/medasr-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: google/medasr -target_repo: handy-computer/medasr-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/medasr.md -upstream_commit: ae1e484 pin_date: 2026-06-04 # Validation pin for the most recent upload. Updated on each release; @@ -15,11 +12,7 @@ validation: commit: 782abfd date: 2026-06-04 -license: other -license_display: Health AI Developer Foundations pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -36,49 +29,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 65.5 - metal: 354.5 - ryzen-4750u: - cpu: 19.8 - vulkan: 71 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2,620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline (HuggingFace transformers, Mac MPS): 17.88%; transcribe.cpp F32 matches exactly. Absolute WER is higher than general-purpose ASR (e.g. Whisper-base ~5%) because the model is fine-tuned for medical dictation — on the publisher's internal RAD-DICT / GENERAL-DICT / FM-DICT datasets the model scores 6.6%–9.3%, but those datasets are not publicly reproducible. Q8_0 is the recommended default (smallest preset with no statistically detectable WER degradation); Q4_K_M shows a real +0.26 pp degradation and is shipped for completeness but not recommended — prefer Q5_K_M if you need smaller than Q8_0. - -quants: - - name: F32 - filename: medasr-F32.gguf - size: 421 MB - wer: 17.88% - - name: F16 - filename: medasr-F16.gguf - size: 211 MB - wer: 17.88% - - name: Q8_0 - filename: medasr-Q8_0.gguf - size: 128 MB - wer: 17.86% - - name: Q6_K - filename: medasr-Q6_K.gguf - size: 106 MB - wer: 17.93% - - name: Q5_K_M - filename: medasr-Q5_K_M.gguf - size: 94 MB - wer: 17.91% - - name: Q4_K_M - filename: medasr-Q4_K_M.gguf - size: 83 MB - wer: 18.14% diff --git a/scripts/hf_cards/moonshine-base-ar.yaml b/scripts/hf_cards/moonshine-base-ar.yaml index caccaac5..5de1f1cd 100644 --- a/scripts/hf_cards/moonshine-base-ar.yaml +++ b/scripts/hf_cards/moonshine-base-ar.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-ar-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-base-ar -target_repo: handy-computer/moonshine-base-ar-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 264cc18 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ar tags: - gguf - transcribe.cpp @@ -36,24 +29,6 @@ summary: | default_quant_index: 2 # Q8_0 -metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-base (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 79.5 - cpu: 80.5 - ryzen-4750u: - vulkan: 34.5 - cpu: 22 - wer: metadata_key: fleurs_ar source: FLEURS ar test @@ -68,17 +43,3 @@ wer: same manifest: **24.51% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-base-ar-F32.gguf - size: 248 MB - wer: 24.45% - - name: F16 - filename: moonshine-base-ar-F16.gguf - size: 132 MB - wer: 24.45% - - name: Q8_0 - filename: moonshine-base-ar-Q8_0.gguf - size: 77 MB - wer: 24.50% diff --git a/scripts/hf_cards/moonshine-base-ja.yaml b/scripts/hf_cards/moonshine-base-ja.yaml index e7a04ea0..139b16d4 100644 --- a/scripts/hf_cards/moonshine-base-ja.yaml +++ b/scripts/hf_cards/moonshine-base-ja.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-ja-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-base-ja -target_repo: handy-computer/moonshine-base-ja-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: f9d4e6a pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ja tags: - gguf - transcribe.cpp @@ -36,24 +29,6 @@ summary: | default_quant_index: 2 # Q8_0 -metric: CER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-base (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 79.5 - cpu: 80.5 - ryzen-4750u: - vulkan: 34.5 - cpu: 22 - wer: metadata_key: fleurs_ja source: FLEURS ja test @@ -68,17 +43,3 @@ wer: same manifest: **10.69% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-base-ja-F32.gguf - size: 248 MB - wer: 10.84% - - name: F16 - filename: moonshine-base-ja-F16.gguf - size: 132 MB - wer: 10.81% - - name: Q8_0 - filename: moonshine-base-ja-Q8_0.gguf - size: 77 MB - wer: 10.53% diff --git a/scripts/hf_cards/moonshine-base-ko.yaml b/scripts/hf_cards/moonshine-base-ko.yaml index cbdf9115..fb59846a 100644 --- a/scripts/hf_cards/moonshine-base-ko.yaml +++ b/scripts/hf_cards/moonshine-base-ko.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-ko-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-base-ko -target_repo: handy-computer/moonshine-base-ko-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: fff6035 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ko tags: - gguf - transcribe.cpp @@ -36,24 +29,6 @@ summary: | default_quant_index: 2 # Q8_0 -metric: CER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-base (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 79.5 - cpu: 80.5 - ryzen-4750u: - vulkan: 34.5 - cpu: 22 - wer: metadata_key: fleurs_ko source: FLEURS ko test @@ -68,17 +43,3 @@ wer: same manifest: **8.19% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-base-ko-F32.gguf - size: 248 MB - wer: 8.00% - - name: F16 - filename: moonshine-base-ko-F16.gguf - size: 132 MB - wer: 8.00% - - name: Q8_0 - filename: moonshine-base-ko-Q8_0.gguf - size: 77 MB - wer: 8.13% diff --git a/scripts/hf_cards/moonshine-base-uk.yaml b/scripts/hf_cards/moonshine-base-uk.yaml index 8c8599e4..814bc333 100644 --- a/scripts/hf_cards/moonshine-base-uk.yaml +++ b/scripts/hf_cards/moonshine-base-uk.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-uk-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-base-uk -target_repo: handy-computer/moonshine-base-uk-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: a52b2e9 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - uk tags: - gguf - transcribe.cpp @@ -36,24 +29,6 @@ summary: | default_quant_index: 2 # Q8_0 -metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-base (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 79.5 - cpu: 80.5 - ryzen-4750u: - vulkan: 34.5 - cpu: 22 - wer: metadata_key: fleurs_uk source: FLEURS uk test @@ -68,17 +43,3 @@ wer: same manifest: **14.51% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-base-uk-F32.gguf - size: 248 MB - wer: 14.49% - - name: F16 - filename: moonshine-base-uk-F16.gguf - size: 132 MB - wer: 14.49% - - name: Q8_0 - filename: moonshine-base-uk-Q8_0.gguf - size: 77 MB - wer: 14.39% diff --git a/scripts/hf_cards/moonshine-base-vi.yaml b/scripts/hf_cards/moonshine-base-vi.yaml index 8a3c8186..eac24280 100644 --- a/scripts/hf_cards/moonshine-base-vi.yaml +++ b/scripts/hf_cards/moonshine-base-vi.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-vi-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-base-vi -target_repo: handy-computer/moonshine-base-vi-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 0ee9ce9 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - vi tags: - gguf - transcribe.cpp @@ -36,24 +29,6 @@ summary: | default_quant_index: 2 # Q8_0 -metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-base (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 79.5 - cpu: 80.5 - ryzen-4750u: - vulkan: 34.5 - cpu: 22 - wer: metadata_key: fleurs_vi source: FLEURS vi test @@ -68,17 +43,3 @@ wer: same manifest: **9.66% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-base-vi-F32.gguf - size: 248 MB - wer: 9.67% - - name: F16 - filename: moonshine-base-vi-F16.gguf - size: 132 MB - wer: 9.66% - - name: Q8_0 - filename: moonshine-base-vi-Q8_0.gguf - size: 77 MB - wer: 9.79% diff --git a/scripts/hf_cards/moonshine-base-zh.yaml b/scripts/hf_cards/moonshine-base-zh.yaml index 43fc7437..ccfec0e3 100644 --- a/scripts/hf_cards/moonshine-base-zh.yaml +++ b/scripts/hf_cards/moonshine-base-zh.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-zh-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-base-zh -target_repo: handy-computer/moonshine-base-zh-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 1df4f95 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - zh tags: - gguf - transcribe.cpp @@ -36,24 +29,6 @@ summary: | default_quant_index: 2 # Q8_0 -metric: CER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-base (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 79.5 - cpu: 80.5 - ryzen-4750u: - vulkan: 34.5 - cpu: 22 - wer: metadata_key: fleurs_zh source: FLEURS zh test @@ -68,17 +43,3 @@ wer: same manifest: **16.61% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-base-zh-F32.gguf - size: 248 MB - wer: 16.65% - - name: F16 - filename: moonshine-base-zh-F16.gguf - size: 132 MB - wer: 16.65% - - name: Q8_0 - filename: moonshine-base-zh-Q8_0.gguf - size: 77 MB - wer: 17.00% diff --git a/scripts/hf_cards/moonshine-base.yaml b/scripts/hf_cards/moonshine-base.yaml index 06d04470..2851beee 100644 --- a/scripts/hf_cards/moonshine-base.yaml +++ b/scripts/hf_cards/moonshine-base.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-base-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-base -target_repo: handy-computer/moonshine-base-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-base.md -upstream_commit: 7a73d8d pin_date: 2026-05-05 validation: @@ -13,11 +10,7 @@ validation: commit: 07a8a84 date: 2026-05-05 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -37,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 81.7 - metal: 79.5 - ryzen-4750u: - cpu: 22.2 - vulkan: 34.5 wer: source: LibriSpeech test-clean notes: | @@ -64,17 +41,3 @@ wer: to upstream within rounding and well within the ±1.00 pp Stage 7 acceptance gate. Q8_0 lands at 3.26%, slightly under F32 — that delta sits inside the 95% bootstrap CI and is noise, not a real improvement. - -quants: - - name: F32 - filename: moonshine-base-F32.gguf - size: 248 MB - wer: 3.28% - - name: F16 - filename: moonshine-base-F16.gguf - size: 132 MB - wer: 3.28% - - name: Q8_0 - filename: moonshine-base-Q8_0.gguf - size: 77 MB - wer: 3.26% diff --git a/scripts/hf_cards/moonshine-streaming-medium.yaml b/scripts/hf_cards/moonshine-streaming-medium.yaml index b10bc831..ee767482 100644 --- a/scripts/hf_cards/moonshine-streaming-medium.yaml +++ b/scripts/hf_cards/moonshine-streaming-medium.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-streaming-medium-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-streaming-medium -target_repo: handy-computer/moonshine-streaming-medium-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-streaming-medium.md -upstream_commit: 57b8436 pin_date: 2026-05-06 validation: @@ -13,11 +10,7 @@ validation: commit: 0d312ce date: 2026-05-06 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -39,22 +32,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 35.5 - metal: 62.9 - ryzen-4750u: - cpu: 7.7 - vulkan: 14.1 wer: source: LibriSpeech test-clean notes: | @@ -68,17 +45,3 @@ wer: found to be at 99.6% identical hypotheses to our port), and is not a numerical drift. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. - -quants: - - name: F32 - filename: moonshine-streaming-medium-F32.gguf - size: 1.07 GB - wer: 2.16% - - name: F16 - filename: moonshine-streaming-medium-F16.gguf - size: 534 MB - wer: 2.16% - - name: Q8_0 - filename: moonshine-streaming-medium-Q8_0.gguf - size: 296 MB - wer: 2.16% diff --git a/scripts/hf_cards/moonshine-streaming-small.yaml b/scripts/hf_cards/moonshine-streaming-small.yaml index 76c95df4..583b6f20 100644 --- a/scripts/hf_cards/moonshine-streaming-small.yaml +++ b/scripts/hf_cards/moonshine-streaming-small.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-streaming-small-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-streaming-small -target_repo: handy-computer/moonshine-streaming-small-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-streaming-small.md -upstream_commit: 2c03650 pin_date: 2026-05-06 validation: @@ -13,11 +10,7 @@ validation: commit: 0d312ce date: 2026-05-06 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -38,22 +31,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 56.9 - metal: 95.6 - ryzen-4750u: - cpu: 11.9 - vulkan: 23.2 wer: source: LibriSpeech test-clean notes: | @@ -66,17 +43,3 @@ wer: the same manifest, 99.6% identical hypotheses to our F32) and confirmed it is not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. - -quants: - - name: F32 - filename: moonshine-streaming-small-F32.gguf - size: 562 MB - wer: 2.53% - - name: F16 - filename: moonshine-streaming-small-F16.gguf - size: 282 MB - wer: 2.53% - - name: Q8_0 - filename: moonshine-streaming-small-Q8_0.gguf - size: 199 MB - wer: 2.54% diff --git a/scripts/hf_cards/moonshine-streaming-tiny.yaml b/scripts/hf_cards/moonshine-streaming-tiny.yaml index 3047c7b1..1c705fc5 100644 --- a/scripts/hf_cards/moonshine-streaming-tiny.yaml +++ b/scripts/hf_cards/moonshine-streaming-tiny.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-streaming-tiny-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-streaming-tiny -target_repo: handy-computer/moonshine-streaming-tiny-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-streaming-tiny.md -upstream_commit: f8e9dfd pin_date: 2026-05-06 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 0d312ce date: 2026-05-06 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -39,22 +32,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 210.8 - metal: 159 - ryzen-4750u: - cpu: 54.4 - vulkan: 59.2 wer: source: LibriSpeech test-clean notes: | @@ -67,17 +44,3 @@ wer: table; the +0.04pp residual is a scoring / text-normalization difference vs that methodology, not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. - -quants: - - name: F32 - filename: moonshine-streaming-tiny-F32.gguf - size: 178 MB - wer: 4.53% - - name: F16 - filename: moonshine-streaming-tiny-F16.gguf - size: 90 MB - wer: 4.53% - - name: Q8_0 - filename: moonshine-streaming-tiny-Q8_0.gguf - size: 50 MB - wer: 4.52% diff --git a/scripts/hf_cards/moonshine-tiny-ar.yaml b/scripts/hf_cards/moonshine-tiny-ar.yaml index 76e6235b..edd7e703 100644 --- a/scripts/hf_cards/moonshine-tiny-ar.yaml +++ b/scripts/hf_cards/moonshine-tiny-ar.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-ar-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-tiny-ar -target_repo: handy-computer/moonshine-tiny-ar-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 99e7fee pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ar tags: - gguf - transcribe.cpp @@ -36,24 +29,6 @@ summary: | default_quant_index: 2 # Q8_0 -metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-tiny (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 127 - cpu: 153.5 - ryzen-4750u: - vulkan: 56 - cpu: 45.5 - wer: metadata_key: fleurs_ar source: FLEURS ar test @@ -68,17 +43,3 @@ wer: same manifest: **27.13% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-tiny-ar-F32.gguf - size: 110 MB - wer: 27.11% - - name: F16 - filename: moonshine-tiny-ar-F16.gguf - size: 59 MB - wer: 27.11% - - name: Q8_0 - filename: moonshine-tiny-ar-Q8_0.gguf - size: 35 MB - wer: 26.79% diff --git a/scripts/hf_cards/moonshine-tiny-ja.yaml b/scripts/hf_cards/moonshine-tiny-ja.yaml index d396961c..7d41ffef 100644 --- a/scripts/hf_cards/moonshine-tiny-ja.yaml +++ b/scripts/hf_cards/moonshine-tiny-ja.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-ja-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-tiny-ja -target_repo: handy-computer/moonshine-tiny-ja-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 02ca41b pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ja tags: - gguf - transcribe.cpp @@ -36,24 +29,6 @@ summary: | default_quant_index: 2 # Q8_0 -metric: CER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-tiny (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 127 - cpu: 153.5 - ryzen-4750u: - vulkan: 56 - cpu: 45.5 - wer: metadata_key: fleurs_ja source: FLEURS ja test @@ -68,17 +43,3 @@ wer: same manifest: **13.23% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-tiny-ja-F32.gguf - size: 110 MB - wer: 13.20% - - name: F16 - filename: moonshine-tiny-ja-F16.gguf - size: 59 MB - wer: 13.20% - - name: Q8_0 - filename: moonshine-tiny-ja-Q8_0.gguf - size: 35 MB - wer: 13.36% diff --git a/scripts/hf_cards/moonshine-tiny-ko.yaml b/scripts/hf_cards/moonshine-tiny-ko.yaml index eb1dad6a..89d147a8 100644 --- a/scripts/hf_cards/moonshine-tiny-ko.yaml +++ b/scripts/hf_cards/moonshine-tiny-ko.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-ko-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-tiny-ko -target_repo: handy-computer/moonshine-tiny-ko-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 80995f0 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - ko tags: - gguf - transcribe.cpp @@ -36,24 +29,6 @@ summary: | default_quant_index: 2 # Q8_0 -metric: CER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-tiny (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 127 - cpu: 153.5 - ryzen-4750u: - vulkan: 56 - cpu: 45.5 - wer: metadata_key: fleurs_ko source: FLEURS ko test @@ -68,17 +43,3 @@ wer: same manifest: **8.99% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-tiny-ko-F32.gguf - size: 110 MB - wer: 8.97% - - name: F16 - filename: moonshine-tiny-ko-F16.gguf - size: 59 MB - wer: 8.97% - - name: Q8_0 - filename: moonshine-tiny-ko-Q8_0.gguf - size: 35 MB - wer: 8.98% diff --git a/scripts/hf_cards/moonshine-tiny-uk.yaml b/scripts/hf_cards/moonshine-tiny-uk.yaml index 2801dcb7..f93f4907 100644 --- a/scripts/hf_cards/moonshine-tiny-uk.yaml +++ b/scripts/hf_cards/moonshine-tiny-uk.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-uk-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-tiny-uk -target_repo: handy-computer/moonshine-tiny-uk-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: 8cf70f4 pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - uk tags: - gguf - transcribe.cpp @@ -36,24 +29,6 @@ summary: | default_quant_index: 2 # Q8_0 -metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-tiny (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 127 - cpu: 153.5 - ryzen-4750u: - vulkan: 56 - cpu: 45.5 - wer: metadata_key: fleurs_uk source: FLEURS uk test @@ -68,17 +43,3 @@ wer: same manifest: **18.86% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-tiny-uk-F32.gguf - size: 110 MB - wer: 18.83% - - name: F16 - filename: moonshine-tiny-uk-F16.gguf - size: 59 MB - wer: 18.82% - - name: Q8_0 - filename: moonshine-tiny-uk-Q8_0.gguf - size: 35 MB - wer: 18.89% diff --git a/scripts/hf_cards/moonshine-tiny-vi.yaml b/scripts/hf_cards/moonshine-tiny-vi.yaml index 9d1ce07f..a99564e3 100644 --- a/scripts/hf_cards/moonshine-tiny-vi.yaml +++ b/scripts/hf_cards/moonshine-tiny-vi.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-vi-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-tiny-vi -target_repo: handy-computer/moonshine-tiny-vi-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: d4d20da pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - vi tags: - gguf - transcribe.cpp @@ -36,24 +29,6 @@ summary: | default_quant_index: 2 # Q8_0 -metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-tiny (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 127 - cpu: 153.5 - ryzen-4750u: - vulkan: 56 - cpu: 45.5 - wer: metadata_key: fleurs_vi source: FLEURS vi test @@ -68,17 +43,3 @@ wer: same manifest: **13.18% WER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-tiny-vi-F32.gguf - size: 110 MB - wer: 13.16% - - name: F16 - filename: moonshine-tiny-vi-F16.gguf - size: 59 MB - wer: 13.17% - - name: Q8_0 - filename: moonshine-tiny-vi-Q8_0.gguf - size: 35 MB - wer: 13.16% diff --git a/scripts/hf_cards/moonshine-tiny-zh.yaml b/scripts/hf_cards/moonshine-tiny-zh.yaml index 701ca35e..ea3c0de3 100644 --- a/scripts/hf_cards/moonshine-tiny-zh.yaml +++ b/scripts/hf_cards/moonshine-tiny-zh.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-zh-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-tiny-zh -target_repo: handy-computer/moonshine-tiny-zh-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine.md -upstream_commit: "3306270" pin_date: 2026-05-12 validation: @@ -13,11 +10,7 @@ validation: commit: 90bf720 date: 2026-05-12 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - zh tags: - gguf - transcribe.cpp @@ -36,24 +29,6 @@ summary: | default_quant_index: 2 # Q8_0 -metric: CER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Perf inherited from moonshine-tiny (identical architecture; per- -# language RTF not separately benched). -perf: - m4-max: - metal: 127 - cpu: 153.5 - ryzen-4750u: - vulkan: 56 - cpu: 45.5 - wer: metadata_key: fleurs_zh source: FLEURS zh test @@ -68,17 +43,3 @@ wer: same manifest: **13.72% CER**. The C++ F32/F16 numbers above match the reference within bootstrap-CI noise; Q8_0 introduces a small additional drift from F16 (typically within 0.1pp). - -quants: - - name: F32 - filename: moonshine-tiny-zh-F32.gguf - size: 110 MB - wer: 13.70% - - name: F16 - filename: moonshine-tiny-zh-F16.gguf - size: 59 MB - wer: 13.70% - - name: Q8_0 - filename: moonshine-tiny-zh-Q8_0.gguf - size: 35 MB - wer: 13.78% diff --git a/scripts/hf_cards/moonshine-tiny.yaml b/scripts/hf_cards/moonshine-tiny.yaml index 169c03c1..35f3091f 100644 --- a/scripts/hf_cards/moonshine-tiny.yaml +++ b/scripts/hf_cards/moonshine-tiny.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/moonshine-tiny-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: UsefulSensors/moonshine-tiny -target_repo: handy-computer/moonshine-tiny-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moonshine-tiny.md -upstream_commit: 390624e pin_date: 2026-05-05 validation: @@ -13,11 +10,7 @@ validation: commit: 07a8a84 date: 2026-05-05 -license: mit -license_display: MIT pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -35,22 +28,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 153.6 - metal: 130.9 - ryzen-4750u: - cpu: 45.4 - vulkan: 54.9 wer: source: LibriSpeech test-clean notes: | @@ -61,17 +38,3 @@ wer: Our F32 reference baseline lands at 4.58%, within rounding of upstream and well within the ±1.00 pp Stage 7 acceptance gate. Q8_0 drift is +0.02 pp vs F32 — within bootstrap CI noise. - -quants: - - name: F32 - filename: moonshine-tiny-F32.gguf - size: 110 MB - wer: 4.58% - - name: F16 - filename: moonshine-tiny-F16.gguf - size: 59 MB - wer: 4.58% - - name: Q8_0 - filename: moonshine-tiny-Q8_0.gguf - size: 35 MB - wer: 4.60% diff --git a/scripts/hf_cards/moss-transcribe-diarize.yaml b/scripts/hf_cards/moss-transcribe-diarize.yaml index 0880b20a..aff0ca85 100644 --- a/scripts/hf_cards/moss-transcribe-diarize.yaml +++ b/scripts/hf_cards/moss-transcribe-diarize.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/MOSS-Transcribe-Diarize-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: OpenMOSS-Team/MOSS-Transcribe-Diarize -target_repo: handy-computer/MOSS-Transcribe-Diarize-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/moss-transcribe-diarize.md -upstream_commit: d7231bb pin_date: 2026-07-12 validation: @@ -13,12 +10,7 @@ validation: commit: 3f5e15c date: 2026-07-12 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - zh tags: - gguf - transcribe.cpp @@ -41,25 +33,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - diarize: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (xRT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. Values average the Q8_0 jfk and -# dots publication cells. -perf: - m4-max: - metal: 28.1 - cpu: 5.8 - ryzen-4750u: - vulkan: 3.0 - cpu: 1.6 - wer: source: LibriSpeech test-clean notes: | @@ -82,29 +55,3 @@ wer: Q5_K_M or higher if those tail failures matter. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py --dediarize`; public `full_text` applies equivalent marker removal. - -quants: - - name: BF16 - filename: MOSS-Transcribe-Diarize-BF16.gguf - size: 1.83 GB - wer: 2.08% - - name: F16 - filename: MOSS-Transcribe-Diarize-F16.gguf - size: 1.83 GB - wer: 2.07% - - name: Q8_0 - filename: MOSS-Transcribe-Diarize-Q8_0.gguf - size: 987 MB - wer: 1.93% - - name: Q6_K - filename: MOSS-Transcribe-Diarize-Q6_K.gguf - size: 768 MB - wer: 1.96% - - name: Q5_K_M - filename: MOSS-Transcribe-Diarize-Q5_K_M.gguf - size: 700 MB - wer: 1.99% - - name: Q4_K_M - filename: MOSS-Transcribe-Diarize-Q4_K_M.gguf - size: 617 MB - wer: 2.59% diff --git a/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml b/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml index 17e29646..f096c8bc 100644 --- a/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml +++ b/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/multitalker-parakeet-streaming-0.6b-v1 -target_repo: handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/multitalker-parakeet-streaming-0.6b-v1.md -upstream_commit: 8749fc7 pin_date: 2026-07-12 # Validation pin for the most recent upload. Updated on each release; @@ -15,18 +12,7 @@ validation: commit: 3083021 date: 2026-08-03 -# Upstream is the NVIDIA Open Model License (not a standard SPDX id), so -# the HF `license` field gets `other` and `license_name` / `license_link` -# carry the actual identifier + URL into the YAML frontmatter (HF prefers -# this when license=other). `license_display` is the human-facing form -# rendered in the README body. -license: other -license_name: nvidia-open-model-license -license_link: https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/ -license_display: NVIDIA Open Model License pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -46,24 +32,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - diarize: true - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (xRT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. Values average the Q8_0 jfk and -# dots publication cells. -perf: - m4-max: - cpu: 34.6 - metal: 180.9 - ryzen-4750u: - cpu: 13.2 - vulkan: 25.2 metrics: cpwer_ami_ihm_test: bundle_f32_kernel: 19.35 @@ -94,29 +62,3 @@ wer: -m bundle/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf \ meeting.wav ``` - -quants: - - name: F32 - filename: bundle/multitalker-parakeet-streaming-0.6b-v1-F32.gguf - size: 2.96 GB - wer: 2.19% - - name: F16 - filename: bundle/multitalker-parakeet-streaming-0.6b-v1-F16.gguf - size: 1.48 GB - wer: 2.19% - - name: Q8_0 - filename: bundle/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf - size: 873 MB - wer: 2.18% - - name: Q6_K - filename: bundle/multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf - size: 743 MB - wer: 2.20% - - name: Q5_K_M - filename: bundle/multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf - size: 681 MB - wer: 2.18% - - name: Q4_K_M - filename: bundle/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf - size: 617 MB - wer: 2.18% diff --git a/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml b/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml index 51511ba4..6e3fcd1f 100644 --- a/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml +++ b/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/nemotron-3.5-asr-streaming-0.6b -target_repo: handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/nemotron-3.5-asr-streaming-0.6b.md -upstream_commit: 24b151a pin_date: 2026-06-08 # Validation pin for the most recent upload. Updated on each release; @@ -15,48 +12,7 @@ validation: commit: 909e94e date: 2026-06-08 -# Upstream is OpenMDW-1.1, not a standard SPDX id, so the HF `license` -# field gets `other` and `license_name` / `license_link` carry the actual -# identifier + URL. `license_display` is the human-facing form. -license: other -license_name: openmdw-1.1 -license_link: https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b -license_display: OpenMDW-1.1 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - languages - -languages: - - en - - es - - fr - - it - - pt - - nl - - de - - tr - - ru - - ar - - hi - - ja - - ko - - vi - - uk - - pl - - sv - - cs - - nb - - da - - bg - - fi - - hr - - sk - - zh - - hu - - ro - - et tags: - gguf - transcribe.cpp @@ -74,22 +30,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: true - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 28.9 - metal: 98.5 - ryzen-4750u: - cpu: 7.5 - vulkan: 14.6 wer: metadata_key: fleurs_en source: FLEURS test en (en-US), offline att_context_size=[56, 13] @@ -102,29 +42,3 @@ wer: q6_k: 3.07 q5_k_m: 3.10 q4_k_m: 3.28 - -quants: - - name: F32 - filename: nemotron-3.5-asr-streaming-0.6b-F32.gguf - size: 2.55 GB - wer: 7.97% - - name: F16 - filename: nemotron-3.5-asr-streaming-0.6b-F16.gguf - size: 1.28 GB - wer: 7.97% - - name: Q8_0 - filename: nemotron-3.5-asr-streaming-0.6b-Q8_0.gguf - size: 751 MB - wer: 7.88% - - name: Q6_K - filename: nemotron-3.5-asr-streaming-0.6b-Q6_K.gguf - size: 621 MB - wer: 8.02% - - name: Q5_K_M - filename: nemotron-3.5-asr-streaming-0.6b-Q5_K_M.gguf - size: 560 MB - wer: 8.15% - - name: Q4_K_M - filename: nemotron-3.5-asr-streaming-0.6b-Q4_K_M.gguf - size: 496 MB - wer: 8.49% diff --git a/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml b/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml index 470dec21..7b2904d0 100644 --- a/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml +++ b/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/nemotron-speech-streaming-en-0.6b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/nemotron-speech-streaming-en-0.6b -target_repo: handy-computer/nemotron-speech-streaming-en-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/nemotron-speech-streaming-en-0.6b.md -upstream_commit: ef3bf40 pin_date: 2026-05-11 # Validation pin for the most recent upload. Updated on each release; @@ -15,18 +12,7 @@ validation: commit: 12f1076 date: 2026-05-11 -# Upstream is the NVIDIA Open Model License (not a standard SPDX id), so -# the HF `license` field gets `other` and `license_name` / `license_link` -# carry the actual identifier + URL into the YAML frontmatter (HF prefers -# this when license=other). `license_display` is the human-facing form -# rendered in the README body. -license: other -license_name: nvidia-open-model-license -license_link: https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/ -license_display: NVIDIA Open Model License pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -43,49 +29,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 30.9 - metal: 154.5 - ryzen-4750u: - cpu: 7.4 - vulkan: 12.8 wer: source: LibriSpeech test-clean, offline notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding. F32 reference baseline: 2.31%. NVIDIA's self-reported number on the same split at att_context_size=[70, 13] (1.12s chunk, w/o PnC) is 2.32%. - -quants: - - name: F32 - filename: nemotron-speech-streaming-en-0.6b-F32.gguf - size: 2.47 GB - wer: 2.31% - - name: F16 - filename: nemotron-speech-streaming-en-0.6b-F16.gguf - size: 1.24 GB - wer: 2.31% - - name: Q8_0 - filename: nemotron-speech-streaming-en-0.6b-Q8_0.gguf - size: 730 MB - wer: 2.31% - - name: Q6_K - filename: nemotron-speech-streaming-en-0.6b-Q6_K.gguf - size: 600 MB - wer: 2.29% - - name: Q5_K_M - filename: nemotron-speech-streaming-en-0.6b-Q5_K_M.gguf - size: 539 MB - wer: 2.34% - - name: Q4_K_M - filename: nemotron-speech-streaming-en-0.6b-Q4_K_M.gguf - size: 475 MB - wer: 2.38% diff --git a/scripts/hf_cards/parakeet-ctc-0.6b.yaml b/scripts/hf_cards/parakeet-ctc-0.6b.yaml index 0d012a51..dfa05bf4 100644 --- a/scripts/hf_cards/parakeet-ctc-0.6b.yaml +++ b/scripts/hf_cards/parakeet-ctc-0.6b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-ctc-0.6b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/parakeet-ctc-0.6b -target_repo: handy-computer/parakeet-ctc-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-ctc-0.6b.md -upstream_commit: ad09ba1 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -34,49 +27,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 30.3 - metal: 224.7 - ryzen-4750u: - cpu: 10 - vulkan: 22.4 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.87%. - -quants: - - name: F32 - filename: parakeet-ctc-0.6b-F32.gguf - size: 2.44 GB - wer: 1.87% - - name: F16 - filename: parakeet-ctc-0.6b-F16.gguf - size: 1.22 GB - wer: 1.87% - - name: Q8_0 - filename: parakeet-ctc-0.6b-Q8_0.gguf - size: 722 MB - wer: 1.87% - - name: Q6_K - filename: parakeet-ctc-0.6b-Q6_K.gguf - size: 594 MB - wer: 1.84% - - name: Q5_K_M - filename: parakeet-ctc-0.6b-Q5_K_M.gguf - size: 533 MB - wer: 1.87% - - name: Q4_K_M - filename: parakeet-ctc-0.6b-Q4_K_M.gguf - size: 469 MB - wer: 1.90% diff --git a/scripts/hf_cards/parakeet-ctc-1.1b.yaml b/scripts/hf_cards/parakeet-ctc-1.1b.yaml index 0b526bb8..e4890094 100644 --- a/scripts/hf_cards/parakeet-ctc-1.1b.yaml +++ b/scripts/hf_cards/parakeet-ctc-1.1b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-ctc-1.1b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/parakeet-ctc-1.1b -target_repo: handy-computer/parakeet-ctc-1.1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-ctc-1.1b.md -upstream_commit: a707e81 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -34,49 +27,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 17.8 - metal: 142.8 - ryzen-4750u: - cpu: 6 - vulkan: 14.2 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.85%. NVIDIA's self-reported number on the same split is 1.83%. - -quants: - - name: F32 - filename: parakeet-ctc-1.1b-F32.gguf - size: 4.25 GB - wer: 1.85% - - name: F16 - filename: parakeet-ctc-1.1b-F16.gguf - size: 2.13 GB - wer: 1.85% - - name: Q8_0 - filename: parakeet-ctc-1.1b-Q8_0.gguf - size: 1.26 GB - wer: 1.85% - - name: Q6_K - filename: parakeet-ctc-1.1b-Q6_K.gguf - size: 1.04 GB - wer: 1.85% - - name: Q5_K_M - filename: parakeet-ctc-1.1b-Q5_K_M.gguf - size: 929 MB - wer: 1.84% - - name: Q4_K_M - filename: parakeet-ctc-1.1b-Q4_K_M.gguf - size: 818 MB - wer: 1.90% diff --git a/scripts/hf_cards/parakeet-primeline.yaml b/scripts/hf_cards/parakeet-primeline.yaml index 4c0ff534..ee84b4f7 100644 --- a/scripts/hf_cards/parakeet-primeline.yaml +++ b/scripts/hf_cards/parakeet-primeline.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-primeline-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: primeline/parakeet-primeline -target_repo: handy-computer/parakeet-primeline-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-primeline.md -upstream_commit: 3f1a9bc pin_date: 2026-08-16 validation: @@ -13,40 +10,7 @@ validation: commit: 856d7c1 date: 2026-08-16 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - languages - -languages: - - de - - bg - - hr - - cs - - da - - nl - - en - - et - - fi - - fr - - el - - hu - - it - - lv - - lt - - mt - - pl - - pt - - ro - - ru - - sk - - sl - - es - - sv - - uk tags: - gguf - transcribe.cpp @@ -70,25 +34,6 @@ summary: | default_quant_index: 2 # Q8_0 -metric: WER -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: true - timestamps: token # none | segment | word | token - -# Perf inherited from parakeet-tdt-0.6b-v3. The checkpoint is a -# weights-only fine-tune whose encoder/decoder/joint config is identical, -# so RTF is unchanged; not separately benched. -perf: - m4-max: - metal: 151 - cpu: 28 - ryzen-4750u: - vulkan: 12.5 - cpu: 7.5 - wer: metadata_key: fleurs_de source: FLEURS de test @@ -111,29 +56,3 @@ wer: produces the same spellings on the same utterances. FLEURS references use `ß` throughout, which costs roughly 1.05pp: folding `ß`→`ss` on both sides gives 4.92% for the reference and 4.94% for F32. - -quants: - - name: F32 - filename: parakeet-primeline-F32.gguf - size: 2.51 GB - wer: 6.00% - - name: F16 - filename: parakeet-primeline-F16.gguf - size: 1.26 GB - wer: 6.00% - - name: Q8_0 - filename: parakeet-primeline-Q8_0.gguf - size: 740 MB - wer: 6.00% - - name: Q6_K - filename: parakeet-primeline-Q6_K.gguf - size: 610 MB - wer: 5.96% - - name: Q5_K_M - filename: parakeet-primeline-Q5_K_M.gguf - size: 549 MB - wer: 5.99% - - name: Q4_K_M - filename: parakeet-primeline-Q4_K_M.gguf - size: 485 MB - wer: 5.98% diff --git a/scripts/hf_cards/parakeet-rnnt-0.6b.yaml b/scripts/hf_cards/parakeet-rnnt-0.6b.yaml index bd19df6a..b5b0934a 100644 --- a/scripts/hf_cards/parakeet-rnnt-0.6b.yaml +++ b/scripts/hf_cards/parakeet-rnnt-0.6b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-rnnt-0.6b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/parakeet-rnnt-0.6b -target_repo: handy-computer/parakeet-rnnt-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-rnnt-0.6b.md -upstream_commit: c0c1f09 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -34,49 +27,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 30 - metal: 185.5 - ryzen-4750u: - cpu: 7.9 - vulkan: 14.4 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.62%. NVIDIA's self-reported number on the same split is 1.63%. - -quants: - - name: F32 - filename: parakeet-rnnt-0.6b-F32.gguf - size: 2.47 GB - wer: 1.62% - - name: F16 - filename: parakeet-rnnt-0.6b-F16.gguf - size: 1.24 GB - wer: 1.62% - - name: Q8_0 - filename: parakeet-rnnt-0.6b-Q8_0.gguf - size: 730 MB - wer: 1.62% - - name: Q6_K - filename: parakeet-rnnt-0.6b-Q6_K.gguf - size: 601 MB - wer: 1.62% - - name: Q5_K_M - filename: parakeet-rnnt-0.6b-Q5_K_M.gguf - size: 540 MB - wer: 1.62% - - name: Q4_K_M - filename: parakeet-rnnt-0.6b-Q4_K_M.gguf - size: 476 MB - wer: 1.66% diff --git a/scripts/hf_cards/parakeet-rnnt-1.1b.yaml b/scripts/hf_cards/parakeet-rnnt-1.1b.yaml index 3a61f7f8..c91d202b 100644 --- a/scripts/hf_cards/parakeet-rnnt-1.1b.yaml +++ b/scripts/hf_cards/parakeet-rnnt-1.1b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-rnnt-1.1b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/parakeet-rnnt-1.1b -target_repo: handy-computer/parakeet-rnnt-1.1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-rnnt-1.1b.md -upstream_commit: a07b19e pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -34,49 +27,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 17.5 - metal: 125.5 - ryzen-4750u: - cpu: 5.3 - vulkan: 10.7 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.45%. NVIDIA's self-reported number on the same split is 1.46%. - -quants: - - name: F32 - filename: parakeet-rnnt-1.1b-F32.gguf - size: 4.28 GB - wer: 1.45% - - name: F16 - filename: parakeet-rnnt-1.1b-F16.gguf - size: 2.15 GB - wer: 1.45% - - name: Q8_0 - filename: parakeet-rnnt-1.1b-Q8_0.gguf - size: 1.27 GB - wer: 1.46% - - name: Q6_K - filename: parakeet-rnnt-1.1b-Q6_K.gguf - size: 1.04 GB - wer: 1.43% - - name: Q5_K_M - filename: parakeet-rnnt-1.1b-Q5_K_M.gguf - size: 936 MB - wer: 1.43% - - name: Q4_K_M - filename: parakeet-rnnt-1.1b-Q4_K_M.gguf - size: 825 MB - wer: 1.41% diff --git a/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml b/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml index fce44754..3aa55e75 100644 --- a/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml +++ b/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-tdt-0.6b-v2-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/parakeet-tdt-0.6b-v2 -target_repo: handy-computer/parakeet-tdt-0.6b-v2-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt-0.6b-v2.md -upstream_commit: 1b149a3 pin_date: 2026-04-15 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: bf0d0b7 date: 2026-04-18 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -38,22 +31,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, hand-authored from the bench; -# published raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 29 - metal: 175 - ryzen-4750u: - cpu: 8 - vulkan: 15.4 wer: source: LibriSpeech test-clean # metadata_key: librispeech_test_clean # names the wer_ field; override when scored on another corpus @@ -62,29 +39,3 @@ wer: greedy transducer decoding and no external LM. F32 reference baseline: 1.68%. NVIDIA's self-reported number on the same split is 1.69%, so the F32 and Q8_0 ports match the upstream reference within rounding. - -quants: - - name: F32 - filename: parakeet-tdt-0.6b-v2-F32.gguf - size: 2.47 GB - wer: 1.68% - - name: F16 - filename: parakeet-tdt-0.6b-v2-F16.gguf - size: 1.24 GB - wer: 1.68% - - name: Q8_0 - filename: parakeet-tdt-0.6b-v2-Q8_0.gguf - size: 730 MB - wer: 1.69% - - name: Q6_K - filename: parakeet-tdt-0.6b-v2-Q6_K.gguf - size: 600 MB - wer: 1.70% - - name: Q5_K_M - filename: parakeet-tdt-0.6b-v2-Q5_K_M.gguf - size: 539 MB - wer: 1.70% - - name: Q4_K_M - filename: parakeet-tdt-0.6b-v2-Q4_K_M.gguf - size: 475 MB - wer: 1.72% diff --git a/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml b/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml index 36b4c421..ba414d62 100644 --- a/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml +++ b/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-tdt-0.6b-v3-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/parakeet-tdt-0.6b-v3 -target_repo: handy-computer/parakeet-tdt-0.6b-v3-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt-0.6b-v3.md -upstream_commit: 6d590f7 pin_date: 2026-04-16 # Validation pin for the most recent upload. Updated on each release — @@ -15,35 +12,7 @@ validation: commit: bf0d0b7 date: 2026-04-18 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - bg - - hr - - cs - - da - - nl - - en - - et - - fi - - fr - - de - - el - - hu - - it - - lv - - lt - - mt - - pl - - pt - - ro - - ru - - sk - - sl - - es - - sv - - uk tags: - gguf - transcribe.cpp @@ -63,51 +32,9 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: true - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 27.8 - metal: 153.7 - ryzen-4750u: - cpu: 7.4 - vulkan: 12.2 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy transducer decoding and no external LM. F32 reference baseline: 1.95%. NVIDIA's self-reported number on the same split is 1.93%. - -quants: - - name: F32 - filename: parakeet-tdt-0.6b-v3-F32.gguf - size: 2.51 GB - wer: 1.95% - - name: F16 - filename: parakeet-tdt-0.6b-v3-F16.gguf - size: 1.26 GB - wer: 1.95% - - name: Q8_0 - filename: parakeet-tdt-0.6b-v3-Q8_0.gguf - size: 740 MB - wer: 1.94% - - name: Q6_K - filename: parakeet-tdt-0.6b-v3-Q6_K.gguf - size: 610 MB - wer: 1.93% - - name: Q5_K_M - filename: parakeet-tdt-0.6b-v3-Q5_K_M.gguf - size: 549 MB - wer: 1.92% - - name: Q4_K_M - filename: parakeet-tdt-0.6b-v3-Q4_K_M.gguf - size: 485 MB - wer: 1.98% diff --git a/scripts/hf_cards/parakeet-tdt-1.1b.yaml b/scripts/hf_cards/parakeet-tdt-1.1b.yaml index 37178b4a..fde8dbd8 100644 --- a/scripts/hf_cards/parakeet-tdt-1.1b.yaml +++ b/scripts/hf_cards/parakeet-tdt-1.1b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-tdt-1.1b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/parakeet-tdt-1.1b -target_repo: handy-computer/parakeet-tdt-1.1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt-1.1b.md -upstream_commit: 53276c6 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -35,49 +28,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 17.5 - metal: 127.4 - ryzen-4750u: - cpu: 5.5 - vulkan: 11.6 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.39%. NVIDIA's self-reported number on the same split is 1.39%. - -quants: - - name: F32 - filename: parakeet-tdt-1.1b-F32.gguf - size: 4.28 GB - wer: 1.39% - - name: F16 - filename: parakeet-tdt-1.1b-F16.gguf - size: 2.15 GB - wer: 1.39% - - name: Q8_0 - filename: parakeet-tdt-1.1b-Q8_0.gguf - size: 1.27 GB - wer: 1.38% - - name: Q6_K - filename: parakeet-tdt-1.1b-Q6_K.gguf - size: 1.04 GB - wer: 1.40% - - name: Q5_K_M - filename: parakeet-tdt-1.1b-Q5_K_M.gguf - size: 936 MB - wer: 1.39% - - name: Q4_K_M - filename: parakeet-tdt-1.1b-Q4_K_M.gguf - size: 825 MB - wer: 1.42% diff --git a/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml b/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml index e5574bed..235e64cc 100644 --- a/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml +++ b/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-tdt_ctc-1.1b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/parakeet-tdt_ctc-1.1b -target_repo: handy-computer/parakeet-tdt_ctc-1.1b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt_ctc-1.1b.md -upstream_commit: '675e786' pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -35,49 +28,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 18.3 - metal: 123.9 - ryzen-4750u: - cpu: 5.4 - vulkan: 11.3 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.82%. - -quants: - - name: F32 - filename: parakeet-tdt_ctc-1.1b-F32.gguf - size: 4.28 GB - wer: 1.87% - - name: F16 - filename: parakeet-tdt_ctc-1.1b-F16.gguf - size: 2.15 GB - wer: 1.87% - - name: Q8_0 - filename: parakeet-tdt_ctc-1.1b-Q8_0.gguf - size: 1.27 GB - wer: 1.87% - - name: Q6_K - filename: parakeet-tdt_ctc-1.1b-Q6_K.gguf - size: 1.04 GB - wer: 1.87% - - name: Q5_K_M - filename: parakeet-tdt_ctc-1.1b-Q5_K_M.gguf - size: 936 MB - wer: 1.87% - - name: Q4_K_M - filename: parakeet-tdt_ctc-1.1b-Q4_K_M.gguf - size: 825 MB - wer: 1.91% diff --git a/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml b/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml index 3136d26b..a7c92e5c 100644 --- a/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml +++ b/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-tdt_ctc-110m-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/parakeet-tdt_ctc-110m -target_repo: handy-computer/parakeet-tdt_ctc-110m-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-tdt_ctc-110m.md -upstream_commit: 431a349 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -35,49 +28,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 113 - metal: 339.2 - ryzen-4750u: - cpu: 23.5 - vulkan: 32.5 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 2.43%. NVIDIA's self-reported number on the same split is 2.40%. - -quants: - - name: F32 - filename: parakeet-tdt_ctc-110m-F32.gguf - size: 457 MB - wer: 2.43% - - name: F16 - filename: parakeet-tdt_ctc-110m-F16.gguf - size: 229 MB - wer: 2.43% - - name: Q8_0 - filename: parakeet-tdt_ctc-110m-Q8_0.gguf - size: 135 MB - wer: 2.43% - - name: Q6_K - filename: parakeet-tdt_ctc-110m-Q6_K.gguf - size: 112 MB - wer: 2.44% - - name: Q5_K_M - filename: parakeet-tdt_ctc-110m-Q5_K_M.gguf - size: 101 MB - wer: 2.47% - - name: Q4_K_M - filename: parakeet-tdt_ctc-110m-Q4_K_M.gguf - size: 90 MB - wer: 2.53% diff --git a/scripts/hf_cards/parakeet-unified-en-0.6b.yaml b/scripts/hf_cards/parakeet-unified-en-0.6b.yaml index 6c859a3b..fbac9c55 100644 --- a/scripts/hf_cards/parakeet-unified-en-0.6b.yaml +++ b/scripts/hf_cards/parakeet-unified-en-0.6b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/parakeet-unified-en-0.6b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: nvidia/parakeet-unified-en-0.6b -target_repo: handy-computer/parakeet-unified-en-0.6b-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/parakeet-unified-en-0.6b.md -upstream_commit: d4ac992 pin_date: 2026-05-10 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: 42528dd date: 2026-05-10 -license: cc-by-4.0 -license_display: CC-BY-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -34,49 +27,7 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: false - timestamps: token # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 28.5 - metal: 163 - ryzen-4750u: - cpu: 7.5 - vulkan: 12.4 wer: source: LibriSpeech test-clean, offline notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.59%. NVIDIA's self-reported number on the same split is 1.63%. - -quants: - - name: F32 - filename: parakeet-unified-en-0.6b-F32.gguf - size: 2.47 GB - wer: 1.59% - - name: F16 - filename: parakeet-unified-en-0.6b-F16.gguf - size: 1.24 GB - wer: 1.59% - - name: Q8_0 - filename: parakeet-unified-en-0.6b-Q8_0.gguf - size: 731 MB - wer: 1.60% - - name: Q6_K - filename: parakeet-unified-en-0.6b-Q6_K.gguf - size: 602 MB - wer: 1.61% - - name: Q5_K_M - filename: parakeet-unified-en-0.6b-Q5_K_M.gguf - size: 541 MB - wer: 1.58% - - name: Q4_K_M - filename: parakeet-unified-en-0.6b-Q4_K_M.gguf - size: 477 MB - wer: 1.62% diff --git a/scripts/hf_cards/qwen3-asr-0.6b.yaml b/scripts/hf_cards/qwen3-asr-0.6b.yaml index cfdfa154..6f177e51 100644 --- a/scripts/hf_cards/qwen3-asr-0.6b.yaml +++ b/scripts/hf_cards/qwen3-asr-0.6b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/qwen3-asr-0.6b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: Qwen/Qwen3-ASR-0.6B -target_repo: handy-computer/Qwen3-ASR-0.6B-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/qwen3-asr-0.6b.md -upstream_commit: 5eb144179a02acc5e5ba31e748d22b0cf3e303b0 pin_date: 2026-04-19 # Validation pin for the most recent upload. Updated on each release — @@ -15,40 +12,7 @@ validation: commit: 3f61df7 date: 2026-04-20 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - zh - - en - - yue - - ar - - de - - fr - - es - - pt - - id - - it - - ko - - ru - - th - - vi - - ja - - tr - - hi - - ms - - nl - - sv - - da - - fi - - pl - - cs - - fil - - fa - - el - - ro - - hu - - mk tags: - gguf - transcribe.cpp @@ -67,22 +31,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: true - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 16.5 - metal: 65 - ryzen-4750u: - cpu: 4.4 - vulkan: 8 wer: source: LibriSpeech test-clean notes: | @@ -93,29 +41,3 @@ wer: are all within bootstrap CI of each other; Q5_K_M and Q4_K_M show a small but real regression driven by the tied token-embedding / head. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. - -quants: - - name: BF16 - filename: Qwen3-ASR-0.6B-BF16.gguf - size: 1.57 GB - wer: 2.12% - - name: F16 - filename: Qwen3-ASR-0.6B-F16.gguf - size: 1.58 GB - wer: 2.12% - - name: Q8_0 - filename: Qwen3-ASR-0.6B-Q8_0.gguf - size: 850 MB - wer: 2.11% - - name: Q6_K - filename: Qwen3-ASR-0.6B-Q6_K.gguf - size: 690 MB - wer: 2.11% - - name: Q5_K_M - filename: Qwen3-ASR-0.6B-Q5_K_M.gguf - size: 645 MB - wer: 2.21% - - name: Q4_K_M - filename: Qwen3-ASR-0.6B-Q4_K_M.gguf - size: 590 MB - wer: 2.26% diff --git a/scripts/hf_cards/qwen3-asr-1.7b.yaml b/scripts/hf_cards/qwen3-asr-1.7b.yaml index 04d721b9..3569f5d9 100644 --- a/scripts/hf_cards/qwen3-asr-1.7b.yaml +++ b/scripts/hf_cards/qwen3-asr-1.7b.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/qwen3-asr-1.7b-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: Qwen/Qwen3-ASR-1.7B -target_repo: handy-computer/Qwen3-ASR-1.7B-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/qwen3-asr-1.7b.md -upstream_commit: 7278e1e70fe206f11671096ffdd38061171dd6e5 pin_date: 2026-04-19 # Validation pin for the most recent upload. Updated on each release — @@ -15,40 +12,7 @@ validation: commit: 3f61df7 date: 2026-04-20 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - zh - - en - - yue - - ar - - de - - fr - - es - - pt - - id - - it - - ko - - ru - - th - - vi - - ja - - tr - - hi - - ms - - nl - - sv - - da - - fi - - pl - - cs - - fil - - fa - - el - - ro - - hu - - mk tags: - gguf - transcribe.cpp @@ -69,22 +33,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: true - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 8 - metal: 39.5 - ryzen-4750u: - cpu: 2 - vulkan: 3.9 wer: source: LibriSpeech test-clean notes: | @@ -96,29 +44,3 @@ wer: Q6_K / Q5_K_M are all within bootstrap CI of each other, and Q4_K_M regresses only ~0.2 WER points. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. - -quants: - - name: BF16 - filename: Qwen3-ASR-1.7B-BF16.gguf - size: 4.08 GB - wer: 1.62% - - name: F16 - filename: Qwen3-ASR-1.7B-F16.gguf - size: 4.09 GB - wer: 1.62% - - name: Q8_0 - filename: Qwen3-ASR-1.7B-Q8_0.gguf - size: 2.19 GB - wer: 1.62% - - name: Q6_K - filename: Qwen3-ASR-1.7B-Q6_K.gguf - size: 1.69 GB - wer: 1.65% - - name: Q5_K_M - filename: Qwen3-ASR-1.7B-Q5_K_M.gguf - size: 1.52 GB - wer: 1.65% - - name: Q4_K_M - filename: Qwen3-ASR-1.7B-Q4_K_M.gguf - size: 1.32 GB - wer: 1.81% diff --git a/scripts/hf_cards/sensevoice-small.yaml b/scripts/hf_cards/sensevoice-small.yaml index 5f118a3c..fe75e7bb 100644 --- a/scripts/hf_cards/sensevoice-small.yaml +++ b/scripts/hf_cards/sensevoice-small.yaml @@ -1,12 +1,8 @@ # Spec for the HF README of handy-computer/SenseVoiceSmall-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: FunAudioLLM/SenseVoiceSmall -target_repo: handy-computer/SenseVoiceSmall-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/sensevoice-small.md -# Pinned at intake (Stage 1). -upstream_commit: 3eb3b4eeffc2f2dde6051b853983753db33e35c3 pin_date: 2026-05-06 # Validation pin for the most recent upload. Updated on each release — @@ -16,20 +12,7 @@ validation: commit: f094d28 date: 2026-05-06 -# Upstream license is "model-license" (FunASR's MODEL_LICENSE), not a -# standard SPDX id. The HF YAML field accepts a free-form `other` plus a -# license_name / license_link override on the upstream card; the renderer -# emits `license: other` and surfaces the human-facing form via -# `license_display`. -license: other -license_display: model-license (FunASR MODEL_LICENSE) pipeline_tag: automatic-speech-recognition -languages: - - zh - - yue - - en - - ja - - ko tags: - gguf - transcribe.cpp @@ -52,22 +35,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: true - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 51.5 - metal: 289.5 - ryzen-4750u: - cpu: 15.9 - vulkan: 33.9 wer: source: LibriSpeech test-clean notes: | @@ -79,29 +46,3 @@ wer: that baseline within +0.002 percentage-points. LibriSpeech is an English benchmark; SenseVoice's strongest case is Mandarin, and AISHELL-1 (CER) is the recommended complementary check. - -quants: - - name: F32 - filename: SenseVoiceSmall-F32.gguf - size: 937 MB - wer: 3.13% - - name: F16 - filename: SenseVoiceSmall-F16.gguf - size: 470 MB - wer: 3.13% - - name: Q8_0 - filename: SenseVoiceSmall-Q8_0.gguf - size: 253 MB - wer: 3.13% - - name: Q6_K - filename: SenseVoiceSmall-Q6_K.gguf - size: 196 MB - wer: 3.14% - - name: Q5_K_M - filename: SenseVoiceSmall-Q5_K_M.gguf - size: 172 MB - wer: 3.18% - - name: Q4_K_M - filename: SenseVoiceSmall-Q4_K_M.gguf - size: 146 MB - wer: 3.45% diff --git a/scripts/hf_cards/voxtral-mini-3b-2507.yaml b/scripts/hf_cards/voxtral-mini-3b-2507.yaml index 368b9808..abf6e0a5 100644 --- a/scripts/hf_cards/voxtral-mini-3b-2507.yaml +++ b/scripts/hf_cards/voxtral-mini-3b-2507.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/Voxtral-Mini-3B-2507-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: mistralai/Voxtral-Mini-3B-2507 -target_repo: handy-computer/Voxtral-Mini-3B-2507-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/voxtral-mini-3b-2507.md -upstream_commit: "3060fe3" pin_date: 2026-06-06 # Validation pin for the most recent upload. Updated on each release — @@ -15,18 +12,7 @@ validation: commit: 483c122 date: 2026-06-06 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - de - - es - - it - - pt - - nl - - hi tags: - gguf - transcribe.cpp @@ -48,23 +34,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 14.9 - cpu: 2 - ryzen-4750u: - vulkan: 1.2 - cpu: 0.5 - wer: source: LibriSpeech test-clean notes: | @@ -75,29 +44,3 @@ wer: 1.87%; the BF16 GGUF matches within rounding. The BF16-vs-reference parity is the family's tensor-level numerical gate — 43 checkpointed tensors within tolerance, transcript byte-exact. - -quants: - - name: BF16 - filename: Voxtral-Mini-3B-2507-BF16.gguf - size: 9.37 GB - wer: 1.88% - - name: F16 - filename: Voxtral-Mini-3B-2507-F16.gguf - size: 9.38 GB - wer: 1.89% - - name: Q8_0 - filename: Voxtral-Mini-3B-2507-Q8_0.gguf - size: 5.00 GB - wer: 1.87% - - name: Q6_K - filename: Voxtral-Mini-3B-2507-Q6_K.gguf - size: 3.87 GB - wer: 1.87% - - name: Q5_K_M - filename: Voxtral-Mini-3B-2507-Q5_K_M.gguf - size: 3.46 GB - wer: 1.91% - - name: Q4_K_M - filename: Voxtral-Mini-3B-2507-Q4_K_M.gguf - size: 2.98 GB - wer: 1.94% diff --git a/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml b/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml index 17ccce9c..44553c02 100644 --- a/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml +++ b/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/Voxtral-Mini-4B-Realtime-2602-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: mistralai/Voxtral-Mini-4B-Realtime-2602 -target_repo: handy-computer/Voxtral-Mini-4B-Realtime-2602-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/voxtral-realtime.md -upstream_commit: "2769294" pin_date: 2026-06-06 # Validation pin for the most recent upload. Updated on each release — @@ -15,23 +12,7 @@ validation: commit: 483c122 date: 2026-06-06 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - es - - de - - ru - - zh - - ja - - it - - pt - - nl - - ar - - hi - - ko tags: - gguf - transcribe.cpp @@ -56,23 +37,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: true - translate: false - lang_detect: true - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 8.6 - cpu: 2.5 - ryzen-4750u: - vulkan: 0.9 - cpu: 0.6 - wer: source: LibriSpeech test-clean notes: | @@ -85,29 +49,3 @@ wer: (2.07-2.09%), so the quantization ladder is WER-neutral down to Q4_K_M. The model is multilingual (13 languages, auto-detect); the published WER is English only. - -quants: - - name: BF16 - filename: Voxtral-Mini-4B-Realtime-2602-BF16.gguf - size: 8.87 GB - wer: 2.08% - - name: F16 - filename: Voxtral-Mini-4B-Realtime-2602-F16.gguf - size: 8.88 GB - wer: 2.09% - - name: Q8_0 - filename: Voxtral-Mini-4B-Realtime-2602-Q8_0.gguf - size: 4.73 GB - wer: 2.07% - - name: Q6_K - filename: Voxtral-Mini-4B-Realtime-2602-Q6_K.gguf - size: 3.66 GB - wer: 2.08% - - name: Q5_K_M - filename: Voxtral-Mini-4B-Realtime-2602-Q5_K_M.gguf - size: 3.28 GB - wer: 2.08% - - name: Q4_K_M - filename: Voxtral-Mini-4B-Realtime-2602-Q4_K_M.gguf - size: 2.83 GB - wer: 2.08% diff --git a/scripts/hf_cards/voxtral-small-24b-2507.yaml b/scripts/hf_cards/voxtral-small-24b-2507.yaml index 85b5f481..04a0a4ce 100644 --- a/scripts/hf_cards/voxtral-small-24b-2507.yaml +++ b/scripts/hf_cards/voxtral-small-24b-2507.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/Voxtral-Small-24B-2507-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: mistralai/Voxtral-Small-24B-2507 -target_repo: handy-computer/Voxtral-Small-24B-2507-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/voxtral-small-24b-2507.md -upstream_commit: da5b424 pin_date: 2026-06-05 # Validation pin for the most recent upload. Updated on each release — @@ -15,18 +12,7 @@ validation: commit: dac22fa date: 2026-06-05 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en - - fr - - de - - es - - it - - pt - - nl - - hi tags: - gguf - transcribe.cpp @@ -46,19 +32,6 @@ summary: | default_quant_index: 2 # Q8_0 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 3.2 - wer: source: LibriSpeech test-clean notes: | @@ -69,29 +42,3 @@ wer: at 1.56%. Validation for this variant is end-to-end by WER — the family's tensor-level numerical parity is established by the Voxtral Mini 3B sibling (identical architecture). - -quants: - - name: BF16 - filename: Voxtral-Small-24B-2507-BF16.gguf - size: 48.54 GB - wer: 1.56% - - name: F16 - filename: Voxtral-Small-24B-2507-F16.gguf - size: 48.55 GB - wer: 1.57% - - name: Q8_0 - filename: Voxtral-Small-24B-2507-Q8_0.gguf - size: 25.81 GB - wer: 1.56% - - name: Q6_K - filename: Voxtral-Small-24B-2507-Q6_K.gguf - size: 19.94 GB - wer: 1.58% - - name: Q5_K_M - filename: Voxtral-Small-24B-2507-Q5_K_M.gguf - size: 17.14 GB - wer: 1.60% - - name: Q4_K_M - filename: Voxtral-Small-24B-2507-Q4_K_M.gguf - size: 14.30 GB - wer: 2.11% diff --git a/scripts/hf_cards/whisper-base.en.yaml b/scripts/hf_cards/whisper-base.en.yaml index 0ab944e2..17e201a3 100644 --- a/scripts/hf_cards/whisper-base.en.yaml +++ b/scripts/hf_cards/whisper-base.en.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-base.en-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: openai/whisper-base.en -target_repo: handy-computer/whisper-base.en-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-base.en.md -upstream_commit: 911407f pin_date: 2026-04-25 validation: @@ -13,11 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - "en" tags: - gguf - transcribe.cpp @@ -32,50 +25,7 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 211.9 - cpu: 38.2 - ryzen-4750u: - vulkan: 36.2 - cpu: 12.8 - wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 4.25%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-base.en-F32.gguf - size: 292 MB - wer: 4.30% - - name: F16 - filename: whisper-base.en-F16.gguf - size: 151 MB - wer: 4.13% - - name: Q8_0 - filename: whisper-base.en-Q8_0.gguf - size: 85 MB - wer: 4.16% - - name: Q6_K - filename: whisper-base.en-Q6_K.gguf - size: 68 MB - wer: 4.15% - - name: Q5_K_M - filename: whisper-base.en-Q5_K_M.gguf - size: 64 MB - wer: 4.16% - - name: Q4_K_M - filename: whisper-base.en-Q4_K_M.gguf - size: 59 MB - wer: 4.29% diff --git a/scripts/hf_cards/whisper-base.yaml b/scripts/hf_cards/whisper-base.yaml index 6a125b56..941187c8 100644 --- a/scripts/hf_cards/whisper-base.yaml +++ b/scripts/hf_cards/whisper-base.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-base-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: openai/whisper-base -target_repo: handy-computer/whisper-base-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-base.md -upstream_commit: e37978b pin_date: 2026-04-25 validation: @@ -13,114 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - languages - -languages: - - "en" - - "zh" - - "de" - - "es" - - "ru" - - "ko" - - "fr" - - "ja" - - "pt" - - "tr" - - "pl" - - "ca" - - "nl" - - "ar" - - "sv" - - "it" - - "id" - - "hi" - - "fi" - - "vi" - - "he" - - "uk" - - "el" - - "ms" - - "cs" - - "ro" - - "da" - - "hu" - - "ta" - - "no" - - "th" - - "ur" - - "hr" - - "bg" - - "lt" - - "la" - - "mi" - - "ml" - - "cy" - - "sk" - - "te" - - "fa" - - "lv" - - "bn" - - "sr" - - "az" - - "sl" - - "kn" - - "et" - - "mk" - - "br" - - "eu" - - "is" - - "hy" - - "ne" - - "mn" - - "bs" - - "kk" - - "sq" - - "sw" - - "gl" - - "mr" - - "pa" - - "si" - - "km" - - "sn" - - "yo" - - "so" - - "af" - - "oc" - - "ka" - - "be" - - "tg" - - "sd" - - "gu" - - "am" - - "yi" - - "lo" - - "uz" - - "fo" - - "ht" - - "ps" - - "tk" - - "nn" - - "mt" - - "sa" - - "lb" - - "my" - - "bo" - - "tl" - - "mg" - - "as" - - "tt" - - "haw" - - "ln" - - "ha" - - "ba" - - "jw" - - "su" tags: - gguf - transcribe.cpp @@ -134,50 +24,7 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 209.4 - cpu: 36.6 - ryzen-4750u: - vulkan: 34.8 - cpu: 11.9 - wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.009%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-base-F32.gguf - size: 292 MB - wer: 5.11% - - name: F16 - filename: whisper-base-F16.gguf - size: 151 MB - wer: 5.10% - - name: Q8_0 - filename: whisper-base-Q8_0.gguf - size: 85 MB - wer: 5.12% - - name: Q6_K - filename: whisper-base-Q6_K.gguf - size: 68 MB - wer: 5.11% - - name: Q5_K_M - filename: whisper-base-Q5_K_M.gguf - size: 64 MB - wer: 5.19% - - name: Q4_K_M - filename: whisper-base-Q4_K_M.gguf - size: 59 MB - wer: 5.36% diff --git a/scripts/hf_cards/whisper-large-v2.yaml b/scripts/hf_cards/whisper-large-v2.yaml index cfbdc4c1..6293ef3a 100644 --- a/scripts/hf_cards/whisper-large-v2.yaml +++ b/scripts/hf_cards/whisper-large-v2.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-large-v2-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: openai/whisper-large-v2 -target_repo: handy-computer/whisper-large-v2-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large-v2.md -upstream_commit: ae46427 pin_date: 2026-04-25 validation: @@ -13,114 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - languages - -languages: - - "en" - - "zh" - - "de" - - "es" - - "ru" - - "ko" - - "fr" - - "ja" - - "pt" - - "tr" - - "pl" - - "ca" - - "nl" - - "ar" - - "sv" - - "it" - - "id" - - "hi" - - "fi" - - "vi" - - "he" - - "uk" - - "el" - - "ms" - - "cs" - - "ro" - - "da" - - "hu" - - "ta" - - "no" - - "th" - - "ur" - - "hr" - - "bg" - - "lt" - - "la" - - "mi" - - "ml" - - "cy" - - "sk" - - "te" - - "fa" - - "lv" - - "bn" - - "sr" - - "az" - - "sl" - - "kn" - - "et" - - "mk" - - "br" - - "eu" - - "is" - - "hy" - - "ne" - - "mn" - - "bs" - - "kk" - - "sq" - - "sw" - - "gl" - - "mr" - - "pa" - - "si" - - "km" - - "sn" - - "yo" - - "so" - - "af" - - "oc" - - "ka" - - "be" - - "tg" - - "sd" - - "gu" - - "am" - - "yi" - - "lo" - - "uz" - - "fo" - - "ht" - - "ps" - - "tk" - - "nn" - - "mt" - - "sa" - - "lb" - - "my" - - "bo" - - "tl" - - "mg" - - "as" - - "tt" - - "haw" - - "ln" - - "ha" - - "ba" - - "jw" - - "su" tags: - gguf - transcribe.cpp @@ -134,49 +24,7 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 1.5 - metal: 24 - ryzen-4750u: - cpu: 0.6 - vulkan: 2.1 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.83%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-large-v2-F32.gguf - size: 6.18 GB - wer: 2.67% - - name: F16 - filename: whisper-large-v2-F16.gguf - size: 3.11 GB - wer: 2.68% - - name: Q8_0 - filename: whisper-large-v2-Q8_0.gguf - size: 1.67 GB - wer: 2.97% - - name: Q6_K - filename: whisper-large-v2-Q6_K.gguf - size: 1.30 GB - wer: 2.83% - - name: Q5_K_M - filename: whisper-large-v2-Q5_K_M.gguf - size: 1.16 GB - wer: 2.71% - - name: Q4_K_M - filename: whisper-large-v2-Q4_K_M.gguf - size: 997 MB - wer: 2.46% diff --git a/scripts/hf_cards/whisper-large-v3-turbo.yaml b/scripts/hf_cards/whisper-large-v3-turbo.yaml index 6dd853bd..c8f564e1 100644 --- a/scripts/hf_cards/whisper-large-v3-turbo.yaml +++ b/scripts/hf_cards/whisper-large-v3-turbo.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-large-v3-turbo-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: openai/whisper-large-v3-turbo -target_repo: handy-computer/whisper-large-v3-turbo-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large-v3-turbo.md -upstream_commit: 41f01f3 pin_date: 2026-04-25 validation: @@ -13,115 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - languages - -languages: - - "en" - - "zh" - - "de" - - "es" - - "ru" - - "ko" - - "fr" - - "ja" - - "pt" - - "tr" - - "pl" - - "ca" - - "nl" - - "ar" - - "sv" - - "it" - - "id" - - "hi" - - "fi" - - "vi" - - "he" - - "uk" - - "el" - - "ms" - - "cs" - - "ro" - - "da" - - "hu" - - "ta" - - "no" - - "th" - - "ur" - - "hr" - - "bg" - - "lt" - - "la" - - "mi" - - "ml" - - "cy" - - "sk" - - "te" - - "fa" - - "lv" - - "bn" - - "sr" - - "az" - - "sl" - - "kn" - - "et" - - "mk" - - "br" - - "eu" - - "is" - - "hy" - - "ne" - - "mn" - - "bs" - - "kk" - - "sq" - - "sw" - - "gl" - - "mr" - - "pa" - - "si" - - "km" - - "sn" - - "yo" - - "so" - - "af" - - "oc" - - "ka" - - "be" - - "tg" - - "sd" - - "gu" - - "am" - - "yi" - - "lo" - - "uz" - - "fo" - - "ht" - - "ps" - - "tk" - - "nn" - - "mt" - - "sa" - - "lb" - - "my" - - "bo" - - "tl" - - "mg" - - "as" - - "tt" - - "haw" - - "ln" - - "ha" - - "ba" - - "jw" - - "su" - - "yue" tags: - gguf - transcribe.cpp @@ -135,45 +24,7 @@ summary: | default_quant_index: 1 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 1.9 - metal: 46.3 - ryzen-4750u: - cpu: 0.7 - vulkan: 2.9 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.10%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F16 - filename: whisper-large-v3-turbo-F16.gguf - size: 1.63 GB - wer: 2.01% - - name: Q8_0 - filename: whisper-large-v3-turbo-Q8_0.gguf - size: 886 MB - wer: 2.01% - - name: Q6_K - filename: whisper-large-v3-turbo-Q6_K.gguf - size: 693 MB - wer: 2.01% - - name: Q5_K_M - filename: whisper-large-v3-turbo-Q5_K_M.gguf - size: 620 MB - wer: 2.03% - - name: Q4_K_M - filename: whisper-large-v3-turbo-Q4_K_M.gguf - size: 536 MB - wer: 2.04% diff --git a/scripts/hf_cards/whisper-large-v3.yaml b/scripts/hf_cards/whisper-large-v3.yaml index f4aaf085..4454c6c7 100644 --- a/scripts/hf_cards/whisper-large-v3.yaml +++ b/scripts/hf_cards/whisper-large-v3.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-large-v3-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: openai/whisper-large-v3 -target_repo: handy-computer/whisper-large-v3-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large-v3.md -upstream_commit: 06f233f pin_date: 2026-04-25 validation: @@ -13,115 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - languages - -languages: - - "en" - - "zh" - - "de" - - "es" - - "ru" - - "ko" - - "fr" - - "ja" - - "pt" - - "tr" - - "pl" - - "ca" - - "nl" - - "ar" - - "sv" - - "it" - - "id" - - "hi" - - "fi" - - "vi" - - "he" - - "uk" - - "el" - - "ms" - - "cs" - - "ro" - - "da" - - "hu" - - "ta" - - "no" - - "th" - - "ur" - - "hr" - - "bg" - - "lt" - - "la" - - "mi" - - "ml" - - "cy" - - "sk" - - "te" - - "fa" - - "lv" - - "bn" - - "sr" - - "az" - - "sl" - - "kn" - - "et" - - "mk" - - "br" - - "eu" - - "is" - - "hy" - - "ne" - - "mn" - - "bs" - - "kk" - - "sq" - - "sw" - - "gl" - - "mr" - - "pa" - - "si" - - "km" - - "sn" - - "yo" - - "so" - - "af" - - "oc" - - "ka" - - "be" - - "tg" - - "sd" - - "gu" - - "am" - - "yi" - - "lo" - - "uz" - - "fo" - - "ht" - - "ps" - - "tk" - - "nn" - - "mt" - - "sa" - - "lb" - - "my" - - "bo" - - "tl" - - "mg" - - "as" - - "tt" - - "haw" - - "ln" - - "ha" - - "ba" - - "jw" - - "su" - - "yue" tags: - gguf - transcribe.cpp @@ -135,45 +24,7 @@ summary: | default_quant_index: 1 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 1.5 - metal: 23.5 - ryzen-4750u: - cpu: 0.6 - vulkan: 2.1 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.01%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F16 - filename: whisper-large-v3-F16.gguf - size: 3.11 GB - wer: 1.81% - - name: Q8_0 - filename: whisper-large-v3-Q8_0.gguf - size: 1.67 GB - wer: 1.82% - - name: Q6_K - filename: whisper-large-v3-Q6_K.gguf - size: 1.30 GB - wer: 1.83% - - name: Q5_K_M - filename: whisper-large-v3-Q5_K_M.gguf - size: 1.16 GB - wer: 1.84% - - name: Q4_K_M - filename: whisper-large-v3-Q4_K_M.gguf - size: 997 MB - wer: 1.86% diff --git a/scripts/hf_cards/whisper-large.yaml b/scripts/hf_cards/whisper-large.yaml index 1739b2df..2701193a 100644 --- a/scripts/hf_cards/whisper-large.yaml +++ b/scripts/hf_cards/whisper-large.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-large-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: openai/whisper-large -target_repo: handy-computer/whisper-large-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-large.md -upstream_commit: 4ef9b41 pin_date: 2026-04-25 validation: @@ -13,114 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - languages - -languages: - - "en" - - "zh" - - "de" - - "es" - - "ru" - - "ko" - - "fr" - - "ja" - - "pt" - - "tr" - - "pl" - - "ca" - - "nl" - - "ar" - - "sv" - - "it" - - "id" - - "hi" - - "fi" - - "vi" - - "he" - - "uk" - - "el" - - "ms" - - "cs" - - "ro" - - "da" - - "hu" - - "ta" - - "no" - - "th" - - "ur" - - "hr" - - "bg" - - "lt" - - "la" - - "mi" - - "ml" - - "cy" - - "sk" - - "te" - - "fa" - - "lv" - - "bn" - - "sr" - - "az" - - "sl" - - "kn" - - "et" - - "mk" - - "br" - - "eu" - - "is" - - "hy" - - "ne" - - "mn" - - "bs" - - "kk" - - "sq" - - "sw" - - "gl" - - "mr" - - "pa" - - "si" - - "km" - - "sn" - - "yo" - - "so" - - "af" - - "oc" - - "ka" - - "be" - - "tg" - - "sd" - - "gu" - - "am" - - "yi" - - "lo" - - "uz" - - "fo" - - "ht" - - "ps" - - "tk" - - "nn" - - "mt" - - "sa" - - "lb" - - "my" - - "bo" - - "tl" - - "mg" - - "as" - - "tt" - - "haw" - - "ln" - - "ha" - - "ba" - - "jw" - - "su" tags: - gguf - transcribe.cpp @@ -134,50 +24,7 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 24.9 - cpu: 1.5 - ryzen-4750u: - vulkan: 2.1 - cpu: 0.5 - wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.73%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-large-F32.gguf - size: 6.18 GB - wer: 2.72% - - name: F16 - filename: whisper-large-F16.gguf - size: 3.11 GB - wer: 2.72% - - name: Q8_0 - filename: whisper-large-Q8_0.gguf - size: 1.67 GB - wer: 2.71% - - name: Q6_K - filename: whisper-large-Q6_K.gguf - size: 1.30 GB - wer: 2.62% - - name: Q5_K_M - filename: whisper-large-Q5_K_M.gguf - size: 1.16 GB - wer: 2.84% - - name: Q4_K_M - filename: whisper-large-Q4_K_M.gguf - size: 997 MB - wer: 2.67% diff --git a/scripts/hf_cards/whisper-medium.en.yaml b/scripts/hf_cards/whisper-medium.en.yaml index 1737de78..d43e5a76 100644 --- a/scripts/hf_cards/whisper-medium.en.yaml +++ b/scripts/hf_cards/whisper-medium.en.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-medium.en-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: openai/whisper-medium.en -target_repo: handy-computer/whisper-medium.en-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-medium.en.md -upstream_commit: 2e98eb6 pin_date: 2026-04-25 validation: @@ -13,11 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - "en" tags: - gguf - transcribe.cpp @@ -32,49 +25,7 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 3.2 - metal: 45.1 - ryzen-4750u: - cpu: 1.1 - vulkan: 4.5 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.02%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-medium.en-F32.gguf - size: 3.06 GB - wer: 2.74% - - name: F16 - filename: whisper-medium.en-F16.gguf - size: 1.54 GB - wer: 2.73% - - name: Q8_0 - filename: whisper-medium.en-Q8_0.gguf - size: 831 MB - wer: 2.72% - - name: Q6_K - filename: whisper-medium.en-Q6_K.gguf - size: 648 MB - wer: 2.82% - - name: Q5_K_M - filename: whisper-medium.en-Q5_K_M.gguf - size: 583 MB - wer: 2.75% - - name: Q4_K_M - filename: whisper-medium.en-Q4_K_M.gguf - size: 504 MB - wer: 2.91% diff --git a/scripts/hf_cards/whisper-medium.yaml b/scripts/hf_cards/whisper-medium.yaml index 05d2194f..4a57c780 100644 --- a/scripts/hf_cards/whisper-medium.yaml +++ b/scripts/hf_cards/whisper-medium.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-medium-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: openai/whisper-medium -target_repo: handy-computer/whisper-medium-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-medium.md -upstream_commit: abdf7c3 pin_date: 2026-04-25 validation: @@ -13,114 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - languages - -languages: - - "en" - - "zh" - - "de" - - "es" - - "ru" - - "ko" - - "fr" - - "ja" - - "pt" - - "tr" - - "pl" - - "ca" - - "nl" - - "ar" - - "sv" - - "it" - - "id" - - "hi" - - "fi" - - "vi" - - "he" - - "uk" - - "el" - - "ms" - - "cs" - - "ro" - - "da" - - "hu" - - "ta" - - "no" - - "th" - - "ur" - - "hr" - - "bg" - - "lt" - - "la" - - "mi" - - "ml" - - "cy" - - "sk" - - "te" - - "fa" - - "lv" - - "bn" - - "sr" - - "az" - - "sl" - - "kn" - - "et" - - "mk" - - "br" - - "eu" - - "is" - - "hy" - - "ne" - - "mn" - - "bs" - - "kk" - - "sq" - - "sw" - - "gl" - - "mr" - - "pa" - - "si" - - "km" - - "sn" - - "yo" - - "so" - - "af" - - "oc" - - "ka" - - "be" - - "tg" - - "sd" - - "gu" - - "am" - - "yi" - - "lo" - - "uz" - - "fo" - - "ht" - - "ps" - - "tk" - - "nn" - - "mt" - - "sa" - - "lb" - - "my" - - "bo" - - "tl" - - "mg" - - "as" - - "tt" - - "haw" - - "ln" - - "ha" - - "ba" - - "jw" - - "su" tags: - gguf - transcribe.cpp @@ -134,50 +24,7 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 41.6 - cpu: 3 - ryzen-4750u: - vulkan: 4.3 - cpu: 1.1 - wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.90%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-medium-F32.gguf - size: 3.06 GB - wer: 2.64% - - name: F16 - filename: whisper-medium-F16.gguf - size: 1.54 GB - wer: 2.63% - - name: Q8_0 - filename: whisper-medium-Q8_0.gguf - size: 832 MB - wer: 2.64% - - name: Q6_K - filename: whisper-medium-Q6_K.gguf - size: 648 MB - wer: 2.59% - - name: Q5_K_M - filename: whisper-medium-Q5_K_M.gguf - size: 583 MB - wer: 2.62% - - name: Q4_K_M - filename: whisper-medium-Q4_K_M.gguf - size: 504 MB - wer: 2.59% diff --git a/scripts/hf_cards/whisper-small.en.yaml b/scripts/hf_cards/whisper-small.en.yaml index 08b003c4..42bdc95c 100644 --- a/scripts/hf_cards/whisper-small.en.yaml +++ b/scripts/hf_cards/whisper-small.en.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-small.en-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: openai/whisper-small.en -target_repo: handy-computer/whisper-small.en-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-small.en.md -upstream_commit: e872752 pin_date: 2026-04-25 validation: @@ -13,11 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - "en" tags: - gguf - transcribe.cpp @@ -32,50 +25,7 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - metal: 104.4 - cpu: 10.3 - ryzen-4750u: - vulkan: 12.8 - cpu: 3.6 - wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.05%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-small.en-F32.gguf - size: 969 MB - wer: 3.11% - - name: F16 - filename: whisper-small.en-F16.gguf - size: 493 MB - wer: 2.97% - - name: Q8_0 - filename: whisper-small.en-Q8_0.gguf - size: 270 MB - wer: 3.09% - - name: Q6_K - filename: whisper-small.en-Q6_K.gguf - size: 212 MB - wer: 2.97% - - name: Q5_K_M - filename: whisper-small.en-Q5_K_M.gguf - size: 194 MB - wer: 3.11% - - name: Q4_K_M - filename: whisper-small.en-Q4_K_M.gguf - size: 172 MB - wer: 3.09% diff --git a/scripts/hf_cards/whisper-small.yaml b/scripts/hf_cards/whisper-small.yaml index 6a315081..926f0ba6 100644 --- a/scripts/hf_cards/whisper-small.yaml +++ b/scripts/hf_cards/whisper-small.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-small-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: openai/whisper-small -target_repo: handy-computer/whisper-small-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-small.md -upstream_commit: 973afd2 pin_date: 2026-04-25 validation: @@ -13,114 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - languages - -languages: - - "en" - - "zh" - - "de" - - "es" - - "ru" - - "ko" - - "fr" - - "ja" - - "pt" - - "tr" - - "pl" - - "ca" - - "nl" - - "ar" - - "sv" - - "it" - - "id" - - "hi" - - "fi" - - "vi" - - "he" - - "uk" - - "el" - - "ms" - - "cs" - - "ro" - - "da" - - "hu" - - "ta" - - "no" - - "th" - - "ur" - - "hr" - - "bg" - - "lt" - - "la" - - "mi" - - "ml" - - "cy" - - "sk" - - "te" - - "fa" - - "lv" - - "bn" - - "sr" - - "az" - - "sl" - - "kn" - - "et" - - "mk" - - "br" - - "eu" - - "is" - - "hy" - - "ne" - - "mn" - - "bs" - - "kk" - - "sq" - - "sw" - - "gl" - - "mr" - - "pa" - - "si" - - "km" - - "sn" - - "yo" - - "so" - - "af" - - "oc" - - "ka" - - "be" - - "tg" - - "sd" - - "gu" - - "am" - - "yi" - - "lo" - - "uz" - - "fo" - - "ht" - - "ps" - - "tk" - - "nn" - - "mt" - - "sa" - - "lb" - - "my" - - "bo" - - "tl" - - "mg" - - "as" - - "tt" - - "haw" - - "ln" - - "ha" - - "ba" - - "jw" - - "su" tags: - gguf - transcribe.cpp @@ -134,49 +24,7 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 9.7 - metal: 99.2 - ryzen-4750u: - cpu: 3.4 - vulkan: 12.1 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.432%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-small-F32.gguf - size: 969 MB - wer: 3.34% - - name: F16 - filename: whisper-small-F16.gguf - size: 493 MB - wer: 3.33% - - name: Q8_0 - filename: whisper-small-Q8_0.gguf - size: 270 MB - wer: 3.33% - - name: Q6_K - filename: whisper-small-Q6_K.gguf - size: 212 MB - wer: 3.33% - - name: Q5_K_M - filename: whisper-small-Q5_K_M.gguf - size: 194 MB - wer: 3.37% - - name: Q4_K_M - filename: whisper-small-Q4_K_M.gguf - size: 172 MB - wer: 3.40% diff --git a/scripts/hf_cards/whisper-tiny.en.yaml b/scripts/hf_cards/whisper-tiny.en.yaml index 84fa6fb3..433a38c3 100644 --- a/scripts/hf_cards/whisper-tiny.en.yaml +++ b/scripts/hf_cards/whisper-tiny.en.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-tiny.en-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: openai/whisper-tiny.en -target_repo: handy-computer/whisper-tiny.en-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-tiny.en.md -upstream_commit: 87c7102 pin_date: 2026-04-25 validation: @@ -13,16 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - quants - -languages: - - "en" tags: - gguf - transcribe.cpp @@ -37,49 +25,7 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 78.7 - metal: 279.8 - ryzen-4750u: - cpu: 26 - vulkan: 60.7 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.66%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-tiny.en-F32.gguf - size: 146 MB - wer: 5.77% - - name: F16 - filename: whisper-tiny.en-F16.gguf - size: 76 MB - wer: 5.77% - - name: Q8_0 - filename: whisper-tiny.en-Q8_0.gguf - size: 44 MB - wer: 5.72% - - name: Q6_K - filename: whisper-tiny.en-Q6_K.gguf - size: 43 MB - wer: 5.80% - - name: Q5_K_M - filename: whisper-tiny.en-Q5_K_M.gguf - size: 42 MB - wer: 5.89% - - name: Q4_K_M - filename: whisper-tiny.en-Q4_K_M.gguf - size: 42 MB - wer: 5.99% diff --git a/scripts/hf_cards/whisper-tiny.yaml b/scripts/hf_cards/whisper-tiny.yaml index 187342fe..8cf5dbf6 100644 --- a/scripts/hf_cards/whisper-tiny.yaml +++ b/scripts/hf_cards/whisper-tiny.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/whisper-tiny-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: openai/whisper-tiny -target_repo: handy-computer/whisper-tiny-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/whisper-tiny.md -upstream_commit: 169d4a4 pin_date: 2026-04-25 validation: @@ -13,114 +10,7 @@ validation: commit: 5.6.1 date: 2026-04-26 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -catalog_sync: - # These published presentation choices are intentionally hand-maintained. - preserve: - - languages - -languages: - - "en" - - "zh" - - "de" - - "es" - - "ru" - - "ko" - - "fr" - - "ja" - - "pt" - - "tr" - - "pl" - - "ca" - - "nl" - - "ar" - - "sv" - - "it" - - "id" - - "hi" - - "fi" - - "vi" - - "he" - - "uk" - - "el" - - "ms" - - "cs" - - "ro" - - "da" - - "hu" - - "ta" - - "no" - - "th" - - "ur" - - "hr" - - "bg" - - "lt" - - "la" - - "mi" - - "ml" - - "cy" - - "sk" - - "te" - - "fa" - - "lv" - - "bn" - - "sr" - - "az" - - "sl" - - "kn" - - "et" - - "mk" - - "br" - - "eu" - - "is" - - "hy" - - "ne" - - "mn" - - "bs" - - "kk" - - "sq" - - "sw" - - "gl" - - "mr" - - "pa" - - "si" - - "km" - - "sn" - - "yo" - - "so" - - "af" - - "oc" - - "ka" - - "be" - - "tg" - - "sd" - - "gu" - - "am" - - "yi" - - "lo" - - "uz" - - "fo" - - "ht" - - "ps" - - "tk" - - "nn" - - "mt" - - "sa" - - "lb" - - "my" - - "bo" - - "tl" - - "mg" - - "as" - - "tt" - - "haw" - - "ln" - - "ha" - - "ba" - - "jw" - - "su" tags: - gguf - transcribe.cpp @@ -134,49 +24,7 @@ summary: | default_quant_index: 2 -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: true - lang_detect: true - timestamps: segment # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, from docs/models; published -# raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 76.1 - metal: 302.1 - ryzen-4750u: - cpu: 24.7 - vulkan: 61 wer: source: LibriSpeech test-clean notes: | WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 7.54%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. - -quants: - - name: F32 - filename: whisper-tiny-F32.gguf - size: 153 MB - wer: 7.49% - - name: F16 - filename: whisper-tiny-F16.gguf - size: 80 MB - wer: 7.48% - - name: Q8_0 - filename: whisper-tiny-Q8_0.gguf - size: 46 MB - wer: 7.52% - - name: Q6_K - filename: whisper-tiny-Q6_K.gguf - size: 45 MB - wer: 7.54% - - name: Q5_K_M - filename: whisper-tiny-Q5_K_M.gguf - size: 44 MB - wer: 7.82% - - name: Q4_K_M - filename: whisper-tiny-Q4_K_M.gguf - size: 44 MB - wer: 7.78% From a43dd8802a227d81b996e0a3f5763848a3c4872b Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sun, 13 Sep 2026 04:23:28 -0700 Subject: [PATCH 08/24] simplify --- .claude/skills/porting-8-ship/SKILL.md | 66 +++++++++++--------------- .github/workflows/catalog.yml | 8 +--- .github/workflows/publish.yml | 2 +- catalog/_benchmark_profiles.json | 19 ++------ scripts/catalog/profiles.py | 4 +- 5 files changed, 37 insertions(+), 62 deletions(-) diff --git a/.claude/skills/porting-8-ship/SKILL.md b/.claude/skills/porting-8-ship/SKILL.md index 4e93cd40..2a62b77a 100644 --- a/.claude/skills/porting-8-ship/SKILL.md +++ b/.claude/skills/porting-8-ship/SKILL.md @@ -168,6 +168,12 @@ tags: - summary: | + +default_quant_index: + +wer: + notes: | + ``` Before rendering, verify that the validation pin is a real commit and its date @@ -234,57 +240,39 @@ uv run scripts/hf_cards/check_release.py ```bash uv run --project scripts/envs/moonshine scripts/audit_gguf_metadata.py models/ -uv run scripts/catalog/sync_capabilities.py --repair --dry-run +uv run scripts/catalog/sync_capabilities.py --check --local-only ``` `audit_gguf_metadata.py` exits non-zero on any metadata issue and was written -to gate exactly this. The `--repair --dry-run` pass must report `already -correct` for every quant: a capability KV that disagrees with the record means -the file and its own model card are about to contradict each other on the Hub. - -**Audit the file you are about to upload, and know where it came from.** Both -tools read `models//`, which for most variants is a symlink into -external storage holding whatever was built there last. That mirror can be -*older* than the Hub: a re-export or reconvert lands on the Hub and the local -copy is never refreshed. Auditing it then reports the mirror's gaps as if they -were the published file's, and repairing and uploading it republishes the older -build under an unchanged filename -- reverting whatever the published file had -gained. A stale `granite-speech-4.1-2b-nar` mirror here carried an older -upstream snapshot (`enc.ctc_bpe` 100353 vs the published 100352, no -`bpe_blank_id`) while looking like a perfectly ordinary repair target. - -`sync_capabilities.py --repair` now range-reads the published header and -refuses any file whose tensor shapes, dtypes, or unrelated KVs differ from what -is published; `--skip-published-check` overrides it, and is only correct when -the local file is deliberately newer than the Hub. Nothing enforces this for a -plain `hf upload`, so before re-uploading a variant you did not just convert, -either re-download it from its published repo or confirm the divergence is -intended. +to gate exactly this. `sync_capabilities.py --check` exits non-zero when the +record disagrees with the file: a capability KV that disagrees with the +record means the file and its own model card are about to contradict each +other on the Hub. **Absence is not falsity.** `read_capability_bool()` returns OK and leaves the field untouched when a key is missing, so a missing KV silently inherits the family default. `granite/capabilities.cpp` sets `supports_translate = true` on purpose so each variant's GGUF can lower it; `granite-speech-4.1-2b-plus` spelled that key `stt.capability.translation`, the lowering never happened, -and a model that does not translate advertised that it does. Declare every -capability explicitly rather than relying on a default to be right. +and a model that does not translate advertised that it does. Every converter +declares every capability explicitly rather than relying on a default. If `sync_capabilities.py` disagrees with what the model actually does, the GGUF is wrong and the fix is a converter change plus a re-export. Do not -paper over it with an override in the card spec. - -The HF card spec under `scripts/hf_cards/` is a complete, committed input to -`generate.py`. Start with the editorial copy (summary, tags, pipeline tag, -validation pin and prose notes), then populate repos, commit, licence, -languages, quant table, capability flags and per-rig speedups from the catalog: - -```bash -uv run scripts/catalog/sync_hf_cards.py --write --models -``` - -Existing values are preserved unless `--refresh` is passed deliberately. -List exceptional hand-maintained fields under `catalog_sync.preserve` so a -refresh does not replace them. +paper over it with an edit to the record or the card spec. + +**Audit the file you are about to upload, and know where it came from.** +`models//` is for most variants a symlink into external storage +holding whatever was built there last. That mirror can be *older* than the +Hub: a re-export lands on the Hub and the local copy is never refreshed. Before +re-uploading a variant you did not just convert, either re-download it from +its published repo or confirm the divergence is intended. + +The HF card spec under `scripts/hf_cards/` is editorial only. `generate.py` +reads it together with `catalog/.json` and refuses a spec that states +a catalog-owned field (repos, commit, licence, languages, quants, perf, +capabilities), so a number that belongs on the card goes into the catalog +first. ## Postconditions diff --git a/.github/workflows/catalog.yml b/.github/workflows/catalog.yml index ebd4d8f2..80c1bae6 100644 --- a/.github/workflows/catalog.yml +++ b/.github/workflows/catalog.yml @@ -30,14 +30,10 @@ jobs: - uses: actions/checkout@v6 - uses: astral-sh/setup-uv@v8.2.0 - name: Canonical formatting - run: uv run catalog/_format.py --check catalog/*.json + run: uv run scripts/catalog/format.py --check - name: Schema, integrity and pairing run: uv run scripts/catalog/check.py - - name: HF card specs are complete and consistent - run: | - uv run scripts/catalog/sync_hf_cards.py --check - uv run scripts/catalog/sync_hf_cards.py --check-consistency - - name: HF card specs render + - name: HF cards render from the catalog run: | for spec in scripts/hf_cards/*.yaml; do uv run scripts/hf_cards/generate.py "$spec" --skip-upstream --stdout > /dev/null diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d26f60db..5be7ca28 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -126,7 +126,7 @@ jobs: - name: Validate and build catalog.db run: | set -euo pipefail - uv run catalog/_format.py --check catalog/*.json + uv run scripts/catalog/format.py --check uv run scripts/catalog/check.py --publication-profile mkdir -p release-catalog uv run scripts/catalog/db.py --out release-catalog/catalog.db diff --git a/catalog/_benchmark_profiles.json b/catalog/_benchmark_profiles.json index bb638091..4e0a6e7f 100644 --- a/catalog/_benchmark_profiles.json +++ b/catalog/_benchmark_profiles.json @@ -32,24 +32,13 @@ "samples": ["jfk","dots"], "iterations": 3, "warmup": 1, - "model_overrides": { - "gigaam-v3-ctc": { + "family_overrides": { + "gigaam": { "samples": ["ru"], - "reason": "Russian-only model; use the currently published supported-language clip until a long Russian fixture is added." - }, - "gigaam-v3-e2e-ctc": { - "samples": ["ru"], - "reason": "Russian-only model; use the currently published supported-language clip until a long Russian fixture is added." - }, - "gigaam-v3-e2e-rnnt": { - "samples": ["ru"], - "reason": "Russian-only model; use the currently published supported-language clip until a long Russian fixture is added." - }, - "gigaam-v3-rnnt": { - "samples": ["ru"], - "reason": "Russian-only model; use the currently published supported-language clip until a long Russian fixture is added." + "reason": "Russian-only family; use the currently published supported-language clip until a long Russian fixture is added." } }, + "model_overrides": {}, "targets": [ { "machine": "m4-max", diff --git a/scripts/catalog/profiles.py b/scripts/catalog/profiles.py index d94a97aa..d6a65c38 100644 --- a/scripts/catalog/profiles.py +++ b/scripts/catalog/profiles.py @@ -145,7 +145,9 @@ def expected_accuracy(record: dict, profile: dict) -> list[dict]: def expected_speed(record: dict, profile: dict) -> list[dict]: """Expand the exact publication speed matrix for one model.""" spec = profile["speed"] - override = (spec.get("model_overrides") or {}).get(record["variant"], {}) + # A variant override wins over its family's; both are whole-key replacements. + override = ((spec.get("model_overrides") or {}).get(record["variant"]) + or (spec.get("family_overrides") or {}).get(record["family"], {})) samples = override.get("samples", spec.get("samples", [])) cells: list[dict] = [] for target in spec.get("targets", []): From 90ac68d9acafc49fa6ad29b13053eb6ed61f049e Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sun, 13 Sep 2026 05:09:07 -0700 Subject: [PATCH 09/24] md file speed tables generate from catalog --- catalog/_schema.json | 2 +- catalog/canary-180m-flash.json | 32 ++--- catalog/canary-1b-flash.json | 30 ++--- catalog/canary-1b-v2.json | 30 ++--- catalog/canary-1b.json | 32 ++--- catalog/canary-qwen-2.5b.json | 32 ++--- catalog/cohere-transcribe-03-2026.json | 32 ++--- catalog/cohere-transcribe-arabic-07-2026.json | 32 ++--- .../diar_streaming_sortformer_4spk-v2.1.json | 16 +-- catalog/fun-asr-mlt-nano-2512.json | 30 ++--- catalog/fun-asr-nano-2512.json | 30 ++--- catalog/gigaam-v3-ctc.json | 16 +-- catalog/gigaam-v3-e2e-ctc.json | 16 +-- catalog/gigaam-v3-e2e-rnnt.json | 16 +-- catalog/gigaam-v3-rnnt.json | 16 +-- catalog/granite-4.0-1b-speech.json | 32 ++--- catalog/granite-speech-4.1-2b-nar.json | 32 ++--- catalog/granite-speech-4.1-2b-plus.json | 30 ++--- catalog/granite-speech-4.1-2b.json | 32 ++--- catalog/medasr.json | 32 ++--- catalog/moonshine-base.json | 12 +- catalog/moonshine-streaming-medium.json | 16 +-- catalog/moonshine-streaming-small.json | 16 +-- catalog/moonshine-streaming-tiny.json | 16 +-- catalog/moonshine-tiny.json | 16 +-- catalog/moss-transcribe-diarize.json | 32 ++--- ...ultitalker-parakeet-streaming-0.6b-v1.json | 32 ++--- catalog/nemotron-3.5-asr-streaming-0.6b.json | 32 ++--- .../nemotron-speech-streaming-en-0.6b.json | 30 ++--- catalog/parakeet-ctc-0.6b.json | 32 ++--- catalog/parakeet-ctc-1.1b.json | 32 ++--- catalog/parakeet-rnnt-0.6b.json | 32 ++--- catalog/parakeet-rnnt-1.1b.json | 32 ++--- catalog/parakeet-tdt-0.6b-v2.json | 32 ++--- catalog/parakeet-tdt-0.6b-v3.json | 32 ++--- catalog/parakeet-tdt-1.1b.json | 32 ++--- catalog/parakeet-tdt_ctc-1.1b.json | 30 ++--- catalog/parakeet-tdt_ctc-110m.json | 32 ++--- catalog/parakeet-unified-en-0.6b.json | 16 +-- catalog/qwen3-asr-0.6b.json | 32 ++--- catalog/qwen3-asr-1.7b.json | 32 ++--- catalog/sensevoice-small.json | 32 ++--- catalog/voxtral-mini-3b-2507.json | 30 ++--- catalog/voxtral-mini-4b-realtime-2602.json | 32 ++--- catalog/voxtral-small-24b-2507.json | 8 +- catalog/whisper-base.en.json | 32 ++--- catalog/whisper-base.json | 32 ++--- catalog/whisper-large-v2.json | 28 ++--- catalog/whisper-large-v3-turbo.json | 30 ++--- catalog/whisper-large-v3.json | 30 ++--- catalog/whisper-large.json | 26 ++-- catalog/whisper-medium.en.json | 30 ++--- catalog/whisper-medium.json | 30 ++--- catalog/whisper-small.en.json | 28 ++--- catalog/whisper-small.json | 32 ++--- catalog/whisper-tiny.en.json | 32 ++--- catalog/whisper-tiny.json | 32 ++--- docs/_templates/model-card.md.j2 | 19 +-- docs/models/canary-180m-flash.md | 30 +++-- docs/models/canary-1b-flash.md | 30 +++-- docs/models/canary-1b-v2.md | 30 +++-- docs/models/canary-1b.md | 30 +++-- docs/models/canary-qwen-2.5b.md | 30 +++-- docs/models/cohere-transcribe-03-2026.md | 30 +++-- .../cohere-transcribe-arabic-07-2026.md | 30 +++-- .../diar_streaming_sortformer_4spk-v2.1.md | 16 +-- docs/models/fun-asr-mlt-nano-2512.md | 30 +++-- docs/models/fun-asr-nano-2512.md | 30 +++-- docs/models/gigaam-v3-ctc.md | 22 ++-- docs/models/gigaam-v3-e2e-ctc.md | 22 ++-- docs/models/gigaam-v3-e2e-rnnt.md | 22 ++-- docs/models/gigaam-v3-rnnt.md | 22 ++-- docs/models/granite-4.0-1b-speech.md | 55 +++----- docs/models/granite-speech-4.1-2b-nar.md | 55 +++----- docs/models/granite-speech-4.1-2b-plus.md | 55 +++----- docs/models/granite-speech-4.1-2b.md | 55 +++----- docs/models/medasr.md | 30 +++-- docs/models/moonshine-base.md | 30 +++-- docs/models/moonshine-streaming-medium.md | 30 +++-- docs/models/moonshine-streaming-small.md | 30 +++-- docs/models/moonshine-streaming-tiny.md | 30 +++-- docs/models/moonshine-tiny.md | 30 +++-- docs/models/moss-transcribe-diarize.md | 20 +-- .../multitalker-parakeet-streaming-0.6b-v1.md | 30 +++-- .../models/nemotron-3.5-asr-streaming-0.6b.md | 30 +++-- .../nemotron-speech-streaming-en-0.6b.md | 30 +++-- docs/models/parakeet-ctc-0.6b.md | 30 +++-- docs/models/parakeet-ctc-1.1b.md | 30 +++-- docs/models/parakeet-rnnt-0.6b.md | 18 +-- docs/models/parakeet-rnnt-1.1b.md | 30 +++-- docs/models/parakeet-tdt-0.6b-v2.md | 18 +-- docs/models/parakeet-tdt-0.6b-v3.md | 30 +++-- docs/models/parakeet-tdt-1.1b.md | 30 +++-- docs/models/parakeet-tdt_ctc-1.1b.md | 30 +++-- docs/models/parakeet-tdt_ctc-110m.md | 30 +++-- docs/models/parakeet-unified-en-0.6b.md | 30 +++-- docs/models/qwen3-asr-0.6b.md | 30 +++-- docs/models/qwen3-asr-1.7b.md | 30 +++-- docs/models/sensevoice-small.md | 26 ++-- docs/models/voxtral-mini-3b-2507.md | 22 ++-- docs/models/voxtral-realtime.md | 24 ++-- docs/models/voxtral-small-24b-2507.md | 12 +- docs/models/whisper-base.en.md | 18 +-- docs/models/whisper-base.md | 16 ++- docs/models/whisper-large-v2.md | 30 +++-- docs/models/whisper-large-v3-turbo.md | 30 +++-- docs/models/whisper-large-v3.md | 30 +++-- docs/models/whisper-large.md | 18 +-- docs/models/whisper-medium.en.md | 20 +-- docs/models/whisper-medium.md | 26 ++-- docs/models/whisper-small.en.md | 26 ++-- docs/models/whisper-small.md | 28 +++-- docs/models/whisper-tiny.en.md | 20 +-- docs/models/whisper-tiny.md | 18 +-- scripts/catalog/common.py | 31 +++-- scripts/catalog/db.py | 13 +- scripts/catalog/ingest_perf.py | 19 ++- scripts/catalog/render.py | 27 ++-- scripts/catalog/sync_capabilities.py | 118 ++++++++++++++---- scripts/hf_cards/breeze-asr-25.yaml | 2 - scripts/hf_cards/canary-180m-flash.yaml | 2 - scripts/hf_cards/canary-1b-flash.yaml | 2 - scripts/hf_cards/canary-1b-v2.yaml | 2 - scripts/hf_cards/canary-1b.yaml | 2 - scripts/hf_cards/canary-qwen-2.5b.yaml | 2 - .../hf_cards/cohere-transcribe-03-2026.yaml | 2 - .../cohere-transcribe-arabic-07-2026.yaml | 2 - .../diar_streaming_sortformer_4spk-v2.1.yaml | 2 - scripts/hf_cards/fun-asr-mlt-nano-2512.yaml | 2 - scripts/hf_cards/fun-asr-nano-2512.yaml | 2 - scripts/hf_cards/generate.py | 18 ++- scripts/hf_cards/gigaam-v3-ctc.yaml | 2 - scripts/hf_cards/gigaam-v3-e2e-ctc.yaml | 2 - scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml | 2 - scripts/hf_cards/gigaam-v3-rnnt.yaml | 2 - scripts/hf_cards/granite-4.0-1b-speech.yaml | 2 - .../hf_cards/granite-speech-4.1-2b-nar.yaml | 2 - .../hf_cards/granite-speech-4.1-2b-plus.yaml | 2 - scripts/hf_cards/granite-speech-4.1-2b.yaml | 2 - scripts/hf_cards/medasr.yaml | 2 - scripts/hf_cards/moonshine-base-ar.yaml | 2 - scripts/hf_cards/moonshine-base-ja.yaml | 2 - scripts/hf_cards/moonshine-base-ko.yaml | 2 - scripts/hf_cards/moonshine-base-uk.yaml | 2 - scripts/hf_cards/moonshine-base-vi.yaml | 2 - scripts/hf_cards/moonshine-base-zh.yaml | 2 - scripts/hf_cards/moonshine-base.yaml | 2 - .../hf_cards/moonshine-streaming-medium.yaml | 2 - .../hf_cards/moonshine-streaming-small.yaml | 2 - .../hf_cards/moonshine-streaming-tiny.yaml | 2 - scripts/hf_cards/moonshine-tiny-ar.yaml | 2 - scripts/hf_cards/moonshine-tiny-ja.yaml | 2 - scripts/hf_cards/moonshine-tiny-ko.yaml | 2 - scripts/hf_cards/moonshine-tiny-uk.yaml | 2 - scripts/hf_cards/moonshine-tiny-vi.yaml | 2 - scripts/hf_cards/moonshine-tiny-zh.yaml | 2 - scripts/hf_cards/moonshine-tiny.yaml | 2 - scripts/hf_cards/moss-transcribe-diarize.yaml | 2 - ...ultitalker-parakeet-streaming-0.6b-v1.yaml | 2 - .../nemotron-3.5-asr-streaming-0.6b.yaml | 2 - .../nemotron-speech-streaming-en-0.6b.yaml | 2 - scripts/hf_cards/parakeet-ctc-0.6b.yaml | 2 - scripts/hf_cards/parakeet-ctc-1.1b.yaml | 2 - scripts/hf_cards/parakeet-primeline.yaml | 2 - scripts/hf_cards/parakeet-rnnt-0.6b.yaml | 2 - scripts/hf_cards/parakeet-rnnt-1.1b.yaml | 2 - scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml | 2 - scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml | 2 - scripts/hf_cards/parakeet-tdt-1.1b.yaml | 2 - scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml | 2 - scripts/hf_cards/parakeet-tdt_ctc-110m.yaml | 2 - .../hf_cards/parakeet-unified-en-0.6b.yaml | 2 - scripts/hf_cards/qwen3-asr-0.6b.yaml | 2 - scripts/hf_cards/qwen3-asr-1.7b.yaml | 2 - scripts/hf_cards/sensevoice-small.yaml | 2 - scripts/hf_cards/template.md.j2 | 2 +- scripts/hf_cards/voxtral-mini-3b-2507.yaml | 2 - .../voxtral-mini-4b-realtime-2602.yaml | 2 - scripts/hf_cards/voxtral-small-24b-2507.yaml | 2 - scripts/hf_cards/whisper-base.en.yaml | 2 - scripts/hf_cards/whisper-base.yaml | 2 - scripts/hf_cards/whisper-large-v2.yaml | 2 - scripts/hf_cards/whisper-large-v3-turbo.yaml | 2 - scripts/hf_cards/whisper-large-v3.yaml | 2 - scripts/hf_cards/whisper-large.yaml | 2 - scripts/hf_cards/whisper-medium.en.yaml | 2 - scripts/hf_cards/whisper-medium.yaml | 2 - scripts/hf_cards/whisper-small.en.yaml | 2 - scripts/hf_cards/whisper-small.yaml | 2 - scripts/hf_cards/whisper-tiny.en.yaml | 2 - scripts/hf_cards/whisper-tiny.yaml | 2 - scripts/lib/gguf_common.py | 46 ++++++- 192 files changed, 1827 insertions(+), 1742 deletions(-) diff --git a/catalog/_schema.json b/catalog/_schema.json index 11bde8de..b5632944 100644 --- a/catalog/_schema.json +++ b/catalog/_schema.json @@ -267,7 +267,7 @@ "description": "Cached from the Hub listing and verified against it, not authored." }, "size_bytes": { - "type": ["integer","null"], + "type": "integer", "minimum": 1, "description": "Exact blob size. Prose units are a rendering concern -- the card's '845 MB' is 845 MiB mislabelled, and the sweep's 1 GB quant threshold keys off the real number." } diff --git a/catalog/canary-180m-flash.json b/catalog/canary-180m-flash.json index 822e4700..4735dbb7 100644 --- a/catalog/canary-180m-flash.json +++ b/catalog/canary-180m-flash.json @@ -51,21 +51,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":481.0,"xrt_compute":73.457,"load_ms":76.0,"mel_ms":2.2,"encode_ms":339.8,"decode_ms":139.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":482.1,"xrt_wall":73.292}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":123.4,"xrt_compute":89.14,"load_ms":72.5,"mel_ms":0.8,"encode_ms":96.6,"decode_ms":26.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":124.0,"xrt_wall":88.704}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":520.5,"xrt_compute":67.877,"load_ms":87.1,"mel_ms":2.2,"encode_ms":352.8,"decode_ms":165.5,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":521.6,"xrt_wall":67.733}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":136.5,"xrt_compute":80.572,"load_ms":68.6,"mel_ms":0.8,"encode_ms":104.2,"decode_ms":31.6,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":137.1,"xrt_wall":80.225}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":253.3,"xrt_compute":139.482,"load_ms":58.5,"mel_ms":2.2,"encode_ms":84.7,"decode_ms":166.5,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":255.0,"xrt_wall":138.564}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":66.6,"xrt_compute":165.212,"load_ms":52.8,"mel_ms":0.9,"encode_ms":32.7,"decode_ms":33.0,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":68.0,"xrt_wall":161.767}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":276.6,"xrt_compute":127.726,"load_ms":84.2,"mel_ms":2.2,"encode_ms":84.6,"decode_ms":189.8,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":278.3,"xrt_wall":126.978}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":71.1,"xrt_compute":154.725,"load_ms":87.1,"mel_ms":0.8,"encode_ms":32.1,"decode_ms":38.2,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":72.3,"xrt_wall":152.119}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1624.4,"xrt_compute":21.751,"load_ms":167.0,"mel_ms":70.4,"encode_ms":1012.9,"decode_ms":541.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1629.1,"xrt_wall":21.688}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":369.0,"xrt_compute":29.813,"load_ms":188.7,"mel_ms":19.1,"encode_ms":260.2,"decode_ms":89.7,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":370.5,"xrt_wall":29.688}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1911.9,"xrt_compute":18.48,"load_ms":214.0,"mel_ms":65.7,"encode_ms":1108.9,"decode_ms":737.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1915.1,"xrt_wall":18.449}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":452.7,"xrt_compute":24.297,"load_ms":271.6,"mel_ms":21.9,"encode_ms":296.6,"decode_ms":134.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":454.3,"xrt_wall":24.215}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1093.3,"xrt_compute":32.318,"load_ms":136.8,"mel_ms":70.0,"encode_ms":478.5,"decode_ms":544.7,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1099.7,"xrt_wall":32.13}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":292.8,"xrt_compute":37.568,"load_ms":144.9,"mel_ms":20.8,"encode_ms":159.4,"decode_ms":112.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":296.0,"xrt_wall":37.165}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1217.4,"xrt_compute":29.023,"load_ms":170.7,"mel_ms":62.9,"encode_ms":474.8,"decode_ms":679.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1221.7,"xrt_wall":28.921}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":312.6,"xrt_compute":35.188,"load_ms":307.9,"mel_ms":21.5,"encode_ms":155.9,"decode_ms":135.2,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":315.6,"xrt_wall":34.852} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":481.0,"xrt_compute":73.46,"load_ms":76.0,"mel_ms":2.2,"encode_ms":339.8,"decode_ms":139.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":482.1,"xrt_wall":73.29}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":123.4,"xrt_compute":89.14,"load_ms":72.5,"mel_ms":0.8,"encode_ms":96.6,"decode_ms":26.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":124.0,"xrt_wall":88.7}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":520.5,"xrt_compute":67.88,"load_ms":87.1,"mel_ms":2.2,"encode_ms":352.8,"decode_ms":165.5,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":521.6,"xrt_wall":67.73}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":136.5,"xrt_compute":80.57,"load_ms":68.6,"mel_ms":0.8,"encode_ms":104.2,"decode_ms":31.6,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":137.1,"xrt_wall":80.22}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":253.3,"xrt_compute":139.48,"load_ms":58.5,"mel_ms":2.2,"encode_ms":84.7,"decode_ms":166.5,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":255.0,"xrt_wall":138.56}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":66.6,"xrt_compute":165.21,"load_ms":52.8,"mel_ms":0.9,"encode_ms":32.7,"decode_ms":33.0,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":68.0,"xrt_wall":161.77}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":276.6,"xrt_compute":127.73,"load_ms":84.2,"mel_ms":2.2,"encode_ms":84.6,"decode_ms":189.8,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":278.3,"xrt_wall":126.98}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":71.1,"xrt_compute":154.72,"load_ms":87.1,"mel_ms":0.8,"encode_ms":32.1,"decode_ms":38.2,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":72.3,"xrt_wall":152.12}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1624.4,"xrt_compute":21.75,"load_ms":167.0,"mel_ms":70.4,"encode_ms":1012.9,"decode_ms":541.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1629.1,"xrt_wall":21.69}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":369.0,"xrt_compute":29.81,"load_ms":188.7,"mel_ms":19.1,"encode_ms":260.2,"decode_ms":89.7,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":370.5,"xrt_wall":29.69}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1911.9,"xrt_compute":18.48,"load_ms":214.0,"mel_ms":65.7,"encode_ms":1108.9,"decode_ms":737.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1915.1,"xrt_wall":18.45}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":452.7,"xrt_compute":24.3,"load_ms":271.6,"mel_ms":21.9,"encode_ms":296.6,"decode_ms":134.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":454.3,"xrt_wall":24.21}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1093.3,"xrt_compute":32.32,"load_ms":136.8,"mel_ms":70.0,"encode_ms":478.5,"decode_ms":544.7,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1099.7,"xrt_wall":32.13}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":292.8,"xrt_compute":37.57,"load_ms":144.9,"mel_ms":20.8,"encode_ms":159.4,"decode_ms":112.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":296.0,"xrt_wall":37.16}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1217.4,"xrt_compute":29.02,"load_ms":170.7,"mel_ms":62.9,"encode_ms":474.8,"decode_ms":679.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1221.7,"xrt_wall":28.92}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":312.6,"xrt_compute":35.19,"load_ms":307.9,"mel_ms":21.5,"encode_ms":155.9,"decode_ms":135.2,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":315.6,"xrt_wall":34.85} ] } diff --git a/catalog/canary-1b-flash.json b/catalog/canary-1b-flash.json index 1b0704b9..88facb28 100644 --- a/catalog/canary-1b-flash.json +++ b/catalog/canary-1b-flash.json @@ -52,20 +52,20 @@ }, "speed_benchmarks": [ {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1508.0,"xrt_compute":23.43,"load_ms":206.4,"mel_ms":2.2,"encode_ms":1363.7,"decode_ms":142.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1509.9,"xrt_wall":23.4}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":429.0,"xrt_compute":25.639,"load_ms":213.2,"mel_ms":0.8,"encode_ms":401.8,"decode_ms":26.5,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":430.1,"xrt_wall":25.578}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1792.0,"xrt_compute":19.716,"load_ms":282.9,"mel_ms":2.2,"encode_ms":1619.8,"decode_ms":170.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1793.9,"xrt_wall":19.695}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":517.2,"xrt_compute":21.266,"load_ms":282.2,"mel_ms":0.8,"encode_ms":484.9,"decode_ms":31.6,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":518.3,"xrt_wall":21.224}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":346.2,"xrt_compute":102.064,"load_ms":173.4,"mel_ms":2.3,"encode_ms":179.8,"decode_ms":164.0,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":349.2,"xrt_wall":101.172}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":108.9,"xrt_compute":100.969,"load_ms":171.1,"mel_ms":0.9,"encode_ms":74.3,"decode_ms":33.8,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":111.3,"xrt_wall":98.841}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":365.6,"xrt_compute":96.654,"load_ms":237.7,"mel_ms":2.1,"encode_ms":179.8,"decode_ms":183.6,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":368.6,"xrt_wall":95.854}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":104.2,"xrt_compute":105.602,"load_ms":274.5,"mel_ms":0.9,"encode_ms":69.6,"decode_ms":33.7,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":106.6,"xrt_wall":103.155}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4503.0,"xrt_compute":7.846,"load_ms":815.9,"mel_ms":61.8,"encode_ms":3881.9,"decode_ms":559.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":4507.5,"xrt_wall":7.839}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1130.4,"xrt_compute":9.731,"load_ms":813.4,"mel_ms":18.5,"encode_ms":1019.6,"decode_ms":92.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1133.2,"xrt_wall":9.707}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5478.9,"xrt_compute":6.449,"load_ms":1201.9,"mel_ms":63.2,"encode_ms":4656.3,"decode_ms":759.4,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":5483.7,"xrt_wall":6.443}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1487.3,"xrt_compute":7.396,"load_ms":1220.6,"mel_ms":21.7,"encode_ms":1332.5,"decode_ms":133.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1490.4,"xrt_wall":7.38}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2304.3,"xrt_compute":15.333,"load_ms":424.2,"mel_ms":69.1,"encode_ms":1666.3,"decode_ms":568.9,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2313.6,"xrt_wall":15.271}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":698.9,"xrt_compute":15.739,"load_ms":406.6,"mel_ms":22.2,"encode_ms":562.6,"decode_ms":114.1,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":704.2,"xrt_wall":15.62}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2454.4,"xrt_compute":14.395,"load_ms":1152.0,"mel_ms":63.1,"encode_ms":1615.6,"decode_ms":775.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2461.9,"xrt_wall":14.352}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":758.1,"xrt_compute":14.51,"load_ms":1411.7,"mel_ms":28.1,"encode_ms":580.5,"decode_ms":149.5,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":763.5,"xrt_wall":14.408} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":429.0,"xrt_compute":25.64,"load_ms":213.2,"mel_ms":0.8,"encode_ms":401.8,"decode_ms":26.5,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":430.1,"xrt_wall":25.58}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1792.0,"xrt_compute":19.72,"load_ms":282.9,"mel_ms":2.2,"encode_ms":1619.8,"decode_ms":170.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1793.9,"xrt_wall":19.7}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":517.2,"xrt_compute":21.27,"load_ms":282.2,"mel_ms":0.8,"encode_ms":484.9,"decode_ms":31.6,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":518.3,"xrt_wall":21.22}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":346.2,"xrt_compute":102.06,"load_ms":173.4,"mel_ms":2.3,"encode_ms":179.8,"decode_ms":164.0,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":349.2,"xrt_wall":101.17}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":108.9,"xrt_compute":100.97,"load_ms":171.1,"mel_ms":0.9,"encode_ms":74.3,"decode_ms":33.8,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":111.3,"xrt_wall":98.84}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":365.6,"xrt_compute":96.65,"load_ms":237.7,"mel_ms":2.1,"encode_ms":179.8,"decode_ms":183.6,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":368.6,"xrt_wall":95.85}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":104.2,"xrt_compute":105.6,"load_ms":274.5,"mel_ms":0.9,"encode_ms":69.6,"decode_ms":33.7,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":106.6,"xrt_wall":103.16}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4503.0,"xrt_compute":7.85,"load_ms":815.9,"mel_ms":61.8,"encode_ms":3881.9,"decode_ms":559.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":4507.5,"xrt_wall":7.84}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1130.4,"xrt_compute":9.73,"load_ms":813.4,"mel_ms":18.5,"encode_ms":1019.6,"decode_ms":92.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1133.2,"xrt_wall":9.71}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5478.9,"xrt_compute":6.45,"load_ms":1201.9,"mel_ms":63.2,"encode_ms":4656.3,"decode_ms":759.4,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":5483.7,"xrt_wall":6.44}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1487.3,"xrt_compute":7.4,"load_ms":1220.6,"mel_ms":21.7,"encode_ms":1332.5,"decode_ms":133.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1490.4,"xrt_wall":7.38}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2304.3,"xrt_compute":15.33,"load_ms":424.2,"mel_ms":69.1,"encode_ms":1666.3,"decode_ms":568.9,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2313.6,"xrt_wall":15.27}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":698.9,"xrt_compute":15.74,"load_ms":406.6,"mel_ms":22.2,"encode_ms":562.6,"decode_ms":114.1,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":704.2,"xrt_wall":15.62}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2454.4,"xrt_compute":14.39,"load_ms":1152.0,"mel_ms":63.1,"encode_ms":1615.6,"decode_ms":775.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2461.9,"xrt_wall":14.35}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":758.1,"xrt_compute":14.51,"load_ms":1411.7,"mel_ms":28.1,"encode_ms":580.5,"decode_ms":149.5,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":763.5,"xrt_wall":14.41} ] } diff --git a/catalog/canary-1b-v2.json b/catalog/canary-1b-v2.json index 7aa46206..28f41155 100644 --- a/catalog/canary-1b-v2.json +++ b/catalog/canary-1b-v2.json @@ -76,21 +76,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1655.1,"xrt_compute":21.347,"load_ms":219.6,"mel_ms":2.3,"encode_ms":1462.8,"decode_ms":190.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1657.1,"xrt_wall":21.321}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":452.5,"xrt_compute":24.309,"load_ms":222.5,"mel_ms":0.8,"encode_ms":413.6,"decode_ms":38.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":453.5,"xrt_wall":24.256}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1961.8,"xrt_compute":18.01,"load_ms":304.5,"mel_ms":2.3,"encode_ms":1727.5,"decode_ms":232.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1963.9,"xrt_wall":17.991}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":553.9,"xrt_compute":19.861,"load_ms":298.9,"mel_ms":0.8,"encode_ms":505.0,"decode_ms":48.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":555.0,"xrt_wall":19.821}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":403.1,"xrt_compute":87.649,"load_ms":174.7,"mel_ms":2.3,"encode_ms":181.1,"decode_ms":219.7,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":406.1,"xrt_wall":87.011}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":119.1,"xrt_compute":92.338,"load_ms":176.4,"mel_ms":1.0,"encode_ms":73.1,"decode_ms":45.1,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":121.6,"xrt_wall":90.465}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":427.9,"xrt_compute":82.572,"load_ms":255.4,"mel_ms":2.2,"encode_ms":179.4,"decode_ms":246.3,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":430.7,"xrt_wall":82.028}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":121.9,"xrt_compute":90.219,"load_ms":254.5,"mel_ms":0.9,"encode_ms":71.2,"decode_ms":49.8,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":124.3,"xrt_wall":88.483}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4699.7,"xrt_compute":7.518,"load_ms":1182.9,"mel_ms":61.5,"encode_ms":3867.9,"decode_ms":770.3,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":4704.1,"xrt_wall":7.511}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1158.5,"xrt_compute":9.495,"load_ms":1159.2,"mel_ms":17.8,"encode_ms":1002.4,"decode_ms":138.4,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1161.3,"xrt_wall":9.472}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5739.1,"xrt_compute":6.156,"load_ms":1736.3,"mel_ms":62.3,"encode_ms":4611.1,"decode_ms":1065.7,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":5743.9,"xrt_wall":6.151}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1551.6,"xrt_compute":7.089,"load_ms":1756.3,"mel_ms":20.9,"encode_ms":1325.3,"decode_ms":205.5,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1554.4,"xrt_wall":7.077}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2454.3,"xrt_compute":14.396,"load_ms":456.4,"mel_ms":65.4,"encode_ms":1651.1,"decode_ms":737.8,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2461.7,"xrt_wall":14.353}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1655.1,"xrt_compute":21.35,"load_ms":219.6,"mel_ms":2.3,"encode_ms":1462.8,"decode_ms":190.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1657.1,"xrt_wall":21.32}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":452.5,"xrt_compute":24.31,"load_ms":222.5,"mel_ms":0.8,"encode_ms":413.6,"decode_ms":38.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":453.5,"xrt_wall":24.26}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1961.8,"xrt_compute":18.01,"load_ms":304.5,"mel_ms":2.3,"encode_ms":1727.5,"decode_ms":232.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1963.9,"xrt_wall":17.99}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":553.9,"xrt_compute":19.86,"load_ms":298.9,"mel_ms":0.8,"encode_ms":505.0,"decode_ms":48.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":555.0,"xrt_wall":19.82}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":403.1,"xrt_compute":87.65,"load_ms":174.7,"mel_ms":2.3,"encode_ms":181.1,"decode_ms":219.7,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":406.1,"xrt_wall":87.01}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":119.1,"xrt_compute":92.34,"load_ms":176.4,"mel_ms":1.0,"encode_ms":73.1,"decode_ms":45.1,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":121.6,"xrt_wall":90.47}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":427.9,"xrt_compute":82.57,"load_ms":255.4,"mel_ms":2.2,"encode_ms":179.4,"decode_ms":246.3,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":430.7,"xrt_wall":82.03}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":121.9,"xrt_compute":90.22,"load_ms":254.5,"mel_ms":0.9,"encode_ms":71.2,"decode_ms":49.8,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":124.3,"xrt_wall":88.48}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4699.7,"xrt_compute":7.52,"load_ms":1182.9,"mel_ms":61.5,"encode_ms":3867.9,"decode_ms":770.3,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":4704.1,"xrt_wall":7.51}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1158.5,"xrt_compute":9.49,"load_ms":1159.2,"mel_ms":17.8,"encode_ms":1002.4,"decode_ms":138.4,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1161.3,"xrt_wall":9.47}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5739.1,"xrt_compute":6.16,"load_ms":1736.3,"mel_ms":62.3,"encode_ms":4611.1,"decode_ms":1065.7,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":5743.9,"xrt_wall":6.15}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1551.6,"xrt_compute":7.09,"load_ms":1756.3,"mel_ms":20.9,"encode_ms":1325.3,"decode_ms":205.5,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1554.4,"xrt_wall":7.08}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2454.3,"xrt_compute":14.4,"load_ms":456.4,"mel_ms":65.4,"encode_ms":1651.1,"decode_ms":737.8,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2461.7,"xrt_wall":14.35}, {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":743.7,"xrt_compute":14.79,"load_ms":866.8,"mel_ms":23.1,"encode_ms":561.7,"decode_ms":159.0,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":748.8,"xrt_wall":14.69}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2690.8,"xrt_compute":13.13,"load_ms":1009.3,"mel_ms":67.2,"encode_ms":1612.3,"decode_ms":1011.4,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2698.3,"xrt_wall":13.094}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":824.7,"xrt_compute":13.338,"load_ms":1408.0,"mel_ms":30.4,"encode_ms":582.8,"decode_ms":211.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":829.9,"xrt_wall":13.255} + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2690.8,"xrt_compute":13.13,"load_ms":1009.3,"mel_ms":67.2,"encode_ms":1612.3,"decode_ms":1011.4,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2698.3,"xrt_wall":13.09}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":824.7,"xrt_compute":13.34,"load_ms":1408.0,"mel_ms":30.4,"encode_ms":582.8,"decode_ms":211.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":829.9,"xrt_wall":13.26} ] } diff --git a/catalog/canary-1b.json b/catalog/canary-1b.json index 4595a022..602c463b 100644 --- a/catalog/canary-1b.json +++ b/catalog/canary-1b.json @@ -51,21 +51,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1714.2,"xrt_compute":20.611,"load_ms":209.6,"mel_ms":2.3,"encode_ms":1046.6,"decode_ms":665.3,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1716.0,"xrt_wall":20.589}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":425.3,"xrt_compute":25.866,"load_ms":216.4,"mel_ms":0.8,"encode_ms":310.2,"decode_ms":114.3,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":426.2,"xrt_wall":25.81}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2045.9,"xrt_compute":17.269,"load_ms":306.5,"mel_ms":2.2,"encode_ms":1247.8,"decode_ms":795.9,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2047.8,"xrt_wall":17.254}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":510.2,"xrt_compute":21.562,"load_ms":302.3,"mel_ms":0.8,"encode_ms":369.0,"decode_ms":140.4,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":511.1,"xrt_wall":21.524}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":931.4,"xrt_compute":37.935,"load_ms":187.6,"mel_ms":6.0,"encode_ms":152.9,"decode_ms":772.4,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":937.2,"xrt_wall":37.701}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":195.9,"xrt_compute":56.137,"load_ms":196.3,"mel_ms":1.0,"encode_ms":58.2,"decode_ms":136.7,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":198.1,"xrt_wall":55.525}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1026.4,"xrt_compute":34.425,"load_ms":274.7,"mel_ms":6.4,"encode_ms":152.4,"decode_ms":867.6,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1033.3,"xrt_wall":34.194}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":212.3,"xrt_compute":51.811,"load_ms":293.1,"mel_ms":1.8,"encode_ms":61.4,"decode_ms":149.1,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":216.0,"xrt_wall":50.929}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5964.8,"xrt_compute":5.923,"load_ms":761.3,"mel_ms":61.8,"encode_ms":2984.9,"decode_ms":2918.1,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":5969.2,"xrt_wall":5.919}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1233.2,"xrt_compute":8.92,"load_ms":784.1,"mel_ms":19.9,"encode_ms":779.9,"decode_ms":433.4,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1235.8,"xrt_wall":8.901}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7590.0,"xrt_compute":4.655,"load_ms":1038.0,"mel_ms":65.7,"encode_ms":3568.2,"decode_ms":3956.1,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":7594.6,"xrt_wall":4.652}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1703.1,"xrt_compute":6.459,"load_ms":1055.8,"mel_ms":21.8,"encode_ms":1035.5,"decode_ms":645.7,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1705.8,"xrt_wall":6.449}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3867.8,"xrt_compute":9.135,"load_ms":469.9,"mel_ms":79.1,"encode_ms":1296.4,"decode_ms":2492.3,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":3874.1,"xrt_wall":9.12}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":918.6,"xrt_compute":11.974,"load_ms":478.3,"mel_ms":24.8,"encode_ms":438.2,"decode_ms":455.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":923.4,"xrt_wall":11.913}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4620.7,"xrt_compute":7.646,"load_ms":941.3,"mel_ms":75.4,"encode_ms":1256.4,"decode_ms":3289.0,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":4627.2,"xrt_wall":7.636}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1070.3,"xrt_compute":10.277,"load_ms":1144.7,"mel_ms":38.1,"encode_ms":445.8,"decode_ms":586.5,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1074.6,"xrt_wall":10.236} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1714.2,"xrt_compute":20.61,"load_ms":209.6,"mel_ms":2.3,"encode_ms":1046.6,"decode_ms":665.3,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1716.0,"xrt_wall":20.59}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":425.3,"xrt_compute":25.87,"load_ms":216.4,"mel_ms":0.8,"encode_ms":310.2,"decode_ms":114.3,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":426.2,"xrt_wall":25.81}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2045.9,"xrt_compute":17.27,"load_ms":306.5,"mel_ms":2.2,"encode_ms":1247.8,"decode_ms":795.9,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2047.8,"xrt_wall":17.25}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":510.2,"xrt_compute":21.56,"load_ms":302.3,"mel_ms":0.8,"encode_ms":369.0,"decode_ms":140.4,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":511.1,"xrt_wall":21.52}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":931.4,"xrt_compute":37.94,"load_ms":187.6,"mel_ms":6.0,"encode_ms":152.9,"decode_ms":772.4,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":937.2,"xrt_wall":37.7}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":195.9,"xrt_compute":56.14,"load_ms":196.3,"mel_ms":1.0,"encode_ms":58.2,"decode_ms":136.7,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":198.1,"xrt_wall":55.52}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1026.4,"xrt_compute":34.42,"load_ms":274.7,"mel_ms":6.4,"encode_ms":152.4,"decode_ms":867.6,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1033.3,"xrt_wall":34.19}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":212.3,"xrt_compute":51.81,"load_ms":293.1,"mel_ms":1.8,"encode_ms":61.4,"decode_ms":149.1,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":216.0,"xrt_wall":50.93}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5964.8,"xrt_compute":5.92,"load_ms":761.3,"mel_ms":61.8,"encode_ms":2984.9,"decode_ms":2918.1,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":5969.2,"xrt_wall":5.92}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1233.2,"xrt_compute":8.92,"load_ms":784.1,"mel_ms":19.9,"encode_ms":779.9,"decode_ms":433.4,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1235.8,"xrt_wall":8.9}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7590.0,"xrt_compute":4.66,"load_ms":1038.0,"mel_ms":65.7,"encode_ms":3568.2,"decode_ms":3956.1,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":7594.6,"xrt_wall":4.65}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1703.1,"xrt_compute":6.46,"load_ms":1055.8,"mel_ms":21.8,"encode_ms":1035.5,"decode_ms":645.7,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1705.8,"xrt_wall":6.45}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3867.8,"xrt_compute":9.13,"load_ms":469.9,"mel_ms":79.1,"encode_ms":1296.4,"decode_ms":2492.3,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":3874.1,"xrt_wall":9.12}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":918.6,"xrt_compute":11.97,"load_ms":478.3,"mel_ms":24.8,"encode_ms":438.2,"decode_ms":455.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":923.4,"xrt_wall":11.91}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4620.7,"xrt_compute":7.65,"load_ms":941.3,"mel_ms":75.4,"encode_ms":1256.4,"decode_ms":3289.0,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":4627.2,"xrt_wall":7.64}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1070.3,"xrt_compute":10.28,"load_ms":1144.7,"mel_ms":38.1,"encode_ms":445.8,"decode_ms":586.5,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1074.6,"xrt_wall":10.24} ] } diff --git a/catalog/canary-qwen-2.5b.json b/catalog/canary-qwen-2.5b.json index ff9535c7..bbd8bc7a 100644 --- a/catalog/canary-qwen-2.5b.json +++ b/catalog/canary-qwen-2.5b.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3998.3,"xrt_compute":8.837,"load_ms":468.1,"mel_ms":2.3,"encode_ms":1460.1,"decode_ms":2535.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":4001.7,"xrt_wall":8.829}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1057.9,"xrt_compute":10.398,"load_ms":466.5,"mel_ms":0.8,"encode_ms":396.2,"decode_ms":660.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":1060.2,"xrt_wall":10.376}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5135.2,"xrt_compute":6.88,"load_ms":691.4,"mel_ms":2.4,"encode_ms":1741.0,"decode_ms":3391.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":5138.7,"xrt_wall":6.876}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1417.8,"xrt_compute":7.759,"load_ms":688.8,"mel_ms":0.9,"encode_ms":490.3,"decode_ms":926.6,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":1421.0,"xrt_wall":7.741}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":903.3,"xrt_compute":39.113,"load_ms":458.1,"mel_ms":5.8,"encode_ms":195.4,"decode_ms":702.2,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":911.7,"xrt_wall":38.753}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":225.7,"xrt_compute":48.727,"load_ms":472.9,"mel_ms":1.7,"encode_ms":79.7,"decode_ms":144.3,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":232.4,"xrt_wall":47.339}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1015.8,"xrt_compute":34.783,"load_ms":696.7,"mel_ms":6.0,"encode_ms":180.9,"decode_ms":828.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":1023.8,"xrt_wall":34.51}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":240.7,"xrt_compute":45.709,"load_ms":706.6,"mel_ms":0.9,"encode_ms":71.6,"decode_ms":168.2,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":243.8,"xrt_wall":45.11}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":13492.1,"xrt_compute":2.619,"load_ms":2359.0,"mel_ms":62.7,"encode_ms":3884.3,"decode_ms":9545.1,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":13506.0,"xrt_wall":2.616}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3420.7,"xrt_compute":3.216,"load_ms":2016.8,"mel_ms":21.1,"encode_ms":1053.1,"decode_ms":2346.5,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":3432.0,"xrt_wall":3.205}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":18405.1,"xrt_compute":1.92,"load_ms":3872.0,"mel_ms":70.5,"encode_ms":4634.8,"decode_ms":13699.8,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":18419.3,"xrt_wall":1.918}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4720.5,"xrt_compute":2.33,"load_ms":3833.1,"mel_ms":22.3,"encode_ms":1305.0,"decode_ms":3393.2,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":4731.7,"xrt_wall":2.325}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8460.8,"xrt_compute":4.176,"load_ms":2220.4,"mel_ms":81.4,"encode_ms":1676.5,"decode_ms":6703.0,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":8477.0,"xrt_wall":4.168}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2100.4,"xrt_compute":5.237,"load_ms":2605.5,"mel_ms":29.8,"encode_ms":585.9,"decode_ms":1484.8,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":2113.8,"xrt_wall":5.204}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9704.3,"xrt_compute":3.641,"load_ms":3137.0,"mel_ms":81.3,"encode_ms":1674.0,"decode_ms":7949.0,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":9721.3,"xrt_wall":3.634}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2391.3,"xrt_compute":4.6,"load_ms":3508.2,"mel_ms":35.1,"encode_ms":581.4,"decode_ms":1774.8,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":2405.2,"xrt_wall":4.573} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3998.3,"xrt_compute":8.84,"load_ms":468.1,"mel_ms":2.3,"encode_ms":1460.1,"decode_ms":2535.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":4001.7,"xrt_wall":8.83}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1057.9,"xrt_compute":10.4,"load_ms":466.5,"mel_ms":0.8,"encode_ms":396.2,"decode_ms":660.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":1060.2,"xrt_wall":10.38}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5135.2,"xrt_compute":6.88,"load_ms":691.4,"mel_ms":2.4,"encode_ms":1741.0,"decode_ms":3391.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":5138.7,"xrt_wall":6.88}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1417.8,"xrt_compute":7.76,"load_ms":688.8,"mel_ms":0.9,"encode_ms":490.3,"decode_ms":926.6,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":1421.0,"xrt_wall":7.74}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":903.3,"xrt_compute":39.11,"load_ms":458.1,"mel_ms":5.8,"encode_ms":195.4,"decode_ms":702.2,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":911.7,"xrt_wall":38.75}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":225.7,"xrt_compute":48.73,"load_ms":472.9,"mel_ms":1.7,"encode_ms":79.7,"decode_ms":144.3,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":232.4,"xrt_wall":47.34}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1015.8,"xrt_compute":34.78,"load_ms":696.7,"mel_ms":6.0,"encode_ms":180.9,"decode_ms":828.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":1023.8,"xrt_wall":34.51}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":240.7,"xrt_compute":45.71,"load_ms":706.6,"mel_ms":0.9,"encode_ms":71.6,"decode_ms":168.2,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":243.8,"xrt_wall":45.11}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":13492.1,"xrt_compute":2.62,"load_ms":2359.0,"mel_ms":62.7,"encode_ms":3884.3,"decode_ms":9545.1,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":13506.0,"xrt_wall":2.62}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3420.7,"xrt_compute":3.22,"load_ms":2016.8,"mel_ms":21.1,"encode_ms":1053.1,"decode_ms":2346.5,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":3432.0,"xrt_wall":3.21}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":18405.1,"xrt_compute":1.92,"load_ms":3872.0,"mel_ms":70.5,"encode_ms":4634.8,"decode_ms":13699.8,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":18419.3,"xrt_wall":1.92}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4720.5,"xrt_compute":2.33,"load_ms":3833.1,"mel_ms":22.3,"encode_ms":1305.0,"decode_ms":3393.2,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":4731.7,"xrt_wall":2.33}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8460.8,"xrt_compute":4.18,"load_ms":2220.4,"mel_ms":81.4,"encode_ms":1676.5,"decode_ms":6703.0,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":8477.0,"xrt_wall":4.17}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2100.4,"xrt_compute":5.24,"load_ms":2605.5,"mel_ms":29.8,"encode_ms":585.9,"decode_ms":1484.8,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":2113.8,"xrt_wall":5.2}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9704.3,"xrt_compute":3.64,"load_ms":3137.0,"mel_ms":81.3,"encode_ms":1674.0,"decode_ms":7949.0,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":9721.3,"xrt_wall":3.63}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2391.3,"xrt_compute":4.6,"load_ms":3508.2,"mel_ms":35.1,"encode_ms":581.4,"decode_ms":1774.8,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":2405.2,"xrt_wall":4.57} ] } diff --git a/catalog/cohere-transcribe-03-2026.json b/catalog/cohere-transcribe-03-2026.json index a7ac5514..374c23d6 100644 --- a/catalog/cohere-transcribe-03-2026.json +++ b/catalog/cohere-transcribe-03-2026.json @@ -61,21 +61,21 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2892.4,"xrt_compute":3.803,"load_ms":2346.6,"mel_ms":13.3,"encode_ms":2747.5,"decode_ms":131.6,"engine_sha":"8345d95","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":2897.2,"xrt_wall":3.797}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":12391.7,"xrt_compute":2.851,"load_ms":2398.8,"mel_ms":38.2,"encode_ms":11445.5,"decode_ms":908.1,"engine_sha":"8345d95","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":12398.6,"xrt_wall":2.85}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3568.4,"xrt_compute":3.083,"load_ms":3299.3,"mel_ms":12.9,"encode_ms":3368.8,"decode_ms":186.7,"engine_sha":"8345d95","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":3573.0,"xrt_wall":3.079}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":3490.0,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1050.0,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4130.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1210.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":465.0,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":154.0,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":491.0,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":150.0,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":10080.0,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2892.4,"xrt_compute":3.8,"load_ms":2346.6,"mel_ms":13.3,"encode_ms":2747.5,"decode_ms":131.6,"engine_sha":"8345d95","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":2897.2,"xrt_wall":3.8}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":12391.7,"xrt_compute":2.85,"load_ms":2398.8,"mel_ms":38.2,"encode_ms":11445.5,"decode_ms":908.1,"engine_sha":"8345d95","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":12398.6,"xrt_wall":2.85}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3568.4,"xrt_compute":3.08,"load_ms":3299.3,"mel_ms":12.9,"encode_ms":3368.8,"decode_ms":186.7,"engine_sha":"8345d95","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":3573.0,"xrt_wall":3.08}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4250.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1330.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4250.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1430.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/cohere-transcribe-arabic-07-2026.json b/catalog/cohere-transcribe-arabic-07-2026.json index 83090881..9a537b94 100644 --- a/catalog/cohere-transcribe-arabic-07-2026.json +++ b/catalog/cohere-transcribe-arabic-07-2026.json @@ -55,21 +55,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":3490.0,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1050.0,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4130.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1210.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":465.0,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":154.0,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":491.0,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":150.0,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":10080.0,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2900.0,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":12400.0,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3570.0,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4250.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1330.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4250.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1430.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/diar_streaming_sortformer_4spk-v2.1.json b/catalog/diar_streaming_sortformer_4spk-v2.1.json index 2351f3dc..1f2f6712 100644 --- a/catalog/diar_streaming_sortformer_4spk-v2.1.json +++ b/catalog/diar_streaming_sortformer_4spk-v2.1.json @@ -41,13 +41,13 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":136.3,"xrt_compute":80.679,"load_ms":66.4,"mel_ms":0.0,"encode_ms":136.3,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"F16","sample":"dots","sample_duration_s":35.332,"total_ms":794.2,"xrt_compute":44.487,"load_ms":68.5,"mel_ms":0.0,"encode_ms":794.2,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":108.8,"xrt_compute":101.092,"load_ms":49.4,"mel_ms":0.0,"encode_ms":108.8,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":684.9,"xrt_compute":51.588,"load_ms":49.9,"mel_ms":0.0,"encode_ms":684.9,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":68.2,"xrt_compute":161.226,"load_ms":155.2,"mel_ms":0.0,"encode_ms":68.2,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"F16","sample":"dots","sample_duration_s":35.332,"total_ms":316.0,"xrt_compute":111.806,"load_ms":68.4,"mel_ms":0.0,"encode_ms":316.0,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":63.8,"xrt_compute":172.416,"load_ms":104.6,"mel_ms":0.0,"encode_ms":63.8,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, - {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":317.9,"xrt_compute":111.157,"load_ms":50.4,"mel_ms":0.0,"encode_ms":317.9,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null} + {"machine":"m4","backend":"cpu","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":136.3,"xrt_compute":80.68,"load_ms":66.4,"mel_ms":0.0,"encode_ms":136.3,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"F16","sample":"dots","sample_duration_s":35.332,"total_ms":794.2,"xrt_compute":44.49,"load_ms":68.5,"mel_ms":0.0,"encode_ms":794.2,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":108.8,"xrt_compute":101.09,"load_ms":49.4,"mel_ms":0.0,"encode_ms":108.8,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":684.9,"xrt_compute":51.59,"load_ms":49.9,"mel_ms":0.0,"encode_ms":684.9,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"jfk","sample_duration_s":11.0,"total_ms":68.2,"xrt_compute":161.23,"load_ms":155.2,"mel_ms":0.0,"encode_ms":68.2,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"F16","sample":"dots","sample_duration_s":35.332,"total_ms":316.0,"xrt_compute":111.81,"load_ms":68.4,"mel_ms":0.0,"encode_ms":316.0,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":63.8,"xrt_compute":172.42,"load_ms":104.6,"mel_ms":0.0,"encode_ms":63.8,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null}, + {"machine":"m4","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":317.9,"xrt_compute":111.16,"load_ms":50.4,"mel_ms":0.0,"encode_ms":317.9,"decode_ms":0.0,"engine_sha":"d42c3bb","measured_on":"2026-07-22","thermal_gated":null} ] } diff --git a/catalog/fun-asr-mlt-nano-2512.json b/catalog/fun-asr-mlt-nano-2512.json index ee9226ab..d0dc6a54 100644 --- a/catalog/fun-asr-mlt-nano-2512.json +++ b/catalog/fun-asr-mlt-nano-2512.json @@ -82,21 +82,21 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":66.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":70.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":2120.0,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":575.0,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2360.0,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":661.0,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":499.0,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":144.0,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":539.0,"xrt_compute":66.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":156.0,"xrt_compute":70.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6873.6,"xrt_compute":5.14,"load_ms":589.3,"mel_ms":104.1,"encode_ms":2031.5,"decode_ms":4737.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":6968.8,"xrt_wall":5.07}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1809.7,"xrt_compute":6.078,"load_ms":569.8,"mel_ms":31.6,"encode_ms":549.3,"decode_ms":1228.8,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1842.1,"xrt_wall":5.972}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8484.1,"xrt_compute":4.165,"load_ms":921.1,"mel_ms":105.8,"encode_ms":2275.3,"decode_ms":6103.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":8595.6,"xrt_wall":4.11}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2313.3,"xrt_compute":4.755,"load_ms":932.2,"mel_ms":33.4,"encode_ms":648.3,"decode_ms":1631.5,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2352.0,"xrt_wall":4.677}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3862.4,"xrt_compute":9.148,"load_ms":559.1,"mel_ms":104.2,"encode_ms":966.0,"decode_ms":2792.2,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":3915.3,"xrt_wall":9.024}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1001.7,"xrt_compute":10.981,"load_ms":558.7,"mel_ms":30.4,"encode_ms":274.4,"decode_ms":696.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1025.4,"xrt_wall":10.727}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4425.7,"xrt_compute":7.983,"load_ms":801.7,"mel_ms":107.2,"encode_ms":959.6,"decode_ms":3358.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":4478.8,"xrt_wall":7.889}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1118.3,"xrt_compute":9.836,"load_ms":790.3,"mel_ms":40.0,"encode_ms":270.7,"decode_ms":807.6,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1142.1,"xrt_wall":9.631} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1809.7,"xrt_compute":6.08,"load_ms":569.8,"mel_ms":31.6,"encode_ms":549.3,"decode_ms":1228.8,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1842.1,"xrt_wall":5.97}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8484.1,"xrt_compute":4.17,"load_ms":921.1,"mel_ms":105.8,"encode_ms":2275.3,"decode_ms":6103.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":8595.6,"xrt_wall":4.11}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2313.3,"xrt_compute":4.75,"load_ms":932.2,"mel_ms":33.4,"encode_ms":648.3,"decode_ms":1631.5,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2352.0,"xrt_wall":4.68}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3862.4,"xrt_compute":9.15,"load_ms":559.1,"mel_ms":104.2,"encode_ms":966.0,"decode_ms":2792.2,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":3915.3,"xrt_wall":9.02}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1001.7,"xrt_compute":10.98,"load_ms":558.7,"mel_ms":30.4,"encode_ms":274.4,"decode_ms":696.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1025.4,"xrt_wall":10.73}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4425.7,"xrt_compute":7.98,"load_ms":801.7,"mel_ms":107.2,"encode_ms":959.6,"decode_ms":3358.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":4478.8,"xrt_wall":7.89}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1118.3,"xrt_compute":9.84,"load_ms":790.3,"mel_ms":40.0,"encode_ms":270.7,"decode_ms":807.6,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1142.1,"xrt_wall":9.63} ] } diff --git a/catalog/fun-asr-nano-2512.json b/catalog/fun-asr-nano-2512.json index ab66b905..40854fab 100644 --- a/catalog/fun-asr-nano-2512.json +++ b/catalog/fun-asr-nano-2512.json @@ -50,21 +50,21 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":86.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":73.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4424.0,"xrt_compute":7.986,"load_ms":562.9,"mel_ms":85.1,"encode_ms":1904.4,"decode_ms":2434.5,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":4515.7,"xrt_wall":7.824}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1118.6,"xrt_compute":9.834,"load_ms":554.4,"mel_ms":24.7,"encode_ms":524.9,"decode_ms":568.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1150.2,"xrt_wall":9.563}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2896.5,"xrt_compute":12.198,"load_ms":520.2,"mel_ms":95.9,"encode_ms":971.8,"decode_ms":1828.8,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2949.1,"xrt_wall":11.981}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1310.0,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":358.0,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1400.0,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":379.0,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":433.0,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":129.0,"xrt_compute":86.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":486.0,"xrt_compute":73.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":134.0,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4424.0,"xrt_compute":7.99,"load_ms":562.9,"mel_ms":85.1,"encode_ms":1904.4,"decode_ms":2434.5,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":4515.7,"xrt_wall":7.82}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1118.6,"xrt_compute":9.83,"load_ms":554.4,"mel_ms":24.7,"encode_ms":524.9,"decode_ms":568.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1150.2,"xrt_wall":9.56}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":5540.0,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1480.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2896.5,"xrt_compute":12.2,"load_ms":520.2,"mel_ms":95.9,"encode_ms":971.8,"decode_ms":1828.8,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2949.1,"xrt_wall":11.98}, {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":801.2,"xrt_compute":13.73,"load_ms":641.6,"mel_ms":35.4,"encode_ms":275.3,"decode_ms":490.5,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":825.2,"xrt_wall":13.33}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3690.1,"xrt_compute":9.575,"load_ms":746.7,"mel_ms":100.8,"encode_ms":947.3,"decode_ms":2642.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":3741.9,"xrt_wall":9.442}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":864.3,"xrt_compute":12.727,"load_ms":862.5,"mel_ms":37.7,"encode_ms":267.7,"decode_ms":559.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":887.0,"xrt_wall":12.402} + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3690.1,"xrt_compute":9.57,"load_ms":746.7,"mel_ms":100.8,"encode_ms":947.3,"decode_ms":2642.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":3741.9,"xrt_wall":9.44}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":864.3,"xrt_compute":12.73,"load_ms":862.5,"mel_ms":37.7,"encode_ms":267.7,"decode_ms":559.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":887.0,"xrt_wall":12.4} ] } diff --git a/catalog/gigaam-v3-ctc.json b/catalog/gigaam-v3-ctc.json index 05f15391..f508038a 100644 --- a/catalog/gigaam-v3-ctc.json +++ b/catalog/gigaam-v3-ctc.json @@ -48,13 +48,13 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":142.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":152.0,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":157.0,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":32.0,"xrt_compute":142.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":31.0,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":383.0,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":488.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":141.0,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":137.0,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/gigaam-v3-e2e-ctc.json b/catalog/gigaam-v3-e2e-ctc.json index 4fb14833..0678dac2 100644 --- a/catalog/gigaam-v3-e2e-ctc.json +++ b/catalog/gigaam-v3-e2e-ctc.json @@ -48,13 +48,13 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":111.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":161.0,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":164.0,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":40.0,"xrt_compute":111.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":40.0,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":397.0,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":494.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":155.0,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":152.0,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/gigaam-v3-e2e-rnnt.json b/catalog/gigaam-v3-e2e-rnnt.json index 078923b0..fbd3ae8d 100644 --- a/catalog/gigaam-v3-e2e-rnnt.json +++ b/catalog/gigaam-v3-e2e-rnnt.json @@ -48,13 +48,13 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":26.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":89.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":88.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":172.0,"xrt_compute":26.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":177.0,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":51.0,"xrt_compute":89.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":51.0,"xrt_compute":88.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":444.0,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":552.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":205.0,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":202.0,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/gigaam-v3-rnnt.json b/catalog/gigaam-v3-rnnt.json index eeedbb37..91620fca 100644 --- a/catalog/gigaam-v3-rnnt.json +++ b/catalog/gigaam-v3-rnnt.json @@ -48,13 +48,13 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":105.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":110.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":null,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":166.0,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":167.0,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":43.0,"xrt_compute":105.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":41.0,"xrt_compute":110.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":420.0,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":511.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":184.0,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":179.0,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/granite-4.0-1b-speech.json b/catalog/granite-4.0-1b-speech.json index f4700e97..e4891c59 100644 --- a/catalog/granite-4.0-1b-speech.json +++ b/catalog/granite-4.0-1b-speech.json @@ -53,21 +53,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4250.7,"xrt_compute":8.312,"load_ms":385.1,"mel_ms":1.9,"encode_ms":2796.9,"decode_ms":1452.0,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5147.8,"xrt_wall":6.863}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1299.2,"xrt_compute":8.467,"load_ms":381.2,"mel_ms":0.7,"encode_ms":827.8,"decode_ms":470.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1484.2,"xrt_wall":7.412}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4811.9,"xrt_compute":7.343,"load_ms":580.8,"mel_ms":2.0,"encode_ms":3316.3,"decode_ms":1493.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5964.5,"xrt_wall":5.924}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1554.6,"xrt_compute":7.076,"load_ms":576.4,"mel_ms":0.7,"encode_ms":1020.3,"decode_ms":533.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1796.5,"xrt_wall":6.123}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":347.2,"xrt_compute":101.774,"load_ms":384.8,"mel_ms":1.7,"encode_ms":238.2,"decode_ms":107.2,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":927.8,"xrt_wall":38.083}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":128.8,"xrt_compute":85.412,"load_ms":384.7,"mel_ms":0.8,"encode_ms":80.2,"decode_ms":47.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":254.3,"xrt_wall":43.252}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":340.7,"xrt_compute":103.695,"load_ms":603.2,"mel_ms":1.8,"encode_ms":235.0,"decode_ms":104.0,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1049.8,"xrt_wall":33.655}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":126.5,"xrt_compute":86.924,"load_ms":601.0,"mel_ms":0.7,"encode_ms":79.1,"decode_ms":46.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":284.0,"xrt_wall":38.731}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":13721.2,"xrt_compute":2.575,"load_ms":1532.9,"mel_ms":47.2,"encode_ms":9682.7,"decode_ms":3991.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":18084.8,"xrt_wall":1.954}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4298.6,"xrt_compute":2.559,"load_ms":2224.6,"mel_ms":15.2,"encode_ms":2884.1,"decode_ms":1399.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":5209.5,"xrt_wall":2.112}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":17385.3,"xrt_compute":2.032,"load_ms":3740.1,"mel_ms":52.6,"encode_ms":11702.5,"decode_ms":5630.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":24212.9,"xrt_wall":1.459}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5269.0,"xrt_compute":2.088,"load_ms":3692.4,"mel_ms":16.2,"encode_ms":3379.3,"decode_ms":1873.5,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":6719.5,"xrt_wall":1.637}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6607.5,"xrt_compute":5.347,"load_ms":1635.7,"mel_ms":60.9,"encode_ms":4776.8,"decode_ms":1769.8,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":11370.3,"xrt_wall":3.107}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2448.3,"xrt_compute":4.493,"load_ms":2150.1,"mel_ms":31.3,"encode_ms":1601.1,"decode_ms":815.9,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3471.9,"xrt_wall":3.168}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6501.4,"xrt_compute":5.435,"load_ms":3466.0,"mel_ms":62.0,"encode_ms":4702.1,"decode_ms":1737.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":12299.6,"xrt_wall":2.873}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2434.5,"xrt_compute":4.518,"load_ms":3339.5,"mel_ms":32.7,"encode_ms":1598.7,"decode_ms":803.0,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3710.9,"xrt_wall":2.964} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4250.7,"xrt_compute":8.31,"load_ms":385.1,"mel_ms":1.9,"encode_ms":2796.9,"decode_ms":1452.0,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5147.8,"xrt_wall":6.86}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1299.2,"xrt_compute":8.47,"load_ms":381.2,"mel_ms":0.7,"encode_ms":827.8,"decode_ms":470.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1484.2,"xrt_wall":7.41}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4811.9,"xrt_compute":7.34,"load_ms":580.8,"mel_ms":2.0,"encode_ms":3316.3,"decode_ms":1493.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5964.5,"xrt_wall":5.92}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1554.6,"xrt_compute":7.08,"load_ms":576.4,"mel_ms":0.7,"encode_ms":1020.3,"decode_ms":533.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1796.5,"xrt_wall":6.12}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":347.2,"xrt_compute":101.77,"load_ms":384.8,"mel_ms":1.7,"encode_ms":238.2,"decode_ms":107.2,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":927.8,"xrt_wall":38.08}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":128.8,"xrt_compute":85.41,"load_ms":384.7,"mel_ms":0.8,"encode_ms":80.2,"decode_ms":47.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":254.3,"xrt_wall":43.25}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":340.7,"xrt_compute":103.69,"load_ms":603.2,"mel_ms":1.8,"encode_ms":235.0,"decode_ms":104.0,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1049.8,"xrt_wall":33.66}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":126.5,"xrt_compute":86.92,"load_ms":601.0,"mel_ms":0.7,"encode_ms":79.1,"decode_ms":46.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":284.0,"xrt_wall":38.73}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":13721.2,"xrt_compute":2.58,"load_ms":1532.9,"mel_ms":47.2,"encode_ms":9682.7,"decode_ms":3991.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":18084.8,"xrt_wall":1.95}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4298.6,"xrt_compute":2.56,"load_ms":2224.6,"mel_ms":15.2,"encode_ms":2884.1,"decode_ms":1399.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":5209.5,"xrt_wall":2.11}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":17385.3,"xrt_compute":2.03,"load_ms":3740.1,"mel_ms":52.6,"encode_ms":11702.5,"decode_ms":5630.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":24212.9,"xrt_wall":1.46}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5269.0,"xrt_compute":2.09,"load_ms":3692.4,"mel_ms":16.2,"encode_ms":3379.3,"decode_ms":1873.5,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":6719.5,"xrt_wall":1.64}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6607.5,"xrt_compute":5.35,"load_ms":1635.7,"mel_ms":60.9,"encode_ms":4776.8,"decode_ms":1769.8,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":11370.3,"xrt_wall":3.11}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2448.3,"xrt_compute":4.49,"load_ms":2150.1,"mel_ms":31.3,"encode_ms":1601.1,"decode_ms":815.9,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3471.9,"xrt_wall":3.17}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6501.4,"xrt_compute":5.43,"load_ms":3466.0,"mel_ms":62.0,"encode_ms":4702.1,"decode_ms":1737.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":12299.6,"xrt_wall":2.87}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2434.5,"xrt_compute":4.52,"load_ms":3339.5,"mel_ms":32.7,"encode_ms":1598.7,"decode_ms":803.0,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3710.9,"xrt_wall":2.96} ] } diff --git a/catalog/granite-speech-4.1-2b-nar.json b/catalog/granite-speech-4.1-2b-nar.json index c0fcbdd3..e530f170 100644 --- a/catalog/granite-speech-4.1-2b-nar.json +++ b/catalog/granite-speech-4.1-2b-nar.json @@ -52,21 +52,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6214.3,"xrt_compute":5.686,"load_ms":357.5,"mel_ms":2.0,"encode_ms":3488.4,"decode_ms":2723.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":6501.8,"xrt_wall":5.434}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1783.1,"xrt_compute":6.169,"load_ms":351.6,"mel_ms":0.7,"encode_ms":1072.6,"decode_ms":709.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1871.4,"xrt_wall":5.878}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7380.5,"xrt_compute":4.787,"load_ms":535.6,"mel_ms":2.2,"encode_ms":3980.7,"decode_ms":3397.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":7709.2,"xrt_wall":4.583}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1893.2,"xrt_compute":5.81,"load_ms":525.1,"mel_ms":0.8,"encode_ms":1214.8,"decode_ms":677.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1986.4,"xrt_wall":5.538}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":518.0,"xrt_compute":68.212,"load_ms":365.1,"mel_ms":2.0,"encode_ms":302.4,"decode_ms":213.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":664.2,"xrt_wall":53.196}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":163.1,"xrt_compute":67.434,"load_ms":364.2,"mel_ms":0.8,"encode_ms":99.7,"decode_ms":62.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":208.8,"xrt_wall":52.683}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":491.3,"xrt_compute":71.911,"load_ms":551.6,"mel_ms":1.9,"encode_ms":285.8,"decode_ms":203.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":635.2,"xrt_wall":55.62}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":151.3,"xrt_compute":72.697,"load_ms":549.7,"mel_ms":0.8,"encode_ms":93.7,"decode_ms":56.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":196.0,"xrt_wall":56.121}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":19551.7,"xrt_compute":1.807,"load_ms":1182.7,"mel_ms":49.8,"encode_ms":11774.3,"decode_ms":7727.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":20388.3,"xrt_wall":1.733}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5461.8,"xrt_compute":2.014,"load_ms":1988.4,"mel_ms":15.4,"encode_ms":3535.7,"decode_ms":1910.7,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":5708.1,"xrt_wall":1.927}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":23770.5,"xrt_compute":1.486,"load_ms":3180.0,"mel_ms":56.9,"encode_ms":13813.3,"decode_ms":9900.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":24806.2,"xrt_wall":1.424}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6754.9,"xrt_compute":1.628,"load_ms":3191.0,"mel_ms":15.9,"encode_ms":4207.4,"decode_ms":2531.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":7053.1,"xrt_wall":1.56}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8525.3,"xrt_compute":4.144,"load_ms":1083.1,"mel_ms":46.9,"encode_ms":5414.3,"decode_ms":3064.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":9846.0,"xrt_wall":3.588}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2753.2,"xrt_compute":3.995,"load_ms":1781.8,"mel_ms":15.3,"encode_ms":1831.2,"decode_ms":906.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3163.3,"xrt_wall":3.477}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8322.8,"xrt_compute":4.245,"load_ms":1868.9,"mel_ms":49.2,"encode_ms":5318.6,"decode_ms":2955.0,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":9569.1,"xrt_wall":3.692}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2682.8,"xrt_compute":4.1,"load_ms":2896.8,"mel_ms":15.5,"encode_ms":1779.5,"decode_ms":887.8,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3061.4,"xrt_wall":3.593} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6214.3,"xrt_compute":5.69,"load_ms":357.5,"mel_ms":2.0,"encode_ms":3488.4,"decode_ms":2723.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":6501.8,"xrt_wall":5.43}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1783.1,"xrt_compute":6.17,"load_ms":351.6,"mel_ms":0.7,"encode_ms":1072.6,"decode_ms":709.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1871.4,"xrt_wall":5.88}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7380.5,"xrt_compute":4.79,"load_ms":535.6,"mel_ms":2.2,"encode_ms":3980.7,"decode_ms":3397.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":7709.2,"xrt_wall":4.58}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1893.2,"xrt_compute":5.81,"load_ms":525.1,"mel_ms":0.8,"encode_ms":1214.8,"decode_ms":677.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1986.4,"xrt_wall":5.54}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":518.0,"xrt_compute":68.21,"load_ms":365.1,"mel_ms":2.0,"encode_ms":302.4,"decode_ms":213.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":664.2,"xrt_wall":53.2}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":163.1,"xrt_compute":67.43,"load_ms":364.2,"mel_ms":0.8,"encode_ms":99.7,"decode_ms":62.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":208.8,"xrt_wall":52.68}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":491.3,"xrt_compute":71.91,"load_ms":551.6,"mel_ms":1.9,"encode_ms":285.8,"decode_ms":203.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":635.2,"xrt_wall":55.62}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":151.3,"xrt_compute":72.7,"load_ms":549.7,"mel_ms":0.8,"encode_ms":93.7,"decode_ms":56.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":196.0,"xrt_wall":56.12}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":19551.7,"xrt_compute":1.81,"load_ms":1182.7,"mel_ms":49.8,"encode_ms":11774.3,"decode_ms":7727.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":20388.3,"xrt_wall":1.73}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5461.8,"xrt_compute":2.01,"load_ms":1988.4,"mel_ms":15.4,"encode_ms":3535.7,"decode_ms":1910.7,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":5708.1,"xrt_wall":1.93}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":23770.5,"xrt_compute":1.49,"load_ms":3180.0,"mel_ms":56.9,"encode_ms":13813.3,"decode_ms":9900.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":24806.2,"xrt_wall":1.42}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6754.9,"xrt_compute":1.63,"load_ms":3191.0,"mel_ms":15.9,"encode_ms":4207.4,"decode_ms":2531.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":7053.1,"xrt_wall":1.56}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8525.3,"xrt_compute":4.14,"load_ms":1083.1,"mel_ms":46.9,"encode_ms":5414.3,"decode_ms":3064.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":9846.0,"xrt_wall":3.59}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2753.2,"xrt_compute":4.0,"load_ms":1781.8,"mel_ms":15.3,"encode_ms":1831.2,"decode_ms":906.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3163.3,"xrt_wall":3.48}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8322.8,"xrt_compute":4.25,"load_ms":1868.9,"mel_ms":49.2,"encode_ms":5318.6,"decode_ms":2955.0,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":9569.1,"xrt_wall":3.69}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2682.8,"xrt_compute":4.1,"load_ms":2896.8,"mel_ms":15.5,"encode_ms":1779.5,"decode_ms":887.8,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3061.4,"xrt_wall":3.59} ] } diff --git a/catalog/granite-speech-4.1-2b-plus.json b/catalog/granite-speech-4.1-2b-plus.json index 710de847..55d43428 100644 --- a/catalog/granite-speech-4.1-2b-plus.json +++ b/catalog/granite-speech-4.1-2b-plus.json @@ -52,21 +52,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4543.7,"xrt_compute":7.776,"load_ms":358.2,"mel_ms":2.3,"encode_ms":2935.7,"decode_ms":1605.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5708.4,"xrt_wall":6.19}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1644.3,"xrt_compute":6.69,"load_ms":359.8,"mel_ms":0.8,"encode_ms":917.6,"decode_ms":725.9,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1873.6,"xrt_wall":5.871}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5489.8,"xrt_compute":6.436,"load_ms":550.5,"mel_ms":2.0,"encode_ms":3406.3,"decode_ms":2081.5,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":6905.7,"xrt_wall":5.116}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1770.1,"xrt_compute":6.214,"load_ms":538.8,"mel_ms":0.7,"encode_ms":1052.6,"decode_ms":716.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":2044.8,"xrt_wall":5.38}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":358.7,"xrt_compute":98.494,"load_ms":390.8,"mel_ms":1.9,"encode_ms":240.4,"decode_ms":116.4,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1024.4,"xrt_wall":34.49}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":139.5,"xrt_compute":78.833,"load_ms":372.1,"mel_ms":0.8,"encode_ms":81.1,"decode_ms":57.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":280.4,"xrt_wall":39.231}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":351.2,"xrt_compute":100.607,"load_ms":560.6,"mel_ms":1.9,"encode_ms":236.4,"decode_ms":112.9,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1179.5,"xrt_wall":29.956}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":136.0,"xrt_compute":80.875,"load_ms":567.3,"mel_ms":0.8,"encode_ms":79.6,"decode_ms":55.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":308.2,"xrt_wall":35.688}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15056.3,"xrt_compute":2.347,"load_ms":1325.1,"mel_ms":48.2,"encode_ms":10235.5,"decode_ms":4772.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":20451.6,"xrt_wall":1.728}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4543.7,"xrt_compute":7.78,"load_ms":358.2,"mel_ms":2.3,"encode_ms":2935.7,"decode_ms":1605.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5708.4,"xrt_wall":6.19}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1644.3,"xrt_compute":6.69,"load_ms":359.8,"mel_ms":0.8,"encode_ms":917.6,"decode_ms":725.9,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1873.6,"xrt_wall":5.87}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5489.8,"xrt_compute":6.44,"load_ms":550.5,"mel_ms":2.0,"encode_ms":3406.3,"decode_ms":2081.5,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":6905.7,"xrt_wall":5.12}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1770.1,"xrt_compute":6.21,"load_ms":538.8,"mel_ms":0.7,"encode_ms":1052.6,"decode_ms":716.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":2044.8,"xrt_wall":5.38}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":358.7,"xrt_compute":98.49,"load_ms":390.8,"mel_ms":1.9,"encode_ms":240.4,"decode_ms":116.4,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1024.4,"xrt_wall":34.49}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":139.5,"xrt_compute":78.83,"load_ms":372.1,"mel_ms":0.8,"encode_ms":81.1,"decode_ms":57.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":280.4,"xrt_wall":39.23}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":351.2,"xrt_compute":100.61,"load_ms":560.6,"mel_ms":1.9,"encode_ms":236.4,"decode_ms":112.9,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1179.5,"xrt_wall":29.96}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":136.0,"xrt_compute":80.88,"load_ms":567.3,"mel_ms":0.8,"encode_ms":79.6,"decode_ms":55.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":308.2,"xrt_wall":35.69}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15056.3,"xrt_compute":2.35,"load_ms":1325.1,"mel_ms":48.2,"encode_ms":10235.5,"decode_ms":4772.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":20451.6,"xrt_wall":1.73}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5022.2,"xrt_compute":2.19,"load_ms":2045.7,"mel_ms":16.6,"encode_ms":3033.5,"decode_ms":1972.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":6077.7,"xrt_wall":1.81}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":18193.0,"xrt_compute":1.942,"load_ms":2813.3,"mel_ms":50.4,"encode_ms":11756.7,"decode_ms":6385.9,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":26230.4,"xrt_wall":1.347}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6204.1,"xrt_compute":1.773,"load_ms":3457.8,"mel_ms":16.8,"encode_ms":3552.8,"decode_ms":2634.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":7799.6,"xrt_wall":1.41}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6833.1,"xrt_compute":5.171,"load_ms":1193.0,"mel_ms":59.9,"encode_ms":4749.7,"decode_ms":2023.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":12294.1,"xrt_wall":2.874}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2499.1,"xrt_compute":4.402,"load_ms":1946.9,"mel_ms":31.4,"encode_ms":1608.1,"decode_ms":859.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3631.1,"xrt_wall":3.029}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6726.0,"xrt_compute":5.253,"load_ms":2593.8,"mel_ms":63.3,"encode_ms":4688.4,"decode_ms":1974.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":13420.0,"xrt_wall":2.633}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2456.2,"xrt_compute":4.478,"load_ms":3370.4,"mel_ms":31.4,"encode_ms":1580.3,"decode_ms":844.5,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3846.2,"xrt_wall":2.86} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":18193.0,"xrt_compute":1.94,"load_ms":2813.3,"mel_ms":50.4,"encode_ms":11756.7,"decode_ms":6385.9,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":26230.4,"xrt_wall":1.35}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6204.1,"xrt_compute":1.77,"load_ms":3457.8,"mel_ms":16.8,"encode_ms":3552.8,"decode_ms":2634.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":7799.6,"xrt_wall":1.41}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6833.1,"xrt_compute":5.17,"load_ms":1193.0,"mel_ms":59.9,"encode_ms":4749.7,"decode_ms":2023.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":12294.1,"xrt_wall":2.87}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2499.1,"xrt_compute":4.4,"load_ms":1946.9,"mel_ms":31.4,"encode_ms":1608.1,"decode_ms":859.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3631.1,"xrt_wall":3.03}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6726.0,"xrt_compute":5.25,"load_ms":2593.8,"mel_ms":63.3,"encode_ms":4688.4,"decode_ms":1974.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":13420.0,"xrt_wall":2.63}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2456.2,"xrt_compute":4.48,"load_ms":3370.4,"mel_ms":31.4,"encode_ms":1580.3,"decode_ms":844.5,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3846.2,"xrt_wall":2.86} ] } diff --git a/catalog/granite-speech-4.1-2b.json b/catalog/granite-speech-4.1-2b.json index 1515c527..a917940d 100644 --- a/catalog/granite-speech-4.1-2b.json +++ b/catalog/granite-speech-4.1-2b.json @@ -53,21 +53,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4442.9,"xrt_compute":7.952,"load_ms":375.5,"mel_ms":1.9,"encode_ms":2918.7,"decode_ms":1522.3,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5488.2,"xrt_wall":6.438}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1450.2,"xrt_compute":7.585,"load_ms":380.7,"mel_ms":0.8,"encode_ms":908.3,"decode_ms":541.1,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1668.3,"xrt_wall":6.594}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4890.5,"xrt_compute":7.225,"load_ms":578.5,"mel_ms":2.0,"encode_ms":3332.0,"decode_ms":1556.5,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":6221.2,"xrt_wall":5.679}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1578.9,"xrt_compute":6.967,"load_ms":580.8,"mel_ms":0.7,"encode_ms":1042.5,"decode_ms":535.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1852.8,"xrt_wall":5.937}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":349.4,"xrt_compute":101.108,"load_ms":412.3,"mel_ms":1.9,"encode_ms":239.7,"decode_ms":107.9,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1004.0,"xrt_wall":35.191}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":129.6,"xrt_compute":84.903,"load_ms":397.2,"mel_ms":0.7,"encode_ms":80.7,"decode_ms":48.1,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":272.2,"xrt_wall":40.409}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":342.7,"xrt_compute":103.09,"load_ms":604.8,"mel_ms":1.9,"encode_ms":236.2,"decode_ms":104.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1164.7,"xrt_wall":30.337}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":127.0,"xrt_compute":86.641,"load_ms":609.0,"mel_ms":0.8,"encode_ms":79.4,"decode_ms":46.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":303.1,"xrt_wall":36.29}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":14513.3,"xrt_compute":2.434,"load_ms":1427.1,"mel_ms":47.1,"encode_ms":10234.4,"decode_ms":4231.9,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":19494.1,"xrt_wall":1.812}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4551.2,"xrt_compute":2.417,"load_ms":2255.7,"mel_ms":17.0,"encode_ms":3047.6,"decode_ms":1486.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":5581.1,"xrt_wall":1.971}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":17560.8,"xrt_compute":2.012,"load_ms":3118.8,"mel_ms":49.6,"encode_ms":11804.1,"decode_ms":5707.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":25503.1,"xrt_wall":1.385}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5548.0,"xrt_compute":1.983,"load_ms":3722.9,"mel_ms":17.0,"encode_ms":3539.9,"decode_ms":1991.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":7187.5,"xrt_wall":1.53}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6612.4,"xrt_compute":5.343,"load_ms":1564.7,"mel_ms":59.7,"encode_ms":4795.7,"decode_ms":1757.0,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":11791.3,"xrt_wall":2.996}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2440.7,"xrt_compute":4.507,"load_ms":2048.2,"mel_ms":31.9,"encode_ms":1591.9,"decode_ms":816.8,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3578.2,"xrt_wall":3.074}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6518.1,"xrt_compute":5.421,"load_ms":2702.8,"mel_ms":62.0,"encode_ms":4722.0,"decode_ms":1734.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":13082.4,"xrt_wall":2.701}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2410.2,"xrt_compute":4.564,"load_ms":3442.8,"mel_ms":32.5,"encode_ms":1576.6,"decode_ms":801.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3837.8,"xrt_wall":2.866} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4442.9,"xrt_compute":7.95,"load_ms":375.5,"mel_ms":1.9,"encode_ms":2918.7,"decode_ms":1522.3,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5488.2,"xrt_wall":6.44}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1450.2,"xrt_compute":7.58,"load_ms":380.7,"mel_ms":0.8,"encode_ms":908.3,"decode_ms":541.1,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1668.3,"xrt_wall":6.59}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4890.5,"xrt_compute":7.22,"load_ms":578.5,"mel_ms":2.0,"encode_ms":3332.0,"decode_ms":1556.5,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":6221.2,"xrt_wall":5.68}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1578.9,"xrt_compute":6.97,"load_ms":580.8,"mel_ms":0.7,"encode_ms":1042.5,"decode_ms":535.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1852.8,"xrt_wall":5.94}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":349.4,"xrt_compute":101.11,"load_ms":412.3,"mel_ms":1.9,"encode_ms":239.7,"decode_ms":107.9,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1004.0,"xrt_wall":35.19}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":129.6,"xrt_compute":84.9,"load_ms":397.2,"mel_ms":0.7,"encode_ms":80.7,"decode_ms":48.1,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":272.2,"xrt_wall":40.41}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":342.7,"xrt_compute":103.09,"load_ms":604.8,"mel_ms":1.9,"encode_ms":236.2,"decode_ms":104.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1164.7,"xrt_wall":30.34}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":127.0,"xrt_compute":86.64,"load_ms":609.0,"mel_ms":0.8,"encode_ms":79.4,"decode_ms":46.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":303.1,"xrt_wall":36.29}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":14513.3,"xrt_compute":2.43,"load_ms":1427.1,"mel_ms":47.1,"encode_ms":10234.4,"decode_ms":4231.9,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":19494.1,"xrt_wall":1.81}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4551.2,"xrt_compute":2.42,"load_ms":2255.7,"mel_ms":17.0,"encode_ms":3047.6,"decode_ms":1486.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":5581.1,"xrt_wall":1.97}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":17560.8,"xrt_compute":2.01,"load_ms":3118.8,"mel_ms":49.6,"encode_ms":11804.1,"decode_ms":5707.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":25503.1,"xrt_wall":1.39}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5548.0,"xrt_compute":1.98,"load_ms":3722.9,"mel_ms":17.0,"encode_ms":3539.9,"decode_ms":1991.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":7187.5,"xrt_wall":1.53}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6612.4,"xrt_compute":5.34,"load_ms":1564.7,"mel_ms":59.7,"encode_ms":4795.7,"decode_ms":1757.0,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":11791.3,"xrt_wall":3.0}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2440.7,"xrt_compute":4.51,"load_ms":2048.2,"mel_ms":31.9,"encode_ms":1591.9,"decode_ms":816.8,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3578.2,"xrt_wall":3.07}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6518.1,"xrt_compute":5.42,"load_ms":2702.8,"mel_ms":62.0,"encode_ms":4722.0,"decode_ms":1734.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":13082.4,"xrt_wall":2.7}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2410.2,"xrt_compute":4.56,"load_ms":3442.8,"mel_ms":32.5,"encode_ms":1576.6,"decode_ms":801.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3837.8,"xrt_wall":2.87} ] } diff --git a/catalog/medasr.json b/catalog/medasr.json index e11a3dca..d9eb5c9c 100644 --- a/catalog/medasr.json +++ b/catalog/medasr.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":57.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":61.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":63.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":394.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":248.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":419.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":290.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1626.2,"xrt_compute":21.727,"load_ms":86.9,"mel_ms":61.9,"encode_ms":1563.6,"decode_ms":0.6,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":1626.8,"xrt_wall":21.718}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":487.7,"xrt_compute":22.557,"load_ms":88.3,"mel_ms":20.3,"encode_ms":467.2,"decode_ms":0.2,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":488.2,"xrt_wall":22.534}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1838.7,"xrt_compute":19.215,"load_ms":108.3,"mel_ms":63.3,"encode_ms":1774.8,"decode_ms":0.6,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":1839.4,"xrt_wall":19.209}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":542.0,"xrt_compute":20.295,"load_ms":105.1,"mel_ms":21.1,"encode_ms":520.8,"decode_ms":0.2,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":542.5,"xrt_wall":20.276}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":493.4,"xrt_compute":71.615,"load_ms":93.6,"mel_ms":71.7,"encode_ms":420.4,"decode_ms":1.3,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":494.9,"xrt_wall":71.391}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":172.9,"xrt_compute":63.635,"load_ms":86.9,"mel_ms":36.8,"encode_ms":135.3,"decode_ms":0.7,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":174.2,"xrt_wall":63.142}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":479.0,"xrt_compute":73.758,"load_ms":101.4,"mel_ms":63.9,"encode_ms":413.3,"decode_ms":1.8,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":480.5,"xrt_wall":73.525}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":161.4,"xrt_compute":68.173,"load_ms":103.8,"mel_ms":31.2,"encode_ms":129.6,"decode_ms":0.5,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":162.7,"xrt_wall":67.609} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":623.0,"xrt_compute":57.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":180.0,"xrt_compute":61.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":558.0,"xrt_compute":63.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":161.0,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":90.0,"xrt_compute":394.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":44.0,"xrt_compute":248.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":84.0,"xrt_compute":419.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":38.0,"xrt_compute":290.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1626.2,"xrt_compute":21.73,"load_ms":86.9,"mel_ms":61.9,"encode_ms":1563.6,"decode_ms":0.6,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":1626.8,"xrt_wall":21.72}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":487.7,"xrt_compute":22.56,"load_ms":88.3,"mel_ms":20.3,"encode_ms":467.2,"decode_ms":0.2,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":488.2,"xrt_wall":22.53}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1838.7,"xrt_compute":19.21,"load_ms":108.3,"mel_ms":63.3,"encode_ms":1774.8,"decode_ms":0.6,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":1839.4,"xrt_wall":19.21}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":542.0,"xrt_compute":20.3,"load_ms":105.1,"mel_ms":21.1,"encode_ms":520.8,"decode_ms":0.2,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":542.5,"xrt_wall":20.28}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":493.4,"xrt_compute":71.61,"load_ms":93.6,"mel_ms":71.7,"encode_ms":420.4,"decode_ms":1.3,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":494.9,"xrt_wall":71.39}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":172.9,"xrt_compute":63.63,"load_ms":86.9,"mel_ms":36.8,"encode_ms":135.3,"decode_ms":0.7,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":174.2,"xrt_wall":63.14}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":479.0,"xrt_compute":73.76,"load_ms":101.4,"mel_ms":63.9,"encode_ms":413.3,"decode_ms":1.8,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":480.5,"xrt_wall":73.53}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":161.4,"xrt_compute":68.17,"load_ms":103.8,"mel_ms":31.2,"encode_ms":129.6,"decode_ms":0.5,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":162.7,"xrt_wall":67.61} ] } diff --git a/catalog/moonshine-base.json b/catalog/moonshine-base.json index a012c949..ebc0ea8f 100644 --- a/catalog/moonshine-base.json +++ b/catalog/moonshine-base.json @@ -43,12 +43,12 @@ }, "speed_benchmarks": [ {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":718.7,"xrt_compute":49.16,"load_ms":53.2,"mel_ms":0.0,"encode_ms":237.2,"decode_ms":481.5,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":718.7,"xrt_wall":49.16}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":96.4,"xrt_compute":114.159,"load_ms":56.4,"mel_ms":0.0,"encode_ms":61.1,"decode_ms":35.2,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":96.4,"xrt_wall":114.153}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":96.4,"xrt_compute":114.16,"load_ms":56.4,"mel_ms":0.0,"encode_ms":61.1,"decode_ms":35.2,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":96.4,"xrt_wall":114.15}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":811.0,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":96.0,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3168.7,"xrt_compute":11.15,"load_ms":115.2,"mel_ms":0.0,"encode_ms":671.0,"decode_ms":2497.7,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":3168.7,"xrt_wall":11.15}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":331.1,"xrt_compute":33.222,"load_ms":113.4,"mel_ms":0.0,"encode_ms":178.0,"decode_ms":153.1,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":331.1,"xrt_wall":33.222}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":331.1,"xrt_compute":33.22,"load_ms":113.4,"mel_ms":0.0,"encode_ms":178.0,"decode_ms":153.1,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":331.1,"xrt_wall":33.22}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1850.0,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":218.0,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/moonshine-streaming-medium.json b/catalog/moonshine-streaming-medium.json index cc10685e..aa34806e 100644 --- a/catalog/moonshine-streaming-medium.json +++ b/catalog/moonshine-streaming-medium.json @@ -42,13 +42,13 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1106.7,"xrt_compute":31.927,"load_ms":95.9,"mel_ms":0.0,"encode_ms":710.8,"decode_ms":395.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":1106.6,"xrt_wall":31.928}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":281.3,"xrt_compute":39.109,"load_ms":88.6,"mel_ms":0.0,"encode_ms":231.4,"decode_ms":49.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":281.3,"xrt_wall":39.11}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":952.1,"xrt_compute":37.108,"load_ms":100.0,"mel_ms":0.0,"encode_ms":93.3,"decode_ms":858.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":952.1,"xrt_wall":37.108}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":124.0,"xrt_compute":88.695,"load_ms":98.2,"mel_ms":0.0,"encode_ms":26.9,"decode_ms":97.1,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":124.0,"xrt_wall":88.693}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1065.6,"xrt_compute":10.322,"load_ms":267.4,"mel_ms":0.0,"encode_ms":820.8,"decode_ms":244.8,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":1065.7,"xrt_wall":10.322}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4013.5,"xrt_compute":8.803,"load_ms":226.4,"mel_ms":0.0,"encode_ms":822.3,"decode_ms":3191.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":4013.5,"xrt_wall":8.803}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":569.7,"xrt_compute":19.307,"load_ms":226.8,"mel_ms":0.0,"encode_ms":229.2,"decode_ms":340.5,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":569.7,"xrt_wall":19.307} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1106.7,"xrt_compute":31.93,"load_ms":95.9,"mel_ms":0.0,"encode_ms":710.8,"decode_ms":395.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":1106.6,"xrt_wall":31.93}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":281.3,"xrt_compute":39.11,"load_ms":88.6,"mel_ms":0.0,"encode_ms":231.4,"decode_ms":49.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":281.3,"xrt_wall":39.11}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":952.1,"xrt_compute":37.11,"load_ms":100.0,"mel_ms":0.0,"encode_ms":93.3,"decode_ms":858.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":952.1,"xrt_wall":37.11}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":124.0,"xrt_compute":88.69,"load_ms":98.2,"mel_ms":0.0,"encode_ms":26.9,"decode_ms":97.1,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":124.0,"xrt_wall":88.69}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":6500.0,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1065.6,"xrt_compute":10.32,"load_ms":267.4,"mel_ms":0.0,"encode_ms":820.8,"decode_ms":244.8,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":1065.7,"xrt_wall":10.32}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4013.5,"xrt_compute":8.8,"load_ms":226.4,"mel_ms":0.0,"encode_ms":822.3,"decode_ms":3191.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":4013.5,"xrt_wall":8.8}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":569.7,"xrt_compute":19.31,"load_ms":226.8,"mel_ms":0.0,"encode_ms":229.2,"decode_ms":340.5,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":569.7,"xrt_wall":19.31} ] } diff --git a/catalog/moonshine-streaming-small.json b/catalog/moonshine-streaming-small.json index 4b1bb3ce..2f9e7107 100644 --- a/catalog/moonshine-streaming-small.json +++ b/catalog/moonshine-streaming-small.json @@ -42,13 +42,13 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":699.0,"xrt_compute":50.547,"load_ms":81.0,"mel_ms":0.0,"encode_ms":466.1,"decode_ms":232.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":699.0,"xrt_wall":50.548}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":173.7,"xrt_compute":63.311,"load_ms":66.6,"mel_ms":0.0,"encode_ms":143.8,"decode_ms":30.0,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":173.7,"xrt_wall":63.31}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":612.4,"xrt_compute":57.693,"load_ms":80.5,"mel_ms":0.0,"encode_ms":66.4,"decode_ms":546.0,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":612.4,"xrt_wall":57.693}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":82.3,"xrt_compute":133.581,"load_ms":80.4,"mel_ms":0.0,"encode_ms":19.7,"decode_ms":62.7,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":82.4,"xrt_wall":133.571}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4002.9,"xrt_compute":8.827,"load_ms":195.1,"mel_ms":0.0,"encode_ms":2073.0,"decode_ms":1929.9,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":4002.9,"xrt_wall":8.827}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":734.9,"xrt_compute":14.969,"load_ms":191.9,"mel_ms":0.0,"encode_ms":611.7,"decode_ms":123.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":734.9,"xrt_wall":14.969}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2381.2,"xrt_compute":14.838,"load_ms":187.0,"mel_ms":0.0,"encode_ms":497.3,"decode_ms":1884.0,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":2381.2,"xrt_wall":14.838}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":348.9,"xrt_compute":31.53,"load_ms":186.0,"mel_ms":0.0,"encode_ms":152.6,"decode_ms":196.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":348.9,"xrt_wall":31.529} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":699.0,"xrt_compute":50.55,"load_ms":81.0,"mel_ms":0.0,"encode_ms":466.1,"decode_ms":232.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":699.0,"xrt_wall":50.55}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":173.7,"xrt_compute":63.31,"load_ms":66.6,"mel_ms":0.0,"encode_ms":143.8,"decode_ms":30.0,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":173.7,"xrt_wall":63.31}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":612.4,"xrt_compute":57.69,"load_ms":80.5,"mel_ms":0.0,"encode_ms":66.4,"decode_ms":546.0,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":612.4,"xrt_wall":57.69}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":82.3,"xrt_compute":133.58,"load_ms":80.4,"mel_ms":0.0,"encode_ms":19.7,"decode_ms":62.7,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":82.4,"xrt_wall":133.57}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4002.9,"xrt_compute":8.83,"load_ms":195.1,"mel_ms":0.0,"encode_ms":2073.0,"decode_ms":1929.9,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":4002.9,"xrt_wall":8.83}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":734.9,"xrt_compute":14.97,"load_ms":191.9,"mel_ms":0.0,"encode_ms":611.7,"decode_ms":123.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":734.9,"xrt_wall":14.97}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2381.2,"xrt_compute":14.84,"load_ms":187.0,"mel_ms":0.0,"encode_ms":497.3,"decode_ms":1884.0,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":2381.2,"xrt_wall":14.84}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":348.9,"xrt_compute":31.53,"load_ms":186.0,"mel_ms":0.0,"encode_ms":152.6,"decode_ms":196.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":348.9,"xrt_wall":31.53} ] } diff --git a/catalog/moonshine-streaming-tiny.json b/catalog/moonshine-streaming-tiny.json index 29725b41..804e04f1 100644 --- a/catalog/moonshine-streaming-tiny.json +++ b/catalog/moonshine-streaming-tiny.json @@ -42,13 +42,13 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":205.5,"xrt_compute":171.939,"load_ms":57.0,"mel_ms":0.0,"encode_ms":90.4,"decode_ms":115.1,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":205.5,"xrt_wall":171.934}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":44.1,"xrt_compute":249.575,"load_ms":57.8,"mel_ms":0.0,"encode_ms":26.9,"decode_ms":17.2,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":44.1,"xrt_wall":249.546}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":355.0,"xrt_compute":99.53,"load_ms":60.0,"mel_ms":0.0,"encode_ms":26.9,"decode_ms":328.1,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":355.0,"xrt_wall":99.528}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":50.4,"xrt_compute":218.462,"load_ms":60.4,"mel_ms":0.0,"encode_ms":8.0,"decode_ms":42.3,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":50.4,"xrt_wall":218.445}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":881.5,"xrt_compute":40.082,"load_ms":91.0,"mel_ms":0.0,"encode_ms":384.2,"decode_ms":497.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":881.5,"xrt_wall":40.081}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":160.2,"xrt_compute":68.675,"load_ms":92.4,"mel_ms":0.0,"encode_ms":104.9,"decode_ms":55.3,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":160.2,"xrt_wall":68.672}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":891.9,"xrt_compute":39.613,"load_ms":97.0,"mel_ms":0.0,"encode_ms":141.5,"decode_ms":750.4,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":891.9,"xrt_wall":39.612}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":139.4,"xrt_compute":78.884,"load_ms":103.5,"mel_ms":0.0,"encode_ms":41.3,"decode_ms":98.1,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":139.5,"xrt_wall":78.879} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":205.5,"xrt_compute":171.94,"load_ms":57.0,"mel_ms":0.0,"encode_ms":90.4,"decode_ms":115.1,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":205.5,"xrt_wall":171.93}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":44.1,"xrt_compute":249.57,"load_ms":57.8,"mel_ms":0.0,"encode_ms":26.9,"decode_ms":17.2,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":44.1,"xrt_wall":249.55}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":355.0,"xrt_compute":99.53,"load_ms":60.0,"mel_ms":0.0,"encode_ms":26.9,"decode_ms":328.1,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":355.0,"xrt_wall":99.53}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":50.4,"xrt_compute":218.46,"load_ms":60.4,"mel_ms":0.0,"encode_ms":8.0,"decode_ms":42.3,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":50.4,"xrt_wall":218.44}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":881.5,"xrt_compute":40.08,"load_ms":91.0,"mel_ms":0.0,"encode_ms":384.2,"decode_ms":497.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":881.5,"xrt_wall":40.08}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":160.2,"xrt_compute":68.67,"load_ms":92.4,"mel_ms":0.0,"encode_ms":104.9,"decode_ms":55.3,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":160.2,"xrt_wall":68.67}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":891.9,"xrt_compute":39.61,"load_ms":97.0,"mel_ms":0.0,"encode_ms":141.5,"decode_ms":750.4,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":891.9,"xrt_wall":39.61}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":139.4,"xrt_compute":78.88,"load_ms":103.5,"mel_ms":0.0,"encode_ms":41.3,"decode_ms":98.1,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":139.5,"xrt_wall":78.88} ] } diff --git a/catalog/moonshine-tiny.json b/catalog/moonshine-tiny.json index b7b2e862..78039c41 100644 --- a/catalog/moonshine-tiny.json +++ b/catalog/moonshine-tiny.json @@ -42,13 +42,13 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":377.9,"xrt_compute":93.499,"load_ms":42.0,"mel_ms":0.0,"encode_ms":112.9,"decode_ms":265.0,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":377.9,"xrt_wall":93.497}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":51.5,"xrt_compute":213.737,"load_ms":34.8,"mel_ms":0.0,"encode_ms":29.1,"decode_ms":22.4,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":51.5,"xrt_wall":213.721}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":58.6,"xrt_compute":187.758,"load_ms":33.7,"mel_ms":0.0,"encode_ms":14.4,"decode_ms":44.2,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":58.6,"xrt_wall":187.745}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1528.0,"xrt_compute":23.124,"load_ms":81.6,"mel_ms":0.0,"encode_ms":319.1,"decode_ms":1208.8,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":1528.0,"xrt_wall":23.124}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":162.8,"xrt_compute":67.58,"load_ms":84.3,"mel_ms":0.0,"encode_ms":76.6,"decode_ms":86.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":162.8,"xrt_wall":67.577}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":147.0,"xrt_compute":74.818,"load_ms":97.2,"mel_ms":0.0,"encode_ms":38.4,"decode_ms":108.7,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":147.0,"xrt_wall":74.814} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":377.9,"xrt_compute":93.5,"load_ms":42.0,"mel_ms":0.0,"encode_ms":112.9,"decode_ms":265.0,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":377.9,"xrt_wall":93.5}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":51.5,"xrt_compute":213.74,"load_ms":34.8,"mel_ms":0.0,"encode_ms":29.1,"decode_ms":22.4,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":51.5,"xrt_wall":213.72}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":478.0,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":58.6,"xrt_compute":187.76,"load_ms":33.7,"mel_ms":0.0,"encode_ms":14.4,"decode_ms":44.2,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":58.6,"xrt_wall":187.75}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1528.0,"xrt_compute":23.12,"load_ms":81.6,"mel_ms":0.0,"encode_ms":319.1,"decode_ms":1208.8,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":1528.0,"xrt_wall":23.12}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":162.8,"xrt_compute":67.58,"load_ms":84.3,"mel_ms":0.0,"encode_ms":76.6,"decode_ms":86.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":162.8,"xrt_wall":67.58}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1020.0,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":147.0,"xrt_compute":74.82,"load_ms":97.2,"mel_ms":0.0,"encode_ms":38.4,"decode_ms":108.7,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":147.0,"xrt_wall":74.81} ] } diff --git a/catalog/moss-transcribe-diarize.json b/catalog/moss-transcribe-diarize.json index f8438cef..0f1f20da 100644 --- a/catalog/moss-transcribe-diarize.json +++ b/catalog/moss-transcribe-diarize.json @@ -49,21 +49,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":6.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":5.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":30.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":28.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":5840.0,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2370.0,"xrt_compute":4.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":5710.0,"xrt_compute":6.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2060.0,"xrt_compute":5.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1170.0,"xrt_compute":30.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":369.0,"xrt_compute":29.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1270.0,"xrt_compute":27.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":388.0,"xrt_compute":28.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":19220.0,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7060.0,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":21200.0,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7490.0,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":10680.0,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3680.0,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":11380.0,"xrt_compute":3.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3880.0,"xrt_compute":2.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/multitalker-parakeet-streaming-0.6b-v1.json b/catalog/multitalker-parakeet-streaming-0.6b-v1.json index 1c38c154..b3f478c0 100644 --- a/catalog/multitalker-parakeet-streaming-0.6b-v1.json +++ b/catalog/multitalker-parakeet-streaming-0.6b-v1.json @@ -50,21 +50,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1026.8,"xrt_compute":34.409,"load_ms":162.3,"mel_ms":1.6,"encode_ms":989.6,"decode_ms":35.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1028.5,"xrt_wall":34.354}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":306.0,"xrt_compute":35.946,"load_ms":151.4,"mel_ms":0.6,"encode_ms":297.4,"decode_ms":8.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":306.8,"xrt_wall":35.855}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1049.0,"xrt_compute":33.68,"load_ms":203.5,"mel_ms":1.6,"encode_ms":1011.7,"decode_ms":35.7,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1050.7,"xrt_wall":33.626}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":309.0,"xrt_compute":35.601,"load_ms":203.5,"mel_ms":0.6,"encode_ms":300.5,"decode_ms":7.8,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":309.7,"xrt_wall":35.515}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":183.2,"xrt_compute":192.824,"load_ms":121.3,"mel_ms":1.5,"encode_ms":146.4,"decode_ms":35.4,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":185.4,"xrt_wall":190.575}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":67.7,"xrt_compute":162.414,"load_ms":155.3,"mel_ms":0.7,"encode_ms":59.1,"decode_ms":8.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":69.1,"xrt_wall":159.238}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":181.5,"xrt_compute":194.691,"load_ms":166.8,"mel_ms":1.5,"encode_ms":144.5,"decode_ms":35.5,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":183.7,"xrt_wall":192.386}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":65.8,"xrt_compute":167.171,"load_ms":169.4,"mel_ms":0.6,"encode_ms":57.6,"decode_ms":7.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":67.0,"xrt_wall":164.13}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3116.5,"xrt_compute":11.337,"load_ms":620.1,"mel_ms":60.8,"encode_ms":2805.1,"decode_ms":250.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":3120.7,"xrt_wall":11.322}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":814.3,"xrt_compute":13.508,"load_ms":619.0,"mel_ms":19.4,"encode_ms":748.8,"decode_ms":46.1,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":816.0,"xrt_wall":13.48}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2991.0,"xrt_compute":11.813,"load_ms":784.1,"mel_ms":61.5,"encode_ms":2681.5,"decode_ms":248.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":2995.0,"xrt_wall":11.797}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":749.5,"xrt_compute":14.676,"load_ms":796.2,"mel_ms":18.8,"encode_ms":685.8,"decode_ms":45.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":751.2,"xrt_wall":14.643}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1378.6,"xrt_compute":25.629,"load_ms":301.0,"mel_ms":57.9,"encode_ms":1082.4,"decode_ms":238.2,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1385.5,"xrt_wall":25.501}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":466.5,"xrt_compute":23.582,"load_ms":299.1,"mel_ms":18.0,"encode_ms":401.6,"decode_ms":46.8,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":474.6,"xrt_wall":23.177}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1342.2,"xrt_compute":26.323,"load_ms":431.5,"mel_ms":57.6,"encode_ms":1046.0,"decode_ms":238.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1360.2,"xrt_wall":25.976}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":458.5,"xrt_compute":23.99,"load_ms":423.9,"mel_ms":18.3,"encode_ms":393.9,"decode_ms":46.4,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":466.2,"xrt_wall":23.594} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1026.8,"xrt_compute":34.41,"load_ms":162.3,"mel_ms":1.6,"encode_ms":989.6,"decode_ms":35.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1028.5,"xrt_wall":34.35}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":306.0,"xrt_compute":35.95,"load_ms":151.4,"mel_ms":0.6,"encode_ms":297.4,"decode_ms":8.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":306.8,"xrt_wall":35.85}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1049.0,"xrt_compute":33.68,"load_ms":203.5,"mel_ms":1.6,"encode_ms":1011.7,"decode_ms":35.7,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1050.7,"xrt_wall":33.63}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":309.0,"xrt_compute":35.6,"load_ms":203.5,"mel_ms":0.6,"encode_ms":300.5,"decode_ms":7.8,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":309.7,"xrt_wall":35.52}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":183.2,"xrt_compute":192.82,"load_ms":121.3,"mel_ms":1.5,"encode_ms":146.4,"decode_ms":35.4,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":185.4,"xrt_wall":190.57}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":67.7,"xrt_compute":162.41,"load_ms":155.3,"mel_ms":0.7,"encode_ms":59.1,"decode_ms":8.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":69.1,"xrt_wall":159.24}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":181.5,"xrt_compute":194.69,"load_ms":166.8,"mel_ms":1.5,"encode_ms":144.5,"decode_ms":35.5,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":183.7,"xrt_wall":192.39}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":65.8,"xrt_compute":167.17,"load_ms":169.4,"mel_ms":0.6,"encode_ms":57.6,"decode_ms":7.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":67.0,"xrt_wall":164.13}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3116.5,"xrt_compute":11.34,"load_ms":620.1,"mel_ms":60.8,"encode_ms":2805.1,"decode_ms":250.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":3120.7,"xrt_wall":11.32}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":814.3,"xrt_compute":13.51,"load_ms":619.0,"mel_ms":19.4,"encode_ms":748.8,"decode_ms":46.1,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":816.0,"xrt_wall":13.48}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2991.0,"xrt_compute":11.81,"load_ms":784.1,"mel_ms":61.5,"encode_ms":2681.5,"decode_ms":248.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":2995.0,"xrt_wall":11.8}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":749.5,"xrt_compute":14.68,"load_ms":796.2,"mel_ms":18.8,"encode_ms":685.8,"decode_ms":45.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":751.2,"xrt_wall":14.64}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1378.6,"xrt_compute":25.63,"load_ms":301.0,"mel_ms":57.9,"encode_ms":1082.4,"decode_ms":238.2,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1385.5,"xrt_wall":25.5}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":466.5,"xrt_compute":23.58,"load_ms":299.1,"mel_ms":18.0,"encode_ms":401.6,"decode_ms":46.8,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":474.6,"xrt_wall":23.18}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1342.2,"xrt_compute":26.32,"load_ms":431.5,"mel_ms":57.6,"encode_ms":1046.0,"decode_ms":238.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1360.2,"xrt_wall":25.98}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":458.5,"xrt_compute":23.99,"load_ms":423.9,"mel_ms":18.3,"encode_ms":393.9,"decode_ms":46.4,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":466.2,"xrt_wall":23.59} ] } diff --git a/catalog/nemotron-3.5-asr-streaming-0.6b.json b/catalog/nemotron-3.5-asr-streaming-0.6b.json index 5ddbe905..84330993 100644 --- a/catalog/nemotron-3.5-asr-streaming-0.6b.json +++ b/catalog/nemotron-3.5-asr-streaming-0.6b.json @@ -88,21 +88,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1247.9,"xrt_compute":28.314,"load_ms":190.4,"mel_ms":1.5,"encode_ms":1050.6,"decode_ms":195.8,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1249.5,"xrt_wall":28.276}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":361.6,"xrt_compute":30.418,"load_ms":183.0,"mel_ms":0.6,"encode_ms":314.3,"decode_ms":46.8,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":362.4,"xrt_wall":30.353}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1274.5,"xrt_compute":27.722,"load_ms":224.0,"mel_ms":1.5,"encode_ms":1081.7,"decode_ms":191.2,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1276.2,"xrt_wall":27.685}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":365.9,"xrt_compute":30.065,"load_ms":227.7,"mel_ms":0.6,"encode_ms":318.3,"decode_ms":47.0,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":366.6,"xrt_wall":30.003}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":366.0,"xrt_compute":96.541,"load_ms":156.9,"mel_ms":1.5,"encode_ms":166.6,"decode_ms":197.9,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":368.2,"xrt_wall":95.956}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":111.5,"xrt_compute":98.695,"load_ms":132.1,"mel_ms":0.6,"encode_ms":63.0,"decode_ms":47.9,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":112.7,"xrt_wall":97.597}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":359.1,"xrt_compute":98.391,"load_ms":191.4,"mel_ms":1.4,"encode_ms":167.1,"decode_ms":190.6,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":361.3,"xrt_wall":97.786}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":111.5,"xrt_compute":98.652,"load_ms":201.5,"mel_ms":0.6,"encode_ms":61.9,"decode_ms":49.1,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":112.7,"xrt_wall":97.601}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1088.5,"xrt_compute":10.106,"load_ms":679.2,"mel_ms":17.9,"encode_ms":831.6,"decode_ms":239.0,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1090.2,"xrt_wall":10.09}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1364.9,"xrt_compute":8.059,"load_ms":848.4,"mel_ms":20.0,"encode_ms":1089.6,"decode_ms":255.4,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1366.7,"xrt_wall":8.049}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2367.7,"xrt_compute":14.923,"load_ms":372.8,"mel_ms":60.7,"encode_ms":1313.5,"decode_ms":993.5,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":2373.8,"xrt_wall":14.884}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":779.6,"xrt_compute":14.11,"load_ms":367.0,"mel_ms":20.2,"encode_ms":489.0,"decode_ms":270.4,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":783.3,"xrt_wall":14.044}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2366.4,"xrt_compute":14.931,"load_ms":467.2,"mel_ms":61.3,"encode_ms":1301.9,"decode_ms":1003.2,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":2373.0,"xrt_wall":14.889}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":768.9,"xrt_compute":14.306,"load_ms":471.7,"mel_ms":20.5,"encode_ms":483.4,"decode_ms":265.0,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":773.5,"xrt_wall":14.222} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1247.9,"xrt_compute":28.31,"load_ms":190.4,"mel_ms":1.5,"encode_ms":1050.6,"decode_ms":195.8,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1249.5,"xrt_wall":28.28}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":361.6,"xrt_compute":30.42,"load_ms":183.0,"mel_ms":0.6,"encode_ms":314.3,"decode_ms":46.8,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":362.4,"xrt_wall":30.35}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1274.5,"xrt_compute":27.72,"load_ms":224.0,"mel_ms":1.5,"encode_ms":1081.7,"decode_ms":191.2,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1276.2,"xrt_wall":27.68}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":365.9,"xrt_compute":30.07,"load_ms":227.7,"mel_ms":0.6,"encode_ms":318.3,"decode_ms":47.0,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":366.6,"xrt_wall":30.0}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":366.0,"xrt_compute":96.54,"load_ms":156.9,"mel_ms":1.5,"encode_ms":166.6,"decode_ms":197.9,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":368.2,"xrt_wall":95.96}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":111.5,"xrt_compute":98.69,"load_ms":132.1,"mel_ms":0.6,"encode_ms":63.0,"decode_ms":47.9,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":112.7,"xrt_wall":97.6}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":359.1,"xrt_compute":98.39,"load_ms":191.4,"mel_ms":1.4,"encode_ms":167.1,"decode_ms":190.6,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":361.3,"xrt_wall":97.79}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":111.5,"xrt_compute":98.65,"load_ms":201.5,"mel_ms":0.6,"encode_ms":61.9,"decode_ms":49.1,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":112.7,"xrt_wall":97.6}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4170.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1088.5,"xrt_compute":10.11,"load_ms":679.2,"mel_ms":17.9,"encode_ms":831.6,"decode_ms":239.0,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1090.2,"xrt_wall":10.09}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4760.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1364.9,"xrt_compute":8.06,"load_ms":848.4,"mel_ms":20.0,"encode_ms":1089.6,"decode_ms":255.4,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1366.7,"xrt_wall":8.05}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2367.7,"xrt_compute":14.92,"load_ms":372.8,"mel_ms":60.7,"encode_ms":1313.5,"decode_ms":993.5,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":2373.8,"xrt_wall":14.88}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":779.6,"xrt_compute":14.11,"load_ms":367.0,"mel_ms":20.2,"encode_ms":489.0,"decode_ms":270.4,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":783.3,"xrt_wall":14.04}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2366.4,"xrt_compute":14.93,"load_ms":467.2,"mel_ms":61.3,"encode_ms":1301.9,"decode_ms":1003.2,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":2373.0,"xrt_wall":14.89}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":768.9,"xrt_compute":14.31,"load_ms":471.7,"mel_ms":20.5,"encode_ms":483.4,"decode_ms":265.0,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":773.5,"xrt_wall":14.22} ] } diff --git a/catalog/nemotron-speech-streaming-en-0.6b.json b/catalog/nemotron-speech-streaming-en-0.6b.json index 3206aa97..a8d1a38e 100644 --- a/catalog/nemotron-speech-streaming-en-0.6b.json +++ b/catalog/nemotron-speech-streaming-en-0.6b.json @@ -50,21 +50,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1157.7,"xrt_compute":30.519,"load_ms":159.4,"mel_ms":1.6,"encode_ms":1039.9,"decode_ms":116.2,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1159.3,"xrt_wall":30.477}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":345.0,"xrt_compute":31.888,"load_ms":157.9,"mel_ms":0.6,"encode_ms":313.9,"decode_ms":30.4,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":345.7,"xrt_wall":31.818}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1177.1,"xrt_compute":30.015,"load_ms":208.2,"mel_ms":1.6,"encode_ms":1060.6,"decode_ms":114.9,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1178.7,"xrt_wall":29.974}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":346.2,"xrt_compute":31.771,"load_ms":209.3,"mel_ms":0.6,"encode_ms":315.3,"decode_ms":30.3,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":347.0,"xrt_wall":31.703}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":160.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1223.0,"xrt_compute":8.995,"load_ms":594.0,"mel_ms":19.5,"encode_ms":818.7,"decode_ms":384.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1224.7,"xrt_wall":8.982}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5209.0,"xrt_compute":6.783,"load_ms":768.0,"mel_ms":60.6,"encode_ms":3366.0,"decode_ms":1782.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":5212.8,"xrt_wall":6.778}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1157.7,"xrt_compute":30.52,"load_ms":159.4,"mel_ms":1.6,"encode_ms":1039.9,"decode_ms":116.2,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1159.3,"xrt_wall":30.48}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":345.0,"xrt_compute":31.89,"load_ms":157.9,"mel_ms":0.6,"encode_ms":313.9,"decode_ms":30.4,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":345.7,"xrt_wall":31.82}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1177.1,"xrt_compute":30.02,"load_ms":208.2,"mel_ms":1.6,"encode_ms":1060.6,"decode_ms":114.9,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1178.7,"xrt_wall":29.97}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":346.2,"xrt_compute":31.77,"load_ms":209.3,"mel_ms":0.6,"encode_ms":315.3,"decode_ms":30.3,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":347.0,"xrt_wall":31.7}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":221.0,"xrt_compute":160.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":73.0,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":224.0,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":73.0,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4760.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1223.0,"xrt_compute":8.99,"load_ms":594.0,"mel_ms":19.5,"encode_ms":818.7,"decode_ms":384.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1224.7,"xrt_wall":8.98}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5209.0,"xrt_compute":6.78,"load_ms":768.0,"mel_ms":60.6,"encode_ms":3366.0,"decode_ms":1782.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":5212.8,"xrt_wall":6.78}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1385.4,"xrt_compute":7.94,"load_ms":762.5,"mel_ms":20.9,"encode_ms":973.4,"decode_ms":391.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1387.1,"xrt_wall":7.93}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2976.1,"xrt_compute":11.872,"load_ms":328.6,"mel_ms":63.7,"encode_ms":1144.1,"decode_ms":1768.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2983.1,"xrt_wall":11.844}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":809.6,"xrt_compute":13.587,"load_ms":318.6,"mel_ms":19.3,"encode_ms":417.3,"decode_ms":372.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":813.2,"xrt_wall":13.528}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2924.5,"xrt_compute":12.081,"load_ms":438.7,"mel_ms":63.8,"encode_ms":1109.1,"decode_ms":1751.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2930.4,"xrt_wall":12.057}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":808.3,"xrt_compute":13.609,"load_ms":421.3,"mel_ms":19.0,"encode_ms":402.9,"decode_ms":386.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":811.8,"xrt_wall":13.55} + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2976.1,"xrt_compute":11.87,"load_ms":328.6,"mel_ms":63.7,"encode_ms":1144.1,"decode_ms":1768.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2983.1,"xrt_wall":11.84}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":809.6,"xrt_compute":13.59,"load_ms":318.6,"mel_ms":19.3,"encode_ms":417.3,"decode_ms":372.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":813.2,"xrt_wall":13.53}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2924.5,"xrt_compute":12.08,"load_ms":438.7,"mel_ms":63.8,"encode_ms":1109.1,"decode_ms":1751.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2930.4,"xrt_wall":12.06}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":808.3,"xrt_compute":13.61,"load_ms":421.3,"mel_ms":19.0,"encode_ms":402.9,"decode_ms":386.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":811.8,"xrt_wall":13.55} ] } diff --git a/catalog/parakeet-ctc-0.6b.json b/catalog/parakeet-ctc-0.6b.json index ddadd6a9..7c705f95 100644 --- a/catalog/parakeet-ctc-0.6b.json +++ b/catalog/parakeet-ctc-0.6b.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":999.3,"xrt_compute":35.355,"load_ms":155.7,"mel_ms":1.8,"encode_ms":995.5,"decode_ms":2.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1001.1,"xrt_wall":35.295}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":296.8,"xrt_compute":37.066,"load_ms":159.6,"mel_ms":0.7,"encode_ms":295.4,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":297.6,"xrt_wall":36.968}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1192.2,"xrt_compute":29.635,"load_ms":209.1,"mel_ms":1.7,"encode_ms":1188.5,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1194.0,"xrt_wall":29.592}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":355.1,"xrt_compute":30.98,"load_ms":217.5,"mel_ms":0.7,"encode_ms":353.7,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":355.9,"xrt_wall":30.909}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":142.4,"xrt_compute":248.04,"load_ms":136.8,"mel_ms":1.7,"encode_ms":138.8,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":144.8,"xrt_wall":244.036}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":57.4,"xrt_compute":191.564,"load_ms":156.0,"mel_ms":0.7,"encode_ms":55.8,"decode_ms":0.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":59.3,"xrt_wall":185.435}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":140.7,"xrt_compute":251.18,"load_ms":185.3,"mel_ms":1.8,"encode_ms":136.8,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":143.3,"xrt_wall":246.482}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":55.5,"xrt_compute":198.18,"load_ms":212.7,"mel_ms":0.7,"encode_ms":53.9,"decode_ms":0.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":57.6,"xrt_wall":190.999}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3140.9,"xrt_compute":11.249,"load_ms":567.4,"mel_ms":42.5,"encode_ms":2755.6,"decode_ms":342.9,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":3144.4,"xrt_wall":11.236}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":863.4,"xrt_compute":12.74,"load_ms":836.6,"mel_ms":13.8,"encode_ms":743.2,"decode_ms":106.4,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":865.1,"xrt_wall":12.715}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3666.7,"xrt_compute":9.636,"load_ms":721.2,"mel_ms":42.7,"encode_ms":3275.9,"decode_ms":348.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":3670.3,"xrt_wall":9.626}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1068.6,"xrt_compute":10.294,"load_ms":1016.2,"mel_ms":14.9,"encode_ms":939.2,"decode_ms":114.4,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1070.3,"xrt_wall":10.277}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1498.1,"xrt_compute":23.584,"load_ms":312.2,"mel_ms":44.9,"encode_ms":1114.4,"decode_ms":338.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1504.6,"xrt_wall":23.483}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":537.4,"xrt_compute":20.467,"load_ms":310.6,"mel_ms":14.2,"encode_ms":418.1,"decode_ms":105.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":540.9,"xrt_wall":20.336}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1496.8,"xrt_compute":23.605,"load_ms":399.6,"mel_ms":45.2,"encode_ms":1092.4,"decode_ms":359.3,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1503.4,"xrt_wall":23.502}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":520.3,"xrt_compute":21.141,"load_ms":381.9,"mel_ms":14.1,"encode_ms":400.0,"decode_ms":106.2,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":523.9,"xrt_wall":20.998} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":999.3,"xrt_compute":35.35,"load_ms":155.7,"mel_ms":1.8,"encode_ms":995.5,"decode_ms":2.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1001.1,"xrt_wall":35.3}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":296.8,"xrt_compute":37.07,"load_ms":159.6,"mel_ms":0.7,"encode_ms":295.4,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":297.6,"xrt_wall":36.97}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1192.2,"xrt_compute":29.64,"load_ms":209.1,"mel_ms":1.7,"encode_ms":1188.5,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1194.0,"xrt_wall":29.59}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":355.1,"xrt_compute":30.98,"load_ms":217.5,"mel_ms":0.7,"encode_ms":353.7,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":355.9,"xrt_wall":30.91}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":142.4,"xrt_compute":248.04,"load_ms":136.8,"mel_ms":1.7,"encode_ms":138.8,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":144.8,"xrt_wall":244.04}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":57.4,"xrt_compute":191.56,"load_ms":156.0,"mel_ms":0.7,"encode_ms":55.8,"decode_ms":0.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":59.3,"xrt_wall":185.44}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":140.7,"xrt_compute":251.18,"load_ms":185.3,"mel_ms":1.8,"encode_ms":136.8,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":143.3,"xrt_wall":246.48}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":55.5,"xrt_compute":198.18,"load_ms":212.7,"mel_ms":0.7,"encode_ms":53.9,"decode_ms":0.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":57.6,"xrt_wall":191.0}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3140.9,"xrt_compute":11.25,"load_ms":567.4,"mel_ms":42.5,"encode_ms":2755.6,"decode_ms":342.9,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":3144.4,"xrt_wall":11.24}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":863.4,"xrt_compute":12.74,"load_ms":836.6,"mel_ms":13.8,"encode_ms":743.2,"decode_ms":106.4,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":865.1,"xrt_wall":12.71}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3666.7,"xrt_compute":9.64,"load_ms":721.2,"mel_ms":42.7,"encode_ms":3275.9,"decode_ms":348.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":3670.3,"xrt_wall":9.63}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1068.6,"xrt_compute":10.29,"load_ms":1016.2,"mel_ms":14.9,"encode_ms":939.2,"decode_ms":114.4,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1070.3,"xrt_wall":10.28}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1498.1,"xrt_compute":23.58,"load_ms":312.2,"mel_ms":44.9,"encode_ms":1114.4,"decode_ms":338.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1504.6,"xrt_wall":23.48}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":537.4,"xrt_compute":20.47,"load_ms":310.6,"mel_ms":14.2,"encode_ms":418.1,"decode_ms":105.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":540.9,"xrt_wall":20.34}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1496.8,"xrt_compute":23.61,"load_ms":399.6,"mel_ms":45.2,"encode_ms":1092.4,"decode_ms":359.3,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1503.4,"xrt_wall":23.5}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":520.3,"xrt_compute":21.14,"load_ms":381.9,"mel_ms":14.1,"encode_ms":400.0,"decode_ms":106.2,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":523.9,"xrt_wall":21.0} ] } diff --git a/catalog/parakeet-ctc-1.1b.json b/catalog/parakeet-ctc-1.1b.json index 2f03fdab..2fc0fe32 100644 --- a/catalog/parakeet-ctc-1.1b.json +++ b/catalog/parakeet-ctc-1.1b.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1696.6,"xrt_compute":20.826,"load_ms":250.6,"mel_ms":1.6,"encode_ms":1692.9,"decode_ms":2.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1698.5,"xrt_wall":20.801}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":499.8,"xrt_compute":22.01,"load_ms":254.3,"mel_ms":0.7,"encode_ms":498.4,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":500.9,"xrt_wall":21.963}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2042.4,"xrt_compute":17.299,"load_ms":345.3,"mel_ms":1.7,"encode_ms":2038.7,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":2044.4,"xrt_wall":17.282}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":601.1,"xrt_compute":18.299,"load_ms":329.8,"mel_ms":0.7,"encode_ms":599.7,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":602.2,"xrt_wall":18.266}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":220.3,"xrt_compute":160.378,"load_ms":200.6,"mel_ms":1.6,"encode_ms":216.8,"decode_ms":1.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":223.5,"xrt_wall":158.076}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":90.3,"xrt_compute":121.85,"load_ms":219.7,"mel_ms":0.7,"encode_ms":88.8,"decode_ms":0.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":93.1,"xrt_wall":118.135}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":220.8,"xrt_compute":160.022,"load_ms":294.1,"mel_ms":1.6,"encode_ms":217.3,"decode_ms":1.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":224.1,"xrt_wall":157.691}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":87.7,"xrt_compute":125.478,"load_ms":328.4,"mel_ms":0.7,"encode_ms":86.2,"decode_ms":0.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":90.7,"xrt_wall":121.316}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5121.0,"xrt_compute":6.899,"load_ms":962.8,"mel_ms":44.5,"encode_ms":4723.0,"decode_ms":353.5,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":5125.4,"xrt_wall":6.894}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1376.7,"xrt_compute":7.99,"load_ms":1384.1,"mel_ms":14.1,"encode_ms":1254.5,"decode_ms":108.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1379.0,"xrt_wall":7.977}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6083.5,"xrt_compute":5.808,"load_ms":1286.4,"mel_ms":46.6,"encode_ms":5675.1,"decode_ms":361.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":6088.1,"xrt_wall":5.803}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1753.4,"xrt_compute":6.273,"load_ms":1864.5,"mel_ms":14.8,"encode_ms":1624.1,"decode_ms":114.6,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1755.8,"xrt_wall":6.265}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2326.0,"xrt_compute":15.19,"load_ms":538.6,"mel_ms":47.2,"encode_ms":1928.7,"decode_ms":350.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":2334.6,"xrt_wall":15.134}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":822.6,"xrt_compute":13.372,"load_ms":497.2,"mel_ms":13.3,"encode_ms":699.5,"decode_ms":109.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":827.9,"xrt_wall":13.287}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2335.1,"xrt_compute":15.131,"load_ms":721.7,"mel_ms":46.3,"encode_ms":1929.0,"decode_ms":359.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":2343.9,"xrt_wall":15.074}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":826.0,"xrt_compute":13.317,"load_ms":723.8,"mel_ms":13.9,"encode_ms":686.7,"decode_ms":125.3,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":831.6,"xrt_wall":13.228} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1696.6,"xrt_compute":20.83,"load_ms":250.6,"mel_ms":1.6,"encode_ms":1692.9,"decode_ms":2.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1698.5,"xrt_wall":20.8}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":499.8,"xrt_compute":22.01,"load_ms":254.3,"mel_ms":0.7,"encode_ms":498.4,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":500.9,"xrt_wall":21.96}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2042.4,"xrt_compute":17.3,"load_ms":345.3,"mel_ms":1.7,"encode_ms":2038.7,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":2044.4,"xrt_wall":17.28}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":601.1,"xrt_compute":18.3,"load_ms":329.8,"mel_ms":0.7,"encode_ms":599.7,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":602.2,"xrt_wall":18.27}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":220.3,"xrt_compute":160.38,"load_ms":200.6,"mel_ms":1.6,"encode_ms":216.8,"decode_ms":1.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":223.5,"xrt_wall":158.08}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":90.3,"xrt_compute":121.85,"load_ms":219.7,"mel_ms":0.7,"encode_ms":88.8,"decode_ms":0.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":93.1,"xrt_wall":118.14}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":220.8,"xrt_compute":160.02,"load_ms":294.1,"mel_ms":1.6,"encode_ms":217.3,"decode_ms":1.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":224.1,"xrt_wall":157.69}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":87.7,"xrt_compute":125.48,"load_ms":328.4,"mel_ms":0.7,"encode_ms":86.2,"decode_ms":0.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":90.7,"xrt_wall":121.32}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5121.0,"xrt_compute":6.9,"load_ms":962.8,"mel_ms":44.5,"encode_ms":4723.0,"decode_ms":353.5,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":5125.4,"xrt_wall":6.89}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1376.7,"xrt_compute":7.99,"load_ms":1384.1,"mel_ms":14.1,"encode_ms":1254.5,"decode_ms":108.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1379.0,"xrt_wall":7.98}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6083.5,"xrt_compute":5.81,"load_ms":1286.4,"mel_ms":46.6,"encode_ms":5675.1,"decode_ms":361.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":6088.1,"xrt_wall":5.8}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1753.4,"xrt_compute":6.27,"load_ms":1864.5,"mel_ms":14.8,"encode_ms":1624.1,"decode_ms":114.6,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1755.8,"xrt_wall":6.26}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2326.0,"xrt_compute":15.19,"load_ms":538.6,"mel_ms":47.2,"encode_ms":1928.7,"decode_ms":350.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":2334.6,"xrt_wall":15.13}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":822.6,"xrt_compute":13.37,"load_ms":497.2,"mel_ms":13.3,"encode_ms":699.5,"decode_ms":109.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":827.9,"xrt_wall":13.29}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2335.1,"xrt_compute":15.13,"load_ms":721.7,"mel_ms":46.3,"encode_ms":1929.0,"decode_ms":359.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":2343.9,"xrt_wall":15.07}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":826.0,"xrt_compute":13.32,"load_ms":723.8,"mel_ms":13.9,"encode_ms":686.7,"decode_ms":125.3,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":831.6,"xrt_wall":13.23} ] } diff --git a/catalog/parakeet-rnnt-0.6b.json b/catalog/parakeet-rnnt-0.6b.json index 29ac0019..3d024098 100644 --- a/catalog/parakeet-rnnt-0.6b.json +++ b/catalog/parakeet-rnnt-0.6b.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":196.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":170.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":198.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":173.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1065.5,"xrt_compute":10.324,"load_ms":837.6,"mel_ms":14.1,"encode_ms":731.6,"decode_ms":319.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1067.1,"xrt_wall":10.308}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1241.5,"xrt_compute":8.86,"load_ms":1097.5,"mel_ms":14.5,"encode_ms":901.7,"decode_ms":325.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1243.2,"xrt_wall":8.848}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2585.2,"xrt_compute":13.667,"load_ms":359.0,"mel_ms":45.1,"encode_ms":1105.4,"decode_ms":1434.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2592.0,"xrt_wall":13.631}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":750.7,"xrt_compute":14.652,"load_ms":335.9,"mel_ms":14.3,"encode_ms":418.4,"decode_ms":318.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":754.2,"xrt_wall":14.584}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2544.8,"xrt_compute":13.884,"load_ms":403.3,"mel_ms":44.2,"encode_ms":1073.9,"decode_ms":1426.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2551.6,"xrt_wall":13.847}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":738.1,"xrt_compute":14.904,"load_ms":446.2,"mel_ms":14.8,"encode_ms":406.2,"decode_ms":317.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":741.6,"xrt_wall":14.833} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1030.0,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":302.0,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1220.0,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":360.0,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":181.0,"xrt_compute":196.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":65.0,"xrt_compute":170.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":178.0,"xrt_compute":198.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":64.0,"xrt_compute":173.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4140.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1065.5,"xrt_compute":10.32,"load_ms":837.6,"mel_ms":14.1,"encode_ms":731.6,"decode_ms":319.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1067.1,"xrt_wall":10.31}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4710.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1241.5,"xrt_compute":8.86,"load_ms":1097.5,"mel_ms":14.5,"encode_ms":901.7,"decode_ms":325.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1243.2,"xrt_wall":8.85}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2585.2,"xrt_compute":13.67,"load_ms":359.0,"mel_ms":45.1,"encode_ms":1105.4,"decode_ms":1434.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2592.0,"xrt_wall":13.63}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":750.7,"xrt_compute":14.65,"load_ms":335.9,"mel_ms":14.3,"encode_ms":418.4,"decode_ms":318.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":754.2,"xrt_wall":14.58}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2544.8,"xrt_compute":13.88,"load_ms":403.3,"mel_ms":44.2,"encode_ms":1073.9,"decode_ms":1426.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2551.6,"xrt_wall":13.85}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":738.1,"xrt_compute":14.9,"load_ms":446.2,"mel_ms":14.8,"encode_ms":406.2,"decode_ms":317.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":741.6,"xrt_wall":14.83} ] } diff --git a/catalog/parakeet-rnnt-1.1b.json b/catalog/parakeet-rnnt-1.1b.json index e40259c7..d111acd6 100644 --- a/catalog/parakeet-rnnt-1.1b.json +++ b/catalog/parakeet-rnnt-1.1b.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1858.9,"xrt_compute":19.007,"load_ms":263.9,"mel_ms":1.8,"encode_ms":1750.1,"decode_ms":107.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1860.9,"xrt_wall":18.987}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":133.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":114.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":137.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":114.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6178.9,"xrt_compute":5.718,"load_ms":980.2,"mel_ms":44.5,"encode_ms":4678.4,"decode_ms":1456.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":6183.2,"xrt_wall":5.714}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1576.0,"xrt_compute":6.98,"load_ms":1392.1,"mel_ms":13.8,"encode_ms":1239.6,"decode_ms":322.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1578.4,"xrt_wall":6.969}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7117.1,"xrt_compute":4.964,"load_ms":1458.6,"mel_ms":45.7,"encode_ms":5569.5,"decode_ms":1501.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":7121.7,"xrt_wall":4.961}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1929.3,"xrt_compute":5.701,"load_ms":1963.2,"mel_ms":14.2,"encode_ms":1579.8,"decode_ms":335.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1931.8,"xrt_wall":5.694}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3302.2,"xrt_compute":10.699,"load_ms":513.2,"mel_ms":44.5,"encode_ms":1832.9,"decode_ms":1424.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3310.5,"xrt_wall":10.673}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1038.0,"xrt_compute":10.597,"load_ms":982.6,"mel_ms":13.4,"encode_ms":700.8,"decode_ms":323.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1043.2,"xrt_wall":10.544}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3340.3,"xrt_compute":10.578,"load_ms":730.1,"mel_ms":46.2,"encode_ms":1836.1,"decode_ms":1458.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3349.1,"xrt_wall":10.55}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1013.7,"xrt_compute":10.851,"load_ms":1012.7,"mel_ms":14.8,"encode_ms":675.1,"decode_ms":323.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1019.1,"xrt_wall":10.794} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1858.9,"xrt_compute":19.01,"load_ms":263.9,"mel_ms":1.8,"encode_ms":1750.1,"decode_ms":107.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1860.9,"xrt_wall":18.99}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":506.0,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2050.0,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":606.0,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":265.0,"xrt_compute":133.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":97.0,"xrt_compute":114.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":258.0,"xrt_compute":137.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":96.0,"xrt_compute":114.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6178.9,"xrt_compute":5.72,"load_ms":980.2,"mel_ms":44.5,"encode_ms":4678.4,"decode_ms":1456.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":6183.2,"xrt_wall":5.71}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1576.0,"xrt_compute":6.98,"load_ms":1392.1,"mel_ms":13.8,"encode_ms":1239.6,"decode_ms":322.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1578.4,"xrt_wall":6.97}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7117.1,"xrt_compute":4.96,"load_ms":1458.6,"mel_ms":45.7,"encode_ms":5569.5,"decode_ms":1501.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":7121.7,"xrt_wall":4.96}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1929.3,"xrt_compute":5.7,"load_ms":1963.2,"mel_ms":14.2,"encode_ms":1579.8,"decode_ms":335.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1931.8,"xrt_wall":5.69}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3302.2,"xrt_compute":10.7,"load_ms":513.2,"mel_ms":44.5,"encode_ms":1832.9,"decode_ms":1424.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3310.5,"xrt_wall":10.67}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1038.0,"xrt_compute":10.6,"load_ms":982.6,"mel_ms":13.4,"encode_ms":700.8,"decode_ms":323.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1043.2,"xrt_wall":10.54}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3340.3,"xrt_compute":10.58,"load_ms":730.1,"mel_ms":46.2,"encode_ms":1836.1,"decode_ms":1458.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3349.1,"xrt_wall":10.55}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1013.7,"xrt_compute":10.85,"load_ms":1012.7,"mel_ms":14.8,"encode_ms":675.1,"decode_ms":323.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1019.1,"xrt_wall":10.79} ] } diff --git a/catalog/parakeet-tdt-0.6b-v2.json b/catalog/parakeet-tdt-0.6b-v2.json index 052f4678..e86cdd63 100644 --- a/catalog/parakeet-tdt-0.6b-v2.json +++ b/catalog/parakeet-tdt-0.6b-v2.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":183.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":187.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1046.2,"xrt_compute":10.514,"load_ms":2618.0,"mel_ms":20.4,"encode_ms":766.0,"decode_ms":259.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1047.8,"xrt_wall":10.498}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1226.9,"xrt_compute":8.966,"load_ms":1139.7,"mel_ms":20.5,"encode_ms":934.7,"decode_ms":271.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1228.6,"xrt_wall":8.953}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2435.6,"xrt_compute":14.507,"load_ms":315.9,"mel_ms":64.5,"encode_ms":1092.4,"decode_ms":1278.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2442.0,"xrt_wall":14.468}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":682.1,"xrt_compute":16.128,"load_ms":326.7,"mel_ms":19.7,"encode_ms":402.8,"decode_ms":259.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":685.3,"xrt_wall":16.051}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2446.3,"xrt_compute":14.443,"load_ms":410.3,"mel_ms":66.2,"encode_ms":1076.3,"decode_ms":1303.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2452.0,"xrt_wall":14.41}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":669.9,"xrt_compute":16.421,"load_ms":402.3,"mel_ms":19.8,"encode_ms":388.0,"decode_ms":262.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":673.4,"xrt_wall":16.336} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1070.0,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":312.0,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1260.0,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":371.0,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":193.0,"xrt_compute":183.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":67.0,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":189.0,"xrt_compute":187.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":68.0,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4140.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1046.2,"xrt_compute":10.51,"load_ms":2618.0,"mel_ms":20.4,"encode_ms":766.0,"decode_ms":259.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1047.8,"xrt_wall":10.5}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4750.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1226.9,"xrt_compute":8.97,"load_ms":1139.7,"mel_ms":20.5,"encode_ms":934.7,"decode_ms":271.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1228.6,"xrt_wall":8.95}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2435.6,"xrt_compute":14.51,"load_ms":315.9,"mel_ms":64.5,"encode_ms":1092.4,"decode_ms":1278.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2442.0,"xrt_wall":14.47}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":682.1,"xrt_compute":16.13,"load_ms":326.7,"mel_ms":19.7,"encode_ms":402.8,"decode_ms":259.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":685.3,"xrt_wall":16.05}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2446.3,"xrt_compute":14.44,"load_ms":410.3,"mel_ms":66.2,"encode_ms":1076.3,"decode_ms":1303.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2452.0,"xrt_wall":14.41}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":669.9,"xrt_compute":16.42,"load_ms":402.3,"mel_ms":19.8,"encode_ms":388.0,"decode_ms":262.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":673.4,"xrt_wall":16.34} ] } diff --git a/catalog/parakeet-tdt-0.6b-v3.json b/catalog/parakeet-tdt-0.6b-v3.json index 5d48cf93..d016af20 100644 --- a/catalog/parakeet-tdt-0.6b-v3.json +++ b/catalog/parakeet-tdt-0.6b-v3.json @@ -76,21 +76,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1309.3,"xrt_compute":26.985,"load_ms":225.5,"mel_ms":3.5,"encode_ms":1247.1,"decode_ms":58.7,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":1311.0,"xrt_wall":26.951}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":385.6,"xrt_compute":28.529,"load_ms":222.2,"mel_ms":1.1,"encode_ms":368.0,"decode_ms":16.5,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":386.3,"xrt_wall":28.474}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":224.1,"xrt_compute":157.684,"load_ms":146.7,"mel_ms":3.3,"encode_ms":150.3,"decode_ms":70.4,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":226.1,"xrt_wall":156.275}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":75.2,"xrt_compute":146.354,"load_ms":151.5,"mel_ms":1.2,"encode_ms":56.9,"decode_ms":17.1,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":76.5,"xrt_wall":143.755}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":223.9,"xrt_compute":157.783,"load_ms":183.9,"mel_ms":3.3,"encode_ms":155.4,"decode_ms":65.2,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":225.8,"xrt_wall":156.451}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":73.5,"xrt_compute":149.593,"load_ms":197.2,"mel_ms":1.2,"encode_ms":55.9,"decode_ms":16.4,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":74.9,"xrt_wall":146.9}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1221.2,"xrt_compute":9.008,"load_ms":883.7,"mel_ms":19.6,"encode_ms":761.8,"decode_ms":439.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1222.8,"xrt_wall":8.996}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1410.4,"xrt_compute":7.799,"load_ms":1164.2,"mel_ms":21.2,"encode_ms":931.7,"decode_ms":457.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1412.1,"xrt_wall":7.79}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3095.0,"xrt_compute":11.416,"load_ms":370.6,"mel_ms":64.6,"encode_ms":1096.8,"decode_ms":1933.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3100.5,"xrt_wall":11.395}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":864.5,"xrt_compute":12.724,"load_ms":380.5,"mel_ms":19.8,"encode_ms":406.6,"decode_ms":438.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":867.7,"xrt_wall":12.676}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3061.3,"xrt_compute":11.542,"load_ms":420.6,"mel_ms":63.5,"encode_ms":1075.7,"decode_ms":1922.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3066.8,"xrt_wall":11.521}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":854.1,"xrt_compute":12.879,"load_ms":426.8,"mel_ms":20.1,"encode_ms":388.1,"decode_ms":445.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":857.5,"xrt_wall":12.828} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1110.0,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":323.0,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1309.3,"xrt_compute":26.98,"load_ms":225.5,"mel_ms":3.5,"encode_ms":1247.1,"decode_ms":58.7,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":1311.0,"xrt_wall":26.95}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":385.6,"xrt_compute":28.53,"load_ms":222.2,"mel_ms":1.1,"encode_ms":368.0,"decode_ms":16.5,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":386.3,"xrt_wall":28.47}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":224.1,"xrt_compute":157.68,"load_ms":146.7,"mel_ms":3.3,"encode_ms":150.3,"decode_ms":70.4,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":226.1,"xrt_wall":156.28}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":75.2,"xrt_compute":146.35,"load_ms":151.5,"mel_ms":1.2,"encode_ms":56.9,"decode_ms":17.1,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":76.5,"xrt_wall":143.75}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":223.9,"xrt_compute":157.78,"load_ms":183.9,"mel_ms":3.3,"encode_ms":155.4,"decode_ms":65.2,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":225.8,"xrt_wall":156.45}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":73.5,"xrt_compute":149.59,"load_ms":197.2,"mel_ms":1.2,"encode_ms":55.9,"decode_ms":16.4,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":74.9,"xrt_wall":146.9}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4780.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1221.2,"xrt_compute":9.01,"load_ms":883.7,"mel_ms":19.6,"encode_ms":761.8,"decode_ms":439.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1222.8,"xrt_wall":9.0}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":5340.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1410.4,"xrt_compute":7.8,"load_ms":1164.2,"mel_ms":21.2,"encode_ms":931.7,"decode_ms":457.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1412.1,"xrt_wall":7.79}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3095.0,"xrt_compute":11.42,"load_ms":370.6,"mel_ms":64.6,"encode_ms":1096.8,"decode_ms":1933.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3100.5,"xrt_wall":11.39}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":864.5,"xrt_compute":12.72,"load_ms":380.5,"mel_ms":19.8,"encode_ms":406.6,"decode_ms":438.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":867.7,"xrt_wall":12.68}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3061.3,"xrt_compute":11.54,"load_ms":420.6,"mel_ms":63.5,"encode_ms":1075.7,"decode_ms":1922.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3066.8,"xrt_wall":11.52}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":854.1,"xrt_compute":12.88,"load_ms":426.8,"mel_ms":20.1,"encode_ms":388.1,"decode_ms":445.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":857.5,"xrt_wall":12.83} ] } diff --git a/catalog/parakeet-tdt-1.1b.json b/catalog/parakeet-tdt-1.1b.json index c0b52acd..ad456f51 100644 --- a/catalog/parakeet-tdt-1.1b.json +++ b/catalog/parakeet-tdt-1.1b.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":20.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":254.0,"xrt_compute":139.091,"load_ms":209.9,"mel_ms":1.8,"encode_ms":219.2,"decode_ms":33.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":257.5,"xrt_wall":137.215}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":97.0,"xrt_compute":113.42,"load_ms":221.0,"mel_ms":0.7,"encode_ms":88.0,"decode_ms":8.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":99.7,"xrt_wall":110.344}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":255.1,"xrt_compute":138.518,"load_ms":300.2,"mel_ms":1.8,"encode_ms":220.0,"decode_ms":33.3,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":258.6,"xrt_wall":136.643}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":94.5,"xrt_compute":116.365,"load_ms":334.9,"mel_ms":0.7,"encode_ms":85.5,"decode_ms":8.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":97.3,"xrt_wall":113.106}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5933.1,"xrt_compute":5.955,"load_ms":986.9,"mel_ms":45.6,"encode_ms":4746.2,"decode_ms":1141.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":5937.6,"xrt_wall":5.951}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6813.5,"xrt_compute":5.186,"load_ms":1325.7,"mel_ms":47.6,"encode_ms":5579.2,"decode_ms":1186.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":6818.2,"xrt_wall":5.182}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1916.9,"xrt_compute":5.738,"load_ms":1370.9,"mel_ms":15.0,"encode_ms":1655.3,"decode_ms":246.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1919.4,"xrt_wall":5.731}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2994.1,"xrt_compute":11.801,"load_ms":522.5,"mel_ms":46.1,"encode_ms":1835.1,"decode_ms":1112.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3002.6,"xrt_wall":11.767}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":936.3,"xrt_compute":11.749,"load_ms":484.3,"mel_ms":14.2,"encode_ms":695.6,"decode_ms":226.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":941.7,"xrt_wall":11.681}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3020.2,"xrt_compute":11.699,"load_ms":655.3,"mel_ms":46.9,"encode_ms":1833.8,"decode_ms":1139.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3029.5,"xrt_wall":11.663}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":960.7,"xrt_compute":11.449,"load_ms":676.0,"mel_ms":15.0,"encode_ms":710.7,"decode_ms":235.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":966.4,"xrt_wall":11.382} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1730.0,"xrt_compute":20.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":505.0,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2040.0,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":608.0,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":254.0,"xrt_compute":139.09,"load_ms":209.9,"mel_ms":1.8,"encode_ms":219.2,"decode_ms":33.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":257.5,"xrt_wall":137.22}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":97.0,"xrt_compute":113.42,"load_ms":221.0,"mel_ms":0.7,"encode_ms":88.0,"decode_ms":8.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":99.7,"xrt_wall":110.34}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":255.1,"xrt_compute":138.52,"load_ms":300.2,"mel_ms":1.8,"encode_ms":220.0,"decode_ms":33.3,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":258.6,"xrt_wall":136.64}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":94.5,"xrt_compute":116.36,"load_ms":334.9,"mel_ms":0.7,"encode_ms":85.5,"decode_ms":8.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":97.3,"xrt_wall":113.11}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5933.1,"xrt_compute":5.96,"load_ms":986.9,"mel_ms":45.6,"encode_ms":4746.2,"decode_ms":1141.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":5937.6,"xrt_wall":5.95}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1490.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6813.5,"xrt_compute":5.19,"load_ms":1325.7,"mel_ms":47.6,"encode_ms":5579.2,"decode_ms":1186.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":6818.2,"xrt_wall":5.18}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1916.9,"xrt_compute":5.74,"load_ms":1370.9,"mel_ms":15.0,"encode_ms":1655.3,"decode_ms":246.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1919.4,"xrt_wall":5.73}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2994.1,"xrt_compute":11.8,"load_ms":522.5,"mel_ms":46.1,"encode_ms":1835.1,"decode_ms":1112.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3002.6,"xrt_wall":11.77}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":936.3,"xrt_compute":11.75,"load_ms":484.3,"mel_ms":14.2,"encode_ms":695.6,"decode_ms":226.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":941.7,"xrt_wall":11.68}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3020.2,"xrt_compute":11.7,"load_ms":655.3,"mel_ms":46.9,"encode_ms":1833.8,"decode_ms":1139.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3029.5,"xrt_wall":11.66}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":960.7,"xrt_compute":11.45,"load_ms":676.0,"mel_ms":15.0,"encode_ms":710.7,"decode_ms":235.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":966.4,"xrt_wall":11.38} ] } diff --git a/catalog/parakeet-tdt_ctc-1.1b.json b/catalog/parakeet-tdt_ctc-1.1b.json index f454e628..eba76346 100644 --- a/catalog/parakeet-tdt_ctc-1.1b.json +++ b/catalog/parakeet-tdt_ctc-1.1b.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1614.1,"xrt_compute":21.89,"load_ms":263.0,"mel_ms":1.7,"encode_ms":1564.2,"decode_ms":48.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1615.3,"xrt_wall":21.874}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":513.8,"xrt_compute":21.408,"load_ms":261.5,"mel_ms":0.7,"encode_ms":499.8,"decode_ms":13.4,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":515.0,"xrt_wall":21.36}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":625.0,"xrt_compute":17.6,"load_ms":347.9,"mel_ms":0.7,"encode_ms":611.6,"decode_ms":12.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":626.2,"xrt_wall":17.567}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":269.1,"xrt_compute":131.306,"load_ms":216.8,"mel_ms":1.7,"encode_ms":219.2,"decode_ms":48.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":271.8,"xrt_wall":129.97}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":103.0,"xrt_compute":106.823,"load_ms":238.1,"mel_ms":0.7,"encode_ms":88.8,"decode_ms":13.5,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":105.7,"xrt_wall":104.082}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":138.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":100.2,"xrt_compute":109.763,"load_ms":346.8,"mel_ms":0.7,"encode_ms":86.4,"decode_ms":13.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":103.0,"xrt_wall":106.825}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5624.8,"xrt_compute":6.282,"load_ms":978.5,"mel_ms":43.7,"encode_ms":4284.3,"decode_ms":1296.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":5627.4,"xrt_wall":6.279}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1531.2,"xrt_compute":7.184,"load_ms":1387.8,"mel_ms":14.4,"encode_ms":1242.6,"decode_ms":274.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1533.5,"xrt_wall":7.173}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1879.4,"xrt_compute":5.853,"load_ms":1870.8,"mel_ms":14.4,"encode_ms":1582.8,"decode_ms":282.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1881.8,"xrt_wall":5.845}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3129.8,"xrt_compute":11.289,"load_ms":498.3,"mel_ms":45.1,"encode_ms":1813.0,"decode_ms":1271.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3137.0,"xrt_wall":11.263}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1614.1,"xrt_compute":21.89,"load_ms":263.0,"mel_ms":1.7,"encode_ms":1564.2,"decode_ms":48.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1615.3,"xrt_wall":21.87}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":513.8,"xrt_compute":21.41,"load_ms":261.5,"mel_ms":0.7,"encode_ms":499.8,"decode_ms":13.4,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":515.0,"xrt_wall":21.36}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1870.0,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":625.0,"xrt_compute":17.6,"load_ms":347.9,"mel_ms":0.7,"encode_ms":611.6,"decode_ms":12.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":626.2,"xrt_wall":17.57}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":269.1,"xrt_compute":131.31,"load_ms":216.8,"mel_ms":1.7,"encode_ms":219.2,"decode_ms":48.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":271.8,"xrt_wall":129.97}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":103.0,"xrt_compute":106.82,"load_ms":238.1,"mel_ms":0.7,"encode_ms":88.8,"decode_ms":13.5,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":105.7,"xrt_wall":104.08}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":256.0,"xrt_compute":138.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":100.2,"xrt_compute":109.76,"load_ms":346.8,"mel_ms":0.7,"encode_ms":86.4,"decode_ms":13.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":103.0,"xrt_wall":106.83}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5624.8,"xrt_compute":6.28,"load_ms":978.5,"mel_ms":43.7,"encode_ms":4284.3,"decode_ms":1296.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":5627.4,"xrt_wall":6.28}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1531.2,"xrt_compute":7.18,"load_ms":1387.8,"mel_ms":14.4,"encode_ms":1242.6,"decode_ms":274.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1533.5,"xrt_wall":7.17}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":6540.0,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1879.4,"xrt_compute":5.85,"load_ms":1870.8,"mel_ms":14.4,"encode_ms":1582.8,"decode_ms":282.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1881.8,"xrt_wall":5.84}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3129.8,"xrt_compute":11.29,"load_ms":498.3,"mel_ms":45.1,"encode_ms":1813.0,"decode_ms":1271.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3137.0,"xrt_wall":11.26}, {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":987.5,"xrt_compute":11.14,"load_ms":491.9,"mel_ms":15.4,"encode_ms":703.7,"decode_ms":268.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":992.8,"xrt_wall":11.08}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3130.9,"xrt_compute":11.285,"load_ms":640.8,"mel_ms":47.6,"encode_ms":1772.0,"decode_ms":1311.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3138.6,"xrt_wall":11.257}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":973.1,"xrt_compute":11.304,"load_ms":648.8,"mel_ms":14.8,"encode_ms":684.2,"decode_ms":274.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":979.0,"xrt_wall":11.236} + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3130.9,"xrt_compute":11.29,"load_ms":640.8,"mel_ms":47.6,"encode_ms":1772.0,"decode_ms":1311.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3138.6,"xrt_wall":11.26}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":973.1,"xrt_compute":11.3,"load_ms":648.8,"mel_ms":14.8,"encode_ms":684.2,"decode_ms":274.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":979.0,"xrt_wall":11.24} ] } diff --git a/catalog/parakeet-tdt_ctc-110m.json b/catalog/parakeet-tdt_ctc-110m.json index 36db8691..ea0145ae 100644 --- a/catalog/parakeet-tdt_ctc-110m.json +++ b/catalog/parakeet-tdt_ctc-110m.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":311.3,"xrt_compute":113.493,"load_ms":50.4,"mel_ms":1.7,"encode_ms":287.5,"decode_ms":22.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":312.3,"xrt_wall":113.128}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":88.5,"xrt_compute":124.332,"load_ms":48.9,"mel_ms":0.7,"encode_ms":81.9,"decode_ms":5.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":89.0,"xrt_wall":123.607}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":325.3,"xrt_compute":108.624,"load_ms":57.5,"mel_ms":1.6,"encode_ms":302.2,"decode_ms":21.4,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":326.3,"xrt_wall":108.29}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":93.7,"xrt_compute":117.366,"load_ms":69.7,"mel_ms":0.7,"encode_ms":87.3,"decode_ms":5.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":94.2,"xrt_wall":116.72}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":98.1,"xrt_compute":360.024,"load_ms":58.5,"mel_ms":1.7,"encode_ms":73.4,"decode_ms":23.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":99.8,"xrt_wall":353.883}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":315.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":98.6,"xrt_compute":358.289,"load_ms":61.4,"mel_ms":1.7,"encode_ms":75.0,"decode_ms":21.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":100.2,"xrt_wall":352.562}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":34.4,"xrt_compute":320.028,"load_ms":59.3,"mel_ms":0.7,"encode_ms":27.8,"decode_ms":5.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":35.5,"xrt_wall":309.571}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1640.8,"xrt_compute":21.534,"load_ms":143.5,"mel_ms":46.6,"encode_ms":847.1,"decode_ms":747.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1643.1,"xrt_wall":21.503}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":394.4,"xrt_compute":27.892,"load_ms":143.7,"mel_ms":14.4,"encode_ms":215.8,"decode_ms":164.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":395.5,"xrt_wall":27.815}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1701.9,"xrt_compute":20.76,"load_ms":167.2,"mel_ms":47.6,"encode_ms":908.3,"decode_ms":746.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1704.3,"xrt_wall":20.731}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":420.5,"xrt_compute":26.161,"load_ms":168.5,"mel_ms":15.6,"encode_ms":238.6,"decode_ms":166.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":421.6,"xrt_wall":26.091}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1194.1,"xrt_compute":29.59,"load_ms":122.3,"mel_ms":47.2,"encode_ms":408.1,"decode_ms":738.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1198.0,"xrt_wall":29.493}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":321.5,"xrt_compute":34.22,"load_ms":125.7,"mel_ms":16.5,"encode_ms":143.5,"decode_ms":161.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":323.9,"xrt_wall":33.963}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1177.7,"xrt_compute":30.002,"load_ms":138.1,"mel_ms":46.1,"encode_ms":400.2,"decode_ms":731.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1181.5,"xrt_wall":29.905}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":314.9,"xrt_compute":34.936,"load_ms":137.6,"mel_ms":14.4,"encode_ms":137.0,"decode_ms":163.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":317.4,"xrt_wall":34.66} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":311.3,"xrt_compute":113.49,"load_ms":50.4,"mel_ms":1.7,"encode_ms":287.5,"decode_ms":22.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":312.3,"xrt_wall":113.13}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":88.5,"xrt_compute":124.33,"load_ms":48.9,"mel_ms":0.7,"encode_ms":81.9,"decode_ms":5.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":89.0,"xrt_wall":123.61}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":325.3,"xrt_compute":108.62,"load_ms":57.5,"mel_ms":1.6,"encode_ms":302.2,"decode_ms":21.4,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":326.3,"xrt_wall":108.29}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":93.7,"xrt_compute":117.37,"load_ms":69.7,"mel_ms":0.7,"encode_ms":87.3,"decode_ms":5.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":94.2,"xrt_wall":116.72}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":98.1,"xrt_compute":360.02,"load_ms":58.5,"mel_ms":1.7,"encode_ms":73.4,"decode_ms":23.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":99.8,"xrt_wall":353.88}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":35.0,"xrt_compute":315.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":98.6,"xrt_compute":358.29,"load_ms":61.4,"mel_ms":1.7,"encode_ms":75.0,"decode_ms":21.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":100.2,"xrt_wall":352.56}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":34.4,"xrt_compute":320.03,"load_ms":59.3,"mel_ms":0.7,"encode_ms":27.8,"decode_ms":5.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":35.5,"xrt_wall":309.57}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1640.8,"xrt_compute":21.53,"load_ms":143.5,"mel_ms":46.6,"encode_ms":847.1,"decode_ms":747.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1643.1,"xrt_wall":21.5}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":394.4,"xrt_compute":27.89,"load_ms":143.7,"mel_ms":14.4,"encode_ms":215.8,"decode_ms":164.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":395.5,"xrt_wall":27.82}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1701.9,"xrt_compute":20.76,"load_ms":167.2,"mel_ms":47.6,"encode_ms":908.3,"decode_ms":746.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1704.3,"xrt_wall":20.73}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":420.5,"xrt_compute":26.16,"load_ms":168.5,"mel_ms":15.6,"encode_ms":238.6,"decode_ms":166.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":421.6,"xrt_wall":26.09}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1194.1,"xrt_compute":29.59,"load_ms":122.3,"mel_ms":47.2,"encode_ms":408.1,"decode_ms":738.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1198.0,"xrt_wall":29.49}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":321.5,"xrt_compute":34.22,"load_ms":125.7,"mel_ms":16.5,"encode_ms":143.5,"decode_ms":161.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":323.9,"xrt_wall":33.96}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1177.7,"xrt_compute":30.0,"load_ms":138.1,"mel_ms":46.1,"encode_ms":400.2,"decode_ms":731.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1181.5,"xrt_wall":29.91}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":314.9,"xrt_compute":34.94,"load_ms":137.6,"mel_ms":14.4,"encode_ms":137.0,"decode_ms":163.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":317.4,"xrt_wall":34.66} ] } diff --git a/catalog/parakeet-unified-en-0.6b.json b/catalog/parakeet-unified-en-0.6b.json index 839a006b..e6433fcd 100644 --- a/catalog/parakeet-unified-en-0.6b.json +++ b/catalog/parakeet-unified-en-0.6b.json @@ -71,14 +71,14 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":71.0,"xrt_compute":155.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":210.0,"xrt_compute":168.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":69.0,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4660.2,"xrt_compute":7.582,"load_ms":817.6,"mel_ms":63.7,"encode_ms":2784.3,"decode_ms":1812.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":4663.9,"xrt_wall":7.576}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1179.3,"xrt_compute":9.328,"load_ms":834.4,"mel_ms":19.0,"encode_ms":767.2,"decode_ms":393.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":1181.1,"xrt_wall":9.313}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5214.8,"xrt_compute":6.775,"load_ms":1022.9,"mel_ms":67.0,"encode_ms":3273.0,"decode_ms":1874.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":5218.8,"xrt_wall":6.77}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1346.4,"xrt_compute":8.17,"load_ms":1147.8,"mel_ms":20.4,"encode_ms":925.3,"decode_ms":400.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":1348.3,"xrt_wall":8.158}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3039.8,"xrt_compute":11.623,"load_ms":324.4,"mel_ms":65.0,"encode_ms":1168.0,"decode_ms":1806.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":3046.4,"xrt_wall":11.598}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":844.0,"xrt_compute":13.033,"load_ms":599.8,"mel_ms":20.0,"encode_ms":435.6,"decode_ms":388.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":847.6,"xrt_wall":12.977}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3026.6,"xrt_compute":11.674,"load_ms":393.1,"mel_ms":67.0,"encode_ms":1141.2,"decode_ms":1818.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":3032.5,"xrt_wall":11.651}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":834.9,"xrt_compute":13.175,"load_ms":677.6,"mel_ms":22.5,"encode_ms":419.3,"decode_ms":393.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":838.8,"xrt_wall":13.114} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4660.2,"xrt_compute":7.58,"load_ms":817.6,"mel_ms":63.7,"encode_ms":2784.3,"decode_ms":1812.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":4663.9,"xrt_wall":7.58}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1179.3,"xrt_compute":9.33,"load_ms":834.4,"mel_ms":19.0,"encode_ms":767.2,"decode_ms":393.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":1181.1,"xrt_wall":9.31}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5214.8,"xrt_compute":6.78,"load_ms":1022.9,"mel_ms":67.0,"encode_ms":3273.0,"decode_ms":1874.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":5218.8,"xrt_wall":6.77}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1346.4,"xrt_compute":8.17,"load_ms":1147.8,"mel_ms":20.4,"encode_ms":925.3,"decode_ms":400.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":1348.3,"xrt_wall":8.16}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3039.8,"xrt_compute":11.62,"load_ms":324.4,"mel_ms":65.0,"encode_ms":1168.0,"decode_ms":1806.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":3046.4,"xrt_wall":11.6}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":844.0,"xrt_compute":13.03,"load_ms":599.8,"mel_ms":20.0,"encode_ms":435.6,"decode_ms":388.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":847.6,"xrt_wall":12.98}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3026.6,"xrt_compute":11.67,"load_ms":393.1,"mel_ms":67.0,"encode_ms":1141.2,"decode_ms":1818.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":3032.5,"xrt_wall":11.65}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":834.9,"xrt_compute":13.18,"load_ms":677.6,"mel_ms":22.5,"encode_ms":419.3,"decode_ms":393.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":838.8,"xrt_wall":13.11} ], "architecture_pattern": "encoder-transducer" } diff --git a/catalog/qwen3-asr-0.6b.json b/catalog/qwen3-asr-0.6b.json index 732beba7..4897939e 100644 --- a/catalog/qwen3-asr-0.6b.json +++ b/catalog/qwen3-asr-0.6b.json @@ -81,21 +81,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":16.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":67.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":59.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7336.5,"xrt_compute":4.816,"load_ms":536.1,"mel_ms":137.8,"encode_ms":2857.4,"decode_ms":4341.2,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":7338.2,"xrt_wall":4.815}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1921.0,"xrt_compute":5.726,"load_ms":589.0,"mel_ms":45.9,"encode_ms":777.3,"decode_ms":1097.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":1921.8,"xrt_wall":5.724}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8604.4,"xrt_compute":4.106,"load_ms":765.1,"mel_ms":149.2,"encode_ms":2568.0,"decode_ms":5887.2,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":8606.0,"xrt_wall":4.105}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2367.8,"xrt_compute":4.646,"load_ms":795.4,"mel_ms":51.4,"encode_ms":759.1,"decode_ms":1557.3,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":2368.7,"xrt_wall":4.644}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3989.2,"xrt_compute":8.857,"load_ms":445.4,"mel_ms":148.0,"encode_ms":1095.3,"decode_ms":2745.9,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":3991.7,"xrt_wall":8.851}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1083.2,"xrt_compute":10.156,"load_ms":444.1,"mel_ms":53.5,"encode_ms":340.5,"decode_ms":689.2,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":1084.5,"xrt_wall":10.143}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4865.0,"xrt_compute":7.262,"load_ms":636.5,"mel_ms":150.7,"encode_ms":1062.5,"decode_ms":3651.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":4867.6,"xrt_wall":7.259}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1269.8,"xrt_compute":8.663,"load_ms":667.7,"mel_ms":51.6,"encode_ms":329.4,"decode_ms":888.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":1271.3,"xrt_wall":8.652} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":2100.0,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":588.0,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2260.0,"xrt_compute":16.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":660.0,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":527.0,"xrt_compute":67.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":142.0,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":597.0,"xrt_compute":59.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":155.0,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7336.5,"xrt_compute":4.82,"load_ms":536.1,"mel_ms":137.8,"encode_ms":2857.4,"decode_ms":4341.2,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":7338.2,"xrt_wall":4.82}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1921.0,"xrt_compute":5.73,"load_ms":589.0,"mel_ms":45.9,"encode_ms":777.3,"decode_ms":1097.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":1921.8,"xrt_wall":5.72}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8604.4,"xrt_compute":4.11,"load_ms":765.1,"mel_ms":149.2,"encode_ms":2568.0,"decode_ms":5887.2,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":8606.0,"xrt_wall":4.11}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2367.8,"xrt_compute":4.65,"load_ms":795.4,"mel_ms":51.4,"encode_ms":759.1,"decode_ms":1557.3,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":2368.7,"xrt_wall":4.64}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3989.2,"xrt_compute":8.86,"load_ms":445.4,"mel_ms":148.0,"encode_ms":1095.3,"decode_ms":2745.9,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":3991.7,"xrt_wall":8.85}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1083.2,"xrt_compute":10.16,"load_ms":444.1,"mel_ms":53.5,"encode_ms":340.5,"decode_ms":689.2,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":1084.5,"xrt_wall":10.14}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4865.0,"xrt_compute":7.26,"load_ms":636.5,"mel_ms":150.7,"encode_ms":1062.5,"decode_ms":3651.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":4867.6,"xrt_wall":7.26}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1269.8,"xrt_compute":8.66,"load_ms":667.7,"mel_ms":51.6,"encode_ms":329.4,"decode_ms":888.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":1271.3,"xrt_wall":8.65} ] } diff --git a/catalog/qwen3-asr-1.7b.json b/catalog/qwen3-asr-1.7b.json index 56f3987d..3befd325 100644 --- a/catalog/qwen3-asr-1.7b.json +++ b/catalog/qwen3-asr-1.7b.json @@ -81,21 +81,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":52.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":43.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":12926.4,"xrt_compute":2.733,"load_ms":1111.3,"mel_ms":154.5,"encode_ms":2918.4,"decode_ms":9853.5,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":12928.3,"xrt_wall":2.733}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3574.4,"xrt_compute":3.077,"load_ms":1631.8,"mel_ms":49.6,"encode_ms":831.1,"decode_ms":2693.7,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":3575.3,"xrt_wall":3.077}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":18525.0,"xrt_compute":1.907,"load_ms":2136.2,"mel_ms":157.9,"encode_ms":3319.3,"decode_ms":15047.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":18526.9,"xrt_wall":1.907}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5186.5,"xrt_compute":2.121,"load_ms":2171.6,"mel_ms":53.1,"encode_ms":988.4,"decode_ms":4144.9,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":5187.5,"xrt_wall":2.12}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8363.9,"xrt_compute":4.224,"load_ms":1090.5,"mel_ms":135.7,"encode_ms":1298.3,"decode_ms":6929.9,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":8367.1,"xrt_wall":4.223}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2286.2,"xrt_compute":4.812,"load_ms":1291.8,"mel_ms":54.2,"encode_ms":420.4,"decode_ms":1811.6,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":2288.1,"xrt_wall":4.807}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9867.3,"xrt_compute":3.581,"load_ms":1771.3,"mel_ms":134.0,"encode_ms":1293.8,"decode_ms":8439.5,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":9870.5,"xrt_wall":3.58}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2661.4,"xrt_compute":4.133,"load_ms":1750.0,"mel_ms":53.7,"encode_ms":401.1,"decode_ms":2206.5,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":2663.2,"xrt_wall":4.13} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4040.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1100.0,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4460.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1400.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":803.0,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":213.0,"xrt_compute":52.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":978.0,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":256.0,"xrt_compute":43.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":12926.4,"xrt_compute":2.73,"load_ms":1111.3,"mel_ms":154.5,"encode_ms":2918.4,"decode_ms":9853.5,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":12928.3,"xrt_wall":2.73}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3574.4,"xrt_compute":3.08,"load_ms":1631.8,"mel_ms":49.6,"encode_ms":831.1,"decode_ms":2693.7,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":3575.3,"xrt_wall":3.08}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":18525.0,"xrt_compute":1.91,"load_ms":2136.2,"mel_ms":157.9,"encode_ms":3319.3,"decode_ms":15047.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":18526.9,"xrt_wall":1.91}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5186.5,"xrt_compute":2.12,"load_ms":2171.6,"mel_ms":53.1,"encode_ms":988.4,"decode_ms":4144.9,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":5187.5,"xrt_wall":2.12}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8363.9,"xrt_compute":4.22,"load_ms":1090.5,"mel_ms":135.7,"encode_ms":1298.3,"decode_ms":6929.9,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":8367.1,"xrt_wall":4.22}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2286.2,"xrt_compute":4.81,"load_ms":1291.8,"mel_ms":54.2,"encode_ms":420.4,"decode_ms":1811.6,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":2288.1,"xrt_wall":4.81}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9867.3,"xrt_compute":3.58,"load_ms":1771.3,"mel_ms":134.0,"encode_ms":1293.8,"decode_ms":8439.5,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":9870.5,"xrt_wall":3.58}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2661.4,"xrt_compute":4.13,"load_ms":1750.0,"mel_ms":53.7,"encode_ms":401.1,"decode_ms":2206.5,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":2663.2,"xrt_wall":4.13} ] } diff --git a/catalog/sensevoice-small.json b/catalog/sensevoice-small.json index 3f1c65ed..1856b94d 100644 --- a/catalog/sensevoice-small.json +++ b/catalog/sensevoice-small.json @@ -52,21 +52,21 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":52.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":53.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":258.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":250.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":319.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":260.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2005.8,"xrt_compute":17.615,"load_ms":133.2,"mel_ms":76.9,"encode_ms":1928.8,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2030.0,"xrt_wall":17.405}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":581.7,"xrt_compute":18.911,"load_ms":142.9,"mel_ms":23.9,"encode_ms":557.8,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":589.6,"xrt_wall":18.658}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2281.3,"xrt_compute":15.488,"load_ms":190.9,"mel_ms":77.2,"encode_ms":2204.1,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2305.4,"xrt_wall":15.326}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":678.0,"xrt_compute":16.224,"load_ms":305.8,"mel_ms":27.0,"encode_ms":651.0,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":687.0,"xrt_wall":16.011}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1095.7,"xrt_compute":32.247,"load_ms":157.7,"mel_ms":76.1,"encode_ms":1019.5,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1122.3,"xrt_wall":31.483}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":316.6,"xrt_compute":34.745,"load_ms":213.2,"mel_ms":26.3,"encode_ms":290.3,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":331.9,"xrt_wall":33.146}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1080.5,"xrt_compute":32.7,"load_ms":177.9,"mel_ms":76.1,"encode_ms":1004.4,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1107.2,"xrt_wall":31.911}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":312.7,"xrt_compute":35.18,"load_ms":179.2,"mel_ms":29.1,"encode_ms":283.6,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":329.1,"xrt_wall":33.429} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":727.0,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":213.0,"xrt_compute":52.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":700.0,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":208.0,"xrt_compute":53.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":137.0,"xrt_compute":258.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":44.0,"xrt_compute":250.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":111.0,"xrt_compute":319.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":42.0,"xrt_compute":260.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2005.8,"xrt_compute":17.61,"load_ms":133.2,"mel_ms":76.9,"encode_ms":1928.8,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2030.0,"xrt_wall":17.41}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":581.7,"xrt_compute":18.91,"load_ms":142.9,"mel_ms":23.9,"encode_ms":557.8,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":589.6,"xrt_wall":18.66}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2281.3,"xrt_compute":15.49,"load_ms":190.9,"mel_ms":77.2,"encode_ms":2204.1,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2305.4,"xrt_wall":15.33}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":678.0,"xrt_compute":16.22,"load_ms":305.8,"mel_ms":27.0,"encode_ms":651.0,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":687.0,"xrt_wall":16.01}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1095.7,"xrt_compute":32.25,"load_ms":157.7,"mel_ms":76.1,"encode_ms":1019.5,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1122.3,"xrt_wall":31.48}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":316.6,"xrt_compute":34.74,"load_ms":213.2,"mel_ms":26.3,"encode_ms":290.3,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":331.9,"xrt_wall":33.15}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1080.5,"xrt_compute":32.7,"load_ms":177.9,"mel_ms":76.1,"encode_ms":1004.4,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1107.2,"xrt_wall":31.91}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":312.7,"xrt_compute":35.18,"load_ms":179.2,"mel_ms":29.1,"encode_ms":283.6,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":329.1,"xrt_wall":33.43} ] } diff --git a/catalog/voxtral-mini-3b-2507.json b/catalog/voxtral-mini-3b-2507.json index 74c370b0..bd1253fb 100644 --- a/catalog/voxtral-mini-3b-2507.json +++ b/catalog/voxtral-mini-3b-2507.json @@ -55,21 +55,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":18.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":16.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":15.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":45921.8,"xrt_compute":0.769,"load_ms":4290.4,"mel_ms":80.8,"encode_ms":17776.3,"decode_ms":28064.7,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":45923.1,"xrt_wall":0.769}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":23819.2,"xrt_compute":1.483,"load_ms":2417.4,"mel_ms":70.2,"encode_ms":7818.5,"decode_ms":15930.5,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":23820.7,"xrt_wall":1.483}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":9373.1,"xrt_compute":1.174,"load_ms":3937.3,"mel_ms":45.2,"encode_ms":4004.0,"decode_ms":5323.8,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":9373.8,"xrt_wall":1.173}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":26485.4,"xrt_compute":1.334,"load_ms":5949.2,"mel_ms":69.2,"encode_ms":7579.1,"decode_ms":18837.1,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":26486.9,"xrt_wall":1.334}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":15310.0,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6760.0,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":16600.0,"xrt_compute":2.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6060.0,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1900.0,"xrt_compute":18.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":656.8,"xrt_compute":16.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2400.0,"xrt_compute":14.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":727.3,"xrt_compute":15.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":45921.8,"xrt_compute":0.77,"load_ms":4290.4,"mel_ms":80.8,"encode_ms":17776.3,"decode_ms":28064.7,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":45923.1,"xrt_wall":0.77}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":19390.0,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":63960.0,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":26150.0,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":23819.2,"xrt_compute":1.48,"load_ms":2417.4,"mel_ms":70.2,"encode_ms":7818.5,"decode_ms":15930.5,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":23820.7,"xrt_wall":1.48}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":9373.1,"xrt_compute":1.17,"load_ms":3937.3,"mel_ms":45.2,"encode_ms":4004.0,"decode_ms":5323.8,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":9373.8,"xrt_wall":1.17}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":26485.4,"xrt_compute":1.33,"load_ms":5949.2,"mel_ms":69.2,"encode_ms":7579.1,"decode_ms":18837.1,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":26486.9,"xrt_wall":1.33}, {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9567.6,"xrt_compute":1.15,"load_ms":6338.3,"mel_ms":46.1,"encode_ms":3788.8,"decode_ms":5732.7,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":9568.3,"xrt_wall":1.15} ] } diff --git a/catalog/voxtral-mini-4b-realtime-2602.json b/catalog/voxtral-mini-4b-realtime-2602.json index 4b4b1f69..474d6ae0 100644 --- a/catalog/voxtral-mini-4b-realtime-2602.json +++ b/catalog/voxtral-mini-4b-realtime-2602.json @@ -60,21 +60,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":8.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.85,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.61,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.56,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.05,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.87,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":13120.0,"xrt_compute":2.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4690.0,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":13650.0,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4430.0,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":3910.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1140.0,"xrt_compute":9.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4340.0,"xrt_compute":8.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1220.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":41540.0,"xrt_compute":0.85,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":13800.0,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":58000.0,"xrt_compute":0.61,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":19540.0,"xrt_compute":0.56,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":33510.0,"xrt_compute":1.05,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":10970.0,"xrt_compute":1.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":39290.0,"xrt_compute":0.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":12620.0,"xrt_compute":0.87,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/voxtral-small-24b-2507.json b/catalog/voxtral-small-24b-2507.json index 57475fcf..203dd0dc 100644 --- a/catalog/voxtral-small-24b-2507.json +++ b/catalog/voxtral-small-24b-2507.json @@ -60,9 +60,9 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":3.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":8950.0,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2620.0,"xrt_compute":4.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":11200.0,"xrt_compute":3.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3360.0,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-base.en.json b/catalog/whisper-base.en.json index 0d40b963..e8ad6549 100644 --- a/catalog/whisper-base.en.json +++ b/catalog/whisper-base.en.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":733.6,"xrt_compute":48.164,"load_ms":50.0,"mel_ms":5.0,"encode_ms":262.4,"decode_ms":466.2,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":733.6,"xrt_wall":48.161}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":325.6,"xrt_compute":33.782,"load_ms":53.9,"mel_ms":4.0,"encode_ms":265.2,"decode_ms":56.4,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":325.6,"xrt_wall":33.779}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":780.9,"xrt_compute":45.246,"load_ms":53.1,"mel_ms":5.4,"encode_ms":288.2,"decode_ms":487.3,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":780.9,"xrt_wall":45.244}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":352.4,"xrt_compute":31.211,"load_ms":62.6,"mel_ms":4.3,"encode_ms":290.5,"decode_ms":57.6,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":352.5,"xrt_wall":31.208}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":218.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":222.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":204.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":218.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2187.9,"xrt_compute":16.149,"load_ms":104.2,"mel_ms":51.0,"encode_ms":658.5,"decode_ms":1478.4,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2188.0,"xrt_wall":16.148}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":836.0,"xrt_compute":13.159,"load_ms":103.0,"mel_ms":39.9,"encode_ms":594.9,"decode_ms":201.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":836.1,"xrt_wall":13.156}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2407.1,"xrt_compute":14.678,"load_ms":124.9,"mel_ms":50.8,"encode_ms":734.7,"decode_ms":1621.6,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2407.2,"xrt_wall":14.677}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1013.8,"xrt_compute":10.85,"load_ms":123.4,"mel_ms":46.0,"encode_ms":737.2,"decode_ms":230.6,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1014.0,"xrt_wall":10.848}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":32.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":733.6,"xrt_compute":48.16,"load_ms":50.0,"mel_ms":5.0,"encode_ms":262.4,"decode_ms":466.2,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":733.6,"xrt_wall":48.16}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":325.6,"xrt_compute":33.78,"load_ms":53.9,"mel_ms":4.0,"encode_ms":265.2,"decode_ms":56.4,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":325.6,"xrt_wall":33.78}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":780.9,"xrt_compute":45.25,"load_ms":53.1,"mel_ms":5.4,"encode_ms":288.2,"decode_ms":487.3,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":780.9,"xrt_wall":45.24}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":352.4,"xrt_compute":31.21,"load_ms":62.6,"mel_ms":4.3,"encode_ms":290.5,"decode_ms":57.6,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":352.5,"xrt_wall":31.21}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":161.4,"xrt_compute":218.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":49.5,"xrt_compute":222.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":172.4,"xrt_compute":204.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":50.3,"xrt_compute":218.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2187.9,"xrt_compute":16.15,"load_ms":104.2,"mel_ms":51.0,"encode_ms":658.5,"decode_ms":1478.4,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2188.0,"xrt_wall":16.15}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":836.0,"xrt_compute":13.16,"load_ms":103.0,"mel_ms":39.9,"encode_ms":594.9,"decode_ms":201.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":836.1,"xrt_wall":13.16}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2407.1,"xrt_compute":14.68,"load_ms":124.9,"mel_ms":50.8,"encode_ms":734.7,"decode_ms":1621.6,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2407.2,"xrt_wall":14.68}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1013.8,"xrt_compute":10.85,"load_ms":123.4,"mel_ms":46.0,"encode_ms":737.2,"decode_ms":230.6,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1014.0,"xrt_wall":10.85}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":912.0,"xrt_compute":38.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":337.0,"xrt_compute":32.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":909.0,"xrt_compute":38.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":327.0,"xrt_compute":33.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-base.json b/catalog/whisper-base.json index e1b907fd..ebd1220a 100644 --- a/catalog/whisper-base.json +++ b/catalog/whisper-base.json @@ -138,21 +138,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":750.3,"xrt_compute":47.093,"load_ms":44.6,"mel_ms":6.0,"encode_ms":261.3,"decode_ms":482.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":750.3,"xrt_wall":47.09}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":347.6,"xrt_compute":31.647,"load_ms":43.7,"mel_ms":4.3,"encode_ms":261.3,"decode_ms":81.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":347.6,"xrt_wall":31.644}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":806.1,"xrt_compute":43.831,"load_ms":62.4,"mel_ms":5.8,"encode_ms":288.4,"decode_ms":511.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":806.1,"xrt_wall":43.829}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":373.9,"xrt_compute":29.416,"load_ms":68.1,"mel_ms":5.1,"encode_ms":286.5,"decode_ms":82.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":374.0,"xrt_wall":29.413}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":209.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":205.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":207.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":211.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2274.5,"xrt_compute":15.534,"load_ms":103.1,"mel_ms":46.4,"encode_ms":663.9,"decode_ms":1564.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2274.7,"xrt_wall":15.533}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":912.6,"xrt_compute":12.054,"load_ms":106.5,"mel_ms":39.7,"encode_ms":596.7,"decode_ms":276.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":912.7,"xrt_wall":12.052}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2537.8,"xrt_compute":13.922,"load_ms":123.7,"mel_ms":44.8,"encode_ms":741.0,"decode_ms":1752.0,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2537.9,"xrt_wall":13.922}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1105.7,"xrt_compute":9.948,"load_ms":122.5,"mel_ms":43.2,"encode_ms":740.4,"decode_ms":322.1,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1105.9,"xrt_wall":9.947}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":37.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":30.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":38.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":31.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":750.3,"xrt_compute":47.09,"load_ms":44.6,"mel_ms":6.0,"encode_ms":261.3,"decode_ms":482.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":750.3,"xrt_wall":47.09}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":347.6,"xrt_compute":31.65,"load_ms":43.7,"mel_ms":4.3,"encode_ms":261.3,"decode_ms":81.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":347.6,"xrt_wall":31.64}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":806.1,"xrt_compute":43.83,"load_ms":62.4,"mel_ms":5.8,"encode_ms":288.4,"decode_ms":511.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":806.1,"xrt_wall":43.83}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":373.9,"xrt_compute":29.42,"load_ms":68.1,"mel_ms":5.1,"encode_ms":286.5,"decode_ms":82.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":374.0,"xrt_wall":29.41}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":168.3,"xrt_compute":209.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":53.6,"xrt_compute":205.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":170.0,"xrt_compute":207.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":52.1,"xrt_compute":211.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2274.5,"xrt_compute":15.53,"load_ms":103.1,"mel_ms":46.4,"encode_ms":663.9,"decode_ms":1564.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2274.7,"xrt_wall":15.53}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":912.6,"xrt_compute":12.05,"load_ms":106.5,"mel_ms":39.7,"encode_ms":596.7,"decode_ms":276.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":912.7,"xrt_wall":12.05}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2537.8,"xrt_compute":13.92,"load_ms":123.7,"mel_ms":44.8,"encode_ms":741.0,"decode_ms":1752.0,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2537.9,"xrt_wall":13.92}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1105.7,"xrt_compute":9.95,"load_ms":122.5,"mel_ms":43.2,"encode_ms":740.4,"decode_ms":322.1,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1105.9,"xrt_wall":9.95}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":946.0,"xrt_compute":37.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":356.0,"xrt_compute":30.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":922.0,"xrt_compute":38.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":351.0,"xrt_compute":31.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-large-v2.json b/catalog/whisper-large-v2.json index 8820bd30..cbd982b5 100644 --- a/catalog/whisper-large-v2.json +++ b/catalog/whisper-large-v2.json @@ -102,20 +102,20 @@ }, "speed_benchmarks": [ {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15430.7,"xrt_compute":2.29,"load_ms":235.7,"mel_ms":4.6,"encode_ms":5625.7,"decode_ms":9800.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15431.0,"xrt_wall":2.29}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7456.5,"xrt_compute":1.475,"load_ms":229.7,"mel_ms":4.4,"encode_ms":5621.4,"decode_ms":1830.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7456.6,"xrt_wall":1.475}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":19721.8,"xrt_compute":1.792,"load_ms":355.1,"mel_ms":4.9,"encode_ms":7297.6,"decode_ms":12419.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19722.1,"xrt_wall":1.791}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9663.0,"xrt_compute":1.138,"load_ms":349.2,"mel_ms":4.4,"encode_ms":7294.0,"decode_ms":2364.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9663.2,"xrt_wall":1.138}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1400.8,"xrt_compute":25.223,"load_ms":235.5,"mel_ms":5.3,"encode_ms":239.2,"decode_ms":1156.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1400.8,"xrt_wall":25.222}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":499.6,"xrt_compute":22.02,"load_ms":223.7,"mel_ms":6.2,"encode_ms":239.6,"decode_ms":253.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":499.6,"xrt_wall":22.018}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":493.1,"xrt_compute":22.307,"load_ms":364.6,"mel_ms":5.1,"encode_ms":233.0,"decode_ms":255.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":493.2,"xrt_wall":22.305}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7456.5,"xrt_compute":1.48,"load_ms":229.7,"mel_ms":4.4,"encode_ms":5621.4,"decode_ms":1830.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7456.6,"xrt_wall":1.48}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":19721.8,"xrt_compute":1.79,"load_ms":355.1,"mel_ms":4.9,"encode_ms":7297.6,"decode_ms":12419.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19722.1,"xrt_wall":1.79}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9663.0,"xrt_compute":1.14,"load_ms":349.2,"mel_ms":4.4,"encode_ms":7294.0,"decode_ms":2364.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9663.2,"xrt_wall":1.14}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1400.8,"xrt_compute":25.22,"load_ms":235.5,"mel_ms":5.3,"encode_ms":239.2,"decode_ms":1156.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1400.8,"xrt_wall":25.22}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":499.6,"xrt_compute":22.02,"load_ms":223.7,"mel_ms":6.2,"encode_ms":239.6,"decode_ms":253.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":499.6,"xrt_wall":22.02}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1370.0,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":493.1,"xrt_compute":22.31,"load_ms":364.6,"mel_ms":5.1,"encode_ms":233.0,"decode_ms":255.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":493.2,"xrt_wall":22.3}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":43105.3,"xrt_compute":0.82,"load_ms":695.8,"mel_ms":52.4,"encode_ms":14562.8,"decode_ms":28490.1,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":43105.4,"xrt_wall":0.82}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6352.5,"xrt_compute":1.732,"load_ms":574.3,"mel_ms":36.7,"encode_ms":4351.1,"decode_ms":1964.7,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6352.6,"xrt_wall":1.732}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6271.0,"xrt_compute":1.754,"load_ms":997.6,"mel_ms":39.2,"encode_ms":4207.7,"decode_ms":2024.1,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6271.1,"xrt_wall":1.754} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":19460.0,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":53750.0,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":25730.0,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":13680.0,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6352.5,"xrt_compute":1.73,"load_ms":574.3,"mel_ms":36.7,"encode_ms":4351.1,"decode_ms":1964.7,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6352.6,"xrt_wall":1.73}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":14290.0,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6271.0,"xrt_compute":1.75,"load_ms":997.6,"mel_ms":39.2,"encode_ms":4207.7,"decode_ms":2024.1,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6271.1,"xrt_wall":1.75} ] } diff --git a/catalog/whisper-large-v3-turbo.json b/catalog/whisper-large-v3-turbo.json index 4890cc83..d14dd114 100644 --- a/catalog/whisper-large-v3-turbo.json +++ b/catalog/whisper-large-v3-turbo.json @@ -138,22 +138,22 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":11870.6,"xrt_compute":2.976,"load_ms":147.4,"mel_ms":6.4,"encode_ms":5615.0,"decode_ms":6249.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":11870.9,"xrt_wall":2.976}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5887.0,"xrt_compute":1.869,"load_ms":146.3,"mel_ms":5.7,"encode_ms":5630.3,"decode_ms":251.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":5887.1,"xrt_wall":1.868}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15342.6,"xrt_compute":2.303,"load_ms":206.3,"mel_ms":6.2,"encode_ms":7301.2,"decode_ms":8035.2,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15342.8,"xrt_wall":2.303}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7596.9,"xrt_compute":1.448,"load_ms":212.2,"mel_ms":5.6,"encode_ms":7279.3,"decode_ms":312.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7597.1,"xrt_wall":1.448}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":666.0,"xrt_compute":53.052,"load_ms":145.6,"mel_ms":7.1,"encode_ms":238.3,"decode_ms":420.6,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":666.0,"xrt_wall":53.048}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":288.9,"xrt_compute":38.073,"load_ms":135.9,"mel_ms":5.8,"encode_ms":237.6,"decode_ms":45.5,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":289.0,"xrt_wall":38.068}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":11870.6,"xrt_compute":2.98,"load_ms":147.4,"mel_ms":6.4,"encode_ms":5615.0,"decode_ms":6249.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":11870.9,"xrt_wall":2.98}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5887.0,"xrt_compute":1.87,"load_ms":146.3,"mel_ms":5.7,"encode_ms":5630.3,"decode_ms":251.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":5887.1,"xrt_wall":1.87}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15342.6,"xrt_compute":2.3,"load_ms":206.3,"mel_ms":6.2,"encode_ms":7301.2,"decode_ms":8035.2,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15342.8,"xrt_wall":2.3}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7596.9,"xrt_compute":1.45,"load_ms":212.2,"mel_ms":5.6,"encode_ms":7279.3,"decode_ms":312.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7597.1,"xrt_wall":1.45}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":666.0,"xrt_compute":53.05,"load_ms":145.6,"mel_ms":7.1,"encode_ms":238.3,"decode_ms":420.6,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":666.0,"xrt_wall":53.05}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":288.9,"xrt_compute":38.07,"load_ms":135.9,"mel_ms":5.8,"encode_ms":237.6,"decode_ms":45.5,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":289.0,"xrt_wall":38.07}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":649.5,"xrt_compute":54.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":288.3,"xrt_compute":38.161,"load_ms":221.6,"mel_ms":6.0,"encode_ms":233.9,"decode_ms":48.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":288.3,"xrt_wall":38.156}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":32216.9,"xrt_compute":1.097,"load_ms":423.1,"mel_ms":54.5,"encode_ms":15063.5,"decode_ms":17098.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":32217.3,"xrt_wall":1.097}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":15744.4,"xrt_compute":0.699,"load_ms":419.9,"mel_ms":46.4,"encode_ms":14898.3,"decode_ms":799.7,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15744.7,"xrt_wall":0.699}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":40179.2,"xrt_compute":0.879,"load_ms":661.3,"mel_ms":62.1,"encode_ms":18767.6,"decode_ms":21349.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":40179.5,"xrt_wall":0.879}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":19850.7,"xrt_compute":0.554,"load_ms":666.1,"mel_ms":49.1,"encode_ms":18807.3,"decode_ms":994.3,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19851.0,"xrt_wall":0.554}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":10262.0,"xrt_compute":3.443,"load_ms":361.5,"mel_ms":42.6,"encode_ms":4503.0,"decode_ms":5716.4,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":10262.4,"xrt_wall":3.443}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4915.7,"xrt_compute":2.238,"load_ms":348.9,"mel_ms":42.0,"encode_ms":4507.6,"decode_ms":366.2,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4915.9,"xrt_wall":2.238}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":10160.7,"xrt_compute":3.477,"load_ms":555.3,"mel_ms":44.3,"encode_ms":4395.9,"decode_ms":5720.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":10161.1,"xrt_wall":3.477}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4773.2,"xrt_compute":2.305,"load_ms":547.3,"mel_ms":39.4,"encode_ms":4365.9,"decode_ms":367.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4773.4,"xrt_wall":2.304} + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":288.3,"xrt_compute":38.16,"load_ms":221.6,"mel_ms":6.0,"encode_ms":233.9,"decode_ms":48.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":288.3,"xrt_wall":38.16}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":32216.9,"xrt_compute":1.1,"load_ms":423.1,"mel_ms":54.5,"encode_ms":15063.5,"decode_ms":17098.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":32217.3,"xrt_wall":1.1}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":15744.4,"xrt_compute":0.7,"load_ms":419.9,"mel_ms":46.4,"encode_ms":14898.3,"decode_ms":799.7,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15744.7,"xrt_wall":0.7}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":40179.2,"xrt_compute":0.88,"load_ms":661.3,"mel_ms":62.1,"encode_ms":18767.6,"decode_ms":21349.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":40179.5,"xrt_wall":0.88}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":19850.7,"xrt_compute":0.55,"load_ms":666.1,"mel_ms":49.1,"encode_ms":18807.3,"decode_ms":994.3,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19851.0,"xrt_wall":0.55}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":10262.0,"xrt_compute":3.44,"load_ms":361.5,"mel_ms":42.6,"encode_ms":4503.0,"decode_ms":5716.4,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":10262.4,"xrt_wall":3.44}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4915.7,"xrt_compute":2.24,"load_ms":348.9,"mel_ms":42.0,"encode_ms":4507.6,"decode_ms":366.2,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4915.9,"xrt_wall":2.24}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":10160.7,"xrt_compute":3.48,"load_ms":555.3,"mel_ms":44.3,"encode_ms":4395.9,"decode_ms":5720.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":10161.1,"xrt_wall":3.48}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4773.2,"xrt_compute":2.31,"load_ms":547.3,"mel_ms":39.4,"encode_ms":4365.9,"decode_ms":367.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4773.4,"xrt_wall":2.3} ], "architecture_pattern": "encoder-decoder-cross-attention", "language_aliases": { diff --git a/catalog/whisper-large-v3.json b/catalog/whisper-large-v3.json index e22ed264..cb2f2f7f 100644 --- a/catalog/whisper-large-v3.json +++ b/catalog/whisper-large-v3.json @@ -137,21 +137,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15452.3,"xrt_compute":2.287,"load_ms":223.3,"mel_ms":6.5,"encode_ms":5614.1,"decode_ms":9831.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15452.5,"xrt_wall":2.286}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15452.3,"xrt_compute":2.29,"load_ms":223.3,"mel_ms":6.5,"encode_ms":5614.1,"decode_ms":9831.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15452.5,"xrt_wall":2.29}, {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7484.3,"xrt_compute":1.47,"load_ms":233.2,"mel_ms":5.4,"encode_ms":5610.1,"decode_ms":1868.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7484.4,"xrt_wall":1.47}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":19861.9,"xrt_compute":1.779,"load_ms":342.4,"mel_ms":5.7,"encode_ms":7273.3,"decode_ms":12582.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19862.2,"xrt_wall":1.779}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9679.5,"xrt_compute":1.136,"load_ms":341.5,"mel_ms":5.6,"encode_ms":7265.5,"decode_ms":2408.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9679.6,"xrt_wall":1.136}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":511.9,"xrt_compute":21.489,"load_ms":228.4,"mel_ms":5.9,"encode_ms":239.5,"decode_ms":266.5,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":511.9,"xrt_wall":21.488}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":516.9,"xrt_compute":21.282,"load_ms":364.2,"mel_ms":5.9,"encode_ms":233.1,"decode_ms":277.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":516.9,"xrt_wall":21.281}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":43175.4,"xrt_compute":0.818,"load_ms":684.6,"mel_ms":52.0,"encode_ms":14572.9,"decode_ms":28550.5,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":43175.8,"xrt_wall":0.818}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6398.7,"xrt_compute":1.719,"load_ms":994.0,"mel_ms":42.2,"encode_ms":4198.3,"decode_ms":2158.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6398.9,"xrt_wall":1.719} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":19861.9,"xrt_compute":1.78,"load_ms":342.4,"mel_ms":5.7,"encode_ms":7273.3,"decode_ms":12582.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19862.2,"xrt_wall":1.78}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9679.5,"xrt_compute":1.14,"load_ms":341.5,"mel_ms":5.6,"encode_ms":7265.5,"decode_ms":2408.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9679.6,"xrt_wall":1.14}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1350.0,"xrt_compute":26.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":511.9,"xrt_compute":21.49,"load_ms":228.4,"mel_ms":5.9,"encode_ms":239.5,"decode_ms":266.5,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":511.9,"xrt_wall":21.49}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1380.0,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":516.9,"xrt_compute":21.28,"load_ms":364.2,"mel_ms":5.9,"encode_ms":233.1,"decode_ms":277.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":516.9,"xrt_wall":21.28}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":43175.4,"xrt_compute":0.82,"load_ms":684.6,"mel_ms":52.0,"encode_ms":14572.9,"decode_ms":28550.5,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":43175.8,"xrt_wall":0.82}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":19960.0,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":53800.0,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":25590.0,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":13750.0,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6070.0,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":14420.0,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6398.7,"xrt_compute":1.72,"load_ms":994.0,"mel_ms":42.2,"encode_ms":4198.3,"decode_ms":2158.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6398.9,"xrt_wall":1.72} ] } diff --git a/catalog/whisper-large.json b/catalog/whisper-large.json index 1b77d93b..7e44536f 100644 --- a/catalog/whisper-large.json +++ b/catalog/whisper-large.json @@ -104,19 +104,19 @@ "speed_benchmarks": [ {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15493.6,"xrt_compute":2.28,"load_ms":223.9,"mel_ms":5.5,"encode_ms":5603.2,"decode_ms":9884.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15493.8,"xrt_wall":2.28}, {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7434.2,"xrt_compute":1.48,"load_ms":245.7,"mel_ms":4.9,"encode_ms":5610.0,"decode_ms":1819.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7434.4,"xrt_wall":1.48}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":19876.9,"xrt_compute":1.778,"load_ms":359.9,"mel_ms":4.9,"encode_ms":7284.5,"decode_ms":12587.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19877.1,"xrt_wall":1.778}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9632.9,"xrt_compute":1.142,"load_ms":367.4,"mel_ms":4.1,"encode_ms":7296.6,"decode_ms":2332.2,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9632.6,"xrt_wall":1.142}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":23.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":43981.0,"xrt_compute":0.803,"load_ms":730.3,"mel_ms":55.6,"encode_ms":14707.6,"decode_ms":29217.8,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":43981.1,"xrt_wall":0.803}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":19876.9,"xrt_compute":1.78,"load_ms":359.9,"mel_ms":4.9,"encode_ms":7284.5,"decode_ms":12587.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19877.1,"xrt_wall":1.78}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9632.9,"xrt_compute":1.14,"load_ms":367.4,"mel_ms":4.1,"encode_ms":7296.6,"decode_ms":2332.2,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9632.6,"xrt_wall":1.14}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1260.0,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":465.1,"xrt_compute":23.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1330.0,"xrt_compute":26.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":476.5,"xrt_compute":23.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":43981.0,"xrt_compute":0.8,"load_ms":730.3,"mel_ms":55.6,"encode_ms":14707.6,"decode_ms":29217.8,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":43981.1,"xrt_wall":0.8}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":19830.0,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":55640.0,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":26183.9,"xrt_compute":0.42,"load_ms":1218.4,"mel_ms":46.8,"encode_ms":18835.4,"decode_ms":7301.7,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":26184.1,"xrt_wall":0.42}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6271.9,"xrt_compute":1.754,"load_ms":981.5,"mel_ms":43.2,"encode_ms":4212.5,"decode_ms":2016.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6272.0,"xrt_wall":1.754} + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":13720.0,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6130.0,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":14410.0,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6271.9,"xrt_compute":1.75,"load_ms":981.5,"mel_ms":43.2,"encode_ms":4212.5,"decode_ms":2016.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6272.0,"xrt_wall":1.75} ] } diff --git a/catalog/whisper-medium.en.json b/catalog/whisper-medium.en.json index 77522d9d..99626cfb 100644 --- a/catalog/whisper-medium.en.json +++ b/catalog/whisper-medium.en.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7231.8,"xrt_compute":4.886,"load_ms":126.8,"mel_ms":5.0,"encode_ms":2866.7,"decode_ms":4360.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7231.7,"xrt_wall":4.886}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7231.8,"xrt_compute":4.89,"load_ms":126.8,"mel_ms":5.0,"encode_ms":2866.7,"decode_ms":4360.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7231.7,"xrt_wall":4.89}, {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3373.9,"xrt_compute":3.26,"load_ms":136.9,"mel_ms":5.6,"encode_ms":2866.1,"decode_ms":502.2,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3374.0,"xrt_wall":3.26}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9073.0,"xrt_compute":3.894,"load_ms":190.8,"mel_ms":4.8,"encode_ms":3632.3,"decode_ms":5435.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9073.1,"xrt_wall":3.894}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4293.5,"xrt_compute":2.562,"load_ms":198.3,"mel_ms":4.4,"encode_ms":3656.0,"decode_ms":633.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4293.6,"xrt_wall":2.562}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":48.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":45.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":46.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":21069.1,"xrt_compute":1.677,"load_ms":382.4,"mel_ms":51.8,"encode_ms":7364.8,"decode_ms":13652.6,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":21069.2,"xrt_wall":1.677}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":9357.7,"xrt_compute":1.176,"load_ms":379.1,"mel_ms":44.4,"encode_ms":7436.0,"decode_ms":1877.3,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9357.9,"xrt_wall":1.175}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":26625.9,"xrt_compute":1.327,"load_ms":598.8,"mel_ms":52.1,"encode_ms":9385.6,"decode_ms":17188.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":26626.1,"xrt_wall":1.327}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":11529.7,"xrt_compute":0.954,"load_ms":597.5,"mel_ms":43.1,"encode_ms":9204.4,"decode_ms":2282.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":11529.9,"xrt_wall":0.954}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":4.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2882.6,"xrt_compute":3.816,"load_ms":503.1,"mel_ms":41.0,"encode_ms":2047.3,"decode_ms":794.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2882.7,"xrt_wall":3.816} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9073.0,"xrt_compute":3.89,"load_ms":190.8,"mel_ms":4.8,"encode_ms":3632.3,"decode_ms":5435.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9073.1,"xrt_wall":3.89}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4293.5,"xrt_compute":2.56,"load_ms":198.3,"mel_ms":4.4,"encode_ms":3656.0,"decode_ms":633.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4293.6,"xrt_wall":2.56}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":725.9,"xrt_compute":48.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":243.3,"xrt_compute":45.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":762.9,"xrt_compute":46.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":249.7,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":21069.1,"xrt_compute":1.68,"load_ms":382.4,"mel_ms":51.8,"encode_ms":7364.8,"decode_ms":13652.6,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":21069.2,"xrt_wall":1.68}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":9357.7,"xrt_compute":1.18,"load_ms":379.1,"mel_ms":44.4,"encode_ms":7436.0,"decode_ms":1877.3,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9357.9,"xrt_wall":1.18}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":26625.9,"xrt_compute":1.33,"load_ms":598.8,"mel_ms":52.1,"encode_ms":9385.6,"decode_ms":17188.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":26626.1,"xrt_wall":1.33}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":11529.7,"xrt_compute":0.95,"load_ms":597.5,"mel_ms":43.1,"encode_ms":9204.4,"decode_ms":2282.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":11529.9,"xrt_wall":0.95}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":6440.0,"xrt_compute":5.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2550.0,"xrt_compute":4.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":6760.0,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2882.6,"xrt_compute":3.82,"load_ms":503.1,"mel_ms":41.0,"encode_ms":2047.3,"decode_ms":794.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2882.7,"xrt_wall":3.82} ] } diff --git a/catalog/whisper-medium.json b/catalog/whisper-medium.json index 026ab942..caa11b28 100644 --- a/catalog/whisper-medium.json +++ b/catalog/whisper-medium.json @@ -138,21 +138,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7929.8,"xrt_compute":4.456,"load_ms":140.8,"mel_ms":4.7,"encode_ms":2999.1,"decode_ms":4925.9,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7929.8,"xrt_wall":4.456}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3897.1,"xrt_compute":2.823,"load_ms":138.5,"mel_ms":4.0,"encode_ms":3004.2,"decode_ms":888.9,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3897.2,"xrt_wall":2.823}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9621.8,"xrt_compute":3.672,"load_ms":200.8,"mel_ms":4.6,"encode_ms":3664.9,"decode_ms":5952.3,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9621.9,"xrt_wall":3.672}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4749.7,"xrt_compute":2.316,"load_ms":189.6,"mel_ms":4.0,"encode_ms":3667.9,"decode_ms":1077.8,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4749.8,"xrt_wall":2.316}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":46.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":40.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":39.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":22572.1,"xrt_compute":1.565,"load_ms":387.2,"mel_ms":51.0,"encode_ms":7456.6,"decode_ms":15064.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":22572.2,"xrt_wall":1.565}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7929.8,"xrt_compute":4.46,"load_ms":140.8,"mel_ms":4.7,"encode_ms":2999.1,"decode_ms":4925.9,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7929.8,"xrt_wall":4.46}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3897.1,"xrt_compute":2.82,"load_ms":138.5,"mel_ms":4.0,"encode_ms":3004.2,"decode_ms":888.9,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3897.2,"xrt_wall":2.82}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9621.8,"xrt_compute":3.67,"load_ms":200.8,"mel_ms":4.6,"encode_ms":3664.9,"decode_ms":5952.3,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9621.9,"xrt_wall":3.67}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4749.7,"xrt_compute":2.32,"load_ms":189.6,"mel_ms":4.0,"encode_ms":3667.9,"decode_ms":1077.8,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4749.8,"xrt_wall":2.32}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":759.2,"xrt_compute":46.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":270.9,"xrt_compute":40.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":802.5,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":280.0,"xrt_compute":39.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":22572.1,"xrt_compute":1.56,"load_ms":387.2,"mel_ms":51.0,"encode_ms":7456.6,"decode_ms":15064.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":22572.2,"xrt_wall":1.56}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":10474.5,"xrt_compute":1.05,"load_ms":384.6,"mel_ms":45.6,"encode_ms":7439.6,"decode_ms":2989.4,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":10474.7,"xrt_wall":1.05}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":27874.3,"xrt_compute":1.268,"load_ms":608.1,"mel_ms":54.0,"encode_ms":9436.2,"decode_ms":18384.1,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":27874.4,"xrt_wall":1.268}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":13137.6,"xrt_compute":0.837,"load_ms":608.4,"mel_ms":45.4,"encode_ms":9381.5,"decode_ms":3710.6,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":13137.8,"xrt_wall":0.837}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":3.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":27874.3,"xrt_compute":1.27,"load_ms":608.1,"mel_ms":54.0,"encode_ms":9436.2,"decode_ms":18384.1,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":27874.4,"xrt_wall":1.27}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":13137.6,"xrt_compute":0.84,"load_ms":608.4,"mel_ms":45.4,"encode_ms":9381.5,"decode_ms":3710.6,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":13137.8,"xrt_wall":0.84}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":6770.0,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2830.0,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":7030.0,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3000.0,"xrt_compute":3.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-small.en.json b/catalog/whisper-small.en.json index 7314d642..eb16fa17 100644 --- a/catalog/whisper-small.en.json +++ b/catalog/whisper-small.en.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2520.9,"xrt_compute":14.015,"load_ms":77.8,"mel_ms":5.8,"encode_ms":933.8,"decode_ms":1581.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2521.0,"xrt_wall":14.015}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1127.6,"xrt_compute":9.755,"load_ms":82.4,"mel_ms":4.8,"encode_ms":937.0,"decode_ms":185.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1127.7,"xrt_wall":9.755}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2889.1,"xrt_compute":12.229,"load_ms":95.9,"mel_ms":5.5,"encode_ms":1100.6,"decode_ms":1783.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2889.2,"xrt_wall":12.229}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1310.6,"xrt_compute":8.393,"load_ms":83.6,"mel_ms":5.1,"encode_ms":1094.6,"decode_ms":210.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1310.6,"xrt_wall":8.393}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":107.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":107.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":106.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":102.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7163.0,"xrt_compute":4.933,"load_ms":178.6,"mel_ms":47.7,"encode_ms":2376.3,"decode_ms":4739.0,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7163.1,"xrt_wall":4.932}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2520.9,"xrt_compute":14.02,"load_ms":77.8,"mel_ms":5.8,"encode_ms":933.8,"decode_ms":1581.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2521.0,"xrt_wall":14.02}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1127.6,"xrt_compute":9.76,"load_ms":82.4,"mel_ms":4.8,"encode_ms":937.0,"decode_ms":185.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1127.7,"xrt_wall":9.76}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2889.1,"xrt_compute":12.23,"load_ms":95.9,"mel_ms":5.5,"encode_ms":1100.6,"decode_ms":1783.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2889.2,"xrt_wall":12.23}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1310.6,"xrt_compute":8.39,"load_ms":83.6,"mel_ms":5.1,"encode_ms":1094.6,"decode_ms":210.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1310.6,"xrt_wall":8.39}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":329.3,"xrt_compute":107.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":102.6,"xrt_compute":107.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":333.0,"xrt_compute":106.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":107.1,"xrt_compute":102.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7163.0,"xrt_compute":4.93,"load_ms":178.6,"mel_ms":47.7,"encode_ms":2376.3,"decode_ms":4739.0,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7163.1,"xrt_wall":4.93}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2948.9,"xrt_compute":3.73,"load_ms":175.9,"mel_ms":42.4,"encode_ms":2274.9,"decode_ms":631.5,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2949.0,"xrt_wall":3.73}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8382.5,"xrt_compute":4.215,"load_ms":247.0,"mel_ms":49.5,"encode_ms":2821.8,"decode_ms":5511.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":8382.7,"xrt_wall":4.215}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8382.5,"xrt_compute":4.21,"load_ms":247.0,"mel_ms":49.5,"encode_ms":2821.8,"decode_ms":5511.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":8382.7,"xrt_wall":4.21}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3678.8,"xrt_compute":2.99,"load_ms":251.6,"mel_ms":45.8,"encode_ms":2834.7,"decode_ms":798.3,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3678.9,"xrt_wall":2.99}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":12.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":2360.0,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":883.0,"xrt_compute":12.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2480.0,"xrt_compute":14.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":970.0,"xrt_compute":11.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-small.json b/catalog/whisper-small.json index 12d2525e..c45effbf 100644 --- a/catalog/whisper-small.json +++ b/catalog/whisper-small.json @@ -138,21 +138,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2737.6,"xrt_compute":12.906,"load_ms":77.5,"mel_ms":5.9,"encode_ms":989.8,"decode_ms":1742.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2737.7,"xrt_wall":12.906}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1303.4,"xrt_compute":8.44,"load_ms":73.7,"mel_ms":5.2,"encode_ms":995.6,"decode_ms":302.6,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1303.4,"xrt_wall":8.439}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3006.7,"xrt_compute":11.751,"load_ms":99.6,"mel_ms":5.2,"encode_ms":1091.9,"decode_ms":1909.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3006.8,"xrt_wall":11.751}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1426.9,"xrt_compute":7.709,"load_ms":98.0,"mel_ms":5.2,"encode_ms":1090.7,"decode_ms":331.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1426.9,"xrt_wall":7.709}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":103.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":96.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":101.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":97.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7467.3,"xrt_compute":4.732,"load_ms":179.5,"mel_ms":50.9,"encode_ms":2377.2,"decode_ms":5039.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7467.4,"xrt_wall":4.731}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3266.7,"xrt_compute":3.367,"load_ms":178.0,"mel_ms":41.2,"encode_ms":2266.7,"decode_ms":958.8,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3266.8,"xrt_wall":3.367}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8906.3,"xrt_compute":3.967,"load_ms":244.0,"mel_ms":53.4,"encode_ms":2840.7,"decode_ms":6012.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":8906.5,"xrt_wall":3.967}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3948.1,"xrt_compute":2.786,"load_ms":243.9,"mel_ms":40.9,"encode_ms":2776.2,"decode_ms":1130.9,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3948.1,"xrt_wall":2.786}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":14.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":11.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":13.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":10.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2737.6,"xrt_compute":12.91,"load_ms":77.5,"mel_ms":5.9,"encode_ms":989.8,"decode_ms":1742.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2737.7,"xrt_wall":12.91}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1303.4,"xrt_compute":8.44,"load_ms":73.7,"mel_ms":5.2,"encode_ms":995.6,"decode_ms":302.6,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1303.4,"xrt_wall":8.44}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3006.7,"xrt_compute":11.75,"load_ms":99.6,"mel_ms":5.2,"encode_ms":1091.9,"decode_ms":1909.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3006.8,"xrt_wall":11.75}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1426.9,"xrt_compute":7.71,"load_ms":98.0,"mel_ms":5.2,"encode_ms":1090.7,"decode_ms":331.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1426.9,"xrt_wall":7.71}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":340.0,"xrt_compute":103.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":113.5,"xrt_compute":96.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":349.3,"xrt_compute":101.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":113.1,"xrt_compute":97.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7467.3,"xrt_compute":4.73,"load_ms":179.5,"mel_ms":50.9,"encode_ms":2377.2,"decode_ms":5039.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7467.4,"xrt_wall":4.73}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3266.7,"xrt_compute":3.37,"load_ms":178.0,"mel_ms":41.2,"encode_ms":2266.7,"decode_ms":958.8,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3266.8,"xrt_wall":3.37}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8906.3,"xrt_compute":3.97,"load_ms":244.0,"mel_ms":53.4,"encode_ms":2840.7,"decode_ms":6012.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":8906.5,"xrt_wall":3.97}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3948.1,"xrt_compute":2.79,"load_ms":243.9,"mel_ms":40.9,"encode_ms":2776.2,"decode_ms":1130.9,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3948.1,"xrt_wall":2.79}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":2470.0,"xrt_compute":14.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":960.0,"xrt_compute":11.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2570.0,"xrt_compute":13.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1030.0,"xrt_compute":10.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-tiny.en.json b/catalog/whisper-tiny.en.json index 4c0f498e..e2150dd7 100644 --- a/catalog/whisper-tiny.en.json +++ b/catalog/whisper-tiny.en.json @@ -48,21 +48,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":381.7,"xrt_compute":92.554,"load_ms":41.8,"mel_ms":5.0,"encode_ms":125.2,"decode_ms":251.6,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":381.8,"xrt_wall":92.544}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":161.4,"xrt_compute":68.147,"load_ms":50.9,"mel_ms":5.0,"encode_ms":124.6,"decode_ms":31.7,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":161.4,"xrt_wall":68.135}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":389.4,"xrt_compute":90.744,"load_ms":52.4,"mel_ms":5.3,"encode_ms":129.5,"decode_ms":254.6,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":389.4,"xrt_wall":90.735}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":165.0,"xrt_compute":66.669,"load_ms":55.3,"mel_ms":4.2,"encode_ms":128.7,"decode_ms":32.0,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":165.0,"xrt_wall":66.656}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":280.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":323.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":278.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":281.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1087.9,"xrt_compute":32.476,"load_ms":95.7,"mel_ms":41.0,"encode_ms":285.9,"decode_ms":761.0,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1088.0,"xrt_wall":32.473}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":435.6,"xrt_compute":25.252,"load_ms":93.4,"mel_ms":41.7,"encode_ms":283.0,"decode_ms":110.9,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":435.8,"xrt_wall":25.242}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1187.0,"xrt_compute":29.766,"load_ms":95.3,"mel_ms":44.4,"encode_ms":326.1,"decode_ms":816.5,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1187.1,"xrt_wall":29.764}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":492.8,"xrt_compute":22.32,"load_ms":96.5,"mel_ms":47.4,"encode_ms":323.5,"decode_ms":121.9,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":493.0,"xrt_wall":22.311}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":65.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":56.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":65.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":56.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":381.7,"xrt_compute":92.55,"load_ms":41.8,"mel_ms":5.0,"encode_ms":125.2,"decode_ms":251.6,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":381.8,"xrt_wall":92.54}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":161.4,"xrt_compute":68.15,"load_ms":50.9,"mel_ms":5.0,"encode_ms":124.6,"decode_ms":31.7,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":161.4,"xrt_wall":68.14}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":389.4,"xrt_compute":90.74,"load_ms":52.4,"mel_ms":5.3,"encode_ms":129.5,"decode_ms":254.6,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":389.4,"xrt_wall":90.73}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":165.0,"xrt_compute":66.67,"load_ms":55.3,"mel_ms":4.2,"encode_ms":128.7,"decode_ms":32.0,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":165.0,"xrt_wall":66.66}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":125.8,"xrt_compute":280.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":34.0,"xrt_compute":323.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":127.0,"xrt_compute":278.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":39.1,"xrt_compute":281.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1087.9,"xrt_compute":32.48,"load_ms":95.7,"mel_ms":41.0,"encode_ms":285.9,"decode_ms":761.0,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1088.0,"xrt_wall":32.47}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":435.6,"xrt_compute":25.25,"load_ms":93.4,"mel_ms":41.7,"encode_ms":283.0,"decode_ms":110.9,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":435.8,"xrt_wall":25.24}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1187.0,"xrt_compute":29.77,"load_ms":95.3,"mel_ms":44.4,"encode_ms":326.1,"decode_ms":816.5,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1187.1,"xrt_wall":29.76}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":492.8,"xrt_compute":22.32,"load_ms":96.5,"mel_ms":47.4,"encode_ms":323.5,"decode_ms":121.9,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":493.0,"xrt_wall":22.31}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":541.0,"xrt_compute":65.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":193.0,"xrt_compute":56.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":540.0,"xrt_compute":65.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":197.0,"xrt_compute":56.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/catalog/whisper-tiny.json b/catalog/whisper-tiny.json index cc5cd58d..8c7ebe24 100644 --- a/catalog/whisper-tiny.json +++ b/catalog/whisper-tiny.json @@ -138,21 +138,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":390.3,"xrt_compute":90.515,"load_ms":52.2,"mel_ms":5.6,"encode_ms":125.3,"decode_ms":259.5,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":390.4,"xrt_wall":90.508}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":169.7,"xrt_compute":64.806,"load_ms":51.2,"mel_ms":3.9,"encode_ms":124.5,"decode_ms":41.4,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":169.8,"xrt_wall":64.795}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":396.2,"xrt_compute":89.169,"load_ms":55.7,"mel_ms":5.1,"encode_ms":128.9,"decode_ms":262.2,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":396.3,"xrt_wall":89.16}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":174.7,"xrt_compute":62.972,"load_ms":52.6,"mel_ms":4.0,"encode_ms":128.4,"decode_ms":42.2,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":174.7,"xrt_wall":62.961}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":301.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":290.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":301.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":302.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1139.2,"xrt_compute":31.014,"load_ms":95.6,"mel_ms":43.5,"encode_ms":291.6,"decode_ms":804.1,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1139.3,"xrt_wall":31.012}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":466.3,"xrt_compute":23.589,"load_ms":136.9,"mel_ms":38.8,"encode_ms":281.9,"decode_ms":145.6,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":466.5,"xrt_wall":23.579}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1228.3,"xrt_compute":28.764,"load_ms":100.3,"mel_ms":50.9,"encode_ms":328.2,"decode_ms":849.3,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1228.4,"xrt_wall":28.762}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":530.6,"xrt_compute":20.73,"load_ms":119.7,"mel_ms":45.7,"encode_ms":325.3,"decode_ms":159.6,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":530.8,"xrt_wall":20.724}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":66.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":52.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":66.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":55.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":390.3,"xrt_compute":90.52,"load_ms":52.2,"mel_ms":5.6,"encode_ms":125.3,"decode_ms":259.5,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":390.4,"xrt_wall":90.51}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":169.7,"xrt_compute":64.81,"load_ms":51.2,"mel_ms":3.9,"encode_ms":124.5,"decode_ms":41.4,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":169.8,"xrt_wall":64.8}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":396.2,"xrt_compute":89.17,"load_ms":55.7,"mel_ms":5.1,"encode_ms":128.9,"decode_ms":262.2,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":396.3,"xrt_wall":89.16}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":174.7,"xrt_compute":62.97,"load_ms":52.6,"mel_ms":4.0,"encode_ms":128.4,"decode_ms":42.2,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":174.7,"xrt_wall":62.96}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":117.3,"xrt_compute":301.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":37.9,"xrt_compute":290.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":117.1,"xrt_compute":301.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":36.4,"xrt_compute":302.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1139.2,"xrt_compute":31.01,"load_ms":95.6,"mel_ms":43.5,"encode_ms":291.6,"decode_ms":804.1,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1139.3,"xrt_wall":31.01}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":466.3,"xrt_compute":23.59,"load_ms":136.9,"mel_ms":38.8,"encode_ms":281.9,"decode_ms":145.6,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":466.5,"xrt_wall":23.58}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1228.3,"xrt_compute":28.76,"load_ms":100.3,"mel_ms":50.9,"encode_ms":328.2,"decode_ms":849.3,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1228.4,"xrt_wall":28.76}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":530.6,"xrt_compute":20.73,"load_ms":119.7,"mel_ms":45.7,"encode_ms":325.3,"decode_ms":159.6,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":530.8,"xrt_wall":20.72}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":529.0,"xrt_compute":66.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":209.0,"xrt_compute":52.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":528.0,"xrt_compute":66.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":200.0,"xrt_compute":55.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} ] } diff --git a/docs/_templates/model-card.md.j2 b/docs/_templates/model-card.md.j2 index 6729841f..57ab7988 100644 --- a/docs/_templates/model-card.md.j2 +++ b/docs/_templates/model-card.md.j2 @@ -121,19 +121,15 @@ validated at commit [`{{ validation_commit }}`](https://github.com/handy-compute ## Performance -{% if perf_machines %} -Wall-clock latency, mean over iterations after warmup. Speedup over realtime in parentheses. +Cells are compute latency (mel + encode + decode), mean over the profile's +iterations after warmup, with speedup over realtime in parentheses. Rendered +from `catalog/{{ variant }}.json` by `scripts/catalog/render.py`. {% for m in perf_machines -%} -### {{ m.slug }} +### {{ m.title }} -| Backend | Sample | {% for q in m.quants %}{{ q }}{% if not loop.last %} | {% endif %}{% endfor %} | -| --- | --- | {% for q in m.quants %}---:{% if not loop.last %} | {% endif %}{% endfor %} | -{% for row in m.rows -%} -| {{ row.backend }} | {{ row.sample }} | {% for q in m.quants %}{{ row.latency[q] }}{% if not loop.last %} | {% endif %}{% endfor %} | -{% endfor %} - -{{ m.os }}, transcribe.cpp `{{ m.transcribe_sha }}`. + + {% endfor -%} @@ -142,9 +138,6 @@ Benchmark reproduction: ```bash uv run scripts/bench/run.py --profile --models {{ variant }} ``` -{% else %} -Performance numbers are pending. Run `uv run scripts/bench/run.py --models {{ variant }}` to generate them. -{% endif %} ## Reproduction diff --git a/docs/models/canary-180m-flash.md b/docs/models/canary-180m-flash.md index 9da29ecb..71d92b81 100644 --- a/docs/models/canary-180m-flash.md +++ b/docs/models/canary-180m-flash.md @@ -80,29 +80,33 @@ CLI flags specific to canary: ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 72.3 ms (152.1×) | 68.0 ms (161.8×) | -| Metal | dots (35.3s) | 278.3 ms (127.0×) | 255.0 ms (138.6×) | -| CPU | jfk (11.0s) | 137.1 ms (80.2×) | 124.0 ms (88.7×) | -| CPU | dots (35.3s) | 521.6 ms (67.7×) | 482.1 ms (73.3×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------------: | -----------------: | +| Metal | jfk (11.0s) | 71.1 ms (154.72×) | 66.6 ms (165.21×) | +| Metal | dots (35.3s) | 276.6 ms (127.73×) | 253.3 ms (139.48×) | +| CPU | jfk (11.0s) | 136.5 ms (80.57×) | 123.4 ms (89.14×) | +| CPU | dots (35.3s) | 520.5 ms (67.88×) | 481.0 ms (73.46×) | + macOS 26.4.1, transcribe.cpp `19b3b87`. ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Vulkan | jfk (11.0s) | 315.6 ms (34.9×) | 296.0 ms (37.2×) | -| Vulkan | dots (35.3s) | 1.22 s (28.9×) | 1.10 s (32.1×) | -| CPU | jfk (11.0s) | 454.3 ms (24.2×) | 370.5 ms (29.7×) | -| CPU | dots (35.3s) | 1.92 s (18.4×) | 1.63 s (21.7×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Vulkan | jfk (11.0s) | 312.6 ms (35.19×) | 292.8 ms (37.57×) | +| Vulkan | dots (35.3s) | 1.22 s (29.02×) | 1.09 s (32.32×) | +| CPU | jfk (11.0s) | 452.7 ms (24.30×) | 369.0 ms (29.81×) | +| CPU | dots (35.3s) | 1.91 s (18.48×) | 1.62 s (21.75×) | + Fedora Linux 43, transcribe.cpp `4d44530`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/canary-1b-flash.md b/docs/models/canary-1b-flash.md index e38ef11f..12761d0f 100644 --- a/docs/models/canary-1b-flash.md +++ b/docs/models/canary-1b-flash.md @@ -73,29 +73,33 @@ CLI flags specific to canary: ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 106.6 ms (103.2×) | 111.3 ms (98.8×) | -| Metal | dots (35.3s) | 368.6 ms (95.9×) | 349.2 ms (101.2×) | -| CPU | jfk (11.0s) | 518.3 ms (21.2×) | 430.1 ms (25.6×) | -| CPU | dots (35.3s) | 1.79 s (19.7×) | 1.51 s (23.4×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------------: | -----------------: | +| Metal | jfk (11.0s) | 104.2 ms (105.60×) | 108.9 ms (100.97×) | +| Metal | dots (35.3s) | 365.6 ms (96.65×) | 346.2 ms (102.06×) | +| CPU | jfk (11.0s) | 517.2 ms (21.27×) | 429.0 ms (25.64×) | +| CPU | dots (35.3s) | 1.79 s (19.72×) | 1.51 s (23.43×) | + macOS 26.4.1, transcribe.cpp `19b3b87`. ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Vulkan | jfk (11.0s) | 763.5 ms (14.4×) | 704.2 ms (15.6×) | -| Vulkan | dots (35.3s) | 2.46 s (14.4×) | 2.31 s (15.3×) | -| CPU | jfk (11.0s) | 1.49 s (7.4×) | 1.13 s (9.7×) | -| CPU | dots (35.3s) | 5.48 s (6.4×) | 4.51 s (7.8×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Vulkan | jfk (11.0s) | 758.1 ms (14.51×) | 698.9 ms (15.74×) | +| Vulkan | dots (35.3s) | 2.45 s (14.39×) | 2.30 s (15.33×) | +| CPU | jfk (11.0s) | 1.49 s (7.40×) | 1.13 s (9.73×) | +| CPU | dots (35.3s) | 5.48 s (6.45×) | 4.50 s (7.85×) | + Fedora Linux 43, transcribe.cpp `4d44530`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/canary-1b-v2.md b/docs/models/canary-1b-v2.md index 97d2253f..04afdb14 100644 --- a/docs/models/canary-1b-v2.md +++ b/docs/models/canary-1b-v2.md @@ -96,29 +96,33 @@ CLI flags specific to canary: ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 124.3 ms (88.5×) | 121.6 ms (90.5×) | -| Metal | dots (35.3s) | 430.7 ms (82.0×) | 406.1 ms (87.0×) | -| CPU | jfk (11.0s) | 555.0 ms (19.8×) | 453.5 ms (24.3×) | -| CPU | dots (35.3s) | 1.96 s (18.0×) | 1.66 s (21.3×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Metal | jfk (11.0s) | 121.9 ms (90.22×) | 119.1 ms (92.34×) | +| Metal | dots (35.3s) | 427.9 ms (82.57×) | 403.1 ms (87.65×) | +| CPU | jfk (11.0s) | 553.9 ms (19.86×) | 452.5 ms (24.31×) | +| CPU | dots (35.3s) | 1.96 s (18.01×) | 1.66 s (21.35×) | + macOS 26.4.1, transcribe.cpp `19b3b87`. ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Vulkan | jfk (11.0s) | 829.9 ms (13.3×) | 748.8 ms (14.7×) | -| Vulkan | dots (35.3s) | 2.70 s (13.1×) | 2.46 s (14.4×) | -| CPU | jfk (11.0s) | 1.55 s (7.1×) | 1.16 s (9.5×) | -| CPU | dots (35.3s) | 5.74 s (6.2×) | 4.70 s (7.5×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Vulkan | jfk (11.0s) | 824.7 ms (13.34×) | 743.7 ms (14.79×) | +| Vulkan | dots (35.3s) | 2.69 s (13.13×) | 2.45 s (14.40×) | +| CPU | jfk (11.0s) | 1.55 s (7.09×) | 1.16 s (9.49×) | +| CPU | dots (35.3s) | 5.74 s (6.16×) | 4.70 s (7.52×) | + Fedora Linux 43, transcribe.cpp `4d44530`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/canary-1b.md b/docs/models/canary-1b.md index 9539fb8e..eb21647d 100644 --- a/docs/models/canary-1b.md +++ b/docs/models/canary-1b.md @@ -80,7 +80,7 @@ CLI flags specific to canary: ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). @@ -93,23 +93,27 @@ overhead. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 216.0 ms (50.9×) | 198.1 ms (55.5×) | -| Metal | dots (35.3s) | 1.03 s (34.2×) | 937.2 ms (37.7×) | -| CPU | jfk (11.0s) | 511.1 ms (21.5×) | 426.2 ms (25.8×) | -| CPU | dots (35.3s) | 2.05 s (17.3×) | 1.72 s (20.6×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Metal | jfk (11.0s) | 212.3 ms (51.81×) | 195.9 ms (56.14×) | +| Metal | dots (35.3s) | 1.03 s (34.42×) | 931.4 ms (37.94×) | +| CPU | jfk (11.0s) | 510.2 ms (21.56×) | 425.3 ms (25.87×) | +| CPU | dots (35.3s) | 2.05 s (17.27×) | 1.71 s (20.61×) | + macOS 26.4.1, transcribe.cpp `19b3b87`. ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | ---------------: | -| Vulkan | jfk (11.0s) | 1.07 s (10.2×) | 923.4 ms (11.9×) | -| Vulkan | dots (35.3s) | 4.63 s (7.6×) | 3.87 s (9.1×) | -| CPU | jfk (11.0s) | 1.71 s (6.4×) | 1.24 s (8.9×) | -| CPU | dots (35.3s) | 7.59 s (4.7×) | 5.97 s (5.9×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | ----------------: | +| Vulkan | jfk (11.0s) | 1.07 s (10.28×) | 918.6 ms (11.97×) | +| Vulkan | dots (35.3s) | 4.62 s (7.65×) | 3.87 s (9.13×) | +| CPU | jfk (11.0s) | 1.70 s (6.46×) | 1.23 s (8.92×) | +| CPU | dots (35.3s) | 7.59 s (4.66×) | 5.96 s (5.92×) | + Fedora Linux 43, transcribe.cpp `4d44530`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/canary-qwen-2.5b.md b/docs/models/canary-qwen-2.5b.md index 11c58d6c..fce2cc70 100644 --- a/docs/models/canary-qwen-2.5b.md +++ b/docs/models/canary-qwen-2.5b.md @@ -80,29 +80,33 @@ CLI flags: ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 243.9 ms (45.1×) | 232.4 ms (47.3×) | -| Metal | dots (35.3s) | 1.02 s (34.5×) | 911.7 ms (38.8×) | -| CPU | jfk (11.0s) | 1.42 s (7.7×) | 1.06 s (10.4×) | -| CPU | dots (35.3s) | 5.14 s (6.9×) | 4.00 s (8.8×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Metal | jfk (11.0s) | 240.7 ms (45.71×) | 225.7 ms (48.73×) | +| Metal | dots (35.3s) | 1.02 s (34.78×) | 903.3 ms (39.11×) | +| CPU | jfk (11.0s) | 1.42 s (7.76×) | 1.06 s (10.40×) | +| CPU | dots (35.3s) | 5.14 s (6.88×) | 4.00 s (8.84×) | + macOS 26.4.1, transcribe.cpp `1b19945`. ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Vulkan | jfk (11.0s) | 2.41 s (4.6×) | 2.11 s (5.2×) | -| Vulkan | dots (35.3s) | 9.72 s (3.6×) | 8.48 s (4.2×) | -| CPU | jfk (11.0s) | 4.73 s (2.3×) | 3.43 s (3.2×) | -| CPU | dots (35.3s) | 18.42 s (1.9×) | 13.51 s (2.6×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 2.39 s (4.60×) | 2.10 s (5.24×) | +| Vulkan | dots (35.3s) | 9.70 s (3.64×) | 8.46 s (4.18×) | +| CPU | jfk (11.0s) | 4.72 s (2.33×) | 3.42 s (3.22×) | +| CPU | dots (35.3s) | 18.41 s (1.92×) | 13.49 s (2.62×) | + Fedora Linux 43, transcribe.cpp `51db32d`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/cohere-transcribe-03-2026.md b/docs/models/cohere-transcribe-03-2026.md index 35aeaccf..5dee9459 100644 --- a/docs/models/cohere-transcribe-03-2026.md +++ b/docs/models/cohere-transcribe-03-2026.md @@ -64,29 +64,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 150 ms (74×) | 154 ms (71×) | -| Metal | dots (35.3s) | 491 ms (72×) | 465 ms (76×) | -| CPU | jfk (11.0s) | 1.21 s (9×) | 1.05 s (11×) | -| CPU | dots (35.3s) | 4.13 s (9×) | 3.49 s (10×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------: | -----------: | +| Metal | jfk (11.0s) | 150 ms (74×) | 154 ms (71×) | +| Metal | dots (35.3s) | 491 ms (72×) | 465 ms (76×) | +| CPU | jfk (11.0s) | 1.21 s (9×) | 1.05 s (11×) | +| CPU | dots (35.3s) | 4.13 s (9×) | 3.49 s (10×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 1.43 s (8×) | 1.33 s (8×) | -| Vulkan | dots (35.3s) | 4.25 s (8×) | 4.25 s (8×) | -| CPU | jfk (11.0s) | 3.57 s (3×) | 2.90 s (4×) | -| CPU | dots (35.3s) | 12.40 s (3×) | 10.08 s (4×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | -------------: | +| Vulkan | jfk (11.0s) | 1.43 s (8×) | 1.33 s (8×) | +| Vulkan | dots (35.3s) | 4.25 s (8×) | 4.25 s (8×) | +| CPU | jfk (11.0s) | 3.57 s (3.08×) | 2.89 s (3.80×) | +| CPU | dots (35.3s) | 12.39 s (2.85×) | 10.08 s (4×) | + Fedora 43, transcribe.cpp `2ab01b8`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/cohere-transcribe-arabic-07-2026.md b/docs/models/cohere-transcribe-arabic-07-2026.md index a465fce2..cce9880f 100644 --- a/docs/models/cohere-transcribe-arabic-07-2026.md +++ b/docs/models/cohere-transcribe-arabic-07-2026.md @@ -74,29 +74,33 @@ The tables below were measured on the same architecture with identical tensor shapes and quantization layout (only the weight values differ), so per-quant throughput carries over. -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 150 ms (74×) | 154 ms (71×) | -| Metal | dots (35.3s) | 491 ms (72×) | 465 ms (76×) | -| CPU | jfk (11.0s) | 1.21 s (9×) | 1.05 s (11×) | -| CPU | dots (35.3s) | 4.13 s (9×) | 3.49 s (10×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------: | -----------: | +| Metal | jfk (11.0s) | 150 ms (74×) | 154 ms (71×) | +| Metal | dots (35.3s) | 491 ms (72×) | 465 ms (76×) | +| CPU | jfk (11.0s) | 1.21 s (9×) | 1.05 s (11×) | +| CPU | dots (35.3s) | 4.13 s (9×) | 3.49 s (10×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 1.43 s (8×) | 1.33 s (8×) | -| Vulkan | dots (35.3s) | 4.25 s (8×) | 4.25 s (8×) | -| CPU | jfk (11.0s) | 3.57 s (3×) | 2.90 s (4×) | -| CPU | dots (35.3s) | 12.40 s (3×) | 10.08 s (4×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------: | -----------: | +| Vulkan | jfk (11.0s) | 1.43 s (8×) | 1.33 s (8×) | +| Vulkan | dots (35.3s) | 4.25 s (8×) | 4.25 s (8×) | +| CPU | jfk (11.0s) | 3.57 s (3×) | 2.90 s (4×) | +| CPU | dots (35.3s) | 12.40 s (3×) | 10.08 s (4×) | + Fedora 43, transcribe.cpp `2ab01b8`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/diar_streaming_sortformer_4spk-v2.1.md b/docs/models/diar_streaming_sortformer_4spk-v2.1.md index 74119251..b3a57fa5 100644 --- a/docs/models/diar_streaming_sortformer_4spk-v2.1.md +++ b/docs/models/diar_streaming_sortformer_4spk-v2.1.md @@ -87,18 +87,20 @@ second (many small windows). ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Default (model-config) operating point. ### Apple M4 -| Backend | Sample | F16 | Q8_0 | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 69 ms (159×) | 65 ms (171×) | -| Metal | dots (35.3s) | 318 ms (111×) | 320 ms (111×) | -| CPU | jfk (11.0s) | 137 ms (80×) | 110 ms (100×) | -| CPU | dots (35.3s) | 796 ms (44×) | 687 ms (51×) | + +| Backend | Sample | F16 | Q8_0 | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 68 ms (161.23×) | 64 ms (172.42×) | +| Metal | dots (35.3s) | 316 ms (111.81×) | 318 ms (111.16×) | +| CPU | jfk (11.0s) | 136 ms (80.68×) | 109 ms (101.09×) | +| CPU | dots (35.3s) | 794 ms (44.49×) | 685 ms (51.59×) | + macOS 25.5.0, transcribe.cpp `d42c3bb`. diff --git a/docs/models/fun-asr-mlt-nano-2512.md b/docs/models/fun-asr-mlt-nano-2512.md index 0a1e00a3..4b71275f 100644 --- a/docs/models/fun-asr-mlt-nano-2512.md +++ b/docs/models/fun-asr-mlt-nano-2512.md @@ -98,18 +98,20 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 156 ms (70×) | 144 ms (76×) | -| Metal | dots (35.3s) | 539 ms (66×) | 499 ms (71×) | -| CPU | jfk (11.0s) | 661 ms (17×) | 575 ms (19×) | -| CPU | dots (35.3s) | 2.36 s (15×) | 2.12 s (17×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------: | -----------: | +| Metal | jfk (11.0s) | 156 ms (70×) | 144 ms (76×) | +| Metal | dots (35.3s) | 539 ms (66×) | 499 ms (71×) | +| CPU | jfk (11.0s) | 661 ms (17×) | 575 ms (19×) | +| CPU | dots (35.3s) | 2.36 s (15×) | 2.12 s (17×) | + macOS 26.4.1, transcribe.cpp `f094d28`. MLT is ~10–15% slower than Fun-ASR-Nano on the same hardware; the gap is from per-step LLM @@ -118,12 +120,14 @@ variants). ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 1.14 s (10×) | 1.03 s (11×) | -| Vulkan | dots (35.3s) | 4.48 s (8×) | 3.92 s (9×) | -| CPU | jfk (11.0s) | 2.35 s (5×) | 1.84 s (6×) | -| CPU | dots (35.3s) | 8.60 s (4×) | 6.97 s (5×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | --------------: | +| Vulkan | jfk (11.0s) | 1.12 s (9.84×) | 1.00 s (10.98×) | +| Vulkan | dots (35.3s) | 4.43 s (7.98×) | 3.86 s (9.15×) | +| CPU | jfk (11.0s) | 2.31 s (4.75×) | 1.81 s (6.08×) | +| CPU | dots (35.3s) | 8.48 s (4.17×) | 6.87 s (5.14×) | + Fedora 43, transcribe.cpp `8635bd1`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/fun-asr-nano-2512.md b/docs/models/fun-asr-nano-2512.md index ac1a3f74..6a0d00cf 100644 --- a/docs/models/fun-asr-nano-2512.md +++ b/docs/models/fun-asr-nano-2512.md @@ -86,29 +86,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 134 ms (82×) | 129 ms (86×) | -| Metal | dots (35.3s) | 486 ms (73×) | 433 ms (82×) | -| CPU | jfk (11.0s) | 379 ms (29×) | 358 ms (31×) | -| CPU | dots (35.3s) | 1.40 s (25×) | 1.31 s (27×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------: | -----------: | +| Metal | jfk (11.0s) | 134 ms (82×) | 129 ms (86×) | +| Metal | dots (35.3s) | 486 ms (73×) | 433 ms (82×) | +| CPU | jfk (11.0s) | 379 ms (29×) | 358 ms (31×) | +| CPU | dots (35.3s) | 1.40 s (25×) | 1.31 s (27×) | + macOS 26.4.1, transcribe.cpp `f094d28`. ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 887 ms (12×) | 825 ms (13×) | -| Vulkan | dots (35.3s) | 3.74 s (9×) | 2.95 s (12×) | -| CPU | jfk (11.0s) | 1.48 s (7×) | 1.15 s (10×) | -| CPU | dots (35.3s) | 5.54 s (6×) | 4.52 s (8×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 864 ms (12.73×) | 801 ms (13.73×) | +| Vulkan | dots (35.3s) | 3.69 s (9.57×) | 2.90 s (12.20×) | +| CPU | jfk (11.0s) | 1.48 s (7×) | 1.12 s (9.83×) | +| CPU | dots (35.3s) | 5.54 s (6×) | 4.42 s (7.99×) | + Fedora 43, transcribe.cpp `8635bd1`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/gigaam-v3-ctc.md b/docs/models/gigaam-v3-ctc.md index e5bbf81f..331c474c 100644 --- a/docs/models/gigaam-v3-ctc.md +++ b/docs/models/gigaam-v3-ctc.md @@ -75,25 +75,29 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ---------- | ------------: | ------------: | -| Metal | ru (4.5s) | 31 ms (146×) | 32 ms (142×) | -| CPU | ru (4.5s) | 157 ms (29×) | 152 ms (30×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | -----------: | -----------: | +| Metal | ru (4.5s) | 31 ms (146×) | 32 ms (142×) | +| CPU | ru (4.5s) | 157 ms (29×) | 152 ms (30×) | + macOS 26.4.1, transcribe.cpp `ef55b52`. ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ---------- | -----------: | -----------: | -| Vulkan | ru (4.5s) | 137 ms (33×) | 141 ms (32×) | -| CPU | ru (4.5s) | 488 ms (9×) | 383 ms (12×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | -----------: | -----------: | +| Vulkan | ru (4.5s) | 137 ms (33×) | 141 ms (32×) | +| CPU | ru (4.5s) | 488 ms (9×) | 383 ms (12×) | + Fedora Linux 43, transcribe.cpp `ef55b52`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/gigaam-v3-e2e-ctc.md b/docs/models/gigaam-v3-e2e-ctc.md index 5917c057..b3bb9bf7 100644 --- a/docs/models/gigaam-v3-e2e-ctc.md +++ b/docs/models/gigaam-v3-e2e-ctc.md @@ -75,25 +75,29 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ---------- | ------------: | ------------: | -| Metal | ru (4.5s) | 40 ms (112×) | 40 ms (111×) | -| CPU | ru (4.5s) | 164 ms (27×) | 161 ms (28×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | -----------: | -----------: | +| Metal | ru (4.5s) | 40 ms (112×) | 40 ms (111×) | +| CPU | ru (4.5s) | 164 ms (27×) | 161 ms (28×) | + macOS 26.4.1, transcribe.cpp `ef55b52`. ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ---------- | -----------: | -----------: | -| Vulkan | ru (4.5s) | 152 ms (30×) | 155 ms (29×) | -| CPU | ru (4.5s) | 494 ms (9×) | 397 ms (11×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | -----------: | -----------: | +| Vulkan | ru (4.5s) | 152 ms (30×) | 155 ms (29×) | +| CPU | ru (4.5s) | 494 ms (9×) | 397 ms (11×) | + Fedora Linux 43, transcribe.cpp `ef55b52`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/gigaam-v3-e2e-rnnt.md b/docs/models/gigaam-v3-e2e-rnnt.md index f648c619..3cabaa86 100644 --- a/docs/models/gigaam-v3-e2e-rnnt.md +++ b/docs/models/gigaam-v3-e2e-rnnt.md @@ -75,25 +75,29 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ---------- | -----------: | -----------: | -| Metal | ru (4.5s) | 51 ms (88×) | 51 ms (89×) | -| CPU | ru (4.5s) | 177 ms (25×) | 172 ms (26×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | -----------: | -----------: | +| Metal | ru (4.5s) | 51 ms (88×) | 51 ms (89×) | +| CPU | ru (4.5s) | 177 ms (25×) | 172 ms (26×) | + macOS 26.4.1, transcribe.cpp `ef55b52`. ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ---------- | -----------: | -----------: | -| Vulkan | ru (4.5s) | 202 ms (22×) | 205 ms (22×) | -| CPU | ru (4.5s) | 552 ms (8×) | 444 ms (10×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | -----------: | -----------: | +| Vulkan | ru (4.5s) | 202 ms (22×) | 205 ms (22×) | +| CPU | ru (4.5s) | 552 ms (8×) | 444 ms (10×) | + Fedora Linux 43, transcribe.cpp `ef55b52`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/gigaam-v3-rnnt.md b/docs/models/gigaam-v3-rnnt.md index ffee1b88..7f05518e 100644 --- a/docs/models/gigaam-v3-rnnt.md +++ b/docs/models/gigaam-v3-rnnt.md @@ -75,25 +75,29 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ---------- | ------------: | ------------: | -| Metal | ru (4.5s) | 41 ms (110×) | 43 ms (105×) | -| CPU | ru (4.5s) | 167 ms (27×) | 166 ms (27×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | -----------: | -----------: | +| Metal | ru (4.5s) | 41 ms (110×) | 43 ms (105×) | +| CPU | ru (4.5s) | 167 ms (27×) | 166 ms (27×) | + macOS 26.4.1, transcribe.cpp `ef55b52`. ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ---------- | -----------: | -----------: | -| Vulkan | ru (4.5s) | 179 ms (25×) | 184 ms (25×) | -| CPU | ru (4.5s) | 511 ms (9×) | 420 ms (11×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | -----------: | -----------: | +| Vulkan | ru (4.5s) | 179 ms (25×) | 184 ms (25×) | +| CPU | ru (4.5s) | 511 ms (9×) | 420 ms (11×) | + Fedora Linux 43, transcribe.cpp `ef55b52`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/granite-4.0-1b-speech.md b/docs/models/granite-4.0-1b-speech.md index 17f3bb1b..175ed73e 100644 --- a/docs/models/granite-4.0-1b-speech.md +++ b/docs/models/granite-4.0-1b-speech.md @@ -72,56 +72,35 @@ build/bin/transcribe-cli \ ## Performance -Cells are wall-clock latency, with speedup over realtime in parentheses. +Cells are compute latency (mel + encode + decode), with speedup over realtime in parentheses. ### Apple M4 Max Mean over 3 iterations after 1 warmup. -**Metal** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 254 ms (43×) | 284 ms (39×) | -| dots (35.3s) | 928 ms (38×) | 1.05 s (34×) | - -**CPU** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 1.48 s (7.4×) | 1.80 s (6.1×) | -| dots (35.3s) | 5.15 s (6.9×) | 5.96 s (5.9×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 126 ms (86.92×) | 129 ms (85.41×) | +| Metal | dots (35.3s) | 341 ms (103.69×) | 347 ms (101.77×) | +| CPU | jfk (11.0s) | 1.55 s (7.08×) | 1.30 s (8.47×) | +| CPU | dots (35.3s) | 4.81 s (7.34×) | 4.25 s (8.31×) | + macOS 26.4, transcribe.cpp `de05c43`. -### Apple M4 - -Mean over 5 iterations after 2 warmups. Q8_0. - -| Backend | Sample | Q8_0 | -| ------- | ----------- | ----------------: | -| Metal | jfk (11.0s) | 959 ms (11×) | -| CPU | jfk (11.0s) | 2.44 s (5×) | - -macOS 26.1, transcribe.cpp `275332d`. - ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) Mean over 3 iterations after 1 warmup. -**Vulkan (RADV)** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 3.47 s (3.2×) | 3.71 s (3.0×) | -| dots (35.3s) | 11.37 s (3.1×) | 12.30 s (2.9×) | - -**CPU** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 5.21 s (2.1×) | 6.72 s (1.6×) | -| dots (35.3s) | 18.08 s (1.9×) | 24.21 s (1.5×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 2.43 s (4.52×) | 2.45 s (4.49×) | +| Vulkan | dots (35.3s) | 6.50 s (5.43×) | 6.61 s (5.35×) | +| CPU | jfk (11.0s) | 5.27 s (2.09×) | 4.30 s (2.56×) | +| CPU | dots (35.3s) | 17.39 s (2.03×) | 13.72 s (2.58×) | + Linux 6.18 (Fedora 43), transcribe.cpp `dbe5814`. diff --git a/docs/models/granite-speech-4.1-2b-nar.md b/docs/models/granite-speech-4.1-2b-nar.md index d766d514..c936e306 100644 --- a/docs/models/granite-speech-4.1-2b-nar.md +++ b/docs/models/granite-speech-4.1-2b-nar.md @@ -70,7 +70,7 @@ editor handles language detection implicitly. ## Performance -Cells are wall-clock latency, with speedup over realtime in parentheses. +Cells are compute latency (mel + encode + decode), with speedup over realtime in parentheses. NAR is faster than the AR variants on GPU backends because there is no autoregressive step loop — a single bidirectional forward through 40 LLM layers replaces the per-token decode graph. @@ -79,50 +79,29 @@ layers replaces the per-token decode graph. Mean over 3 iterations after 1 warmup. -**Metal** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 209 ms (53×) | 196 ms (56×) | -| dots (35.3s) | 664 ms (53×) | 635 ms (56×) | - -**CPU** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 1.87 s (5.9×) | 1.99 s (5.5×) | -| dots (35.3s) | 6.50 s (5.4×) | 7.71 s (4.6×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 151 ms (72.70×) | 163 ms (67.43×) | +| Metal | dots (35.3s) | 491 ms (71.91×) | 518 ms (68.21×) | +| CPU | jfk (11.0s) | 1.89 s (5.81×) | 1.78 s (6.17×) | +| CPU | dots (35.3s) | 7.38 s (4.79×) | 6.21 s (5.69×) | + macOS 26.4, transcribe.cpp `de05c43`. -### Apple M4 - -Mean over 5 iterations after 2 warmups. Q8_0. - -| Backend | Sample | Q8_0 | -| ------- | ----------- | ----------------: | -| Metal | jfk (11.0s) | 614 ms (18×) | -| CPU | jfk (11.0s) | 2.55 s (4×) | - -macOS 26.1, transcribe.cpp `275332d`. - ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) Mean over 3 iterations after 1 warmup. -**Vulkan (RADV)** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 3.16 s (3.5×) | 3.06 s (3.6×) | -| dots (35.3s) | 9.85 s (3.6×) | 9.57 s (3.7×) | - -**CPU** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 5.71 s (1.9×) | 7.05 s (1.6×) | -| dots (35.3s) | 20.39 s (1.7×) | 24.81 s (1.4×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 2.68 s (4.10×) | 2.75 s (4.00×) | +| Vulkan | dots (35.3s) | 8.32 s (4.25×) | 8.53 s (4.14×) | +| CPU | jfk (11.0s) | 6.75 s (1.63×) | 5.46 s (2.01×) | +| CPU | dots (35.3s) | 23.77 s (1.49×) | 19.55 s (1.81×) | + Linux 6.18 (Fedora 43), transcribe.cpp `dbe5814`. NAR's Vulkan RTF stays flat across short and long samples (jfk and dots both ~3.6×) because the diff --git a/docs/models/granite-speech-4.1-2b-plus.md b/docs/models/granite-speech-4.1-2b-plus.md index ee03075f..8c74e44e 100644 --- a/docs/models/granite-speech-4.1-2b-plus.md +++ b/docs/models/granite-speech-4.1-2b-plus.md @@ -95,56 +95,35 @@ words: 22 ## Performance -Cells are wall-clock latency, with speedup over realtime in parentheses. +Cells are compute latency (mel + encode + decode), with speedup over realtime in parentheses. ### Apple M4 Max Mean over 3 iterations after 1 warmup. -**Metal** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 280 ms (39×) | 308 ms (36×) | -| dots (35.3s) | 1.02 s (34×) | 1.18 s (30×) | - -**CPU** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 1.87 s (5.9×) | 2.04 s (5.4×) | -| dots (35.3s) | 5.71 s (6.2×) | 6.91 s (5.1×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | --------------: | +| Metal | jfk (11.0s) | 136 ms (80.88×) | 140 ms (78.83×) | +| Metal | dots (35.3s) | 351 ms (100.61×) | 359 ms (98.49×) | +| CPU | jfk (11.0s) | 1.77 s (6.21×) | 1.64 s (6.69×) | +| CPU | dots (35.3s) | 5.49 s (6.44×) | 4.54 s (7.78×) | + macOS 26.4, transcribe.cpp `de05c43`. -### Apple M4 - -Mean over 5 iterations after 2 warmups. Q8_0. - -| Backend | Sample | Q8_0 | -| ------- | ----------- | ----------------: | -| Metal | jfk (11.0s) | 1.00 s (11×) | -| CPU | jfk (11.0s) | 2.44 s (5×) | - -macOS 26.1, transcribe.cpp `275332d`. - ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) Mean over 3 iterations after 1 warmup. -**Vulkan (RADV)** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 3.63 s (3.0×) | 3.85 s (2.9×) | -| dots (35.3s) | 12.29 s (2.9×) | 13.42 s (2.6×) | - -**CPU** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 6.08 s (1.8×) | 7.80 s (1.4×) | -| dots (35.3s) | 20.45 s (1.7×) | 26.23 s (1.3×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 2.46 s (4.48×) | 2.50 s (4.40×) | +| Vulkan | dots (35.3s) | 6.73 s (5.25×) | 6.83 s (5.17×) | +| CPU | jfk (11.0s) | 6.20 s (1.77×) | 5.02 s (2.19×) | +| CPU | dots (35.3s) | 18.19 s (1.94×) | 15.06 s (2.35×) | + Linux 6.18 (Fedora 43), transcribe.cpp `dbe5814`. diff --git a/docs/models/granite-speech-4.1-2b.md b/docs/models/granite-speech-4.1-2b.md index d9c6cc04..eaf9dc55 100644 --- a/docs/models/granite-speech-4.1-2b.md +++ b/docs/models/granite-speech-4.1-2b.md @@ -73,56 +73,35 @@ build/bin/transcribe-cli \ ## Performance -Cells are wall-clock latency, with speedup over realtime in parentheses. +Cells are compute latency (mel + encode + decode), with speedup over realtime in parentheses. ### Apple M4 Max Mean over 3 iterations after 1 warmup. -**Metal** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 272 ms (40×) | 303 ms (36×) | -| dots (35.3s) | 1.00 s (35×) | 1.16 s (30×) | - -**CPU** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 1.67 s (6.6×) | 1.85 s (5.9×) | -| dots (35.3s) | 5.49 s (6.4×) | 6.22 s (5.7×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 127 ms (86.64×) | 130 ms (84.90×) | +| Metal | dots (35.3s) | 343 ms (103.09×) | 349 ms (101.11×) | +| CPU | jfk (11.0s) | 1.58 s (6.97×) | 1.45 s (7.58×) | +| CPU | dots (35.3s) | 4.89 s (7.22×) | 4.44 s (7.95×) | + macOS 26.4, transcribe.cpp `de05c43`. -### Apple M4 - -Mean over 5 iterations after 2 warmups. Q8_0. - -| Backend | Sample | Q8_0 | -| ------- | ----------- | ----------------: | -| Metal | jfk (11.0s) | 954 ms (12×) | -| CPU | jfk (11.0s) | 2.45 s (4×) | - -macOS 26.1, transcribe.cpp `275332d`. - ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) Mean over 3 iterations after 1 warmup. -**Vulkan (RADV)** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 3.58 s (3.1×) | 3.84 s (2.9×) | -| dots (35.3s) | 11.79 s (3.0×) | 13.08 s (2.7×) | - -**CPU** - -| Sample | Q4_K_M | Q8_0 | -| ------------ | ---------------: | ---------------: | -| jfk (11.0s) | 5.58 s (2.0×) | 7.19 s (1.5×) | -| dots (35.3s) | 19.49 s (1.8×) | 25.50 s (1.4×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 2.41 s (4.56×) | 2.44 s (4.51×) | +| Vulkan | dots (35.3s) | 6.52 s (5.42×) | 6.61 s (5.34×) | +| CPU | jfk (11.0s) | 5.55 s (1.98×) | 4.55 s (2.42×) | +| CPU | dots (35.3s) | 17.56 s (2.01×) | 14.51 s (2.43×) | + Linux 6.18 (Fedora 43), transcribe.cpp `dbe5814`. diff --git a/docs/models/medasr.md b/docs/models/medasr.md index b39103ed..38a57347 100644 --- a/docs/models/medasr.md +++ b/docs/models/medasr.md @@ -57,27 +57,31 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------- | ------------: | ------------: | -| Metal | jfk (11.0 s) | 38 ms (290×) | 44 ms (248×) | -| Metal | dots (35.3 s) | 84 ms (419×) | 90 ms (394×) | -| CPU | jfk (11.0 s) | 161 ms (68×) | 180 ms (61×) | -| CPU | dots (35.3 s) | 558 ms (63×) | 623 ms (57×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------: | -----------: | +| Metal | jfk (11.0s) | 38 ms (290×) | 44 ms (248×) | +| Metal | dots (35.3s) | 84 ms (419×) | 90 ms (394×) | +| CPU | jfk (11.0s) | 161 ms (68×) | 180 ms (61×) | +| CPU | dots (35.3s) | 558 ms (63×) | 623 ms (57×) | + macOS 26.5, transcribe.cpp `8139a4b`. Metal device: `Apple M4 Max`. Mel pipeline uses the shared `MelFrontend` (Accelerate vDSP fp64 FFT + cblas_sgemm); encoder is the conformer + RoPE + BatchNorm-conv graph in `src/arch/medasr/encoder.cpp`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------- | ------------: | ------------: | -| Vulkan | jfk (11.0 s) | 163 ms (68×) | 174 ms (63×) | -| Vulkan | dots (35.3 s) | 481 ms (74×) | 495 ms (71×) | -| CPU | jfk (11.0 s) | 543 ms (20×) | 488 ms (23×) | -| CPU | dots (35.3 s) | 1.84 s (19×) | 1.63 s (22×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 161 ms (68.17×) | 173 ms (63.63×) | +| Vulkan | dots (35.3s) | 479 ms (73.76×) | 493 ms (71.61×) | +| CPU | jfk (11.0s) | 542 ms (20.30×) | 488 ms (22.56×) | +| CPU | dots (35.3s) | 1.84 s (19.21×) | 1.63 s (21.73×) | + Fedora 43, transcribe.cpp `79d139a`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/moonshine-base.md b/docs/models/moonshine-base.md index 73894a5b..c48b3d77 100644 --- a/docs/models/moonshine-base.md +++ b/docs/models/moonshine-base.md @@ -66,29 +66,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 5 iterations after 2 warmups), +Cells are compute latency (mel + encode + decode; mean over 5 iterations after 2 warmups), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | -| ------- | ------------ | -----------: | -| Metal | jfk (11.0s) | 96 ms (115×) | -| Metal | dots (35.3s) | 811 ms (44×) | -| CPU | jfk (11.0s) | 98 ms (112×) | -| CPU | dots (35.3s) | 721 ms (49×) | + +| Backend | Sample | Q8_0 | +| ------- | ------------ | --------------: | +| Metal | jfk (11.0s) | 96 ms (115×) | +| Metal | dots (35.3s) | 811 ms (44×) | +| CPU | jfk (11.0s) | 96 ms (114.16×) | +| CPU | dots (35.3s) | 719 ms (49.16×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | -| ------- | ------------ | ------------: | -| Vulkan | jfk (11.0s) | 218 ms (50×) | -| Vulkan | dots (35.3s) | 1.85 s (19×) | -| CPU | jfk (11.0s) | 331 ms (33×) | -| CPU | dots (35.3s) | 3.17 s (11×) | + +| Backend | Sample | Q8_0 | +| ------- | ------------ | --------------: | +| Vulkan | jfk (11.0s) | 218 ms (50×) | +| Vulkan | dots (35.3s) | 1.85 s (19×) | +| CPU | jfk (11.0s) | 331 ms (33.22×) | +| CPU | dots (35.3s) | 3.17 s (11.15×) | + Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/moonshine-streaming-medium.md b/docs/models/moonshine-streaming-medium.md index 190a905a..885b8a08 100644 --- a/docs/models/moonshine-streaming-medium.md +++ b/docs/models/moonshine-streaming-medium.md @@ -78,29 +78,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 5 iterations after 2 warmups), +Cells are compute latency (mel + encode + decode; mean over 5 iterations after 2 warmups), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | -| ------- | ------------ | -----------: | -| Metal | jfk (11.0s) | 124 ms (89×) | -| Metal | dots (35.3s) | 952 ms (37×) | -| CPU | jfk (11.0s) | 281 ms (39×) | -| CPU | dots (35.3s) | 1.11 s (32×) | + +| Backend | Sample | Q8_0 | +| ------- | ------------ | --------------: | +| Metal | jfk (11.0s) | 124 ms (88.69×) | +| Metal | dots (35.3s) | 952 ms (37.11×) | +| CPU | jfk (11.0s) | 281 ms (39.11×) | +| CPU | dots (35.3s) | 1.11 s (31.93×) | + macOS 26.4.1, transcribe.cpp `0d312ce`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | -| ------- | ------------ | ------------: | -| Vulkan | jfk (11.0s) | 570 ms (19×) | -| Vulkan | dots (35.3s) | 4.01 s (9×) | -| CPU | jfk (11.0s) | 1.07 s (10×) | -| CPU | dots (35.3s) | 6.50 s (5×) | + +| Backend | Sample | Q8_0 | +| ------- | ------------ | --------------: | +| Vulkan | jfk (11.0s) | 570 ms (19.31×) | +| Vulkan | dots (35.3s) | 4.01 s (8.80×) | +| CPU | jfk (11.0s) | 1.07 s (10.32×) | +| CPU | dots (35.3s) | 6.50 s (5×) | + Fedora 43, transcribe.cpp `f243f34`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/moonshine-streaming-small.md b/docs/models/moonshine-streaming-small.md index 323aac00..49a40e5e 100644 --- a/docs/models/moonshine-streaming-small.md +++ b/docs/models/moonshine-streaming-small.md @@ -60,29 +60,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 5 iterations after 2 warmups), +Cells are compute latency (mel + encode + decode; mean over 5 iterations after 2 warmups), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | -| ------- | ------------ | -----------: | -| Metal | jfk (11.0s) | 82 ms (134×) | -| Metal | dots (35.3s) | 612 ms (58×) | -| CPU | jfk (11.0s) | 174 ms (63×) | -| CPU | dots (35.3s) | 699 ms (51×) | + +| Backend | Sample | Q8_0 | +| ------- | ------------ | --------------: | +| Metal | jfk (11.0s) | 82 ms (133.58×) | +| Metal | dots (35.3s) | 612 ms (57.69×) | +| CPU | jfk (11.0s) | 174 ms (63.31×) | +| CPU | dots (35.3s) | 699 ms (50.55×) | + macOS 26.4.1, transcribe.cpp `0d312ce`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | -| ------- | ------------ | ------------: | -| Vulkan | jfk (11.0s) | 349 ms (32×) | -| Vulkan | dots (35.3s) | 2.38 s (15×) | -| CPU | jfk (11.0s) | 735 ms (15×) | -| CPU | dots (35.3s) | 4.00 s (9×) | + +| Backend | Sample | Q8_0 | +| ------- | ------------ | --------------: | +| Vulkan | jfk (11.0s) | 349 ms (31.53×) | +| Vulkan | dots (35.3s) | 2.38 s (14.84×) | +| CPU | jfk (11.0s) | 735 ms (14.97×) | +| CPU | dots (35.3s) | 4.00 s (8.83×) | + Fedora 43, transcribe.cpp `f243f34`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/moonshine-streaming-tiny.md b/docs/models/moonshine-streaming-tiny.md index babe08d8..944b8c00 100644 --- a/docs/models/moonshine-streaming-tiny.md +++ b/docs/models/moonshine-streaming-tiny.md @@ -78,29 +78,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 5 iterations after 2 warmups), +Cells are compute latency (mel + encode + decode; mean over 5 iterations after 2 warmups), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | -| ------- | ------------ | -----------: | -| Metal | jfk (11.0s) | 50 ms (218×) | -| Metal | dots (35.3s) | 355 ms (100×) | -| CPU | jfk (11.0s) | 44 ms (250×) | -| CPU | dots (35.3s) | 206 ms (172×) | + +| Backend | Sample | Q8_0 | +| ------- | ------------ | ---------------: | +| Metal | jfk (11.0s) | 50 ms (218.46×) | +| Metal | dots (35.3s) | 355 ms (99.53×) | +| CPU | jfk (11.0s) | 44 ms (249.57×) | +| CPU | dots (35.3s) | 206 ms (171.94×) | + macOS 26.4.1, transcribe.cpp `0d312ce`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | -| ------- | ------------ | ------------: | -| Vulkan | jfk (11.0s) | 140 ms (79×) | -| Vulkan | dots (35.3s) | 892 ms (40×) | -| CPU | jfk (11.0s) | 160 ms (69×) | -| CPU | dots (35.3s) | 882 ms (40×) | + +| Backend | Sample | Q8_0 | +| ------- | ------------ | --------------: | +| Vulkan | jfk (11.0s) | 139 ms (78.88×) | +| Vulkan | dots (35.3s) | 892 ms (39.61×) | +| CPU | jfk (11.0s) | 160 ms (68.67×) | +| CPU | dots (35.3s) | 882 ms (40.08×) | + Fedora 43, transcribe.cpp `f243f34`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/moonshine-tiny.md b/docs/models/moonshine-tiny.md index 1a5e5a93..5601fcea 100644 --- a/docs/models/moonshine-tiny.md +++ b/docs/models/moonshine-tiny.md @@ -64,29 +64,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 5 iterations after 2 warmups), +Cells are compute latency (mel + encode + decode; mean over 5 iterations after 2 warmups), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | -| ------- | ------------ | -----------: | -| Metal | jfk (11.0s) | 61 ms (180×) | -| Metal | dots (35.3s) | 478 ms (74×) | -| CPU | jfk (11.0s) | 52 ms (210×) | -| CPU | dots (35.3s) | 366 ms (97×) | + +| Backend | Sample | Q8_0 | +| ------- | ------------ | --------------: | +| Metal | jfk (11.0s) | 59 ms (187.76×) | +| Metal | dots (35.3s) | 478 ms (74×) | +| CPU | jfk (11.0s) | 52 ms (213.74×) | +| CPU | dots (35.3s) | 378 ms (93.50×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | -| ------- | ------------ | ------------: | -| Vulkan | jfk (11.0s) | 143 ms (77×) | -| Vulkan | dots (35.3s) | 1.02 s (35×) | -| CPU | jfk (11.0s) | 163 ms (68×) | -| CPU | dots (35.3s) | 1.53 s (23×) | + +| Backend | Sample | Q8_0 | +| ------- | ------------ | --------------: | +| Vulkan | jfk (11.0s) | 147 ms (74.82×) | +| Vulkan | dots (35.3s) | 1.02 s (35×) | +| CPU | jfk (11.0s) | 163 ms (67.58×) | +| CPU | dots (35.3s) | 1.53 s (23.12×) | + Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/moss-transcribe-diarize.md b/docs/models/moss-transcribe-diarize.md index a47bd7b9..49b2923d 100644 --- a/docs/models/moss-transcribe-diarize.md +++ b/docs/models/moss-transcribe-diarize.md @@ -97,29 +97,33 @@ CLI flags: ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | -------------: | | Metal | jfk (11.0s) | 388 ms (28.3×) | 369 ms (29.8×) | | Metal | dots (35.3s) | 1.27 s (27.8×) | 1.17 s (30.1×) | -| CPU | jfk (11.0s) | 2.06 s (5.3×) | 2.37 s (4.6×) | -| CPU | dots (35.3s) | 5.71 s (6.2×) | 5.84 s (6.0×) | +| CPU | jfk (11.0s) | 2.06 s (5.3×) | 2.37 s (4.6×) | +| CPU | dots (35.3s) | 5.71 s (6.2×) | 5.84 s (6×) | + macOS 26.5.1, transcribe.cpp `e745720`. ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 3.88 s (2.8×) | 3.68 s (3.0×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | -------------: | +| Vulkan | jfk (11.0s) | 3.88 s (2.8×) | 3.68 s (3×) | | Vulkan | dots (35.3s) | 11.38 s (3.1×) | 10.68 s (3.3×) | | CPU | jfk (11.0s) | 7.49 s (1.5×) | 7.06 s (1.6×) | | CPU | dots (35.3s) | 21.20 s (1.7×) | 19.22 s (1.8×) | + Fedora Linux 43, transcribe.cpp `e745720`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md index af19d1ed..d1f1bab8 100644 --- a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md +++ b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md @@ -111,29 +111,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 67 ms (164×) | 69 ms (159×) | -| Metal | dots (35.3s) | 184 ms (192×) | 185 ms (191×) | -| CPU | jfk (11.0s) | 310 ms (36×) | 307 ms (36×) | -| CPU | dots (35.3s) | 1.05 s (34×) | 1.03 s (34×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 66 ms (167.17×) | 68 ms (162.41×) | +| Metal | dots (35.3s) | 182 ms (194.69×) | 183 ms (192.82×) | +| CPU | jfk (11.0s) | 309 ms (35.60×) | 306 ms (35.95×) | +| CPU | dots (35.3s) | 1.05 s (33.68×) | 1.03 s (34.41×) | + macOS 26.5.1, transcribe.cpp `c55a09d`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 466 ms (24×) | 475 ms (23×) | -| Vulkan | dots (35.3s) | 1.36 s (26×) | 1.39 s (26×) | -| CPU | jfk (11.0s) | 751 ms (15×) | 816 ms (13×) | -| CPU | dots (35.3s) | 2.99 s (12×) | 3.12 s (11×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 458 ms (23.99×) | 466 ms (23.58×) | +| Vulkan | dots (35.3s) | 1.34 s (26.32×) | 1.38 s (25.63×) | +| CPU | jfk (11.0s) | 750 ms (14.68×) | 814 ms (13.51×) | +| CPU | dots (35.3s) | 2.99 s (11.81×) | 3.12 s (11.34×) | + Fedora 43, transcribe.cpp `c55a09d`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/nemotron-3.5-asr-streaming-0.6b.md b/docs/models/nemotron-3.5-asr-streaming-0.6b.md index 610270f1..599740ba 100644 --- a/docs/models/nemotron-3.5-asr-streaming-0.6b.md +++ b/docs/models/nemotron-3.5-asr-streaming-0.6b.md @@ -107,7 +107,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. @@ -118,24 +118,28 @@ are out-of-the-box numbers with no tuning. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 113 ms (98×) | 113 ms (98×) | -| Metal | dots (35.3s) | 361 ms (98×) | 368 ms (96×) | -| CPU | jfk (11.0s) | 367 ms (30×) | 362 ms (30×) | -| CPU | dots (35.3s) | 1.28 s (28×) | 1.25 s (28×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 112 ms (98.65×) | 112 ms (98.69×) | +| Metal | dots (35.3s) | 359 ms (98.39×) | 366 ms (96.54×) | +| CPU | jfk (11.0s) | 366 ms (30.07×) | 362 ms (30.42×) | +| CPU | dots (35.3s) | 1.27 s (27.72×) | 1.25 s (28.31×) | + macOS 26.5 (Darwin 25.5.0), transcribe.cpp `d9708f1`. Metal device: Apple M4 Max (`MTLGPUFamilyApple9`). ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 773 ms (14×) | 783 ms (14×) | -| Vulkan | dots (35.3s) | 2.37 s (15×) | 2.37 s (15×) | -| CPU | jfk (11.0s) | 1.37 s (8×) | 1.09 s (10×) | -| CPU | dots (35.3s) | 4.76 s (7×) | 4.17 s (8×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 769 ms (14.31×) | 780 ms (14.11×) | +| Vulkan | dots (35.3s) | 2.37 s (14.93×) | 2.37 s (14.92×) | +| CPU | jfk (11.0s) | 1.36 s (8.06×) | 1.09 s (10.11×) | +| CPU | dots (35.3s) | 4.76 s (7×) | 4.17 s (8×) | + Fedora 43, transcribe.cpp `ef35659`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/nemotron-speech-streaming-en-0.6b.md b/docs/models/nemotron-speech-streaming-en-0.6b.md index c107be00..72f0bbb5 100644 --- a/docs/models/nemotron-speech-streaming-en-0.6b.md +++ b/docs/models/nemotron-speech-streaming-en-0.6b.md @@ -97,29 +97,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 73 ms (151×) | 73 ms (151×) | -| Metal | dots (35.3s) | 224 ms (158×) | 221 ms (160×) | -| CPU | jfk (11.0s) | 329 ms (33×) | 330 ms (33×) | -| CPU | dots (35.3s) | 1.12 s (31×) | 1.12 s (31×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 73 ms (151×) | 73 ms (151×) | +| Metal | dots (35.3s) | 224 ms (158×) | 221 ms (160×) | +| CPU | jfk (11.0s) | 346 ms (31.77×) | 345 ms (31.89×) | +| CPU | dots (35.3s) | 1.18 s (30.02×) | 1.16 s (30.52×) | + macOS 26.4.1, transcribe.cpp `12f1076`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 812 ms (14×) | 813 ms (14×) | -| Vulkan | dots (35.3s) | 2.93 s (12×) | 2.98 s (12×) | -| CPU | jfk (11.0s) | 1.39 s (8×) | 1.22 s (9×) | -| CPU | dots (35.3s) | 5.21 s (7×) | 4.76 s (7×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 808 ms (13.61×) | 810 ms (13.59×) | +| Vulkan | dots (35.3s) | 2.92 s (12.08×) | 2.98 s (11.87×) | +| CPU | jfk (11.0s) | 1.39 s (7.94×) | 1.22 s (8.99×) | +| CPU | dots (35.3s) | 5.21 s (6.78×) | 4.76 s (7×) | + Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/parakeet-ctc-0.6b.md b/docs/models/parakeet-ctc-0.6b.md index cbc49641..e7bdba6a 100644 --- a/docs/models/parakeet-ctc-0.6b.md +++ b/docs/models/parakeet-ctc-0.6b.md @@ -57,29 +57,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 58 ms (191×) | 59 ms (185×) | -| Metal | dots (35.3s) | 143 ms (246×) | 145 ms (244×) | -| CPU | jfk (11.0s) | 356 ms (31×) | 298 ms (37×) | -| CPU | dots (35.3s) | 1.19 s (30×) | 1.00 s (35×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 56 ms (198.18×) | 57 ms (191.56×) | +| Metal | dots (35.3s) | 141 ms (251.18×) | 142 ms (248.04×) | +| CPU | jfk (11.0s) | 355 ms (30.98×) | 297 ms (37.07×) | +| CPU | dots (35.3s) | 1.19 s (29.64×) | 999 ms (35.35×) | + macOS 26.4.1, transcribe.cpp `a6c097e`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 520 ms (21×) | 537 ms (20×) | -| Vulkan | dots (35.3s) | 1.50 s (24×) | 1.50 s (24×) | -| CPU | jfk (11.0s) | 1.07 s (10×) | 863 ms (13×) | -| CPU | dots (35.3s) | 3.67 s (10×) | 3.14 s (11×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 520 ms (21.14×) | 537 ms (20.47×) | +| Vulkan | dots (35.3s) | 1.50 s (23.61×) | 1.50 s (23.58×) | +| CPU | jfk (11.0s) | 1.07 s (10.29×) | 863 ms (12.74×) | +| CPU | dots (35.3s) | 3.67 s (9.64×) | 3.14 s (11.25×) | + Fedora 43, transcribe.cpp `57997dc`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/parakeet-ctc-1.1b.md b/docs/models/parakeet-ctc-1.1b.md index da1bdd9e..23b58db3 100644 --- a/docs/models/parakeet-ctc-1.1b.md +++ b/docs/models/parakeet-ctc-1.1b.md @@ -56,29 +56,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 91 ms (121×) | 93 ms (118×) | -| Metal | dots (35.3s) | 224 ms (158×) | 224 ms (158×) | -| CPU | jfk (11.0s) | 602 ms (18×) | 501 ms (22×) | -| CPU | dots (35.3s) | 2.04 s (17×) | 1.70 s (21×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 88 ms (125.48×) | 90 ms (121.85×) | +| Metal | dots (35.3s) | 221 ms (160.02×) | 220 ms (160.38×) | +| CPU | jfk (11.0s) | 601 ms (18.30×) | 500 ms (22.01×) | +| CPU | dots (35.3s) | 2.04 s (17.30×) | 1.70 s (20.83×) | + macOS 26.4.1, transcribe.cpp `a6c097e`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 825 ms (13×) | 822 ms (13×) | -| Vulkan | dots (35.3s) | 2.34 s (15×) | 2.33 s (15×) | -| CPU | jfk (11.0s) | 1.75 s (6×) | 1.38 s (8×) | -| CPU | dots (35.3s) | 6.08 s (6×) | 5.12 s (7×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 826 ms (13.32×) | 823 ms (13.37×) | +| Vulkan | dots (35.3s) | 2.34 s (15.13×) | 2.33 s (15.19×) | +| CPU | jfk (11.0s) | 1.75 s (6.27×) | 1.38 s (7.99×) | +| CPU | dots (35.3s) | 6.08 s (5.81×) | 5.12 s (6.90×) | + Fedora 43, transcribe.cpp `57997dc`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/parakeet-rnnt-0.6b.md b/docs/models/parakeet-rnnt-0.6b.md index 7210593b..2397f737 100644 --- a/docs/models/parakeet-rnnt-0.6b.md +++ b/docs/models/parakeet-rnnt-0.6b.md @@ -58,29 +58,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. ### Apple M4 Max + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ------------: | ------------: | | Metal | jfk (11.0s) | 64 ms (173×) | 65 ms (170×) | | Metal | dots (35.3s) | 178 ms (198×) | 181 ms (196×) | | CPU | jfk (11.0s) | 360 ms (31×) | 302 ms (36×) | | CPU | dots (35.3s) | 1.22 s (29×) | 1.03 s (34×) | + macOS 26.4.1, transcribe.cpp `12f1076`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 742 ms (15×) | 754 ms (15×) | -| Vulkan | dots (35.3s) | 2.55 s (14×) | 2.59 s (14×) | -| CPU | jfk (11.0s) | 1.24 s (9×) | 1.07 s (10×) | -| CPU | dots (35.3s) | 4.71 s (7×) | 4.14 s (9×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 738 ms (14.90×) | 751 ms (14.65×) | +| Vulkan | dots (35.3s) | 2.54 s (13.88×) | 2.59 s (13.67×) | +| CPU | jfk (11.0s) | 1.24 s (8.86×) | 1.07 s (10.32×) | +| CPU | dots (35.3s) | 4.71 s (7×) | 4.14 s (9×) | + Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/parakeet-rnnt-1.1b.md b/docs/models/parakeet-rnnt-1.1b.md index f4fa195b..574d4497 100644 --- a/docs/models/parakeet-rnnt-1.1b.md +++ b/docs/models/parakeet-rnnt-1.1b.md @@ -56,29 +56,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 96 ms (114×) | 97 ms (114×) | -| Metal | dots (35.3s) | 258 ms (137×) | 265 ms (133×) | -| CPU | jfk (11.0s) | 606 ms (18×) | 506 ms (22×) | -| CPU | dots (35.3s) | 2.05 s (17×) | 1.72 s (20×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ------------: | --------------: | +| Metal | jfk (11.0s) | 96 ms (114×) | 97 ms (114×) | +| Metal | dots (35.3s) | 258 ms (137×) | 265 ms (133×) | +| CPU | jfk (11.0s) | 606 ms (18×) | 506 ms (22×) | +| CPU | dots (35.3s) | 2.05 s (17×) | 1.86 s (19.01×) | + macOS 26.4.1, transcribe.cpp `12f1076`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 1.02 s (11×) | 1.04 s (11×) | -| Vulkan | dots (35.3s) | 3.35 s (11×) | 3.31 s (11×) | -| CPU | jfk (11.0s) | 1.93 s (6×) | 1.58 s (7×) | -| CPU | dots (35.3s) | 7.12 s (5×) | 6.18 s (6×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 1.01 s (10.85×) | 1.04 s (10.60×) | +| Vulkan | dots (35.3s) | 3.34 s (10.58×) | 3.30 s (10.70×) | +| CPU | jfk (11.0s) | 1.93 s (5.70×) | 1.58 s (6.98×) | +| CPU | dots (35.3s) | 7.12 s (4.96×) | 6.18 s (5.72×) | + Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/parakeet-tdt-0.6b-v2.md b/docs/models/parakeet-tdt-0.6b-v2.md index 34586cb6..25bb82d2 100644 --- a/docs/models/parakeet-tdt-0.6b-v2.md +++ b/docs/models/parakeet-tdt-0.6b-v2.md @@ -56,29 +56,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ------------: | ------------: | | Metal | jfk (11.0s) | 68 ms (163×) | 67 ms (163×) | | Metal | dots (35.3s) | 189 ms (187×) | 193 ms (183×) | | CPU | jfk (11.0s) | 371 ms (30×) | 312 ms (35×) | | CPU | dots (35.3s) | 1.26 s (28×) | 1.07 s (33×) | + macOS 26.4.1, transcribe.cpp `12f1076`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 673 ms (16×) | 685 ms (16×) | -| Vulkan | dots (35.3s) | 2.45 s (14×) | 2.44 s (14×) | -| CPU | jfk (11.0s) | 1.23 s (9×) | 1.05 s (10×) | -| CPU | dots (35.3s) | 4.75 s (7×) | 4.14 s (9×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 670 ms (16.42×) | 682 ms (16.13×) | +| Vulkan | dots (35.3s) | 2.45 s (14.44×) | 2.44 s (14.51×) | +| CPU | jfk (11.0s) | 1.23 s (8.97×) | 1.05 s (10.51×) | +| CPU | dots (35.3s) | 4.75 s (7×) | 4.14 s (9×) | + Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/parakeet-tdt-0.6b-v3.md b/docs/models/parakeet-tdt-0.6b-v3.md index 94bf005f..042d12be 100644 --- a/docs/models/parakeet-tdt-0.6b-v3.md +++ b/docs/models/parakeet-tdt-0.6b-v3.md @@ -58,29 +58,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 74 ms (149×) | 76 ms (146×) | -| Metal | dots (35.3s) | 231 ms (153×) | 230 ms (153×) | -| CPU | jfk (11.0s) | 381 ms (29×) | 323 ms (34×) | -| CPU | dots (35.3s) | 1.29 s (27×) | 1.11 s (32×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 74 ms (149.59×) | 75 ms (146.35×) | +| Metal | dots (35.3s) | 224 ms (157.78×) | 224 ms (157.68×) | +| CPU | jfk (11.0s) | 386 ms (28.53×) | 323 ms (34×) | +| CPU | dots (35.3s) | 1.31 s (26.98×) | 1.11 s (32×) | + macOS 26.4.1, transcribe.cpp `12f1076`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 858 ms (13×) | 868 ms (13×) | -| Vulkan | dots (35.3s) | 3.07 s (12×) | 3.10 s (11×) | -| CPU | jfk (11.0s) | 1.41 s (8×) | 1.22 s (9×) | -| CPU | dots (35.3s) | 5.34 s (7×) | 4.78 s (7×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 854 ms (12.88×) | 864 ms (12.72×) | +| Vulkan | dots (35.3s) | 3.06 s (11.54×) | 3.10 s (11.42×) | +| CPU | jfk (11.0s) | 1.41 s (7.80×) | 1.22 s (9.01×) | +| CPU | dots (35.3s) | 5.34 s (7×) | 4.78 s (7×) | + Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/parakeet-tdt-1.1b.md b/docs/models/parakeet-tdt-1.1b.md index a6137c0f..828cd4dc 100644 --- a/docs/models/parakeet-tdt-1.1b.md +++ b/docs/models/parakeet-tdt-1.1b.md @@ -57,29 +57,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 98 ms (112×) | 97 ms (113×) | -| Metal | dots (35.3s) | 254 ms (139×) | 255 ms (139×) | -| CPU | jfk (11.0s) | 608 ms (18×) | 505 ms (22×) | -| CPU | dots (35.3s) | 2.04 s (17×) | 1.73 s (20×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 94 ms (116.36×) | 97 ms (113.42×) | +| Metal | dots (35.3s) | 255 ms (138.52×) | 254 ms (139.09×) | +| CPU | jfk (11.0s) | 608 ms (18×) | 505 ms (22×) | +| CPU | dots (35.3s) | 2.04 s (17×) | 1.73 s (20×) | + macOS 26.4.1, transcribe.cpp `12f1076`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 966 ms (11×) | 942 ms (12×) | -| Vulkan | dots (35.3s) | 3.03 s (12×) | 3.00 s (12×) | -| CPU | jfk (11.0s) | 1.92 s (6×) | 1.49 s (7×) | -| CPU | dots (35.3s) | 6.82 s (5×) | 5.94 s (6×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 961 ms (11.45×) | 936 ms (11.75×) | +| Vulkan | dots (35.3s) | 3.02 s (11.70×) | 2.99 s (11.80×) | +| CPU | jfk (11.0s) | 1.92 s (5.74×) | 1.49 s (7×) | +| CPU | dots (35.3s) | 6.81 s (5.19×) | 5.93 s (5.96×) | + Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/parakeet-tdt_ctc-1.1b.md b/docs/models/parakeet-tdt_ctc-1.1b.md index 9e2812c6..bc8bb1e2 100644 --- a/docs/models/parakeet-tdt_ctc-1.1b.md +++ b/docs/models/parakeet-tdt_ctc-1.1b.md @@ -56,29 +56,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 97 ms (113×) | 101 ms (109×) | -| Metal | dots (35.3s) | 256 ms (138×) | 258 ms (137×) | -| CPU | jfk (11.0s) | 603 ms (18×) | 510 ms (22×) | -| CPU | dots (35.3s) | 1.87 s (19×) | 1.55 s (23×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 100 ms (109.76×) | 103 ms (106.82×) | +| Metal | dots (35.3s) | 256 ms (138×) | 269 ms (131.31×) | +| CPU | jfk (11.0s) | 625 ms (17.60×) | 514 ms (21.41×) | +| CPU | dots (35.3s) | 1.87 s (19×) | 1.61 s (21.89×) | + macOS 26.4.1, transcribe.cpp `12f1076`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 979 ms (11×) | 993 ms (11×) | -| Vulkan | dots (35.3s) | 3.14 s (11×) | 3.14 s (11×) | -| CPU | jfk (11.0s) | 1.88 s (6×) | 1.53 s (7×) | -| CPU | dots (35.3s) | 6.54 s (5×) | 5.63 s (6×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 973 ms (11.30×) | 988 ms (11.14×) | +| Vulkan | dots (35.3s) | 3.13 s (11.29×) | 3.13 s (11.29×) | +| CPU | jfk (11.0s) | 1.88 s (5.85×) | 1.53 s (7.18×) | +| CPU | dots (35.3s) | 6.54 s (5×) | 5.62 s (6.28×) | + Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/parakeet-tdt_ctc-110m.md b/docs/models/parakeet-tdt_ctc-110m.md index 4592f5ed..61ae9f34 100644 --- a/docs/models/parakeet-tdt_ctc-110m.md +++ b/docs/models/parakeet-tdt_ctc-110m.md @@ -54,29 +54,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 34 ms (327×) | 35 ms (315×) | -| Metal | dots (35.3s) | 96 ms (368×) | 96 ms (367×) | -| CPU | jfk (11.0s) | 91 ms (121×) | 87 ms (126×) | -| CPU | dots (35.3s) | 318 ms (111×) | 306 ms (116×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 34 ms (320.03×) | 35 ms (315×) | +| Metal | dots (35.3s) | 99 ms (358.29×) | 98 ms (360.02×) | +| CPU | jfk (11.0s) | 94 ms (117.37×) | 88 ms (124.33×) | +| CPU | dots (35.3s) | 325 ms (108.62×) | 311 ms (113.49×) | + macOS 26.4.1, transcribe.cpp `12f1076`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 317 ms (35×) | 324 ms (34×) | -| Vulkan | dots (35.3s) | 1.18 s (30×) | 1.20 s (29×) | -| CPU | jfk (11.0s) | 422 ms (26×) | 395 ms (28×) | -| CPU | dots (35.3s) | 1.70 s (21×) | 1.64 s (22×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 315 ms (34.94×) | 322 ms (34.22×) | +| Vulkan | dots (35.3s) | 1.18 s (30.00×) | 1.19 s (29.59×) | +| CPU | jfk (11.0s) | 420 ms (26.16×) | 394 ms (27.89×) | +| CPU | dots (35.3s) | 1.70 s (20.76×) | 1.64 s (21.53×) | + Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/parakeet-unified-en-0.6b.md b/docs/models/parakeet-unified-en-0.6b.md index 0d3f49ce..18ac11c6 100644 --- a/docs/models/parakeet-unified-en-0.6b.md +++ b/docs/models/parakeet-unified-en-0.6b.md @@ -70,29 +70,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 69 ms (158×) | 71 ms (155×) | -| Metal | dots (35.3s) | 210 ms (168×) | 209 ms (169×) | -| CPU | jfk (11.0s) | 375 ms (29×) | 318 ms (35×) | -| CPU | dots (35.3s) | 1.27 s (28×) | 1.09 s (32×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 69 ms (158.00×) | 71 ms (155.00×) | +| Metal | dots (35.3s) | 210 ms (168.00×) | 209 ms (169.00×) | +| CPU | jfk (11.0s) | 375 ms (29.00×) | 318 ms (35.00×) | +| CPU | dots (35.3s) | 1.27 s (28.00×) | 1.09 s (32.00×) | + macOS 26.4.1, transcribe.cpp `12f1076`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 839 ms (13×) | 848 ms (13×) | -| Vulkan | dots (35.3s) | 3.03 s (12×) | 3.05 s (12×) | -| CPU | jfk (11.0s) | 1.35 s (8×) | 1.18 s (9×) | -| CPU | dots (35.3s) | 5.22 s (7×) | 4.66 s (8×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 835 ms (13.18×) | 844 ms (13.03×) | +| Vulkan | dots (35.3s) | 3.03 s (11.67×) | 3.04 s (11.62×) | +| CPU | jfk (11.0s) | 1.35 s (8.17×) | 1.18 s (9.33×) | +| CPU | dots (35.3s) | 5.21 s (6.78×) | 4.66 s (7.58×) | + Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/qwen3-asr-0.6b.md b/docs/models/qwen3-asr-0.6b.md index 4bd8c8f3..5b05fe46 100644 --- a/docs/models/qwen3-asr-0.6b.md +++ b/docs/models/qwen3-asr-0.6b.md @@ -73,29 +73,33 @@ chat template is tracked as follow-up work; see the family note at ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 155 ms (71×) | 142 ms (77×) | -| Metal | dots (35.3s) | 597 ms (59×) | 527 ms (67×) | -| CPU | jfk (11.0s) | 660 ms (17×) | 588 ms (19×) | -| CPU | dots (35.3s) | 2.26 s (16×) | 2.10 s (17×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------: | -----------: | +| Metal | jfk (11.0s) | 155 ms (71×) | 142 ms (77×) | +| Metal | dots (35.3s) | 597 ms (59×) | 527 ms (67×) | +| CPU | jfk (11.0s) | 660 ms (17×) | 588 ms (19×) | +| CPU | dots (35.3s) | 2.26 s (16×) | 2.10 s (17×) | + macOS 26.3.1, transcribe.cpp `0c88a71`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 1.27 s (8.7×) | 1.08 s (10.1×) | -| Vulkan | dots (35.3s) | 4.87 s (7.3×) | 3.99 s (8.9×) | -| CPU | jfk (11.0s) | 2.37 s (4.6×) | 1.92 s (5.7×) | -| CPU | dots (35.3s) | 8.61 s (4.1×) | 7.34 s (4.8×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | --------------: | +| Vulkan | jfk (11.0s) | 1.27 s (8.66×) | 1.08 s (10.16×) | +| Vulkan | dots (35.3s) | 4.87 s (7.26×) | 3.99 s (8.86×) | +| CPU | jfk (11.0s) | 2.37 s (4.65×) | 1.92 s (5.73×) | +| CPU | dots (35.3s) | 8.60 s (4.11×) | 7.34 s (4.82×) | + Fedora 43, transcribe.cpp `3d16f74`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/qwen3-asr-1.7b.md b/docs/models/qwen3-asr-1.7b.md index 453cf801..8c9e9e01 100644 --- a/docs/models/qwen3-asr-1.7b.md +++ b/docs/models/qwen3-asr-1.7b.md @@ -63,29 +63,33 @@ the rationale and the planned follow-up. ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 256 ms (43×) | 213 ms (52×) | -| Metal | dots (35.3s) | 978 ms (36×) | 803 ms (44×) | -| CPU | jfk (11.0s) | 1.40 s (8×) | 1.10 s (10×) | -| CPU | dots (35.3s) | 4.46 s (8×) | 4.04 s (9×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------: | -----------: | +| Metal | jfk (11.0s) | 256 ms (43×) | 213 ms (52×) | +| Metal | dots (35.3s) | 978 ms (36×) | 803 ms (44×) | +| CPU | jfk (11.0s) | 1.40 s (8×) | 1.10 s (10×) | +| CPU | dots (35.3s) | 4.46 s (8×) | 4.04 s (9×) | + macOS 26.3.1, transcribe.cpp `0c88a71`. ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 2.66 s (4.1×) | 2.29 s (4.8×) | -| Vulkan | dots (35.3s) | 9.87 s (3.6×) | 8.37 s (4.2×) | -| CPU | jfk (11.0s) | 5.19 s (2.1×) | 3.58 s (3.1×) | -| CPU | dots (35.3s) | 18.53 s (1.9×) | 12.93 s (2.7×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 2.66 s (4.13×) | 2.29 s (4.81×) | +| Vulkan | dots (35.3s) | 9.87 s (3.58×) | 8.36 s (4.22×) | +| CPU | jfk (11.0s) | 5.19 s (2.12×) | 3.57 s (3.08×) | +| CPU | dots (35.3s) | 18.52 s (1.91×) | 12.93 s (2.73×) | + Fedora 43, transcribe.cpp `3d16f74`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/sensevoice-small.md b/docs/models/sensevoice-small.md index b95c0140..47efc1c4 100644 --- a/docs/models/sensevoice-small.md +++ b/docs/models/sensevoice-small.md @@ -96,29 +96,33 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 42 ms (260×) | 44 ms (250×) | -| Metal | dots (35.3s) | 111 ms (319×) | 137 ms (258×) | -| CPU | jfk (11.0s) | 208 ms (53×) | 213 ms (52×) | -| CPU | dots (35.3s) | 700 ms (50×) | 727 ms (49×) | +| Metal | jfk (11.0s) | 42 ms (260×) | 44 ms (250×) | +| Metal | dots (35.3s) | 111 ms (319×) | 137 ms (258×) | +| CPU | jfk (11.0s) | 208 ms (53×) | 213 ms (52×) | +| CPU | dots (35.3s) | 700 ms (50×) | 727 ms (49×) | + macOS 26.4.1, transcribe.cpp `811fe2a`. ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 329 ms (33×) | 332 ms (33×) | -| Vulkan | dots (35.3s) | 1.11 s (32×) | 1.12 s (31×) | -| CPU | jfk (11.0s) | 687 ms (16×) | 590 ms (19×) | -| CPU | dots (35.3s) | 2.31 s (15×) | 2.03 s (17×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 313 ms (35.18×) | 317 ms (34.74×) | +| Vulkan | dots (35.3s) | 1.08 s (32.70×) | 1.10 s (32.25×) | +| CPU | jfk (11.0s) | 678 ms (16.22×) | 582 ms (18.91×) | +| CPU | dots (35.3s) | 2.28 s (15.49×) | 2.01 s (17.61×) | + Fedora 43, transcribe.cpp `8635bd1`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/voxtral-mini-3b-2507.md b/docs/models/voxtral-mini-3b-2507.md index c71c6360..f39b64df 100644 --- a/docs/models/voxtral-mini-3b-2507.md +++ b/docs/models/voxtral-mini-3b-2507.md @@ -83,27 +83,31 @@ CLI flags: ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | | Metal | jfk (11.0s) | 727.3 ms (15.1×) | 656.8 ms (16.7×) | | Metal | dots (35.3s) | 2.40 s (14.7×) | 1.90 s (18.6×) | -| CPU | jfk (11.0s) | 6.06 s (1.8×) | 6.76 s (1.6×) | -| CPU | dots (35.3s) | 16.60 s (2.1×) | 15.31 s (2.3×) | +| CPU | jfk (11.0s) | 6.06 s (1.8×) | 6.76 s (1.6×) | +| CPU | dots (35.3s) | 16.60 s (2.1×) | 15.31 s (2.3×) | + ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Vulkan | jfk (11.0s) | 9.57 s (1.2×) | 9.37 s (1.2×) | -| Vulkan | dots (35.3s) | 26.49 s (1.3×) | 23.82 s (1.5×) | -| CPU | jfk (11.0s) | 26.15 s (0.4×) | 19.39 s (0.6×) | -| CPU | dots (35.3s) | 63.96 s (0.6×) | 45.92 s (0.8×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 9.57 s (1.15×) | 9.37 s (1.17×) | +| Vulkan | dots (35.3s) | 26.49 s (1.33×) | 23.82 s (1.48×) | +| CPU | jfk (11.0s) | 26.15 s (0.4×) | 19.39 s (0.6×) | +| CPU | dots (35.3s) | 63.96 s (0.6×) | 45.92 s (0.77×) | + Fedora Linux 43, transcribe.cpp `91af262`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/voxtral-realtime.md b/docs/models/voxtral-realtime.md index d1bdce8a..f3fb0e0b 100644 --- a/docs/models/voxtral-realtime.md +++ b/docs/models/voxtral-realtime.md @@ -90,30 +90,34 @@ CLI flags: ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with +Cells are compute latency (mel + encode + decode) (mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Measured on the offline path at the family-default `K=1` speculative decoding. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | --------------: | --------------: | -| Metal | jfk (11.0s) | 1.22 s (9.0×) | 1.14 s (9.7×) | -| Metal | dots (35.3s) | 4.34 s (8.1×) | 3.91 s (9.0×) | -| CPU | jfk (11.0s) | 4.43 s (2.5×) | 4.69 s (2.3×) | -| CPU | dots (35.3s) | 13.65 s (2.6×) | 13.12 s (2.7×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | -------------: | +| Metal | jfk (11.0s) | 1.22 s (9×) | 1.14 s (9.7×) | +| Metal | dots (35.3s) | 4.34 s (8.1×) | 3.91 s (9×) | +| CPU | jfk (11.0s) | 4.43 s (2.5×) | 4.69 s (2.3×) | +| CPU | dots (35.3s) | 13.65 s (2.6×) | 13.12 s (2.7×) | + macOS 15, transcribe.cpp `483c122`. Metal device: Apple M4 Max. ### AMD Ryzen 7 4750U Pro + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 12.62 s (0.87×) | 10.97 s (1.00×) | -| Vulkan | dots (35.3s) | 39.29 s (0.90×) | 33.51 s (1.05×) | -| CPU | jfk (11.0s) | 19.54 s (0.56×) | 13.80 s (0.80×) | +| Vulkan | jfk (11.0s) | 12.62 s (0.87×) | 10.97 s (1×) | +| Vulkan | dots (35.3s) | 39.29 s (0.9×) | 33.51 s (1.05×) | +| CPU | jfk (11.0s) | 19.54 s (0.56×) | 13.80 s (0.8×) | | CPU | dots (35.3s) | 58.00 s (0.61×) | 41.54 s (0.85×) | + Fedora 43, transcribe.cpp `483c122`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/voxtral-small-24b-2507.md b/docs/models/voxtral-small-24b-2507.md index 2cfdb0c4..9c7f4611 100644 --- a/docs/models/voxtral-small-24b-2507.md +++ b/docs/models/voxtral-small-24b-2507.md @@ -89,16 +89,18 @@ CLI flags: ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 3.36 s (3.3×) | 2.62 s (4.2×) | -| Metal | dots (35.3s) | 11.20 s (3.2×) | 8.95 s (3.9×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | ------------: | +| Metal | jfk (11.0s) | 3.36 s (3.3×) | 2.62 s (4.2×) | +| Metal | dots (35.3s) | 11.20 s (3.2×) | 8.95 s (3.9×) | + A 24B is a GPU-class model; on Apple Silicon it runs at **~3–4× realtime** on Metal (the 3B sibling is ~15–18×). CPU is impractical at this size and is diff --git a/docs/models/whisper-base.en.md b/docs/models/whisper-base.en.md index dd095174..f4d76fe1 100644 --- a/docs/models/whisper-base.en.md +++ b/docs/models/whisper-base.en.md @@ -52,19 +52,21 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as model size grows; the encoder is only run once per 30-second window. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | | Metal | jfk (11.0s) | 50.3 ms (218.9×) | 49.5 ms (222.3×) | | Metal | dots (35.3s) | 172.4 ms (204.9×) | 161.4 ms (218.9×) | -| CPU | jfk (11.0s) | 352.5 ms (31.2×) | 325.6 ms (33.8×) | -| CPU | dots (35.3s) | 780.9 ms (45.2×) | 733.6 ms (48.2×) | +| CPU | jfk (11.0s) | 352.4 ms (31.21×) | 325.6 ms (33.78×) | +| CPU | dots (35.3s) | 780.9 ms (45.25×) | 733.6 ms (48.16×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. @@ -82,12 +84,14 @@ uv run scripts/bench/run.py \ ### AMD Ryzen 7 PRO 4750U + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 327 ms (33.6×) | 337 ms (32.7×) | | Vulkan | dots (35.3s) | 909 ms (38.9×) | 912 ms (38.7×) | -| CPU | jfk (11.0s) | 1.01 s (10.8×) | 836 ms (13.2×) | -| CPU | dots (35.3s) | 2.41 s (14.7×) | 2.19 s (16.1×) | +| CPU | jfk (11.0s) | 1.01 s (10.85×) | 836 ms (13.16×) | +| CPU | dots (35.3s) | 2.41 s (14.68×) | 2.19 s (16.15×) | + Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/whisper-base.md b/docs/models/whisper-base.md index 52401302..6bf40a3a 100644 --- a/docs/models/whisper-base.md +++ b/docs/models/whisper-base.md @@ -52,19 +52,21 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mel + encode + decode, mean over the recorded +Cells are compute latency (mel + encode + decode, mean over the recorded iterations after warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as model size grows; the encoder is only run once per 30-second window. ### Apple M4 Max + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 52.1 ms (211.0×) | 53.6 ms (205.2×) | +| Metal | jfk (11.0s) | 52.1 ms (211×) | 53.6 ms (205.2×) | | Metal | dots (35.3s) | 170.0 ms (207.8×) | 168.3 ms (209.9×) | -| CPU | jfk (11.0s) | 374.0 ms (29.4×) | 347.6 ms (31.6×) | -| CPU | dots (35.3s) | 806.1 ms (43.8×) | 750.3 ms (47.1×) | +| CPU | jfk (11.0s) | 373.9 ms (29.42×) | 347.6 ms (31.65×) | +| CPU | dots (35.3s) | 806.1 ms (43.83×) | 750.3 ms (47.09×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. @@ -82,12 +84,14 @@ uv run scripts/bench/run.py \ ### AMD Ryzen 7 PRO 4750U + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 351 ms (31.3×) | 356 ms (30.9×) | | Vulkan | dots (35.3s) | 922 ms (38.3×) | 946 ms (37.4×) | -| CPU | jfk (11.0s) | 1.11 s (9.9×) | 913 ms (12.1×) | -| CPU | dots (35.3s) | 2.54 s (13.9×) | 2.27 s (15.5×) | +| CPU | jfk (11.0s) | 1.11 s (9.95×) | 913 ms (12.05×) | +| CPU | dots (35.3s) | 2.54 s (13.92×) | 2.27 s (15.53×) | + Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/whisper-large-v2.md b/docs/models/whisper-large-v2.md index 561880fb..71afe4c3 100644 --- a/docs/models/whisper-large-v2.md +++ b/docs/models/whisper-large-v2.md @@ -52,19 +52,21 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mel + encode + decode, mean over the recorded +Cells are compute latency (mel + encode + decode, mean over the recorded iterations after warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as model size grows; the encoder is only run once per 30-second window. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 508.0 ms (21.7×) | 498.3 ms (22.1×) | -| Metal | dots (35.3s) | 1.37 s (25.7×) | 1.33 s (26.5×) | -| CPU | jfk (11.0s) | 9.66 s (1.1×) | 7.46 s (1.5×) | -| CPU | dots (35.3s) | 19.72 s (1.8×) | 15.43 s (2.3×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Metal | jfk (11.0s) | 493.1 ms (22.31×) | 499.6 ms (22.02×) | +| Metal | dots (35.3s) | 1.37 s (25.7×) | 1.40 s (25.22×) | +| CPU | jfk (11.0s) | 9.66 s (1.14×) | 7.46 s (1.48×) | +| CPU | dots (35.3s) | 19.72 s (1.79×) | 15.43 s (2.29×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. @@ -82,12 +84,14 @@ uv run scripts/bench/run.py \ ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 6.27 s (1.8×) | 6.07 s (1.8×) | -| Vulkan | dots (35.3s) | 14.29 s (2.5×) | 13.68 s (2.6×) | -| CPU | jfk (11.0s) | 25.73 s (0.4×) | 19.46 s (0.6×) | -| CPU | dots (35.3s) | 53.75 s (0.7×) | 43.11 s (0.8×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | --------------: | +| Vulkan | jfk (11.0s) | 6.27 s (1.75×) | 6.35 s (1.73×) | +| Vulkan | dots (35.3s) | 14.29 s (2.5×) | 13.68 s (2.6×) | +| CPU | jfk (11.0s) | 25.73 s (0.4×) | 19.46 s (0.6×) | +| CPU | dots (35.3s) | 53.75 s (0.7×) | 43.11 s (0.82×) | + Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/whisper-large-v3-turbo.md b/docs/models/whisper-large-v3-turbo.md index f127651b..7ff7f652 100644 --- a/docs/models/whisper-large-v3-turbo.md +++ b/docs/models/whisper-large-v3-turbo.md @@ -51,19 +51,21 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mel + encode + decode, mean over the recorded +Cells are compute latency (mel + encode + decode, mean over the recorded iterations after warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as model size grows; the encoder is only run once per 30-second window. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 286.1 ms (38.4×) | 288.7 ms (38.1×) | -| Metal | dots (35.3s) | 649.5 ms (54.4×) | 641.1 ms (55.1×) | -| CPU | jfk (11.0s) | 7.60 s (1.4×) | 5.89 s (1.9×) | -| CPU | dots (35.3s) | 15.34 s (2.3×) | 11.87 s (3.0×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Metal | jfk (11.0s) | 288.3 ms (38.16×) | 288.9 ms (38.07×) | +| Metal | dots (35.3s) | 649.5 ms (54.40×) | 666.0 ms (53.05×) | +| CPU | jfk (11.0s) | 7.60 s (1.45×) | 5.89 s (1.87×) | +| CPU | dots (35.3s) | 15.34 s (2.30×) | 11.87 s (2.98×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. @@ -81,12 +83,14 @@ uv run scripts/bench/run.py \ ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | ------------: | -| Vulkan | jfk (11.0s) | 4.14 s (2.7×) | 4.15 s (2.7×) | -| Vulkan | dots (35.3s) | 8.70 s (4.1×) | 8.88 s (4.0×) | -| CPU | jfk (11.0s) | 19.85 s (0.6×) | 15.74 s (0.7×) | -| CPU | dots (35.3s) | 40.18 s (0.9×) | 32.22 s (1.1×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 4.77 s (2.31×) | 4.92 s (2.24×) | +| Vulkan | dots (35.3s) | 10.16 s (3.48×) | 10.26 s (3.44×) | +| CPU | jfk (11.0s) | 19.85 s (0.55×) | 15.74 s (0.70×) | +| CPU | dots (35.3s) | 40.18 s (0.88×) | 32.22 s (1.10×) | + Fedora 43, transcribe.cpp `2ab01b8`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/whisper-large-v3.md b/docs/models/whisper-large-v3.md index d30c7525..287196ab 100644 --- a/docs/models/whisper-large-v3.md +++ b/docs/models/whisper-large-v3.md @@ -51,19 +51,21 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mel + encode + decode, mean over the recorded +Cells are compute latency (mel + encode + decode, mean over the recorded iterations after warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as model size grows; the encoder is only run once per 30-second window. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 508.6 ms (21.6×) | 517.0 ms (21.3×) | -| Metal | dots (35.3s) | 1.38 s (25.7×) | 1.35 s (26.1×) | -| CPU | jfk (11.0s) | 9.68 s (1.1×) | 7.48 s (1.5×) | -| CPU | dots (35.3s) | 19.86 s (1.8×) | 15.45 s (2.3×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Metal | jfk (11.0s) | 516.9 ms (21.28×) | 511.9 ms (21.49×) | +| Metal | dots (35.3s) | 1.38 s (25.7×) | 1.35 s (26.1×) | +| CPU | jfk (11.0s) | 9.68 s (1.14×) | 7.48 s (1.47×) | +| CPU | dots (35.3s) | 19.86 s (1.78×) | 15.45 s (2.29×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. @@ -81,12 +83,14 @@ uv run scripts/bench/run.py \ ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 6.30 s (1.7×) | 6.07 s (1.8×) | -| Vulkan | dots (35.3s) | 14.42 s (2.5×) | 13.75 s (2.6×) | -| CPU | jfk (11.0s) | 25.59 s (0.4×) | 19.96 s (0.6×) | -| CPU | dots (35.3s) | 53.80 s (0.7×) | 43.18 s (0.8×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | --------------: | +| Vulkan | jfk (11.0s) | 6.40 s (1.72×) | 6.07 s (1.8×) | +| Vulkan | dots (35.3s) | 14.42 s (2.5×) | 13.75 s (2.6×) | +| CPU | jfk (11.0s) | 25.59 s (0.4×) | 19.96 s (0.6×) | +| CPU | dots (35.3s) | 53.80 s (0.7×) | 43.18 s (0.82×) | + Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/whisper-large.md b/docs/models/whisper-large.md index d6193408..243c8c12 100644 --- a/docs/models/whisper-large.md +++ b/docs/models/whisper-large.md @@ -52,19 +52,21 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mel + encode + decode, mean over the recorded +Cells are compute latency (mel + encode + decode, mean over the recorded iterations after warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as model size grows; the encoder is only run once per 30-second window. ### Apple M4 Max + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | | Metal | jfk (11.0s) | 476.5 ms (23.1×) | 465.1 ms (23.6×) | -| Metal | dots (35.3s) | 1.33 s (26.6×) | 1.26 s (28.0×) | -| CPU | jfk (11.0s) | 9.63 s (1.1×) | 7.43 s (1.5×) | -| CPU | dots (35.3s) | 19.88 s (1.8×) | 15.49 s (2.3×) | +| Metal | dots (35.3s) | 1.33 s (26.6×) | 1.26 s (28×) | +| CPU | jfk (11.0s) | 9.63 s (1.14×) | 7.43 s (1.48×) | +| CPU | dots (35.3s) | 19.88 s (1.78×) | 15.49 s (2.28×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. @@ -82,12 +84,14 @@ uv run scripts/bench/run.py \ ### AMD Ryzen 7 PRO 4750U + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 6.26 s (1.8×) | 6.13 s (1.8×) | +| Vulkan | jfk (11.0s) | 6.27 s (1.75×) | 6.13 s (1.8×) | | Vulkan | dots (35.3s) | 14.41 s (2.5×) | 13.72 s (2.6×) | -| CPU | jfk (11.0s) | 26.18 s (0.4×) | 19.83 s (0.6×) | -| CPU | dots (35.3s) | 55.64 s (0.6×) | 43.98 s (0.8×) | +| CPU | jfk (11.0s) | 26.18 s (0.42×) | 19.83 s (0.6×) | +| CPU | dots (35.3s) | 55.64 s (0.6×) | 43.98 s (0.80×) | + Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/whisper-medium.en.md b/docs/models/whisper-medium.en.md index 39317168..9f160adb 100644 --- a/docs/models/whisper-medium.en.md +++ b/docs/models/whisper-medium.en.md @@ -52,19 +52,21 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mel + encode + decode, mean over the recorded +Cells are compute latency (mel + encode + decode, mean over the recorded iterations after warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as model size grows; the encoder is only run once per 30-second window. ### Apple M4 Max + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 249.7 ms (44.0×) | 243.3 ms (45.2×) | +| Metal | jfk (11.0s) | 249.7 ms (44×) | 243.3 ms (45.2×) | | Metal | dots (35.3s) | 762.9 ms (46.3×) | 725.9 ms (48.7×) | -| CPU | jfk (11.0s) | 4.29 s (2.6×) | 3.37 s (3.3×) | -| CPU | dots (35.3s) | 9.07 s (3.9×) | 7.23 s (4.9×) | +| CPU | jfk (11.0s) | 4.29 s (2.56×) | 3.37 s (3.26×) | +| CPU | dots (35.3s) | 9.07 s (3.89×) | 7.23 s (4.89×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. @@ -82,12 +84,14 @@ uv run scripts/bench/run.py \ ### AMD Ryzen 7 PRO 4750U + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 2.74 s (4.0×) | 2.55 s (4.3×) | -| Vulkan | dots (35.3s) | 6.76 s (5.2×) | 6.44 s (5.5×) | -| CPU | jfk (11.0s) | 11.53 s (1.0×) | 9.36 s (1.2×) | -| CPU | dots (35.3s) | 26.63 s (1.3×) | 21.07 s (1.7×) | +| Vulkan | jfk (11.0s) | 2.88 s (3.82×) | 2.55 s (4.3×) | +| Vulkan | dots (35.3s) | 6.76 s (5.2×) | 6.44 s (5.5×) | +| CPU | jfk (11.0s) | 11.53 s (0.95×) | 9.36 s (1.18×) | +| CPU | dots (35.3s) | 26.63 s (1.33×) | 21.07 s (1.68×) | + Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/whisper-medium.md b/docs/models/whisper-medium.md index 87dc0a56..32b2805d 100644 --- a/docs/models/whisper-medium.md +++ b/docs/models/whisper-medium.md @@ -52,19 +52,21 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as model size grows; the encoder is only run once per 30-second window. ### Apple M4 Max + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 280.0 ms (39.3×) | 270.9 ms (40.6×) | -| Metal | dots (35.3s) | 802.5 ms (44.0×) | 759.2 ms (46.5×) | -| CPU | jfk (11.0s) | 4.75 s (2.3×) | 3.90 s (2.8×) | -| CPU | dots (35.3s) | 9.62 s (3.7×) | 7.93 s (4.5×) | +| Metal | jfk (11.0s) | 280.0 ms (39.3×) | 270.9 ms (40.6×) | +| Metal | dots (35.3s) | 802.5 ms (44×) | 759.2 ms (46.5×) | +| CPU | jfk (11.0s) | 4.75 s (2.32×) | 3.90 s (2.82×) | +| CPU | dots (35.3s) | 9.62 s (3.67×) | 7.93 s (4.46×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. @@ -82,12 +84,14 @@ uv run scripts/bench/run.py \ ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | ------------: | -| Vulkan | jfk (11.0s) | 3.00 s (3.7×) | 2.83 s (3.9×) | -| Vulkan | dots (35.3s) | 7.03 s (5.0×) | 6.77 s (5.2×) | -| CPU | jfk (11.0s) | 13.14 s (0.8×) | 10.47 s (1.1×) | -| CPU | dots (35.3s) | 27.87 s (1.3×) | 22.57 s (1.6×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 3.00 s (3.7×) | 2.83 s (3.9×) | +| Vulkan | dots (35.3s) | 7.03 s (5×) | 6.77 s (5.2×) | +| CPU | jfk (11.0s) | 13.14 s (0.84×) | 10.47 s (1.05×) | +| CPU | dots (35.3s) | 27.87 s (1.27×) | 22.57 s (1.56×) | + Fedora 43, transcribe.cpp `2ab01b8`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/whisper-small.en.md b/docs/models/whisper-small.en.md index c0be70f5..3af52b7e 100644 --- a/docs/models/whisper-small.en.md +++ b/docs/models/whisper-small.en.md @@ -52,19 +52,21 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mel + encode + decode, mean over the recorded +Cells are compute latency (mel + encode + decode, mean over the recorded iterations after warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as model size grows; the encoder is only run once per 30-second window. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | | Metal | jfk (11.0s) | 107.1 ms (102.7×) | 102.6 ms (107.2×) | | Metal | dots (35.3s) | 333.0 ms (106.1×) | 329.3 ms (107.3×) | -| CPU | jfk (11.0s) | 1.31 s (8.4×) | 1.13 s (9.8×) | -| CPU | dots (35.3s) | 2.89 s (12.2×) | 2.52 s (14.0×) | +| CPU | jfk (11.0s) | 1.31 s (8.39×) | 1.13 s (9.76×) | +| CPU | dots (35.3s) | 2.89 s (12.23×) | 2.52 s (14.02×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. @@ -82,12 +84,14 @@ uv run scripts/bench/run.py \ ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 970 ms (11.3×) | 883 ms (12.5×) | -| Vulkan | dots (35.3s) | 2.48 s (14.3×) | 2.36 s (15.0×) | -| CPU | jfk (11.0s) | 3.68 s (3.0×) | 2.95 s (3.7×) | -| CPU | dots (35.3s) | 8.38 s (4.2×) | 7.16 s (4.9×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | -------------: | +| Vulkan | jfk (11.0s) | 970 ms (11.3×) | 883 ms (12.5×) | +| Vulkan | dots (35.3s) | 2.48 s (14.3×) | 2.36 s (15×) | +| CPU | jfk (11.0s) | 3.68 s (2.99×) | 2.95 s (3.73×) | +| CPU | dots (35.3s) | 8.38 s (4.21×) | 7.16 s (4.93×) | + Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/whisper-small.md b/docs/models/whisper-small.md index 0b092e95..53414af6 100644 --- a/docs/models/whisper-small.md +++ b/docs/models/whisper-small.md @@ -52,19 +52,21 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mel + encode + decode, mean over the recorded +Cells are compute latency (mel + encode + decode, mean over the recorded iterations after warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as model size grows; the encoder is only run once per 30-second window. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 113.1 ms (97.2×) | 113.5 ms (96.9×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Metal | jfk (11.0s) | 113.1 ms (97.2×) | 113.5 ms (96.9×) | | Metal | dots (35.3s) | 349.3 ms (101.2×) | 340.0 ms (103.9×) | -| CPU | jfk (11.0s) | 1.43 s (7.7×) | 1.30 s (8.4×) | -| CPU | dots (35.3s) | 3.01 s (11.8×) | 2.74 s (12.9×) | +| CPU | jfk (11.0s) | 1.43 s (7.71×) | 1.30 s (8.44×) | +| CPU | dots (35.3s) | 3.01 s (11.75×) | 2.74 s (12.91×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. @@ -82,12 +84,14 @@ uv run scripts/bench/run.py \ ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 1.03 s (10.6×) | 0.96 s (11.4×) | -| Vulkan | dots (35.3s) | 2.57 s (13.7×) | 2.47 s (14.3×) | -| CPU | jfk (11.0s) | 3.95 s (2.8×) | 3.27 s (3.4×) | -| CPU | dots (35.3s) | 8.91 s (4.0×) | 7.47 s (4.7×) | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | -------------: | +| Vulkan | jfk (11.0s) | 1.03 s (10.6×) | 960 ms (11.4×) | +| Vulkan | dots (35.3s) | 2.57 s (13.7×) | 2.47 s (14.3×) | +| CPU | jfk (11.0s) | 3.95 s (2.79×) | 3.27 s (3.37×) | +| CPU | dots (35.3s) | 8.91 s (3.97×) | 7.47 s (4.73×) | + Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/whisper-tiny.en.md b/docs/models/whisper-tiny.en.md index a032309c..c1a5568c 100644 --- a/docs/models/whisper-tiny.en.md +++ b/docs/models/whisper-tiny.en.md @@ -52,19 +52,21 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as model size grows; the encoder is only run once per 30-second window. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | | Metal | jfk (11.0s) | 39.1 ms (281.2×) | 34.0 ms (323.8×) | | Metal | dots (35.3s) | 127.0 ms (278.3×) | 125.8 ms (280.9×) | -| CPU | jfk (11.0s) | 165.0 ms (66.7×) | 161.4 ms (68.1×) | -| CPU | dots (35.3s) | 389.4 ms (90.7×) | 381.8 ms (92.5×) | +| CPU | jfk (11.0s) | 165.0 ms (66.67×) | 161.4 ms (68.15×) | +| CPU | dots (35.3s) | 389.4 ms (90.74×) | 381.7 ms (92.55×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. @@ -82,12 +84,14 @@ uv run scripts/bench/run.py \ ### AMD Ryzen 7 PRO 4750U + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 197 ms (56.0×) | 193 ms (56.9×) | +| Vulkan | jfk (11.0s) | 197 ms (56×) | 193 ms (56.9×) | | Vulkan | dots (35.3s) | 540 ms (65.4×) | 541 ms (65.3×) | -| CPU | jfk (11.0s) | 493 ms (22.3×) | 436 ms (25.2×) | -| CPU | dots (35.3s) | 1.19 s (29.8×) | 1.09 s (32.5×) | +| CPU | jfk (11.0s) | 493 ms (22.32×) | 436 ms (25.25×) | +| CPU | dots (35.3s) | 1.19 s (29.77×) | 1.09 s (32.48×) | + Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/docs/models/whisper-tiny.md b/docs/models/whisper-tiny.md index 6595c553..dcc98962 100644 --- a/docs/models/whisper-tiny.md +++ b/docs/models/whisper-tiny.md @@ -52,19 +52,21 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with +Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as model size grows; the encoder is only run once per 30-second window. ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | | Metal | jfk (11.0s) | 36.4 ms (302.5×) | 37.9 ms (290.1×) | | Metal | dots (35.3s) | 117.1 ms (301.8×) | 117.3 ms (301.3×) | -| CPU | jfk (11.0s) | 174.7 ms (63.0×) | 169.8 ms (64.8×) | -| CPU | dots (35.3s) | 396.3 ms (89.2×) | 390.4 ms (90.5×) | +| CPU | jfk (11.0s) | 174.7 ms (62.97×) | 169.7 ms (64.81×) | +| CPU | dots (35.3s) | 396.2 ms (89.17×) | 390.3 ms (90.52×) | + macOS 26.4.1, transcribe.cpp `e0fa0f6`. @@ -82,12 +84,14 @@ uv run scripts/bench/run.py \ ### AMD Ryzen 7 PRO 4750U + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 200 ms (55.1×) | 209 ms (52.6×) | | Vulkan | dots (35.3s) | 528 ms (66.9×) | 529 ms (66.8×) | -| CPU | jfk (11.0s) | 531 ms (20.7×) | 467 ms (23.6×) | -| CPU | dots (35.3s) | 1.23 s (28.8×) | 1.14 s (31.0×) | +| CPU | jfk (11.0s) | 531 ms (20.73×) | 466 ms (23.59×) | +| CPU | dots (35.3s) | 1.23 s (28.76×) | 1.14 s (31.01×) | + Fedora 43, transcribe.cpp `2ab01b8`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. diff --git a/scripts/catalog/common.py b/scripts/catalog/common.py index 7bc13d98..d9a6531e 100644 --- a/scripts/catalog/common.py +++ b/scripts/catalog/common.py @@ -15,9 +15,11 @@ REPO = pathlib.Path(__file__).resolve().parents[2] CATALOG_DIR = REPO / "catalog" DOCS_DIR = REPO / "docs" / "models" -CARDS_DIR = REPO / "scripts" / "hf_cards" HEADLINE_KEYS = ("dataset", "split", "language", "metric", "batch_size", "timestamps") +# The recipe half of the pointer may be null, meaning "any"; the identity +# half never is. db.py's headline view encodes the same predicate in SQL. +HEADLINE_WILDCARD_KEYS = ("batch_size", "timestamps") # -------------------------------------------------------------------------- @@ -83,9 +85,10 @@ def headline_rows(record: dict) -> dict[str, dict]: return {} rows = {} for row in record.get("accuracy_benchmarks", []): - # A null recipe field in the pointer is an intentional wildcard for a + # A null batch_size or timestamps is an intentional wildcard for a # legacy table assembled before recipe metadata was standardized. - if all(target.get(key) is None or row.get(key) == target.get(key) + if all((key in HEADLINE_WILDCARD_KEYS and target[key] is None) + or row.get(key) == target[key] for key in HEADLINE_KEYS): rows[row["quant"]] = row return rows @@ -115,11 +118,19 @@ def fmt_ms(total_ms: float, dp_ms: int = 0, dp_s: int = 2) -> str: return f"{total_ms / 1000:.{dp_s}f} s" -def fmt_xrt(xrt: float, dp: int | None = None) -> str: - """Speedup over realtime. Below 10x a single decimal carries real signal.""" - if dp is None: - dp = 1 if xrt < 10 else 0 - return f"{xrt:.{dp}f}×" +XRT_DP = 2 + + +def fmt_xrt(row: dict) -> str: + """Speedup over realtime, two decimals. A legacy row carries only the + precision its doc published (an integer or one decimal), so it is printed + as stored rather than padded to a fidelity it never had.""" + xrt = row["xrt_compute"] + if row.get("engine_sha"): + return f"{xrt:.{XRT_DP}f}×" + text = repr(float(xrt)) + decimals = len(text.split(".")[1].rstrip("0")) + return f"{xrt:.{min(decimals, XRT_DP)}f}×" def perf_rows(record: dict, machine: str) -> dict[tuple[str, str, str], dict]: @@ -133,10 +144,6 @@ def perf_rows(record: dict, machine: str) -> dict[tuple[str, str, str], dict]: # downloads -def downloads(record: dict) -> dict[str, dict]: - return {item["quant"]: item for item in record.get("downloads", [])} - - def download_url(record: dict, filename: str) -> str: repo = record.get("published_repo") if not repo: diff --git a/scripts/catalog/db.py b/scripts/catalog/db.py index 919bb4c0..45eacb97 100755 --- a/scripts/catalog/db.py +++ b/scripts/catalog/db.py @@ -100,6 +100,8 @@ variant TEXT NOT NULL REFERENCES models(variant), quant TEXT NOT NULL, metric TEXT NOT NULL, + language_hint TEXT, + backend TEXT, err_pct REAL NOT NULL CHECK(err_pct >= 0), ci_lo REAL, ci_hi REAL, @@ -132,6 +134,8 @@ sample_duration_s REAL NOT NULL, total_ms REAL, xrt_compute REAL NOT NULL, + wall_ms REAL, + xrt_wall REAL, load_ms REAL, mel_ms REAL, encode_ms REAL, @@ -223,8 +227,9 @@ def build(records: dict[str, dict], out: pathlib.Path) -> dict[str, int]: (variant, item["quant"], item["filename"], item["size_bytes"]) for item in record.get("downloads", [])]) con.executemany( - "INSERT INTO accuracy VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ - (dataset_id(row), variant, row["quant"], row["metric"], row["err_pct"], + "INSERT INTO accuracy VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ + (dataset_id(row), variant, row["quant"], row["metric"], + row.get("language_hint"), row.get("backend"), row["err_pct"], (row.get("ci95") or [None, None])[0], (row.get("ci95") or [None, None])[1], row["n_utts"], row.get("batch_size"), row.get("timestamps"), row.get("engine_sha"), @@ -235,10 +240,10 @@ def build(records: dict[str, dict], out: pathlib.Path) -> dict[str, int]: row.get("utts_over_50pct")) for row in record.get("accuracy_benchmarks", [])]) con.executemany( - "INSERT INTO speed VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ + "INSERT INTO speed VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ (variant, row["machine"], row["backend"], row["quant"], row["sample"], row["sample_duration_s"], row.get("total_ms"), row["xrt_compute"], - row.get("load_ms"), row.get("mel_ms"), row.get("encode_ms"), + row.get("wall_ms"), row.get("xrt_wall"), row.get("load_ms"), row.get("mel_ms"), row.get("encode_ms"), row.get("decode_ms"), row.get("engine_sha"), row.get("measurement_provenance"), row.get("measured_on"), None if row.get("thermal_gated") is None else int(row["thermal_gated"])) diff --git a/scripts/catalog/ingest_perf.py b/scripts/catalog/ingest_perf.py index adf93ba4..064b1c4c 100755 --- a/scripts/catalog/ingest_perf.py +++ b/scripts/catalog/ingest_perf.py @@ -101,9 +101,9 @@ def mean(field: str): # xrt is recomputed from the unrounded mean rather than carried # over: a stored value that no longer matches its own latency is # the drift this ingest exists to remove. - "xrt_compute": round(duration / (total / 1000), 3), + "xrt_compute": round(duration / (total / 1000), 2), "wall_ms": None if wall is None else round(wall, 1), - "xrt_wall": None if wall is None else round(duration / (wall / 1000), 3), + "xrt_wall": None if wall is None else round(duration / (wall / 1000), 2), "load_ms": None if run.get("load_ms") is None else round(run["load_ms"], 1), "mel_ms": mean("mel_ms"), "encode_ms": mean("encode_ms"), @@ -144,15 +144,12 @@ def collect(reports_dir: pathlib.Path, continue key = (row["variant"], row["machine"], row["backend"], row["quant"], row["sample"]) previous = best.get(key) - order = (row["_rank"], row["_when"]) - if previous is None or order < (previous["_rank"], previous["_when"]): - # A better-intentioned run always wins; among equals, the newest. - if previous is not None and row["_rank"] > previous["_rank"]: - order = None - if previous is None or (order is not None - and (row["_rank"] < previous["_rank"] - or (row["_rank"] == previous["_rank"] - and row["_when"] > previous["_when"]))): + # A better-intentioned run always wins; among equals, the newest. + wins = previous is None or ( + row["_rank"] < previous["_rank"] + or (row["_rank"] == previous["_rank"] + and row["_when"] > previous["_when"])) + if wins: if previous is not None: superseded[key] += 1 best[key] = row diff --git a/scripts/catalog/render.py b/scripts/catalog/render.py index 0124a45f..6316a9b9 100755 --- a/scripts/catalog/render.py +++ b/scripts/catalog/render.py @@ -99,21 +99,20 @@ def block_perf(record: dict, attrs: dict[str, str]) -> list[str]: if not rows: raise RenderError(f"no speed_benchmarks rows for machine {machine!r}") - def ordered(index: int, override: str | None) -> list[str]: + def ordered(index: int, override: str | None, rank) -> list[str]: if override: return override.split(",") - seen = [] - for key in rows: - if key[index] not in seen: - seen.append(key[index]) - return seen - - backends = ordered(0, attrs.get("backends")) - samples = ordered(1, attrs.get("samples")) - quants = ordered(2, attrs.get("quants")) + return sorted({key[index] for key in rows}, key=rank) + + # GPU backends first, then CPU; samples shortest first; quants in the + # record's download order (reference dtype down to the smallest quant). + backend_rank = {"metal": 0, "cuda": 1, "vulkan": 2, "cpu": 9} + duration = {key[1]: row["sample_duration_s"] for key, row in rows.items()} + quant_rank = {item["quant"]: i for i, item in enumerate(record.get("downloads", []))} + backends = ordered(0, attrs.get("backends"), lambda b: (backend_rank.get(b, 5), b)) + samples = ordered(1, attrs.get("samples"), lambda s: (duration.get(s, 0), s)) + quants = ordered(2, attrs.get("quants"), lambda q: (quant_rank.get(q, 99), q)) dp_ms = int(attrs.get("dp_ms", 0)) - dp_xrt = attrs.get("dp_xrt") - dp_xrt = None if dp_xrt is None else int(dp_xrt) body, blocked = [], [] for backend in backends: @@ -133,7 +132,7 @@ def ordered(index: int, override: str | None) -> list[str]: cells.append("-") continue cells.append(f"{common.fmt_ms(row['total_ms'], dp_ms)} " - f"({common.fmt_xrt(row['xrt_compute'], dp_xrt)})") + f"({common.fmt_xrt(row)})") body.append(cells) if blocked: raise RenderError( @@ -144,7 +143,7 @@ def ordered(index: int, override: str | None) -> list[str]: raise RenderError(f"no rows matched on {machine}") return common.render_table(["Backend", "Sample"] + quants, ["l", "l"] + ["r"] * len(quants), body, - rule_fill=True) + rule_fill=True, max_pad=20) BLOCKS = {"downloads": block_downloads, "perf": block_perf} diff --git a/scripts/catalog/sync_capabilities.py b/scripts/catalog/sync_capabilities.py index 89e14ea7..8417794a 100755 --- a/scripts/catalog/sync_capabilities.py +++ b/scripts/catalog/sync_capabilities.py @@ -8,8 +8,9 @@ The GGUF is the truth and the catalog follows it. If the file is wrong, the fix is a converter change plus a re-export, never an edit to the record: absence is not falsity, since read_capability_bool() leaves a field alone -when its KV is missing and the family default then applies, so every -converter must declare every capability explicitly. +when its KV is missing and the family default then applies. The shared +writer factory (scripts/lib/gguf_common.py) fills any unset capability KV +with false, so every fresh export states all four. Hand-writing this block is how moss-transcribe-diarize shipped as diarize:false and how whisper-large-v3 came to claim translate:false while its @@ -36,11 +37,14 @@ uv run scripts/catalog/sync_capabilities.py --local-only uv run scripts/catalog/sync_capabilities.py uv run scripts/catalog/sync_capabilities.py --check # exit 1 on any disagreement + uv run scripts/catalog/sync_capabilities.py --check --models + # ship gate: every quant, every KV present, all agree """ from __future__ import annotations import argparse import collections +import json import pathlib import re import sys @@ -107,19 +111,32 @@ def read_kvs(reader) -> dict: return out -def open_gguf(record: dict, local_only: bool): - """A GGUFReader over a local file, else over a range-fetched header.""" +def local_path(filename: str) -> pathlib.Path | None: + for directory in sorted((common.REPO / "models").glob("*")): + if directory.is_dir() and (directory / filename).exists(): + return directory / filename + return None + + +def default_filename(record: dict) -> str: + """The one file the sweep reads per record: a local one if any is on + disk, else the smallest published quant (cheapest header fetch).""" + for item in record["downloads"]: + if local_path(item["filename"]): + return item["filename"] + return sorted(record["downloads"], key=lambda d: d["size_bytes"])[0]["filename"] + + +def open_gguf(record: dict, filename: str, local_only: bool): + """A GGUFReader over the named file: local if present, else its + range-fetched header from the published repo.""" from gguf import GGUFReader - names = {item["filename"] for item in record["downloads"]} - for directory in sorted((common.REPO / "models").glob("*")): - if not directory.is_dir(): - continue - for path in sorted(directory.glob("*.gguf")): - if path.name in names: - return GGUFReader(str(path)), f"local {path.name}", None + path = local_path(filename) + if path: + return GGUFReader(str(path)), "local", None if local_only or not record.get("published_repo"): - return None, None, "no local GGUF" + return None, None, f"{filename} not on disk" # Header-only read: pad the temp file out to the declared size so # GGUFReader's memmap of the tensor region stays in bounds and is never @@ -128,7 +145,6 @@ def open_gguf(record: dict, local_only: bool): from huggingface_hub import get_hf_file_metadata, hf_hub_url from huggingface_hub.utils import build_hf_headers - filename = sorted(record["downloads"], key=lambda d: d["size_bytes"])[0]["filename"] try: url = hf_hub_url(record["published_repo"], filename) total = get_hf_file_metadata(url).size @@ -138,13 +154,13 @@ def open_gguf(record: dict, local_only: bool): response = requests.get(url, headers=headers, timeout=120) response.raise_for_status() except Exception as exc: # noqa: BLE001 - any transport failure is just "unavailable" - return None, None, f"{type(exc).__name__}: {str(exc)[:70]}" + return None, None, f"{filename}: {type(exc).__name__}: {str(exc)[:70]}" with tempfile.NamedTemporaryFile(suffix=".gguf", delete=False) as handle: tmp = pathlib.Path(handle.name) handle.write(response.content) handle.truncate(total) try: - return GGUFReader(str(tmp)), f"hub {record['published_repo']}", None + return GGUFReader(str(tmp)), "hub", None finally: tmp.unlink(missing_ok=True) @@ -204,20 +220,52 @@ def main() -> int: parser.add_argument("--dry-run", action="store_true") parser.add_argument("--local-only", action="store_true", help="skip the hub fallback") + parser.add_argument("--models", default="", + help="comma-separated variants; every published quant " + "of each is inspected (default: all variants, one " + "file each)") parser.add_argument("--check", action="store_true", help="write nothing; exit 1 if any record disagrees " - "with its GGUF") + "with its GGUF. With --models, a missing " + "capability KV, an unreadable file, or quants that " + "disagree with each other also fail.") args = parser.parse_args() args.dry_run = args.dry_run or args.check - changed, unreachable, sources = [], [], collections.Counter() - for variant, record in common.load_records().items(): - reader, source, error = open_gguf(record, args.local_only) - if reader is None: - unreachable.append((variant, error)) + records = common.load_records() + selected = {item.strip() for item in args.models.split(",") if item.strip()} + unknown = selected - records.keys() + if unknown: + print(f"unknown catalog variant(s): {', '.join(sorted(unknown))}", file=sys.stderr) + return 2 + strict = args.check and bool(selected) + + changed, unreachable, missing, disagree = [], [], [], [] + sources = collections.Counter() + for variant, record in records.items(): + if selected and variant not in selected: + continue + filenames = ([item["filename"] for item in record["downloads"]] if selected + else [default_filename(record)]) + caps_by_file = {} + for filename in filenames: + reader, source, error = open_gguf(record, filename, args.local_only) + if reader is None: + unreachable.append((variant, error)) + continue + sources[source] += 1 + kvs = read_kvs(reader) + absent = [key for key in KV.values() if key not in kvs] + if absent: + missing.append((variant, filename, absent)) + caps_by_file[filename] = build(record, kvs) + if not caps_by_file: + continue + distinct = {json.dumps(caps, sort_keys=True) for caps in caps_by_file.values()} + if len(distinct) > 1: + disagree.append((variant, sorted(caps_by_file))) continue - sources[source.split()[0]] += 1 - caps = build(record, read_kvs(reader)) + caps = next(iter(caps_by_file.values())) before = record.get("capabilities", {}) if caps == before: continue @@ -231,21 +279,37 @@ def main() -> int: changed.append((variant, diff)) if not args.dry_run: record["capabilities"] = caps - (common.CATALOG_DIR / f"{variant}.json").write_text( - common.dumps_record(record)) + common.write_record(common.CATALOG_DIR / f"{variant}.json", record) print(f"read {sum(sources.values())} GGUF(s): " + ", ".join(f"{count} {where}" for where, count in sources.most_common())) print(f"{len(changed)} record(s) corrected\n") for variant, diff in changed: print(f" {variant:42s} {'; '.join(diff) or 'payload only'}") + if disagree: + print(f"\n{len(disagree)} record(s) whose quants disagree with each other " + f"(not updated):") + for variant, files in disagree: + print(f" {variant:42s} {', '.join(files)}") + if missing: + # Every converter now writes every capability KV; a file without one + # predates that and inherits the family default, which is exactly the + # silence that let wrong flags ship. Fatal at ship time, a warning in + # the sweep until the published files are re-exported. + print(f"\n{len(missing)} file(s) missing capability KV(s)" + + (":" if strict else " (warning; --check --models makes this fatal):")) + for variant, filename, absent in missing: + print(f" {variant}/{filename}: {', '.join(absent)}") if unreachable: - print(f"\n{len(unreachable)} record(s) with no readable GGUF:") + print(f"\n{len(unreachable)} file(s) not readable:") for variant, error in unreachable: print(f" {variant:42s} {error}") if args.dry_run: print("\ndry run: nothing written") - return 1 if (args.check and changed) else 0 + failed = bool(changed or disagree) if args.check else False + if strict and (missing or unreachable): + failed = True + return 1 if failed else 0 if __name__ == "__main__": diff --git a/scripts/hf_cards/breeze-asr-25.yaml b/scripts/hf_cards/breeze-asr-25.yaml index bc9a3aff..7e227108 100644 --- a/scripts/hf_cards/breeze-asr-25.yaml +++ b/scripts/hf_cards/breeze-asr-25.yaml @@ -36,8 +36,6 @@ summary: | tokenizer, but only Mandarin and English are optimized and validated — other languages remain technically accessible but out of scope. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean metadata_key: librispeech_test_clean diff --git a/scripts/hf_cards/canary-180m-flash.yaml b/scripts/hf_cards/canary-180m-flash.yaml index 49cfde0e..ff3e5714 100644 --- a/scripts/hf_cards/canary-180m-flash.yaml +++ b/scripts/hf_cards/canary-180m-flash.yaml @@ -33,8 +33,6 @@ summary: | word/segment timestamps are upstream-experimental and not exposed in the v1 port. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/canary-1b-flash.yaml b/scripts/hf_cards/canary-1b-flash.yaml index 9357c6a8..0c2230dc 100644 --- a/scripts/hf_cards/canary-1b-flash.yaml +++ b/scripts/hf_cards/canary-1b-flash.yaml @@ -31,8 +31,6 @@ summary: | word/segment timestamps are upstream-experimental and not exposed in the v1 port. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/canary-1b-v2.yaml b/scripts/hf_cards/canary-1b-v2.yaml index b29a8f5f..1cb9d8cd 100644 --- a/scripts/hf_cards/canary-1b-v2.yaml +++ b/scripts/hf_cards/canary-1b-v2.yaml @@ -32,8 +32,6 @@ summary: | word and segment timestamps from the upstream model are not exposed in the v1 port. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/canary-1b.yaml b/scripts/hf_cards/canary-1b.yaml index dc3f7f1b..564c0495 100644 --- a/scripts/hf_cards/canary-1b.yaml +++ b/scripts/hf_cards/canary-1b.yaml @@ -38,8 +38,6 @@ summary: | **License: CC-BY-NC-4.0 (non-commercial only)** — the only canary variant under a non-commercial license. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/canary-qwen-2.5b.yaml b/scripts/hf_cards/canary-qwen-2.5b.yaml index f73c9efc..8ce15b4b 100644 --- a/scripts/hf_cards/canary-qwen-2.5b.yaml +++ b/scripts/hf_cards/canary-qwen-2.5b.yaml @@ -31,8 +31,6 @@ summary: | the prompt. English only. Takes a 16 kHz mono WAV and produces a transcript via greedy decoding. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/cohere-transcribe-03-2026.yaml b/scripts/hf_cards/cohere-transcribe-03-2026.yaml index ba2f7914..a4d2b761 100644 --- a/scripts/hf_cards/cohere-transcribe-03-2026.yaml +++ b/scripts/hf_cards/cohere-transcribe-03-2026.yaml @@ -30,8 +30,6 @@ summary: | encoder-decoder head (cross-attention, tied token embedding). Takes a 16 kHz mono WAV and produces a transcript. Decoding is autoregressive. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml b/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml index 738009fb..68e5d78b 100644 --- a/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml +++ b/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml @@ -59,8 +59,6 @@ usage: | See the [transcribe.cpp model page](https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/cohere-transcribe-arabic-07-2026.md) for performance numbers, numerical validation, and reproduction steps. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_ar_test source: FLEURS Arabic test diff --git a/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml b/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml index 9c636866..34dc346e 100644 --- a/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml +++ b/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml @@ -68,8 +68,6 @@ usage: | See the [transcribe.cpp model page](https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/diar_streaming_sortformer_4spk-v2.1.md) for performance numbers, numerical validation, and reproduction steps. -default_quant_index: 2 # Q8_0 - wer: source: AMI IHM test metadata_key: ami_ihm_test diff --git a/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml b/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml index 4ef49e1e..80953f4f 100644 --- a/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml +++ b/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml @@ -42,8 +42,6 @@ summary: | `--itn` CLI flag and `transcribe_funasr_nano_params { use_itn }` in the library API. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/fun-asr-nano-2512.yaml b/scripts/hf_cards/fun-asr-nano-2512.yaml index ddf84339..cf39906a 100644 --- a/scripts/hf_cards/fun-asr-nano-2512.yaml +++ b/scripts/hf_cards/fun-asr-nano-2512.yaml @@ -36,8 +36,6 @@ summary: | via the `--itn` CLI flag and `transcribe_funasr_nano_params { use_itn }` in the library API. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/generate.py b/scripts/hf_cards/generate.py index 8f27902c..cf2324aa 100755 --- a/scripts/hf_cards/generate.py +++ b/scripts/hf_cards/generate.py @@ -51,9 +51,10 @@ CATALOG_OWNED = { "hf_repo", "target_repo", "upstream_commit", "license", "license_display", "license_name", "license_link", "languages", "capabilities", "perf", - "quants", "metric", "catalog_sync", + "quants", "metric", } CAP_FLAGS = ("streaming", "translate", "lang_detect") +DEFAULT_QUANT = "Q8_0" def load_spec(path: Path) -> dict: @@ -65,6 +66,9 @@ def load_spec(path: Path) -> dict: raise SystemExit( f"{path.name}: {', '.join(stale)} come from catalog/{path.stem}.json; " f"remove them from the spec") + if "default_quant_index" in spec: + raise SystemExit(f"{path.name}: default_quant_index is gone; the default is " + f"{DEFAULT_QUANT}, override with default_quant: ") return spec @@ -95,8 +99,7 @@ def derive_perf(record: dict, default_quant: str | None) -> dict: cells.setdefault((row["machine"], row["backend"]), []).append(row["xrt_compute"]) perf: dict[str, dict[str, float]] = {} for (machine, backend), values in sorted(cells.items()): - mean = round(statistics.fmean(values), 1) - perf.setdefault(machine, {})[backend] = int(mean) if mean == int(mean) else mean + perf.setdefault(machine, {})[backend] = round(statistics.fmean(values), 2) return perf @@ -121,9 +124,11 @@ def derive_quants(record: dict, secondary: dict | None) -> list[dict]: def build_context(record: dict, spec: dict) -> dict: """Everything the template needs: catalog facts plus the editorial spec.""" - downloads = record.get("downloads", []) - index = spec.get("default_quant_index", 0) - default_quant = downloads[index]["quant"] if index < len(downloads) else None + downloads = {item["quant"]: item for item in record.get("downloads", [])} + default_quant = spec.get("default_quant", DEFAULT_QUANT) + if default_quant not in downloads: + raise SystemExit(f"{record['variant']}: default quant {default_quant!r} is not " + f"a published download ({', '.join(downloads) or 'none'})") wer = dict(spec.get("wer") or {}) if not wer.get("source"): wer["source"] = common.headline_label(record) @@ -146,6 +151,7 @@ def build_context(record: dict, spec: dict) -> dict: "capabilities": derive_capabilities(record), "perf": derive_perf(record, default_quant), "quants": derive_quants(record, secondary), + "default_quant_filename": downloads[default_quant]["filename"], "wer": wer, } if headline.get("metric"): diff --git a/scripts/hf_cards/gigaam-v3-ctc.yaml b/scripts/hf_cards/gigaam-v3-ctc.yaml index 1d66eac9..c7d1925d 100644 --- a/scripts/hf_cards/gigaam-v3-ctc.yaml +++ b/scripts/hf_cards/gigaam-v3-ctc.yaml @@ -29,8 +29,6 @@ tags: summary: | Offline Russian speech-to-text with greedy CTC decoding. 16-layer Conformer encoder with a 1×1 Conv1d CTC head. Output is lowercased Russian, no punctuation; 33-entry character vocabulary. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_ru source: FLEURS ru diff --git a/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml b/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml index fe746809..5dff6c82 100644 --- a/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml +++ b/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml @@ -29,8 +29,6 @@ tags: summary: | Offline Russian speech-to-text with greedy CTC decoding. 16-layer Conformer encoder with a 1×1 Conv1d CTC head. Output is cased Russian with punctuation, decoded from a 256-piece SentencePiece tokenizer. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_ru source: FLEURS ru diff --git a/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml b/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml index 1f3ab84c..8edd77f2 100644 --- a/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml +++ b/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml @@ -30,8 +30,6 @@ tags: summary: | Offline Russian speech-to-text with greedy RNN-T decoding. 16-layer Conformer encoder paired with an RNN-T transducer head. Output is cased Russian with punctuation, decoded from a 1024-piece SentencePiece tokenizer. Not a streaming model and does not translate. Short-form only (≤25 s per utterance). -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_ru source: FLEURS ru diff --git a/scripts/hf_cards/gigaam-v3-rnnt.yaml b/scripts/hf_cards/gigaam-v3-rnnt.yaml index 4b3d5694..174d6dfa 100644 --- a/scripts/hf_cards/gigaam-v3-rnnt.yaml +++ b/scripts/hf_cards/gigaam-v3-rnnt.yaml @@ -29,8 +29,6 @@ tags: summary: | Offline Russian speech-to-text with greedy RNN-T decoding. Same 16-layer Conformer encoder as the e2e variant, fine-tuned to emit lowercased Russian with no punctuation; 33-entry character vocabulary. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_ru source: FLEURS ru diff --git a/scripts/hf_cards/granite-4.0-1b-speech.yaml b/scripts/hf_cards/granite-4.0-1b-speech.yaml index c4c4aa3d..af8d186a 100644 --- a/scripts/hf_cards/granite-4.0-1b-speech.yaml +++ b/scripts/hf_cards/granite-4.0-1b-speech.yaml @@ -31,8 +31,6 @@ summary: | five other languages in either direction (en ↔ fr, en ↔ de, en ↔ es, en ↔ pt, en ↔ ja) — always via English, no direct fr↔de etc. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml b/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml index 04a4089e..2e4c5c35 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml @@ -33,8 +33,6 @@ summary: | German, Spanish, and Portuguese; ASR only (no translation, no timestamps). -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml b/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml index 61a87d5b..426fefe0 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml @@ -40,8 +40,6 @@ summary: | This variant is transcription-only: unlike the base granite-speech-4.1-2b, it does not perform speech translation. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/granite-speech-4.1-2b.yaml b/scripts/hf_cards/granite-speech-4.1-2b.yaml index eec47191..632713aa 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b.yaml @@ -32,8 +32,6 @@ summary: | (en ↔ fr, en ↔ de, en ↔ es, en ↔ pt, en ↔ ja) — always via English, no direct fr↔de etc. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/medasr.yaml b/scripts/hf_cards/medasr.yaml index ef48cb14..ec376bce 100644 --- a/scripts/hf_cards/medasr.yaml +++ b/scripts/hf_cards/medasr.yaml @@ -27,8 +27,6 @@ tags: summary: | Offline English speech-to-text optimized for medical dictation (radiology, internal medicine, family medicine). 17-layer Conformer encoder with RoPE attention, macaron FFNs, and a 512-token SentencePiece CTC head. Greedy CTC decode; no language model, no beam search. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/moonshine-base-ar.yaml b/scripts/hf_cards/moonshine-base-ar.yaml index 5de1f1cd..bbd3df07 100644 --- a/scripts/hf_cards/moonshine-base-ar.yaml +++ b/scripts/hf_cards/moonshine-base-ar.yaml @@ -27,8 +27,6 @@ summary: | STFT, no mel filterbank) and emits transcript-only output. Single-language (ar); no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_ar source: FLEURS ar test diff --git a/scripts/hf_cards/moonshine-base-ja.yaml b/scripts/hf_cards/moonshine-base-ja.yaml index 139b16d4..bf2da3cb 100644 --- a/scripts/hf_cards/moonshine-base-ja.yaml +++ b/scripts/hf_cards/moonshine-base-ja.yaml @@ -27,8 +27,6 @@ summary: | STFT, no mel filterbank) and emits transcript-only output. Single-language (ja); no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_ja source: FLEURS ja test diff --git a/scripts/hf_cards/moonshine-base-ko.yaml b/scripts/hf_cards/moonshine-base-ko.yaml index fb59846a..9844b305 100644 --- a/scripts/hf_cards/moonshine-base-ko.yaml +++ b/scripts/hf_cards/moonshine-base-ko.yaml @@ -27,8 +27,6 @@ summary: | STFT, no mel filterbank) and emits transcript-only output. Single-language (ko); no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_ko source: FLEURS ko test diff --git a/scripts/hf_cards/moonshine-base-uk.yaml b/scripts/hf_cards/moonshine-base-uk.yaml index 814bc333..f0cc8bef 100644 --- a/scripts/hf_cards/moonshine-base-uk.yaml +++ b/scripts/hf_cards/moonshine-base-uk.yaml @@ -27,8 +27,6 @@ summary: | STFT, no mel filterbank) and emits transcript-only output. Single-language (uk); no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_uk source: FLEURS uk test diff --git a/scripts/hf_cards/moonshine-base-vi.yaml b/scripts/hf_cards/moonshine-base-vi.yaml index eac24280..d81e4608 100644 --- a/scripts/hf_cards/moonshine-base-vi.yaml +++ b/scripts/hf_cards/moonshine-base-vi.yaml @@ -27,8 +27,6 @@ summary: | STFT, no mel filterbank) and emits transcript-only output. Single-language (vi); no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_vi source: FLEURS vi test diff --git a/scripts/hf_cards/moonshine-base-zh.yaml b/scripts/hf_cards/moonshine-base-zh.yaml index ccfec0e3..32c4ad60 100644 --- a/scripts/hf_cards/moonshine-base-zh.yaml +++ b/scripts/hf_cards/moonshine-base-zh.yaml @@ -27,8 +27,6 @@ summary: | STFT, no mel filterbank) and emits transcript-only output. Single-language (zh); no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_zh source: FLEURS zh test diff --git a/scripts/hf_cards/moonshine-base.yaml b/scripts/hf_cards/moonshine-base.yaml index 2851beee..950cc80f 100644 --- a/scripts/hf_cards/moonshine-base.yaml +++ b/scripts/hf_cards/moonshine-base.yaml @@ -28,8 +28,6 @@ summary: | size 416, partial RoPE 0.62). English-only; no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/moonshine-streaming-medium.yaml b/scripts/hf_cards/moonshine-streaming-medium.yaml index ee767482..ed93fb17 100644 --- a/scripts/hf_cards/moonshine-streaming-medium.yaml +++ b/scripts/hf_cards/moonshine-streaming-medium.yaml @@ -30,8 +30,6 @@ summary: | 16 kHz mono WAV and produces a transcript. No translation, no multilingual capability, no timestamps. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/moonshine-streaming-small.yaml b/scripts/hf_cards/moonshine-streaming-small.yaml index 583b6f20..87cdd04f 100644 --- a/scripts/hf_cards/moonshine-streaming-small.yaml +++ b/scripts/hf_cards/moonshine-streaming-small.yaml @@ -29,8 +29,6 @@ summary: | hidden dims (encoder 620 / decoder 512). Takes a 16 kHz mono WAV and produces a transcript. No translation, no multilingual capability, no timestamps. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/moonshine-streaming-tiny.yaml b/scripts/hf_cards/moonshine-streaming-tiny.yaml index 1c705fc5..fbd9abaa 100644 --- a/scripts/hf_cards/moonshine-streaming-tiny.yaml +++ b/scripts/hf_cards/moonshine-streaming-tiny.yaml @@ -30,8 +30,6 @@ summary: | WAV and produces a transcript. No translation, no multilingual capability, no timestamps. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/moonshine-tiny-ar.yaml b/scripts/hf_cards/moonshine-tiny-ar.yaml index edd7e703..fedb0b4e 100644 --- a/scripts/hf_cards/moonshine-tiny-ar.yaml +++ b/scripts/hf_cards/moonshine-tiny-ar.yaml @@ -27,8 +27,6 @@ summary: | STFT, no mel filterbank) and emits transcript-only output. Single-language (ar); no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_ar source: FLEURS ar test diff --git a/scripts/hf_cards/moonshine-tiny-ja.yaml b/scripts/hf_cards/moonshine-tiny-ja.yaml index 7d41ffef..37646278 100644 --- a/scripts/hf_cards/moonshine-tiny-ja.yaml +++ b/scripts/hf_cards/moonshine-tiny-ja.yaml @@ -27,8 +27,6 @@ summary: | STFT, no mel filterbank) and emits transcript-only output. Single-language (ja); no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_ja source: FLEURS ja test diff --git a/scripts/hf_cards/moonshine-tiny-ko.yaml b/scripts/hf_cards/moonshine-tiny-ko.yaml index 89d147a8..219cc640 100644 --- a/scripts/hf_cards/moonshine-tiny-ko.yaml +++ b/scripts/hf_cards/moonshine-tiny-ko.yaml @@ -27,8 +27,6 @@ summary: | STFT, no mel filterbank) and emits transcript-only output. Single-language (ko); no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_ko source: FLEURS ko test diff --git a/scripts/hf_cards/moonshine-tiny-uk.yaml b/scripts/hf_cards/moonshine-tiny-uk.yaml index f93f4907..13188e0b 100644 --- a/scripts/hf_cards/moonshine-tiny-uk.yaml +++ b/scripts/hf_cards/moonshine-tiny-uk.yaml @@ -27,8 +27,6 @@ summary: | STFT, no mel filterbank) and emits transcript-only output. Single-language (uk); no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_uk source: FLEURS uk test diff --git a/scripts/hf_cards/moonshine-tiny-vi.yaml b/scripts/hf_cards/moonshine-tiny-vi.yaml index a99564e3..7f58d85c 100644 --- a/scripts/hf_cards/moonshine-tiny-vi.yaml +++ b/scripts/hf_cards/moonshine-tiny-vi.yaml @@ -27,8 +27,6 @@ summary: | STFT, no mel filterbank) and emits transcript-only output. Single-language (vi); no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_vi source: FLEURS vi test diff --git a/scripts/hf_cards/moonshine-tiny-zh.yaml b/scripts/hf_cards/moonshine-tiny-zh.yaml index ea3c0de3..9386fe84 100644 --- a/scripts/hf_cards/moonshine-tiny-zh.yaml +++ b/scripts/hf_cards/moonshine-tiny-zh.yaml @@ -27,8 +27,6 @@ summary: | STFT, no mel filterbank) and emits transcript-only output. Single-language (zh); no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_zh source: FLEURS zh test diff --git a/scripts/hf_cards/moonshine-tiny.yaml b/scripts/hf_cards/moonshine-tiny.yaml index 35f3091f..bf7840f6 100644 --- a/scripts/hf_cards/moonshine-tiny.yaml +++ b/scripts/hf_cards/moonshine-tiny.yaml @@ -26,8 +26,6 @@ summary: | three-layer Conv1d stem (no STFT, no mel) and emits transcript-only output. English-only; no translation, no language detection, no timestamps. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/moss-transcribe-diarize.yaml b/scripts/hf_cards/moss-transcribe-diarize.yaml index aff0ca85..db98b9e4 100644 --- a/scripts/hf_cards/moss-transcribe-diarize.yaml +++ b/scripts/hf_cards/moss-transcribe-diarize.yaml @@ -31,8 +31,6 @@ summary: | Speaker attribution is opt-in (`--diarize`) and returns structured speaker ids/turns. Not a streaming model. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml b/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml index f096c8bc..91884af2 100644 --- a/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml +++ b/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml @@ -30,8 +30,6 @@ tags: summary: | Offline and cache-aware streaming English speech-to-text with punctuation and capitalization. A 0.6B-parameter cache-aware streaming FastConformer encoder with an RNN-T transducer decoder, fine-tuned from nvidia/nemotron-speech-streaming-en-0.6b. Plain GGUFs run the single_speaker_mode ASR path, while bundle GGUFs under `bundle/` embed nvidia/diar_streaming_sortformer_4spk-v2.1 and, with `--diarize`, transcribe up to four overlapping speakers into a speaker-tagged transcript. The encoder preserves the upstream att_context_size=[70, 13] (1.12s) cache-aware attention mask; all four latency lookahead settings are selectable. -default_quant_index: 2 # Q8_0 - metrics: cpwer_ami_ihm_test: bundle_f32_kernel: 19.35 diff --git a/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml b/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml index 6e3fcd1f..e8ce6ee3 100644 --- a/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml +++ b/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml @@ -28,8 +28,6 @@ tags: summary: | Multilingual speech-to-text across 32 supported language-locales (the model's tokenizer recognizes 40, but 8 are adaptation-ready and need fine-tuning) with punctuation and capitalization. A 0.6B-parameter cache-aware streaming FastConformer encoder with a prompt-conditioned RNN-T transducer decoder; the target language is selected per call (--language en-US, fr-FR, de-DE, ...) and an auto mode emits a tag. Ships both the offline path (att_context_size=[56, 13], 1.12s, headline accuracy) and runtime-selectable chunked streaming (--stream-chunk-ms 1120 --stream-att-right {0,3,6,13}). -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_en source: FLEURS test en (en-US), offline att_context_size=[56, 13] diff --git a/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml b/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml index 7b2904d0..5f1902d1 100644 --- a/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml +++ b/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml @@ -27,8 +27,6 @@ tags: summary: | English speech-to-text with punctuation and capitalization. A 0.6B-parameter cache-aware streaming FastConformer encoder with an RNN-T transducer decoder. Runs in both offline and cache-aware streaming modes. The encoder preserves the upstream att_context_size=[70, 13] (1.12s) cache-aware attention mask end-to-end. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean, offline notes: | diff --git a/scripts/hf_cards/parakeet-ctc-0.6b.yaml b/scripts/hf_cards/parakeet-ctc-0.6b.yaml index dfa05bf4..88d1aadc 100644 --- a/scripts/hf_cards/parakeet-ctc-0.6b.yaml +++ b/scripts/hf_cards/parakeet-ctc-0.6b.yaml @@ -25,8 +25,6 @@ tags: summary: | Offline English speech-to-text with greedy CTC decoding. A 0.6B-parameter FastConformer-Large encoder with a linear CTC head — the simplest and fastest decoder in the parakeet family. Output is lowercase, no punctuation. Not a streaming model and does not translate. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/parakeet-ctc-1.1b.yaml b/scripts/hf_cards/parakeet-ctc-1.1b.yaml index e4890094..8209b534 100644 --- a/scripts/hf_cards/parakeet-ctc-1.1b.yaml +++ b/scripts/hf_cards/parakeet-ctc-1.1b.yaml @@ -25,8 +25,6 @@ tags: summary: | Offline English speech-to-text with greedy CTC decoding. A 1.1B-parameter FastConformer-XL encoder with a linear CTC head. Output is lowercase, no punctuation. Not a streaming model and does not translate. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/parakeet-primeline.yaml b/scripts/hf_cards/parakeet-primeline.yaml index ee84b4f7..22d01a7c 100644 --- a/scripts/hf_cards/parakeet-primeline.yaml +++ b/scripts/hf_cards/parakeet-primeline.yaml @@ -32,8 +32,6 @@ summary: | the other 24 v3 languages with correct per-language casing and punctuation. Not a streaming model and does not translate. -default_quant_index: 2 # Q8_0 - wer: metadata_key: fleurs_de source: FLEURS de test diff --git a/scripts/hf_cards/parakeet-rnnt-0.6b.yaml b/scripts/hf_cards/parakeet-rnnt-0.6b.yaml index b5b0934a..b299e4d1 100644 --- a/scripts/hf_cards/parakeet-rnnt-0.6b.yaml +++ b/scripts/hf_cards/parakeet-rnnt-0.6b.yaml @@ -25,8 +25,6 @@ tags: summary: | Offline English speech-to-text with greedy RNN-T decoding. A 0.6B-parameter FastConformer-Large encoder with an RNN-T transducer decoder. Output is lowercase, no punctuation. Not a streaming model and does not translate. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/parakeet-rnnt-1.1b.yaml b/scripts/hf_cards/parakeet-rnnt-1.1b.yaml index c91d202b..55ce2d33 100644 --- a/scripts/hf_cards/parakeet-rnnt-1.1b.yaml +++ b/scripts/hf_cards/parakeet-rnnt-1.1b.yaml @@ -25,8 +25,6 @@ tags: summary: | Offline English speech-to-text with greedy RNN-T decoding. A 1.1B-parameter FastConformer-XL encoder with an RNN-T transducer decoder. Output is lowercase, no punctuation. Not a streaming model and does not translate. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml b/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml index 3aa55e75..90cf9b62 100644 --- a/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml +++ b/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml @@ -29,8 +29,6 @@ summary: | with optional token-level timestamps. Not a streaming model; no multilingual capability (see v3 for that). -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean # metadata_key: librispeech_test_clean # names the wer_ field; override when scored on another corpus diff --git a/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml b/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml index ba414d62..0e06cafb 100644 --- a/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml +++ b/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml @@ -30,8 +30,6 @@ summary: | a 16 kHz mono WAV and produces a transcript with optional token-level timestamps. Not a streaming model and does not translate. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/parakeet-tdt-1.1b.yaml b/scripts/hf_cards/parakeet-tdt-1.1b.yaml index fde8dbd8..b753a60d 100644 --- a/scripts/hf_cards/parakeet-tdt-1.1b.yaml +++ b/scripts/hf_cards/parakeet-tdt-1.1b.yaml @@ -26,8 +26,6 @@ tags: summary: | Offline English speech-to-text. A 1.1B-parameter FastConformer-XL encoder with a TDT/RNNT transducer decoder. Takes a 16 kHz mono WAV and produces a transcript with optional token-level timestamps. Not a streaming model and does not translate. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml b/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml index 235e64cc..022e5fe9 100644 --- a/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml +++ b/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml @@ -26,8 +26,6 @@ tags: summary: | Offline English speech-to-text with punctuation and capitalization. A 1.1B-parameter FastConformer-XL encoder with a TDT/RNNT transducer decoder (the auxiliary CTC head from the upstream hybrid checkpoint is dropped at convert time). Not a streaming model and does not translate. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml b/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml index a7c92e5c..19bfcffb 100644 --- a/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml +++ b/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml @@ -26,8 +26,6 @@ tags: summary: | Offline English speech-to-text with punctuation and capitalization. A 110M-parameter FastConformer encoder with a TDT/RNNT transducer decoder (the auxiliary CTC head from the upstream hybrid checkpoint is dropped at convert time). Not a streaming model and does not translate. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/parakeet-unified-en-0.6b.yaml b/scripts/hf_cards/parakeet-unified-en-0.6b.yaml index fbac9c55..d3cd5575 100644 --- a/scripts/hf_cards/parakeet-unified-en-0.6b.yaml +++ b/scripts/hf_cards/parakeet-unified-en-0.6b.yaml @@ -25,8 +25,6 @@ tags: summary: | English speech-to-text with punctuation and capitalization. A 0.6B-parameter FastConformer encoder with an RNN-T transducer decoder, trained as a 'unified' streaming/offline model. This port runs the model in both offline and buffered streaming modes. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean, offline notes: | diff --git a/scripts/hf_cards/qwen3-asr-0.6b.yaml b/scripts/hf_cards/qwen3-asr-0.6b.yaml index 6f177e51..c3ae90cf 100644 --- a/scripts/hf_cards/qwen3-asr-0.6b.yaml +++ b/scripts/hf_cards/qwen3-asr-0.6b.yaml @@ -29,8 +29,6 @@ summary: | across 30 languages and emits the transcript in that language. Takes a 16 kHz mono WAV; explicit language hints are not supported at this time. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/qwen3-asr-1.7b.yaml b/scripts/hf_cards/qwen3-asr-1.7b.yaml index 3569f5d9..abb2a981 100644 --- a/scripts/hf_cards/qwen3-asr-1.7b.yaml +++ b/scripts/hf_cards/qwen3-asr-1.7b.yaml @@ -31,8 +31,6 @@ summary: | Takes a 16 kHz mono WAV; explicit language hints are not supported at this time. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/sensevoice-small.yaml b/scripts/hf_cards/sensevoice-small.yaml index fe75e7bb..e7898729 100644 --- a/scripts/hf_cards/sensevoice-small.yaml +++ b/scripts/hf_cards/sensevoice-small.yaml @@ -33,8 +33,6 @@ summary: | audio-event tags, and an inverse-text-normalization flag — opt-in via `--raw-tokens` and `--itn`. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/template.md.j2 b/scripts/hf_cards/template.md.j2 index e4d4f259..4bbb9e01 100644 --- a/scripts/hf_cards/template.md.j2 +++ b/scripts/hf_cards/template.md.j2 @@ -64,7 +64,7 @@ Run on a 16 kHz mono WAV: ```bash build/bin/transcribe-cli \ - -m {{ quants[default_quant_index].filename }} \ + -m {{ default_quant_filename }} \ input.wav ``` diff --git a/scripts/hf_cards/voxtral-mini-3b-2507.yaml b/scripts/hf_cards/voxtral-mini-3b-2507.yaml index abf6e0a5..6fa67a2b 100644 --- a/scripts/hf_cards/voxtral-mini-3b-2507.yaml +++ b/scripts/hf_cards/voxtral-mini-3b-2507.yaml @@ -32,8 +32,6 @@ summary: | same encoder, projector, log-mel frontend, and tekken tokenizer, with a 3B decoder in place of Mistral-Small-24B. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml b/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml index 44553c02..3b77e0b6 100644 --- a/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml +++ b/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml @@ -35,8 +35,6 @@ summary: | from the offline Voxtral 2507 family — own arch, streaming frontend, causal encoder, additive audio fusion. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/voxtral-small-24b-2507.yaml b/scripts/hf_cards/voxtral-small-24b-2507.yaml index 04a0a4ce..065fd934 100644 --- a/scripts/hf_cards/voxtral-small-24b-2507.yaml +++ b/scripts/hf_cards/voxtral-small-24b-2507.yaml @@ -30,8 +30,6 @@ summary: | transcript via greedy decoding. The larger sibling of Voxtral Mini 3B — same encoder, projector, frontend, and tokenizer, with a scaled-up decoder. -default_quant_index: 2 # Q8_0 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/whisper-base.en.yaml b/scripts/hf_cards/whisper-base.en.yaml index 17e201a3..04784d03 100644 --- a/scripts/hf_cards/whisper-base.en.yaml +++ b/scripts/hf_cards/whisper-base.en.yaml @@ -23,8 +23,6 @@ tags: summary: | OpenAI Whisper base.en — converted to GGUF for transcribe.cpp. English-only; faster than the multilingual model at the same size. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. -default_quant_index: 2 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/whisper-base.yaml b/scripts/hf_cards/whisper-base.yaml index 941187c8..7f4ef0f5 100644 --- a/scripts/hf_cards/whisper-base.yaml +++ b/scripts/hf_cards/whisper-base.yaml @@ -22,8 +22,6 @@ tags: summary: | OpenAI Whisper base — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). Encoder-decoder transformer; 30-second windows with chunked long-form decoding. -default_quant_index: 2 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/whisper-large-v2.yaml b/scripts/hf_cards/whisper-large-v2.yaml index 6293ef3a..81d672c4 100644 --- a/scripts/hf_cards/whisper-large-v2.yaml +++ b/scripts/hf_cards/whisper-large-v2.yaml @@ -22,8 +22,6 @@ tags: summary: | OpenAI Whisper large-v2 — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). Encoder-decoder transformer; 30-second windows with chunked long-form decoding. -default_quant_index: 2 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/whisper-large-v3-turbo.yaml b/scripts/hf_cards/whisper-large-v3-turbo.yaml index c8f564e1..bb44f736 100644 --- a/scripts/hf_cards/whisper-large-v3-turbo.yaml +++ b/scripts/hf_cards/whisper-large-v3-turbo.yaml @@ -22,8 +22,6 @@ tags: summary: | OpenAI Whisper large-v3-turbo — converted to GGUF for transcribe.cpp. Multilingual transcription and language detection; unlike the full large-v3 model, this turbo variant does not support speech translation. The v3 family adds Cantonese (yue) and uses a 128-bin mel input. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. -default_quant_index: 1 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/whisper-large-v3.yaml b/scripts/hf_cards/whisper-large-v3.yaml index 4454c6c7..36ea8a0a 100644 --- a/scripts/hf_cards/whisper-large-v3.yaml +++ b/scripts/hf_cards/whisper-large-v3.yaml @@ -22,8 +22,6 @@ tags: summary: | OpenAI Whisper large-v3 — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). v3 family adds Cantonese (yue) and uses a 128-bin mel input. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. -default_quant_index: 1 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/whisper-large.yaml b/scripts/hf_cards/whisper-large.yaml index 2701193a..9598884c 100644 --- a/scripts/hf_cards/whisper-large.yaml +++ b/scripts/hf_cards/whisper-large.yaml @@ -22,8 +22,6 @@ tags: summary: | OpenAI Whisper large — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). Encoder-decoder transformer; 30-second windows with chunked long-form decoding. -default_quant_index: 2 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/whisper-medium.en.yaml b/scripts/hf_cards/whisper-medium.en.yaml index d43e5a76..7b957b73 100644 --- a/scripts/hf_cards/whisper-medium.en.yaml +++ b/scripts/hf_cards/whisper-medium.en.yaml @@ -23,8 +23,6 @@ tags: summary: | OpenAI Whisper medium.en — converted to GGUF for transcribe.cpp. English-only; faster than the multilingual model at the same size. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. -default_quant_index: 2 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/whisper-medium.yaml b/scripts/hf_cards/whisper-medium.yaml index 4a57c780..43d88ed7 100644 --- a/scripts/hf_cards/whisper-medium.yaml +++ b/scripts/hf_cards/whisper-medium.yaml @@ -22,8 +22,6 @@ tags: summary: | OpenAI Whisper medium — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). Encoder-decoder transformer; 30-second windows with chunked long-form decoding. -default_quant_index: 2 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/whisper-small.en.yaml b/scripts/hf_cards/whisper-small.en.yaml index 42bdc95c..f8899d79 100644 --- a/scripts/hf_cards/whisper-small.en.yaml +++ b/scripts/hf_cards/whisper-small.en.yaml @@ -23,8 +23,6 @@ tags: summary: | OpenAI Whisper small.en — converted to GGUF for transcribe.cpp. English-only; faster than the multilingual model at the same size. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. -default_quant_index: 2 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/whisper-small.yaml b/scripts/hf_cards/whisper-small.yaml index 926f0ba6..b8cca55f 100644 --- a/scripts/hf_cards/whisper-small.yaml +++ b/scripts/hf_cards/whisper-small.yaml @@ -22,8 +22,6 @@ tags: summary: | OpenAI Whisper small — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). Encoder-decoder transformer; 30-second windows with chunked long-form decoding. -default_quant_index: 2 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/whisper-tiny.en.yaml b/scripts/hf_cards/whisper-tiny.en.yaml index 433a38c3..7f3af33f 100644 --- a/scripts/hf_cards/whisper-tiny.en.yaml +++ b/scripts/hf_cards/whisper-tiny.en.yaml @@ -23,8 +23,6 @@ tags: summary: | OpenAI Whisper tiny.en — converted to GGUF for transcribe.cpp. English-only; faster than the multilingual model at the same size. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. -default_quant_index: 2 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/hf_cards/whisper-tiny.yaml b/scripts/hf_cards/whisper-tiny.yaml index 8cf5dbf6..8d1eed3b 100644 --- a/scripts/hf_cards/whisper-tiny.yaml +++ b/scripts/hf_cards/whisper-tiny.yaml @@ -22,8 +22,6 @@ tags: summary: | OpenAI Whisper tiny — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). Encoder-decoder transformer; 30-second windows with chunked long-form decoding. -default_quant_index: 2 - wer: source: LibriSpeech test-clean notes: | diff --git a/scripts/lib/gguf_common.py b/scripts/lib/gguf_common.py index 6b6b60d1..98091f6f 100644 --- a/scripts/lib/gguf_common.py +++ b/scripts/lib/gguf_common.py @@ -323,13 +323,47 @@ def move_bulk_metadata_last(writer) -> list[str]: return moved +# The capability KVs the loader reads (read_capability_kv in +# src/transcribe-meta.cpp). Absence is not falsity there: a missing key leaves +# the family default in place, which is how a model that does not translate +# came to advertise that it does. Every file therefore states all four. +CAPABILITY_KV_KEYS = ( + "stt.capability.translate", + "stt.capability.lang_detect", + "stt.capability.streaming", + "stt.capability.speaker_diarization", +) + + +def declare_missing_capabilities(writer) -> list[str]: + """Write `false` for any capability KV the converter did not set. + + False is the honest default: a converter that knows a model translates, + streams, or diarizes says so explicitly, and every family whose C++ default + is true already writes that key. Returns the keys filled in. + """ + filled = [] + for key in CAPABILITY_KV_KEYS: + if any(key in shard for shard in writer.kv_data): + continue + writer.kv_data[0][key] = gguf.GGUFValue(value=False, type=gguf.GGUFValueType.BOOL) + filled.append(key) + return filled + + class _BulkLastGGUFWriter(gguf.GGUFWriter): - """GGUFWriter that relocates the bulk tokenizer KVs to the trailer at write - time. Hooked at write_kv_data_to_file (not write_header_to_file): the header - pass calls add_shard_kv_data(), which appends split.* scalar KVs, so we must - reorder *after* those are present but immediately before the KV dict is - serialized. The header only writes the KV count, which reordering leaves - unchanged.""" + """GGUFWriter that declares every capability KV and relocates the bulk + tokenizer KVs to the trailer at write time. Hooked at write_kv_data_to_file + (not write_header_to_file): the header pass calls add_shard_kv_data(), which + appends split.* scalar KVs, so we must reorder *after* those are present but + immediately before the KV dict is serialized. The header only writes the KV + count, so the capability fill runs before it and the reorder after.""" + + def write_header_to_file(self, path=None) -> None: + # Before the header: it writes the KV count, so a key added later + # would be silently dropped by every reader. + declare_missing_capabilities(self) + super().write_header_to_file(path) def write_kv_data_to_file(self) -> None: move_bulk_metadata_last(self) From afec283f3df449e8adfec948b92bf16f51d62eec Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sun, 13 Sep 2026 05:16:59 -0700 Subject: [PATCH 10/24] move prose to yaml --- docs/_templates/model-card.md.j2 | 4 +- docs/models/canary-180m-flash.md | 27 ++++++--- docs/models/canary-1b-flash.md | 21 +++++-- docs/models/canary-1b-v2.md | 26 +++++--- docs/models/canary-1b.md | 31 ++++++---- docs/models/canary-qwen-2.5b.md | 38 +++++++----- docs/models/cohere-transcribe-03-2026.md | 25 +++++--- .../cohere-transcribe-arabic-07-2026.md | 33 +++++++---- .../diar_streaming_sortformer_4spk-v2.1.md | 31 ++++++---- docs/models/fun-asr-mlt-nano-2512.md | 47 +++++++++------ docs/models/fun-asr-nano-2512.md | 34 +++++++---- docs/models/gigaam-v3-ctc.md | 12 ++-- docs/models/gigaam-v3-e2e-ctc.md | 12 ++-- docs/models/gigaam-v3-e2e-rnnt.md | 12 ++-- docs/models/gigaam-v3-rnnt.md | 12 ++-- docs/models/granite-4.0-1b-speech.md | 27 ++++++--- docs/models/granite-speech-4.1-2b-nar.md | 39 +++++++----- docs/models/granite-speech-4.1-2b-plus.md | 42 +++++++++---- docs/models/granite-speech-4.1-2b.md | 30 ++++++---- docs/models/medasr.md | 12 ++-- docs/models/moonshine-base.md | 36 ++++++----- docs/models/moonshine-streaming-medium.md | 36 ++++++----- docs/models/moonshine-streaming-small.md | 27 +++++---- docs/models/moonshine-streaming-tiny.md | 20 +++++-- docs/models/moonshine-tiny.md | 31 +++++----- docs/models/moss-transcribe-diarize.md | 56 ++++++++++-------- .../multitalker-parakeet-streaming-0.6b-v1.md | 39 ++++++++---- .../models/nemotron-3.5-asr-streaming-0.6b.md | 20 +++---- .../nemotron-speech-streaming-en-0.6b.md | 16 ++--- docs/models/parakeet-ctc-0.6b.md | 13 ++-- docs/models/parakeet-ctc-1.1b.md | 12 ++-- docs/models/parakeet-primeline.md | 41 +++++++++---- docs/models/parakeet-rnnt-0.6b.md | 12 ++-- docs/models/parakeet-rnnt-1.1b.md | 12 ++-- docs/models/parakeet-tdt-0.6b-v2.md | 22 ++++--- docs/models/parakeet-tdt-0.6b-v3.md | 20 ++++--- docs/models/parakeet-tdt-1.1b.md | 12 ++-- docs/models/parakeet-tdt_ctc-1.1b.md | 13 ++-- docs/models/parakeet-tdt_ctc-110m.md | 13 ++-- docs/models/parakeet-unified-en-0.6b.md | 12 ++-- docs/models/qwen3-asr-0.6b.md | 23 ++++++-- docs/models/qwen3-asr-1.7b.md | 29 ++++++--- docs/models/sensevoice-small.md | 32 ++++++---- docs/models/voxtral-mini-3b-2507.md | 34 +++++++---- docs/models/voxtral-small-24b-2507.md | 36 +++++------ docs/models/whisper-base.en.md | 12 ++-- docs/models/whisper-base.md | 12 ++-- docs/models/whisper-large-v2.md | 12 ++-- docs/models/whisper-large-v3-turbo.md | 12 ++-- docs/models/whisper-large-v3.md | 12 ++-- docs/models/whisper-large.md | 12 ++-- docs/models/whisper-medium.en.md | 12 ++-- docs/models/whisper-medium.md | 12 ++-- docs/models/whisper-small.en.md | 12 ++-- docs/models/whisper-small.md | 12 ++-- docs/models/whisper-tiny.en.md | 12 ++-- docs/models/whisper-tiny.md | 12 ++-- scripts/catalog/common.py | 1 + scripts/catalog/render.py | 59 +++++++++++++++++-- scripts/hf_cards/README.md | 3 + 60 files changed, 878 insertions(+), 461 deletions(-) diff --git a/docs/_templates/model-card.md.j2 b/docs/_templates/model-card.md.j2 index 57ab7988..e2373082 100644 --- a/docs/_templates/model-card.md.j2 +++ b/docs/_templates/model-card.md.j2 @@ -37,8 +37,8 @@ #} # {{ display_name }} -{{ hf_repo | replace("'", "\"") }}'s [`{{ hf_repo }}`](https://huggingface.co/{{ hf_repo }}) -ported to transcribe.cpp. {{ one_liner }} + + ## What it's for diff --git a/docs/models/canary-180m-flash.md b/docs/models/canary-180m-flash.md index 71d92b81..e9176851 100644 --- a/docs/models/canary-180m-flash.md +++ b/docs/models/canary-180m-flash.md @@ -1,8 +1,17 @@ # Canary 180M Flash -NVIDIA's [`nvidia/canary-180m-flash`](https://huggingface.co/nvidia/canary-180m-flash) -ported to transcribe.cpp. A 182M-parameter multitask AED with a 17-layer -FastConformer encoder and a 4-layer Transformer decoder. + +Upstream: [`nvidia/canary-180m-flash`](https://huggingface.co/nvidia/canary-180m-flash) at [`b12ab41`](https://huggingface.co/nvidia/canary-180m-flash/commit/b12ab41). + +Offline multilingual speech-to-text and translation. A 182M-parameter +multitask AED with a 17-layer FastConformer encoder and a 4-layer +Transformer decoder. Supports automatic speech recognition in English, +German, Spanish, and French, and bidirectional EN↔{DE, ES, FR} +translation. Takes a +16 kHz mono WAV and produces a transcript. Not a streaming model; +word/segment timestamps are upstream-experimental and not exposed in +the v1 port. + ## What it's for @@ -38,12 +47,14 @@ pinned 2026-05-08. | Q4_K_M | [canary-180m-flash-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-Q4_K_M.gguf) | 139 MB | 1.93% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.94%. -On the same wavs, NeMo's reference run produces 1.93% — one substitution -difference out of ~27k reference words — so the F32 port matches the -reference framework at the noise floor. NVIDIA's self-reported number on -the upstream model card is 1.87% +On the same wavs, NeMo's reference run produces 1.93% (one substitution +difference out of ~27k reference words), so the F32 port matches the +reference framework at the noise floor. NVIDIA's self-reported number +on the upstream model card is 1.87%. + ## Quick Start diff --git a/docs/models/canary-1b-flash.md b/docs/models/canary-1b-flash.md index 12761d0f..be44f7b7 100644 --- a/docs/models/canary-1b-flash.md +++ b/docs/models/canary-1b-flash.md @@ -1,8 +1,17 @@ # Canary 1B Flash -NVIDIA's [`nvidia/canary-1b-flash`](https://huggingface.co/nvidia/canary-1b-flash) -ported to transcribe.cpp. An 883M-parameter multitask AED with a 32-layer -FastConformer encoder and a 4-layer Transformer decoder. + +Upstream: [`nvidia/canary-1b-flash`](https://huggingface.co/nvidia/canary-1b-flash) at [`a9a55e0`](https://huggingface.co/nvidia/canary-1b-flash/commit/a9a55e0). + +Offline multilingual speech-to-text and translation. An 883M-parameter +multitask AED with a 32-layer FastConformer encoder and a 4-layer +Transformer decoder. Supports automatic speech recognition in English, +German, Spanish, and French, and bidirectional EN↔{DE, ES, FR} +translation. Takes a +16 kHz mono WAV and produces a transcript. Not a streaming model; +word/segment timestamps are upstream-experimental and not exposed in +the v1 port. + ## What it's for @@ -34,9 +43,11 @@ pinned 2026-05-08. | Q4_K_M | [canary-1b-flash-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-Q4_K_M.gguf) | 677 MB | 1.59% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.62%. -NVIDIA's self-reported number on the upstream model card is 1.48% +NVIDIA's self-reported number on the upstream model card is 1.48%. + ## Quick Start diff --git a/docs/models/canary-1b-v2.md b/docs/models/canary-1b-v2.md index 04afdb14..c5d86612 100644 --- a/docs/models/canary-1b-v2.md +++ b/docs/models/canary-1b-v2.md @@ -1,9 +1,17 @@ # Canary 1B v2 -NVIDIA's [`nvidia/canary-1b-v2`](https://huggingface.co/nvidia/canary-1b-v2) -ported to transcribe.cpp. A 978M-parameter multitask AED with a 32-layer -FastConformer encoder and an 8-layer Transformer decoder, covering 25 -European languages. + +Upstream: [`nvidia/canary-1b-v2`](https://huggingface.co/nvidia/canary-1b-v2) at [`87bc526`](https://huggingface.co/nvidia/canary-1b-v2/commit/87bc526). + +Offline multilingual speech-to-text and translation across 25 European +languages. A 978M-parameter multitask AED with a 32-layer FastConformer +encoder and an 8-layer Transformer decoder. Supports automatic speech +recognition for any of the 25 supported languages, plus translation +between supported language pairs (per the upstream model card). Takes +a 16 kHz mono WAV and produces a transcript. Not a streaming model; +word and segment timestamps from the upstream model are not exposed in +the v1 port. + ## What it's for @@ -46,11 +54,13 @@ pinned 2026-05-08. | Q4_K_M | [canary-1b-v2-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-Q4_K_M.gguf) | 735 MB | 1.91% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.92%. -NVIDIA's self-reported number on the upstream model card is 2.18%; our -F32 port comes in slightly under upstream (Δ −0.26pp) and is likely -down to scoring differences. +NVIDIA's self-reported number on the upstream model card is 2.18%; +our F32 port comes in slightly under the upstream-reported number +(Δ −0.26pp) and is likely down to scoring differences. + ## Quick Start diff --git a/docs/models/canary-1b.md b/docs/models/canary-1b.md index eb21647d..b1dea255 100644 --- a/docs/models/canary-1b.md +++ b/docs/models/canary-1b.md @@ -1,14 +1,17 @@ # Canary 1B -NVIDIA's [`nvidia/canary-1b`](https://huggingface.co/nvidia/canary-1b) -ported to transcribe.cpp. A 1B-parameter multitask AED with a 24-layer -FastConformer encoder and a 24-layer Transformer decoder — the original -canary release. - -> **License: CC-BY-NC-4.0 (non-commercial only).** This is the only -> canary variant under a non-commercial license. Every shipped GGUF -> carries `general.license: CC-BY-NC-4.0` in its KV metadata so -> downstream tooling can detect this without re-reading the model card. + +Upstream: [`nvidia/canary-1b`](https://huggingface.co/nvidia/canary-1b) at [`1698acf`](https://huggingface.co/nvidia/canary-1b/commit/1698acf). + +Offline multilingual speech-to-text and translation. A 1B-parameter +multitask AED with a 24-layer FastConformer encoder and a 24-layer +Transformer decoder — the original canary release. Supports automatic +speech recognition in English, German, Spanish, and French, and +translation between supported pairs. Takes a 16 kHz mono WAV and +produces a transcript. Not a streaming model. +**License: CC-BY-NC-4.0 (non-commercial only)** — the only canary +variant under a non-commercial license. + ## What it's for @@ -38,11 +41,13 @@ pinned 2026-05-08. | Q4_K_M | [canary-1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-Q4_K_M.gguf) | 730 MB | 1.55% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding and no external LM. F32 reference baseline: 1.55%. -NVIDIA's self-reported number on the upstream model card is 1.48%. -Likely this is due to differences in how we score WER based on the results -we have from Canary 180m. +NVIDIA's self-reported number on the upstream model card is 1.48%; +likely this is due to differences in how we score WER, based on the +results we have from canary-180m-flash. + ## Quick Start diff --git a/docs/models/canary-qwen-2.5b.md b/docs/models/canary-qwen-2.5b.md index fce2cc70..8ebe1236 100644 --- a/docs/models/canary-qwen-2.5b.md +++ b/docs/models/canary-qwen-2.5b.md @@ -1,11 +1,15 @@ # Canary-Qwen 2.5B -NVIDIA's [`nvidia/canary-qwen-2.5b`](https://huggingface.co/nvidia/canary-qwen-2.5b) -ported to transcribe.cpp. A NeMo SALM (Speech-Augmented Language Model): -a 32-layer FastConformer audio encoder (`d_model=1024`, 16 heads) feeds + +Upstream: [`nvidia/canary-qwen-2.5b`](https://huggingface.co/nvidia/canary-qwen-2.5b) at [`b1469e1bba1cfe140205529c79c434ca47180960`](https://huggingface.co/nvidia/canary-qwen-2.5b/commit/b1469e1bba1cfe140205529c79c434ca47180960). + +Offline English speech-to-text. NeMo SALM (Speech-Augmented Language +Model): a FastConformer audio encoder (32 layers, `d_model=1024`) feeds audio embeddings into a Qwen3-1.7B causal LM (28 layers, -`hidden_size=2048`, `intermediate_size=6144`) via audio-token injection -at a sentinel position in the prompt. +`hidden_size=2048`) via audio-token injection at a sentinel position in +the prompt. English only. Takes a 16 kHz mono WAV and produces a +transcript via greedy decoding. + ## What it's for @@ -43,16 +47,20 @@ exact per-session value. See the [input-length contract](../input-limits.md). | Q4_K_M | [canary-qwen-2.5b-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-Q4_K_M.gguf) | 1.74 GB | 1.63% | -WER measured on the full LibriSpeech `test-clean` split (2620 utterances) -with the Whisper-style English text normalizer and jiwer 3.x. The -same-machine NeMo SALM reference run (CPU torch, dither=0.0, greedy -`model.generate`) lands at **1.61%** with 95% bootstrap CI [1.47%, -1.75%]; NVIDIA's published number is 1.60% (within the same CI). All six -GGUF presets land at exactly 1.63% (`+0.02pp` over our same-machine REF -run). The remaining `+0.02pp` C++ vs REF gap is BF16 weight-precision -cascade noise: of 2620 utterances, only 21 (0.8%) differ post-normalizer, -all classic small-margin token flips (homophones, word-boundary flips, -function-word substitutions). + +WER measured on the full LibriSpeech `test-clean` split (2620 English +utterances) with the Whisper-style English text normalizer and jiwer +3.x, on the metal backend of an Apple M4. The same-machine NeMo SALM +reference run (CPU torch, dither=0.0, greedy `model.generate`) lands +at **1.61%** with 95% bootstrap CI [1.47%, 1.75%]: `0.01` above +NVIDIA's published 1.60% but well within statistical noise. All six +GGUF presets land at exactly 1.63% (`+0.02` over our reference run, +same CI band). Investigation of the worst per-utterance differences +shows scattered token-level noise consistent with BF16 weight +precision (homophones, word-boundary flips, function-word +substitutions). Reproduce with `scripts/wer/run.py` + +`scripts/wer/score.py`. + ## Quick Start diff --git a/docs/models/cohere-transcribe-03-2026.md b/docs/models/cohere-transcribe-03-2026.md index 5dee9459..690cb201 100644 --- a/docs/models/cohere-transcribe-03-2026.md +++ b/docs/models/cohere-transcribe-03-2026.md @@ -1,8 +1,14 @@ # Cohere Transcribe 03-2026 -Cohere's [`CohereLabs/cohere-transcribe-03-2026`](https://huggingface.co/CohereLabs/cohere-transcribe-03-2026) -ported to transcribe.cpp. A Conformer encoder with a Transformer encoder-decoder -head (cross-attention, tied token embedding). + +Upstream: [`CohereLabs/cohere-transcribe-03-2026`](https://huggingface.co/CohereLabs/cohere-transcribe-03-2026) at [`76b8b23`](https://huggingface.co/CohereLabs/cohere-transcribe-03-2026/commit/76b8b23). + +Offline multilingual speech-to-text covering 14 languages (English, French, +German, Spanish, Italian, Portuguese, Dutch, Polish, Greek, Arabic, Japanese, +Chinese, Vietnamese, Korean). A Conformer encoder with a Transformer +encoder-decoder head (cross-attention, tied token embedding). Takes a 16 kHz +mono WAV and produces a transcript. Decoding is autoregressive. + ## What it's for @@ -39,11 +45,14 @@ it into shorter segments. See the [input-length contract](../input-limits.md). | Q4_K_M | [cohere-transcribe-03-2026-Q4_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-Q4_K_M.gguf) | 1.56 GB | 1.24% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy decoding and no external LM. BF16 reference baseline: 1.26%. -Cohere's self-reported number on the same split is 1.25% (Open ASR Leaderboard, -as of 2026-03-26). Text normalizer: Whisper `EnglishTextNormalizer` — the same -normalizer the Open ASR Leaderboard uses, so the comparison is apples-to-apples. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with +greedy decoding and no external LM. BF16 reference baseline: 1.26%. +Cohere's self-reported number on the same split is 1.25% +(Open ASR Leaderboard, as of 2026-03-26). Both ours and Cohere's numbers +use the Whisper EnglishTextNormalizer, so the comparison is apples-to-apples +and our port matches the upstream reference within rounding. + ## Quick Start diff --git a/docs/models/cohere-transcribe-arabic-07-2026.md b/docs/models/cohere-transcribe-arabic-07-2026.md index cce9880f..35905d4d 100644 --- a/docs/models/cohere-transcribe-arabic-07-2026.md +++ b/docs/models/cohere-transcribe-arabic-07-2026.md @@ -1,10 +1,16 @@ # Cohere Transcribe Arabic 07-2026 -Cohere's [`CohereLabs/cohere-transcribe-arabic-07-2026`](https://huggingface.co/CohereLabs/cohere-transcribe-arabic-07-2026) -ported to transcribe.cpp. An Arabic-focused adaptation of the -[Cohere Transcribe 03-2026](cohere-transcribe-03-2026.md) architecture: a -Conformer encoder with a Transformer encoder-decoder head (cross-attention, -tied token embedding), retrained for Arabic. + +Upstream: [`CohereLabs/cohere-transcribe-arabic-07-2026`](https://huggingface.co/CohereLabs/cohere-transcribe-arabic-07-2026) at [`0a8193c`](https://huggingface.co/CohereLabs/cohere-transcribe-arabic-07-2026/commit/0a8193c). + +Offline Arabic speech-to-text, including dialectal Arabic and +Arabic-English code-switching, with English as a secondary language. An +Arabic-focused adaptation of the Cohere Transcribe 03-2026 architecture: +a Conformer encoder with a Transformer encoder-decoder head +(cross-attention, tied token embedding). Takes a 16 kHz mono WAV and a +language flag (`-l ar` or `-l en`) and produces a transcript. Decoding +is autoregressive. + ## What it's for @@ -40,14 +46,15 @@ it into shorter segments. See the [input-length contract](../input-limits.md). | Q4_K_M | [cohere-transcribe-arabic-07-2026-Q4_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q4_K_M.gguf) | 1.56 GB | 11.18% | -WER is measured on the full FLEURS Arabic (`ar_eg`) test split (428 -utterances) with greedy decoding and no external LM, scored with the Whisper -`BasicTextNormalizer` (the Arabic routing in `scripts/wer/score.py`). -BF16 reference baseline, measured with native Transformers on the same -manifest: 11.00%; our BF16 port scores 11.02%, and every quant falls inside -the reference's 95% confidence interval. Note that FLEURS Arabic is -Egyptian-dialect speech; upstream numbers published on other Arabic test -sets are not directly comparable. + +WER measured on the full FLEURS Arabic (`ar_eg`) test split (428 +utterances) with greedy decoding and no external LM, scored with the +Whisper BasicTextNormalizer. BF16 reference baseline, measured with +native Transformers on the same manifest: 11.00%; the BF16 port scores +11.02%, and every quant falls inside the reference's 95% confidence +interval. FLEURS Arabic is Egyptian-dialect speech; upstream numbers +published on other Arabic test sets are not directly comparable. + ## Quick Start diff --git a/docs/models/diar_streaming_sortformer_4spk-v2.1.md b/docs/models/diar_streaming_sortformer_4spk-v2.1.md index b3a57fa5..ef750d38 100644 --- a/docs/models/diar_streaming_sortformer_4spk-v2.1.md +++ b/docs/models/diar_streaming_sortformer_4spk-v2.1.md @@ -1,10 +1,15 @@ # Streaming Sortformer Diarizer 4spk v2.1 -NVIDIA's [`nvidia/diar_streaming_sortformer_4spk-v2.1`](https://huggingface.co/nvidia/diar_streaming_sortformer_4spk-v2.1) -ported to transcribe.cpp. A FastConformer encoder with an 18-layer -Transformer head that emits per-frame speaker-activity probabilities for -up to 4 speakers, running online with an Arrival-Order Speaker Cache -(AOSC) + FIFO. + +Upstream: [`nvidia/diar_streaming_sortformer_4spk-v2.1`](https://huggingface.co/nvidia/diar_streaming_sortformer_4spk-v2.1) at [`fafaab5`](https://huggingface.co/nvidia/diar_streaming_sortformer_4spk-v2.1/commit/fafaab5). + +Streaming speaker diarization: who spoke when, for up to 4 speakers. +A FastConformer encoder with an 18-layer Transformer head emitting +per-frame speaker-activity probabilities, running online with an +Arrival-Order Speaker Cache (AOSC) + FIFO. NOT a transcription model: +a run produces speaker segments (start, end, speaker id in arrival +order), no text. Takes 16 kHz mono WAV. + ## What it's for @@ -32,14 +37,16 @@ pinned 2026-07-19. | Q8_0 | [diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf](https://huggingface.co/handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf/resolve/main/diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf) | 139 MB | 14.73% | -DER is measured on the full AMI IHM test set (16 meetings, ~9 h) against + +DER measured on the full AMI IHM test set (16 meetings, ~9 h) against forced-alignment RTTMs with dihard3-dev post-processing, collar 0.0, -overlap scored, at the `very_high_latency` operating point. Our measured -NeMo reference under the identical protocol is **14.83% DER / 19.89% -JER**; the C++ F32 port scores 14.59% / 19.51%. (Published DER numbers -for this model vary with the RTTM source and post-processing; manual -RTTMs score ~13 points worse than forced-alignment RTTMs on the same -system output. Compare like with like.) +overlap scored, at the very_high_latency operating point. Measured NeMo +reference under the identical protocol: 14.83% DER / 19.89% JER; the +C++ F32 port scores 14.59% / 19.51%. Published DER numbers vary with +RTTM source and post-processing; compare like with like. Only +near-reference tiers ship for this family (k-quant tiers withdrawn; +see the transcribe.cpp family doc, "Quant policy (Stage 7)"). + Only near-reference tiers ship for this family. K-quant tiers were evaluated and withdrawn: the model's output depends on discrete diff --git a/docs/models/fun-asr-mlt-nano-2512.md b/docs/models/fun-asr-mlt-nano-2512.md index 4b71275f..46940ef5 100644 --- a/docs/models/fun-asr-mlt-nano-2512.md +++ b/docs/models/fun-asr-mlt-nano-2512.md @@ -1,13 +1,24 @@ # Fun-ASR-MLT-Nano -Alibaba / FunAudioLLM's [`FunAudioLLM/Fun-ASR-MLT-Nano-2512`](https://huggingface.co/FunAudioLLM/Fun-ASR-MLT-Nano-2512) -ported to transcribe.cpp — the multilingual sibling of -[Fun-ASR-Nano](fun-asr-nano-2512.md). Identical architecture -(SenseVoiceEncoderSmall + 2-layer audio adaptor + bundled Qwen3-0.6B LLM, -~800M trainable parameters), trained on a smaller corpus + +Upstream: [`FunAudioLLM/Fun-ASR-MLT-Nano-2512`](https://huggingface.co/FunAudioLLM/Fun-ASR-MLT-Nano-2512) at [`cf67a938bf2829959d08fdfb84e186eff02a67ff`](https://huggingface.co/FunAudioLLM/Fun-ASR-MLT-Nano-2512/commit/cf67a938bf2829959d08fdfb84e186eff02a67ff). + +Offline speech-to-text covering 31 languages, with focused optimization +on East and Southeast Asian languages: Chinese, English, Cantonese, +Japanese, Korean, Vietnamese, Indonesian, Thai, Malay, Filipino, plus +Arabic, Hindi, and 19 European languages (Bulgarian, Croatian, Czech, +Danish, Dutch, Estonian, Finnish, Greek, Hungarian, Irish, Latvian, +Lithuanian, Maltese, Polish, Portuguese, Romanian, Slovak, Slovenian, +Swedish). Same architecture as Fun-ASR-Nano-2512 (~800M trainable +parameters: frozen SenseVoiceEncoderSmall + 2-layer audio adaptor + +bundled Qwen3-0.6B LLM); trained on a smaller multilingual corpus ("hundreds of thousands of hours" per the model card, vs Nano's -"tens of millions") with broad multilingual coverage instead of -Mandarin-dialect depth. +"tens of millions"). Takes a 16 kHz mono WAV and emits text. Not +streaming, no translation, no timestamps. ITN (inverse text +normalization) is supported by the model and exposed via the +`--itn` CLI flag and `transcribe_funasr_nano_params { use_itn }` +in the library API. + ## What it's for @@ -55,16 +66,18 @@ pinned 2026-05-06. | Q4_K_M | [Fun-ASR-MLT-Nano-2512-Q4_K_M.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-Q4_K_M.gguf) | 557 MB | 1.89% | -WER is measured on the full LibriSpeech test-clean split (2620 -utterances) with greedy LLM decoding via the bundled Qwen3-0.6B head. -The publisher does **not** report a numerical LibriSpeech WER for the MLT -variant specifically (the shared Fun-ASR README's per-model table covers -the regular Fun-ASR-Nano only). Gate baseline is our own FunASR 1.3.1 -reference run on the same manifest: 1.76% (95% CI [1.60%, 1.93%]). -transcribe.cpp's BF16 port matches that baseline within -0.02 -percentage-points; F16/Q8_0 are numerically indistinguishable. Q4_K_M is -the only quant with a visible regression (+0.13 pp); F16/Q8_0/Q6_K/Q5_K_M -are within bootstrap noise of BF16. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) +with greedy LLM decoding via the bundled Qwen3-0.6B head. The publisher +does not report a numerical LibriSpeech WER for the MLT variant +specifically (the shared README's per-model table covers Fun-ASR-Nano +only). Gate baseline is our own FunASR 1.3.1 reference run on the same +manifest: 1.76% (95% CI [1.60%, 1.93%]). transcribe.cpp's BF16 port +matches that baseline within -0.02 percentage-points. LibriSpeech is +English only; the strength of the MLT variant is multilingual coverage, +not English accuracy. For the other 30 languages, run your own +representative manifest. + LibriSpeech is English only and is not the strength of this model. For the other 30 languages, run your own representative manifest. CommonVoice diff --git a/docs/models/fun-asr-nano-2512.md b/docs/models/fun-asr-nano-2512.md index 6a0d00cf..ed8fce7d 100644 --- a/docs/models/fun-asr-nano-2512.md +++ b/docs/models/fun-asr-nano-2512.md @@ -1,10 +1,20 @@ # Fun-ASR-Nano -Alibaba / FunAudioLLM's [`FunAudioLLM/Fun-ASR-Nano-2512`](https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512) -ported to transcribe.cpp. ~800M trainable parameters wrapping a frozen -**SenseVoiceEncoderSmall** (50 SAN-M main blocks + 20 transformer blocks), -a 2-layer audio adaptor (512 → 1024), and a bundled **Qwen3-0.6B** LLM + +Upstream: [`FunAudioLLM/Fun-ASR-Nano-2512`](https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512) at [`a7088d620f755dcdca575b63db184c3ad55b2865`](https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512/commit/a7088d620f755dcdca575b63db184c3ad55b2865). + +Offline speech-to-text in Chinese, English, and Japanese, plus 7 Chinese +dialects (Wu, Cantonese, Min, Hakka, Gan, Xiang, Jin) and 26 regional +Mandarin accents. ~800M trainable parameters wrapping a frozen +SenseVoiceEncoderSmall (50 SAN-M main blocks + 20 transformer blocks), +a 2-layer audio adaptor (512 → 1024), and a bundled Qwen3-0.6B LLM (28 layers, 16/8 GQA, BF16) that produces the transcript autoregressively. +Takes a 16 kHz mono WAV and emits text. Not a streaming model, no +translation, no built-in long-form chunking, no timestamps. ITN +(inverse text normalization) is supported by the model and exposed +via the `--itn` CLI flag and `transcribe_funasr_nano_params { use_itn }` +in the library API. + ## What it's for @@ -43,13 +53,17 @@ pinned 2026-05-06. | Q4_K_M | [Fun-ASR-Nano-2512-Q4_K_M.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-Q4_K_M.gguf) | 557 MB | 1.92% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy LLM decoding via the bundled Qwen3-0.6B head. Publisher -reports 1.76% on this split (model card "Open-Source Dataset Performance" -table). Our FunASR 1.3.1 reference run scores 1.79% (95% CI [1.63%, 1.95%]), -within bootstrap noise of the publisher's number. transcribe.cpp's BF16 -port matches that baseline within -0.01 percentage-points; F16/Q8_0/Q6_K -are numerically indistinguishable. +reports 1.76% on this split (model card "Open-Source Dataset +Performance" table). Our FunASR 1.3.1 reference run scores 1.79% +(95% CI [1.63%, 1.95%]), within bootstrap noise of the publisher's +number. transcribe.cpp's BF16 port matches that baseline within +-0.01 percentage-points. LibriSpeech is an English-only benchmark; +Chinese (AISHELL-1, WenetSpeech) and Japanese (CommonVoice JA) are +the recommended complementary checks. + LibriSpeech is an English benchmark; Fun-ASR-Nano's strongest case is Mandarin. **FLEURS-zh** (945 utterances) CER: 8.61% on our FunASR 1.3.1 diff --git a/docs/models/gigaam-v3-ctc.md b/docs/models/gigaam-v3-ctc.md index 331c474c..7b9420fd 100644 --- a/docs/models/gigaam-v3-ctc.md +++ b/docs/models/gigaam-v3-ctc.md @@ -1,7 +1,10 @@ # GigaAM-v3 CTC (charwise) -ai-sage's [`ai-sage/GigaAM-v3`](https://huggingface.co/ai-sage/GigaAM-v3) -(ctc branch) ported to transcribe.cpp. Same 16-layer Conformer encoder as the RNN-T variants, paired with a 1×1 Conv1d CTC head. CTC removes the per-symbol LSTM loop entirely (fast straight-line argmax-then-collapse decode). Slightly higher WER than the RNN-T variant at the same encoder size. + +Upstream: [`ai-sage/GigaAM-v3`](https://huggingface.co/ai-sage/GigaAM-v3) at [`15ef3b5`](https://huggingface.co/ai-sage/GigaAM-v3/commit/15ef3b5). + +Offline Russian speech-to-text with greedy CTC decoding. 16-layer Conformer encoder with a 1×1 Conv1d CTC head. Output is lowercased Russian, no punctuation; 33-entry character vocabulary. + ## What it's for @@ -42,8 +45,9 @@ pinned 2026-05-12. | Q4_K_M | [gigaam-v3-ctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q4_K_M.gguf) | 182 MB | 8.42% | -WER is measured on the full FLEURS ru test split (775 utterances) with -greedy decoding and no external LM. F32 reference baseline: **8.42%**. + +WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 8.42%. Upstream `gigaam` author package measured on the same manifest: 9.81%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. + Upstream (`gigaam` author package at `6e4b027c`) measured on the same manifest: **9.81%**. The 1.4 pp gap is the upstream package diff --git a/docs/models/gigaam-v3-e2e-ctc.md b/docs/models/gigaam-v3-e2e-ctc.md index b3bb9bf7..8158171e 100644 --- a/docs/models/gigaam-v3-e2e-ctc.md +++ b/docs/models/gigaam-v3-e2e-ctc.md @@ -1,7 +1,10 @@ # GigaAM-v3 e2e-CTC -ai-sage's [`ai-sage/GigaAM-v3`](https://huggingface.co/ai-sage/GigaAM-v3) -(e2e_ctc branch) ported to transcribe.cpp. Same 16-layer Conformer encoder as `gigaam-v3-e2e-rnnt`, paired with a 1×1 Conv1d CTC head. 256-piece SentencePiece vocabulary keeps the head compact while preserving punctuation and Cyrillic casing in output. Faster than RNN-T at comparable accuracy on short utterances. + +Upstream: [`ai-sage/GigaAM-v3`](https://huggingface.co/ai-sage/GigaAM-v3) at [`cec030b`](https://huggingface.co/ai-sage/GigaAM-v3/commit/cec030b). + +Offline Russian speech-to-text with greedy CTC decoding. 16-layer Conformer encoder with a 1×1 Conv1d CTC head. Output is cased Russian with punctuation, decoded from a 256-piece SentencePiece tokenizer. + ## What it's for @@ -42,8 +45,9 @@ pinned 2026-05-12. | Q4_K_M | [gigaam-v3-e2e-ctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q4_K_M.gguf) | 182 MB | 5.57% | -WER is measured on the full FLEURS ru test split (775 utterances) with -greedy decoding and no external LM. F32 reference baseline: **5.50%**. + +WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 5.50%. Upstream `gigaam` author package measured on the same manifest: 6.93%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. + Upstream (`gigaam` author package at `6e4b027c`) measured on the same manifest: **6.93%**. The 1.4 pp gap is the upstream package diff --git a/docs/models/gigaam-v3-e2e-rnnt.md b/docs/models/gigaam-v3-e2e-rnnt.md index 3cabaa86..aa423f90 100644 --- a/docs/models/gigaam-v3-e2e-rnnt.md +++ b/docs/models/gigaam-v3-e2e-rnnt.md @@ -1,7 +1,10 @@ # GigaAM-v3 e2e-RNN-T -ai-sage's [`ai-sage/GigaAM-v3`](https://huggingface.co/ai-sage/GigaAM-v3) -(main (= v3_e2e_rnnt) branch) ported to transcribe.cpp. A 16-layer Conformer encoder (768-d, 16 heads, rotary positional embeddings, conv1d ×4 subsampling) feeding an RNN-T transducer head (single LSTM-320 predictor + joint network). Vocabulary is 1024 SentencePiece pieces + blank, covering cased Cyrillic plus `.,?!` directly. + +Upstream: [`ai-sage/GigaAM-v3`](https://huggingface.co/ai-sage/GigaAM-v3) at [`ec1dc1f`](https://huggingface.co/ai-sage/GigaAM-v3/commit/ec1dc1f). + +Offline Russian speech-to-text with greedy RNN-T decoding. 16-layer Conformer encoder paired with an RNN-T transducer head. Output is cased Russian with punctuation, decoded from a 1024-piece SentencePiece tokenizer. Not a streaming model and does not translate. Short-form only (≤25 s per utterance). + ## What it's for @@ -42,8 +45,9 @@ pinned 2026-05-12. | Q4_K_M | [gigaam-v3-e2e-rnnt-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q4_K_M.gguf) | 184 MB | 5.36% | -WER is measured on the full FLEURS ru test split (775 utterances) with -greedy decoding and no external LM. F32 reference baseline: **5.35%**. + +WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 5.35%. Upstream `gigaam` author package measured on the same manifest: 6.78%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. + Upstream (`gigaam` author package at `6e4b027c`) measured on the same manifest: **6.78%**. The 1.4 pp gap is the upstream package diff --git a/docs/models/gigaam-v3-rnnt.md b/docs/models/gigaam-v3-rnnt.md index 7f05518e..6cfe2b36 100644 --- a/docs/models/gigaam-v3-rnnt.md +++ b/docs/models/gigaam-v3-rnnt.md @@ -1,7 +1,10 @@ # GigaAM-v3 RNN-T (charwise) -ai-sage's [`ai-sage/GigaAM-v3`](https://huggingface.co/ai-sage/GigaAM-v3) -(rnnt branch) ported to transcribe.cpp. Same 16-layer Conformer encoder as `gigaam-v3-e2e-rnnt`, paired with an RNN-T transducer head fine-tuned on lowercased no-punctuation text. Charwise tokenizer (33 entries + blank) keeps the head tiny and the output normalized. + +Upstream: [`ai-sage/GigaAM-v3`](https://huggingface.co/ai-sage/GigaAM-v3) at [`c7f128b`](https://huggingface.co/ai-sage/GigaAM-v3/commit/c7f128b). + +Offline Russian speech-to-text with greedy RNN-T decoding. Same 16-layer Conformer encoder as the e2e variant, fine-tuned to emit lowercased Russian with no punctuation; 33-entry character vocabulary. + ## What it's for @@ -42,8 +45,9 @@ pinned 2026-05-12. | Q4_K_M | [gigaam-v3-rnnt-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q4_K_M.gguf) | 183 MB | 8.12% | -WER is measured on the full FLEURS ru test split (775 utterances) with -greedy decoding and no external LM. F32 reference baseline: **8.08%**. + +WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 8.08%. Upstream `gigaam` author package measured on the same manifest: 9.46%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. + Upstream (`gigaam` author package at `6e4b027c`) measured on the same manifest: **9.46%**. The 1.4 pp gap is the upstream package diff --git a/docs/models/granite-4.0-1b-speech.md b/docs/models/granite-4.0-1b-speech.md index 175ed73e..c1657126 100644 --- a/docs/models/granite-4.0-1b-speech.md +++ b/docs/models/granite-4.0-1b-speech.md @@ -1,9 +1,17 @@ # Granite Speech 4.0-1b -IBM's [`ibm-granite/granite-4.0-1b-speech`](https://huggingface.co/ibm-granite/granite-4.0-1b-speech) -ported to transcribe.cpp. An audio-LLM: a Conformer encoder with block-local -Shaw attention, a BLIP-2 Q-Former projector, and the Granite-4.0-1b-base LLM -as an autoregressive decoder. + +Upstream: [`ibm-granite/granite-4.0-1b-speech`](https://huggingface.co/ibm-granite/granite-4.0-1b-speech) at [`bd87ab8`](https://huggingface.co/ibm-granite/granite-4.0-1b-speech/commit/bd87ab8). + +Offline multilingual speech-to-text. IBM Granite Speech 4.0-1b is an +audio-LLM: a Conformer encoder with block-local Shaw attention, a BLIP-2 +Q-Former projector, and the Granite-4.0-1b-base LLM as an autoregressive +decoder. Takes a 16 kHz mono WAV and produces a transcript; the LLM half is +what writes the text. Transcribes English, French, German, Spanish, +Portuguese, and Japanese. Translates between English and each of those +five other languages in either direction (en ↔ fr, en ↔ de, en ↔ es, +en ↔ pt, en ↔ ja) — always via English, no direct fr↔de etc. + ## What it's for @@ -37,12 +45,13 @@ pinned 2026-05-17. | Q4_K_M | [granite-4.0-1b-speech-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-Q4_K_M.gguf) | 1.60 GB | 1.48% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with -greedy decoding. The BF16 reference baseline (transformers, re-run locally -with the model-card prompt `USER: <|audio|>can you transcribe the speech -into a written format?\n ASSISTANT:`) is 1.42%, matching IBM's published -Open ASR Leaderboard number exactly. Text normalizer: Whisper + +WER measured on the full LibriSpeech test-clean split (2620 utterances) +with greedy decoding. BF16 reference baseline (re-run locally with the +model card's exact prompt): 1.42% — matches the upstream Open ASR +Leaderboard number exactly. Text normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. + ## Quick Start diff --git a/docs/models/granite-speech-4.1-2b-nar.md b/docs/models/granite-speech-4.1-2b-nar.md index c936e306..b50013a4 100644 --- a/docs/models/granite-speech-4.1-2b-nar.md +++ b/docs/models/granite-speech-4.1-2b-nar.md @@ -1,12 +1,18 @@ # Granite Speech 4.1-2b NAR -IBM's [`ibm-granite/granite-speech-4.1-2b-nar`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b-nar) -ported to transcribe.cpp. The non-autoregressive editor variant of -Granite-Speech. Shares the Conformer audio encoder with the AR Granite- -Speech family but pairs it with a custom MLP-with-attention projector and -the Granite-4.0-1b LLM used as a bidirectional editor (causal mask -disabled). One forward pass produces logits over the full transcript; -CTC decode yields the final text — no token-by-token loop. + +Upstream: [`ibm-granite/granite-speech-4.1-2b-nar`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b-nar) at [`99a4df9`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b-nar/commit/99a4df9). + +Offline multilingual speech-to-text in a single non-autoregressive editor +pass. IBM Granite Speech 4.1-2b NAR shares the Conformer audio encoder +with the AR Granite-Speech family but pairs it with a custom MLP-with- +attention projector and the Granite-4.0-1b LLM used as a bidirectional +editor (causal mask disabled). One forward pass produces logits over the +full transcript; CTC decode yields the final text. No token-by-token loop. +Takes a 16 kHz mono WAV and produces a transcript. English plus French, +German, Spanish, and Portuguese; ASR only (no translation, no +timestamps). + ## What it's for @@ -35,17 +41,20 @@ the README's canonical inference target). | Q4_K_M | [granite-speech-4.1-2b-nar-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-Q4_K_M.gguf) | 1.56 GB | 1.34% | + WER measured on the full LibriSpeech test-clean split (2620 utterances). BF16 reference baseline (transformers `model.transcribe`, MPS, re-run locally): 1.28% — matches the upstream model card's 1.29% to within -sampling noise. Text normalizer: Whisper `EnglishTextNormalizer`. F16, -Q8_0, and Q6_K all score the same 1.29% as BF16 — the editor is very -robust to weight quantization down through Q5_K_M, where the WER -actually dips slightly (1.25%, within overlapping 95% CI of REF). -Reference reproduction follows the model card path verbatim -(`AutoProcessor` + `AutoModel.transcribe` + `processor.batch_decode`) -at HF revision `99a4df9`; the older snapshot's bidirectional-mask patch -is obsolete in this snapshot. +sampling noise. Text normalizer: Whisper `EnglishTextNormalizer`, the +same normalizer Open ASR Leaderboard uses. Reference reproduction +follows the model card path verbatim (`AutoProcessor` + +`AutoModel.transcribe` + `processor.batch_decode`) at HF revision +`99a4df9` (single-file `modeling_granite_speech_nar.py` snapshot, the +README's canonical target); no mask patching is required because the +NAR LM uses `create_bidirectional_mask()` natively. F16, Q8_0, and +Q6_K all match BF16's 1.29%; Q5_K_M dips slightly to 1.25% (within +overlapping CIs). + ## Quick Start diff --git a/docs/models/granite-speech-4.1-2b-plus.md b/docs/models/granite-speech-4.1-2b-plus.md index 8c74e44e..86292e31 100644 --- a/docs/models/granite-speech-4.1-2b-plus.md +++ b/docs/models/granite-speech-4.1-2b-plus.md @@ -1,12 +1,24 @@ # Granite Speech 4.1-2b-plus -IBM's [`ibm-granite/granite-speech-4.1-2b-plus`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b-plus) -ported to transcribe.cpp. The timestamp-and-diarization variant of the + +Upstream: [`ibm-granite/granite-speech-4.1-2b-plus`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b-plus) at [`edd3bf5`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b-plus/commit/edd3bf5). + +Offline multilingual speech-to-text with word-level timestamps. IBM Granite +Speech 4.1-2b-plus is the timestamp-and-diarization variant of the Granite-Speech family. Same architecture as the base 4.1-2b (Conformer encoder, BLIP-2 Q-Former projector, Granite-4.0-1b autoregressive LLM decoder) with two changes: the encoder concatenates mid-layer (idx 3) and -final-layer hidden states (doubling the projector K/V input from 1024 to -2048), and the LM token embeddings are tied with the lm_head. +final-layer hidden states (`cat_hidden_layers=[3]`, doubling the projector +K/V input from 1024 to 2048), and the LM token embeddings are tied with +the lm_head. Takes a 16 kHz mono WAV and produces a transcript, with +`--timestamps word` returning structured per-word timestamps (parsed from the +model's `[T:N]` centisecond markers), or `--diarize` returning structured +speaker-attributed turns from its separate SAA prompt. Those two prompt tasks +cannot be combined. Transcribes English, +French, German, Spanish, and Portuguese (no Japanese on this variant). +This variant is transcription-only: unlike the base granite-speech-4.1-2b, +it does not perform speech translation. + ## What it's for @@ -41,15 +53,19 @@ pinned 2026-05-17. | Q4_K_M | [granite-speech-4.1-2b-plus-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-Q4_K_M.gguf) | 1.49 GB | 1.56% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with -greedy decoding and the model-card chat template (system prompt + leading- -space user instruction + `add_generation_prompt=True`). BF16 reference -baseline (transformers, re-run locally with that exact prompt): 1.48%; -0.04pp above upstream's published 1.44%, within bootstrap CI overlap and -likely a chat-template / normalization difference on the publisher side. -Text normalizer: Whisper `EnglishTextNormalizer`. The transcribe.cpp runtime -hard-codes the correct chat template; the WER quoted here is what the C++ -runtime actually scores. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) +with greedy decoding and the model-card chat template (system prompt + +leading-space user instruction + `add_generation_prompt=True`). BF16 +reference baseline (re-run locally with that exact prompt): 1.48%; 0.04pp +above upstream's published 1.44%, within bootstrap CI overlap and likely +a chat-template / normalization difference on the publisher side. Text +normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR +Leaderboard uses. The `add_generation_prompt=True` is load-bearing — +without it the model emits 25-27 empty hypotheses on short test-clean +clips and WER blows up to ~26%. The transcribe.cpp runtime hard-codes the +prompt correctly; this note only matters if you reproduce the reference. + ## Quick Start diff --git a/docs/models/granite-speech-4.1-2b.md b/docs/models/granite-speech-4.1-2b.md index eaf9dc55..81cc5e50 100644 --- a/docs/models/granite-speech-4.1-2b.md +++ b/docs/models/granite-speech-4.1-2b.md @@ -1,10 +1,18 @@ # Granite Speech 4.1-2b -IBM's [`ibm-granite/granite-speech-4.1-2b`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b) -ported to transcribe.cpp. An audio-LLM with the same architecture as -4.0-1b (Conformer encoder with block-local Shaw attention, BLIP-2 Q-Former -projector, Granite-4.0-1b-base autoregressive LLM decoder) and improved -punctuation/casing over 4.0-1b. + +Upstream: [`ibm-granite/granite-speech-4.1-2b`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b) at [`8f4bb5f`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b/commit/8f4bb5f). + +Offline multilingual speech-to-text. IBM Granite Speech 4.1-2b is an +audio-LLM with the same architecture as 4.0-1b (Conformer encoder with +block-local Shaw attention, BLIP-2 Q-Former projector, Granite-4.0-1b-base +autoregressive LLM decoder) and improved punctuation and casing over 4.0-1b. +Takes a 16 kHz mono WAV and produces a transcript. Transcribes English, +French, German, Spanish, Portuguese, and Japanese. Translates between +English and each of those five other languages in either direction +(en ↔ fr, en ↔ de, en ↔ es, en ↔ pt, en ↔ ja) — always via English, no +direct fr↔de etc. + ## What it's for @@ -38,12 +46,14 @@ pinned 2026-05-17. | Q4_K_M | [granite-speech-4.1-2b-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-Q4_K_M.gguf) | 1.60 GB | 1.37% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with -greedy decoding and the model-card prompt `transcribe the speech with proper -punctuation and capitalization.`. BF16 reference baseline (transformers, -re-run locally with that prompt): 1.31% — 0.02pp below upstream's published -1.33%, within bootstrap CI overlap. Text normalizer: Whisper + +WER measured on the full LibriSpeech test-clean split (2620 utterances) +with greedy decoding. BF16 reference baseline (re-run locally with the +model card's exact prompt): 1.31% — 0.02pp below upstream's published +1.33%, likely a minor normalization difference on the publisher side and +well within bootstrap CI overlap. Text normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. + ## Quick Start diff --git a/docs/models/medasr.md b/docs/models/medasr.md index 38a57347..89bb6d65 100644 --- a/docs/models/medasr.md +++ b/docs/models/medasr.md @@ -1,6 +1,10 @@ # MedASR -Google's [`google/medasr`](https://huggingface.co/google/medasr) ported to transcribe.cpp. 105M-parameter encoder-CTC for medical-dictation English ASR. 17-layer Conformer encoder with RoPE attention (rope_theta=10000), macaron FFNs (residual scalars [1.5, 0.5]), BatchNorm conv module (kernel=32, residual scalars [2.0, 1.0]), and a Linear 512→512 CTC head over a SentencePiece BPE vocabulary. + +Upstream: [`google/medasr`](https://huggingface.co/google/medasr) at [`ae1e484`](https://huggingface.co/google/medasr/commit/ae1e484). + +Offline English speech-to-text optimized for medical dictation (radiology, internal medicine, family medicine). 17-layer Conformer encoder with RoPE attention, macaron FFNs, and a 512-token SentencePiece CTC head. Greedy CTC decode; no language model, no beam search. + ## What it's for @@ -33,9 +37,9 @@ long recordings for best results. See the | Q4_K_M | [medasr-Q4_K_M.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-Q4_K_M.gguf) | 83 MB | 18.14% | -**Recommended default: Q8_0.** Smallest preset with no statistically detectable WER degradation versus F32 (122 MB; +0.00 pp within bootstrap CI). Q4_K_M shows a real +0.26 pp degradation on LibriSpeech and is shipped for completeness but **not recommended** — prefer Q5_K_M if you need smaller than Q8_0. - -WER measured on the full LibriSpeech test-clean split (2,620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline (HuggingFace transformers, Mac MPS): **17.88%**; transcribe.cpp F32 matches exactly. Absolute WER is higher than general-purpose ASR (e.g. Whisper-base ≈ 5%) because the model is fine-tuned for medical dictation — on the publisher's internal RAD-DICT / GENERAL-DICT / FM-DICT datasets the model scores 6.6%–9.3%, but those datasets are not publicly reproducible. See [`reports/wer/medasr.test-clean.summary.md`](../../reports/wer/medasr.test-clean.summary.md) for the full sweep. + +WER measured on the full LibriSpeech test-clean split (2,620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline (HuggingFace transformers, Mac MPS): 17.88%; transcribe.cpp F32 matches exactly. Absolute WER is higher than general-purpose ASR (e.g. Whisper-base ~5%) because the model is fine-tuned for medical dictation — on the publisher's internal RAD-DICT / GENERAL-DICT / FM-DICT datasets the model scores 6.6%–9.3%, but those datasets are not publicly reproducible. Q8_0 is the recommended default (smallest preset with no statistically detectable WER degradation); Q4_K_M shows a real +0.26 pp degradation and is shipped for completeness but not recommended — prefer Q5_K_M if you need smaller than Q8_0. + ## Quick Start diff --git a/docs/models/moonshine-base.md b/docs/models/moonshine-base.md index c48b3d77..ef09d3e5 100644 --- a/docs/models/moonshine-base.md +++ b/docs/models/moonshine-base.md @@ -1,10 +1,15 @@ # Moonshine base -Useful Sensors' [`UsefulSensors/moonshine-base`](https://huggingface.co/UsefulSensors/moonshine-base) -ported to transcribe.cpp. A 61M-parameter encoder-decoder transformer that -consumes raw 16 kHz PCM directly (no STFT, no mel filterbank) via a three-layer -Conv1d stem. Wider and deeper than moonshine-tiny (8 encoder / 8 decoder -layers, hidden size 416, intermediate 1664, partial RoPE 0.62). + +Upstream: [`UsefulSensors/moonshine-base`](https://huggingface.co/UsefulSensors/moonshine-base) at [`7a73d8d`](https://huggingface.co/UsefulSensors/moonshine-base/commit/7a73d8d). + +Useful Sensors Moonshine base — a 61M-parameter encoder-decoder transformer +for English speech recognition. Consumes raw 16 kHz PCM directly via a +three-layer Conv1d stem (no STFT, no mel) and emits transcript-only output. +Wider and deeper than moonshine-tiny (8 encoder / 8 decoder layers, hidden +size 416, partial RoPE 0.62). English-only; no translation, no language +detection, no timestamps. + ## What it's for @@ -35,17 +40,16 @@ on 2026-05-05. | Q8_0 | [moonshine-base-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-base-gguf/resolve/main/moonshine-base-Q8_0.gguf) | 77 MB | 3.26% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with -the transcribe.cpp default decode (greedy, `num_beams=1`, `max_length=194` — -matching the upstream `generation_config`). Upstream reports 3.27% on the same -split (Moonshine paper, Table 2; also Open ASR Leaderboard). Our F32 reference -baseline lands at 3.28%, identical to upstream within rounding and well within -the ±1.00 pp Stage 7 acceptance gate. Q8_0 lands at 3.26%, slightly under F32 -— that delta sits inside the 95% bootstrap CI and is noise, not a real -improvement. Only F16 and Q8_0 are shipped as derived presets: at -moonshine-base's shapes (hidden 416, intermediate 1664, vocab 32768) none of -the dimensions divide the k-quant super-block size of 256, so Q6_K / Q5_K_M / -Q4_K_M would all fall back to Q8_0 storage and be near-duplicates. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) +with the transcribe.cpp default decode (greedy, num_beams=1, +max_length=194 — matching the upstream generation_config). Upstream +reports 3.27% on the same split (Moonshine paper, Table 2; also Open +ASR Leaderboard). Our F32 reference baseline lands at 3.28%, identical +to upstream within rounding and well within the ±1.00 pp Stage 7 +acceptance gate. Q8_0 lands at 3.26%, slightly under F32 — that delta +sits inside the 95% bootstrap CI and is noise, not a real improvement. + ## Quick Start diff --git a/docs/models/moonshine-streaming-medium.md b/docs/models/moonshine-streaming-medium.md index 885b8a08..957733ac 100644 --- a/docs/models/moonshine-streaming-medium.md +++ b/docs/models/moonshine-streaming-medium.md @@ -1,11 +1,16 @@ # Moonshine Streaming Medium -Useful Sensors' [`UsefulSensors/moonshine-streaming-medium`](https://huggingface.co/UsefulSensors/moonshine-streaming-medium) -ported to transcribe.cpp. A 245M-parameter encoder-decoder English ASR model -designed for streaming use (ergodic encoder + sliding-window attention, -50 Hz time-domain frontend). Same family as the tiny and small variants; -deepest of the three (14 / 14 layers) and widest hidden dims (encoder 768 / -decoder 640). + +Upstream: [`UsefulSensors/moonshine-streaming-medium`](https://huggingface.co/UsefulSensors/moonshine-streaming-medium) at [`57b8436`](https://huggingface.co/UsefulSensors/moonshine-streaming-medium/commit/57b8436). + +English speech-to-text in both one-shot and streaming modes. A 245M-parameter +encoder-decoder ASR model designed for streaming use (ergodic encoder + +sliding-window attention, 50 Hz time-domain frontend). Same family as +moonshine-streaming-tiny and moonshine-streaming-small; deepest of the three +(14 / 14 layers) and widest hidden dims (encoder 768 / decoder 640). Takes a +16 kHz mono WAV and produces a transcript. No translation, no multilingual +capability, no timestamps. + ## What it's for @@ -30,15 +35,18 @@ pinned 2026-05-06. | Q8_0 | [moonshine-streaming-medium-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-streaming-medium-gguf/resolve/main/moonshine-streaming-medium-Q8_0.gguf) | 296 MB | 2.16% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference -baseline: 2.16%. Quants are numerically indistinguishable from F32 on this -manifest. Useful Sensors' self-reported number on this split is 2.08% from -the Open ASR Leaderboard table; the +0.08pp residual matches the same -scoring / text-normalization difference seen across the tiny and small -variants (where the tiny cross-check against the HF Transformers reference -on the same manifest landed within 0.01pp of our port), and is not a -numerical drift in the port. +baseline: 2.16%. Quants are numerically indistinguishable from F32 on +this manifest. Useful Sensors' self-reported number on this split is +2.08% from the Open ASR Leaderboard table; the +0.08pp residual matches +the same scoring / text-normalization difference seen across the tiny +and small variants (cross-checked against HF Transformers on tiny and +found to be at 99.6% identical hypotheses to our port), and is not a +numerical drift. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped +for this variant. + **One utterance the model cannot end.** A single LibriSpeech test-clean clip — `7176-92135-0020` (7.2 s; reference *"DOUBLE NINE TWO THREE ELSINORE DOUBLE NINE diff --git a/docs/models/moonshine-streaming-small.md b/docs/models/moonshine-streaming-small.md index 49a40e5e..07334d0c 100644 --- a/docs/models/moonshine-streaming-small.md +++ b/docs/models/moonshine-streaming-small.md @@ -1,11 +1,15 @@ # Moonshine Streaming Small -Useful Sensors' [`UsefulSensors/moonshine-streaming-small`](https://huggingface.co/UsefulSensors/moonshine-streaming-small) -ported to transcribe.cpp. A 123M-parameter encoder-decoder English ASR model -designed for streaming use (ergodic encoder + sliding-window attention, -50 Hz time-domain frontend). Same family as the tiny and medium variants; -deeper encoder/decoder (10 / 10 layers vs 6 / 6 for tiny) and wider hidden -dims (encoder 620 / decoder 512). + +Upstream: [`UsefulSensors/moonshine-streaming-small`](https://huggingface.co/UsefulSensors/moonshine-streaming-small) at [`2c03650`](https://huggingface.co/UsefulSensors/moonshine-streaming-small/commit/2c03650). + +English speech-to-text in both one-shot and streaming modes. A 123M-parameter +encoder-decoder ASR model designed for streaming use (ergodic encoder + +sliding-window attention, 50 Hz time-domain frontend). Same family as +moonshine-streaming-tiny; deeper encoder/decoder (10 / 10 layers) and wider +hidden dims (encoder 620 / decoder 512). Takes a 16 kHz mono WAV and produces +a transcript. No translation, no multilingual capability, no timestamps. + ## What it's for @@ -30,14 +34,17 @@ pinned 2026-05-06. | Q8_0 | [moonshine-streaming-small-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-streaming-small-gguf/resolve/main/moonshine-streaming-small-Q8_0.gguf) | 199 MB | 2.54% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference baseline: 2.53%. Useful Sensors' self-reported number on this split is 2.49% from the Open ASR Leaderboard table; the +0.04pp residual matches the same scoring / text-normalization difference seen on the tiny variant -where we cross-checked against the HF Transformers reference (4.52% on the -same manifest, 99.6% identical hypotheses to our F32) and confirmed it is -not a numerical drift in the port. +where we cross-checked against the HF Transformers reference (4.52% on +the same manifest, 99.6% identical hypotheses to our F32) and confirmed +it is not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M GGUFs +are not currently shipped for this variant. + Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. diff --git a/docs/models/moonshine-streaming-tiny.md b/docs/models/moonshine-streaming-tiny.md index 944b8c00..dd28775b 100644 --- a/docs/models/moonshine-streaming-tiny.md +++ b/docs/models/moonshine-streaming-tiny.md @@ -1,9 +1,14 @@ # Moonshine Streaming Tiny -Useful Sensors' [`UsefulSensors/moonshine-streaming-tiny`](https://huggingface.co/UsefulSensors/moonshine-streaming-tiny) -ported to transcribe.cpp. A 34M-parameter encoder-decoder English ASR model -designed for streaming use (ergodic encoder + sliding-window attention, -50 Hz time-domain frontend). + +Upstream: [`UsefulSensors/moonshine-streaming-tiny`](https://huggingface.co/UsefulSensors/moonshine-streaming-tiny) at [`f8e9dfd`](https://huggingface.co/UsefulSensors/moonshine-streaming-tiny/commit/f8e9dfd). + +English speech-to-text in both one-shot and streaming modes. A 34M-parameter +encoder-decoder ASR model designed for streaming use (ergodic encoder + +sliding-window attention, 50 Hz time-domain frontend). Takes a 16 kHz mono +WAV and produces a transcript. No translation, no multilingual capability, +no timestamps. + ## What it's for @@ -28,14 +33,17 @@ pinned 2026-05-06. | Q8_0 | [moonshine-streaming-tiny-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-streaming-tiny-gguf/resolve/main/moonshine-streaming-tiny-Q8_0.gguf) | 50 MB | 4.52% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference baseline: 4.53%. The HF Transformers reference scored on the same manifest in the same regime lands at 4.52% with 99.6% byte-identical hypotheses to our F32, so the port is at exact parity with the reference. Useful Sensors' self-reported number on this split is 4.49% from the Open ASR Leaderboard table; the +0.04pp residual is a scoring / text-normalization difference vs -that methodology, not a numerical drift in the port. +that methodology, not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M +GGUFs are not currently shipped for this variant. + Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. diff --git a/docs/models/moonshine-tiny.md b/docs/models/moonshine-tiny.md index 5601fcea..903127de 100644 --- a/docs/models/moonshine-tiny.md +++ b/docs/models/moonshine-tiny.md @@ -1,9 +1,13 @@ # Moonshine tiny -Useful Sensors' [`UsefulSensors/moonshine-tiny`](https://huggingface.co/UsefulSensors/moonshine-tiny) -ported to transcribe.cpp. A 27M-parameter encoder-decoder transformer that -consumes raw 16 kHz PCM directly (no STFT, no mel filterbank) via a three-layer -Conv1d stem. + +Upstream: [`UsefulSensors/moonshine-tiny`](https://huggingface.co/UsefulSensors/moonshine-tiny) at [`390624e`](https://huggingface.co/UsefulSensors/moonshine-tiny/commit/390624e). + +Useful Sensors Moonshine tiny — a 27M-parameter encoder-decoder transformer +for English speech recognition. Consumes raw 16 kHz PCM directly via a +three-layer Conv1d stem (no STFT, no mel) and emits transcript-only output. +English-only; no translation, no language detection, no timestamps. + ## What it's for @@ -34,16 +38,15 @@ on 2026-05-05. | Q8_0 | [moonshine-tiny-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-tiny-gguf/resolve/main/moonshine-tiny-Q8_0.gguf) | 35 MB | 4.60% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with -the transcribe.cpp default decode (greedy, `num_beams=1`, `max_length=194` — -matching the upstream `generation_config`). Useful Sensors' self-reported -number on the same split is 4.55% (model card). Our F32 reference baseline -lands at 4.58%, within rounding of upstream and well within the ±1.00 pp -Stage 7 acceptance gate. Q8_0 drift is +0.02 pp vs F32 — within bootstrap CI -noise. Only F16 and Q8_0 are shipped as derived presets: at moonshine-tiny's -shapes (hidden 288, intermediate 1152, vocab 32768) none of the dimensions -divide the k-quant super-block size of 256, so Q6_K / Q5_K_M / Q4_K_M would -all fall back to Q8_0 storage and be near-duplicates. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) +with the transcribe.cpp default decode (greedy, num_beams=1, +max_length=194 — matching the upstream generation_config). Useful +Sensors' self-reported number on the same split is 4.55% (model card). +Our F32 reference baseline lands at 4.58%, within rounding of upstream +and well within the ±1.00 pp Stage 7 acceptance gate. Q8_0 drift is ++0.02 pp vs F32 — within bootstrap CI noise. + ## Quick Start diff --git a/docs/models/moss-transcribe-diarize.md b/docs/models/moss-transcribe-diarize.md index 49b2923d..8ea25ac3 100644 --- a/docs/models/moss-transcribe-diarize.md +++ b/docs/models/moss-transcribe-diarize.md @@ -1,11 +1,16 @@ # MOSS-Transcribe-Diarize -OpenMOSS's [`OpenMOSS-Team/MOSS-Transcribe-Diarize`](https://huggingface.co/OpenMOSS-Team/MOSS-Transcribe-Diarize) -ported to transcribe.cpp. A 0.9B audio-LLM: a 24-layer Whisper-Medium audio -encoder (`d_model=1024`, GELU, LayerNorm) feeds a 4x temporal merge -(1024 -> 4096) and a VQAdaptor MLP bridge into a Qwen3-0.6B causal decoder -(28 layers, `hidden_size=1024`, GQA 16/8 heads, `rope_theta=1e6`) via -audio-token injection at `<|audio_pad|>` positions. + +Upstream: [`OpenMOSS-Team/MOSS-Transcribe-Diarize`](https://huggingface.co/OpenMOSS-Team/MOSS-Transcribe-Diarize) at [`d7231bb`](https://huggingface.co/OpenMOSS-Team/MOSS-Transcribe-Diarize/commit/d7231bb). + +Offline English/Chinese speech-to-text with speaker diarization. A 0.9B +audio-LLM: a Whisper-Medium encoder (24 layers, d_model=1024) feeds a +4x temporal merge + VQAdaptor bridge into a Qwen3-0.6B decoder (28 layers) +via audio-token injection. The model emits `[start][Sxx]text[end]`; the +runtime parses those generated markers into clean text and segment rows. +Speaker attribution is opt-in (`--diarize`) and returns structured speaker +ids/turns. Not a streaming model. + ## What it's for @@ -48,24 +53,27 @@ into shorter pieces. | Q4_K_M | [MOSS-Transcribe-Diarize-Q4_K_M.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-Q4_K_M.gguf) | 617 MB | 2.59% | -These WER values describe this dataset only, not a general quality ranking. A -quant that scores slightly better here is not necessarily better in real-world -use; dataset-specific decoding near-ties can make quantization noise help or -hurt individual utterances. - -WER measured on the full LibriSpeech `test-clean` split (2620 utterances) with -the Whisper-style English normalizer and jiwer 3.x. MOSS emits the diarized -format `[start][Sxx]text[end]`; the bracket spans are metadata and are -de-diarized to a space (for both hypothesis and reference) before scoring, -matching the author-repo reference runner. The same-manifest MOSS author-repo -reference (bf16, greedy) lands at **2.07%**, 95% bootstrap CI [1.82%, 2.40%]; -the BF16 port lands at 2.08%, within `+0.01pp` of the reference and well inside -the CI. Q4_K_M's higher 2.59% is not broad degradation but a handful of 4-bit -tail failures (6 empty outputs, 5 English->Chinese language-drift utterances, -1 timestamp-token repetition loop); prefer Q5_K_M or higher if those matter. -The runtime applies the same marker removal to `full_text`, so WER scoring and -the public transcript agree. The pre-parsed inline marker string remains -available verbatim via `transcribe_raw_text()`. + +WER measured on the full LibriSpeech `test-clean` split (2620 English +utterances) with the Whisper-style English text normalizer and jiwer +3.x. MOSS emits the diarized format `[start][Sxx]text[end]`; the bracket +spans are metadata and are de-diarized to a space (for both hypothesis +and reference) before scoring, matching the author-repo reference runner. +These values describe this dataset only, not a general quality ranking: a +quant that scores slightly better here is not necessarily better in +real-world use, because dataset-specific decoding near-ties can make +quantization noise help or hurt individual utterances. The same-manifest +MOSS author-repo reference (bf16, greedy) lands at +**2.07%** with 95% bootstrap CI [1.82%, 2.40%]. The BF16 port lands at +2.08% (within +0.01 of the reference, well inside the CI band); the +lower-bit presets sit between 1.93% and 1.99% (statistical noise) except +Q4_K_M at 2.59%, whose excess is a handful of 4-bit tail failures +(6 empty outputs, 5 English->Chinese language-drift utterances, 1 +timestamp-token repetition loop) rather than broad degradation. Prefer +Q5_K_M or higher if those tail failures matter. Reproduce with +`scripts/wer/run.py` + `scripts/wer/score.py --dediarize`; public +`full_text` applies equivalent marker removal. + ## Quick Start diff --git a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md index d1f1bab8..75ee8288 100644 --- a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md +++ b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md @@ -1,9 +1,10 @@ # Multitalker Parakeet Streaming 0.6B v1 -NVIDIA's [`nvidia/multitalker-parakeet-streaming-0.6b-v1`](https://huggingface.co/nvidia/multitalker-parakeet-streaming-0.6b-v1) -ported to transcribe.cpp. A 0.6B-parameter cache-aware streaming -FastConformer encoder with an RNN-T transducer decoder, fine-tuned from -[`nvidia/nemotron-speech-streaming-en-0.6b`](https://huggingface.co/nvidia/nemotron-speech-streaming-en-0.6b). + +Upstream: [`nvidia/multitalker-parakeet-streaming-0.6b-v1`](https://huggingface.co/nvidia/multitalker-parakeet-streaming-0.6b-v1) at [`8749fc7`](https://huggingface.co/nvidia/multitalker-parakeet-streaming-0.6b-v1/commit/8749fc7). + +Offline and cache-aware streaming English speech-to-text with punctuation and capitalization. A 0.6B-parameter cache-aware streaming FastConformer encoder with an RNN-T transducer decoder, fine-tuned from nvidia/nemotron-speech-streaming-en-0.6b. Plain GGUFs run the single_speaker_mode ASR path, while bundle GGUFs under `bundle/` embed nvidia/diar_streaming_sortformer_4spk-v2.1 and, with `--diarize`, transcribe up to four overlapping speakers into a speaker-tagged transcript. The encoder preserves the upstream att_context_size=[70, 13] (1.12s) cache-aware attention mask; all four latency lookahead settings are selectable. + ## What it's for @@ -48,12 +49,30 @@ pinned 2026-07-12. | Q4_K_M | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf) | 617 MB | 2.18% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) -in `single_speaker_mode` with greedy RNN-T decoding, whisper-normalizer -scoring (PnC-stripped), and no external LM. F32 reference baseline: 2.19%. -The measured NeMo `single_speaker_mode` reference on the same split is -2.19%, and NVIDIA's self-reported number is 2.19% (from the -[HF model card](https://huggingface.co/nvidia/multitalker-parakeet-streaming-0.6b-v1)). + +WER measured on the full LibriSpeech test-clean split (2620 utterances) in single_speaker_mode with greedy RNN-T decoding and whisper-normalizer (PnC-stripped) scoring. F32 reference baseline: 2.19%. The measured NeMo single_speaker_mode reference and NVIDIA's self-reported number on the same split are both 2.19%. + +### Multitalker bundles (speaker-attributed ASR) + +Bundle GGUFs embed the streaming Sortformer diarizer alongside the ASR model. Run them with `--diarize` to get a speaker-tagged transcript with up to four speakers. The tier names the ASR half's dtype; the embedded diarizer is F32 for the F32 bundle, F16 for F16, and Q8_0 for all k-quant tiers. + +| Bundle | Download | Size | +| --- | --- | ---: | +| F32 | [bundle/multitalker-parakeet-streaming-0.6b-v1-F32.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-F32.gguf) | 2.96 GB | +| F16 | [bundle/multitalker-parakeet-streaming-0.6b-v1-F16.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-F16.gguf) | 1.48 GB | +| Q8_0 | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf) | 873 MB | +| Q6_K | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q6_K.gguf) | 743 MB | +| Q5_K_M | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q5_K_M.gguf) | 681 MB | +| Q4_K_M | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf) | 617 MB | + +cpWER on AMI-IHM test (16 meetings, F32 bundle) is 19.35% in the default kernel mode and 23.73% in masked mode. The matched NeMo reference scores 21.39% and 24.00%, respectively; see the transcribe.cpp model page for the exactness accounting. + +```bash +build/bin/transcribe-cli --diarize \ + -m bundle/multitalker-parakeet-streaming-0.6b-v1-Q8_0.gguf \ + meeting.wav +``` + ### Bundle dtypes diff --git a/docs/models/nemotron-3.5-asr-streaming-0.6b.md b/docs/models/nemotron-3.5-asr-streaming-0.6b.md index 599740ba..e8083fdf 100644 --- a/docs/models/nemotron-3.5-asr-streaming-0.6b.md +++ b/docs/models/nemotron-3.5-asr-streaming-0.6b.md @@ -1,10 +1,10 @@ # Nemotron 3.5 ASR Streaming 0.6B -NVIDIA's [`nvidia/nemotron-3.5-asr-streaming-0.6b`](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b) -ported to transcribe.cpp. A 0.6B-parameter cache-aware streaming -FastConformer encoder with an RNN-T transducer decoder — the multilingual -successor to -[`nemotron-speech-streaming-en-0.6b`](nemotron-speech-streaming-en-0.6b.md). + +Upstream: [`nvidia/nemotron-3.5-asr-streaming-0.6b`](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b) at [`24b151a`](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b/commit/24b151a). + +Multilingual speech-to-text across 32 supported language-locales (the model's tokenizer recognizes 40, but 8 are adaptation-ready and need fine-tuning) with punctuation and capitalization. A 0.6B-parameter cache-aware streaming FastConformer encoder with a prompt-conditioned RNN-T transducer decoder; the target language is selected per call (--language en-US, fr-FR, de-DE, ...) and an auto mode emits a tag. Ships both the offline path (att_context_size=[56, 13], 1.12s, headline accuracy) and runtime-selectable chunked streaming (--stream-chunk-ms 1120 --stream-att-right {0,3,6,13}). + ## What it's for @@ -64,13 +64,9 @@ stays unbounded for the same reason. See the | Q4_K_M | [nemotron-3.5-asr-streaming-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-Q4_K_M.gguf) | 496 MB | -**Accuracy.** Word error rate at the offline `att_context_size=[56,13]` -(1.12 s) setting, `--language en-US`, greedy RNN-T. C++ hypotheses were -generated on an L4 GPU and scored with the whisper-normalizer; the -reference column is NVIDIA NeMo measured on the same manifests. For -context, NVIDIA's self-reported FLEURS en-US WER is **7.91%** (and an -**8.84%** 19-locale macro-average) per the -[HF model card](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b). + +WER measured on FLEURS test en (647 utterances), greedy RNN-T, --language en-US, whisper-normalizer scoring; the per-quant column is FLEURS en. NeMo reference baseline on the same manifest: 7.99% (NVIDIA self-reports 7.91% en-US). On LibriSpeech test-clean (2620 utterances) the same presets score F32 3.04 / F16 3.03 / Q8_0 3.06 / Q6_K 3.07 / Q5_K_M 3.10 / Q4_K_M 3.28, against a 3.03% NeMo reference. + | Preset | FLEURS test en (n=647) | LibriSpeech test-clean (n=2620) | | --- | ---: | ---: | diff --git a/docs/models/nemotron-speech-streaming-en-0.6b.md b/docs/models/nemotron-speech-streaming-en-0.6b.md index 72f0bbb5..3379c389 100644 --- a/docs/models/nemotron-speech-streaming-en-0.6b.md +++ b/docs/models/nemotron-speech-streaming-en-0.6b.md @@ -1,8 +1,10 @@ # Nemotron Speech Streaming EN 0.6B -NVIDIA's [`nvidia/nemotron-speech-streaming-en-0.6b`](https://huggingface.co/nvidia/nemotron-speech-streaming-en-0.6b) -ported to transcribe.cpp. A 0.6B-parameter cache-aware streaming -FastConformer encoder with an RNN-T transducer decoder. + +Upstream: [`nvidia/nemotron-speech-streaming-en-0.6b`](https://huggingface.co/nvidia/nemotron-speech-streaming-en-0.6b) at [`ef3bf40`](https://huggingface.co/nvidia/nemotron-speech-streaming-en-0.6b/commit/ef3bf40). + +English speech-to-text with punctuation and capitalization. A 0.6B-parameter cache-aware streaming FastConformer encoder with an RNN-T transducer decoder. Runs in both offline and cache-aware streaming modes. The encoder preserves the upstream att_context_size=[70, 13] (1.12s) cache-aware attention mask end-to-end. + ## What it's for @@ -46,11 +48,9 @@ pinned 2026-05-11. | Q4_K_M | [nemotron-speech-streaming-en-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-Q4_K_M.gguf) | 475 MB | 2.38% | -WER is measured on the full LibriSpeech test-clean split (2620 -utterances) with greedy RNN-T decoding. F32 reference baseline: 2.31%. -NVIDIA's self-reported number on the same split at -`att_context_size=[70, 13]` (1.12s chunk, w/o PnC) is 2.32% (from the -[HF model card](https://huggingface.co/nvidia/nemotron-speech-streaming-en-0.6b)). + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding. F32 reference baseline: 2.31%. NVIDIA's self-reported number on the same split at att_context_size=[70, 13] (1.12s chunk, w/o PnC) is 2.32%. + ## Streaming WER diff --git a/docs/models/parakeet-ctc-0.6b.md b/docs/models/parakeet-ctc-0.6b.md index e7bdba6a..6a6b1356 100644 --- a/docs/models/parakeet-ctc-0.6b.md +++ b/docs/models/parakeet-ctc-0.6b.md @@ -1,9 +1,10 @@ # Parakeet CTC 0.6B -NVIDIA's [`nvidia/parakeet-ctc-0.6b`](https://huggingface.co/nvidia/parakeet-ctc-0.6b) -ported to transcribe.cpp. A 0.6B-parameter FastConformer-Large encoder with a -linear CTC head — the simplest decoder in the parakeet family and therefore -the fastest. + +Upstream: [`nvidia/parakeet-ctc-0.6b`](https://huggingface.co/nvidia/parakeet-ctc-0.6b) at [`ad09ba1`](https://huggingface.co/nvidia/parakeet-ctc-0.6b/commit/ad09ba1). + +Offline English speech-to-text with greedy CTC decoding. A 0.6B-parameter FastConformer-Large encoder with a linear CTC head — the simplest and fastest decoder in the parakeet family. Output is lowercase, no punctuation. Not a streaming model and does not translate. + ## What it's for @@ -36,7 +37,9 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-ctc-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-Q4_K_M.gguf) | 469 MB | 1.90% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.87% (from the [HF model card](https://huggingface.co/nvidia/parakeet-ctc-0.6b)). + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.87%. + ## Quick Start diff --git a/docs/models/parakeet-ctc-1.1b.md b/docs/models/parakeet-ctc-1.1b.md index 23b58db3..9e429bf8 100644 --- a/docs/models/parakeet-ctc-1.1b.md +++ b/docs/models/parakeet-ctc-1.1b.md @@ -1,8 +1,10 @@ # Parakeet CTC 1.1B -NVIDIA's [`nvidia/parakeet-ctc-1.1b`](https://huggingface.co/nvidia/parakeet-ctc-1.1b) -ported to transcribe.cpp. A 1.1B-parameter FastConformer-XL encoder with a -linear CTC head. + +Upstream: [`nvidia/parakeet-ctc-1.1b`](https://huggingface.co/nvidia/parakeet-ctc-1.1b) at [`a707e81`](https://huggingface.co/nvidia/parakeet-ctc-1.1b/commit/a707e81). + +Offline English speech-to-text with greedy CTC decoding. A 1.1B-parameter FastConformer-XL encoder with a linear CTC head. Output is lowercase, no punctuation. Not a streaming model and does not translate. + ## What it's for @@ -35,7 +37,9 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-ctc-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-Q4_K_M.gguf) | 818 MB | 1.90% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.85%. NVIDIA's self-reported number on the same split is 1.83% (from the [HF model card](https://huggingface.co/nvidia/parakeet-ctc-1.1b)). + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.85%. NVIDIA's self-reported number on the same split is 1.83%. + ## Quick Start diff --git a/docs/models/parakeet-primeline.md b/docs/models/parakeet-primeline.md index 098098be..3ff8d719 100644 --- a/docs/models/parakeet-primeline.md +++ b/docs/models/parakeet-primeline.md @@ -1,9 +1,16 @@ # Parakeet primeLine (German-tuned) -primeLine's [`primeline/parakeet-primeline`](https://huggingface.co/primeline/parakeet-primeline) -ported to transcribe.cpp. A German fine-tune of NVIDIA's -[`parakeet-tdt-0.6b-v3`](parakeet-tdt-0.6b-v3.md): a 0.6B-parameter -FastConformer encoder with a TDT/RNNT transducer decoder. + +Upstream: [`primeline/parakeet-primeline`](https://huggingface.co/primeline/parakeet-primeline) at [`3f1a9bc`](https://huggingface.co/primeline/parakeet-primeline/commit/3f1a9bc). + +primeLine's German fine-tune of NVIDIA's parakeet-tdt-0.6b-v3. A +0.6B-parameter FastConformer encoder with a TDT/RNNT transducer decoder, +taking 16 kHz mono WAV and producing a punctuated, cased transcript with +optional token-level timestamps. Tuned for German, but the fine-tune did +not collapse the base model's multilingual ability: it still transcribes +the other 24 v3 languages with correct per-language casing and +punctuation. Not a streaming model and does not translate. + ## What it's for @@ -35,12 +42,26 @@ pinned 2026-08-16. | Q4_K_M | [parakeet-primeline-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q4_K_M.gguf) | 485 MB | 5.98% | -WER is measured on the full FLEURS German test split (862 utterances) -with greedy transducer decoding and no external LM. The reference -baseline, primeLine's own NeMo checkpoint over the identical manifest, -is 5.98%. The quant matrix spans 0.04pp with no monotonic degradation; -Q4_K_M scores marginally better than F32 (5.9845% vs 5.9952%), which is -noise, not an improvement. Any preset is safe to ship. + +WER measured on the FLEURS German test split (862 utterances) with greedy +transducer decoding and no external LM. + +primeLine's published figures (2.95% average over Tuda-De, Multilingual +LibriSpeech, and Common Voice 19.0) are on different corpora and are not +comparable to these numbers. As a like-for-like baseline we ran primeLine's +own NeMo checkpoint over the identical manifest: **5.98% WER**. The C++ +numbers above match that reference within bootstrap-CI noise, and the quant +spread is 0.04pp end to end with no monotonic degradation. + +Orthography note: this checkpoint writes Swiss `ss` forms (`grosse`, +`heisst`) almost everywhere instead of `ß`, which appears just 5 times +across the 862 hypotheses. The upstream SentencePiece vocabulary carries +only 4 pieces containing `ß` against 58 containing `ss`, so this is a +property of the v3-family tokenizer, not of the port — the NeMo reference +produces the same spellings on the same utterances. FLEURS references use +`ß` throughout, which costs roughly 1.05pp: folding `ß`→`ss` on both sides +gives 4.92% for the reference and 4.94% for F32. + primeLine's published 2.95% average is over Tuda-De, Multilingual LibriSpeech, and Common Voice 19.0. Those corpora are not in this repo's diff --git a/docs/models/parakeet-rnnt-0.6b.md b/docs/models/parakeet-rnnt-0.6b.md index 2397f737..869dfadc 100644 --- a/docs/models/parakeet-rnnt-0.6b.md +++ b/docs/models/parakeet-rnnt-0.6b.md @@ -1,8 +1,10 @@ # Parakeet RNN-T 0.6B -NVIDIA's [`nvidia/parakeet-rnnt-0.6b`](https://huggingface.co/nvidia/parakeet-rnnt-0.6b) -ported to transcribe.cpp. A 0.6B-parameter FastConformer-Large encoder with a -classic RNN-T transducer decoder (predictor + joint, no duration head). + +Upstream: [`nvidia/parakeet-rnnt-0.6b`](https://huggingface.co/nvidia/parakeet-rnnt-0.6b) at [`c0c1f09`](https://huggingface.co/nvidia/parakeet-rnnt-0.6b/commit/c0c1f09). + +Offline English speech-to-text with greedy RNN-T decoding. A 0.6B-parameter FastConformer-Large encoder with an RNN-T transducer decoder. Output is lowercase, no punctuation. Not a streaming model and does not translate. + ## What it's for @@ -37,7 +39,9 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-rnnt-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-Q4_K_M.gguf) | 476 MB | 1.66% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.62%. NVIDIA's self-reported number on the same split is 1.63% (from the [HF model card](https://huggingface.co/nvidia/parakeet-rnnt-0.6b)). + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.62%. NVIDIA's self-reported number on the same split is 1.63%. + ## Quick Start diff --git a/docs/models/parakeet-rnnt-1.1b.md b/docs/models/parakeet-rnnt-1.1b.md index 574d4497..2a7d01b4 100644 --- a/docs/models/parakeet-rnnt-1.1b.md +++ b/docs/models/parakeet-rnnt-1.1b.md @@ -1,8 +1,10 @@ # Parakeet RNN-T 1.1B -NVIDIA's [`nvidia/parakeet-rnnt-1.1b`](https://huggingface.co/nvidia/parakeet-rnnt-1.1b) -ported to transcribe.cpp. A 1.1B-parameter FastConformer-XL encoder with a -classic RNN-T transducer decoder (predictor + joint, no duration head). + +Upstream: [`nvidia/parakeet-rnnt-1.1b`](https://huggingface.co/nvidia/parakeet-rnnt-1.1b) at [`a07b19e`](https://huggingface.co/nvidia/parakeet-rnnt-1.1b/commit/a07b19e). + +Offline English speech-to-text with greedy RNN-T decoding. A 1.1B-parameter FastConformer-XL encoder with an RNN-T transducer decoder. Output is lowercase, no punctuation. Not a streaming model and does not translate. + ## What it's for @@ -35,7 +37,9 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-rnnt-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-Q4_K_M.gguf) | 825 MB | 1.41% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.45%. NVIDIA's self-reported number on the same split is 1.46% (from the [HF model card](https://huggingface.co/nvidia/parakeet-rnnt-1.1b)). + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.45%. NVIDIA's self-reported number on the same split is 1.46%. + ## Quick Start diff --git a/docs/models/parakeet-tdt-0.6b-v2.md b/docs/models/parakeet-tdt-0.6b-v2.md index 25bb82d2..28dd512a 100644 --- a/docs/models/parakeet-tdt-0.6b-v2.md +++ b/docs/models/parakeet-tdt-0.6b-v2.md @@ -1,8 +1,13 @@ # Parakeet TDT 0.6B v2 -NVIDIA's [`nvidia/parakeet-tdt-0.6b-v2`](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2) -ported to transcribe.cpp. A 0.6B-parameter Conformer encoder with a TDT/RNNT -transducer decoder. + +Upstream: [`nvidia/parakeet-tdt-0.6b-v2`](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2) at [`1b149a3`](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2/commit/1b149a3). + +Offline English speech-to-text. A 0.6B-parameter Conformer encoder with a +TDT/RNNT transducer decoder. Takes a 16 kHz mono WAV and produces a transcript +with optional token-level timestamps. Not a streaming model; no multilingual +capability (see v3 for that). + ## What it's for @@ -31,11 +36,12 @@ pinned 2026-04-15. | Q4_K_M | [parakeet-tdt-0.6b-v2-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-Q4_K_M.gguf) | 475 MB | 1.72% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy transducer decoding and no external LM. F32 reference baseline: -1.68%. NVIDIA's self-reported number on the same split is 1.69% (from the -[HF model card](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2)), so our -F32 and Q8_0 ports match the upstream reference within rounding. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with +greedy transducer decoding and no external LM. F32 reference baseline: 1.68%. +NVIDIA's self-reported number on the same split is 1.69%, so the F32 and Q8_0 +ports match the upstream reference within rounding. + ## Quick Start diff --git a/docs/models/parakeet-tdt-0.6b-v3.md b/docs/models/parakeet-tdt-0.6b-v3.md index 042d12be..8996cb4d 100644 --- a/docs/models/parakeet-tdt-0.6b-v3.md +++ b/docs/models/parakeet-tdt-0.6b-v3.md @@ -1,8 +1,13 @@ # Parakeet TDT 0.6B v3 -NVIDIA's [`nvidia/parakeet-tdt-0.6b-v3`](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3) -ported to transcribe.cpp. A 0.6B-parameter Conformer encoder with a TDT/RNNT -transducer decoder. + +Upstream: [`nvidia/parakeet-tdt-0.6b-v3`](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3) at [`6d590f7`](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3/commit/6d590f7). + +Offline multilingual speech-to-text covering 25 European languages. A +0.6B-parameter Conformer encoder with a TDT/RNNT transducer decoder. Takes +a 16 kHz mono WAV and produces a transcript with optional token-level +timestamps. Not a streaming model and does not translate. + ## What it's for @@ -34,10 +39,11 @@ pinned 2026-04-16. | Q4_K_M | [parakeet-tdt-0.6b-v3-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-Q4_K_M.gguf) | 485 MB | 1.98% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy transducer decoding and no external LM. F32 reference baseline: -1.95%. NVIDIA's self-reported number on the same split is 1.93% (from the -[HF model card](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3)) + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with +greedy transducer decoding and no external LM. F32 reference baseline: 1.95%. +NVIDIA's self-reported number on the same split is 1.93%. + ## Quick Start diff --git a/docs/models/parakeet-tdt-1.1b.md b/docs/models/parakeet-tdt-1.1b.md index 828cd4dc..be1cb244 100644 --- a/docs/models/parakeet-tdt-1.1b.md +++ b/docs/models/parakeet-tdt-1.1b.md @@ -1,8 +1,10 @@ # Parakeet TDT 1.1B -NVIDIA's [`nvidia/parakeet-tdt-1.1b`](https://huggingface.co/nvidia/parakeet-tdt-1.1b) -ported to transcribe.cpp. A 1.1B-parameter FastConformer-XL encoder with a -TDT/RNN-T transducer decoder (predictor + joint with duration head). + +Upstream: [`nvidia/parakeet-tdt-1.1b`](https://huggingface.co/nvidia/parakeet-tdt-1.1b) at [`53276c6`](https://huggingface.co/nvidia/parakeet-tdt-1.1b/commit/53276c6). + +Offline English speech-to-text. A 1.1B-parameter FastConformer-XL encoder with a TDT/RNNT transducer decoder. Takes a 16 kHz mono WAV and produces a transcript with optional token-level timestamps. Not a streaming model and does not translate. + ## What it's for @@ -36,7 +38,9 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-tdt-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-Q4_K_M.gguf) | 825 MB | 1.42% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT decoding and no external LM. F32 reference baseline: 1.39%. NVIDIA's self-reported number on the same split is 1.39% (from the [HF model card](https://huggingface.co/nvidia/parakeet-tdt-1.1b)). + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.39%. NVIDIA's self-reported number on the same split is 1.39%. + ## Quick Start diff --git a/docs/models/parakeet-tdt_ctc-1.1b.md b/docs/models/parakeet-tdt_ctc-1.1b.md index bc8bb1e2..1bfab588 100644 --- a/docs/models/parakeet-tdt_ctc-1.1b.md +++ b/docs/models/parakeet-tdt_ctc-1.1b.md @@ -1,9 +1,10 @@ # Parakeet TDT-CTC 1.1B -NVIDIA's [`nvidia/parakeet-tdt_ctc-1.1b`](https://huggingface.co/nvidia/parakeet-tdt_ctc-1.1b) -ported to transcribe.cpp. A hybrid 1.1B-parameter FastConformer-XL encoder -with both TDT and CTC heads sharing the same encoder; transcribe.cpp uses -the TDT head by default. + +Upstream: [`nvidia/parakeet-tdt_ctc-1.1b`](https://huggingface.co/nvidia/parakeet-tdt_ctc-1.1b) at [`675e786`](https://huggingface.co/nvidia/parakeet-tdt_ctc-1.1b/commit/675e786). + +Offline English speech-to-text with punctuation and capitalization. A 1.1B-parameter FastConformer-XL encoder with a TDT/RNNT transducer decoder (the auxiliary CTC head from the upstream hybrid checkpoint is dropped at convert time). Not a streaming model and does not translate. + ## What it's for @@ -35,7 +36,9 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-tdt_ctc-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-Q4_K_M.gguf) | 825 MB | 1.91% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.82% (from the [HF model card](https://huggingface.co/nvidia/parakeet-tdt_ctc-1.1b)). + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.82%. + ## Quick Start diff --git a/docs/models/parakeet-tdt_ctc-110m.md b/docs/models/parakeet-tdt_ctc-110m.md index 61ae9f34..ff7fd32d 100644 --- a/docs/models/parakeet-tdt_ctc-110m.md +++ b/docs/models/parakeet-tdt_ctc-110m.md @@ -1,9 +1,10 @@ # Parakeet TDT-CTC 110M -NVIDIA's [`nvidia/parakeet-tdt_ctc-110m`](https://huggingface.co/nvidia/parakeet-tdt_ctc-110m) -ported to transcribe.cpp. A hybrid 110M-parameter FastConformer encoder with -both TDT and CTC heads sharing the same encoder; transcribe.cpp uses the TDT -head by default. + +Upstream: [`nvidia/parakeet-tdt_ctc-110m`](https://huggingface.co/nvidia/parakeet-tdt_ctc-110m) at [`431a349`](https://huggingface.co/nvidia/parakeet-tdt_ctc-110m/commit/431a349). + +Offline English speech-to-text with punctuation and capitalization. A 110M-parameter FastConformer encoder with a TDT/RNNT transducer decoder (the auxiliary CTC head from the upstream hybrid checkpoint is dropped at convert time). Not a streaming model and does not translate. + ## What it's for @@ -33,7 +34,9 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-tdt_ctc-110m-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-Q4_K_M.gguf) | 90 MB | 2.53% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT decoding and no external LM. F32 reference baseline: 2.43%. NVIDIA's self-reported number on the same split is 2.40% (from the [HF model card](https://huggingface.co/nvidia/parakeet-tdt_ctc-110m)). + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 2.43%. NVIDIA's self-reported number on the same split is 2.40%. + ## Quick Start diff --git a/docs/models/parakeet-unified-en-0.6b.md b/docs/models/parakeet-unified-en-0.6b.md index 18ac11c6..65342f63 100644 --- a/docs/models/parakeet-unified-en-0.6b.md +++ b/docs/models/parakeet-unified-en-0.6b.md @@ -1,8 +1,10 @@ # Parakeet Unified EN 0.6B -NVIDIA's [`nvidia/parakeet-unified-en-0.6b`](https://huggingface.co/nvidia/parakeet-unified-en-0.6b) -ported to transcribe.cpp. A 0.6B-parameter FastConformer encoder with an -RNN-T transducer decoder, trained as a "unified" streaming/offline model. + +Upstream: [`nvidia/parakeet-unified-en-0.6b`](https://huggingface.co/nvidia/parakeet-unified-en-0.6b) at [`d4ac992`](https://huggingface.co/nvidia/parakeet-unified-en-0.6b/commit/d4ac992). + +English speech-to-text with punctuation and capitalization. A 0.6B-parameter FastConformer encoder with an RNN-T transducer decoder, trained as a 'unified' streaming/offline model. This port runs the model in both offline and buffered streaming modes. + ## What it's for @@ -49,7 +51,9 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-unified-en-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-Q4_K_M.gguf) | 477 MB | 1.62% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.59%. NVIDIA's self-reported number on the same split is 1.63% (from the [HF model card](https://huggingface.co/nvidia/parakeet-unified-en-0.6b)). + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.59%. NVIDIA's self-reported number on the same split is 1.63%. + ## Quick Start diff --git a/docs/models/qwen3-asr-0.6b.md b/docs/models/qwen3-asr-0.6b.md index 5b05fe46..5f7cf337 100644 --- a/docs/models/qwen3-asr-0.6b.md +++ b/docs/models/qwen3-asr-0.6b.md @@ -1,9 +1,14 @@ # Qwen3-ASR 0.6B -Alibaba's [`Qwen/Qwen3-ASR-0.6B`](https://huggingface.co/Qwen/Qwen3-ASR-0.6B) -ported to transcribe.cpp. An 18-layer bidirectional audio encoder feeds a -28-layer Qwen3 causal LM with audio-token injection (no cross-attention — -the LM processes a fused audio+text sequence through a chat template). + +Upstream: [`Qwen/Qwen3-ASR-0.6B`](https://huggingface.co/Qwen/Qwen3-ASR-0.6B) at [`5eb144179a02acc5e5ba31e748d22b0cf3e303b0`](https://huggingface.co/Qwen/Qwen3-ASR-0.6B/commit/5eb144179a02acc5e5ba31e748d22b0cf3e303b0). + +Offline multilingual speech-to-text. An 18-layer bidirectional audio encoder +feeds a 28-layer Qwen3 causal LM with audio-token injection (fused +audio+text sequence, no cross-attention). Auto-detects the audio's language +across 30 languages and emits the transcript in that language. Takes a +16 kHz mono WAV; explicit language hints are not supported at this time. + ## What it's for @@ -34,9 +39,15 @@ Ported from upstream commit | Q4_K_M | [Qwen3-ASR-0.6B-Q4_K_M.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-Q4_K_M.gguf) | 590 MB | 2.26% | -WER measured on LibriSpeech `test-clean` (2620 utterances), Whisper-style -English text normalizer, jiwer 3.x, metal backend on Apple M4. Reproduce + +WER measured on the full LibriSpeech `test-clean` split (2620 English +utterances) with the Whisper-style English text normalizer and jiwer 3.x, +on the metal backend of an Apple M4. Qwen3-ASR is a multilingual model — +this number characterizes the English case only. BF16 / F16 / Q8_0 / Q6_K +are all within bootstrap CI of each other; Q5_K_M and Q4_K_M show a small +but real regression driven by the tied token-embedding / head. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. + **FLEURS-zh** (945 utterances) CER: 7.6% on the upstream `qwen_asr` reference, 7.64% on the Q8_0 port (95% CI [6.74%, 8.51%]); within diff --git a/docs/models/qwen3-asr-1.7b.md b/docs/models/qwen3-asr-1.7b.md index 8c9e9e01..3bd36924 100644 --- a/docs/models/qwen3-asr-1.7b.md +++ b/docs/models/qwen3-asr-1.7b.md @@ -1,10 +1,16 @@ # Qwen3-ASR 1.7B -Alibaba's [`Qwen/Qwen3-ASR-1.7B`](https://huggingface.co/Qwen/Qwen3-ASR-1.7B) -ported to transcribe.cpp. Architecture is the same audio-LLM pattern as -the 0.6B variant (24-layer bidirectional audio encoder + Qwen3 causal LM -with audio-token injection); the 1.7B is wider: encoder `d_model=1024` -(16 heads), LM `hidden_size=2048`, `intermediate_size=6144`. + +Upstream: [`Qwen/Qwen3-ASR-1.7B`](https://huggingface.co/Qwen/Qwen3-ASR-1.7B) at [`7278e1e70fe206f11671096ffdd38061171dd6e5`](https://huggingface.co/Qwen/Qwen3-ASR-1.7B/commit/7278e1e70fe206f11671096ffdd38061171dd6e5). + +Offline multilingual speech-to-text. Same audio-LLM architecture as the +0.6B variant (bidirectional audio encoder feeding a Qwen3 causal LM with +audio-token injection), wider: encoder `d_model=1024` (16 heads), LM +`hidden_size=2048`, `intermediate_size=6144`. Auto-detects the audio's +language across 30 languages and emits the transcript in that language. +Takes a 16 kHz mono WAV; explicit language hints are not supported at +this time. + ## What it's for @@ -33,9 +39,16 @@ Ported from upstream commit | Q4_K_M | [Qwen3-ASR-1.7B-Q4_K_M.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-Q4_K_M.gguf) | 1.32 GB | 1.81% | -WER measured on LibriSpeech `test-clean` (2620 utterances), Whisper-style -English text normalizer, jiwer 3.x, metal backend on Apple M4. Reproduce -with `scripts/wer/run.py` + `scripts/wer/score.py`. + +WER measured on the full LibriSpeech `test-clean` split (2620 English +utterances) with the Whisper-style English text normalizer and jiwer 3.x, +on the metal backend of an Apple M4. Qwen3-ASR is a multilingual model — +this number characterizes the English case only. The larger decoder +gives 1.7B more quantization headroom than the 0.6B; BF16 / F16 / Q8_0 / +Q6_K / Q5_K_M are all within bootstrap CI of each other, and Q4_K_M +regresses only ~0.2 WER points. Reproduce with `scripts/wer/run.py` + +`scripts/wer/score.py`. + ## Quick Start diff --git a/docs/models/sensevoice-small.md b/docs/models/sensevoice-small.md index 47efc1c4..c6b60ff2 100644 --- a/docs/models/sensevoice-small.md +++ b/docs/models/sensevoice-small.md @@ -1,9 +1,17 @@ # SenseVoice Small -Alibaba / FunAudioLLM's [`FunAudioLLM/SenseVoiceSmall`](https://huggingface.co/FunAudioLLM/SenseVoiceSmall) -ported to transcribe.cpp. A 234M-parameter SAN-M encoder with a single CTC -head over a 25,055-token SentencePiece vocabulary covering Chinese, Cantonese, -English, Japanese, and Korean. + +Upstream: [`FunAudioLLM/SenseVoiceSmall`](https://huggingface.co/FunAudioLLM/SenseVoiceSmall) at [`3eb3b4eeffc2f2dde6051b853983753db33e35c3`](https://huggingface.co/FunAudioLLM/SenseVoiceSmall/commit/3eb3b4eeffc2f2dde6051b853983753db33e35c3). + +Offline multilingual speech-to-text in Chinese, Cantonese, English, Japanese, +and Korean. A 234M-parameter SAN-M encoder with a single CTC head over a +25,055-token SentencePiece vocabulary. Takes a 16 kHz mono WAV (capped at +30 seconds per call, per upstream's direct-inference contract) and produces +a transcript. Not a streaming model, no translation, no built-in long-form +chunking. The same CTC head also emits language-ID, simple emotion labels, +audio-event tags, and an inverse-text-normalization flag — opt-in via +`--raw-tokens` and `--itn`. + ## What it's for @@ -49,14 +57,16 @@ recordings (e.g. with VAD) for best results. See the | Q4_K_M | [SenseVoiceSmall-Q4_K_M.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-Q4_K_M.gguf) | 146 MB | 3.45% | -WER is measured on the full LibriSpeech test-clean split (2620 utterances) + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding. The publisher does not report a numerical -LibriSpeech WER, so the -gate baseline is **our own FunASR 1.3.1 reference run** on the same manifest: -3.13% (95% CI [2.93%, 3.34%]). transcribe.cpp's F32 port matches that -baseline within +0.002 percentage-points. Q4_K_M is the only quant with a -visible regression (+0.32 pp); F16 / Q8_0 / Q6_K / Q5_K_M are within -bootstrap noise of F32. +LibriSpeech WER (the model card publishes scores only as PNG figures), so +the gate baseline is our own FunASR 1.3.1 reference run on the same +manifest: 3.13% (95% CI [2.93%, 3.34%]). transcribe.cpp's F32 port matches +that baseline within +0.002 percentage-points. LibriSpeech is an English +benchmark; SenseVoice's strongest case is Mandarin, and AISHELL-1 (CER) +is the recommended complementary check. + LibriSpeech is an English benchmark; SenseVoice's strongest case is Mandarin. **FLEURS-zh** (945 utterances) CER: 10.20% on our FunASR 1.3.1 diff --git a/docs/models/voxtral-mini-3b-2507.md b/docs/models/voxtral-mini-3b-2507.md index f39b64df..fae681f7 100644 --- a/docs/models/voxtral-mini-3b-2507.md +++ b/docs/models/voxtral-mini-3b-2507.md @@ -1,12 +1,17 @@ # Voxtral Mini 3B (2507) -Mistral's [`mistralai/Voxtral-Mini-3B-2507`](https://huggingface.co/mistralai/Voxtral-Mini-3B-2507) -ported to transcribe.cpp. An offline audio-LLM: a Whisper-large-v3 -bidirectional audio encoder (32 layers, `d_model=1280`, 20 heads) feeds -a 4-frame-group projector (375 audio tokens per 30 s chunk) into a -Ministral-3B causal LM (30 layers, `hidden_size=3072`, -`intermediate_size=8192`, GQA 32 q / 8 kv heads, NEOX RoPE, SwiGLU) via -audio-token injection at the `audio_token_id=24` positions in the prompt. + +Upstream: [`mistralai/Voxtral-Mini-3B-2507`](https://huggingface.co/mistralai/Voxtral-Mini-3B-2507) at [`3060fe3`](https://huggingface.co/mistralai/Voxtral-Mini-3B-2507/commit/3060fe3). + +Offline audio-LLM speech-to-text and speech translation. A Whisper-large-v3 +bidirectional audio encoder feeds a 4-frame-group projector (375 audio tokens +per 30 s chunk) into a Ministral-3B causal LM (30 layers, GQA 32/8, NEOX RoPE, +SwiGLU) via audio-token injection. Takes a 16 kHz mono WAV and produces a +transcript via greedy decoding; speech translation runs through the +mistral-common instruct template. The smaller sibling of Voxtral Small 24B — +same encoder, projector, log-mel frontend, and tekken tokenizer, with a 3B +decoder in place of Mistral-Small-24B. + ## What it's for @@ -40,12 +45,15 @@ pinned 2026-06-06. | Q4_K_M | [Voxtral-Mini-3B-2507-Q4_K_M.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-Q4_K_M.gguf) | 2.98 GB | 1.94% | -WER measured on the full LibriSpeech `test-clean` split (2620 utterances) -with the Whisper-style English text normalizer, batch size 8 on an NVIDIA -L40S. The same-machine HuggingFace `transformers` reference run -(`VoxtralForConditionalGeneration`, BF16, `attn_implementation=eager`, -greedy) lands at **1.87%**, and the BF16 GGUF matches it (1.87% at batch -1). + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with +the Whisper English text normalizer, batch size 8 on an NVIDIA L40S. +Same-machine HuggingFace transformers reference +(VoxtralForConditionalGeneration, BF16, attn_implementation=eager, greedy): +1.87%; the BF16 GGUF matches within rounding. The BF16-vs-reference parity is +the family's tensor-level numerical gate — 43 checkpointed tensors within +tolerance, transcript byte-exact. + ## Quick Start diff --git a/docs/models/voxtral-small-24b-2507.md b/docs/models/voxtral-small-24b-2507.md index 9c7f4611..03b0a24a 100644 --- a/docs/models/voxtral-small-24b-2507.md +++ b/docs/models/voxtral-small-24b-2507.md @@ -1,17 +1,15 @@ # Voxtral Small 24B (2507) -Mistral's [`mistralai/Voxtral-Small-24B-2507`](https://huggingface.co/mistralai/Voxtral-Small-24B-2507) -ported to transcribe.cpp. An offline audio-LLM: a Whisper-large-v3 -bidirectional audio encoder (32 layers, `d_model=1280`, 20 heads) feeds -a 4-frame-group projector (375 audio tokens per 30 s chunk) into a -Mistral-Small-24B causal LM (40 layers, `hidden_size=5120`, -`intermediate_size=32768`, GQA 32 q / 8 kv heads, NEOX RoPE, SwiGLU) via -audio-token injection at the `audio_token_id=24` positions in the prompt. - -It is the larger sibling of [Voxtral Mini 3B](voxtral-mini-3b-2507.md): -the audio encoder, projector pattern, log-mel frontend, and tekken -tokenizer are identical — only the text decoder is scaled up (Mistral-Small-24B -in place of Ministral-3B). + +Upstream: [`mistralai/Voxtral-Small-24B-2507`](https://huggingface.co/mistralai/Voxtral-Small-24B-2507) at [`da5b424`](https://huggingface.co/mistralai/Voxtral-Small-24B-2507/commit/da5b424). + +Offline audio-LLM speech-to-text and speech translation. A Whisper-large-v3 +bidirectional audio encoder feeds a 4-frame-group projector (375 audio tokens +per 30 s chunk) into a Mistral-Small-24B causal LM (40 layers, GQA 32/8, NEOX +RoPE, SwiGLU) via audio-token injection. Takes a 16 kHz mono WAV and produces a +transcript via greedy decoding. The larger sibling of Voxtral Mini 3B — same +encoder, projector, frontend, and tokenizer, with a scaled-up decoder. + ## What it's for @@ -45,11 +43,15 @@ pinned 2026-06-05. | Q4_K_M | [Voxtral-Small-24B-2507-Q4_K_M.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-Q4_K_M.gguf) | 14.30 GB | 2.11% | -WER measured on the full LibriSpeech `test-clean` split (2620 utterances) -with the Whisper-style English text normalizer, batch size 8 on an NVIDIA -A100 80 GB. The same-split HuggingFace `transformers` reference run -(`VoxtralForConditionalGeneration`, BF16, greedy) lands at **1.57%**, and -the BF16 GGUF matches it at **1.56%**. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with +the Whisper English text normalizer, greedy decoding, batch size 8 on an +NVIDIA A100 80 GB. Same-machine HuggingFace transformers reference +(VoxtralForConditionalGeneration, BF16, greedy): 1.57%; the BF16 GGUF matches +at 1.56%. Validation for this variant is end-to-end by WER — the family's +tensor-level numerical parity is established by the Voxtral Mini 3B sibling +(identical architecture). + ## Quick Start diff --git a/docs/models/whisper-base.en.md b/docs/models/whisper-base.en.md index f4d76fe1..5fad0346 100644 --- a/docs/models/whisper-base.en.md +++ b/docs/models/whisper-base.en.md @@ -1,8 +1,10 @@ # Whisper base.en -OpenAI's [`openai/whisper-base.en`](https://huggingface.co/openai/whisper-base.en) ported to transcribe.cpp. A 74M-parameter -encoder-decoder transformer (audio encoder + autoregressive text decoder with -cross-attention). + +Upstream: [`openai/whisper-base.en`](https://huggingface.co/openai/whisper-base.en) at [`911407f`](https://huggingface.co/openai/whisper-base.en/commit/911407f). + +OpenAI Whisper base.en — converted to GGUF for transcribe.cpp. English-only; faster than the multilingual model at the same size. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. + ## What it's for @@ -31,7 +33,9 @@ on 2026-04-26. | Q4_K_M | [whisper-base.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-Q4_K_M.gguf) | 59 MB | 4.29% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 4.25%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + ## Quick Start diff --git a/docs/models/whisper-base.md b/docs/models/whisper-base.md index 6bf40a3a..4e8c1e1e 100644 --- a/docs/models/whisper-base.md +++ b/docs/models/whisper-base.md @@ -1,8 +1,10 @@ # Whisper base -OpenAI's [`openai/whisper-base`](https://huggingface.co/openai/whisper-base) ported to transcribe.cpp. A 74M-parameter -encoder-decoder transformer (audio encoder + autoregressive text decoder with -cross-attention). + +Upstream: [`openai/whisper-base`](https://huggingface.co/openai/whisper-base) at [`e37978b`](https://huggingface.co/openai/whisper-base/commit/e37978b). + +OpenAI Whisper base — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). Encoder-decoder transformer; 30-second windows with chunked long-form decoding. + ## What it's for @@ -31,7 +33,9 @@ on 2026-04-26. | Q4_K_M | [whisper-base-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-Q4_K_M.gguf) | 59 MB | 5.36% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.009%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + ## Quick Start diff --git a/docs/models/whisper-large-v2.md b/docs/models/whisper-large-v2.md index 71afe4c3..18fcf8fd 100644 --- a/docs/models/whisper-large-v2.md +++ b/docs/models/whisper-large-v2.md @@ -1,8 +1,10 @@ # Whisper large-v2 -OpenAI's [`openai/whisper-large-v2`](https://huggingface.co/openai/whisper-large-v2) ported to transcribe.cpp. A 1.55B-parameter -encoder-decoder transformer (audio encoder + autoregressive text decoder with -cross-attention). + +Upstream: [`openai/whisper-large-v2`](https://huggingface.co/openai/whisper-large-v2) at [`ae46427`](https://huggingface.co/openai/whisper-large-v2/commit/ae46427). + +OpenAI Whisper large-v2 — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). Encoder-decoder transformer; 30-second windows with chunked long-form decoding. + ## What it's for @@ -31,7 +33,9 @@ on 2026-04-26. | Q4_K_M | [whisper-large-v2-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-Q4_K_M.gguf) | 997 MB | 2.46% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.83%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + ## Quick Start diff --git a/docs/models/whisper-large-v3-turbo.md b/docs/models/whisper-large-v3-turbo.md index 7ff7f652..c9958aad 100644 --- a/docs/models/whisper-large-v3-turbo.md +++ b/docs/models/whisper-large-v3-turbo.md @@ -1,8 +1,10 @@ # Whisper large-v3-turbo -OpenAI's [`openai/whisper-large-v3-turbo`](https://huggingface.co/openai/whisper-large-v3-turbo) ported to transcribe.cpp. A 809M-parameter -encoder-decoder transformer (audio encoder + autoregressive text decoder with -cross-attention). + +Upstream: [`openai/whisper-large-v3-turbo`](https://huggingface.co/openai/whisper-large-v3-turbo) at [`41f01f3`](https://huggingface.co/openai/whisper-large-v3-turbo/commit/41f01f3). + +OpenAI Whisper large-v3-turbo — converted to GGUF for transcribe.cpp. Multilingual transcription and language detection; unlike the full large-v3 model, this turbo variant does not support speech translation. The v3 family adds Cantonese (yue) and uses a 128-bin mel input. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. + ## What it's for @@ -30,7 +32,9 @@ on 2026-04-26. | Q4_K_M | [whisper-large-v3-turbo-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v3-turbo-gguf/resolve/main/whisper-large-v3-turbo-Q4_K_M.gguf) | 536 MB | 2.04% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.10%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + ## Quick Start diff --git a/docs/models/whisper-large-v3.md b/docs/models/whisper-large-v3.md index 287196ab..ae873bcd 100644 --- a/docs/models/whisper-large-v3.md +++ b/docs/models/whisper-large-v3.md @@ -1,8 +1,10 @@ # Whisper large-v3 -OpenAI's [`openai/whisper-large-v3`](https://huggingface.co/openai/whisper-large-v3) ported to transcribe.cpp. A 1.55B-parameter -encoder-decoder transformer (audio encoder + autoregressive text decoder with -cross-attention). + +Upstream: [`openai/whisper-large-v3`](https://huggingface.co/openai/whisper-large-v3) at [`06f233f`](https://huggingface.co/openai/whisper-large-v3/commit/06f233f). + +OpenAI Whisper large-v3 — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). v3 family adds Cantonese (yue) and uses a 128-bin mel input. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. + ## What it's for @@ -30,7 +32,9 @@ on 2026-04-26. | Q4_K_M | [whisper-large-v3-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v3-gguf/resolve/main/whisper-large-v3-Q4_K_M.gguf) | 997 MB | 1.86% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.01%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + ## Quick Start diff --git a/docs/models/whisper-large.md b/docs/models/whisper-large.md index 243c8c12..b309670b 100644 --- a/docs/models/whisper-large.md +++ b/docs/models/whisper-large.md @@ -1,8 +1,10 @@ # Whisper large -OpenAI's [`openai/whisper-large`](https://huggingface.co/openai/whisper-large) ported to transcribe.cpp. A 1.55B-parameter -encoder-decoder transformer (audio encoder + autoregressive text decoder with -cross-attention). + +Upstream: [`openai/whisper-large`](https://huggingface.co/openai/whisper-large) at [`4ef9b41`](https://huggingface.co/openai/whisper-large/commit/4ef9b41). + +OpenAI Whisper large — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). Encoder-decoder transformer; 30-second windows with chunked long-form decoding. + ## What it's for @@ -31,7 +33,9 @@ on 2026-04-26. | Q4_K_M | [whisper-large-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-Q4_K_M.gguf) | 997 MB | 2.67% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.73%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + ## Quick Start diff --git a/docs/models/whisper-medium.en.md b/docs/models/whisper-medium.en.md index 9f160adb..1f773a0a 100644 --- a/docs/models/whisper-medium.en.md +++ b/docs/models/whisper-medium.en.md @@ -1,8 +1,10 @@ # Whisper medium.en -OpenAI's [`openai/whisper-medium.en`](https://huggingface.co/openai/whisper-medium.en) ported to transcribe.cpp. A 769M-parameter -encoder-decoder transformer (audio encoder + autoregressive text decoder with -cross-attention). + +Upstream: [`openai/whisper-medium.en`](https://huggingface.co/openai/whisper-medium.en) at [`2e98eb6`](https://huggingface.co/openai/whisper-medium.en/commit/2e98eb6). + +OpenAI Whisper medium.en — converted to GGUF for transcribe.cpp. English-only; faster than the multilingual model at the same size. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. + ## What it's for @@ -31,7 +33,9 @@ on 2026-04-26. | Q4_K_M | [whisper-medium.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-Q4_K_M.gguf) | 504 MB | 2.91% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.02%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + ## Quick Start diff --git a/docs/models/whisper-medium.md b/docs/models/whisper-medium.md index 32b2805d..35b4e0c4 100644 --- a/docs/models/whisper-medium.md +++ b/docs/models/whisper-medium.md @@ -1,8 +1,10 @@ # Whisper medium -OpenAI's [`openai/whisper-medium`](https://huggingface.co/openai/whisper-medium) ported to transcribe.cpp. A 769M-parameter -encoder-decoder transformer (audio encoder + autoregressive text decoder with -cross-attention). + +Upstream: [`openai/whisper-medium`](https://huggingface.co/openai/whisper-medium) at [`abdf7c3`](https://huggingface.co/openai/whisper-medium/commit/abdf7c3). + +OpenAI Whisper medium — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). Encoder-decoder transformer; 30-second windows with chunked long-form decoding. + ## What it's for @@ -31,7 +33,9 @@ on 2026-04-26. | Q4_K_M | [whisper-medium-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-Q4_K_M.gguf) | 504 MB | 2.59% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.90%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + ## Quick Start diff --git a/docs/models/whisper-small.en.md b/docs/models/whisper-small.en.md index 3af52b7e..c79b4f13 100644 --- a/docs/models/whisper-small.en.md +++ b/docs/models/whisper-small.en.md @@ -1,8 +1,10 @@ # Whisper small.en -OpenAI's [`openai/whisper-small.en`](https://huggingface.co/openai/whisper-small.en) ported to transcribe.cpp. A 244M-parameter -encoder-decoder transformer (audio encoder + autoregressive text decoder with -cross-attention). + +Upstream: [`openai/whisper-small.en`](https://huggingface.co/openai/whisper-small.en) at [`e872752`](https://huggingface.co/openai/whisper-small.en/commit/e872752). + +OpenAI Whisper small.en — converted to GGUF for transcribe.cpp. English-only; faster than the multilingual model at the same size. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. + ## What it's for @@ -31,7 +33,9 @@ on 2026-04-26. | Q4_K_M | [whisper-small.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-Q4_K_M.gguf) | 172 MB | 3.09% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.05%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + ## Quick Start diff --git a/docs/models/whisper-small.md b/docs/models/whisper-small.md index 53414af6..e7afaf3a 100644 --- a/docs/models/whisper-small.md +++ b/docs/models/whisper-small.md @@ -1,8 +1,10 @@ # Whisper small -OpenAI's [`openai/whisper-small`](https://huggingface.co/openai/whisper-small) ported to transcribe.cpp. A 244M-parameter -encoder-decoder transformer (audio encoder + autoregressive text decoder with -cross-attention). + +Upstream: [`openai/whisper-small`](https://huggingface.co/openai/whisper-small) at [`973afd2`](https://huggingface.co/openai/whisper-small/commit/973afd2). + +OpenAI Whisper small — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). Encoder-decoder transformer; 30-second windows with chunked long-form decoding. + ## What it's for @@ -31,7 +33,9 @@ on 2026-04-26. | Q4_K_M | [whisper-small-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-Q4_K_M.gguf) | 172 MB | 3.40% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.432%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + ## Quick Start diff --git a/docs/models/whisper-tiny.en.md b/docs/models/whisper-tiny.en.md index c1a5568c..735d2657 100644 --- a/docs/models/whisper-tiny.en.md +++ b/docs/models/whisper-tiny.en.md @@ -1,8 +1,10 @@ # Whisper tiny.en -OpenAI's [`openai/whisper-tiny.en`](https://huggingface.co/openai/whisper-tiny.en) ported to transcribe.cpp. A 39M-parameter -encoder-decoder transformer (audio encoder + autoregressive text decoder with -cross-attention). + +Upstream: [`openai/whisper-tiny.en`](https://huggingface.co/openai/whisper-tiny.en) at [`87c7102`](https://huggingface.co/openai/whisper-tiny.en/commit/87c7102). + +OpenAI Whisper tiny.en — converted to GGUF for transcribe.cpp. English-only; faster than the multilingual model at the same size. Encoder-decoder transformer; 30-second windows with chunked long-form decoding. + ## What it's for @@ -31,7 +33,9 @@ on 2026-04-26. | Q4_K_M | [whisper-tiny.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-Q4_K_M.gguf) | 44 MB | 5.96% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.66%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + ## Quick Start diff --git a/docs/models/whisper-tiny.md b/docs/models/whisper-tiny.md index dcc98962..7fd4e663 100644 --- a/docs/models/whisper-tiny.md +++ b/docs/models/whisper-tiny.md @@ -1,8 +1,10 @@ # Whisper tiny -OpenAI's [`openai/whisper-tiny`](https://huggingface.co/openai/whisper-tiny) ported to transcribe.cpp. A 39M-parameter -encoder-decoder transformer (audio encoder + autoregressive text decoder with -cross-attention). + +Upstream: [`openai/whisper-tiny`](https://huggingface.co/openai/whisper-tiny) at [`169d4a4`](https://huggingface.co/openai/whisper-tiny/commit/169d4a4). + +OpenAI Whisper tiny — converted to GGUF for transcribe.cpp. Multilingual transcription, language detection, and speech translation (audio in any supported language → English text). Encoder-decoder transformer; 30-second windows with chunked long-form decoding. + ## What it's for @@ -31,7 +33,9 @@ on 2026-04-26. | Q4_K_M | [whisper-tiny-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-Q4_K_M.gguf) | 44 MB | 7.78% | -WER measured on the full LibriSpeech test-clean split (2620 utterances) with transcribe.cpp's default greedy decode and timestamps off (`scripts/wer/run.py --timestamps none`, the WER harness default) — the same runs summarized in the [Whisper family table](whisper.md#all-variants). Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions add ~0.1pp of run-to-run variance on the noise floor, and quantization is otherwise generally WER-neutral. See the [WER methodology](../tools/wer.md) for the harness. + +WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 7.54%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + ## Quick Start diff --git a/scripts/catalog/common.py b/scripts/catalog/common.py index d9a6531e..dffd1077 100644 --- a/scripts/catalog/common.py +++ b/scripts/catalog/common.py @@ -15,6 +15,7 @@ REPO = pathlib.Path(__file__).resolve().parents[2] CATALOG_DIR = REPO / "catalog" DOCS_DIR = REPO / "docs" / "models" +CARDS_DIR = REPO / "scripts" / "hf_cards" HEADLINE_KEYS = ("dataset", "split", "language", "metric", "batch_size", "timestamps") # The recipe half of the pointer may be null, meaning "any"; the identity diff --git a/scripts/catalog/render.py b/scripts/catalog/render.py index 6316a9b9..c6a6810e 100755 --- a/scripts/catalog/render.py +++ b/scripts/catalog/render.py @@ -1,19 +1,23 @@ #!/usr/bin/env -S uv run --script # /// script # requires-python = ">=3.11" +# dependencies = ["pyyaml"] # /// -"""Render catalog-derived tables into docs/models/*.md. +"""Render catalog-derived regions into docs/models/*.md. -The docs are hand-written prose with a few tables that restate numbers the -catalog already owns. Rather than generate whole files, this rewrites only the -regions a doc explicitly delegates: +The docs are hand-written pages with a few regions that restate what the +catalog or the HF card spec already owns: the download and perf tables, the +intro summary, and the WER methodology note. Rather than generate whole +files, this rewrites only the regions a doc explicitly delegates: | Quantization | Download | Size | WER (LibriSpeech test-clean) | ... -Everything outside a marker pair is untouched. The variant is the file stem +Blocks: `downloads`, `perf machine=`, `intro` (upstream link plus the +card spec's `summary`), and `prose field=wer.notes` (any `|` text field of +the spec, dotted path). Everything outside a marker pair is untouched. The variant is the file stem unless the marker overrides it with `variant=`, so family docs can pull a table for a model they are not named after. @@ -29,6 +33,8 @@ import shlex import sys +import yaml + sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) import common # noqa: E402 @@ -146,7 +152,48 @@ def ordered(index: int, override: str | None, rank) -> list[str]: rule_fill=True, max_pad=20) -BLOCKS = {"downloads": block_downloads, "perf": block_perf} +_SPECS: dict[str, dict] = {} + + +def spec_for(record: dict) -> dict: + """The editorial HF card spec, the prose source of truth for a variant.""" + variant = record["variant"] + if variant not in _SPECS: + path = common.CARDS_DIR / f"{variant}.yaml" + if not path.exists(): + raise RenderError(f"no card spec at {path.relative_to(common.REPO)}") + _SPECS[variant] = yaml.safe_load(path.read_text()) or {} + return _SPECS[variant] + + +def prose_lines(text: object, what: str) -> list[str]: + if not isinstance(text, str) or not text.strip(): + raise RenderError(f"{what} is empty") + return text.strip().split("\n") + + +def block_intro(record: dict, attrs: dict[str, str]) -> list[str]: + """Upstream pointer from the catalog, then the card spec's summary.""" + repo = record["upstream_repo"] + line = (f"Upstream: [`{repo}`](https://huggingface.co/{repo}) at " + f"[`{record['upstream_commit']}`]" + f"(https://huggingface.co/{repo}/commit/{record['upstream_commit']}).") + return [line, ""] + prose_lines(spec_for(record).get("summary"), "summary") + + +def block_prose(record: dict, attrs: dict[str, str]) -> list[str]: + """A text field of the card spec, named by dotted path (`wer.notes`).""" + field = attrs.get("field") + if not field: + raise RenderError("prose block needs field=") + value: object = spec_for(record) + for part in field.split("."): + value = value.get(part) if isinstance(value, dict) else None + return prose_lines(value, f"spec field {field!r}") + + +BLOCKS = {"downloads": block_downloads, "perf": block_perf, + "intro": block_intro, "prose": block_prose} # -------------------------------------------------------------------------- diff --git a/scripts/hf_cards/README.md b/scripts/hf_cards/README.md index 564556b8..3ace0631 100644 --- a/scripts/hf_cards/README.md +++ b/scripts/hf_cards/README.md @@ -3,6 +3,9 @@ `.yaml` is prose only: summary, tags, validation pin, notes. Every number, repo, licence, language, and capability comes from `catalog/.json`; `generate.py` refuses a spec that states one. +`summary` and `wer.notes` are also the source for `docs/models/.md`, +rendered into its `catalog:intro` and `catalog:prose` markers by +`scripts/catalog/render.py`. ```bash uv run scripts/hf_cards/check_release.py # pin + validation date From d4b4b299d92c5d8da01d88bdb71a00bd9a519eb3 Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sun, 13 Sep 2026 05:35:51 -0700 Subject: [PATCH 11/24] move more md autogen --- .claude/skills/porting-8-ship/SKILL.md | 20 ++-- docs/_templates/model-card.md.j2 | 16 ++- docs/models/canary-180m-flash.md | 11 +++ docs/models/canary-1b-flash.md | 11 +++ docs/models/canary-1b-v2.md | 32 ++++++ docs/models/canary-1b.md | 11 +++ docs/models/canary-qwen-2.5b.md | 8 ++ docs/models/canary.md | 14 +-- docs/models/cohere-transcribe-03-2026.md | 21 ++++ .../cohere-transcribe-arabic-07-2026.md | 14 +++ docs/models/cohere.md | 10 +- docs/models/fun-asr-mlt-nano-2512.md | 38 +++++++ docs/models/fun-asr-nano-2512.md | 10 ++ docs/models/fun-asr-nano.md | 10 +- docs/models/gigaam.md | 14 +-- docs/models/granite-4.0-1b-speech.md | 13 +++ docs/models/granite-speech-4.1-2b-nar.md | 12 +++ docs/models/granite-speech-4.1-2b-plus.md | 12 +++ docs/models/granite-speech-4.1-2b.md | 13 +++ docs/models/granite-speech.md | 14 +-- docs/models/medasr.md | 8 ++ docs/models/moonshine-base.md | 8 ++ docs/models/moonshine-streaming-medium.md | 8 ++ docs/models/moonshine-streaming-small.md | 8 ++ docs/models/moonshine-streaming-tiny.md | 8 ++ docs/models/moonshine-streaming.md | 12 ++- docs/models/moonshine-tiny.md | 8 ++ docs/models/moonshine.md | 40 ++++---- docs/models/moss-transcribe-diarize.md | 9 ++ .../multitalker-parakeet-streaming-0.6b-v1.md | 8 ++ .../models/nemotron-3.5-asr-streaming-0.6b.md | 53 +++++++--- .../nemotron-speech-streaming-en-0.6b.md | 8 ++ docs/models/parakeet-ctc-0.6b.md | 8 ++ docs/models/parakeet-ctc-1.1b.md | 8 ++ docs/models/parakeet-primeline.md | 37 +++++++ docs/models/parakeet-rnnt-0.6b.md | 8 ++ docs/models/parakeet-rnnt-1.1b.md | 8 ++ docs/models/parakeet-tdt-0.6b-v2.md | 8 ++ docs/models/parakeet-tdt-0.6b-v3.md | 32 ++++++ docs/models/parakeet-tdt-1.1b.md | 8 ++ docs/models/parakeet-tdt_ctc-1.1b.md | 8 ++ docs/models/parakeet-tdt_ctc-110m.md | 8 ++ docs/models/parakeet-unified-en-0.6b.md | 8 ++ docs/models/parakeet.md | 28 +++--- docs/models/qwen3-asr-0.6b.md | 37 +++++++ docs/models/qwen3-asr-1.7b.md | 37 +++++++ docs/models/qwen3-asr.md | 10 +- docs/models/sensevoice-small.md | 12 +++ docs/models/voxtral-mini-3b-2507.md | 15 +++ docs/models/voxtral-small-24b-2507.md | 15 +++ docs/models/voxtral.md | 10 +- docs/models/whisper-base.en.md | 8 ++ docs/models/whisper-base.md | 88 +++++++++++++++++ docs/models/whisper-large-v2.md | 51 ++++++++++ docs/models/whisper-large-v3-turbo.md | 89 +++++++++++++++++ docs/models/whisper-large-v3.md | 89 +++++++++++++++++ docs/models/whisper-large.md | 52 ++++++++++ docs/models/whisper-medium.en.md | 8 ++ docs/models/whisper-medium.md | 88 +++++++++++++++++ docs/models/whisper-small.en.md | 8 ++ docs/models/whisper-small.md | 88 +++++++++++++++++ docs/models/whisper-tiny.en.md | 8 ++ docs/models/whisper-tiny.md | 88 +++++++++++++++++ docs/models/whisper.md | 30 +++--- scripts/catalog/common.py | 33 +++++++ scripts/catalog/render.py | 98 +++++++++++++++++-- 66 files changed, 1489 insertions(+), 124 deletions(-) diff --git a/.claude/skills/porting-8-ship/SKILL.md b/.claude/skills/porting-8-ship/SKILL.md index 2a62b77a..66a16a93 100644 --- a/.claude/skills/porting-8-ship/SKILL.md +++ b/.claude/skills/porting-8-ship/SKILL.md @@ -169,8 +169,6 @@ tags: summary: | -default_quant_index: - wer: notes: | @@ -199,7 +197,8 @@ human review: - `docs/models/.md` - `models//README.md` -Flag likely over-promising sections (`one_liner`, `capabilities_prose`, +Flag likely over-promising sections (the spec's `summary` and `wer.notes`, which +render into both the HF README and the model page; `capabilities_prose`, Known Limitations) and wait for explicit sign-off before Step 7. ### Step 7: Sign-off @@ -240,22 +239,23 @@ uv run scripts/hf_cards/check_release.py ```bash uv run --project scripts/envs/moonshine scripts/audit_gguf_metadata.py models/ -uv run scripts/catalog/sync_capabilities.py --check --local-only +uv run scripts/catalog/sync_capabilities.py --check --models ``` `audit_gguf_metadata.py` exits non-zero on any metadata issue and was written -to gate exactly this. `sync_capabilities.py --check` exits non-zero when the -record disagrees with the file: a capability KV that disagrees with the -record means the file and its own model card are about to contradict each -other on the Hub. +to gate exactly this. `sync_capabilities.py --check --models ` reads +every published quant and exits non-zero if any file is unreadable, lacks a +capability KV, disagrees with another quant, or disagrees with the record: a +file and its own model card must not contradict each other on the Hub. **Absence is not falsity.** `read_capability_bool()` returns OK and leaves the field untouched when a key is missing, so a missing KV silently inherits the family default. `granite/capabilities.cpp` sets `supports_translate = true` on purpose so each variant's GGUF can lower it; `granite-speech-4.1-2b-plus` spelled that key `stt.capability.translation`, the lowering never happened, -and a model that does not translate advertised that it does. Every converter -declares every capability explicitly rather than relying on a default. +and a model that does not translate advertised that it does. The shared writer +factory in `scripts/lib/gguf_common.py` now writes `false` for any capability +KV a converter leaves unset, so every fresh export states all four. If `sync_capabilities.py` disagrees with what the model actually does, the GGUF is wrong and the fix is a converter change plus a re-export. Do not diff --git a/docs/_templates/model-card.md.j2 b/docs/_templates/model-card.md.j2 index e2373082..7d6dda88 100644 --- a/docs/_templates/model-card.md.j2 +++ b/docs/_templates/model-card.md.j2 @@ -77,16 +77,14 @@ full contract and the per-family bucket table. ## Download -| Quantization | Download | Size | WER ({{ dataset_display }}) | -| --- | --- | ---: | ---: | -{% for p in presets -%} -| {{ p.name }} | [{{ p.filename }}](https://huggingface.co/{{ target_hf_repo }}/resolve/main/{{ p.filename }}) | {{ p.size }} | {{ "%.2f"|format(p.wer_pct) }}% | -{% endfor %} + + -WER measured on the full {{ dataset_display }} split ({{ dataset_n }} utterances). -{%- if upstream_wer_pct is not none %} -Publisher's self-reported number on the same split is {{ "%.2f"|format(upstream_wer_pct) }}%. -{%- endif %} + + + + + ## Quick Start diff --git a/docs/models/canary-180m-flash.md b/docs/models/canary-180m-flash.md index e9176851..33f42656 100644 --- a/docs/models/canary-180m-flash.md +++ b/docs/models/canary-180m-flash.md @@ -56,6 +56,17 @@ reference framework at the noise floor. NVIDIA's self-reported number on the upstream model card is 1.87%. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| de | WER | 7.33% | +| en | WER | 5.98% | +| es | WER | 6.54% | +| fr | WER | 8.53% | + + ## Quick Start ```bash diff --git a/docs/models/canary-1b-flash.md b/docs/models/canary-1b-flash.md index be44f7b7..e7fc2dcf 100644 --- a/docs/models/canary-1b-flash.md +++ b/docs/models/canary-1b-flash.md @@ -49,6 +49,17 @@ with greedy decoding and no external LM. F32 reference baseline: 1.62%. NVIDIA's self-reported number on the upstream model card is 1.48%. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| de | WER | 6.13% | +| en | WER | 4.75% | +| es | WER | 6.73% | +| fr | WER | 7.22% | + + ## Quick Start ```bash diff --git a/docs/models/canary-1b-v2.md b/docs/models/canary-1b-v2.md index c5d86612..3da89543 100644 --- a/docs/models/canary-1b-v2.md +++ b/docs/models/canary-1b-v2.md @@ -62,6 +62,38 @@ our F32 port comes in slightly under the upstream-reported number (Δ −0.26pp) and is likely down to scoring differences. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| bg | WER | 9.22% | +| cs | WER | 8.56% | +| da | WER | 11.34% | +| de | WER | 4.46% | +| el | WER | 26.02% | +| en | WER | 4.47% | +| es | WER | 3.10% | +| et | WER | 12.72% | +| fi | WER | 8.86% | +| fr | WER | 5.09% | +| hr | WER | 8.40% | +| hu | WER | 13.06% | +| it | WER | 3.10% | +| lt | WER | 13.45% | +| lv | WER | 10.41% | +| mt | WER | 19.75% | +| nl | WER | 6.28% | +| pl | WER | 6.88% | +| pt | WER | 4.50% | +| ro | WER | 6.87% | +| ru | WER | 7.83% | +| sk | WER | 6.84% | +| sl | WER | 12.76% | +| sv | WER | 9.74% | +| uk | WER | 10.58% | + + ## Quick Start ```bash diff --git a/docs/models/canary-1b.md b/docs/models/canary-1b.md index b1dea255..006ab11d 100644 --- a/docs/models/canary-1b.md +++ b/docs/models/canary-1b.md @@ -49,6 +49,17 @@ likely this is due to differences in how we score WER, based on the results we have from canary-180m-flash. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| de | WER | 6.45% | +| en | WER | 4.44% | +| es | WER | 6.06% | +| fr | WER | 7.44% | + + ## Quick Start ```bash diff --git a/docs/models/canary-qwen-2.5b.md b/docs/models/canary-qwen-2.5b.md index 8ebe1236..43f4de2a 100644 --- a/docs/models/canary-qwen-2.5b.md +++ b/docs/models/canary-qwen-2.5b.md @@ -62,6 +62,14 @@ substitutions). Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 3.58% | + + ## Quick Start ```bash diff --git a/docs/models/canary.md b/docs/models/canary.md index 693cf822..2b25e9e5 100644 --- a/docs/models/canary.md +++ b/docs/models/canary.md @@ -31,12 +31,14 @@ WER is on LibriSpeech test-clean for the **Q8_0** preset, measured by transcribe.cpp's WER pipeline. See each per-variant doc for the full quant matrix and per-language WER/BLEU tables. -| Variant | Decoder depth | Params | Q8_0 size | WER (Q8_0) | Languages | Doc | -| --- | ---: | ---: | ---: | ---: | --- | --- | -| `canary-1b` | 24 | 1.0B | 1.1 GB | 1.55% | en, de, es, fr | [canary-1b.md](canary-1b.md) | -| `canary-1b-v2` | 8 | 978M | 1.1 GB | 1.91% | 25 European | [canary-1b-v2.md](canary-1b-v2.md) | -| `canary-1b-flash` | 4 | 883M | 1.0 GB | 1.62% | en, de, es, fr | [canary-1b-flash.md](canary-1b-flash.md) | -| `canary-180m-flash`| 4 | 182M | 208 MB | 1.93% | en, de, es, fr | [canary-180m-flash.md](canary-180m-flash.md) | + +| Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | +| --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `canary-1b` | 1B | en, de, es, fr | 1.16 GB | LibriSpeech test-clean (WER) | 1.55% | translate | [canary-1b.md](canary-1b.md) | +| `canary-1b-v2` | 980M | 25 languages | 1.14 GB | LibriSpeech test-clean (WER) | 1.91% | translate | [canary-1b-v2.md](canary-1b-v2.md) | +| `canary-1b-flash` | 890M | en, de, es, fr | 1.05 GB | LibriSpeech test-clean (WER) | 1.62% | translate | [canary-1b-flash.md](canary-1b-flash.md) | +| `canary-180m-flash` | 189M | en, de, es, fr | 218 MB | LibriSpeech test-clean (WER) | 1.93% | translate | [canary-180m-flash.md](canary-180m-flash.md) | + Pre-built GGUFs for every variant and quant are hosted under [`handy-computer` on Hugging Face](https://huggingface.co/handy-computer); diff --git a/docs/models/cohere-transcribe-03-2026.md b/docs/models/cohere-transcribe-03-2026.md index 690cb201..a35706a5 100644 --- a/docs/models/cohere-transcribe-03-2026.md +++ b/docs/models/cohere-transcribe-03-2026.md @@ -54,6 +54,27 @@ use the Whisper EnglishTextNormalizer, so the comparison is apples-to-apples and our port matches the upstream reference within rounding. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| ar | WER | 13.60% | +| de | WER | 5.06% | +| el | WER | 8.96% | +| en | WER | 5.08% | +| es | WER | 3.97% | +| fr | WER | 5.23% | +| it | WER | 3.24% | +| ja | CER | 5.13% | +| ko | CER | 6.57% | +| nl | WER | 7.16% | +| pl | WER | 6.15% | +| pt | WER | 5.18% | +| vi | WER | 7.39% | +| zh | CER | 11.18% | + + ## Quick Start ```bash diff --git a/docs/models/cohere-transcribe-arabic-07-2026.md b/docs/models/cohere-transcribe-arabic-07-2026.md index 35905d4d..bb7c329b 100644 --- a/docs/models/cohere-transcribe-arabic-07-2026.md +++ b/docs/models/cohere-transcribe-arabic-07-2026.md @@ -56,6 +56,20 @@ interval. FLEURS Arabic is Egyptian-dialect speech; upstream numbers published on other Arabic test sets are not directly comparable. + +**FLEURS test** + +| Language | Metric | Q8_0 | Q5_K_M | +| --- | --- | ---: | ---: | +| en | WER | 4.88% | 4.88% | + +**LibriSpeech test-clean** + +| Language | Metric | BF16 | F16 | Q8_0 | Q6_K | Q5_K_M | Q4_K_M | +| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | +| en | WER | 1.33% | 1.33% | 1.34% | 1.34% | 1.34% | 1.34% | + + ## Quick Start ```bash diff --git a/docs/models/cohere.md b/docs/models/cohere.md index 63b32206..b2c7b066 100644 --- a/docs/models/cohere.md +++ b/docs/models/cohere.md @@ -28,10 +28,12 @@ pipeline; each variant is evaluated on the dataset that matches its focus. See each per-variant doc for the full quant matrix and methodology. -| Variant | Params | Q8_0 size | WER (Q8_0) | Eval set | Languages | Doc | -| --- | ---: | ---: | ---: | --- | --- | --- | -| `cohere-transcribe-03-2026` | 2.0B | 2.41 GB | 1.27% | LibriSpeech test-clean | 14 languages | [cohere-transcribe-03-2026.md](cohere-transcribe-03-2026.md) | -| `cohere-transcribe-arabic-07-2026` | 2.0B | 2.41 GB | 11.06% | FLEURS Arabic test | ar, en | [cohere-transcribe-arabic-07-2026.md](cohere-transcribe-arabic-07-2026.md) | + +| Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | +| --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `cohere-transcribe-03-2026` | 2B | 14 languages | 2.41 GB | LibriSpeech test-clean (WER) | 1.27% | - | [cohere-transcribe-03-2026.md](cohere-transcribe-03-2026.md) | +| `cohere-transcribe-arabic-07-2026` | 2B | en, ar | 2.41 GB | FLEURS ar (WER) | 11.06% | - | [cohere-transcribe-arabic-07-2026.md](cohere-transcribe-arabic-07-2026.md) | + Pre-built GGUFs for every variant and quant are hosted under [`handy-computer` on Hugging Face](https://huggingface.co/handy-computer); diff --git a/docs/models/fun-asr-mlt-nano-2512.md b/docs/models/fun-asr-mlt-nano-2512.md index 46940ef5..b9241f4b 100644 --- a/docs/models/fun-asr-mlt-nano-2512.md +++ b/docs/models/fun-asr-mlt-nano-2512.md @@ -79,6 +79,44 @@ not English accuracy. For the other 30 languages, run your own representative manifest. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| ar | WER | 25.79% | +| bg | WER | 84.98% | +| cs | WER | 53.56% | +| da | WER | 69.93% | +| el | WER | 103.55% | +| en | WER | 4.90% | +| et | WER | 64.22% | +| fi | WER | 68.16% | +| fil | WER | 15.62% | +| ga | WER | 100.08% | +| hi | WER | 43.96% | +| hr | WER | 61.07% | +| hu | WER | 113.21% | +| id | WER | 7.52% | +| ja | CER | 2.32% | +| ko | CER | 5.20% | +| lt | WER | 78.42% | +| lv | WER | 56.71% | +| ms | WER | 9.92% | +| mt | WER | 91.71% | +| nl | WER | 42.97% | +| pl | WER | 59.34% | +| pt | WER | 28.24% | +| ro | WER | 74.39% | +| sk | WER | 64.01% | +| sl | WER | 75.22% | +| sv | WER | 75.36% | +| th | CER | 7.99% | +| vi | WER | 8.32% | +| yue | CER | 12.72% | +| zh | CER | 8.64% | + + LibriSpeech is English only and is not the strength of this model. For the other 30 languages, run your own representative manifest. CommonVoice splits per language are a reasonable starting point. diff --git a/docs/models/fun-asr-nano-2512.md b/docs/models/fun-asr-nano-2512.md index ed8fce7d..951e393b 100644 --- a/docs/models/fun-asr-nano-2512.md +++ b/docs/models/fun-asr-nano-2512.md @@ -65,6 +65,16 @@ Chinese (AISHELL-1, WenetSpeech) and Japanese (CommonVoice JA) are the recommended complementary checks. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 5.49% | +| ja | CER | 8.50% | +| zh | CER | 8.59% | + + LibriSpeech is an English benchmark; Fun-ASR-Nano's strongest case is Mandarin. **FLEURS-zh** (945 utterances) CER: 8.61% on our FunASR 1.3.1 reference run, 8.59% on the Q8_0 port (95% CI [7.70%, 9.43%]); within diff --git a/docs/models/fun-asr-nano.md b/docs/models/fun-asr-nano.md index 07beb665..7d2c77c3 100644 --- a/docs/models/fun-asr-nano.md +++ b/docs/models/fun-asr-nano.md @@ -34,10 +34,12 @@ transcribe.cpp's WER pipeline. See each per-variant doc for the full quant matrix and per-language WER/CER on the language each variant targets. -| Variant | Params | Q8_0 size | WER (Q8_0) | Languages | Doc | -| --- | ---: | ---: | ---: | --- | --- | -| `fun-asr-nano-2512` | ~800M | 850 MB | 1.79% | zh, en, ja + 7 dialects | [fun-asr-nano-2512.md](fun-asr-nano-2512.md) | -| `fun-asr-mlt-nano-2512` | ~800M | 850 MB | 1.74% | 31 languages | [fun-asr-mlt-nano-2512.md](fun-asr-mlt-nano-2512.md) | + +| Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | +| --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `fun-asr-nano-2512` | 830M | zh, en, ja | 891 MB | LibriSpeech test-clean (WER) | 1.79% | - | [fun-asr-nano-2512.md](fun-asr-nano-2512.md) | +| `fun-asr-mlt-nano-2512` | 830M | 31 languages | 891 MB | LibriSpeech test-clean (WER) | 1.74% | - | [fun-asr-mlt-nano-2512.md](fun-asr-mlt-nano-2512.md) | + Pre-built GGUFs for every variant and quant are hosted under [`handy-computer` on Hugging Face](https://huggingface.co/handy-computer); diff --git a/docs/models/gigaam.md b/docs/models/gigaam.md index 1a1ae077..6fc809c0 100644 --- a/docs/models/gigaam.md +++ b/docs/models/gigaam.md @@ -36,12 +36,14 @@ WER is on FLEURS Russian (`fleurs-ru`) for the **Q8_0** preset, measured by transcribe.cpp's WER pipeline. See each per-variant doc for the full quant matrix. -| Variant | Decoder | Output | Params | Q8_0 size | WER (Q8_0) | Doc | -| --- | --- | --- | ---: | ---: | ---: | --- | -| `gigaam-v3-e2e-rnnt` | RNN-T | cased + punctuated | ~180M | 261 MB | 5.36% | [gigaam-v3-e2e-rnnt.md](gigaam-v3-e2e-rnnt.md) | -| `gigaam-v3-e2e-ctc` | CTC | cased + punctuated | ~180M | 260 MB | 5.50% | [gigaam-v3-e2e-ctc.md](gigaam-v3-e2e-ctc.md) | -| `gigaam-v3-rnnt` | RNN-T | lowercased, no-punctuation | ~180M | 260 MB | 8.08% | [gigaam-v3-rnnt.md](gigaam-v3-rnnt.md) | -| `gigaam-v3-ctc` | CTC | lowercased, no-punctuation | ~180M | 259 MB | 8.40% | [gigaam-v3-ctc.md](gigaam-v3-ctc.md) | + +| Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | +| --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `gigaam-v3-e2e-rnnt` | 223M | ru | 274 MB | FLEURS ru (WER) | 5.36% | token timestamps | [gigaam-v3-e2e-rnnt.md](gigaam-v3-e2e-rnnt.md) | +| `gigaam-v3-e2e-ctc` | 221M | ru | 272 MB | FLEURS ru (WER) | 5.50% | token timestamps | [gigaam-v3-e2e-ctc.md](gigaam-v3-e2e-ctc.md) | +| `gigaam-v3-rnnt` | 222M | ru | 273 MB | FLEURS ru (WER) | 8.08% | token timestamps | [gigaam-v3-rnnt.md](gigaam-v3-rnnt.md) | +| `gigaam-v3-ctc` | 221M | ru | 272 MB | FLEURS ru (WER) | 8.40% | token timestamps | [gigaam-v3-ctc.md](gigaam-v3-ctc.md) | + Pre-built GGUFs for every variant and quant are hosted under [`handy-computer` on Hugging Face](https://huggingface.co/handy-computer); diff --git a/docs/models/granite-4.0-1b-speech.md b/docs/models/granite-4.0-1b-speech.md index c1657126..d2a9149e 100644 --- a/docs/models/granite-4.0-1b-speech.md +++ b/docs/models/granite-4.0-1b-speech.md @@ -53,6 +53,19 @@ Leaderboard number exactly. Text normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| de | WER | 7.29% | +| en | WER | 4.66% | +| es | WER | 5.91% | +| fr | WER | 8.44% | +| ja | CER | 6.44% | +| pt | WER | 9.60% | + + ## Quick Start ```bash diff --git a/docs/models/granite-speech-4.1-2b-nar.md b/docs/models/granite-speech-4.1-2b-nar.md index b50013a4..56ba1594 100644 --- a/docs/models/granite-speech-4.1-2b-nar.md +++ b/docs/models/granite-speech-4.1-2b-nar.md @@ -56,6 +56,18 @@ Q6_K all match BF16's 1.29%; Q5_K_M dips slightly to 1.25% (within overlapping CIs). + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| de | WER | 6.07% | +| en | WER | 5.33% | +| es | WER | 4.08% | +| fr | WER | 6.76% | +| pt | WER | 5.57% | + + ## Quick Start ```bash diff --git a/docs/models/granite-speech-4.1-2b-plus.md b/docs/models/granite-speech-4.1-2b-plus.md index 86292e31..8df3e512 100644 --- a/docs/models/granite-speech-4.1-2b-plus.md +++ b/docs/models/granite-speech-4.1-2b-plus.md @@ -67,6 +67,18 @@ clips and WER blows up to ~26%. The transcribe.cpp runtime hard-codes the prompt correctly; this note only matters if you reproduce the reference. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| de | WER | 8.06% | +| en | WER | 4.46% | +| es | WER | 6.53% | +| fr | WER | 8.82% | +| pt | WER | 10.61% | + + ## Quick Start ```bash diff --git a/docs/models/granite-speech-4.1-2b.md b/docs/models/granite-speech-4.1-2b.md index 81cc5e50..01e47122 100644 --- a/docs/models/granite-speech-4.1-2b.md +++ b/docs/models/granite-speech-4.1-2b.md @@ -55,6 +55,19 @@ well within bootstrap CI overlap. Text normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| de | WER | 6.25% | +| en | WER | 4.14% | +| es | WER | 5.48% | +| fr | WER | 7.61% | +| ja | CER | 6.30% | +| pt | WER | 9.80% | + + ## Quick Start ```bash diff --git a/docs/models/granite-speech.md b/docs/models/granite-speech.md index 24dcf9e8..b24f328f 100644 --- a/docs/models/granite-speech.md +++ b/docs/models/granite-speech.md @@ -42,12 +42,14 @@ WER is on LibriSpeech test-clean for the **Q8_0** preset, measured by transcribe.cpp's WER pipeline. See each per-variant doc for the full quant matrix. -| Variant | Decode mode | Params | Q8_0 size | WER (Q8_0) | Languages | Extras | Doc | -| --- | --- | ---: | ---: | ---: | --- | --- | --- | -| `granite-4.0-1b-speech` | AR (audio-LLM) | ~3B† | 2.56 GB | 1.44% | en, fr, de, es, pt, ja | translate (en ↔ ASR langs; en → it/zh) | [granite-4.0-1b-speech.md](granite-4.0-1b-speech.md) | -| `granite-speech-4.1-2b` | AR (audio-LLM) | ~3B† | 2.56 GB | 1.32% | en, fr, de, es, pt, ja | translate (en ↔ ASR langs; en → it/zh) | [granite-speech-4.1-2b.md](granite-speech-4.1-2b.md) | -| `granite-speech-4.1-2b-plus` | AR (audio-LLM) | ~3B† | 2.35 GB | 1.50% | en, fr, de, es, pt | word timestamps (ASR only) | [granite-speech-4.1-2b-plus.md](granite-speech-4.1-2b-plus.md) | -| `granite-speech-4.1-2b-nar` | NAR (editor) | ~3B† | 2.33 GB | 1.29% | en, fr, de, es, pt | (ASR only) | [granite-speech-4.1-2b-nar.md](granite-speech-4.1-2b-nar.md) | + +| Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | +| --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `granite-4.0-1b-speech` | 2.3B | 6 languages | 2.56 GB | LibriSpeech test-clean (WER) | 1.44% | translate | [granite-4.0-1b-speech.md](granite-4.0-1b-speech.md) | +| `granite-speech-4.1-2b` | 2.3B | 6 languages | 2.56 GB | LibriSpeech test-clean (WER) | 1.32% | translate | [granite-speech-4.1-2b.md](granite-speech-4.1-2b.md) | +| `granite-speech-4.1-2b-plus` | 2.1B | 5 languages | 2.35 GB | LibriSpeech test-clean (WER) | 1.50% | diarize, word timestamps | [granite-speech-4.1-2b-plus.md](granite-speech-4.1-2b-plus.md) | +| `granite-speech-4.1-2b-nar` | 2.3B | 5 languages | 2.50 GB | LibriSpeech test-clean (WER) | 1.29% | - | [granite-speech-4.1-2b-nar.md](granite-speech-4.1-2b-nar.md) | + † Parameter counts include the Conformer audio encoder, the projector, and the Granite-4.0-1b text LM. The "1b" / "2b" in IBM's variant names diff --git a/docs/models/medasr.md b/docs/models/medasr.md index 89bb6d65..344046ea 100644 --- a/docs/models/medasr.md +++ b/docs/models/medasr.md @@ -41,6 +41,14 @@ long recordings for best results. See the WER measured on the full LibriSpeech test-clean split (2,620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline (HuggingFace transformers, Mac MPS): 17.88%; transcribe.cpp F32 matches exactly. Absolute WER is higher than general-purpose ASR (e.g. Whisper-base ~5%) because the model is fine-tuned for medical dictation — on the publisher's internal RAD-DICT / GENERAL-DICT / FM-DICT datasets the model scores 6.6%–9.3%, but those datasets are not publicly reproducible. Q8_0 is the recommended default (smallest preset with no statistically detectable WER degradation); Q4_K_M shows a real +0.26 pp degradation and is shipped for completeness but not recommended — prefer Q5_K_M if you need smaller than Q8_0. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 37.48% | + + ## Quick Start ```bash diff --git a/docs/models/moonshine-base.md b/docs/models/moonshine-base.md index ef09d3e5..aa047519 100644 --- a/docs/models/moonshine-base.md +++ b/docs/models/moonshine-base.md @@ -51,6 +51,14 @@ acceptance gate. Q8_0 lands at 3.26%, slightly under F32 — that delta sits inside the 95% bootstrap CI and is noise, not a real improvement. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 12.25% | + + ## Quick Start ```bash diff --git a/docs/models/moonshine-streaming-medium.md b/docs/models/moonshine-streaming-medium.md index 957733ac..6cb8cb36 100644 --- a/docs/models/moonshine-streaming-medium.md +++ b/docs/models/moonshine-streaming-medium.md @@ -48,6 +48,14 @@ numerical drift. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 7.87% | + + **One utterance the model cannot end.** A single LibriSpeech test-clean clip — `7176-92135-0020` (7.2 s; reference *"DOUBLE NINE TWO THREE ELSINORE DOUBLE NINE YES HALLO IS THAT YOU HORATIO HAMLET SPEAKING"*) — drives the **medium** model diff --git a/docs/models/moonshine-streaming-small.md b/docs/models/moonshine-streaming-small.md index 07334d0c..456bf215 100644 --- a/docs/models/moonshine-streaming-small.md +++ b/docs/models/moonshine-streaming-small.md @@ -46,6 +46,14 @@ it is not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 8.55% | + + Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. ## Quick Start diff --git a/docs/models/moonshine-streaming-tiny.md b/docs/models/moonshine-streaming-tiny.md index dd28775b..7152b195 100644 --- a/docs/models/moonshine-streaming-tiny.md +++ b/docs/models/moonshine-streaming-tiny.md @@ -45,6 +45,14 @@ that methodology, not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 18.18% | + + Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. ### Streaming vs offline parity (Q8_0) diff --git a/docs/models/moonshine-streaming.md b/docs/models/moonshine-streaming.md index 200a8160..5deaf217 100644 --- a/docs/models/moonshine-streaming.md +++ b/docs/models/moonshine-streaming.md @@ -50,11 +50,13 @@ upstream-reported numbers is a scoring / text-normalization difference, not a numerical drift in the port. The K-tier presets (Q6_K / Q5_K_M / Q4_K_M) are not currently shipped for this family. -| Variant | Params | Q8_0 size | WER (Q8_0) | Doc | -| --- | ---: | ---: | ---: | --- | -| `moonshine-streaming-tiny` | 34M | 48 MB | 4.52% | [moonshine-streaming-tiny.md](moonshine-streaming-tiny.md) | -| `moonshine-streaming-small` | 123M | 189 MB | 2.54% | [moonshine-streaming-small.md](moonshine-streaming-small.md) | -| `moonshine-streaming-medium` | 245M | 282 MB | 2.16% | [moonshine-streaming-medium.md](moonshine-streaming-medium.md) | + +| Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | +| --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `moonshine-streaming-tiny` | 44M | en | 50 MB | LibriSpeech test-clean (WER) | 4.52% | streaming | [moonshine-streaming-tiny.md](moonshine-streaming-tiny.md) | +| `moonshine-streaming-small` | 140M | en | 199 MB | LibriSpeech test-clean (WER) | 2.54% | streaming | [moonshine-streaming-small.md](moonshine-streaming-small.md) | +| `moonshine-streaming-medium` | 266M | en | 296 MB | LibriSpeech test-clean (WER) | 2.16% | streaming | [moonshine-streaming-medium.md](moonshine-streaming-medium.md) | + Pre-built GGUFs for every variant and quant are hosted under [`handy-computer` on Hugging Face](https://huggingface.co/handy-computer); diff --git a/docs/models/moonshine-tiny.md b/docs/models/moonshine-tiny.md index 903127de..c602a56e 100644 --- a/docs/models/moonshine-tiny.md +++ b/docs/models/moonshine-tiny.md @@ -48,6 +48,14 @@ and well within the ±1.00 pp Stage 7 acceptance gate. Q8_0 drift is +0.02 pp vs F32 — within bootstrap CI noise. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 14.13% | + + ## Quick Start ```bash diff --git a/docs/models/moonshine.md b/docs/models/moonshine.md index 83b65d15..64a0608c 100644 --- a/docs/models/moonshine.md +++ b/docs/models/moonshine.md @@ -49,10 +49,12 @@ to Q8_0 storage and would be near-duplicates. ### English -| Variant | Params | Q8_0 size | WER (LibriSpeech test-clean) | Doc | -| --- | ---: | ---: | ---: | --- | -| `moonshine-tiny` | 27M | 34 MB | 4.60% | [moonshine-tiny.md](moonshine-tiny.md) | -| `moonshine-base` | 61M | 74 MB | 3.26% | [moonshine-base.md](moonshine-base.md) | + +| Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | +| --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `moonshine-tiny` | 27M | en | 35 MB | LibriSpeech test-clean (WER) | 4.60% | - | [moonshine-tiny.md](moonshine-tiny.md) | +| `moonshine-base` | 62M | en | 77 MB | LibriSpeech test-clean (WER) | 3.26% | - | [moonshine-base.md](moonshine-base.md) | + ### Language-specific (Useful Sensors fine-tunes) @@ -62,20 +64,22 @@ because Useful Sensors does not publish per-language WER/CER for these variants. See each repo's `README.md` on Hugging Face for the full F32 / F16 / Q8_0 table and the reference baseline. -| Variant | Lang | Params | Q8_0 size | Metric (FLEURS test) | Q8_0 | Repo | -| --- | --- | ---: | ---: | --- | ---: | --- | -| `moonshine-tiny-vi` | Vietnamese (vi) | 27M | 34 MB | WER | 13.16% | [handy-computer/moonshine-tiny-vi-gguf](https://huggingface.co/handy-computer/moonshine-tiny-vi-gguf) | -| `moonshine-tiny-uk` | Ukrainian (uk) | 27M | 34 MB | WER | 18.89% | [handy-computer/moonshine-tiny-uk-gguf](https://huggingface.co/handy-computer/moonshine-tiny-uk-gguf) | -| `moonshine-tiny-zh` | Mandarin (zh) | 27M | 34 MB | CER | 13.78% | [handy-computer/moonshine-tiny-zh-gguf](https://huggingface.co/handy-computer/moonshine-tiny-zh-gguf) | -| `moonshine-tiny-ko` | Korean (ko) | 27M | 34 MB | CER | 8.98% | [handy-computer/moonshine-tiny-ko-gguf](https://huggingface.co/handy-computer/moonshine-tiny-ko-gguf) | -| `moonshine-tiny-ar` | Arabic (ar) | 27M | 34 MB | WER | 26.79% | [handy-computer/moonshine-tiny-ar-gguf](https://huggingface.co/handy-computer/moonshine-tiny-ar-gguf) | -| `moonshine-tiny-ja` | Japanese (ja) | 27M | 34 MB | CER | 13.36% | [handy-computer/moonshine-tiny-ja-gguf](https://huggingface.co/handy-computer/moonshine-tiny-ja-gguf) | -| `moonshine-base-vi` | Vietnamese (vi) | 61M | 74 MB | WER | 9.79% | [handy-computer/moonshine-base-vi-gguf](https://huggingface.co/handy-computer/moonshine-base-vi-gguf) | -| `moonshine-base-uk` | Ukrainian (uk) | 61M | 74 MB | WER | 14.39% | [handy-computer/moonshine-base-uk-gguf](https://huggingface.co/handy-computer/moonshine-base-uk-gguf) | -| `moonshine-base-zh` | Mandarin (zh) | 61M | 74 MB | CER | 17.00% | [handy-computer/moonshine-base-zh-gguf](https://huggingface.co/handy-computer/moonshine-base-zh-gguf) | -| `moonshine-base-ko` | Korean (ko) | 61M | 74 MB | CER | 8.13% | [handy-computer/moonshine-base-ko-gguf](https://huggingface.co/handy-computer/moonshine-base-ko-gguf) | -| `moonshine-base-ar` | Arabic (ar) | 61M | 74 MB | WER | 24.50% | [handy-computer/moonshine-base-ar-gguf](https://huggingface.co/handy-computer/moonshine-base-ar-gguf) | -| `moonshine-base-ja` | Japanese (ja) | 61M | 74 MB | CER | 10.53% | [handy-computer/moonshine-base-ja-gguf](https://huggingface.co/handy-computer/moonshine-base-ja-gguf) | + +| Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | +| --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `moonshine-tiny-vi` | 27M | vi | 35 MB | FLEURS vi (WER) | 13.16% | - | [handy-computer/moonshine-tiny-vi-gguf](https://huggingface.co/handy-computer/moonshine-tiny-vi-gguf) | +| `moonshine-tiny-uk` | 27M | uk | 35 MB | FLEURS uk (WER) | 18.89% | - | [handy-computer/moonshine-tiny-uk-gguf](https://huggingface.co/handy-computer/moonshine-tiny-uk-gguf) | +| `moonshine-tiny-zh` | 27M | zh | 35 MB | FLEURS zh (CER) | 13.78% | - | [handy-computer/moonshine-tiny-zh-gguf](https://huggingface.co/handy-computer/moonshine-tiny-zh-gguf) | +| `moonshine-tiny-ko` | 27M | ko | 35 MB | FLEURS ko (CER) | 8.98% | - | [handy-computer/moonshine-tiny-ko-gguf](https://huggingface.co/handy-computer/moonshine-tiny-ko-gguf) | +| `moonshine-tiny-ar` | 27M | ar | 35 MB | FLEURS ar (WER) | 26.79% | - | [handy-computer/moonshine-tiny-ar-gguf](https://huggingface.co/handy-computer/moonshine-tiny-ar-gguf) | +| `moonshine-tiny-ja` | 27M | ja | 35 MB | FLEURS ja (CER) | 13.36% | - | [handy-computer/moonshine-tiny-ja-gguf](https://huggingface.co/handy-computer/moonshine-tiny-ja-gguf) | +| `moonshine-base-vi` | 62M | vi | 77 MB | FLEURS vi (WER) | 9.79% | - | [handy-computer/moonshine-base-vi-gguf](https://huggingface.co/handy-computer/moonshine-base-vi-gguf) | +| `moonshine-base-uk` | 62M | uk | 77 MB | FLEURS uk (WER) | 14.39% | - | [handy-computer/moonshine-base-uk-gguf](https://huggingface.co/handy-computer/moonshine-base-uk-gguf) | +| `moonshine-base-zh` | 62M | zh | 77 MB | FLEURS zh (CER) | 17.00% | - | [handy-computer/moonshine-base-zh-gguf](https://huggingface.co/handy-computer/moonshine-base-zh-gguf) | +| `moonshine-base-ko` | 62M | ko | 77 MB | FLEURS ko (CER) | 8.13% | - | [handy-computer/moonshine-base-ko-gguf](https://huggingface.co/handy-computer/moonshine-base-ko-gguf) | +| `moonshine-base-ar` | 62M | ar | 77 MB | FLEURS ar (WER) | 24.50% | - | [handy-computer/moonshine-base-ar-gguf](https://huggingface.co/handy-computer/moonshine-base-ar-gguf) | +| `moonshine-base-ja` | 62M | ja | 77 MB | FLEURS ja (CER) | 10.53% | - | [handy-computer/moonshine-base-ja-gguf](https://huggingface.co/handy-computer/moonshine-base-ja-gguf) | + Pre-built GGUFs for every variant and quant are hosted under [`handy-computer` on Hugging Face](https://huggingface.co/handy-computer); diff --git a/docs/models/moss-transcribe-diarize.md b/docs/models/moss-transcribe-diarize.md index 8ea25ac3..9aa3ba56 100644 --- a/docs/models/moss-transcribe-diarize.md +++ b/docs/models/moss-transcribe-diarize.md @@ -75,6 +75,15 @@ Q5_K_M or higher if those tail failures matter. Reproduce with `full_text` applies equivalent marker removal. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 5.13% | +| zh | CER | 9.23% | + + ## Quick Start ```bash diff --git a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md index 75ee8288..60127b63 100644 --- a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md +++ b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md @@ -74,6 +74,14 @@ build/bin/transcribe-cli --diarize \ ``` + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 6.52% | + + ### Bundle dtypes The tier names the ASR half's dtype; the embedded Sortformer diarizer is F32 diff --git a/docs/models/nemotron-3.5-asr-streaming-0.6b.md b/docs/models/nemotron-3.5-asr-streaming-0.6b.md index e8083fdf..a5de4d4a 100644 --- a/docs/models/nemotron-3.5-asr-streaming-0.6b.md +++ b/docs/models/nemotron-3.5-asr-streaming-0.6b.md @@ -68,20 +68,45 @@ stays unbounded for the same reason. See the WER measured on FLEURS test en (647 utterances), greedy RNN-T, --language en-US, whisper-normalizer scoring; the per-quant column is FLEURS en. NeMo reference baseline on the same manifest: 7.99% (NVIDIA self-reports 7.91% en-US). On LibriSpeech test-clean (2620 utterances) the same presets score F32 3.04 / F16 3.03 / Q8_0 3.06 / Q6_K 3.07 / Q5_K_M 3.10 / Q4_K_M 3.28, against a 3.03% NeMo reference. -| Preset | FLEURS test en (n=647) | LibriSpeech test-clean (n=2620) | -| --- | ---: | ---: | -| Reference (NeMo) | 7.99 | 3.03 | -| F32 | 7.97 | 3.04 | -| F16 | 7.97 | 3.03 | -| Q8_0 | 7.88 | 3.06 | -| Q6_K | 8.02 | 3.07 | -| Q5_K_M | 8.15 | 3.10 | -| Q4_K_M | 8.49 | 3.28 | - -The F32 reference dtype meets the measured-Oracle gate on both datasets. -F16/Q8_0/Q6_K/Q5_K_M land inside the reference 95% CI; Q4_K_M carries the -largest quantization loss (+0.50 on FLEURS, +0.25 on LibriSpeech) but is -accepted for shipping. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| ar | WER | 15.93% | +| bg | WER | 22.02% | +| cs | WER | 23.00% | +| da | WER | 28.51% | +| de | WER | 10.33% | +| es | WER | 6.30% | +| et | WER | 31.84% | +| fi | WER | 21.91% | +| fr | WER | 10.78% | +| hi | WER | 8.61% | +| hr | WER | 26.21% | +| hu | WER | 32.12% | +| it | WER | 5.78% | +| ja | CER | 13.52% | +| ko | CER | 8.89% | +| nb | WER | 19.24% | +| nl | WER | 13.61% | +| pl | WER | 17.54% | +| pt | WER | 8.52% | +| ro | WER | 28.28% | +| ru | WER | 12.61% | +| sk | WER | 23.25% | +| sv | WER | 24.32% | +| tr | WER | 15.40% | +| uk | WER | 14.88% | +| vi | WER | 13.96% | +| zh | CER | 18.87% | + +**LibriSpeech test-clean** + +| Language | Metric | F32 | F16 | Q8_0 | Q6_K | Q5_K_M | Q4_K_M | +| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | +| en | WER | 3.04% | 3.04% | 3.05% | 3.08% | 3.10% | 3.30% | + ## Quick Start diff --git a/docs/models/nemotron-speech-streaming-en-0.6b.md b/docs/models/nemotron-speech-streaming-en-0.6b.md index 3379c389..ad1d900e 100644 --- a/docs/models/nemotron-speech-streaming-en-0.6b.md +++ b/docs/models/nemotron-speech-streaming-en-0.6b.md @@ -52,6 +52,14 @@ pinned 2026-05-11. WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding. F32 reference baseline: 2.31%. NVIDIA's self-reported number on the same split at att_context_size=[70, 13] (1.12s chunk, w/o PnC) is 2.32%. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 6.43% | + + ## Streaming WER In cache-aware streaming mode the encoder runs incrementally over fixed diff --git a/docs/models/parakeet-ctc-0.6b.md b/docs/models/parakeet-ctc-0.6b.md index 6a6b1356..4f590f58 100644 --- a/docs/models/parakeet-ctc-0.6b.md +++ b/docs/models/parakeet-ctc-0.6b.md @@ -41,6 +41,14 @@ pinned 2026-05-10. WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.87%. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 5.53% | + + ## Quick Start ```bash diff --git a/docs/models/parakeet-ctc-1.1b.md b/docs/models/parakeet-ctc-1.1b.md index 9e429bf8..b647ed01 100644 --- a/docs/models/parakeet-ctc-1.1b.md +++ b/docs/models/parakeet-ctc-1.1b.md @@ -41,6 +41,14 @@ pinned 2026-05-10. WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.85%. NVIDIA's self-reported number on the same split is 1.83%. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 5.61% | + + ## Quick Start ```bash diff --git a/docs/models/parakeet-primeline.md b/docs/models/parakeet-primeline.md index 3ff8d719..e38b15cd 100644 --- a/docs/models/parakeet-primeline.md +++ b/docs/models/parakeet-primeline.md @@ -63,6 +63,43 @@ produces the same spellings on the same utterances. FLEURS references use gives 4.92% for the reference and 4.94% for F32. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| bg | WER | 16.33% | +| cs | WER | 15.05% | +| da | WER | 20.52% | +| el | WER | 34.76% | +| en | WER | 4.82% | +| es | WER | 3.85% | +| et | WER | 17.17% | +| fi | WER | 13.39% | +| fr | WER | 6.35% | +| hr | WER | 13.68% | +| hu | WER | 17.52% | +| it | WER | 3.17% | +| lt | WER | 23.08% | +| lv | WER | 28.83% | +| mt | WER | 24.74% | +| nl | WER | 8.49% | +| pl | WER | 8.19% | +| pt | WER | 5.17% | +| ro | WER | 13.80% | +| ru | WER | 7.81% | +| sk | WER | 12.36% | +| sl | WER | 51.07% | +| sv | WER | 16.42% | +| uk | WER | 8.11% | + +**LibriSpeech test-clean** + +| Language | Metric | F32 | F16 | Q8_0 | Q6_K | Q5_K_M | Q4_K_M | +| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | +| en | WER | 2.20% | 2.19% | 2.20% | 2.19% | 2.20% | 2.26% | + + primeLine's published 2.95% average is over Tuda-De, Multilingual LibriSpeech, and Common Voice 19.0. Those corpora are not in this repo's WER pipeline and the number is not comparable to the table above. diff --git a/docs/models/parakeet-rnnt-0.6b.md b/docs/models/parakeet-rnnt-0.6b.md index 869dfadc..82e524f9 100644 --- a/docs/models/parakeet-rnnt-0.6b.md +++ b/docs/models/parakeet-rnnt-0.6b.md @@ -43,6 +43,14 @@ pinned 2026-05-10. WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.62%. NVIDIA's self-reported number on the same split is 1.63%. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 4.57% | + + ## Quick Start ```bash diff --git a/docs/models/parakeet-rnnt-1.1b.md b/docs/models/parakeet-rnnt-1.1b.md index 2a7d01b4..29246d0b 100644 --- a/docs/models/parakeet-rnnt-1.1b.md +++ b/docs/models/parakeet-rnnt-1.1b.md @@ -41,6 +41,14 @@ pinned 2026-05-10. WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.45%. NVIDIA's self-reported number on the same split is 1.46%. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 4.45% | + + ## Quick Start ```bash diff --git a/docs/models/parakeet-tdt-0.6b-v2.md b/docs/models/parakeet-tdt-0.6b-v2.md index 28dd512a..f6e4a567 100644 --- a/docs/models/parakeet-tdt-0.6b-v2.md +++ b/docs/models/parakeet-tdt-0.6b-v2.md @@ -43,6 +43,14 @@ NVIDIA's self-reported number on the same split is 1.69%, so the F32 and Q8_0 ports match the upstream reference within rounding. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 4.11% | + + ## Quick Start ```bash diff --git a/docs/models/parakeet-tdt-0.6b-v3.md b/docs/models/parakeet-tdt-0.6b-v3.md index 8996cb4d..e81c4dcc 100644 --- a/docs/models/parakeet-tdt-0.6b-v3.md +++ b/docs/models/parakeet-tdt-0.6b-v3.md @@ -45,6 +45,38 @@ greedy transducer decoding and no external LM. F32 reference baseline: 1.95%. NVIDIA's self-reported number on the same split is 1.93%. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| bg | WER | 12.81% | +| cs | WER | 12.31% | +| da | WER | 18.64% | +| de | WER | 5.24% | +| el | WER | 35.33% | +| en | WER | 4.83% | +| es | WER | 3.65% | +| et | WER | 17.96% | +| fi | WER | 13.30% | +| fr | WER | 5.30% | +| hr | WER | 12.59% | +| hu | WER | 16.06% | +| it | WER | 3.02% | +| lt | WER | 22.20% | +| lv | WER | 23.77% | +| mt | WER | 20.63% | +| nl | WER | 7.66% | +| pl | WER | 7.37% | +| pt | WER | 4.96% | +| ro | WER | 12.62% | +| ru | WER | 6.54% | +| sk | WER | 10.19% | +| sl | WER | 24.30% | +| sv | WER | 15.25% | +| uk | WER | 6.84% | + + ## Quick Start ```bash diff --git a/docs/models/parakeet-tdt-1.1b.md b/docs/models/parakeet-tdt-1.1b.md index be1cb244..4467b4dc 100644 --- a/docs/models/parakeet-tdt-1.1b.md +++ b/docs/models/parakeet-tdt-1.1b.md @@ -42,6 +42,14 @@ pinned 2026-05-10. WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.39%. NVIDIA's self-reported number on the same split is 1.39%. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 4.24% | + + ## Quick Start ```bash diff --git a/docs/models/parakeet-tdt_ctc-1.1b.md b/docs/models/parakeet-tdt_ctc-1.1b.md index 1bfab588..079b9bb2 100644 --- a/docs/models/parakeet-tdt_ctc-1.1b.md +++ b/docs/models/parakeet-tdt_ctc-1.1b.md @@ -40,6 +40,14 @@ pinned 2026-05-10. WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.82%. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 4.68% | + + ## Quick Start ```bash diff --git a/docs/models/parakeet-tdt_ctc-110m.md b/docs/models/parakeet-tdt_ctc-110m.md index ff7fd32d..50e7b631 100644 --- a/docs/models/parakeet-tdt_ctc-110m.md +++ b/docs/models/parakeet-tdt_ctc-110m.md @@ -38,6 +38,14 @@ pinned 2026-05-10. WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 2.43%. NVIDIA's self-reported number on the same split is 2.40%. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 6.11% | + + ## Quick Start ```bash diff --git a/docs/models/parakeet-unified-en-0.6b.md b/docs/models/parakeet-unified-en-0.6b.md index 65342f63..082cde46 100644 --- a/docs/models/parakeet-unified-en-0.6b.md +++ b/docs/models/parakeet-unified-en-0.6b.md @@ -55,6 +55,14 @@ pinned 2026-05-10. WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.59%. NVIDIA's self-reported number on the same split is 1.63%. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 3.99% | + + ## Quick Start ```bash diff --git a/docs/models/parakeet.md b/docs/models/parakeet.md index b476cc73..8454f572 100644 --- a/docs/models/parakeet.md +++ b/docs/models/parakeet.md @@ -53,19 +53,21 @@ WER is on LibriSpeech test-clean for the **Q8_0** preset, measured by transcribe.cpp's WER pipeline. See each per-variant doc for the full quant matrix and the comparison to NVIDIA's self-reported numbers. -| Variant | Decoder | Params | Q8_0 size | WER (Q8_0) | Languages | Doc | -| --- | --- | ---: | ---: | ---: | --- | --- | -| `parakeet-tdt-0.6b-v2` | TDT | 0.6B | 730 MB | 1.69% | English | [parakeet-tdt-0.6b-v2.md](parakeet-tdt-0.6b-v2.md) | -| `parakeet-tdt-0.6b-v3` | TDT | 0.6B | 740 MB | 1.94% | 25 European | [parakeet-tdt-0.6b-v3.md](parakeet-tdt-0.6b-v3.md) | -| `parakeet-primeline` | TDT | 0.6B | 740 MB | 6.00%* | 25 European, German-tuned | [parakeet-primeline.md](parakeet-primeline.md) | -| `parakeet-tdt-1.1b` | TDT | 1.1B | 1.27 GB | 1.38% | English | [parakeet-tdt-1.1b.md](parakeet-tdt-1.1b.md) | -| `parakeet-tdt_ctc-110m` | TDT+CTC | 110M | 135 MB | 2.43% | English | [parakeet-tdt_ctc-110m.md](parakeet-tdt_ctc-110m.md) | -| `parakeet-tdt_ctc-1.1b` | TDT+CTC | 1.1B | 1.27 GB | 1.87% | English | [parakeet-tdt_ctc-1.1b.md](parakeet-tdt_ctc-1.1b.md) | -| `parakeet-rnnt-0.6b` | RNN-T | 0.6B | 730 MB | 1.62% | English | [parakeet-rnnt-0.6b.md](parakeet-rnnt-0.6b.md) | -| `parakeet-rnnt-1.1b` | RNN-T | 1.1B | 1.27 GB | 1.46% | English | [parakeet-rnnt-1.1b.md](parakeet-rnnt-1.1b.md) | -| `parakeet-ctc-0.6b` | CTC | 0.6B | 722 MB | 1.87% | English | [parakeet-ctc-0.6b.md](parakeet-ctc-0.6b.md) | -| `parakeet-ctc-1.1b` | CTC | 1.1B | 1.26 GB | 1.85% | English | [parakeet-ctc-1.1b.md](parakeet-ctc-1.1b.md) | -| `parakeet-unified-en-0.6b` | RNN-T | 0.6B | 731 MB | 1.60% | English | [parakeet-unified-en-0.6b.md](parakeet-unified-en-0.6b.md) | + +| Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | +| --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `parakeet-tdt-0.6b-v2` | 618M | en | 730 MB | LibriSpeech test-clean (WER) | 1.69% | token timestamps | [parakeet-tdt-0.6b-v2.md](parakeet-tdt-0.6b-v2.md) | +| `parakeet-tdt-0.6b-v3` | 627M | 25 languages + auto-detect | 740 MB | LibriSpeech test-clean (WER) | 1.94% | token timestamps | [parakeet-tdt-0.6b-v3.md](parakeet-tdt-0.6b-v3.md) | +| `parakeet-primeline` | 627M | 25 languages + auto-detect | 740 MB | FLEURS de (WER) | 6.00% | token timestamps | [parakeet-primeline.md](parakeet-primeline.md) | +| `parakeet-tdt-1.1b` | 1.1B | en | 1.27 GB | LibriSpeech test-clean (WER) | 1.38% | token timestamps | [parakeet-tdt-1.1b.md](parakeet-tdt-1.1b.md) | +| `parakeet-tdt_ctc-110m` | 114M | en | 135 MB | LibriSpeech test-clean (WER) | 2.43% | token timestamps | [parakeet-tdt_ctc-110m.md](parakeet-tdt_ctc-110m.md) | +| `parakeet-tdt_ctc-1.1b` | 1.1B | en | 1.27 GB | LibriSpeech test-clean (WER) | 1.87% | token timestamps | [parakeet-tdt_ctc-1.1b.md](parakeet-tdt_ctc-1.1b.md) | +| `parakeet-rnnt-0.6b` | 617M | en | 730 MB | LibriSpeech test-clean (WER) | 1.62% | token timestamps | [parakeet-rnnt-0.6b.md](parakeet-rnnt-0.6b.md) | +| `parakeet-rnnt-1.1b` | 1.1B | en | 1.27 GB | LibriSpeech test-clean (WER) | 1.46% | token timestamps | [parakeet-rnnt-1.1b.md](parakeet-rnnt-1.1b.md) | +| `parakeet-ctc-0.6b` | 609M | en | 722 MB | LibriSpeech test-clean (WER) | 1.87% | token timestamps | [parakeet-ctc-0.6b.md](parakeet-ctc-0.6b.md) | +| `parakeet-ctc-1.1b` | 1.1B | en | 1.26 GB | LibriSpeech test-clean (WER) | 1.85% | token timestamps | [parakeet-ctc-1.1b.md](parakeet-ctc-1.1b.md) | +| `parakeet-unified-en-0.6b` | 618M | en | 731 MB | LibriSpeech test-clean (WER) | 1.60% | streaming, token timestamps | [parakeet-unified-en-0.6b.md](parakeet-unified-en-0.6b.md) | + \* `parakeet-primeline` is scored on FLEURS German (862 utterances), not LibriSpeech test-clean, so its number is not comparable to the rest diff --git a/docs/models/qwen3-asr-0.6b.md b/docs/models/qwen3-asr-0.6b.md index 5f7cf337..334e4aef 100644 --- a/docs/models/qwen3-asr-0.6b.md +++ b/docs/models/qwen3-asr-0.6b.md @@ -49,6 +49,43 @@ but real regression driven by the tied token-embedding / head. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| ar | WER | 24.51% | +| cs | WER | 44.50% | +| da | WER | 36.07% | +| de | WER | 6.80% | +| el | WER | 49.12% | +| en | WER | 4.23% | +| es | WER | 4.88% | +| fa | WER | 50.30% | +| fi | WER | 46.49% | +| fil | WER | 35.43% | +| fr | WER | 7.76% | +| hi | WER | 12.68% | +| hu | WER | 56.24% | +| id | WER | 8.49% | +| it | WER | 5.19% | +| ja | CER | 8.61% | +| ko | CER | 5.82% | +| mk | WER | 35.09% | +| ms | WER | 17.18% | +| nl | WER | 13.90% | +| pl | WER | 25.06% | +| pt | WER | 6.57% | +| ro | WER | 40.65% | +| ru | WER | 10.30% | +| sv | WER | 35.72% | +| th | CER | 8.81% | +| tr | WER | 16.74% | +| vi | WER | 9.32% | +| yue | CER | 7.91% | +| zh | CER | 7.57% | + + **FLEURS-zh** (945 utterances) CER: 7.6% on the upstream `qwen_asr` reference, 7.64% on the Q8_0 port (95% CI [6.74%, 8.51%]); within bootstrap noise. Reproduce with diff --git a/docs/models/qwen3-asr-1.7b.md b/docs/models/qwen3-asr-1.7b.md index 3bd36924..d9986e0d 100644 --- a/docs/models/qwen3-asr-1.7b.md +++ b/docs/models/qwen3-asr-1.7b.md @@ -50,6 +50,43 @@ regresses only ~0.2 WER points. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| ar | WER | 14.91% | +| cs | WER | 22.97% | +| da | WER | 21.23% | +| de | WER | 4.25% | +| el | WER | 29.22% | +| en | WER | 3.23% | +| es | WER | 3.31% | +| fa | WER | 28.29% | +| fi | WER | 25.48% | +| fil | WER | 24.29% | +| fr | WER | 4.52% | +| hi | WER | 7.84% | +| hu | WER | 32.84% | +| id | WER | 5.37% | +| it | WER | 2.68% | +| ja | CER | 5.29% | +| ko | CER | 4.60% | +| mk | WER | 18.22% | +| ms | WER | 10.42% | +| nl | WER | 7.43% | +| pl | WER | 12.50% | +| pt | WER | 4.37% | +| ro | WER | 20.46% | +| ru | WER | 6.25% | +| sv | WER | 19.68% | +| th | CER | 6.89% | +| tr | WER | 9.46% | +| vi | WER | 6.15% | +| yue | CER | 6.13% | +| zh | CER | 7.14% | + + ## Quick Start ```bash diff --git a/docs/models/qwen3-asr.md b/docs/models/qwen3-asr.md index a5553c73..cc6d0c58 100644 --- a/docs/models/qwen3-asr.md +++ b/docs/models/qwen3-asr.md @@ -29,10 +29,12 @@ WER is on LibriSpeech test-clean for the **Q8_0** preset, measured by transcribe.cpp's WER pipeline. See each per-variant doc for the full quant matrix. -| Variant | Params | Q8_0 size | WER (Q8_0) | Languages | Doc | -| --- | ---: | ---: | ---: | --- | --- | -| `qwen3-asr-0.6b` | ~600M | 811 MB | 2.11% | 30 (auto-detect) | [qwen3-asr-0.6b.md](qwen3-asr-0.6b.md) | -| `qwen3-asr-1.7b` | ~1.7B | 2.08 GB | 1.61% | 30 (auto-detect) | [qwen3-asr-1.7b.md](qwen3-asr-1.7b.md) | + +| Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | +| --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `qwen3-asr-0.6b` | 782M | 30 languages + auto-detect | 850 MB | LibriSpeech test-clean (WER) | 2.11% | - | [qwen3-asr-0.6b.md](qwen3-asr-0.6b.md) | +| `qwen3-asr-1.7b` | 2B | 30 languages + auto-detect | 2.19 GB | LibriSpeech test-clean (WER) | 1.62% | - | [qwen3-asr-1.7b.md](qwen3-asr-1.7b.md) | + Pre-built GGUFs for every variant and quant are hosted under [`handy-computer` on Hugging Face](https://huggingface.co/handy-computer); diff --git a/docs/models/sensevoice-small.md b/docs/models/sensevoice-small.md index c6b60ff2..9f62c5de 100644 --- a/docs/models/sensevoice-small.md +++ b/docs/models/sensevoice-small.md @@ -68,6 +68,18 @@ benchmark; SenseVoice's strongest case is Mandarin, and AISHELL-1 (CER) is the recommended complementary check. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 7.14% | +| ja | CER | 7.63% | +| ko | CER | 8.27% | +| yue | CER | 37.44% | +| zh | CER | 10.12% | + + LibriSpeech is an English benchmark; SenseVoice's strongest case is Mandarin. **FLEURS-zh** (945 utterances) CER: 10.20% on our FunASR 1.3.1 reference run, 10.11% on the Q8_0 port (95% CI [9.18%, 11.02%]); within diff --git a/docs/models/voxtral-mini-3b-2507.md b/docs/models/voxtral-mini-3b-2507.md index fae681f7..f0ef9e86 100644 --- a/docs/models/voxtral-mini-3b-2507.md +++ b/docs/models/voxtral-mini-3b-2507.md @@ -55,6 +55,21 @@ the family's tensor-level numerical gate — 43 checkpointed tensors within tolerance, transcript byte-exact. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| de | WER | 4.71% | +| en | WER | 3.89% | +| es | WER | 3.52% | +| fr | WER | 4.51% | +| hi | WER | 8.93% | +| it | WER | 2.56% | +| nl | WER | 6.57% | +| pt | WER | 3.84% | + + ## Quick Start ```bash diff --git a/docs/models/voxtral-small-24b-2507.md b/docs/models/voxtral-small-24b-2507.md index 03b0a24a..f2e7e7d3 100644 --- a/docs/models/voxtral-small-24b-2507.md +++ b/docs/models/voxtral-small-24b-2507.md @@ -53,6 +53,21 @@ tensor-level numerical parity is established by the Voxtral Mini 3B sibling (identical architecture). + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| de | WER | 3.29% | +| en | WER | 3.55% | +| es | WER | 2.86% | +| fr | WER | 3.86% | +| hi | WER | 7.40% | +| it | WER | 2.69% | +| nl | WER | 5.12% | +| pt | WER | 3.74% | + + ## Quick Start ```bash diff --git a/docs/models/voxtral.md b/docs/models/voxtral.md index eb8e4435..c50a63ff 100644 --- a/docs/models/voxtral.md +++ b/docs/models/voxtral.md @@ -17,10 +17,12 @@ For Mistral's **streaming** sibling, see ## Variants -| Variant | Text decoder | BF16 WER (test-clean) | Card | GGUF | -| --- | --- | ---: | --- | --- | -| `voxtral-mini-3b-2507` | Ministral-3B (30L, `d=3072`) | 1.88% | [card](voxtral-mini-3b-2507.md) | [HF](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-GGUF) | -| `voxtral-small-24b-2507` | Mistral-Small-24B (40L, `d=5120`) | 1.56% | [card](voxtral-small-24b-2507.md) | [HF](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-GGUF) | + +| Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | +| --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `voxtral-mini-3b-2507` | 4.7B | 8 languages + auto-detect | 5.00 GB | LibriSpeech test-clean (WER) | 1.87% | translate | [voxtral-mini-3b-2507.md](voxtral-mini-3b-2507.md) | +| `voxtral-small-24b-2507` | 24.3B | 8 languages + auto-detect | 25.81 GB | LibriSpeech test-clean (WER) | 1.56% | translate | [voxtral-small-24b-2507.md](voxtral-small-24b-2507.md) | + WER on the full LibriSpeech `test-clean` split (2620 utterances), Whisper English normalizer. Both match the HuggingFace `transformers` reference diff --git a/docs/models/whisper-base.en.md b/docs/models/whisper-base.en.md index 5fad0346..11bd3903 100644 --- a/docs/models/whisper-base.en.md +++ b/docs/models/whisper-base.en.md @@ -37,6 +37,14 @@ on 2026-04-26. WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 4.25%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 7.60% | + + ## Quick Start ```bash diff --git a/docs/models/whisper-base.md b/docs/models/whisper-base.md index 4e8c1e1e..b54d3fd2 100644 --- a/docs/models/whisper-base.md +++ b/docs/models/whisper-base.md @@ -37,6 +37,94 @@ on 2026-04-26. WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.009%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| af | WER | 83.05% | +| am | WER | 150.97% | +| ar | WER | 52.74% | +| as | WER | 100.60% | +| az | WER | 81.22% | +| be | WER | 92.72% | +| bg | WER | 70.53% | +| bn | WER | 100.73% | +| bs | WER | 71.53% | +| ca | WER | 29.48% | +| cs | WER | 70.14% | +| cy | WER | 98.19% | +| da | WER | 63.85% | +| de | WER | 19.69% | +| el | WER | 59.14% | +| en | WER | 9.88% | +| es | WER | 11.15% | +| et | WER | 81.71% | +| fa | WER | 87.72% | +| fi | WER | 49.46% | +| fil | WER | 49.32% | +| fr | WER | 27.91% | +| gl | WER | 50.06% | +| gu | WER | 100.40% | +| ha | WER | 108.15% | +| he | WER | 65.56% | +| hi | WER | 100.01% | +| hr | WER | 64.23% | +| hu | WER | 72.26% | +| hy | WER | 127.56% | +| id | WER | 38.02% | +| is | WER | 99.32% | +| it | WER | 17.26% | +| ja | CER | 25.28% | +| ka | WER | 117.78% | +| kk | WER | 99.79% | +| km | CER | 134.48% | +| kn | WER | 102.88% | +| ko | CER | 12.98% | +| lb | WER | 107.78% | +| ln | WER | 102.73% | +| lo | CER | 104.35% | +| lt | WER | 91.78% | +| lv | WER | 84.60% | +| mi | WER | 81.65% | +| mk | WER | 63.95% | +| ml | WER | 102.84% | +| mn | WER | 124.42% | +| mr | WER | 100.42% | +| ms | WER | 40.87% | +| mt | WER | 103.46% | +| my | CER | 130.63% | +| nb | WER | 49.26% | +| ne | WER | 101.15% | +| nl | WER | 36.75% | +| oc | WER | 88.62% | +| pa | WER | 101.13% | +| pl | WER | 35.68% | +| ps | WER | 101.19% | +| pt | WER | 13.91% | +| ro | WER | 62.16% | +| ru | WER | 22.92% | +| sd | WER | 103.23% | +| sk | WER | 65.77% | +| sl | WER | 77.90% | +| sn | WER | 134.76% | +| so | WER | 107.06% | +| sr | WER | 69.25% | +| sv | WER | 42.40% | +| sw | WER | 100.69% | +| ta | WER | 58.84% | +| te | WER | 101.77% | +| tg | WER | 108.30% | +| th | CER | 38.10% | +| tr | WER | 31.09% | +| uk | WER | 42.03% | +| ur | WER | 55.42% | +| uz | WER | 111.42% | +| vi | WER | 42.60% | +| yo | WER | 103.28% | +| zh | CER | 36.21% | + + ## Quick Start ```bash diff --git a/docs/models/whisper-large-v2.md b/docs/models/whisper-large-v2.md index 18fcf8fd..a12d44d6 100644 --- a/docs/models/whisper-large-v2.md +++ b/docs/models/whisper-large-v2.md @@ -37,6 +37,57 @@ on 2026-04-26. WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.83%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| af | WER | 38.45% | +| am | WER | 140.81% | +| ar | WER | 17.06% | +| as | WER | 104.58% | +| az | WER | 24.13% | +| be | WER | 46.96% | +| bg | WER | 15.81% | +| bn | WER | 103.42% | +| bs | WER | 17.02% | +| ca | WER | 5.56% | +| cs | WER | 14.42% | +| cy | WER | 30.55% | +| da | WER | 14.92% | +| de | WER | 4.53% | +| el | WER | 13.51% | +| en | WER | 4.21% | +| es | WER | 3.30% | +| et | WER | 23.25% | +| fa | WER | 34.25% | +| fi | WER | 9.58% | +| fil | WER | 13.17% | +| fr | WER | 5.81% | +| gl | WER | 16.57% | +| gu | WER | 103.37% | +| ha | WER | 92.22% | +| he | WER | 27.78% | +| hi | WER | 23.27% | +| hr | WER | 14.18% | +| hu | WER | 17.84% | +| hy | WER | 46.93% | +| id | WER | 7.43% | +| is | WER | 39.59% | +| it | WER | 3.59% | +| ja | CER | 5.56% | +| ka | WER | 115.24% | +| kk | WER | 40.13% | +| km | CER | 150.84% | +| kn | WER | 47.64% | +| ko | CER | 4.99% | +| lb | WER | 92.83% | +| ln | WER | 79.40% | +| lo | CER | 101.65% | +| lt | WER | 30.37% | +| lv | WER | 24.49% | + + ## Quick Start ```bash diff --git a/docs/models/whisper-large-v3-turbo.md b/docs/models/whisper-large-v3-turbo.md index c9958aad..a5780d18 100644 --- a/docs/models/whisper-large-v3-turbo.md +++ b/docs/models/whisper-large-v3-turbo.md @@ -36,6 +36,95 @@ on 2026-04-26. WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.10%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| af | WER | 36.06% | +| am | WER | 146.29% | +| ar | WER | 15.48% | +| as | WER | 101.22% | +| az | WER | 23.15% | +| be | WER | 50.65% | +| bg | WER | 13.58% | +| bn | WER | 67.53% | +| bs | WER | 14.77% | +| ca | WER | 5.42% | +| cs | WER | 11.81% | +| cy | WER | 36.42% | +| da | WER | 13.60% | +| de | WER | 4.54% | +| el | WER | 13.26% | +| en | WER | 4.38% | +| es | WER | 3.12% | +| et | WER | 18.44% | +| fa | WER | 30.56% | +| fi | WER | 8.29% | +| fil | WER | 12.08% | +| fr | WER | 5.51% | +| gl | WER | 12.76% | +| gu | WER | 78.95% | +| ha | WER | 97.24% | +| he | WER | 29.71% | +| hi | WER | 18.85% | +| hr | WER | 12.54% | +| hu | WER | 15.07% | +| hy | WER | 45.62% | +| id | WER | 7.20% | +| is | WER | 21.39% | +| it | WER | 2.77% | +| ja | CER | 4.82% | +| ka | WER | 109.21% | +| kk | WER | 21.27% | +| km | CER | 95.20% | +| kn | WER | 32.57% | +| ko | CER | 5.24% | +| lb | WER | 87.21% | +| ln | WER | 75.39% | +| lo | CER | 115.41% | +| lt | WER | 25.11% | +| lv | WER | 19.53% | +| mi | WER | 48.91% | +| mk | WER | 17.85% | +| ml | WER | 98.75% | +| mn | WER | 101.49% | +| mr | WER | 36.12% | +| ms | WER | 8.64% | +| mt | WER | 70.92% | +| my | CER | 121.67% | +| nb | WER | 9.10% | +| ne | WER | 43.15% | +| nl | WER | 5.98% | +| oc | WER | 70.94% | +| pa | WER | 99.53% | +| pl | WER | 5.81% | +| ps | WER | 91.81% | +| pt | WER | 4.17% | +| ro | WER | 10.90% | +| ru | WER | 5.93% | +| sd | WER | 122.10% | +| sk | WER | 10.21% | +| sl | WER | 20.56% | +| sn | WER | 110.94% | +| so | WER | 101.29% | +| sr | WER | 32.36% | +| sv | WER | 8.72% | +| sw | WER | 33.96% | +| ta | WER | 27.41% | +| te | WER | 63.03% | +| tg | WER | 106.06% | +| th | CER | 13.15% | +| tr | WER | 6.97% | +| uk | WER | 7.31% | +| ur | WER | 23.19% | +| uz | WER | 102.52% | +| vi | WER | 9.48% | +| yo | WER | 99.38% | +| yue | CER | 34.62% | +| zh | CER | 8.50% | + + ## Quick Start ```bash diff --git a/docs/models/whisper-large-v3.md b/docs/models/whisper-large-v3.md index ae873bcd..10344703 100644 --- a/docs/models/whisper-large-v3.md +++ b/docs/models/whisper-large-v3.md @@ -36,6 +36,95 @@ on 2026-04-26. WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.01%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| af | WER | 32.43% | +| am | WER | 132.70% | +| ar | WER | 14.92% | +| as | WER | 104.77% | +| az | WER | 21.10% | +| be | WER | 43.78% | +| bg | WER | 12.82% | +| bn | WER | 55.03% | +| bs | WER | 13.50% | +| ca | WER | 4.97% | +| cs | WER | 10.50% | +| cy | WER | 30.67% | +| da | WER | 12.48% | +| de | WER | 4.13% | +| el | WER | 11.53% | +| en | WER | 4.03% | +| es | WER | 2.70% | +| et | WER | 18.30% | +| fa | WER | 30.11% | +| fi | WER | 7.73% | +| fil | WER | 11.82% | +| fr | WER | 5.39% | +| gl | WER | 13.27% | +| gu | WER | 66.38% | +| ha | WER | 85.65% | +| he | WER | 26.73% | +| hi | WER | 17.06% | +| hr | WER | 10.94% | +| hu | WER | 13.40% | +| hy | WER | 43.64% | +| id | WER | 6.08% | +| is | WER | 31.85% | +| it | WER | 2.54% | +| ja | CER | 4.81% | +| ka | WER | 93.97% | +| kk | WER | 33.07% | +| km | CER | 101.09% | +| kn | WER | 31.99% | +| ko | CER | 4.89% | +| lb | WER | 85.67% | +| ln | WER | 72.22% | +| lo | CER | 100.28% | +| lt | WER | 24.55% | +| lv | WER | 19.21% | +| mi | WER | 38.78% | +| mk | WER | 15.09% | +| ml | WER | 100.17% | +| mn | WER | 85.60% | +| mr | WER | 34.30% | +| ms | WER | 7.59% | +| mt | WER | 68.79% | +| my | CER | 143.39% | +| nb | WER | 8.19% | +| ne | WER | 40.44% | +| nl | WER | 5.42% | +| oc | WER | 69.15% | +| pa | WER | 57.39% | +| pl | WER | 4.69% | +| ps | WER | 89.14% | +| pt | WER | 3.88% | +| ro | WER | 9.20% | +| ru | WER | 4.96% | +| sd | WER | 184.20% | +| sk | WER | 9.25% | +| sl | WER | 19.15% | +| sn | WER | 115.38% | +| so | WER | 91.10% | +| sr | WER | 28.49% | +| sv | WER | 7.80% | +| sw | WER | 34.57% | +| ta | WER | 20.04% | +| te | WER | 65.84% | +| tg | WER | 80.86% | +| th | CER | 8.78% | +| tr | WER | 6.51% | +| uk | WER | 6.28% | +| ur | WER | 21.75% | +| uz | WER | 86.28% | +| vi | WER | 8.74% | +| yo | WER | 97.26% | +| yue | CER | 22.06% | +| zh | CER | 7.98% | + + ## Quick Start ```bash diff --git a/docs/models/whisper-large.md b/docs/models/whisper-large.md index b309670b..dd7a12e1 100644 --- a/docs/models/whisper-large.md +++ b/docs/models/whisper-large.md @@ -37,6 +37,58 @@ on 2026-04-26. WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.73%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| af | WER | 44.92% | +| am | WER | 133.86% | +| ar | WER | 19.47% | +| as | WER | 105.09% | +| az | WER | 30.38% | +| be | WER | 58.26% | +| bg | WER | 19.89% | +| bn | WER | 105.08% | +| bs | WER | 22.20% | +| ca | WER | 7.01% | +| cs | WER | 18.77% | +| cy | WER | 36.33% | +| da | WER | 17.82% | +| de | WER | 5.04% | +| el | WER | 18.79% | +| en | WER | 4.46% | +| es | WER | 3.55% | +| et | WER | 27.31% | +| fa | WER | 37.88% | +| fi | WER | 12.73% | +| fil | WER | 15.44% | +| fr | WER | 6.95% | +| gl | WER | 20.10% | +| gu | WER | 104.29% | +| ha | WER | 90.12% | +| he | WER | 30.18% | +| hi | WER | 29.10% | +| hr | WER | 18.32% | +| hu | WER | 21.97% | +| hy | WER | 54.73% | +| id | WER | 8.93% | +| is | WER | 49.76% | +| it | WER | 3.67% | +| ja | CER | 6.95% | +| ka | WER | 119.65% | +| kk | WER | 47.29% | +| km | CER | 118.15% | +| kn | WER | 74.18% | +| ko | CER | 5.25% | +| lb | WER | 91.22% | +| ln | WER | 81.13% | +| lo | CER | 102.35% | +| lt | WER | 37.58% | +| lv | WER | 30.18% | +| mk | WER | 22.81% | + + ## Quick Start ```bash diff --git a/docs/models/whisper-medium.en.md b/docs/models/whisper-medium.en.md index 1f773a0a..584ee6ea 100644 --- a/docs/models/whisper-medium.en.md +++ b/docs/models/whisper-medium.en.md @@ -37,6 +37,14 @@ on 2026-04-26. WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.02%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 4.88% | + + ## Quick Start ```bash diff --git a/docs/models/whisper-medium.md b/docs/models/whisper-medium.md index 35b4e0c4..66dcf737 100644 --- a/docs/models/whisper-medium.md +++ b/docs/models/whisper-medium.md @@ -37,6 +37,94 @@ on 2026-04-26. WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.90%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| af | WER | 47.33% | +| am | WER | 116.27% | +| ar | WER | 21.90% | +| as | WER | 101.63% | +| az | WER | 34.57% | +| be | WER | 61.87% | +| bg | WER | 23.00% | +| bn | WER | 102.52% | +| bs | WER | 26.69% | +| ca | WER | 8.02% | +| cs | WER | 22.85% | +| cy | WER | 40.08% | +| da | WER | 21.17% | +| de | WER | 6.23% | +| el | WER | 20.06% | +| en | WER | 4.64% | +| es | WER | 3.80% | +| et | WER | 31.52% | +| fa | WER | 42.57% | +| fi | WER | 14.67% | +| fil | WER | 18.36% | +| fr | WER | 8.07% | +| gl | WER | 22.24% | +| gu | WER | 104.11% | +| ha | WER | 95.12% | +| he | WER | 33.69% | +| hi | WER | 26.09% | +| hr | WER | 21.19% | +| hu | WER | 26.07% | +| hy | WER | 58.42% | +| id | WER | 10.79% | +| is | WER | 51.60% | +| it | WER | 4.17% | +| ja | CER | 7.35% | +| ka | WER | 128.01% | +| kk | WER | 53.09% | +| km | CER | 108.92% | +| kn | WER | 87.30% | +| ko | CER | 5.46% | +| lb | WER | 98.33% | +| ln | WER | 92.09% | +| lo | CER | 101.16% | +| lt | WER | 43.34% | +| lv | WER | 33.58% | +| mi | WER | 95.79% | +| mk | WER | 24.75% | +| ml | WER | 101.00% | +| mn | WER | 110.55% | +| mr | WER | 58.43% | +| ms | WER | 13.23% | +| mt | WER | 85.06% | +| my | CER | 117.51% | +| nb | WER | 13.66% | +| ne | WER | 54.08% | +| nl | WER | 10.40% | +| oc | WER | 81.55% | +| pa | WER | 103.19% | +| pl | WER | 8.59% | +| ps | WER | 105.77% | +| pt | WER | 5.07% | +| ro | WER | 24.17% | +| ru | WER | 7.30% | +| sd | WER | 132.27% | +| sk | WER | 18.73% | +| sl | WER | 33.98% | +| sn | WER | 134.28% | +| so | WER | 102.63% | +| sr | WER | 55.14% | +| sv | WER | 12.47% | +| sw | WER | 57.09% | +| ta | WER | 23.72% | +| te | WER | 102.69% | +| tg | WER | 76.32% | +| th | CER | 16.08% | +| tr | WER | 9.35% | +| uk | WER | 11.59% | +| ur | WER | 28.67% | +| uz | WER | 115.02% | +| vi | WER | 13.74% | +| yo | WER | 109.00% | +| zh | CER | 13.13% | + + ## Quick Start ```bash diff --git a/docs/models/whisper-small.en.md b/docs/models/whisper-small.en.md index c79b4f13..376d00f4 100644 --- a/docs/models/whisper-small.en.md +++ b/docs/models/whisper-small.en.md @@ -37,6 +37,14 @@ on 2026-04-26. WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.05%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 6.14% | + + ## Quick Start ```bash diff --git a/docs/models/whisper-small.md b/docs/models/whisper-small.md index e7afaf3a..48a8456f 100644 --- a/docs/models/whisper-small.md +++ b/docs/models/whisper-small.md @@ -37,6 +37,94 @@ on 2026-04-26. WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.432%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| af | WER | 62.20% | +| am | WER | 128.30% | +| ar | WER | 32.15% | +| as | WER | 104.15% | +| az | WER | 51.64% | +| be | WER | 76.85% | +| bg | WER | 40.39% | +| bn | WER | 103.04% | +| bs | WER | 42.35% | +| ca | WER | 14.19% | +| cs | WER | 40.57% | +| cy | WER | 64.47% | +| da | WER | 35.52% | +| de | WER | 9.86% | +| el | WER | 33.98% | +| en | WER | 6.51% | +| es | WER | 5.92% | +| et | WER | 54.79% | +| fa | WER | 58.44% | +| fi | WER | 26.48% | +| fil | WER | 28.52% | +| fr | WER | 13.30% | +| gl | WER | 32.72% | +| gu | WER | 104.02% | +| ha | WER | 94.21% | +| he | WER | 46.06% | +| hi | WER | 42.05% | +| hr | WER | 36.05% | +| hu | WER | 42.39% | +| hy | WER | 87.84% | +| id | WER | 18.02% | +| is | WER | 74.54% | +| it | WER | 7.97% | +| ja | CER | 12.81% | +| ka | WER | 130.64% | +| kk | WER | 73.54% | +| km | CER | 116.96% | +| kn | WER | 99.65% | +| ko | CER | 7.70% | +| lb | WER | 110.02% | +| ln | WER | 98.65% | +| lo | CER | 101.52% | +| lt | WER | 70.21% | +| lv | WER | 57.42% | +| mi | WER | 62.82% | +| mk | WER | 41.53% | +| ml | WER | 100.35% | +| mn | WER | 142.37% | +| mr | WER | 63.66% | +| ms | WER | 21.48% | +| mt | WER | 97.32% | +| my | CER | 132.91% | +| nb | WER | 25.53% | +| ne | WER | 70.48% | +| nl | WER | 18.48% | +| oc | WER | 90.43% | +| pa | WER | 101.31% | +| pl | WER | 16.82% | +| ps | WER | 93.61% | +| pt | WER | 7.65% | +| ro | WER | 33.88% | +| ru | WER | 11.90% | +| sd | WER | 112.24% | +| sk | WER | 36.05% | +| sl | WER | 52.70% | +| sn | WER | 132.90% | +| so | WER | 103.39% | +| sr | WER | 44.91% | +| sv | WER | 23.10% | +| sw | WER | 76.22% | +| ta | WER | 35.35% | +| te | WER | 102.23% | +| tg | WER | 86.78% | +| th | CER | 22.55% | +| tr | WER | 15.95% | +| uk | WER | 20.42% | +| ur | WER | 39.75% | +| uz | WER | 114.92% | +| vi | WER | 22.47% | +| yo | WER | 118.50% | +| zh | CER | 23.06% | + + ## Quick Start ```bash diff --git a/docs/models/whisper-tiny.en.md b/docs/models/whisper-tiny.en.md index 735d2657..838af5e2 100644 --- a/docs/models/whisper-tiny.en.md +++ b/docs/models/whisper-tiny.en.md @@ -37,6 +37,14 @@ on 2026-04-26. WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.66%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 10.72% | + + ## Quick Start ```bash diff --git a/docs/models/whisper-tiny.md b/docs/models/whisper-tiny.md index 7fd4e663..5ea93c59 100644 --- a/docs/models/whisper-tiny.md +++ b/docs/models/whisper-tiny.md @@ -37,6 +37,94 @@ on 2026-04-26. WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 7.54%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| af | WER | 95.30% | +| am | WER | 122.14% | +| ar | WER | 67.48% | +| as | WER | 100.56% | +| az | WER | 94.73% | +| be | WER | 96.03% | +| bg | WER | 84.87% | +| bn | WER | 100.37% | +| bs | WER | 87.22% | +| ca | WER | 46.33% | +| cs | WER | 87.17% | +| cy | WER | 116.68% | +| da | WER | 88.42% | +| de | WER | 31.56% | +| el | WER | 77.76% | +| en | WER | 13.84% | +| es | WER | 18.95% | +| et | WER | 101.33% | +| fa | WER | 100.18% | +| fi | WER | 68.58% | +| fil | WER | 70.63% | +| fr | WER | 44.19% | +| gl | WER | 59.44% | +| gu | WER | 100.26% | +| ha | WER | 105.17% | +| he | WER | 77.35% | +| hi | WER | 101.52% | +| hr | WER | 84.36% | +| hu | WER | 90.54% | +| hy | WER | 110.50% | +| id | WER | 60.49% | +| is | WER | 115.88% | +| it | WER | 31.24% | +| ja | CER | 39.38% | +| ka | WER | 110.34% | +| kk | WER | 136.56% | +| km | CER | 111.78% | +| kn | WER | 100.32% | +| ko | CER | 19.07% | +| lb | WER | 99.69% | +| ln | WER | 103.55% | +| lo | CER | 105.48% | +| lt | WER | 105.00% | +| lv | WER | 95.98% | +| mi | WER | 96.27% | +| mk | WER | 78.61% | +| ml | WER | 100.03% | +| mn | WER | 110.21% | +| mr | WER | 100.82% | +| ms | WER | 62.17% | +| mt | WER | 99.85% | +| my | CER | 108.53% | +| nb | WER | 67.36% | +| ne | WER | 101.30% | +| nl | WER | 54.86% | +| oc | WER | 96.44% | +| pa | WER | 100.54% | +| pl | WER | 54.22% | +| ps | WER | 101.04% | +| pt | WER | 24.07% | +| ro | WER | 82.43% | +| ru | WER | 35.64% | +| sd | WER | 105.42% | +| sk | WER | 82.20% | +| sl | WER | 91.29% | +| sn | WER | 118.33% | +| so | WER | 105.31% | +| sr | WER | 89.20% | +| sv | WER | 59.36% | +| sw | WER | 99.96% | +| ta | WER | 87.46% | +| te | WER | 101.18% | +| tg | WER | 102.39% | +| th | CER | 54.82% | +| tr | WER | 47.98% | +| uk | WER | 57.49% | +| ur | WER | 71.42% | +| uz | WER | 103.19% | +| vi | WER | 64.49% | +| yo | WER | 102.29% | +| zh | CER | 41.91% | + + ## Quick Start ```bash diff --git a/docs/models/whisper.md b/docs/models/whisper.md index 06d175f6..508e46f2 100644 --- a/docs/models/whisper.md +++ b/docs/models/whisper.md @@ -43,20 +43,22 @@ default). See each per-variant doc for the full quant matrix (F32/F16/Q8_0/Q6_K/Q5_K_M/Q4_K_M) and a discussion of how our numbers compare to OpenAI's self-reported figures. Numbers come from single Metal-backed runs; Metal's non-deterministic parallel reductions add ~0.1pp run-to-run variance on the noise floor. -| Variant | Languages | Q8_0 size | WER (Q8_0) | Doc | -| --- | --- | ---: | ---: | --- | -| `whisper-tiny` | 99 + auto-detect | 44 MB | 7.53% | [whisper-tiny.md](whisper-tiny.md) | -| `whisper-tiny.en` | English only | 44 MB | 5.72% | [whisper-tiny.en.md](whisper-tiny.en.md) | -| `whisper-base` | 99 + auto-detect | 81 MB | 5.12% | [whisper-base.md](whisper-base.md) | -| `whisper-base.en` | English only | 81 MB | 4.16% | [whisper-base.en.md](whisper-base.en.md) | -| `whisper-small` | 99 + auto-detect | 257 MB | 3.33% | [whisper-small.md](whisper-small.md) | -| `whisper-small.en` | English only | 257 MB | 3.09% | [whisper-small.en.md](whisper-small.en.md) | -| `whisper-medium` | 99 + auto-detect | 793 MB | 2.64% | [whisper-medium.md](whisper-medium.md) | -| `whisper-medium.en` | English only | 793 MB | 2.72% | [whisper-medium.en.md](whisper-medium.en.md) | -| `whisper-large` | 99 + auto-detect | 1.55 GB | 2.74% | [whisper-large.md](whisper-large.md) | -| `whisper-large-v2` | 99 + auto-detect | 1.55 GB | 2.65% | [whisper-large-v2.md](whisper-large-v2.md) | -| `whisper-large-v3` | 100 + auto-detect | 1.55 GB | 1.82% | [whisper-large-v3.md](whisper-large-v3.md) | -| `whisper-large-v3-turbo` | 100 + auto-detect | 845 MB | 2.01% | [whisper-large-v3-turbo.md](whisper-large-v3-turbo.md) | + +| Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | +| --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `whisper-tiny` | 38M | 99 languages + auto-detect | 46 MB | LibriSpeech test-clean (WER) | 7.52% | translate, segment timestamps | [whisper-tiny.md](whisper-tiny.md) | +| `whisper-tiny.en` | 38M | en | 46 MB | LibriSpeech test-clean (WER) | 5.72% | segment timestamps | [whisper-tiny.en.md](whisper-tiny.en.md) | +| `whisper-base` | 73M | 99 languages + auto-detect | 85 MB | LibriSpeech test-clean (WER) | 5.12% | translate, segment timestamps | [whisper-base.md](whisper-base.md) | +| `whisper-base.en` | 73M | en | 85 MB | LibriSpeech test-clean (WER) | 4.16% | segment timestamps | [whisper-base.en.md](whisper-base.en.md) | +| `whisper-small` | 242M | 99 languages + auto-detect | 270 MB | LibriSpeech test-clean (WER) | 3.33% | translate, segment timestamps | [whisper-small.md](whisper-small.md) | +| `whisper-small.en` | 242M | en | 270 MB | LibriSpeech test-clean (WER) | 3.09% | segment timestamps | [whisper-small.en.md](whisper-small.en.md) | +| `whisper-medium` | 764M | 99 languages + auto-detect | 832 MB | LibriSpeech test-clean (WER) | 2.64% | translate, segment timestamps | [whisper-medium.md](whisper-medium.md) | +| `whisper-medium.en` | 764M | en | 831 MB | LibriSpeech test-clean (WER) | 2.72% | segment timestamps | [whisper-medium.en.md](whisper-medium.en.md) | +| `whisper-large` | 1.5B | 99 languages + auto-detect | 1.67 GB | LibriSpeech test-clean (WER) | 2.71% | translate, segment timestamps | [whisper-large.md](whisper-large.md) | +| `whisper-large-v2` | 1.5B | 99 languages + auto-detect | 1.67 GB | LibriSpeech test-clean (WER) | 2.97% | translate, segment timestamps | [whisper-large-v2.md](whisper-large-v2.md) | +| `whisper-large-v3` | 1.5B | 100 languages + auto-detect | 1.67 GB | LibriSpeech test-clean (WER) | 1.82% | translate, segment timestamps | [whisper-large-v3.md](whisper-large-v3.md) | +| `whisper-large-v3-turbo` | 809M | 100 languages + auto-detect | 886 MB | LibriSpeech test-clean (WER) | 2.01% | segment timestamps | [whisper-large-v3-turbo.md](whisper-large-v3-turbo.md) | + Pre-built GGUFs for every variant and quant are hosted under [`handy-computer` on Hugging Face](https://huggingface.co/handy-computer); diff --git a/scripts/catalog/common.py b/scripts/catalog/common.py index dffd1077..279857b3 100644 --- a/scripts/catalog/common.py +++ b/scripts/catalog/common.py @@ -141,6 +141,39 @@ def perf_rows(record: dict, machine: str) -> dict[tuple[str, str, str], dict]: if row["machine"] == machine} +# -------------------------------------------------------------------------- +# summaries + + +def fmt_params(params: int) -> str: + if params >= 10**9: + return f"{params / 10**9:.1f}B".replace(".0B", "B") + return f"{round(params / 10**6):.0f}M" + + +def languages_summary(record: dict) -> str: + """`en`, `en, de, fr`, or a count, plus a note when the model auto-detects.""" + langs = [str(lang) for lang in record.get("languages", [])] + text = ", ".join(langs) if len(langs) <= 4 else f"{len(langs)} languages" + if record.get("capabilities", {}).get("lang_detect", {}).get("supported"): + text += " + auto-detect" + return text or "-" + + +def capabilities_summary(record: dict) -> str: + """The extras beyond plain transcription, as a short comma list.""" + caps = record.get("capabilities", {}) + out = [] + for name, label in (("translate", "translate"), ("streaming", "streaming"), + ("diarize", "diarize")): + if caps.get(name, {}).get("supported"): + out.append(label) + grans = caps.get("timestamps", {}).get("granularities") or [] + if grans: + out.append(f"{grans[0]} timestamps") + return ", ".join(out) or "-" + + # -------------------------------------------------------------------------- # downloads diff --git a/scripts/catalog/render.py b/scripts/catalog/render.py index c6a6810e..b1503111 100755 --- a/scripts/catalog/render.py +++ b/scripts/catalog/render.py @@ -15,9 +15,11 @@ ... -Blocks: `downloads`, `perf machine=`, `intro` (upstream link plus the -card spec's `summary`), and `prose field=wer.notes` (any `|` text field of -the spec, dotted path). Everything outside a marker pair is untouched. The variant is the file stem +Blocks: `downloads`, `perf machine=`, `accuracy` (one table per +dataset split beyond the headline), `intro` (upstream link plus the card +spec's `summary`), `prose field=wer.notes` (any `|` text field of the spec, +dotted path), and `family variants=a,b,c` (a roll-up row per variant, for +family pages). Everything outside a marker pair is untouched. The variant is the file stem unless the marker overrides it with `variant=`, so family docs can pull a table for a model they are not named after. @@ -192,8 +194,87 @@ def block_prose(record: dict, attrs: dict[str, str]) -> list[str]: return prose_lines(value, f"spec field {field!r}") +def block_accuracy(record: dict, attrs: dict[str, str]) -> list[str]: + """One table per dataset split: language rows, quant columns. + + The headline cell (dataset, split, language) is already the download + table's last column, so it is left out unless `all=true`; the rest of its + split still renders. `datasets=fleurs:test,librispeech:test-clean` narrows + to named splits. + """ + headline = common.headline(record) or {} + wanted = None + if attrs.get("datasets"): + wanted = {tuple(item.split(":", 1)) for item in attrs["datasets"].split(",")} + groups: dict[tuple[str, str], list[dict]] = {} + for row in record.get("accuracy_benchmarks", []): + key = (row["dataset"], row["split"]) + if wanted is not None and key not in wanted: + continue + if wanted is None and not as_bool(attrs.get("all"), False) \ + and (*key, row["language"]) == (headline.get("dataset"), headline.get("split"), + headline.get("language")): + continue + groups.setdefault(key, []).append(row) + if not groups: + raise RenderError("no accuracy rows beyond the headline benchmark") + + quant_rank = {item["quant"]: i for i, item in enumerate(record.get("downloads", []))} + out: list[str] = [] + for (dataset, split), rows in sorted(groups.items()): + quants = sorted({row["quant"] for row in rows}, key=lambda q: (quant_rank.get(q, 99), q)) + cells: dict[tuple[str, str], dict] = {} + for row in rows: + # Several recipes of one cell can coexist (batch size, timestamps); + # the profile recipe wins, else the first listed. + key = (row["language"], row["quant"]) + if key not in cells or row.get("engine_sha") and not cells[key].get("engine_sha"): + cells[key] = row + body = [] + for language in sorted({row["language"] for row in rows}): + metric = next(cells[(language, q)]["metric"] for q in quants if (language, q) in cells) + body.append([language, metric.upper()] + + [common.fmt_err(cells.get((language, q))) for q in quants]) + if out: + out.append("") + label = f"FLEURS {split}" if dataset == "fleurs" else common.dataset_label(dataset, split, "") + out.extend([f"**{label}**", ""]) + out.extend(common.render_table(["Language", "Metric"] + quants, + ["l", "l"] + ["r"] * len(quants), body)) + return out + + +def block_family(records: dict[str, dict], attrs: dict[str, str]) -> list[str]: + """A family roll-up: one row per variant, headline number at one quant.""" + names = [name for name in attrs.get("variants", "").split(",") if name] + if not names: + raise RenderError("family block needs variants=") + quant = attrs.get("quant", "Q8_0") + body = [] + for name in names: + record = records.get(name) + if record is None: + raise RenderError(f"no catalog record for {name!r}") + download = next((d for d in record.get("downloads", []) if d["quant"] == quant), None) + headline = common.headline(record) or {} + doc = common.DOCS_DIR / f"{name}.md" + link = (f"[{name}.md]({name}.md)" if doc.exists() + else f"[{record['published_repo']}](https://huggingface.co/{record['published_repo']})") + body.append([ + f"`{name}`", common.fmt_params(record["params"]), common.languages_summary(record), + common.fmt_size(download["size_bytes"]) if download else "-", + (f"{common.headline_label(record)} ({headline['metric'].upper()})" + if headline else "-"), + common.fmt_err(common.headline_rows(record).get(quant)), + common.capabilities_summary(record), link]) + return common.render_table( + ["Variant", "Params", "Languages", f"{quant} size", "Benchmark", quant, + "Capabilities", "Doc"], + ["l", "r", "l", "r", "l", "r", "l", "l"], body, max_pad=34) + + BLOCKS = {"downloads": block_downloads, "perf": block_perf, - "intro": block_intro, "prose": block_prose} + "intro": block_intro, "prose": block_prose, "accuracy": block_accuracy} # -------------------------------------------------------------------------- @@ -220,11 +301,14 @@ def rewrite(path: pathlib.Path, records: dict[str, dict]) -> tuple[str, list[str attrs = parse_attrs(raw) variant = attrs.get("variant", path.stem) try: - if name not in BLOCKS: + if name == "family": + rendered = block_family(records, attrs) + elif name not in BLOCKS: raise RenderError(f"unknown block type {name!r}") - if variant not in records: + elif variant not in records: raise RenderError(f"no catalog record for {variant!r}") - rendered = BLOCKS[name](records[variant], attrs) + else: + rendered = BLOCKS[name](records[variant], attrs) except RenderError as exc: errors.append(f"{path.name}:{index + 1}: catalog:{name} {variant}: {exc}") out.extend(lines[index + 1:close]) # leave the region alone From 0a264781e0ca6fa67a6131371aae4fc3cd19dbe2 Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sun, 13 Sep 2026 05:51:41 -0700 Subject: [PATCH 12/24] move more to catalog --- README.md | 52 +++++---- catalog/_benchmark_profiles.json | 2 + catalog/_schema.json | 8 +- catalog/parakeet-unified-en-0.6b.json | 3 +- catalog/whisper-large-v3-turbo.json | 1 - docs/models/canary-180m-flash.md | 25 ++--- docs/models/canary-1b-flash.md | 25 ++--- docs/models/canary-1b-v2.md | 25 ++--- docs/models/canary-1b.md | 25 ++--- docs/models/canary-qwen-2.5b.md | 25 ++--- docs/models/cohere-transcribe-03-2026.md | 43 +++---- .../cohere-transcribe-arabic-07-2026.md | 41 ++++--- .../diar_streaming_sortformer_4spk-v2.1.md | 18 +-- docs/models/fun-asr-mlt-nano-2512.md | 39 +++---- docs/models/fun-asr-nano-2512.md | 40 +++---- docs/models/gigaam-v3-ctc.md | 41 +++---- docs/models/gigaam-v3-e2e-ctc.md | 41 +++---- docs/models/gigaam-v3-e2e-rnnt.md | 41 +++---- docs/models/gigaam-v3-rnnt.md | 41 +++---- docs/models/granite-4.0-1b-speech.md | 18 ++- docs/models/granite-speech-4.1-2b-nar.md | 24 ++-- docs/models/granite-speech-4.1-2b-plus.md | 18 ++- docs/models/granite-speech-4.1-2b.md | 18 ++- docs/models/medasr.md | 30 ++--- docs/models/moonshine-base.md | 33 +++--- docs/models/moonshine-streaming-medium.md | 27 ++--- docs/models/moonshine-streaming-small.md | 25 ++--- docs/models/moonshine-streaming-tiny.md | 25 ++--- docs/models/moonshine-tiny.md | 29 ++--- docs/models/moss-transcribe-diarize.md | 49 ++++---- .../multitalker-parakeet-streaming-0.6b-v1.md | 25 ++--- .../models/nemotron-3.5-asr-streaming-0.6b.md | 28 ++--- .../nemotron-speech-streaming-en-0.6b.md | 31 ++---- docs/models/parakeet-ctc-0.6b.md | 25 ++--- docs/models/parakeet-ctc-1.1b.md | 25 ++--- docs/models/parakeet-rnnt-0.6b.md | 39 +++---- docs/models/parakeet-rnnt-1.1b.md | 37 +++--- docs/models/parakeet-tdt-0.6b-v2.md | 39 +++---- docs/models/parakeet-tdt-0.6b-v3.md | 31 ++---- docs/models/parakeet-tdt-1.1b.md | 31 ++---- docs/models/parakeet-tdt_ctc-1.1b.md | 31 ++---- docs/models/parakeet-tdt_ctc-110m.md | 27 ++--- docs/models/parakeet-unified-en-0.6b.md | 25 ++--- docs/models/qwen3-asr-0.6b.md | 37 +++--- docs/models/qwen3-asr-1.7b.md | 37 +++--- docs/models/sensevoice-small.md | 36 +++--- docs/models/voxtral-mini-3b-2507.md | 39 +++---- docs/models/voxtral-realtime.md | 50 ++++----- docs/models/voxtral-small-24b-2507.md | 24 ++-- docs/models/whisper-base.en.md | 50 +++------ docs/models/whisper-base.md | 50 +++------ docs/models/whisper-large-v2.md | 48 +++----- docs/models/whisper-large-v3-turbo.md | 34 ++---- docs/models/whisper-large-v3.md | 48 +++----- docs/models/whisper-large.md | 54 ++++----- docs/models/whisper-medium.en.md | 50 +++------ docs/models/whisper-medium.md | 50 +++------ docs/models/whisper-small.en.md | 58 ++++------ docs/models/whisper-small.md | 58 ++++------ docs/models/whisper-tiny.en.md | 50 +++------ docs/models/whisper-tiny.md | 50 +++------ docs/models/whisper.md | 3 +- scripts/bench/run.py | 36 ++++++ scripts/catalog/db.py | 4 +- scripts/catalog/ingest_perf.py | 3 +- scripts/catalog/profiles.py | 5 + scripts/catalog/render.py | 105 ++++++++++++++++-- 67 files changed, 944 insertions(+), 1261 deletions(-) diff --git a/README.md b/README.md index c1cdedbd..97fcdcae 100644 --- a/README.md +++ b/README.md @@ -6,33 +6,37 @@ C/C++ speech-to-text inference library. Runs diverse STT model families via [GGU **Supported models:** -| Family | Variants | Docs | -| --- | --- | --- | -| Parakeet | 11 variants: TDT, RNN-T, CTC, TDT+CTC (110M–1.1B), incl. German `parakeet-primeline` | [docs/models/parakeet.md](docs/models/parakeet.md) | -| Canary | `canary-1b`, `canary-1b-v2`, `canary-1b-flash`, `canary-180m-flash` | [docs/models/canary.md](docs/models/canary.md) | -| Canary-Qwen | `canary-qwen-2.5b` (FastConformer + Qwen3-1.7B SALM) | [docs/models/canary-qwen-2.5b.md](docs/models/canary-qwen-2.5b.md) | -| Whisper | 12 variants (`tiny` through `large-v3-turbo`, plus `.en` siblings) | [docs/models/whisper.md](docs/models/whisper.md) | -| GigaAM | `gigaam-v3-{e2e-rnnt,e2e-ctc,rnnt,ctc}` | [docs/models/gigaam.md](docs/models/gigaam.md) | -| Moonshine | `moonshine-tiny`, `moonshine-base` | [docs/models/moonshine.md](docs/models/moonshine.md) | -| Moonshine Streaming | `moonshine-streaming-{tiny,small,medium}` | [docs/models/moonshine-streaming.md](docs/models/moonshine-streaming.md) | -| Qwen3-ASR | `qwen3-asr-0.6b`, `qwen3-asr-1.7b` | [docs/models/qwen3-asr.md](docs/models/qwen3-asr.md) | -| Cohere Transcribe | `cohere-transcribe-03-2026` (14 languages), `cohere-transcribe-arabic-07-2026` (Arabic dialects + code-switching) | [docs/models/cohere.md](docs/models/cohere.md) | -| SenseVoice | `sensevoice-small` | [docs/models/sensevoice-small.md](docs/models/sensevoice-small.md) | -| FunASR Nano | `fun-asr-nano-2512`, `fun-asr-mlt-nano-2512` | [docs/models/fun-asr-nano.md](docs/models/fun-asr-nano.md) | -| Nemotron Speech Streaming | `nemotron-speech-streaming-en-0.6b` | [docs/models/nemotron-speech-streaming-en-0.6b.md](docs/models/nemotron-speech-streaming-en-0.6b.md) | -| Nemotron 3.5 ASR Streaming | `nemotron-3.5-asr-streaming-0.6b` (multilingual, 32 transcription locales) | [docs/models/nemotron-3.5-asr-streaming-0.6b.md](docs/models/nemotron-3.5-asr-streaming-0.6b.md) | -| Multitalker Parakeet Streaming | `multitalker-parakeet-streaming-0.6b-v1` (bundles an embedded Sortformer diarizer; speaker-attributed ASR with `--diarize`) | [docs/models/multitalker-parakeet-streaming-0.6b-v1.md](docs/models/multitalker-parakeet-streaming-0.6b-v1.md) | -| Granite Speech 4 / 4.1 | `granite-4.0-1b-speech`, `granite-speech-4.1-2b{,-plus,-nar}` | [docs/models/granite-speech.md](docs/models/granite-speech.md) | -| Voxtral | `voxtral-mini-3b-2507`, `voxtral-small-24b-2507` (audio-LLM; transcription + translation) | [docs/models/voxtral.md](docs/models/voxtral.md) | -| Voxtral Realtime | `voxtral-mini-4b-realtime-2602` (streaming audio-LLM) | [docs/models/voxtral-realtime.md](docs/models/voxtral-realtime.md) | -| MedASR | `medasr` (Conformer + CTC, English medical-dictation, gated) | [docs/models/medasr.md](docs/models/medasr.md) | -| MOSS Transcribe-Diarize | `moss-transcribe-diarize` (audio-LLM; English + Chinese ASR with inline speaker diarization) | [docs/models/moss-transcribe-diarize.md](docs/models/moss-transcribe-diarize.md) | + +| Family | Variants | Capabilities | Docs | +| --- | --- | --- | --- | +| Canary | `canary-180m-flash`, `canary-1b`, `canary-1b-flash`, `canary-1b-v2` | translate | [docs/models/canary.md](docs/models/canary.md) | +| Canary-Qwen 2.5B | `canary-qwen-2.5b` | - | [docs/models/canary-qwen-2.5b.md](docs/models/canary-qwen-2.5b.md) | +| Cohere Transcribe | `cohere-transcribe-03-2026`, `cohere-transcribe-arabic-07-2026` | - | [docs/models/cohere.md](docs/models/cohere.md) | +| Fun-ASR-Nano | `fun-asr-mlt-nano-2512`, `fun-asr-nano-2512` | - | [docs/models/fun-asr-nano.md](docs/models/fun-asr-nano.md) | +| GigaAM-v3 | `gigaam-v3-ctc`, `gigaam-v3-e2e-ctc`, `gigaam-v3-e2e-rnnt`, `gigaam-v3-rnnt` | token timestamps | [docs/models/gigaam.md](docs/models/gigaam.md) | +| Granite Speech 4 / 4.1 | `granite-4.0-1b-speech`, `granite-speech-4.1-2b`, `granite-speech-4.1-2b-nar`, `granite-speech-4.1-2b-plus` | diarize, translate, word timestamps | [docs/models/granite-speech.md](docs/models/granite-speech.md) | +| MedASR | `medasr` | token timestamps | [docs/models/medasr.md](docs/models/medasr.md) | +| Moonshine | `moonshine-base`, `moonshine-base-ar`, `moonshine-base-ja`, `moonshine-base-ko`, `moonshine-base-uk`, `moonshine-base-vi`, `moonshine-base-zh`, `moonshine-tiny`, `moonshine-tiny-ar`, `moonshine-tiny-ja`, `moonshine-tiny-ko`, `moonshine-tiny-uk`, `moonshine-tiny-vi`, `moonshine-tiny-zh` | - | [docs/models/moonshine.md](docs/models/moonshine.md) | +| Moonshine Streaming | `moonshine-streaming-medium`, `moonshine-streaming-small`, `moonshine-streaming-tiny` | streaming | [docs/models/moonshine-streaming.md](docs/models/moonshine-streaming.md) | +| MOSS-Transcribe-Diarize | `moss-transcribe-diarize` | diarize, segment timestamps | [docs/models/moss-transcribe-diarize.md](docs/models/moss-transcribe-diarize.md) | +| Multitalker Parakeet Streaming 0.6B v1 | `multitalker-parakeet-streaming-0.6b-v1` | diarize, streaming, token timestamps | [docs/models/multitalker-parakeet-streaming-0.6b-v1.md](docs/models/multitalker-parakeet-streaming-0.6b-v1.md) | +| Nemotron 3.5 ASR Streaming 0.6B | `nemotron-3.5-asr-streaming-0.6b` | streaming, token timestamps | [docs/models/nemotron-3.5-asr-streaming-0.6b.md](docs/models/nemotron-3.5-asr-streaming-0.6b.md) | +| Nemotron Speech Streaming EN 0.6B | `nemotron-speech-streaming-en-0.6b` | streaming, token timestamps | [docs/models/nemotron-speech-streaming-en-0.6b.md](docs/models/nemotron-speech-streaming-en-0.6b.md) | +| Parakeet | `parakeet-ctc-0.6b`, `parakeet-ctc-1.1b`, `parakeet-primeline`, `parakeet-rnnt-0.6b`, `parakeet-rnnt-1.1b`, `parakeet-tdt-0.6b-v2`, `parakeet-tdt-0.6b-v3`, `parakeet-tdt-1.1b`, `parakeet-tdt_ctc-1.1b`, `parakeet-tdt_ctc-110m`, `parakeet-unified-en-0.6b` | streaming, token timestamps | [docs/models/parakeet.md](docs/models/parakeet.md) | +| Qwen3-ASR | `qwen3-asr-0.6b`, `qwen3-asr-1.7b` | - | [docs/models/qwen3-asr.md](docs/models/qwen3-asr.md) | +| SenseVoice Small | `sensevoice-small` | - | [docs/models/sensevoice-small.md](docs/models/sensevoice-small.md) | +| Voxtral (2507) | `voxtral-mini-3b-2507`, `voxtral-small-24b-2507` | translate | [docs/models/voxtral.md](docs/models/voxtral.md) | +| voxtral-mini-4b-realtime-2602 | `voxtral-mini-4b-realtime-2602` | streaming | [handy-computer/Voxtral-Mini-4B-Realtime-2602-gguf](https://huggingface.co/handy-computer/Voxtral-Mini-4B-Realtime-2602-gguf) | +| Whisper | `breeze-asr-25`, `whisper-base`, `whisper-base.en`, `whisper-large`, `whisper-large-v2`, `whisper-large-v3`, `whisper-large-v3-turbo`, `whisper-medium`, `whisper-medium.en`, `whisper-small`, `whisper-small.en`, `whisper-tiny`, `whisper-tiny.en` | segment timestamps, translate | [docs/models/whisper.md](docs/models/whisper.md) | + **Speaker diarization models** (no transcription; verified by DER/JER rather than WER): -| Family | Variants | Docs | -| --- | --- | --- | -| Sortformer | `diar_streaming_sortformer_4spk-v2.1` (streaming speaker diarizer, up to 4 speakers) | [docs/models/diar_streaming_sortformer_4spk-v2.1.md](docs/models/diar_streaming_sortformer_4spk-v2.1.md) | + +| Family | Variants | Capabilities | Docs | +| --- | --- | --- | --- | +| Streaming Sortformer Diarizer 4spk v2.1 | `diar_streaming_sortformer_4spk-v2.1` | diarize, streaming | [docs/models/diar_streaming_sortformer_4spk-v2.1.md](docs/models/diar_streaming_sortformer_4spk-v2.1.md) | + Per-variant model cards live under [`docs/models/`](docs/models/). diff --git a/catalog/_benchmark_profiles.json b/catalog/_benchmark_profiles.json index 4e0a6e7f..e0bb1d97 100644 --- a/catalog/_benchmark_profiles.json +++ b/catalog/_benchmark_profiles.json @@ -42,10 +42,12 @@ "targets": [ { "machine": "m4-max", + "display": "Apple M4 Max", "backends": ["cpu","metal"] }, { "machine": "ryzen-4750u", + "display": "AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR)", "backends": ["cpu","vulkan"], "cooldown_tctl_c": 55.0 } diff --git a/catalog/_schema.json b/catalog/_schema.json index b5632944..b33c52cc 100644 --- a/catalog/_schema.json +++ b/catalog/_schema.json @@ -31,10 +31,6 @@ "type": "integer", "description": "Exact parameter count, summed from GGUF tensor shapes." }, - "architecture_pattern": { - "type": ["string","null"], - "description": "One of the patterns in docs/porting/0-porting.md. Groups models for readers." - }, "license": { "type": "object", "additionalProperties": false, @@ -476,6 +472,10 @@ "type": ["string","null"], "format": "date" }, + "os": { + "type": "string", + "description": "Operating system string the bench driver recorded (machine.os), e.g. \"macOS 26.4.1\". Provenance for the doc footer; absent on rows ingested before it was carried." + }, "thermal_gated": { "type": ["boolean","null"], "description": "Whether the machine's thermal precondition was met before this block. Not cosmetic: the same parakeet-unified CPU cells measure 8.17x realtime gated and 5.51x ungated, a 48% difference that dwarfs most code changes." diff --git a/catalog/parakeet-unified-en-0.6b.json b/catalog/parakeet-unified-en-0.6b.json index e6433fcd..73dbb2b5 100644 --- a/catalog/parakeet-unified-en-0.6b.json +++ b/catalog/parakeet-unified-en-0.6b.json @@ -79,6 +79,5 @@ {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":844.0,"xrt_compute":13.03,"load_ms":599.8,"mel_ms":20.0,"encode_ms":435.6,"decode_ms":388.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":847.6,"xrt_wall":12.98}, {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3026.6,"xrt_compute":11.67,"load_ms":393.1,"mel_ms":67.0,"encode_ms":1141.2,"decode_ms":1818.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":3032.5,"xrt_wall":11.65}, {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":834.9,"xrt_compute":13.18,"load_ms":677.6,"mel_ms":22.5,"encode_ms":419.3,"decode_ms":393.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":838.8,"xrt_wall":13.11} - ], - "architecture_pattern": "encoder-transducer" + ] } diff --git a/catalog/whisper-large-v3-turbo.json b/catalog/whisper-large-v3-turbo.json index d14dd114..ad441750 100644 --- a/catalog/whisper-large-v3-turbo.json +++ b/catalog/whisper-large-v3-turbo.json @@ -155,7 +155,6 @@ {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":10160.7,"xrt_compute":3.48,"load_ms":555.3,"mel_ms":44.3,"encode_ms":4395.9,"decode_ms":5720.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":10161.1,"xrt_wall":3.48}, {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4773.2,"xrt_compute":2.31,"load_ms":547.3,"mel_ms":39.4,"encode_ms":4365.9,"decode_ms":367.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4773.4,"xrt_wall":2.3} ], - "architecture_pattern": "encoder-decoder-cross-attention", "language_aliases": { "tl": "fil", "no": "nb", diff --git a/docs/models/canary-180m-flash.md b/docs/models/canary-180m-flash.md index 33f42656..3544c14a 100644 --- a/docs/models/canary-180m-flash.md +++ b/docs/models/canary-180m-flash.md @@ -102,47 +102,40 @@ CLI flags specific to canary: ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with -speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 -decimal places). - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | | Metal | jfk (11.0s) | 71.1 ms (154.72×) | 66.6 ms (165.21×) | | Metal | dots (35.3s) | 276.6 ms (127.73×) | 253.3 ms (139.48×) | | CPU | jfk (11.0s) | 136.5 ms (80.57×) | 123.4 ms (89.14×) | | CPU | dots (35.3s) | 520.5 ms (67.88×) | 481.0 ms (73.46×) | - -macOS 26.4.1, transcribe.cpp `19b3b87`. +Apple M4 Max: transcribe.cpp `0f42b37` on 2026-05-08; transcribe.cpp `19b3b87` on 2026-05-08. + ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | | Vulkan | jfk (11.0s) | 312.6 ms (35.19×) | 292.8 ms (37.57×) | | Vulkan | dots (35.3s) | 1.22 s (29.02×) | 1.09 s (32.32×) | | CPU | jfk (11.0s) | 452.7 ms (24.30×) | 369.0 ms (29.81×) | | CPU | dots (35.3s) | 1.91 s (18.48×) | 1.62 s (21.75×) | - -Fedora Linux 43, transcribe.cpp `4d44530`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `0f42b37` on 2026-05-08; transcribe.cpp `4d44530` on 2026-05-08. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models canary-180m-flash \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name canary-180m-flash-publication +uv run scripts/bench/run.py --profile --models canary-180m-flash ``` ## Numerical Validation diff --git a/docs/models/canary-1b-flash.md b/docs/models/canary-1b-flash.md index e7fc2dcf..075f21d2 100644 --- a/docs/models/canary-1b-flash.md +++ b/docs/models/canary-1b-flash.md @@ -95,47 +95,40 @@ CLI flags specific to canary: ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with -speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 -decimal places). - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | | Metal | jfk (11.0s) | 104.2 ms (105.60×) | 108.9 ms (100.97×) | | Metal | dots (35.3s) | 365.6 ms (96.65×) | 346.2 ms (102.06×) | | CPU | jfk (11.0s) | 517.2 ms (21.27×) | 429.0 ms (25.64×) | | CPU | dots (35.3s) | 1.79 s (19.72×) | 1.51 s (23.43×) | - -macOS 26.4.1, transcribe.cpp `19b3b87`. +Apple M4 Max: transcribe.cpp `0f42b37` on 2026-05-08; transcribe.cpp `19b3b87` on 2026-05-08. + ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | | Vulkan | jfk (11.0s) | 758.1 ms (14.51×) | 698.9 ms (15.74×) | | Vulkan | dots (35.3s) | 2.45 s (14.39×) | 2.30 s (15.33×) | | CPU | jfk (11.0s) | 1.49 s (7.40×) | 1.13 s (9.73×) | | CPU | dots (35.3s) | 5.48 s (6.45×) | 4.50 s (7.85×) | - -Fedora Linux 43, transcribe.cpp `4d44530`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `0f42b37` on 2026-05-08; transcribe.cpp `4d44530` on 2026-05-08. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models canary-1b-flash \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name canary-1b-flash-publication +uv run scripts/bench/run.py --profile --models canary-1b-flash ``` ## Numerical Validation diff --git a/docs/models/canary-1b-v2.md b/docs/models/canary-1b-v2.md index 3da89543..7d9f98b8 100644 --- a/docs/models/canary-1b-v2.md +++ b/docs/models/canary-1b-v2.md @@ -138,47 +138,40 @@ CLI flags specific to canary: ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with -speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 -decimal places). - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | | Metal | jfk (11.0s) | 121.9 ms (90.22×) | 119.1 ms (92.34×) | | Metal | dots (35.3s) | 427.9 ms (82.57×) | 403.1 ms (87.65×) | | CPU | jfk (11.0s) | 553.9 ms (19.86×) | 452.5 ms (24.31×) | | CPU | dots (35.3s) | 1.96 s (18.01×) | 1.66 s (21.35×) | - -macOS 26.4.1, transcribe.cpp `19b3b87`. +Apple M4 Max: transcribe.cpp `0f42b37` on 2026-05-08; transcribe.cpp `abb6506` on 2026-05-08. + ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | | Vulkan | jfk (11.0s) | 824.7 ms (13.34×) | 743.7 ms (14.79×) | | Vulkan | dots (35.3s) | 2.69 s (13.13×) | 2.45 s (14.40×) | | CPU | jfk (11.0s) | 1.55 s (7.09×) | 1.16 s (9.49×) | | CPU | dots (35.3s) | 5.74 s (6.16×) | 4.70 s (7.52×) | - -Fedora Linux 43, transcribe.cpp `4d44530`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `23c2ee6` on 2026-05-08; transcribe.cpp `4d44530` on 2026-05-08. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models canary-1b-v2 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name canary-1b-v2-publication +uv run scripts/bench/run.py --profile --models canary-1b-v2 ``` ## Numerical Validation diff --git a/docs/models/canary-1b.md b/docs/models/canary-1b.md index 006ab11d..76bfa26f 100644 --- a/docs/models/canary-1b.md +++ b/docs/models/canary-1b.md @@ -96,10 +96,6 @@ CLI flags specific to canary: ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with -speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 -decimal places). - The 24-layer decoder makes this the slowest canary variant for decode-bound workloads — roughly 1.5× the wall time of canary-1b-flash on the same backend, and the GPU win over CPU is smaller here than on the *flash @@ -110,40 +106,37 @@ overhead. ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | | Metal | jfk (11.0s) | 212.3 ms (51.81×) | 195.9 ms (56.14×) | | Metal | dots (35.3s) | 1.03 s (34.42×) | 931.4 ms (37.94×) | | CPU | jfk (11.0s) | 510.2 ms (21.56×) | 425.3 ms (25.87×) | | CPU | dots (35.3s) | 2.05 s (17.27×) | 1.71 s (20.61×) | - -macOS 26.4.1, transcribe.cpp `19b3b87`. +Apple M4 Max: transcribe.cpp `23c2ee6` on 2026-05-08; transcribe.cpp `19b3b87` on 2026-05-08. + ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | ----------------: | | Vulkan | jfk (11.0s) | 1.07 s (10.28×) | 918.6 ms (11.97×) | | Vulkan | dots (35.3s) | 4.62 s (7.65×) | 3.87 s (9.13×) | | CPU | jfk (11.0s) | 1.70 s (6.46×) | 1.23 s (8.92×) | | CPU | dots (35.3s) | 7.59 s (4.66×) | 5.96 s (5.92×) | - -Fedora Linux 43, transcribe.cpp `4d44530`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `23c2ee6` on 2026-05-08; transcribe.cpp `4d44530` on 2026-05-08. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models canary-1b \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name canary-1b-publication +uv run scripts/bench/run.py --profile --models canary-1b ``` ## Numerical Validation diff --git a/docs/models/canary-qwen-2.5b.md b/docs/models/canary-qwen-2.5b.md index 43f4de2a..f0ebd7e9 100644 --- a/docs/models/canary-qwen-2.5b.md +++ b/docs/models/canary-qwen-2.5b.md @@ -96,47 +96,40 @@ CLI flags: ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with -speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 -decimal places). - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | | Metal | jfk (11.0s) | 240.7 ms (45.71×) | 225.7 ms (48.73×) | | Metal | dots (35.3s) | 1.02 s (34.78×) | 903.3 ms (39.11×) | | CPU | jfk (11.0s) | 1.42 s (7.76×) | 1.06 s (10.40×) | | CPU | dots (35.3s) | 5.14 s (6.88×) | 4.00 s (8.84×) | - -macOS 26.4.1, transcribe.cpp `1b19945`. +Apple M4 Max: transcribe.cpp `1b19945` on 2026-05-17. + ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 2.39 s (4.60×) | 2.10 s (5.24×) | | Vulkan | dots (35.3s) | 9.70 s (3.64×) | 8.46 s (4.18×) | | CPU | jfk (11.0s) | 4.72 s (2.33×) | 3.42 s (3.22×) | | CPU | dots (35.3s) | 18.41 s (1.92×) | 13.49 s (2.62×) | - -Fedora Linux 43, transcribe.cpp `51db32d`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `51db32d` on 2026-05-16. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models canary-qwen-2.5b \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name canary-qwen-2.5b-publication +uv run scripts/bench/run.py --profile --models canary-qwen-2.5b ``` ## Numerical Validation diff --git a/docs/models/cohere-transcribe-03-2026.md b/docs/models/cohere-transcribe-03-2026.md index a35706a5..b49ff774 100644 --- a/docs/models/cohere-transcribe-03-2026.md +++ b/docs/models/cohere-transcribe-03-2026.md @@ -94,47 +94,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -----------: | -----------: | -| Metal | jfk (11.0s) | 150 ms (74×) | 154 ms (71×) | -| Metal | dots (35.3s) | 491 ms (72×) | 465 ms (76×) | -| CPU | jfk (11.0s) | 1.21 s (9×) | 1.05 s (11×) | -| CPU | dots (35.3s) | 4.13 s (9×) | 3.49 s (10×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ------------: | ------------: | +| Metal | jfk (11.0s) | 150 ms (74×)† | 154 ms (71×)† | +| Metal | dots (35.3s) | 491 ms (72×)† | 465 ms (76×)† | +| CPU | jfk (11.0s) | 1.21 s (9×)† | 1.05 s (11×)† | +| CPU | dots (35.3s) | 4.13 s (9×)† | 3.49 s (10×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | -------------: | -| Vulkan | jfk (11.0s) | 1.43 s (8×) | 1.33 s (8×) | -| Vulkan | dots (35.3s) | 4.25 s (8×) | 4.25 s (8×) | +| Vulkan | jfk (11.0s) | 1.43 s (8×)† | 1.33 s (8×)† | +| Vulkan | dots (35.3s) | 4.25 s (8×)† | 4.25 s (8×)† | | CPU | jfk (11.0s) | 3.57 s (3.08×) | 2.89 s (3.80×) | -| CPU | dots (35.3s) | 12.39 s (2.85×) | 10.08 s (4×) | - +| CPU | dots (35.3s) | 12.39 s (2.85×) | 10.08 s (4×)† | -Fedora 43, transcribe.cpp `2ab01b8`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `8345d95` on 2026-04-16. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models cohere-transcribe-03-2026 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name cohere-transcribe-03-2026-publication +uv run scripts/bench/run.py --profile --models cohere-transcribe-03-2026 ``` ## Numerical Validation diff --git a/docs/models/cohere-transcribe-arabic-07-2026.md b/docs/models/cohere-transcribe-arabic-07-2026.md index bb7c329b..f260175e 100644 --- a/docs/models/cohere-transcribe-arabic-07-2026.md +++ b/docs/models/cohere-transcribe-arabic-07-2026.md @@ -95,36 +95,35 @@ The tables below were measured on the same architecture with identical tensor shapes and quantization layout (only the weight values differ), so per-quant throughput carries over. -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -----------: | -----------: | -| Metal | jfk (11.0s) | 150 ms (74×) | 154 ms (71×) | -| Metal | dots (35.3s) | 491 ms (72×) | 465 ms (76×) | -| CPU | jfk (11.0s) | 1.21 s (9×) | 1.05 s (11×) | -| CPU | dots (35.3s) | 4.13 s (9×) | 3.49 s (10×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ------------: | ------------: | +| Metal | jfk (11.0s) | 150 ms (74×)† | 154 ms (71×)† | +| Metal | dots (35.3s) | 491 ms (72×)† | 465 ms (76×)† | +| CPU | jfk (11.0s) | 1.21 s (9×)† | 1.05 s (11×)† | +| CPU | dots (35.3s) | 4.13 s (9×)† | 3.49 s (10×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -----------: | -----------: | -| Vulkan | jfk (11.0s) | 1.43 s (8×) | 1.33 s (8×) | -| Vulkan | dots (35.3s) | 4.25 s (8×) | 4.25 s (8×) | -| CPU | jfk (11.0s) | 3.57 s (3×) | 2.90 s (4×) | -| CPU | dots (35.3s) | 12.40 s (3×) | 10.08 s (4×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ------------: | ------------: | +| Vulkan | jfk (11.0s) | 1.43 s (8×)† | 1.33 s (8×)† | +| Vulkan | dots (35.3s) | 4.25 s (8×)† | 4.25 s (8×)† | +| CPU | jfk (11.0s) | 3.57 s (3×)† | 2.90 s (4×)† | +| CPU | dots (35.3s) | 12.40 s (3×)† | 10.08 s (4×)† | -Fedora 43, transcribe.cpp `2ab01b8`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. + Benchmark reproduction (substitute this variant's slug): diff --git a/docs/models/diar_streaming_sortformer_4spk-v2.1.md b/docs/models/diar_streaming_sortformer_4spk-v2.1.md index ef750d38..d7ec179a 100644 --- a/docs/models/diar_streaming_sortformer_4spk-v2.1.md +++ b/docs/models/diar_streaming_sortformer_4spk-v2.1.md @@ -94,33 +94,25 @@ second (many small windows). ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Default (model-config) -operating point. - ### Apple M4 +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | F16 | Q8_0 | | ------- | ------------ | ---------------: | ---------------: | | Metal | jfk (11.0s) | 68 ms (161.23×) | 64 ms (172.42×) | | Metal | dots (35.3s) | 316 ms (111.81×) | 318 ms (111.16×) | | CPU | jfk (11.0s) | 136 ms (80.68×) | 109 ms (101.09×) | | CPU | dots (35.3s) | 794 ms (44.49×) | 685 ms (51.59×) | - -macOS 25.5.0, transcribe.cpp `d42c3bb`. +m4: transcribe.cpp `d42c3bb` on 2026-07-22. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models diar_streaming_sortformer_4spk-v2.1 \ - --quants f16,q8_0 \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name diar_streaming_sortformer_4spk-v2.1-publication +uv run scripts/bench/run.py --profile --models diar_streaming_sortformer_4spk-v2.1 ``` ## Numerical Validation diff --git a/docs/models/fun-asr-mlt-nano-2512.md b/docs/models/fun-asr-mlt-nano-2512.md index b9241f4b..0fb027e7 100644 --- a/docs/models/fun-asr-mlt-nano-2512.md +++ b/docs/models/fun-asr-mlt-nano-2512.md @@ -149,49 +149,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -----------: | -----------: | -| Metal | jfk (11.0s) | 156 ms (70×) | 144 ms (76×) | -| Metal | dots (35.3s) | 539 ms (66×) | 499 ms (71×) | -| CPU | jfk (11.0s) | 661 ms (17×) | 575 ms (19×) | -| CPU | dots (35.3s) | 2.36 s (15×) | 2.12 s (17×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `f094d28`. MLT is ~10–15% slower than -Fun-ASR-Nano on the same hardware; the gap is from per-step LLM -generation cost (different decoded transcript lengths between the two -variants). +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ------------: | ------------: | +| Metal | jfk (11.0s) | 156 ms (70×)† | 144 ms (76×)† | +| Metal | dots (35.3s) | 539 ms (66×)† | 499 ms (71×)† | +| CPU | jfk (11.0s) | 661 ms (17×)† | 575 ms (19×)† | +| CPU | dots (35.3s) | 2.36 s (15×)† | 2.12 s (17×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -------------: | --------------: | | Vulkan | jfk (11.0s) | 1.12 s (9.84×) | 1.00 s (10.98×) | | Vulkan | dots (35.3s) | 4.43 s (7.98×) | 3.86 s (9.15×) | | CPU | jfk (11.0s) | 2.31 s (4.75×) | 1.81 s (6.08×) | | CPU | dots (35.3s) | 8.48 s (4.17×) | 6.87 s (5.14×) | - -Fedora 43, transcribe.cpp `8635bd1`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `8635bd1` on 2026-05-07. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models Fun-ASR-MLT-Nano-2512 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name fun-asr-mlt-nano-2512-publication +uv run scripts/bench/run.py --profile --models fun-asr-mlt-nano-2512 ``` ## Numerical Validation diff --git a/docs/models/fun-asr-nano-2512.md b/docs/models/fun-asr-nano-2512.md index 951e393b..d310ea54 100644 --- a/docs/models/fun-asr-nano-2512.md +++ b/docs/models/fun-asr-nano-2512.md @@ -110,46 +110,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -----------: | -----------: | -| Metal | jfk (11.0s) | 134 ms (82×) | 129 ms (86×) | -| Metal | dots (35.3s) | 486 ms (73×) | 433 ms (82×) | -| CPU | jfk (11.0s) | 379 ms (29×) | 358 ms (31×) | -| CPU | dots (35.3s) | 1.40 s (25×) | 1.31 s (27×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `f094d28`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ------------: | ------------: | +| Metal | jfk (11.0s) | 134 ms (82×)† | 129 ms (86×)† | +| Metal | dots (35.3s) | 486 ms (73×)† | 433 ms (82×)† | +| CPU | jfk (11.0s) | 379 ms (29×)† | 358 ms (31×)† | +| CPU | dots (35.3s) | 1.40 s (25×)† | 1.31 s (27×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 864 ms (12.73×) | 801 ms (13.73×) | | Vulkan | dots (35.3s) | 3.69 s (9.57×) | 2.90 s (12.20×) | -| CPU | jfk (11.0s) | 1.48 s (7×) | 1.12 s (9.83×) | -| CPU | dots (35.3s) | 5.54 s (6×) | 4.42 s (7.99×) | - +| CPU | jfk (11.0s) | 1.48 s (7×)† | 1.12 s (9.83×) | +| CPU | dots (35.3s) | 5.54 s (6×)† | 4.42 s (7.99×) | -Fedora 43, transcribe.cpp `8635bd1`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `8635bd1` on 2026-05-07. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models Fun-ASR-Nano-2512 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name fun-asr-nano-2512-publication +uv run scripts/bench/run.py --profile --models fun-asr-nano-2512 ``` ## Numerical Validation diff --git a/docs/models/gigaam-v3-ctc.md b/docs/models/gigaam-v3-ctc.md index 7b9420fd..291e69f8 100644 --- a/docs/models/gigaam-v3-ctc.md +++ b/docs/models/gigaam-v3-ctc.md @@ -79,43 +79,36 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | -----------: | -----------: | -| Metal | ru (4.5s) | 31 ms (146×) | 32 ms (142×) | -| CPU | ru (4.5s) | 157 ms (29×) | 152 ms (30×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `ef55b52`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | ------------: | ------------: | +| Metal | ru (4.5s) | 31 ms (146×)† | 32 ms (142×)† | +| CPU | ru (4.5s) | 157 ms (29×)† | 152 ms (30×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | -----------: | -----------: | -| Vulkan | ru (4.5s) | 137 ms (33×) | 141 ms (32×) | -| CPU | ru (4.5s) | 488 ms (9×) | 383 ms (12×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | ------------: | ------------: | +| Vulkan | ru (4.5s) | 137 ms (33×)† | 141 ms (32×)† | +| CPU | ru (4.5s) | 488 ms (9×)† | 383 ms (12×)† | -Fedora Linux 43, transcribe.cpp `ef55b52`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models gigaam-v3-ctc,gigaam-v3-rnnt,gigaam-v3-e2e-ctc,gigaam-v3-e2e-rnnt \ - --quants q8_0,q4_k_m \ - --samples ru \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name gigaam-publication +uv run scripts/bench/run.py --profile --models gigaam-v3-ctc ``` ## Numerical Validation diff --git a/docs/models/gigaam-v3-e2e-ctc.md b/docs/models/gigaam-v3-e2e-ctc.md index 8158171e..61c80439 100644 --- a/docs/models/gigaam-v3-e2e-ctc.md +++ b/docs/models/gigaam-v3-e2e-ctc.md @@ -79,43 +79,36 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | -----------: | -----------: | -| Metal | ru (4.5s) | 40 ms (112×) | 40 ms (111×) | -| CPU | ru (4.5s) | 164 ms (27×) | 161 ms (28×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `ef55b52`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | ------------: | ------------: | +| Metal | ru (4.5s) | 40 ms (112×)† | 40 ms (111×)† | +| CPU | ru (4.5s) | 164 ms (27×)† | 161 ms (28×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | -----------: | -----------: | -| Vulkan | ru (4.5s) | 152 ms (30×) | 155 ms (29×) | -| CPU | ru (4.5s) | 494 ms (9×) | 397 ms (11×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | ------------: | ------------: | +| Vulkan | ru (4.5s) | 152 ms (30×)† | 155 ms (29×)† | +| CPU | ru (4.5s) | 494 ms (9×)† | 397 ms (11×)† | -Fedora Linux 43, transcribe.cpp `ef55b52`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models gigaam-v3-ctc,gigaam-v3-rnnt,gigaam-v3-e2e-ctc,gigaam-v3-e2e-rnnt \ - --quants q8_0,q4_k_m \ - --samples ru \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name gigaam-publication +uv run scripts/bench/run.py --profile --models gigaam-v3-e2e-ctc ``` ## Numerical Validation diff --git a/docs/models/gigaam-v3-e2e-rnnt.md b/docs/models/gigaam-v3-e2e-rnnt.md index aa423f90..c44d5bb5 100644 --- a/docs/models/gigaam-v3-e2e-rnnt.md +++ b/docs/models/gigaam-v3-e2e-rnnt.md @@ -79,43 +79,36 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | -----------: | -----------: | -| Metal | ru (4.5s) | 51 ms (88×) | 51 ms (89×) | -| CPU | ru (4.5s) | 177 ms (25×) | 172 ms (26×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `ef55b52`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | ------------: | ------------: | +| Metal | ru (4.5s) | 51 ms (88×)† | 51 ms (89×)† | +| CPU | ru (4.5s) | 177 ms (25×)† | 172 ms (26×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | -----------: | -----------: | -| Vulkan | ru (4.5s) | 202 ms (22×) | 205 ms (22×) | -| CPU | ru (4.5s) | 552 ms (8×) | 444 ms (10×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | ------------: | ------------: | +| Vulkan | ru (4.5s) | 202 ms (22×)† | 205 ms (22×)† | +| CPU | ru (4.5s) | 552 ms (8×)† | 444 ms (10×)† | -Fedora Linux 43, transcribe.cpp `ef55b52`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models gigaam-v3-ctc,gigaam-v3-rnnt,gigaam-v3-e2e-ctc,gigaam-v3-e2e-rnnt \ - --quants q8_0,q4_k_m \ - --samples ru \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name gigaam-publication +uv run scripts/bench/run.py --profile --models gigaam-v3-e2e-rnnt ``` ## Numerical Validation diff --git a/docs/models/gigaam-v3-rnnt.md b/docs/models/gigaam-v3-rnnt.md index 6cfe2b36..b19950e2 100644 --- a/docs/models/gigaam-v3-rnnt.md +++ b/docs/models/gigaam-v3-rnnt.md @@ -79,43 +79,36 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | -----------: | -----------: | -| Metal | ru (4.5s) | 41 ms (110×) | 43 ms (105×) | -| CPU | ru (4.5s) | 167 ms (27×) | 166 ms (27×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `ef55b52`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | ------------: | ------------: | +| Metal | ru (4.5s) | 41 ms (110×)† | 43 ms (105×)† | +| CPU | ru (4.5s) | 167 ms (27×)† | 166 ms (27×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | -----------: | -----------: | -| Vulkan | ru (4.5s) | 179 ms (25×) | 184 ms (25×) | -| CPU | ru (4.5s) | 511 ms (9×) | 420 ms (11×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | ------------: | ------------: | +| Vulkan | ru (4.5s) | 179 ms (25×)† | 184 ms (25×)† | +| CPU | ru (4.5s) | 511 ms (9×)† | 420 ms (11×)† | -Fedora Linux 43, transcribe.cpp `ef55b52`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models gigaam-v3-ctc,gigaam-v3-rnnt,gigaam-v3-e2e-ctc,gigaam-v3-e2e-rnnt \ - --quants q8_0,q4_k_m \ - --samples ru \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name gigaam-publication +uv run scripts/bench/run.py --profile --models gigaam-v3-rnnt ``` ## Numerical Validation diff --git a/docs/models/granite-4.0-1b-speech.md b/docs/models/granite-4.0-1b-speech.md index d2a9149e..c037a64f 100644 --- a/docs/models/granite-4.0-1b-speech.md +++ b/docs/models/granite-4.0-1b-speech.md @@ -94,37 +94,35 @@ build/bin/transcribe-cli \ ## Performance -Cells are compute latency (mel + encode + decode), with speedup over realtime in parentheses. - ### Apple M4 Max -Mean over 3 iterations after 1 warmup. - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | | Metal | jfk (11.0s) | 126 ms (86.92×) | 129 ms (85.41×) | | Metal | dots (35.3s) | 341 ms (103.69×) | 347 ms (101.77×) | | CPU | jfk (11.0s) | 1.55 s (7.08×) | 1.30 s (8.47×) | | CPU | dots (35.3s) | 4.81 s (7.34×) | 4.25 s (8.31×) | - -macOS 26.4, transcribe.cpp `de05c43`. +Apple M4 Max: transcribe.cpp `de05c43` on 2026-05-21. + ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) -Mean over 3 iterations after 1 warmup. - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 2.43 s (4.52×) | 2.45 s (4.49×) | | Vulkan | dots (35.3s) | 6.50 s (5.43×) | 6.61 s (5.35×) | | CPU | jfk (11.0s) | 5.27 s (2.09×) | 4.30 s (2.56×) | | CPU | dots (35.3s) | 17.39 s (2.03×) | 13.72 s (2.58×) | - -Linux 6.18 (Fedora 43), transcribe.cpp `dbe5814`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `dbe5814` on 2026-05-18. + ## Capabilities diff --git a/docs/models/granite-speech-4.1-2b-nar.md b/docs/models/granite-speech-4.1-2b-nar.md index 56ba1594..344ae44f 100644 --- a/docs/models/granite-speech-4.1-2b-nar.md +++ b/docs/models/granite-speech-4.1-2b-nar.md @@ -91,43 +91,35 @@ editor handles language detection implicitly. ## Performance -Cells are compute latency (mel + encode + decode), with speedup over realtime in parentheses. -NAR is faster than the AR variants on GPU backends because there is no -autoregressive step loop — a single bidirectional forward through 40 LLM -layers replaces the per-token decode graph. - ### Apple M4 Max -Mean over 3 iterations after 1 warmup. - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Metal | jfk (11.0s) | 151 ms (72.70×) | 163 ms (67.43×) | | Metal | dots (35.3s) | 491 ms (71.91×) | 518 ms (68.21×) | | CPU | jfk (11.0s) | 1.89 s (5.81×) | 1.78 s (6.17×) | | CPU | dots (35.3s) | 7.38 s (4.79×) | 6.21 s (5.69×) | - -macOS 26.4, transcribe.cpp `de05c43`. +Apple M4 Max: transcribe.cpp `de05c43` on 2026-05-21. + ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) -Mean over 3 iterations after 1 warmup. - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 2.68 s (4.10×) | 2.75 s (4.00×) | | Vulkan | dots (35.3s) | 8.32 s (4.25×) | 8.53 s (4.14×) | | CPU | jfk (11.0s) | 6.75 s (1.63×) | 5.46 s (2.01×) | | CPU | dots (35.3s) | 23.77 s (1.49×) | 19.55 s (1.81×) | - -Linux 6.18 (Fedora 43), transcribe.cpp `dbe5814`. NAR's Vulkan RTF stays -flat across short and long samples (jfk and dots both ~3.6×) because the -single bidirectional LLM pass dominates over the encoder; on CPU the -encoder dominates so RTF tapers slightly with sequence length. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `dbe5814` on 2026-05-18. + ## Capabilities diff --git a/docs/models/granite-speech-4.1-2b-plus.md b/docs/models/granite-speech-4.1-2b-plus.md index 8df3e512..2e788a75 100644 --- a/docs/models/granite-speech-4.1-2b-plus.md +++ b/docs/models/granite-speech-4.1-2b-plus.md @@ -123,37 +123,35 @@ words: 22 ## Performance -Cells are compute latency (mel + encode + decode), with speedup over realtime in parentheses. - ### Apple M4 Max -Mean over 3 iterations after 1 warmup. - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | --------------: | | Metal | jfk (11.0s) | 136 ms (80.88×) | 140 ms (78.83×) | | Metal | dots (35.3s) | 351 ms (100.61×) | 359 ms (98.49×) | | CPU | jfk (11.0s) | 1.77 s (6.21×) | 1.64 s (6.69×) | | CPU | dots (35.3s) | 5.49 s (6.44×) | 4.54 s (7.78×) | - -macOS 26.4, transcribe.cpp `de05c43`. +Apple M4 Max: transcribe.cpp `de05c43` on 2026-05-21. + ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) -Mean over 3 iterations after 1 warmup. - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 2.46 s (4.48×) | 2.50 s (4.40×) | | Vulkan | dots (35.3s) | 6.73 s (5.25×) | 6.83 s (5.17×) | | CPU | jfk (11.0s) | 6.20 s (1.77×) | 5.02 s (2.19×) | | CPU | dots (35.3s) | 18.19 s (1.94×) | 15.06 s (2.35×) | - -Linux 6.18 (Fedora 43), transcribe.cpp `dbe5814`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `dbe5814` on 2026-05-18. + ## Capabilities diff --git a/docs/models/granite-speech-4.1-2b.md b/docs/models/granite-speech-4.1-2b.md index 01e47122..827dcf30 100644 --- a/docs/models/granite-speech-4.1-2b.md +++ b/docs/models/granite-speech-4.1-2b.md @@ -96,37 +96,35 @@ build/bin/transcribe-cli \ ## Performance -Cells are compute latency (mel + encode + decode), with speedup over realtime in parentheses. - ### Apple M4 Max -Mean over 3 iterations after 1 warmup. - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | | Metal | jfk (11.0s) | 127 ms (86.64×) | 130 ms (84.90×) | | Metal | dots (35.3s) | 343 ms (103.09×) | 349 ms (101.11×) | | CPU | jfk (11.0s) | 1.58 s (6.97×) | 1.45 s (7.58×) | | CPU | dots (35.3s) | 4.89 s (7.22×) | 4.44 s (7.95×) | - -macOS 26.4, transcribe.cpp `de05c43`. +Apple M4 Max: transcribe.cpp `de05c43` on 2026-05-21. + ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) -Mean over 3 iterations after 1 warmup. - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 2.41 s (4.56×) | 2.44 s (4.51×) | | Vulkan | dots (35.3s) | 6.52 s (5.42×) | 6.61 s (5.34×) | | CPU | jfk (11.0s) | 5.55 s (1.98×) | 4.55 s (2.42×) | | CPU | dots (35.3s) | 17.56 s (2.01×) | 14.51 s (2.43×) | - -Linux 6.18 (Fedora 43), transcribe.cpp `dbe5814`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `dbe5814` on 2026-05-18. + ## Capabilities diff --git a/docs/models/medasr.md b/docs/models/medasr.md index 344046ea..225ff335 100644 --- a/docs/models/medasr.md +++ b/docs/models/medasr.md @@ -69,40 +69,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -----------: | -----------: | -| Metal | jfk (11.0s) | 38 ms (290×) | 44 ms (248×) | -| Metal | dots (35.3s) | 84 ms (419×) | 90 ms (394×) | -| CPU | jfk (11.0s) | 161 ms (68×) | 180 ms (61×) | -| CPU | dots (35.3s) | 558 ms (63×) | 623 ms (57×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.5, transcribe.cpp `8139a4b`. Metal device: `Apple M4 Max`. Mel pipeline uses the shared `MelFrontend` (Accelerate vDSP fp64 FFT + cblas_sgemm); encoder is the conformer + RoPE + BatchNorm-conv graph in `src/arch/medasr/encoder.cpp`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ------------: | ------------: | +| Metal | jfk (11.0s) | 38 ms (290×)† | 44 ms (248×)† | +| Metal | dots (35.3s) | 84 ms (419×)† | 90 ms (394×)† | +| CPU | jfk (11.0s) | 161 ms (68×)† | 180 ms (61×)† | +| CPU | dots (35.3s) | 558 ms (63×)† | 623 ms (57×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 161 ms (68.17×) | 173 ms (63.63×) | | Vulkan | dots (35.3s) | 479 ms (73.76×) | 493 ms (71.61×) | | CPU | jfk (11.0s) | 542 ms (20.30×) | 488 ms (22.56×) | | CPU | dots (35.3s) | 1.84 s (19.21×) | 1.63 s (21.73×) | - -Fedora 43, transcribe.cpp `79d139a`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `79d139a` on 2026-06-04. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models medasr --quants q8_0,q4_k_m --samples jfk,dots \ - --backends metal,cpu,vulkan --iters 3 --warmup 1 --name medasr-publication +uv run scripts/bench/run.py --profile --models medasr ``` ## Numerical Validation diff --git a/docs/models/moonshine-base.md b/docs/models/moonshine-base.md index aa047519..2e59e9cb 100644 --- a/docs/models/moonshine-base.md +++ b/docs/models/moonshine-base.md @@ -78,47 +78,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 5 iterations after 2 warmups), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above -(2 decimal places). - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | -| Metal | jfk (11.0s) | 96 ms (115×) | -| Metal | dots (35.3s) | 811 ms (44×) | +| Metal | jfk (11.0s) | 96 ms (115×)† | +| Metal | dots (35.3s) | 811 ms (44×)† | | CPU | jfk (11.0s) | 96 ms (114.16×) | | CPU | dots (35.3s) | 719 ms (49.16×) | - -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +Apple M4 Max: transcribe.cpp `9824fdb` on 2026-05-06. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | -| Vulkan | jfk (11.0s) | 218 ms (50×) | -| Vulkan | dots (35.3s) | 1.85 s (19×) | +| Vulkan | jfk (11.0s) | 218 ms (50×)† | +| Vulkan | dots (35.3s) | 1.85 s (19×)† | | CPU | jfk (11.0s) | 331 ms (33.22×) | | CPU | dots (35.3s) | 3.17 s (11.15×) | - -Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `f243f34` on 2026-05-06. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models moonshine-base \ - --quants q8_0 \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 5 --warmup 2 \ - --name moonshine-publication +uv run scripts/bench/run.py --profile --models moonshine-base ``` ## Numerical Validation diff --git a/docs/models/moonshine-streaming-medium.md b/docs/models/moonshine-streaming-medium.md index 6cb8cb36..909c41b5 100644 --- a/docs/models/moonshine-streaming-medium.md +++ b/docs/models/moonshine-streaming-medium.md @@ -94,47 +94,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 5 iterations after 2 warmups), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above -(2 decimal places). - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | | Metal | jfk (11.0s) | 124 ms (88.69×) | | Metal | dots (35.3s) | 952 ms (37.11×) | | CPU | jfk (11.0s) | 281 ms (39.11×) | | CPU | dots (35.3s) | 1.11 s (31.93×) | - -macOS 26.4.1, transcribe.cpp `0d312ce`. +Apple M4 Max: transcribe.cpp `0d312ce` on 2026-05-06. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | | Vulkan | jfk (11.0s) | 570 ms (19.31×) | | Vulkan | dots (35.3s) | 4.01 s (8.80×) | | CPU | jfk (11.0s) | 1.07 s (10.32×) | -| CPU | dots (35.3s) | 6.50 s (5×) | - +| CPU | dots (35.3s) | 6.50 s (5×)† | -Fedora 43, transcribe.cpp `f243f34`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `f243f34` on 2026-05-06. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models moonshine-streaming-medium \ - --quants q8_0 \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 5 --warmup 2 \ - --name moonshine-streaming-publication +uv run scripts/bench/run.py --profile --models moonshine-streaming-medium ``` ## Numerical Validation diff --git a/docs/models/moonshine-streaming-small.md b/docs/models/moonshine-streaming-small.md index 456bf215..d4a09a9a 100644 --- a/docs/models/moonshine-streaming-small.md +++ b/docs/models/moonshine-streaming-small.md @@ -75,47 +75,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 5 iterations after 2 warmups), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above -(2 decimal places). - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | | Metal | jfk (11.0s) | 82 ms (133.58×) | | Metal | dots (35.3s) | 612 ms (57.69×) | | CPU | jfk (11.0s) | 174 ms (63.31×) | | CPU | dots (35.3s) | 699 ms (50.55×) | - -macOS 26.4.1, transcribe.cpp `0d312ce`. +Apple M4 Max: transcribe.cpp `0d312ce` on 2026-05-06. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | | Vulkan | jfk (11.0s) | 349 ms (31.53×) | | Vulkan | dots (35.3s) | 2.38 s (14.84×) | | CPU | jfk (11.0s) | 735 ms (14.97×) | | CPU | dots (35.3s) | 4.00 s (8.83×) | - -Fedora 43, transcribe.cpp `f243f34`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `f243f34` on 2026-05-06. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models moonshine-streaming-small \ - --quants q8_0 \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 5 --warmup 2 \ - --name moonshine-streaming-publication +uv run scripts/bench/run.py --profile --models moonshine-streaming-small ``` ## Numerical Validation diff --git a/docs/models/moonshine-streaming-tiny.md b/docs/models/moonshine-streaming-tiny.md index 7152b195..d2f9e456 100644 --- a/docs/models/moonshine-streaming-tiny.md +++ b/docs/models/moonshine-streaming-tiny.md @@ -94,47 +94,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 5 iterations after 2 warmups), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above -(2 decimal places). - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | | ------- | ------------ | ---------------: | | Metal | jfk (11.0s) | 50 ms (218.46×) | | Metal | dots (35.3s) | 355 ms (99.53×) | | CPU | jfk (11.0s) | 44 ms (249.57×) | | CPU | dots (35.3s) | 206 ms (171.94×) | - -macOS 26.4.1, transcribe.cpp `0d312ce`. +Apple M4 Max: transcribe.cpp `0d312ce` on 2026-05-06. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | | Vulkan | jfk (11.0s) | 139 ms (78.88×) | | Vulkan | dots (35.3s) | 892 ms (39.61×) | | CPU | jfk (11.0s) | 160 ms (68.67×) | | CPU | dots (35.3s) | 882 ms (40.08×) | - -Fedora 43, transcribe.cpp `f243f34`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `f243f34` on 2026-05-06. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models moonshine-streaming-tiny \ - --quants q8_0 \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 5 --warmup 2 \ - --name moonshine-streaming-publication +uv run scripts/bench/run.py --profile --models moonshine-streaming-tiny ``` ## Numerical Validation diff --git a/docs/models/moonshine-tiny.md b/docs/models/moonshine-tiny.md index c602a56e..5d8e3e8e 100644 --- a/docs/models/moonshine-tiny.md +++ b/docs/models/moonshine-tiny.md @@ -75,47 +75,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 5 iterations after 2 warmups), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above -(2 decimal places). - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | | Metal | jfk (11.0s) | 59 ms (187.76×) | -| Metal | dots (35.3s) | 478 ms (74×) | +| Metal | dots (35.3s) | 478 ms (74×)† | | CPU | jfk (11.0s) | 52 ms (213.74×) | | CPU | dots (35.3s) | 378 ms (93.50×) | - -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +Apple M4 Max: transcribe.cpp `9824fdb` on 2026-05-06. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | | Vulkan | jfk (11.0s) | 147 ms (74.82×) | -| Vulkan | dots (35.3s) | 1.02 s (35×) | +| Vulkan | dots (35.3s) | 1.02 s (35×)† | | CPU | jfk (11.0s) | 163 ms (67.58×) | | CPU | dots (35.3s) | 1.53 s (23.12×) | - -Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `f243f34` on 2026-05-06. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models moonshine-tiny \ - --quants q8_0 \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 5 --warmup 2 \ - --name moonshine-publication +uv run scripts/bench/run.py --profile --models moonshine-tiny ``` ## Numerical Validation diff --git a/docs/models/moss-transcribe-diarize.md b/docs/models/moss-transcribe-diarize.md index 9aa3ba56..a24115d7 100644 --- a/docs/models/moss-transcribe-diarize.md +++ b/docs/models/moss-transcribe-diarize.md @@ -114,47 +114,40 @@ CLI flags: ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | -------------: | -| Metal | jfk (11.0s) | 388 ms (28.3×) | 369 ms (29.8×) | -| Metal | dots (35.3s) | 1.27 s (27.8×) | 1.17 s (30.1×) | -| CPU | jfk (11.0s) | 2.06 s (5.3×) | 2.37 s (4.6×) | -| CPU | dots (35.3s) | 5.71 s (6.2×) | 5.84 s (6×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.5.1, transcribe.cpp `e745720`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 388 ms (28.3×)† | 369 ms (29.8×)† | +| Metal | dots (35.3s) | 1.27 s (27.8×)† | 1.17 s (30.1×)† | +| CPU | jfk (11.0s) | 2.06 s (5.3×)† | 2.37 s (4.6×)† | +| CPU | dots (35.3s) | 5.71 s (6.2×)† | 5.84 s (6×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | -------------: | -| Vulkan | jfk (11.0s) | 3.88 s (2.8×) | 3.68 s (3×) | -| Vulkan | dots (35.3s) | 11.38 s (3.1×) | 10.68 s (3.3×) | -| CPU | jfk (11.0s) | 7.49 s (1.5×) | 7.06 s (1.6×) | -| CPU | dots (35.3s) | 21.20 s (1.7×) | 19.22 s (1.8×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 3.88 s (2.8×)† | 3.68 s (3×)† | +| Vulkan | dots (35.3s) | 11.38 s (3.1×)† | 10.68 s (3.3×)† | +| CPU | jfk (11.0s) | 7.49 s (1.5×)† | 7.06 s (1.6×)† | +| CPU | dots (35.3s) | 21.20 s (1.7×)† | 19.22 s (1.8×)† | -Fedora Linux 43, transcribe.cpp `e745720`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models moss-transcribe-diarize \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name moss-transcribe-diarize-publication +uv run scripts/bench/run.py --profile --models moss-transcribe-diarize ``` ## Numerical Validation diff --git a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md index 60127b63..700bd26c 100644 --- a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md +++ b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md @@ -138,47 +138,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | | Metal | jfk (11.0s) | 66 ms (167.17×) | 68 ms (162.41×) | | Metal | dots (35.3s) | 182 ms (194.69×) | 183 ms (192.82×) | | CPU | jfk (11.0s) | 309 ms (35.60×) | 306 ms (35.95×) | | CPU | dots (35.3s) | 1.05 s (33.68×) | 1.03 s (34.41×) | - -macOS 26.5.1, transcribe.cpp `c55a09d`. +Apple M4 Max: transcribe.cpp `c55a09d` on 2026-07-13. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 458 ms (23.99×) | 466 ms (23.58×) | | Vulkan | dots (35.3s) | 1.34 s (26.32×) | 1.38 s (25.63×) | | CPU | jfk (11.0s) | 750 ms (14.68×) | 814 ms (13.51×) | | CPU | dots (35.3s) | 2.99 s (11.81×) | 3.12 s (11.34×) | - -Fedora 43, transcribe.cpp `c55a09d`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `c55a09d` on 2026-07-13. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models multitalker-parakeet-streaming-0.6b-v1 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name multitalker-parakeet-streaming-0.6b-v1-publication +uv run scripts/bench/run.py --profile --models multitalker-parakeet-streaming-0.6b-v1 ``` ## Numerical Validation diff --git a/docs/models/nemotron-3.5-asr-streaming-0.6b.md b/docs/models/nemotron-3.5-asr-streaming-0.6b.md index a5de4d4a..b1b49ad6 100644 --- a/docs/models/nemotron-3.5-asr-streaming-0.6b.md +++ b/docs/models/nemotron-3.5-asr-streaming-0.6b.md @@ -128,10 +128,6 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. - The decoder runs through a reused ggml graph for the joint output projection (the 13k-vocab RNN-T joint that dominates this variant's decode) and a thread-parallel predictor; both are the default, so these @@ -140,41 +136,37 @@ are out-of-the-box numbers with no tuning. ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Metal | jfk (11.0s) | 112 ms (98.65×) | 112 ms (98.69×) | | Metal | dots (35.3s) | 359 ms (98.39×) | 366 ms (96.54×) | | CPU | jfk (11.0s) | 366 ms (30.07×) | 362 ms (30.42×) | | CPU | dots (35.3s) | 1.27 s (27.72×) | 1.25 s (28.31×) | - -macOS 26.5 (Darwin 25.5.0), transcribe.cpp `d9708f1`. Metal device: -Apple M4 Max (`MTLGPUFamilyApple9`). +Apple M4 Max: transcribe.cpp `d9708f1` on 2026-06-08. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 769 ms (14.31×) | 780 ms (14.11×) | | Vulkan | dots (35.3s) | 2.37 s (14.93×) | 2.37 s (14.92×) | | CPU | jfk (11.0s) | 1.36 s (8.06×) | 1.09 s (10.11×) | -| CPU | dots (35.3s) | 4.76 s (7×) | 4.17 s (8×) | - +| CPU | dots (35.3s) | 4.76 s (7×)† | 4.17 s (8×)† | -Fedora 43, transcribe.cpp `ef35659`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `ef35659` on 2026-06-08. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models nemotron-3.5-asr-streaming-0.6b \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name nemotron-3.5-asr-streaming-0.6b-publication +uv run scripts/bench/run.py --profile --models nemotron-3.5-asr-streaming-0.6b ``` ## Numerical Validation diff --git a/docs/models/nemotron-speech-streaming-en-0.6b.md b/docs/models/nemotron-speech-streaming-en-0.6b.md index ad1d900e..d1c01dcc 100644 --- a/docs/models/nemotron-speech-streaming-en-0.6b.md +++ b/docs/models/nemotron-speech-streaming-en-0.6b.md @@ -105,47 +105,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Metal | jfk (11.0s) | 73 ms (151×) | 73 ms (151×) | -| Metal | dots (35.3s) | 224 ms (158×) | 221 ms (160×) | +| Metal | jfk (11.0s) | 73 ms (151×)† | 73 ms (151×)† | +| Metal | dots (35.3s) | 224 ms (158×)† | 221 ms (160×)† | | CPU | jfk (11.0s) | 346 ms (31.77×) | 345 ms (31.89×) | | CPU | dots (35.3s) | 1.18 s (30.02×) | 1.16 s (30.52×) | - -macOS 26.4.1, transcribe.cpp `12f1076`. +Apple M4 Max: transcribe.cpp `c2e7bf9` on 2026-05-11. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 808 ms (13.61×) | 810 ms (13.59×) | | Vulkan | dots (35.3s) | 2.92 s (12.08×) | 2.98 s (11.87×) | | CPU | jfk (11.0s) | 1.39 s (7.94×) | 1.22 s (8.99×) | -| CPU | dots (35.3s) | 5.21 s (6.78×) | 4.76 s (7×) | - +| CPU | dots (35.3s) | 5.21 s (6.78×) | 4.76 s (7×)† | -Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models nemotron-speech-streaming-en-0.6b \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name nemotron-speech-streaming-en-0.6b-publication +uv run scripts/bench/run.py --profile --models nemotron-speech-streaming-en-0.6b ``` ## Numerical Validation diff --git a/docs/models/parakeet-ctc-0.6b.md b/docs/models/parakeet-ctc-0.6b.md index 4f590f58..559f0013 100644 --- a/docs/models/parakeet-ctc-0.6b.md +++ b/docs/models/parakeet-ctc-0.6b.md @@ -68,47 +68,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | | Metal | jfk (11.0s) | 56 ms (198.18×) | 57 ms (191.56×) | | Metal | dots (35.3s) | 141 ms (251.18×) | 142 ms (248.04×) | | CPU | jfk (11.0s) | 355 ms (30.98×) | 297 ms (37.07×) | | CPU | dots (35.3s) | 1.19 s (29.64×) | 999 ms (35.35×) | - -macOS 26.4.1, transcribe.cpp `a6c097e`. +Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 520 ms (21.14×) | 537 ms (20.47×) | | Vulkan | dots (35.3s) | 1.50 s (23.61×) | 1.50 s (23.58×) | | CPU | jfk (11.0s) | 1.07 s (10.29×) | 863 ms (12.74×) | | CPU | dots (35.3s) | 3.67 s (9.64×) | 3.14 s (11.25×) | - -Fedora 43, transcribe.cpp `57997dc`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `57997dc` on 2026-05-10. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models parakeet-ctc-0.6b \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name parakeet-ctc-0.6b-publication +uv run scripts/bench/run.py --profile --models parakeet-ctc-0.6b ``` ## Numerical Validation diff --git a/docs/models/parakeet-ctc-1.1b.md b/docs/models/parakeet-ctc-1.1b.md index b647ed01..c60f4193 100644 --- a/docs/models/parakeet-ctc-1.1b.md +++ b/docs/models/parakeet-ctc-1.1b.md @@ -68,47 +68,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | | Metal | jfk (11.0s) | 88 ms (125.48×) | 90 ms (121.85×) | | Metal | dots (35.3s) | 221 ms (160.02×) | 220 ms (160.38×) | | CPU | jfk (11.0s) | 601 ms (18.30×) | 500 ms (22.01×) | | CPU | dots (35.3s) | 2.04 s (17.30×) | 1.70 s (20.83×) | - -macOS 26.4.1, transcribe.cpp `a6c097e`. +Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 826 ms (13.32×) | 823 ms (13.37×) | | Vulkan | dots (35.3s) | 2.34 s (15.13×) | 2.33 s (15.19×) | | CPU | jfk (11.0s) | 1.75 s (6.27×) | 1.38 s (7.99×) | | CPU | dots (35.3s) | 6.08 s (5.81×) | 5.12 s (6.90×) | - -Fedora 43, transcribe.cpp `57997dc`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `57997dc` on 2026-05-10. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models parakeet-ctc-1.1b \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name parakeet-ctc-1.1b-publication +uv run scripts/bench/run.py --profile --models parakeet-ctc-1.1b ``` ## Numerical Validation diff --git a/docs/models/parakeet-rnnt-0.6b.md b/docs/models/parakeet-rnnt-0.6b.md index 82e524f9..c353eb64 100644 --- a/docs/models/parakeet-rnnt-0.6b.md +++ b/docs/models/parakeet-rnnt-0.6b.md @@ -70,47 +70,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 64 ms (173×) | 65 ms (170×) | -| Metal | dots (35.3s) | 178 ms (198×) | 181 ms (196×) | -| CPU | jfk (11.0s) | 360 ms (31×) | 302 ms (36×) | -| CPU | dots (35.3s) | 1.22 s (29×) | 1.03 s (34×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `12f1076`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | -------------: | +| Metal | jfk (11.0s) | 64 ms (173×)† | 65 ms (170×)† | +| Metal | dots (35.3s) | 178 ms (198×)† | 181 ms (196×)† | +| CPU | jfk (11.0s) | 360 ms (31×)† | 302 ms (36×)† | +| CPU | dots (35.3s) | 1.22 s (29×)† | 1.03 s (34×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 738 ms (14.90×) | 751 ms (14.65×) | | Vulkan | dots (35.3s) | 2.54 s (13.88×) | 2.59 s (13.67×) | | CPU | jfk (11.0s) | 1.24 s (8.86×) | 1.07 s (10.32×) | -| CPU | dots (35.3s) | 4.71 s (7×) | 4.14 s (9×) | - +| CPU | dots (35.3s) | 4.71 s (7×)† | 4.14 s (9×)† | -Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models parakeet-rnnt-0.6b \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name parakeet-rnnt-0.6b-publication +uv run scripts/bench/run.py --profile --models parakeet-rnnt-0.6b ``` ## Numerical Validation diff --git a/docs/models/parakeet-rnnt-1.1b.md b/docs/models/parakeet-rnnt-1.1b.md index 29246d0b..596d4ee0 100644 --- a/docs/models/parakeet-rnnt-1.1b.md +++ b/docs/models/parakeet-rnnt-1.1b.md @@ -68,47 +68,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | --------------: | -| Metal | jfk (11.0s) | 96 ms (114×) | 97 ms (114×) | -| Metal | dots (35.3s) | 258 ms (137×) | 265 ms (133×) | -| CPU | jfk (11.0s) | 606 ms (18×) | 506 ms (22×) | -| CPU | dots (35.3s) | 2.05 s (17×) | 1.86 s (19.01×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `12f1076`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | --------------: | +| Metal | jfk (11.0s) | 96 ms (114×)† | 97 ms (114×)† | +| Metal | dots (35.3s) | 258 ms (137×)† | 265 ms (133×)† | +| CPU | jfk (11.0s) | 606 ms (18×)† | 506 ms (22×)† | +| CPU | dots (35.3s) | 2.05 s (17×)† | 1.86 s (19.01×) | + +Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 1.01 s (10.85×) | 1.04 s (10.60×) | | Vulkan | dots (35.3s) | 3.34 s (10.58×) | 3.30 s (10.70×) | | CPU | jfk (11.0s) | 1.93 s (5.70×) | 1.58 s (6.98×) | | CPU | dots (35.3s) | 7.12 s (4.96×) | 6.18 s (5.72×) | - -Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models parakeet-rnnt-1.1b \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name parakeet-rnnt-1.1b-publication +uv run scripts/bench/run.py --profile --models parakeet-rnnt-1.1b ``` ## Numerical Validation diff --git a/docs/models/parakeet-tdt-0.6b-v2.md b/docs/models/parakeet-tdt-0.6b-v2.md index f6e4a567..5beaa596 100644 --- a/docs/models/parakeet-tdt-0.6b-v2.md +++ b/docs/models/parakeet-tdt-0.6b-v2.md @@ -70,47 +70,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 68 ms (163×) | 67 ms (163×) | -| Metal | dots (35.3s) | 189 ms (187×) | 193 ms (183×) | -| CPU | jfk (11.0s) | 371 ms (30×) | 312 ms (35×) | -| CPU | dots (35.3s) | 1.26 s (28×) | 1.07 s (33×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `12f1076`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | -------------: | +| Metal | jfk (11.0s) | 68 ms (163×)† | 67 ms (163×)† | +| Metal | dots (35.3s) | 189 ms (187×)† | 193 ms (183×)† | +| CPU | jfk (11.0s) | 371 ms (30×)† | 312 ms (35×)† | +| CPU | dots (35.3s) | 1.26 s (28×)† | 1.07 s (33×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 670 ms (16.42×) | 682 ms (16.13×) | | Vulkan | dots (35.3s) | 2.45 s (14.44×) | 2.44 s (14.51×) | | CPU | jfk (11.0s) | 1.23 s (8.97×) | 1.05 s (10.51×) | -| CPU | dots (35.3s) | 4.75 s (7×) | 4.14 s (9×) | - +| CPU | dots (35.3s) | 4.75 s (7×)† | 4.14 s (9×)† | -Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models parakeet-tdt-0.6b-v2 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name parakeet-tdt-0.6b-v2-publication +uv run scripts/bench/run.py --profile --models parakeet-tdt-0.6b-v2 ``` ## Numerical Validation diff --git a/docs/models/parakeet-tdt-0.6b-v3.md b/docs/models/parakeet-tdt-0.6b-v3.md index e81c4dcc..806a2d62 100644 --- a/docs/models/parakeet-tdt-0.6b-v3.md +++ b/docs/models/parakeet-tdt-0.6b-v3.md @@ -96,47 +96,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | | Metal | jfk (11.0s) | 74 ms (149.59×) | 75 ms (146.35×) | | Metal | dots (35.3s) | 224 ms (157.78×) | 224 ms (157.68×) | -| CPU | jfk (11.0s) | 386 ms (28.53×) | 323 ms (34×) | -| CPU | dots (35.3s) | 1.31 s (26.98×) | 1.11 s (32×) | - +| CPU | jfk (11.0s) | 386 ms (28.53×) | 323 ms (34×)† | +| CPU | dots (35.3s) | 1.31 s (26.98×) | 1.11 s (32×)† | -macOS 26.4.1, transcribe.cpp `12f1076`. +Apple M4 Max: transcribe.cpp `140ed3a` on 2026-04-16. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 854 ms (12.88×) | 864 ms (12.72×) | | Vulkan | dots (35.3s) | 3.06 s (11.54×) | 3.10 s (11.42×) | | CPU | jfk (11.0s) | 1.41 s (7.80×) | 1.22 s (9.01×) | -| CPU | dots (35.3s) | 5.34 s (7×) | 4.78 s (7×) | - +| CPU | dots (35.3s) | 5.34 s (7×)† | 4.78 s (7×)† | -Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models parakeet-tdt-0.6b-v3 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name parakeet-tdt-0.6b-v3-publication +uv run scripts/bench/run.py --profile --models parakeet-tdt-0.6b-v3 ``` ## Numerical Validation diff --git a/docs/models/parakeet-tdt-1.1b.md b/docs/models/parakeet-tdt-1.1b.md index 4467b4dc..abc546ab 100644 --- a/docs/models/parakeet-tdt-1.1b.md +++ b/docs/models/parakeet-tdt-1.1b.md @@ -69,47 +69,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | | Metal | jfk (11.0s) | 94 ms (116.36×) | 97 ms (113.42×) | | Metal | dots (35.3s) | 255 ms (138.52×) | 254 ms (139.09×) | -| CPU | jfk (11.0s) | 608 ms (18×) | 505 ms (22×) | -| CPU | dots (35.3s) | 2.04 s (17×) | 1.73 s (20×) | - +| CPU | jfk (11.0s) | 608 ms (18×)† | 505 ms (22×)† | +| CPU | dots (35.3s) | 2.04 s (17×)† | 1.73 s (20×)† | -macOS 26.4.1, transcribe.cpp `12f1076`. +Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 961 ms (11.45×) | 936 ms (11.75×) | | Vulkan | dots (35.3s) | 3.02 s (11.70×) | 2.99 s (11.80×) | -| CPU | jfk (11.0s) | 1.92 s (5.74×) | 1.49 s (7×) | +| CPU | jfk (11.0s) | 1.92 s (5.74×) | 1.49 s (7×)† | | CPU | dots (35.3s) | 6.81 s (5.19×) | 5.93 s (5.96×) | - -Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models parakeet-tdt-1.1b \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name parakeet-tdt-1.1b-publication +uv run scripts/bench/run.py --profile --models parakeet-tdt-1.1b ``` ## Numerical Validation diff --git a/docs/models/parakeet-tdt_ctc-1.1b.md b/docs/models/parakeet-tdt_ctc-1.1b.md index 079b9bb2..bb51da7e 100644 --- a/docs/models/parakeet-tdt_ctc-1.1b.md +++ b/docs/models/parakeet-tdt_ctc-1.1b.md @@ -67,47 +67,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | | Metal | jfk (11.0s) | 100 ms (109.76×) | 103 ms (106.82×) | -| Metal | dots (35.3s) | 256 ms (138×) | 269 ms (131.31×) | +| Metal | dots (35.3s) | 256 ms (138×)† | 269 ms (131.31×) | | CPU | jfk (11.0s) | 625 ms (17.60×) | 514 ms (21.41×) | -| CPU | dots (35.3s) | 1.87 s (19×) | 1.61 s (21.89×) | - +| CPU | dots (35.3s) | 1.87 s (19×)† | 1.61 s (21.89×) | -macOS 26.4.1, transcribe.cpp `12f1076`. +Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 973 ms (11.30×) | 988 ms (11.14×) | | Vulkan | dots (35.3s) | 3.13 s (11.29×) | 3.13 s (11.29×) | | CPU | jfk (11.0s) | 1.88 s (5.85×) | 1.53 s (7.18×) | -| CPU | dots (35.3s) | 6.54 s (5×) | 5.62 s (6.28×) | - +| CPU | dots (35.3s) | 6.54 s (5×)† | 5.62 s (6.28×) | -Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models parakeet-tdt_ctc-1.1b \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name parakeet-tdt_ctc-1.1b-publication +uv run scripts/bench/run.py --profile --models parakeet-tdt_ctc-1.1b ``` ## Numerical Validation diff --git a/docs/models/parakeet-tdt_ctc-110m.md b/docs/models/parakeet-tdt_ctc-110m.md index 50e7b631..1b38b552 100644 --- a/docs/models/parakeet-tdt_ctc-110m.md +++ b/docs/models/parakeet-tdt_ctc-110m.md @@ -65,47 +65,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 34 ms (320.03×) | 35 ms (315×) | +| Metal | jfk (11.0s) | 34 ms (320.03×) | 35 ms (315×)† | | Metal | dots (35.3s) | 99 ms (358.29×) | 98 ms (360.02×) | | CPU | jfk (11.0s) | 94 ms (117.37×) | 88 ms (124.33×) | | CPU | dots (35.3s) | 325 ms (108.62×) | 311 ms (113.49×) | - -macOS 26.4.1, transcribe.cpp `12f1076`. +Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 315 ms (34.94×) | 322 ms (34.22×) | | Vulkan | dots (35.3s) | 1.18 s (30.00×) | 1.19 s (29.59×) | | CPU | jfk (11.0s) | 420 ms (26.16×) | 394 ms (27.89×) | | CPU | dots (35.3s) | 1.70 s (20.76×) | 1.64 s (21.53×) | - -Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models parakeet-tdt_ctc-110m \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name parakeet-tdt_ctc-110m-publication +uv run scripts/bench/run.py --profile --models parakeet-tdt_ctc-110m ``` ## Numerical Validation diff --git a/docs/models/parakeet-unified-en-0.6b.md b/docs/models/parakeet-unified-en-0.6b.md index 082cde46..0ae1bec9 100644 --- a/docs/models/parakeet-unified-en-0.6b.md +++ b/docs/models/parakeet-unified-en-0.6b.md @@ -82,47 +82,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). Cells gated on `Tctl < 55°C` per backend. - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | | Metal | jfk (11.0s) | 69 ms (158.00×) | 71 ms (155.00×) | | Metal | dots (35.3s) | 210 ms (168.00×) | 209 ms (169.00×) | | CPU | jfk (11.0s) | 375 ms (29.00×) | 318 ms (35.00×) | | CPU | dots (35.3s) | 1.27 s (28.00×) | 1.09 s (32.00×) | - -macOS 26.4.1, transcribe.cpp `12f1076`. +Apple M4 Max: transcribe.cpp `12f1076`. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 835 ms (13.18×) | 844 ms (13.03×) | | Vulkan | dots (35.3s) | 3.03 s (11.67×) | 3.04 s (11.62×) | | CPU | jfk (11.0s) | 1.35 s (8.17×) | 1.18 s (9.33×) | | CPU | dots (35.3s) | 5.21 s (6.78×) | 4.66 s (7.58×) | - -Fedora 43, transcribe.cpp `12f1076`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models parakeet-unified-en-0.6b \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name parakeet-unified-en-0.6b-publication +uv run scripts/bench/run.py --profile --models parakeet-unified-en-0.6b ``` ## Numerical Validation diff --git a/docs/models/qwen3-asr-0.6b.md b/docs/models/qwen3-asr-0.6b.md index 334e4aef..299360cd 100644 --- a/docs/models/qwen3-asr-0.6b.md +++ b/docs/models/qwen3-asr-0.6b.md @@ -121,47 +121,40 @@ chat template is tracked as follow-up work; see the family note at ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -----------: | -----------: | -| Metal | jfk (11.0s) | 155 ms (71×) | 142 ms (77×) | -| Metal | dots (35.3s) | 597 ms (59×) | 527 ms (67×) | -| CPU | jfk (11.0s) | 660 ms (17×) | 588 ms (19×) | -| CPU | dots (35.3s) | 2.26 s (16×) | 2.10 s (17×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.3.1, transcribe.cpp `0c88a71`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ------------: | ------------: | +| Metal | jfk (11.0s) | 155 ms (71×)† | 142 ms (77×)† | +| Metal | dots (35.3s) | 597 ms (59×)† | 527 ms (67×)† | +| CPU | jfk (11.0s) | 660 ms (17×)† | 588 ms (19×)† | +| CPU | dots (35.3s) | 2.26 s (16×)† | 2.10 s (17×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -------------: | --------------: | | Vulkan | jfk (11.0s) | 1.27 s (8.66×) | 1.08 s (10.16×) | | Vulkan | dots (35.3s) | 4.87 s (7.26×) | 3.99 s (8.86×) | | CPU | jfk (11.0s) | 2.37 s (4.65×) | 1.92 s (5.73×) | | CPU | dots (35.3s) | 8.60 s (4.11×) | 7.34 s (4.82×) | - -Fedora 43, transcribe.cpp `3d16f74`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `3d16f74` on 2026-04-20. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models Qwen3-ASR-0.6B \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name qwen3-asr-0.6b-publication +uv run scripts/bench/run.py --profile --models qwen3-asr-0.6b ``` ## Numerical Validation diff --git a/docs/models/qwen3-asr-1.7b.md b/docs/models/qwen3-asr-1.7b.md index d9986e0d..de785977 100644 --- a/docs/models/qwen3-asr-1.7b.md +++ b/docs/models/qwen3-asr-1.7b.md @@ -113,47 +113,40 @@ the rationale and the planned follow-up. ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -----------: | -----------: | -| Metal | jfk (11.0s) | 256 ms (43×) | 213 ms (52×) | -| Metal | dots (35.3s) | 978 ms (36×) | 803 ms (44×) | -| CPU | jfk (11.0s) | 1.40 s (8×) | 1.10 s (10×) | -| CPU | dots (35.3s) | 4.46 s (8×) | 4.04 s (9×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.3.1, transcribe.cpp `0c88a71`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ------------: | ------------: | +| Metal | jfk (11.0s) | 256 ms (43×)† | 213 ms (52×)† | +| Metal | dots (35.3s) | 978 ms (36×)† | 803 ms (44×)† | +| CPU | jfk (11.0s) | 1.40 s (8×)† | 1.10 s (10×)† | +| CPU | dots (35.3s) | 4.46 s (8×)† | 4.04 s (9×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 2.66 s (4.13×) | 2.29 s (4.81×) | | Vulkan | dots (35.3s) | 9.87 s (3.58×) | 8.36 s (4.22×) | | CPU | jfk (11.0s) | 5.19 s (2.12×) | 3.57 s (3.08×) | | CPU | dots (35.3s) | 18.52 s (1.91×) | 12.93 s (2.73×) | - -Fedora 43, transcribe.cpp `3d16f74`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `3d16f74` on 2026-04-20. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models Qwen3-ASR-1.7B \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name qwen3-asr-1.7b-publication +uv run scripts/bench/run.py --profile --models qwen3-asr-1.7b ``` ## Numerical Validation diff --git a/docs/models/sensevoice-small.md b/docs/models/sensevoice-small.md index 9f62c5de..c6ce4a8f 100644 --- a/docs/models/sensevoice-small.md +++ b/docs/models/sensevoice-small.md @@ -118,46 +118,40 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), -with speedup over realtime in parentheses. Units: `ms` below 1 s, `s` -above (2 decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 42 ms (260×) | 44 ms (250×) | -| Metal | dots (35.3s) | 111 ms (319×) | 137 ms (258×) | -| CPU | jfk (11.0s) | 208 ms (53×) | 213 ms (52×) | -| CPU | dots (35.3s) | 700 ms (50×) | 727 ms (49×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `811fe2a`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | -------------: | +| Metal | jfk (11.0s) | 42 ms (260×)† | 44 ms (250×)† | +| Metal | dots (35.3s) | 111 ms (319×)† | 137 ms (258×)† | +| CPU | jfk (11.0s) | 208 ms (53×)† | 213 ms (52×)† | +| CPU | dots (35.3s) | 700 ms (50×)† | 727 ms (49×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 313 ms (35.18×) | 317 ms (34.74×) | | Vulkan | dots (35.3s) | 1.08 s (32.70×) | 1.10 s (32.25×) | | CPU | jfk (11.0s) | 678 ms (16.22×) | 582 ms (18.91×) | | CPU | dots (35.3s) | 2.28 s (15.49×) | 2.01 s (17.61×) | - -Fedora 43, transcribe.cpp `8635bd1`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `8635bd1` on 2026-05-07. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models SenseVoiceSmall \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name sensevoice-small-publication +uv run scripts/bench/run.py --profile --models sensevoice-small ``` ## Numerical Validation diff --git a/docs/models/voxtral-mini-3b-2507.md b/docs/models/voxtral-mini-3b-2507.md index f0ef9e86..d2fda48a 100644 --- a/docs/models/voxtral-mini-3b-2507.md +++ b/docs/models/voxtral-mini-3b-2507.md @@ -106,45 +106,40 @@ CLI flags: ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with -speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 -decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 727.3 ms (15.1×) | 656.8 ms (16.7×) | -| Metal | dots (35.3s) | 2.40 s (14.7×) | 1.90 s (18.6×) | -| CPU | jfk (11.0s) | 6.06 s (1.8×) | 6.76 s (1.6×) | -| CPU | dots (35.3s) | 16.60 s (2.1×) | 15.31 s (2.3×) | +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Metal | jfk (11.0s) | 727.3 ms (15.1×)† | 656.8 ms (16.7×)† | +| Metal | dots (35.3s) | 2.40 s (14.7×)† | 1.90 s (18.6×)† | +| CPU | jfk (11.0s) | 6.06 s (1.8×)† | 6.76 s (1.6×)† | +| CPU | dots (35.3s) | 16.60 s (2.1×)† | 15.31 s (2.3×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 9.57 s (1.15×) | 9.37 s (1.17×) | | Vulkan | dots (35.3s) | 26.49 s (1.33×) | 23.82 s (1.48×) | -| CPU | jfk (11.0s) | 26.15 s (0.4×) | 19.39 s (0.6×) | -| CPU | dots (35.3s) | 63.96 s (0.6×) | 45.92 s (0.77×) | - +| CPU | jfk (11.0s) | 26.15 s (0.4×)† | 19.39 s (0.6×)† | +| CPU | dots (35.3s) | 63.96 s (0.6×)† | 45.92 s (0.77×) | -Fedora Linux 43, transcribe.cpp `91af262`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `91af262` on 2026-06-05. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models Voxtral-Mini-3B-2507 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name voxtral-mini-3b-2507-publication +uv run scripts/bench/run.py --profile --models voxtral-mini-3b-2507 ``` ## Numerical Validation diff --git a/docs/models/voxtral-realtime.md b/docs/models/voxtral-realtime.md index f3fb0e0b..a7f53c37 100644 --- a/docs/models/voxtral-realtime.md +++ b/docs/models/voxtral-realtime.md @@ -90,48 +90,40 @@ CLI flags: ## Performance -Cells are compute latency (mel + encode + decode) (mean over 3 iterations after 1 warmup), with -speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 -decimal places). Measured on the offline path at the family-default `K=1` -speculative decoding. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | -------------: | -| Metal | jfk (11.0s) | 1.22 s (9×) | 1.14 s (9.7×) | -| Metal | dots (35.3s) | 4.34 s (8.1×) | 3.91 s (9×) | -| CPU | jfk (11.0s) | 4.43 s (2.5×) | 4.69 s (2.3×) | -| CPU | dots (35.3s) | 13.65 s (2.6×) | 13.12 s (2.7×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 1.22 s (9×)† | 1.14 s (9.7×)† | +| Metal | dots (35.3s) | 4.34 s (8.1×)† | 3.91 s (9×)† | +| CPU | jfk (11.0s) | 4.43 s (2.5×)† | 4.69 s (2.3×)† | +| CPU | dots (35.3s) | 13.65 s (2.6×)† | 13.12 s (2.7×)† | -macOS 15, transcribe.cpp `483c122`. Metal device: Apple M4 Max. +Apple M4 Max. † published before provenance was recorded; not yet re-measured. + ### AMD Ryzen 7 4750U Pro -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 12.62 s (0.87×) | 10.97 s (1×) | -| Vulkan | dots (35.3s) | 39.29 s (0.9×) | 33.51 s (1.05×) | -| CPU | jfk (11.0s) | 19.54 s (0.56×) | 13.80 s (0.8×) | -| CPU | dots (35.3s) | 58.00 s (0.61×) | 41.54 s (0.85×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -Fedora 43, transcribe.cpp `483c122`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Vulkan | jfk (11.0s) | 12.62 s (0.87×)† | 10.97 s (1×)† | +| Vulkan | dots (35.3s) | 39.29 s (0.9×)† | 33.51 s (1.05×)† | +| CPU | jfk (11.0s) | 19.54 s (0.56×)† | 13.80 s (0.8×)† | +| CPU | dots (35.3s) | 58.00 s (0.61×)† | 41.54 s (0.85×)† | + +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models Voxtral-Mini-4B-Realtime-2602 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu,vulkan \ - --iters 3 --warmup 1 \ - --name voxtral-mini-4b-realtime-2602-publication +uv run scripts/bench/run.py --profile --models voxtral-mini-4b-realtime-2602 ``` ## Speculative decoding diff --git a/docs/models/voxtral-small-24b-2507.md b/docs/models/voxtral-small-24b-2507.md index f2e7e7d3..2b9096a8 100644 --- a/docs/models/voxtral-small-24b-2507.md +++ b/docs/models/voxtral-small-24b-2507.md @@ -106,17 +106,17 @@ CLI flags: ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with -speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 -decimal places). - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | ------------: | -| Metal | jfk (11.0s) | 3.36 s (3.3×) | 2.62 s (4.2×) | -| Metal | dots (35.3s) | 11.20 s (3.2×) | 8.95 s (3.9×) | +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | -------------: | +| Metal | jfk (11.0s) | 3.36 s (3.3×)† | 2.62 s (4.2×)† | +| Metal | dots (35.3s) | 11.20 s (3.2×)† | 8.95 s (3.9×)† | + +Apple M4 Max. † published before provenance was recorded; not yet re-measured. A 24B is a GPU-class model; on Apple Silicon it runs at **~3–4× realtime** @@ -126,13 +126,7 @@ not benchmarked. transcribe.cpp `96adddb`. Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models Voxtral-Small-24B-2507 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal \ - --iters 3 --warmup 1 \ - --name voxtral-small-24b-2507-publication +uv run scripts/bench/run.py --profile --models voxtral-small-24b-2507 ``` ## Notes diff --git a/docs/models/whisper-base.en.md b/docs/models/whisper-base.en.md index 11bd3903..611c794f 100644 --- a/docs/models/whisper-base.en.md +++ b/docs/models/whisper-base.en.md @@ -64,60 +64,46 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with -speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 -decimal places). Decode latency dominates as model size grows; the encoder -is only run once per 30-second window. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 50.3 ms (218.9×) | 49.5 ms (222.3×) | -| Metal | dots (35.3s) | 172.4 ms (204.9×) | 161.4 ms (218.9×) | -| CPU | jfk (11.0s) | 352.4 ms (31.21×) | 325.6 ms (33.78×) | -| CPU | dots (35.3s) | 780.9 ms (45.25×) | 733.6 ms (48.16×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------------: | -----------------: | +| Metal | jfk (11.0s) | 50.3 ms (218.9×)† | 49.5 ms (222.3×)† | +| Metal | dots (35.3s) | 172.4 ms (204.9×)† | 161.4 ms (218.9×)† | +| CPU | jfk (11.0s) | 352.4 ms (31.21×) | 325.6 ms (33.78×) | +| CPU | dots (35.3s) | 780.9 ms (45.25×) | 733.6 ms (48.16×) | + +Apple M4 Max: transcribe.cpp `e6a8a27` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-base.en \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu \ - --iters 3 --warmup 1 \ - --name whisper-base.en-publication +uv run scripts/bench/run.py --profile --models whisper-base.en ``` ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 327 ms (33.6×) | 337 ms (32.7×) | -| Vulkan | dots (35.3s) | 909 ms (38.9×) | 912 ms (38.7×) | +| Vulkan | jfk (11.0s) | 327 ms (33.6×)† | 337 ms (32.7×)† | +| Vulkan | dots (35.3s) | 909 ms (38.9×)† | 912 ms (38.7×)† | | CPU | jfk (11.0s) | 1.01 s (10.85×) | 836 ms (13.16×) | | CPU | dots (35.3s) | 2.41 s (14.68×) | 2.19 s (16.15×) | - -Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-base.en \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends cpu,vulkan \ - --iters 3 --warmup 1 \ - --name whisper-base.en-publication +uv run scripts/bench/run.py --profile --models whisper-base.en ``` ## Numerical Validation diff --git a/docs/models/whisper-base.md b/docs/models/whisper-base.md index b54d3fd2..2cedd3a9 100644 --- a/docs/models/whisper-base.md +++ b/docs/models/whisper-base.md @@ -144,60 +144,46 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode, mean over the recorded -iterations after warmup), with speedup over realtime in parentheses. Units: -`ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as -model size grows; the encoder is only run once per 30-second window. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 52.1 ms (211×) | 53.6 ms (205.2×) | -| Metal | dots (35.3s) | 170.0 ms (207.8×) | 168.3 ms (209.9×) | -| CPU | jfk (11.0s) | 373.9 ms (29.42×) | 347.6 ms (31.65×) | -| CPU | dots (35.3s) | 806.1 ms (43.83×) | 750.3 ms (47.09×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------------: | -----------------: | +| Metal | jfk (11.0s) | 52.1 ms (211×)† | 53.6 ms (205.2×)† | +| Metal | dots (35.3s) | 170.0 ms (207.8×)† | 168.3 ms (209.9×)† | +| CPU | jfk (11.0s) | 373.9 ms (29.42×) | 347.6 ms (31.65×) | +| CPU | dots (35.3s) | 806.1 ms (43.83×) | 750.3 ms (47.09×) | + +Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-base \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu \ - --iters 3 --warmup 1 \ - --name whisper-base-publication +uv run scripts/bench/run.py --profile --models whisper-base ``` ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 351 ms (31.3×) | 356 ms (30.9×) | -| Vulkan | dots (35.3s) | 922 ms (38.3×) | 946 ms (37.4×) | +| Vulkan | jfk (11.0s) | 351 ms (31.3×)† | 356 ms (30.9×)† | +| Vulkan | dots (35.3s) | 922 ms (38.3×)† | 946 ms (37.4×)† | | CPU | jfk (11.0s) | 1.11 s (9.95×) | 913 ms (12.05×) | | CPU | dots (35.3s) | 2.54 s (13.92×) | 2.27 s (15.53×) | - -Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-base \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends cpu,vulkan \ - --iters 3 --warmup 1 \ - --name whisper-base-publication +uv run scripts/bench/run.py --profile --models whisper-base ``` ## Numerical Validation diff --git a/docs/models/whisper-large-v2.md b/docs/models/whisper-large-v2.md index a12d44d6..c2c70a82 100644 --- a/docs/models/whisper-large-v2.md +++ b/docs/models/whisper-large-v2.md @@ -107,60 +107,46 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode, mean over the recorded -iterations after warmup), with speedup over realtime in parentheses. Units: -`ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as -model size grows; the encoder is only run once per 30-second window. - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | | Metal | jfk (11.0s) | 493.1 ms (22.31×) | 499.6 ms (22.02×) | -| Metal | dots (35.3s) | 1.37 s (25.7×) | 1.40 s (25.22×) | +| Metal | dots (35.3s) | 1.37 s (25.7×)† | 1.40 s (25.22×) | | CPU | jfk (11.0s) | 9.66 s (1.14×) | 7.46 s (1.48×) | | CPU | dots (35.3s) | 19.72 s (1.79×) | 15.43 s (2.29×) | - -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-large-v2 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu \ - --iters 3 --warmup 1 \ - --name whisper-large-v2-publication +uv run scripts/bench/run.py --profile --models whisper-large-v2 ``` ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | --------------: | -| Vulkan | jfk (11.0s) | 6.27 s (1.75×) | 6.35 s (1.73×) | -| Vulkan | dots (35.3s) | 14.29 s (2.5×) | 13.68 s (2.6×) | -| CPU | jfk (11.0s) | 25.73 s (0.4×) | 19.46 s (0.6×) | -| CPU | dots (35.3s) | 53.75 s (0.7×) | 43.11 s (0.82×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 6.27 s (1.75×) | 6.35 s (1.73×) | +| Vulkan | dots (35.3s) | 14.29 s (2.5×)† | 13.68 s (2.6×)† | +| CPU | jfk (11.0s) | 25.73 s (0.4×)† | 19.46 s (0.6×)† | +| CPU | dots (35.3s) | 53.75 s (0.7×)† | 43.11 s (0.82×) | -Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-large-v2 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends cpu,vulkan \ - --iters 3 --warmup 1 \ - --name whisper-large-v2-publication +uv run scripts/bench/run.py --profile --models whisper-large-v2 ``` ## Numerical Validation diff --git a/docs/models/whisper-large-v3-turbo.md b/docs/models/whisper-large-v3-turbo.md index a5780d18..59ac070b 100644 --- a/docs/models/whisper-large-v3-turbo.md +++ b/docs/models/whisper-large-v3-turbo.md @@ -144,60 +144,46 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode, mean over the recorded -iterations after warmup), with speedup over realtime in parentheses. Units: -`ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as -model size grows; the encoder is only run once per 30-second window. - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | | Metal | jfk (11.0s) | 288.3 ms (38.16×) | 288.9 ms (38.07×) | | Metal | dots (35.3s) | 649.5 ms (54.40×) | 666.0 ms (53.05×) | | CPU | jfk (11.0s) | 7.60 s (1.45×) | 5.89 s (1.87×) | | CPU | dots (35.3s) | 15.34 s (2.30×) | 11.87 s (2.98×) | - -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28; transcribe.cpp `e0fa0f6`. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-large-v3-turbo \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu \ - --iters 3 --warmup 1 \ - --name whisper-large-v3-turbo-publication +uv run scripts/bench/run.py --profile --models whisper-large-v3-turbo ``` ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | | Vulkan | jfk (11.0s) | 4.77 s (2.31×) | 4.92 s (2.24×) | | Vulkan | dots (35.3s) | 10.16 s (3.48×) | 10.26 s (3.44×) | | CPU | jfk (11.0s) | 19.85 s (0.55×) | 15.74 s (0.70×) | | CPU | dots (35.3s) | 40.18 s (0.88×) | 32.22 s (1.10×) | - -Fedora 43, transcribe.cpp `2ab01b8`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `5fccd5d` on 2026-04-28. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-large-v3-turbo \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends cpu,vulkan \ - --iters 3 --warmup 1 \ - --name whisper-large-v3-turbo-publication +uv run scripts/bench/run.py --profile --models whisper-large-v3-turbo ``` ## Numerical Validation diff --git a/docs/models/whisper-large-v3.md b/docs/models/whisper-large-v3.md index 10344703..336c6bcd 100644 --- a/docs/models/whisper-large-v3.md +++ b/docs/models/whisper-large-v3.md @@ -144,60 +144,46 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode, mean over the recorded -iterations after warmup), with speedup over realtime in parentheses. Units: -`ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as -model size grows; the encoder is only run once per 30-second window. - ### Apple M4 Max +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | | Metal | jfk (11.0s) | 516.9 ms (21.28×) | 511.9 ms (21.49×) | -| Metal | dots (35.3s) | 1.38 s (25.7×) | 1.35 s (26.1×) | +| Metal | dots (35.3s) | 1.38 s (25.7×)† | 1.35 s (26.1×)† | | CPU | jfk (11.0s) | 9.68 s (1.14×) | 7.48 s (1.47×) | | CPU | dots (35.3s) | 19.86 s (1.78×) | 15.45 s (2.29×) | - -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-large-v3 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu \ - --iters 3 --warmup 1 \ - --name whisper-large-v3-publication +uv run scripts/bench/run.py --profile --models whisper-large-v3 ``` ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | --------------: | -| Vulkan | jfk (11.0s) | 6.40 s (1.72×) | 6.07 s (1.8×) | -| Vulkan | dots (35.3s) | 14.42 s (2.5×) | 13.75 s (2.6×) | -| CPU | jfk (11.0s) | 25.59 s (0.4×) | 19.96 s (0.6×) | -| CPU | dots (35.3s) | 53.80 s (0.7×) | 43.18 s (0.82×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 6.40 s (1.72×) | 6.07 s (1.8×)† | +| Vulkan | dots (35.3s) | 14.42 s (2.5×)† | 13.75 s (2.6×)† | +| CPU | jfk (11.0s) | 25.59 s (0.4×)† | 19.96 s (0.6×)† | +| CPU | dots (35.3s) | 53.80 s (0.7×)† | 43.18 s (0.82×) | -Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-large-v3 \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends cpu,vulkan \ - --iters 3 --warmup 1 \ - --name whisper-large-v3-publication +uv run scripts/bench/run.py --profile --models whisper-large-v3 ``` ## Numerical Validation diff --git a/docs/models/whisper-large.md b/docs/models/whisper-large.md index dd7a12e1..c0a8f11b 100644 --- a/docs/models/whisper-large.md +++ b/docs/models/whisper-large.md @@ -108,60 +108,46 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode, mean over the recorded -iterations after warmup), with speedup over realtime in parentheses. Units: -`ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as -model size grows; the encoder is only run once per 30-second window. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 476.5 ms (23.1×) | 465.1 ms (23.6×) | -| Metal | dots (35.3s) | 1.33 s (26.6×) | 1.26 s (28×) | -| CPU | jfk (11.0s) | 9.63 s (1.14×) | 7.43 s (1.48×) | -| CPU | dots (35.3s) | 19.88 s (1.78×) | 15.49 s (2.28×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Metal | jfk (11.0s) | 476.5 ms (23.1×)† | 465.1 ms (23.6×)† | +| Metal | dots (35.3s) | 1.33 s (26.6×)† | 1.26 s (28×)† | +| CPU | jfk (11.0s) | 9.63 s (1.14×) | 7.43 s (1.48×) | +| CPU | dots (35.3s) | 19.88 s (1.78×) | 15.49 s (2.28×) | + +Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-large \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu \ - --iters 3 --warmup 1 \ - --name whisper-large-publication +uv run scripts/bench/run.py --profile --models whisper-large ``` ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 6.27 s (1.75×) | 6.13 s (1.8×) | -| Vulkan | dots (35.3s) | 14.41 s (2.5×) | 13.72 s (2.6×) | -| CPU | jfk (11.0s) | 26.18 s (0.42×) | 19.83 s (0.6×) | -| CPU | dots (35.3s) | 55.64 s (0.6×) | 43.98 s (0.80×) | - +| Vulkan | jfk (11.0s) | 6.27 s (1.75×) | 6.13 s (1.8×)† | +| Vulkan | dots (35.3s) | 14.41 s (2.5×)† | 13.72 s (2.6×)† | +| CPU | jfk (11.0s) | 26.18 s (0.42×) | 19.83 s (0.6×)† | +| CPU | dots (35.3s) | 55.64 s (0.6×)† | 43.98 s (0.80×) | -Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-large \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends cpu,vulkan \ - --iters 3 --warmup 1 \ - --name whisper-large-publication +uv run scripts/bench/run.py --profile --models whisper-large ``` ## Numerical Validation diff --git a/docs/models/whisper-medium.en.md b/docs/models/whisper-medium.en.md index 584ee6ea..271bd352 100644 --- a/docs/models/whisper-medium.en.md +++ b/docs/models/whisper-medium.en.md @@ -64,60 +64,46 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode, mean over the recorded -iterations after warmup), with speedup over realtime in parentheses. Units: -`ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as -model size grows; the encoder is only run once per 30-second window. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 249.7 ms (44×) | 243.3 ms (45.2×) | -| Metal | dots (35.3s) | 762.9 ms (46.3×) | 725.9 ms (48.7×) | -| CPU | jfk (11.0s) | 4.29 s (2.56×) | 3.37 s (3.26×) | -| CPU | dots (35.3s) | 9.07 s (3.89×) | 7.23 s (4.89×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Metal | jfk (11.0s) | 249.7 ms (44×)† | 243.3 ms (45.2×)† | +| Metal | dots (35.3s) | 762.9 ms (46.3×)† | 725.9 ms (48.7×)† | +| CPU | jfk (11.0s) | 4.29 s (2.56×) | 3.37 s (3.26×) | +| CPU | dots (35.3s) | 9.07 s (3.89×) | 7.23 s (4.89×) | + +Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-medium.en \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu \ - --iters 3 --warmup 1 \ - --name whisper-medium.en-publication +uv run scripts/bench/run.py --profile --models whisper-medium.en ``` ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 2.88 s (3.82×) | 2.55 s (4.3×) | -| Vulkan | dots (35.3s) | 6.76 s (5.2×) | 6.44 s (5.5×) | +| Vulkan | jfk (11.0s) | 2.88 s (3.82×) | 2.55 s (4.3×)† | +| Vulkan | dots (35.3s) | 6.76 s (5.2×)† | 6.44 s (5.5×)† | | CPU | jfk (11.0s) | 11.53 s (0.95×) | 9.36 s (1.18×) | | CPU | dots (35.3s) | 26.63 s (1.33×) | 21.07 s (1.68×) | - -Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-medium.en \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends cpu,vulkan \ - --iters 3 --warmup 1 \ - --name whisper-medium.en-publication +uv run scripts/bench/run.py --profile --models whisper-medium.en ``` ## Numerical Validation diff --git a/docs/models/whisper-medium.md b/docs/models/whisper-medium.md index 66dcf737..37d6c6a8 100644 --- a/docs/models/whisper-medium.md +++ b/docs/models/whisper-medium.md @@ -144,60 +144,46 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with -speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 -decimal places). Decode latency dominates as model size grows; the encoder -is only run once per 30-second window. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 280.0 ms (39.3×) | 270.9 ms (40.6×) | -| Metal | dots (35.3s) | 802.5 ms (44×) | 759.2 ms (46.5×) | -| CPU | jfk (11.0s) | 4.75 s (2.32×) | 3.90 s (2.82×) | -| CPU | dots (35.3s) | 9.62 s (3.67×) | 7.93 s (4.46×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Metal | jfk (11.0s) | 280.0 ms (39.3×)† | 270.9 ms (40.6×)† | +| Metal | dots (35.3s) | 802.5 ms (44×)† | 759.2 ms (46.5×)† | +| CPU | jfk (11.0s) | 4.75 s (2.32×) | 3.90 s (2.82×) | +| CPU | dots (35.3s) | 9.62 s (3.67×) | 7.93 s (4.46×) | + +Apple M4 Max: transcribe.cpp `e6a8a27` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-medium \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu \ - --iters 3 --warmup 1 \ - --name whisper-medium-publication +uv run scripts/bench/run.py --profile --models whisper-medium ``` ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 3.00 s (3.7×) | 2.83 s (3.9×) | -| Vulkan | dots (35.3s) | 7.03 s (5×) | 6.77 s (5.2×) | +| Vulkan | jfk (11.0s) | 3.00 s (3.7×)† | 2.83 s (3.9×)† | +| Vulkan | dots (35.3s) | 7.03 s (5×)† | 6.77 s (5.2×)† | | CPU | jfk (11.0s) | 13.14 s (0.84×) | 10.47 s (1.05×) | | CPU | dots (35.3s) | 27.87 s (1.27×) | 22.57 s (1.56×) | - -Fedora 43, transcribe.cpp `2ab01b8`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `5fccd5d` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-medium \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends cpu,vulkan \ - --iters 3 --warmup 1 \ - --name whisper-medium-publication +uv run scripts/bench/run.py --profile --models whisper-medium ``` ## Numerical Validation diff --git a/docs/models/whisper-small.en.md b/docs/models/whisper-small.en.md index 376d00f4..e589f8e5 100644 --- a/docs/models/whisper-small.en.md +++ b/docs/models/whisper-small.en.md @@ -64,60 +64,46 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode, mean over the recorded -iterations after warmup), with speedup over realtime in parentheses. Units: -`ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as -model size grows; the encoder is only run once per 30-second window. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 107.1 ms (102.7×) | 102.6 ms (107.2×) | -| Metal | dots (35.3s) | 333.0 ms (106.1×) | 329.3 ms (107.3×) | -| CPU | jfk (11.0s) | 1.31 s (8.39×) | 1.13 s (9.76×) | -| CPU | dots (35.3s) | 2.89 s (12.23×) | 2.52 s (14.02×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------------: | -----------------: | +| Metal | jfk (11.0s) | 107.1 ms (102.7×)† | 102.6 ms (107.2×)† | +| Metal | dots (35.3s) | 333.0 ms (106.1×)† | 329.3 ms (107.3×)† | +| CPU | jfk (11.0s) | 1.31 s (8.39×) | 1.13 s (9.76×) | +| CPU | dots (35.3s) | 2.89 s (12.23×) | 2.52 s (14.02×) | + +Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-small.en \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu \ - --iters 3 --warmup 1 \ - --name whisper-small.en-publication +uv run scripts/bench/run.py --profile --models whisper-small.en ``` ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | -------------: | -| Vulkan | jfk (11.0s) | 970 ms (11.3×) | 883 ms (12.5×) | -| Vulkan | dots (35.3s) | 2.48 s (14.3×) | 2.36 s (15×) | -| CPU | jfk (11.0s) | 3.68 s (2.99×) | 2.95 s (3.73×) | -| CPU | dots (35.3s) | 8.38 s (4.21×) | 7.16 s (4.93×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 970 ms (11.3×)† | 883 ms (12.5×)† | +| Vulkan | dots (35.3s) | 2.48 s (14.3×)† | 2.36 s (15×)† | +| CPU | jfk (11.0s) | 3.68 s (2.99×) | 2.95 s (3.73×) | +| CPU | dots (35.3s) | 8.38 s (4.21×) | 7.16 s (4.93×) | -Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-small.en \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends cpu,vulkan \ - --iters 3 --warmup 1 \ - --name whisper-small.en-publication +uv run scripts/bench/run.py --profile --models whisper-small.en ``` ## Numerical Validation diff --git a/docs/models/whisper-small.md b/docs/models/whisper-small.md index 48a8456f..f25a9517 100644 --- a/docs/models/whisper-small.md +++ b/docs/models/whisper-small.md @@ -144,60 +144,46 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode, mean over the recorded -iterations after warmup), with speedup over realtime in parentheses. Units: -`ms` below 1 s, `s` above (2 decimal places). Decode latency dominates as -model size grows; the encoder is only run once per 30-second window. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 113.1 ms (97.2×) | 113.5 ms (96.9×) | -| Metal | dots (35.3s) | 349.3 ms (101.2×) | 340.0 ms (103.9×) | -| CPU | jfk (11.0s) | 1.43 s (7.71×) | 1.30 s (8.44×) | -| CPU | dots (35.3s) | 3.01 s (11.75×) | 2.74 s (12.91×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------------: | -----------------: | +| Metal | jfk (11.0s) | 113.1 ms (97.2×)† | 113.5 ms (96.9×)† | +| Metal | dots (35.3s) | 349.3 ms (101.2×)† | 340.0 ms (103.9×)† | +| CPU | jfk (11.0s) | 1.43 s (7.71×) | 1.30 s (8.44×) | +| CPU | dots (35.3s) | 3.01 s (11.75×) | 2.74 s (12.91×) | + +Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-small \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu \ - --iters 3 --warmup 1 \ - --name whisper-small-publication +uv run scripts/bench/run.py --profile --models whisper-small ``` ### AMD Ryzen 7 PRO 4750U -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | -------------: | -| Vulkan | jfk (11.0s) | 1.03 s (10.6×) | 960 ms (11.4×) | -| Vulkan | dots (35.3s) | 2.57 s (13.7×) | 2.47 s (14.3×) | -| CPU | jfk (11.0s) | 3.95 s (2.79×) | 3.27 s (3.37×) | -| CPU | dots (35.3s) | 8.91 s (3.97×) | 7.47 s (4.73×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 1.03 s (10.6×)† | 960 ms (11.4×)† | +| Vulkan | dots (35.3s) | 2.57 s (13.7×)† | 2.47 s (14.3×)† | +| CPU | jfk (11.0s) | 3.95 s (2.79×) | 3.27 s (3.37×) | +| CPU | dots (35.3s) | 8.91 s (3.97×) | 7.47 s (4.73×) | -Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-small \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends cpu,vulkan \ - --iters 3 --warmup 1 \ - --name whisper-small-publication +uv run scripts/bench/run.py --profile --models whisper-small ``` ## Numerical Validation diff --git a/docs/models/whisper-tiny.en.md b/docs/models/whisper-tiny.en.md index 838af5e2..e7d40734 100644 --- a/docs/models/whisper-tiny.en.md +++ b/docs/models/whisper-tiny.en.md @@ -64,60 +64,46 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with -speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 -decimal places). Decode latency dominates as model size grows; the encoder -is only run once per 30-second window. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 39.1 ms (281.2×) | 34.0 ms (323.8×) | -| Metal | dots (35.3s) | 127.0 ms (278.3×) | 125.8 ms (280.9×) | -| CPU | jfk (11.0s) | 165.0 ms (66.67×) | 161.4 ms (68.15×) | -| CPU | dots (35.3s) | 389.4 ms (90.74×) | 381.7 ms (92.55×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------------: | -----------------: | +| Metal | jfk (11.0s) | 39.1 ms (281.2×)† | 34.0 ms (323.8×)† | +| Metal | dots (35.3s) | 127.0 ms (278.3×)† | 125.8 ms (280.9×)† | +| CPU | jfk (11.0s) | 165.0 ms (66.67×) | 161.4 ms (68.15×) | +| CPU | dots (35.3s) | 389.4 ms (90.74×) | 381.7 ms (92.55×) | + +Apple M4 Max: transcribe.cpp `e6a8a27` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-tiny.en \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu \ - --iters 3 --warmup 1 \ - --name whisper-tiny.en-publication +uv run scripts/bench/run.py --profile --models whisper-tiny.en ``` ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 197 ms (56×) | 193 ms (56.9×) | -| Vulkan | dots (35.3s) | 540 ms (65.4×) | 541 ms (65.3×) | +| Vulkan | jfk (11.0s) | 197 ms (56×)† | 193 ms (56.9×)† | +| Vulkan | dots (35.3s) | 540 ms (65.4×)† | 541 ms (65.3×)† | | CPU | jfk (11.0s) | 493 ms (22.32×) | 436 ms (25.25×) | | CPU | dots (35.3s) | 1.19 s (29.77×) | 1.09 s (32.48×) | - -Fedora 43, transcribe.cpp `e0fa0f6`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-tiny.en \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends cpu,vulkan \ - --iters 3 --warmup 1 \ - --name whisper-tiny.en-publication +uv run scripts/bench/run.py --profile --models whisper-tiny.en ``` ## Numerical Validation diff --git a/docs/models/whisper-tiny.md b/docs/models/whisper-tiny.md index 5ea93c59..0976b85a 100644 --- a/docs/models/whisper-tiny.md +++ b/docs/models/whisper-tiny.md @@ -144,60 +144,46 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ## Performance -Cells are compute latency (mel + encode + decode; mean over 3 iterations after 1 warmup), with -speedup over realtime in parentheses. Units: `ms` below 1 s, `s` above (2 -decimal places). Decode latency dominates as model size grows; the encoder -is only run once per 30-second window. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 36.4 ms (302.5×) | 37.9 ms (290.1×) | -| Metal | dots (35.3s) | 117.1 ms (301.8×) | 117.3 ms (301.3×) | -| CPU | jfk (11.0s) | 174.7 ms (62.97×) | 169.7 ms (64.81×) | -| CPU | dots (35.3s) | 396.2 ms (89.17×) | 390.3 ms (90.52×) | - +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. -macOS 26.4.1, transcribe.cpp `e0fa0f6`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------------: | -----------------: | +| Metal | jfk (11.0s) | 36.4 ms (302.5×)† | 37.9 ms (290.1×)† | +| Metal | dots (35.3s) | 117.1 ms (301.8×)† | 117.3 ms (301.3×)† | +| CPU | jfk (11.0s) | 174.7 ms (62.97×) | 169.7 ms (64.81×) | +| CPU | dots (35.3s) | 396.2 ms (89.17×) | 390.3 ms (90.52×) | + +Apple M4 Max: transcribe.cpp `e6a8a27` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-tiny \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends metal,cpu \ - --iters 3 --warmup 1 \ - --name whisper-tiny-publication +uv run scripts/bench/run.py --profile --models whisper-tiny ``` ### AMD Ryzen 7 PRO 4750U +Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. + | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 200 ms (55.1×) | 209 ms (52.6×) | -| Vulkan | dots (35.3s) | 528 ms (66.9×) | 529 ms (66.8×) | +| Vulkan | jfk (11.0s) | 200 ms (55.1×)† | 209 ms (52.6×)† | +| Vulkan | dots (35.3s) | 528 ms (66.9×)† | 529 ms (66.8×)† | | CPU | jfk (11.0s) | 531 ms (20.73×) | 466 ms (23.59×) | | CPU | dots (35.3s) | 1.23 s (28.76×) | 1.14 s (31.01×) | - -Fedora 43, transcribe.cpp `2ab01b8`. Vulkan device: `AMD Radeon -Graphics (RADV RENOIR)`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `5fccd5d` on 2026-04-28. † published before provenance was recorded; not yet re-measured. + Benchmark reproduction: ```bash -uv run scripts/bench/run.py \ - --models whisper-tiny \ - --quants q8_0,q4_k_m \ - --samples jfk,dots \ - --backends cpu,vulkan \ - --iters 3 --warmup 1 \ - --name whisper-tiny-publication +uv run scripts/bench/run.py --profile --models whisper-tiny ``` ## Numerical Validation diff --git a/docs/models/whisper.md b/docs/models/whisper.md index 508e46f2..8ffd5371 100644 --- a/docs/models/whisper.md +++ b/docs/models/whisper.md @@ -43,9 +43,10 @@ default). See each per-variant doc for the full quant matrix (F32/F16/Q8_0/Q6_K/Q5_K_M/Q4_K_M) and a discussion of how our numbers compare to OpenAI's self-reported figures. Numbers come from single Metal-backed runs; Metal's non-deterministic parallel reductions add ~0.1pp run-to-run variance on the noise floor. - + | Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | | --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `breeze-asr-25` | 1.5B | 99 languages + auto-detect | 1.67 GB | LibriSpeech test-clean (WER) | 2.27% | translate, segment timestamps | [handy-computer/Breeze-ASR-25-gguf](https://huggingface.co/handy-computer/Breeze-ASR-25-gguf) | | `whisper-tiny` | 38M | 99 languages + auto-detect | 46 MB | LibriSpeech test-clean (WER) | 7.52% | translate, segment timestamps | [whisper-tiny.md](whisper-tiny.md) | | `whisper-tiny.en` | 38M | en | 46 MB | LibriSpeech test-clean (WER) | 5.72% | segment timestamps | [whisper-tiny.en.md](whisper-tiny.en.md) | | `whisper-base` | 73M | 99 languages + auto-detect | 85 MB | LibriSpeech test-clean (WER) | 5.12% | translate, segment timestamps | [whisper-base.md](whisper-base.md) | diff --git a/scripts/bench/run.py b/scripts/bench/run.py index 359291ee..85f3bae2 100755 --- a/scripts/bench/run.py +++ b/scripts/bench/run.py @@ -706,6 +706,36 @@ def parse_args() -> argparse.Namespace: return p.parse_args() +# What a report must carry to be ingested (scripts/catalog/ingest_perf.py) +# and compared (scripts/bench/compare.py). A gap here is a bench-harness +# regression, so the driver refuses to write the file rather than leave a +# report that looks complete and is not. +REQUIRED_TOP = ("schema", "timestamp", "machine", "git_sha", "variant", "backend", + "iters", "warmup", "runs") +REQUIRED_MACHINE = ("slug", "os") +REQUIRED_RUN = ("model_path", "sample_path", "sample_duration_s", "per_iter", + "summary", "rtf_wall_mean", "transcript_sha256") +REQUIRED_ITER = ("mel_ms", "encode_ms", "decode_ms", "total_ms", "wall_ms") + + +def report_gaps(report: dict) -> list[str]: + """Names of required fields the report lacks; empty when it is complete.""" + gaps = [key for key in REQUIRED_TOP if key not in report] + gaps += [f"machine.{key}" for key in REQUIRED_MACHINE + if key not in (report.get("machine") or {})] + for index, run in enumerate(report.get("runs") or []): + gaps += [f"runs[{index}].{key}" for key in REQUIRED_RUN if key not in run] + if not run.get("per_iter"): + gaps.append(f"runs[{index}].per_iter is empty") + for it_index, it in enumerate(run.get("per_iter") or []): + gaps += [f"runs[{index}].per_iter[{it_index}].{key}" + for key in REQUIRED_ITER if key not in it] + summary = run.get("summary") or {} + gaps += [f"runs[{index}].summary.{key}.mean" for key in ("total_ms", "wall_ms") + if (summary.get(key) or {}).get("mean") is None] + return gaps + + def _run_one_backend(backend: BackendSpec, by_variant: dict[str, list[Cell]], args: argparse.Namespace, repo: Path, machine: dict, @@ -777,6 +807,12 @@ def _run_one_backend(backend: BackendSpec, "warmup": args.warmup, "runs": runs, } + missing = report_gaps(aggregate) + if missing: + print(f"[{backend.name}][{variant}] refusing to write an incomplete " + f"report: {', '.join(missing)}", file=sys.stderr) + exit_code = 1 + continue out_path.write_text(json.dumps(aggregate, indent=2) + "\n") try: rel = out_path.relative_to(repo) diff --git a/scripts/catalog/db.py b/scripts/catalog/db.py index 45eacb97..fe2dc474 100755 --- a/scripts/catalog/db.py +++ b/scripts/catalog/db.py @@ -36,7 +36,6 @@ family TEXT NOT NULL, display_name TEXT NOT NULL, params INTEGER NOT NULL, - architecture_pattern TEXT, license_spdx TEXT NOT NULL, license_display TEXT NOT NULL, upstream_repo TEXT NOT NULL, @@ -203,9 +202,8 @@ def build(records: dict[str, dict], out: pathlib.Path) -> dict[str, int]: for variant, record in records.items(): license_info = record["license"] headline = record.get("headline_benchmark") or {} - con.execute("INSERT INTO models VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", ( + con.execute("INSERT INTO models VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", ( variant, record["family"], record["display_name"], record["params"], - record.get("architecture_pattern"), license_info["spdx"], license_info["display"], record["upstream_repo"], record["upstream_commit"], record.get("published_repo"), record.get("language_tag_form"), record.get("encoder_window_s"), diff --git a/scripts/catalog/ingest_perf.py b/scripts/catalog/ingest_perf.py index 064b1c4c..470b150b 100755 --- a/scripts/catalog/ingest_perf.py +++ b/scripts/catalog/ingest_perf.py @@ -110,6 +110,7 @@ def mean(field: str): "decode_ms": mean("decode_ms"), "engine_sha": report.get("git_sha"), "measured_on": (report.get("timestamp") or "")[:10] or None, + "os": (report.get("machine") or {}).get("os"), "_when": report.get("timestamp") or "", "_file": report["_file"], }) @@ -166,7 +167,7 @@ def collect(reports_dir: pathlib.Path, FIELDS = ("sample_duration_s", "total_ms", "xrt_compute", "wall_ms", "xrt_wall", - "load_ms", "mel_ms", "encode_ms", "decode_ms", "engine_sha", "measured_on") + "load_ms", "mel_ms", "encode_ms", "decode_ms", "engine_sha", "measured_on", "os") def catalog_row(source: dict) -> dict: diff --git a/scripts/catalog/profiles.py b/scripts/catalog/profiles.py index d6a65c38..64b29f5f 100644 --- a/scripts/catalog/profiles.py +++ b/scripts/catalog/profiles.py @@ -205,3 +205,8 @@ def dataset_spec(cell: dict) -> str: if cell["dataset"] == "fleurs": return f"fleurs:{cell['language']}" return f"{cell['dataset']}:{cell['split']}" + + +def machine_display(profile: dict, machine_slug: str) -> str: + target = target_for_machine(profile, machine_slug) + return (target or {}).get("display") or machine_slug diff --git a/scripts/catalog/render.py b/scripts/catalog/render.py index b1503111..340980ff 100755 --- a/scripts/catalog/render.py +++ b/scripts/catalog/render.py @@ -18,8 +18,10 @@ Blocks: `downloads`, `perf machine=`, `accuracy` (one table per dataset split beyond the headline), `intro` (upstream link plus the card spec's `summary`), `prose field=wer.notes` (any `|` text field of the spec, -dotted path), and `family variants=a,b,c` (a roll-up row per variant, for -family pages). Everything outside a marker pair is untouched. The variant is the file stem +dotted path), `family variants=a,b,c` (a roll-up row per variant, for +family pages), and `family-index` (the root README's supported-models table, +one row per documentation page). Everything outside a marker pair is +untouched. The root README is rendered along with docs/models. The variant is the file stem unless the marker overrides it with `variant=`, so family docs can pull a table for a model they are not named after. @@ -39,6 +41,7 @@ sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) import common # noqa: E402 +import profiles # noqa: E402 OPEN = re.compile(r"^(\s*)\s*$") CLOSE = re.compile(r"^\s*\s*$") @@ -140,7 +143,7 @@ def ordered(index: int, override: str | None, rank) -> list[str]: cells.append("-") continue cells.append(f"{common.fmt_ms(row['total_ms'], dp_ms)} " - f"({common.fmt_xrt(row)})") + f"({common.fmt_xrt(row)})" + ("" if row.get("engine_sha") else "†")) body.append(cells) if blocked: raise RenderError( @@ -149,9 +152,43 @@ def ordered(index: int, override: str | None, rank) -> list[str]: + (" ..." if len(blocked) > 4 else "")) if not body: raise RenderError(f"no rows matched on {machine}") - return common.render_table(["Backend", "Sample"] + quants, - ["l", "l"] + ["r"] * len(quants), body, - rule_fill=True, max_pad=20) + table = common.render_table(["Backend", "Sample"] + quants, + ["l", "l"] + ["r"] * len(quants), body, + rule_fill=True, max_pad=20) + return perf_methodology(rows) + [""] + table + [""] + perf_provenance(machine, rows) + + +def perf_methodology(rows: dict) -> list[str]: + """What a cell is. Iterations and warmup are profile policy.""" + _, profile = profiles.load_profile() + speed = profile["speed"] + return [f"Compute latency (mel + encode + decode), speedup over realtime in " + f"parentheses; mean over {speed['iterations']} iterations after " + f"{speed['warmup']} warmup."] + + +def perf_provenance(machine: str, rows: dict) -> list[str]: + """Where the numbers came from: machine, engine commit, date, OS.""" + _, profile = profiles.load_profile() + display = profiles.machine_display(profile, machine) + builds: dict[tuple, int] = {} + for row in rows.values(): + if row.get("engine_sha"): + key = (row["engine_sha"], row.get("measured_on") or "", row.get("os") or "") + builds[key] = builds.get(key, 0) + 1 + legacy = sum(1 for row in rows.values() if not row.get("engine_sha")) + parts = [] + for (sha, date, os_name), _ in sorted(builds.items(), key=lambda kv: -kv[1]): + text = f"transcribe.cpp `{sha}`" + if date: + text += f" on {date}" + if os_name: + text += f", {os_name}" + parts.append(text) + line = f"{display}: " + "; ".join(parts) + "." if parts else f"{display}." + if legacy: + line += " † published before provenance was recorded; not yet re-measured." + return [line] _SPECS: dict[str, dict] = {} @@ -273,6 +310,52 @@ def block_family(records: dict[str, dict], attrs: dict[str, str]) -> list[str]: ["l", "r", "l", "r", "l", "r", "l", "l"], body, max_pad=34) +def doc_for(records: dict[str, dict], variant: str) -> pathlib.Path | None: + """The page a variant is documented on: its own, else the family page + whose roll-up lists it.""" + own = common.DOCS_DIR / f"{variant}.md" + for path in sorted(common.DOCS_DIR.glob("*.md")): + if path.stem in records: + continue + for line in path.read_text().splitlines(): + match = OPEN.match(line) + if match and match.group(2) == "family" \ + and variant in parse_attrs(match.group(3)).get("variants", "").split(","): + return path + return own if own.exists() else None + + +def block_family_index(records: dict[str, dict], attrs: dict[str, str]) -> list[str]: + """The root README's supported-models table: one row per documentation + page, listing the variants it covers. `transcribe=false` selects the + models that only diarize.""" + want = as_bool(attrs.get("transcribe"), True) + groups: dict[str, dict] = {} + for variant, record in records.items(): + if bool(record.get("capabilities", {}).get("transcribe", {}).get("supported")) != want: + continue + doc = doc_for(records, variant) + if doc is not None: + key = doc.stem + title = doc.read_text().splitlines()[0].lstrip("# ").strip() + link = f"[docs/models/{doc.name}](docs/models/{doc.name})" + else: + key = variant + title = record["display_name"] + link = f"[{record['published_repo']}](https://huggingface.co/{record['published_repo']})" + group = groups.setdefault(key, {"title": title, "link": link, "variants": [], "caps": set()}) + group["variants"].append(variant) + group["caps"].update(c for c in common.capabilities_summary(record).split(", ") if c != "-") + if not groups: + raise RenderError("no models matched") + body = [] + for group in sorted(groups.values(), key=lambda g: g["title"].lower()): + body.append([group["title"], ", ".join(f"`{v}`" for v in sorted(group["variants"])), + ", ".join(sorted(group["caps"])) or "-", group["link"]]) + return common.render_table(["Family", "Variants", "Capabilities", "Docs"], + ["l", "l", "l", "l"], body) + + BLOCKS = {"downloads": block_downloads, "perf": block_perf, "intro": block_intro, "prose": block_prose, "accuracy": block_accuracy} @@ -283,9 +366,11 @@ def block_family(records: dict[str, dict], attrs: dict[str, str]) -> list[str]: def rewrite(path: pathlib.Path, records: dict[str, dict]) -> tuple[str, list[str]]: lines = path.read_text().splitlines() - out, errors, index = [], [], 0 + out, errors, index, fenced = [], [], 0, False while index < len(lines): - match = OPEN.match(lines[index]) + if lines[index].lstrip().startswith("```"): + fenced = not fenced # a marker quoted in a code block is documentation + match = None if fenced else OPEN.match(lines[index]) if not match: out.append(lines[index]) index += 1 @@ -303,6 +388,8 @@ def rewrite(path: pathlib.Path, records: dict[str, dict]) -> tuple[str, list[str try: if name == "family": rendered = block_family(records, attrs) + elif name == "family-index": + rendered = block_family_index(records, attrs) elif name not in BLOCKS: raise RenderError(f"unknown block type {name!r}") elif variant not in records: @@ -332,7 +419,7 @@ def main() -> int: records = common.load_records() docs = ([pathlib.Path(p) for p in args.paths] - or sorted(pathlib.Path(args.docs).glob("*.md"))) + or sorted(pathlib.Path(args.docs).glob("*.md")) + [common.REPO / "README.md"]) stale, errors, rendered = [], [], 0 for path in docs: From 218aeae390af223785d6a613d44bc4868cca4fd2 Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sun, 13 Sep 2026 17:00:49 -0700 Subject: [PATCH 13/24] continued updates --- .claude/skills/porting-6-bench/SKILL.md | 56 +--- .claude/skills/porting-7-wer/SKILL.md | 135 +++++---- .claude/skills/porting-8-ship/SKILL.md | 249 ++++++++-------- .github/workflows/catalog.yml | 7 + README.md | 7 +- catalog/_benchmark_profiles.json | 101 ++++++- catalog/_schema.json | 24 +- catalog/breeze-asr-25.json | 21 +- catalog/canary-180m-flash.json | 1 + catalog/canary-1b-flash.json | 1 + catalog/canary-1b-v2.json | 1 + catalog/canary-1b.json | 1 + catalog/canary-qwen-2.5b.json | 1 + catalog/cohere-transcribe-03-2026.json | 1 + catalog/cohere-transcribe-arabic-07-2026.json | 1 + .../diar_streaming_sortformer_4spk-v2.1.json | 1 + catalog/fun-asr-mlt-nano-2512.json | 1 + catalog/fun-asr-nano-2512.json | 1 + catalog/gigaam-v3-ctc.json | 1 + catalog/gigaam-v3-e2e-ctc.json | 1 + catalog/gigaam-v3-e2e-rnnt.json | 1 + catalog/gigaam-v3-rnnt.json | 1 + catalog/granite-4.0-1b-speech.json | 1 + catalog/granite-speech-4.1-2b-nar.json | 1 + catalog/granite-speech-4.1-2b-plus.json | 1 + catalog/granite-speech-4.1-2b.json | 1 + .../granite-speech-5.0-470m-turboctc-nc.json | 70 +++++ catalog/granite-speech-5.0-470m-turboctc.json | 70 +++++ catalog/medasr.json | 1 + catalog/moonshine-base-ar.json | 1 + catalog/moonshine-base-ja.json | 1 + catalog/moonshine-base-ko.json | 1 + catalog/moonshine-base-uk.json | 1 + catalog/moonshine-base-vi.json | 1 + catalog/moonshine-base-zh.json | 1 + catalog/moonshine-base.json | 1 + catalog/moonshine-streaming-medium.json | 1 + catalog/moonshine-streaming-small.json | 1 + catalog/moonshine-streaming-tiny.json | 1 + catalog/moonshine-tiny-ar.json | 1 + catalog/moonshine-tiny-ja.json | 1 + catalog/moonshine-tiny-ko.json | 1 + catalog/moonshine-tiny-uk.json | 1 + catalog/moonshine-tiny-vi.json | 1 + catalog/moonshine-tiny-zh.json | 1 + catalog/moonshine-tiny.json | 1 + catalog/moss-transcribe-diarize.json | 1 + ...ultitalker-parakeet-streaming-0.6b-v1.json | 5 +- catalog/nemotron-3.5-asr-streaming-0.6b.json | 1 + .../nemotron-speech-streaming-en-0.6b.json | 1 + catalog/parakeet-ctc-0.6b.json | 1 + catalog/parakeet-ctc-1.1b.json | 1 + catalog/parakeet-primeline.json | 1 + catalog/parakeet-rnnt-0.6b.json | 1 + catalog/parakeet-rnnt-1.1b.json | 1 + catalog/parakeet-tdt-0.6b-v2.json | 1 + catalog/parakeet-tdt-0.6b-v3.json | 1 + catalog/parakeet-tdt-1.1b.json | 1 + catalog/parakeet-tdt_ctc-1.1b.json | 1 + catalog/parakeet-tdt_ctc-110m.json | 1 + catalog/parakeet-unified-en-0.6b.json | 1 + catalog/qwen3-asr-0.6b.json | 1 + catalog/qwen3-asr-1.7b.json | 1 + catalog/sensevoice-small.json | 1 + catalog/voxtral-mini-3b-2507.json | 1 + catalog/voxtral-mini-4b-realtime-2602.json | 1 + catalog/voxtral-small-24b-2507.json | 1 + catalog/whisper-base.en.json | 1 + catalog/whisper-base.json | 1 + catalog/whisper-large-v2.json | 40 ++- catalog/whisper-large-v3-turbo.json | 4 +- catalog/whisper-large-v3.json | 1 + catalog/whisper-large.json | 39 ++- catalog/whisper-medium.en.json | 1 + catalog/whisper-medium.json | 1 + catalog/whisper-small.en.json | 1 + catalog/whisper-small.json | 1 + catalog/whisper-tiny.en.json | 1 + catalog/whisper-tiny.json | 1 + docs/_templates/model-card.md.j2 | 7 +- docs/models/canary-180m-flash.md | 18 +- docs/models/canary-1b-flash.md | 13 +- docs/models/canary-1b-v2.md | 17 +- docs/models/canary-1b.md | 17 +- docs/models/canary-qwen-2.5b.md | 27 +- docs/models/cohere-transcribe-03-2026.md | 19 +- .../cohere-transcribe-arabic-07-2026.md | 21 +- .../diar_streaming_sortformer_4spk-v2.1.md | 20 +- docs/models/fun-asr-mlt-nano-2512.md | 25 +- docs/models/fun-asr-nano-2512.md | 23 +- docs/models/gigaam-v3-ctc.md | 15 +- docs/models/gigaam-v3-e2e-ctc.md | 15 +- docs/models/gigaam-v3-e2e-rnnt.md | 15 +- docs/models/gigaam-v3-rnnt.md | 15 +- docs/models/granite-4.0-1b-speech.md | 17 +- docs/models/granite-speech-4.1-2b-nar.md | 29 +- docs/models/granite-speech-4.1-2b-plus.md | 28 +- docs/models/granite-speech-4.1-2b.md | 19 +- .../granite-speech-5.0-470m-turboctc-nc.md | 108 +++---- .../granite-speech-5.0-470m-turboctc.md | 105 ++++--- docs/models/granite-speech-5.0-turboctc.md | 10 +- docs/models/medasr.md | 18 +- docs/models/moonshine-base.md | 31 +- docs/models/moonshine-streaming-medium.md | 25 +- docs/models/moonshine-streaming-small.md | 24 +- docs/models/moonshine-streaming-tiny.md | 24 +- docs/models/moonshine-tiny.md | 29 +- docs/models/moss-transcribe-diarize.md | 42 +-- .../multitalker-parakeet-streaming-0.6b-v1.md | 25 +- .../models/nemotron-3.5-asr-streaming-0.6b.md | 14 +- .../nemotron-speech-streaming-en-0.6b.md | 11 +- docs/models/parakeet-ctc-0.6b.md | 11 +- docs/models/parakeet-ctc-1.1b.md | 11 +- docs/models/parakeet-primeline.md | 7 +- docs/models/parakeet-rnnt-0.6b.md | 11 +- docs/models/parakeet-rnnt-1.1b.md | 11 +- docs/models/parakeet-tdt-0.6b-v2.md | 15 +- docs/models/parakeet-tdt-0.6b-v3.md | 13 +- docs/models/parakeet-tdt-1.1b.md | 11 +- docs/models/parakeet-tdt_ctc-1.1b.md | 11 +- docs/models/parakeet-tdt_ctc-110m.md | 11 +- docs/models/parakeet-unified-en-0.6b.md | 11 +- docs/models/qwen3-asr-0.6b.md | 20 +- docs/models/qwen3-asr-1.7b.md | 21 +- docs/models/sensevoice-small.md | 30 +- docs/models/voxtral-mini-3b-2507.md | 20 +- docs/models/voxtral-realtime.md | 4 +- docs/models/voxtral-small-24b-2507.md | 19 +- docs/models/whisper-base.en.md | 23 +- docs/models/whisper-base.md | 23 +- docs/models/whisper-large-v2.md | 60 +++- docs/models/whisper-large-v3-turbo.md | 24 +- docs/models/whisper-large-v3.md | 23 +- docs/models/whisper-large.md | 59 +++- docs/models/whisper-medium.en.md | 23 +- docs/models/whisper-medium.md | 23 +- docs/models/whisper-small.en.md | 23 +- docs/models/whisper-small.md | 23 +- docs/models/whisper-tiny.en.md | 23 +- docs/models/whisper-tiny.md | 23 +- docs/models/whisper.md | 2 +- docs/tools/hf-metadata-schema.md | 41 ++- docs/tools/wer.md | 4 + scripts/bench/run.py | 8 +- scripts/catalog/check.py | 48 +-- scripts/catalog/common.py | 32 ++ scripts/catalog/db.py | 18 +- scripts/catalog/ingest_accuracy.py | 29 +- scripts/catalog/ingest_perf.py | 70 ++--- scripts/catalog/new_record.py | 125 ++++++++ scripts/catalog/profiles.py | 11 +- scripts/catalog/render.py | 115 +++++--- scripts/catalog/test_db_mapping.py | 48 +++ scripts/hf_cards/README.md | 6 +- scripts/hf_cards/breeze-asr-25.yaml | 19 +- scripts/hf_cards/canary-180m-flash.yaml | 10 +- scripts/hf_cards/canary-1b-flash.yaml | 5 +- scripts/hf_cards/canary-1b-v2.yaml | 9 +- scripts/hf_cards/canary-1b.yaml | 9 +- scripts/hf_cards/canary-qwen-2.5b.yaml | 19 +- .../hf_cards/cohere-transcribe-03-2026.yaml | 11 +- .../cohere-transcribe-arabic-07-2026.yaml | 14 +- .../diar_streaming_sortformer_4spk-v2.1.yaml | 15 +- scripts/hf_cards/fun-asr-mlt-nano-2512.yaml | 17 +- scripts/hf_cards/fun-asr-nano-2512.yaml | 15 +- scripts/hf_cards/generate.py | 102 +++++-- scripts/hf_cards/gigaam-v3-ctc.yaml | 8 +- scripts/hf_cards/gigaam-v3-e2e-ctc.yaml | 8 +- scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml | 8 +- scripts/hf_cards/gigaam-v3-rnnt.yaml | 8 +- scripts/hf_cards/granite-4.0-1b-speech.yaml | 9 +- .../hf_cards/granite-speech-4.1-2b-nar.yaml | 21 +- .../hf_cards/granite-speech-4.1-2b-plus.yaml | 20 +- scripts/hf_cards/granite-speech-4.1-2b.yaml | 11 +- .../granite-speech-5.0-470m-turboctc-nc.yaml | 63 +--- .../granite-speech-5.0-470m-turboctc.yaml | 62 +--- scripts/hf_cards/medasr.yaml | 10 +- scripts/hf_cards/moonshine-base-ar.yaml | 6 +- scripts/hf_cards/moonshine-base-ja.yaml | 6 +- scripts/hf_cards/moonshine-base-ko.yaml | 6 +- scripts/hf_cards/moonshine-base-uk.yaml | 6 +- scripts/hf_cards/moonshine-base-vi.yaml | 6 +- scripts/hf_cards/moonshine-base-zh.yaml | 6 +- scripts/hf_cards/moonshine-base.yaml | 14 +- .../hf_cards/moonshine-streaming-medium.yaml | 17 +- .../hf_cards/moonshine-streaming-small.yaml | 16 +- .../hf_cards/moonshine-streaming-tiny.yaml | 16 +- scripts/hf_cards/moonshine-tiny-ar.yaml | 6 +- scripts/hf_cards/moonshine-tiny-ja.yaml | 6 +- scripts/hf_cards/moonshine-tiny-ko.yaml | 6 +- scripts/hf_cards/moonshine-tiny-uk.yaml | 6 +- scripts/hf_cards/moonshine-tiny-vi.yaml | 6 +- scripts/hf_cards/moonshine-tiny-zh.yaml | 6 +- scripts/hf_cards/moonshine-tiny.yaml | 12 +- scripts/hf_cards/moss-transcribe-diarize.yaml | 34 +-- ...ultitalker-parakeet-streaming-0.6b-v1.yaml | 10 +- .../nemotron-3.5-asr-streaming-0.6b.yaml | 14 +- .../nemotron-speech-streaming-en-0.6b.yaml | 3 +- scripts/hf_cards/parakeet-ctc-0.6b.yaml | 3 +- scripts/hf_cards/parakeet-ctc-1.1b.yaml | 3 +- scripts/hf_cards/parakeet-primeline.yaml | 4 +- scripts/hf_cards/parakeet-rnnt-0.6b.yaml | 3 +- scripts/hf_cards/parakeet-rnnt-1.1b.yaml | 3 +- scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml | 7 +- scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml | 5 +- scripts/hf_cards/parakeet-tdt-1.1b.yaml | 3 +- scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml | 3 +- scripts/hf_cards/parakeet-tdt_ctc-110m.yaml | 3 +- .../hf_cards/parakeet-unified-en-0.6b.yaml | 3 +- scripts/hf_cards/qwen3-asr-0.6b.yaml | 12 +- scripts/hf_cards/qwen3-asr-1.7b.yaml | 13 +- scripts/hf_cards/sensevoice-small.yaml | 17 +- scripts/hf_cards/template.md.j2 | 8 + scripts/hf_cards/voxtral-mini-3b-2507.yaml | 12 +- .../voxtral-mini-4b-realtime-2602.yaml | 16 +- scripts/hf_cards/voxtral-small-24b-2507.yaml | 13 +- scripts/hf_cards/whisper-base.en.yaml | 10 +- scripts/hf_cards/whisper-base.yaml | 10 +- scripts/hf_cards/whisper-large-v2.yaml | 10 +- scripts/hf_cards/whisper-large-v3-turbo.yaml | 6 +- scripts/hf_cards/whisper-large-v3.yaml | 6 +- scripts/hf_cards/whisper-large.yaml | 10 +- scripts/hf_cards/whisper-medium.en.yaml | 10 +- scripts/hf_cards/whisper-medium.yaml | 10 +- scripts/hf_cards/whisper-small.en.yaml | 10 +- scripts/hf_cards/whisper-small.yaml | 6 +- scripts/hf_cards/whisper-tiny.en.yaml | 10 +- scripts/hf_cards/whisper-tiny.yaml | 10 +- scripts/wer/languages.py | 5 + scripts/wer/remote/modal_sweep.py | 278 +++++++++--------- scripts/wer/run.py | 7 +- 231 files changed, 2451 insertions(+), 1622 deletions(-) create mode 100644 catalog/granite-speech-5.0-470m-turboctc-nc.json create mode 100644 catalog/granite-speech-5.0-470m-turboctc.json create mode 100755 scripts/catalog/new_record.py create mode 100644 scripts/catalog/test_db_mapping.py diff --git a/.claude/skills/porting-6-bench/SKILL.md b/.claude/skills/porting-6-bench/SKILL.md index 090ebe1d..23358b70 100644 --- a/.claude/skills/porting-6-bench/SKILL.md +++ b/.claude/skills/porting-6-bench/SKILL.md @@ -60,10 +60,11 @@ Rules: ## Standardized bench schema -Every per-cell report under -`reports/perf//__.json` is checked by the -`required_*` sets in Step 5. Missing required fields block Stage 6; -optional gaps are surfaced but do not gate. +`scripts/bench/run.py` refuses to write a report under +`reports/perf//__.json` that lacks any field +the catalog ingester or `compare.py` reads (`report_gaps()` in the driver). A +report on disk is complete by construction; a refusal is a bench-harness +regression and halts Stage 6. ## Workflow @@ -74,9 +75,8 @@ Bench progress: - [ ] Step 3: Confirm bench scope (publication default, optional widening) - [ ] Step 4: Capture publication baseline - [ ] Step 4b: Batch throughput sweep (good-to-know, non-gating) -- [ ] Step 5: Validate schema completeness -- [ ] Step 6: Iteration loop (human-driven, with validate gate per accept) -- [ ] Step 7: Sign-off review +- [ ] Step 5: Iteration loop (human-driven, with validate gate per accept) +- [ ] Step 6: Sign-off review ``` ### Step 1: Matrix presence (execute) @@ -102,7 +102,7 @@ capturing baseline. **Publication scope (default, required for sign-off).** This is the matrix that ends up rendered in `docs/models/.md`: -The checked-in profile `asr-publication-v1` is the source of truth. It measures +The checked-in profile `asr-publication-v2` is the source of truth. It measures the publication quants Q8_0 and Q4_K_M when downloaded, on both `jfk` and `dots`, with three iterations after one warmup, using the backends assigned to the detected publication machine (M4 Max CPU/Metal or Ryzen 4750U CPU/Vulkan). @@ -124,9 +124,7 @@ pollute timings. Publication-scope baseline (default): ```bash -uv run scripts/bench/run.py --profile \ - --models \ - --name -publication-baseline-$(date -u +%Y%m%dT%H%M%SZ) +uv run scripts/bench/run.py --profile --models ``` Writes one report per (variant, backend) pair to `reports/perf//`. @@ -151,36 +149,7 @@ Emits per-batch `{batch_size, per_utt_ms, wall_ms}` to `reports/perf//__batch_.json`. This is exploratory and does not gate sign-off. Batch runs stay strictly serial. -### Step 5: Schema validation (execute) - -For each report file, confirm every required field is present and -surface any optional gaps: - -```python -# uv run python -c '...' -import json, pathlib, sys -required_top = {"git_sha", "machine"} -required_run = {"schema", "model_path", "backend", "per_iter", - "sample_duration_s", "rtf_wall_mean", "transcript_sha256"} -required_iter = {"mel_ms", "encode_ms", "decode_ms", "total_ms", "wall_ms"} -optional_top = {"git_dirty"} -optional_run = {"rtf_compute_mean", "token_ids_sha256"} -for p in sys.argv[1:]: - d = json.loads(pathlib.Path(p).read_text()) - missing_top = required_top - d.keys() - missing_run = any(required_run - r.keys() for r in d["runs"]) - missing_iter = any(required_iter - it.keys() for r in d["runs"] for it in r["per_iter"]) - absent_opt_top = optional_top - d.keys() - absent_opt_run = any(optional_run - r.keys() for r in d["runs"]) - print(f"{p}: required_top_missing={missing_top} required_run_missing={missing_run} " - f"required_iter_missing={missing_iter} optional_absent_top={absent_opt_top} " - f"optional_absent_run={absent_opt_run}") -``` - -Any missing **required** field is a bench-harness regression — halt Stage -6 sign-off. Absent **optional** fields are surfaced but do not block. - -### Step 6: Iteration loop (human-driven) +### Step 5: Iteration loop (human-driven) For each optimization hypothesis: @@ -220,13 +189,12 @@ For each optimization hypothesis: Repeat until the user is satisfied. -### Step 7: Sign-off +### Step 6: Sign-off Report: - Baseline reports and machine matrix covered. Name **each of the two required rigs** and its state: covered, or `INCOMPLETE — pending`. Do not report Stage 6 as complete while either rig is missing. -- Any schema gaps observed. - Total iterations run, net timing improvement, and that every accepted iteration passed `validate.py all`. @@ -271,8 +239,6 @@ produced it. The stage is not finished until the numbers are in the catalog. `jfk` and `dots`, for every profile machine/backend target. Legacy xRT-only rows may satisfy a cell but are explicitly marked and should be replaced during the long-form/memory sweep. -- Schema completeness reported to the user; any gap is a known bench- - harness task, not a porting task. - Optimization iteration loop scripted end-to-end (user drives hypotheses; skill runs the loop). - Every accepted performance iteration was followed by a passing diff --git a/.claude/skills/porting-7-wer/SKILL.md b/.claude/skills/porting-7-wer/SKILL.md index d1953274..c2576528 100644 --- a/.claude/skills/porting-7-wer/SKILL.md +++ b/.claude/skills/porting-7-wer/SKILL.md @@ -31,11 +31,12 @@ Stage 7 re-confirms after bench and records human review for every quant. ``` WER progress: - [ ] Step 1: Ensure acceptance manifest -- [ ] Step 2: Score the reference-dtype model +- [ ] Step 2: Run the publication profile (every profile cell, every quant) - [ ] Step 3: Check the ref-dtype WER limit -- [ ] Step 4: Score each shipped quant +- [ ] Step 4: Score acceptance cells the profile does not cover - [ ] Step 5: Write the summary table -- [ ] Step 6: Sign-off review +- [ ] Step 6: Ingest into the catalog and render +- [ ] Step 7: Sign-off review ``` ### Step 1: Acceptance manifest (execute or ask-point) @@ -68,26 +69,28 @@ MANIFEST=samples/wer/fleurs-${LANG}.manifest.jsonl CER auto-routes for zh / yue / ja / ko / th via the manifest's `language` field. The score JSON's `error_rate_pct` is the canonical report metric. -### Step 2: Score the reference-dtype model (execute) +### Step 2: Run the publication profile (execute) -Read intake for the reference dtype and acceptance dataset: +One sweep produces both the release numbers and the gate inputs. The +checked-in profile (`catalog/_benchmark_profiles.json`) selects the cells: +LibriSpeech test-clean at every downloaded quant for English-capable models, +and FLEURS test at Q8_0 for every supported FLEURS language. Run whatever is +missing: ```bash -REFDTYPE=$(uv run python -c "import json; d=json.load(open('reports/porting///intake.json')); \ - m={'float32':'F32','float16':'F16','bfloat16':'BF16'}; print(m[d['dtype']['expected']])") -DATASET=$(uv run python -c "import json; d=json.load(open('reports/porting///intake.json'))['upstream_benchmarks'][0]['dataset']; \ - print(d.replace(' ', '-').lower())") - -# $MANIFEST was resolved in Step 1 — use it directly. -uv run scripts/wer/run.py \ - --model models//-${REFDTYPE}.gguf \ - --manifest "$MANIFEST" \ - --out reports/wer/-${REFDTYPE}.${DATASET}.jsonl - -uv run scripts/wer/score.py reports/wer/-${REFDTYPE}.${DATASET}.jsonl +modal run scripts/wer/remote/modal_sweep.py::publication_sweep \ + --models # --plan-only to inspect the expansion +for f in reports/wer/-*.jsonl; do uv run scripts/wer/score.py "$f"; done ``` -`score.py` writes the `.score.json` consumed by the gate and summary. +The sweep writes `reports/wer/-.[.bN].jsonl` and +`score.py` writes the matching `.score.json`. Every JSONL carries its decode +recipe, engine sha, and profile id in the batch header, and the score carries +them forward, which is what makes it ingestible in Step 6. + +Do not also run the same cells locally with `run.py`: a second measurement of +one cell under a different backend is a second number to reconcile, not a +check. ### Step 3: Ref-dtype WER limit (execute) @@ -146,14 +149,21 @@ Proceed only when the higher WER is explained, reviewed, and written in the WER summary or family doc. Higher WER without evidence is a release blocker. -### Step 4: Score each shipped quant (execute) +### Step 4: Acceptance cells outside the profile (execute) + +The profile covers the acceptance dataset for most ports. Two cases fall +outside it and are scored locally, exactly as the profile would, so the files +land under the same names: -Loop over `F16, Q8_0, Q6_K, Q5_K_M, Q4_K_M`, skipping whichever equals -`REFDTYPE`: +- The acceptance dataset is FLEURS (a single-language port such as + `parakeet-primeline` or `gigaam`): the profile ran Q8_0 only. Score the + reference dtype and the remaining quants on `$MANIFEST`. +- The acceptance dataset is not a profile dataset at all (AMI for a + diarizer): score every preset on `$MANIFEST`. ```bash -for PRESET in F16 Q8_0 Q6_K Q5_K_M Q4_K_M; do - [ "$PRESET" = "$REFDTYPE" ] && continue +for PRESET in F16 Q8_0 Q6_K Q5_K_M Q4_K_M; do + [ -f reports/wer/-${PRESET}.${DATASET}.score.json ] && continue uv run scripts/wer/run.py \ --model models//-${PRESET}.gguf \ --manifest "$MANIFEST" \ @@ -162,10 +172,9 @@ for PRESET in F16 Q8_0 Q6_K Q5_K_M Q4_K_M; do done ``` -Quant WER is reviewed and signed off by the user, not auto-gated. - -Batch mode should be WER-neutral. If a `--batch-size > 1` sweep differs -from serial beyond dataset noise (~0.01), stop and report the numbers. +Quant WER is reviewed and signed off by the user, not auto-gated. Batch mode +should be WER-neutral; if a `--batch-size > 1` sweep differs from serial +beyond dataset noise (~0.01), stop and report the numbers. ### Step 5: Summary table (execute) @@ -176,44 +185,19 @@ gate result (`PASS` or `BLOCKED`). Quant rows record human disposition (`ACCEPTED`, `REJECTED`, or `PENDING REVIEW`) plus any short note the user gives. Stage 8 (`porting-8-ship`) consumes this into the model card. -### Step 6: Sign-off +### Step 6: Ingest into the catalog and render (execute) -Report: -- Manifest path and utterance count. -- Ref-dtype status: measured Oracle reference WER, C++ WER, max allowed - WER, pass/blocked, and any required justification. -- Path to every produced `.score.json`. -- Path to the summary markdown. -- Human disposition for every shipped quant. Quant WER has no automatic - numeric gate; unresolved quant review means Stage 7 sign-off is pending. - -**Do not commit.** WER outputs under `reports/wer/` are local generated -artifacts, ignored by `.gitignore`. The summary tables and per-quant -WER cells are what ships in-repo via Stage 8. - -## Catalog (mandatory exit step) - -A score is only comparable to another score measured the same way, so the -decode recipe travels with the number. `scripts/wer/run.py` stamps it into the -JSONL batch header (timestamps, batch size, language, backend, engine sha, and -publication profile) and `scripts/wer/score.py` carries it into the -`.score.json`. - -Run any missing publication cells from the checked-in profile rather than -reconstructing the matrix with flags: +Only profile-stamped scores are ingested; a score with no engine sha or a +different recipe is rejected by name, and the rejection is the finding. ```bash -modal run scripts/wer/remote/modal_sweep.py::publication_sweep \ - --models -# Score the JSONLs named by the sweep output, then: uv run scripts/catalog/ingest_accuracy.py --models -uv run scripts/catalog/check.py --publication-profile --models ``` -Record the featured download-table column explicitly. A variant routinely carries several -runs of one dataset differing only in batch size or timestamp mode, so -`headline_benchmark` in `catalog/.json` names the whole identity -tuple and the download table is rendered from it: +Set `headline_benchmark` in `catalog/.json` to the cell the +download table features. A variant can carry several runs of one dataset +differing only in batch size or timestamp mode, so the pointer names the +whole identity: ```json "headline_benchmark": {"dataset": "librispeech", "split": "test-clean", @@ -221,19 +205,40 @@ tuple and the download table is rendered from it: "batch_size": 1, "timestamps": "none"} ``` -Then `uv run scripts/catalog/render.py && uv run scripts/catalog/check.py`. -Never hand-edit a WER into a doc or an HF card spec: both are rendered, and -CI fails when they drift. +```bash +uv run scripts/catalog/check.py --publication-profile --models +uv run scripts/catalog/render.py +``` + +Never hand-edit a WER into a doc or an HF card spec: both are rendered from +the catalog, and CI fails when they drift. + +### Step 7: Sign-off + +Report: +- Manifest path and utterance count. +- Ref-dtype status: measured Oracle reference WER, C++ WER, max allowed + WER, pass/blocked, and any required justification. +- Path to every produced `.score.json`, and which came from the profile + sweep versus Step 4. +- Path to the summary markdown. +- The catalog check result for the variant. +- Human disposition for every shipped quant. Quant WER has no automatic + numeric gate; unresolved quant review means Stage 7 sign-off is pending. + +**Do not commit.** WER outputs under `reports/wer/` are local generated +artifacts, ignored by `.gitignore`. The catalog record and the rendered +tables are what ships in-repo. ## Postconditions - `reports/wer/-..score.json` for every - shipped preset. + shipped preset, profile-stamped where the profile covers the cell. - `reports/wer/..summary.md` table. - Ref-dtype status is known and reported as plain WER numbers against the measured Oracle reference baseline. -- Sign-off names the manifest path and utterance count so consumers can - verify which dataset was scored. +- `catalog/.json` holds every profile accuracy cell and a + `headline_benchmark`; the per-variant profile check passes. - Quant WER is reviewed and signed off by the user, not auto-gated. ## Pointers (read, not execute) diff --git a/.claude/skills/porting-8-ship/SKILL.md b/.claude/skills/porting-8-ship/SKILL.md index e8c871e4..076df349 100644 --- a/.claude/skills/porting-8-ship/SKILL.md +++ b/.claude/skills/porting-8-ship/SKILL.md @@ -20,29 +20,33 @@ is out of scope. - `reports/convert/-.json` (SHA of the reference GGUF). - `reports/wer/-..score.json` for every shipped preset. -- The catalog satisfies `asr-publication-v1` for this variant: complete +- The catalog satisfies `asr-publication-v2` for this variant: complete accuracy and every speed quant/sample/machine/backend cell selected by the profile (currently Q8_0 and Q4_K_M on both `jfk` and `dots`, except an explicit supported-language sample override such as GigaAM's `ru`). ## Workflow +One ordered finalization. Each step gates the next; nothing is uploaded +until the human review in Step 7 has passed on files that already survived +every check. + ``` Ship progress: -- [ ] Step 1: Pre-flight checklist (artifacts present) -- [ ] Step 2: Fill the family doc -- [ ] Step 3: Author the user-facing model card -- [ ] Step 4: Write the HF card YAML spec -- [ ] Step 5: Render the HF README -- [ ] Step 6: Pre-upload review -- [ ] Step 7: Sign-off review +- [ ] Step 1: Verify inputs and GGUF metadata +- [ ] Step 2: Ingest measurements +- [ ] Step 3: Validate the publication profile +- [ ] Step 4: Author prose (family doc, model page, HF card spec) +- [ ] Step 5: Render docs and card +- [ ] Step 6: Verify no drift +- [ ] Step 7: Human review (ask-point) +- [ ] Step 8: Upload ``` -### Step 1: Pre-flight checklist (execute) +### Step 1: Verify inputs and GGUF metadata (execute) Confirm every artifact exists. If any row is missing, halt and send the -user to the stage that owns the missing artifact — Stage 8 does not -fabricate inputs. +user to the stage that owns it. Stage 8 does not fabricate inputs. | Artifact | Expected path | Owning stage | |---|---|---| @@ -59,7 +63,6 @@ fabricate inputs. | Catalog publication profile | `catalog/_benchmark_profiles.json` + `catalog/.json` | Stages 6–7 | ```bash -# Mechanical checklist runner for path in \ reports/porting///intake.json \ tests/golden//.manifest.json \ @@ -72,35 +75,75 @@ do done ls models//-*.gguf >/dev/null 2>&1 \ && echo "OK quants" || echo "MISSING quants" -# Bench: reports/ is gitignored and each rig keeps its own JSON locally, so -# the checkable artifact is the rendered rig section in the model card. -# BOTH rigs are required. A base apple-m4 (or any other dev box) does not -# substitute for either. -for rig in "Apple M4 Max" "AMD Ryzen 7 PRO 4750U"; do - grep -q "^### $rig" docs/models/.md \ - && echo "OK bench-rig: $rig" || echo "MISSING bench-rig: $rig" -done -grep -q "^ m4-max:" scripts/hf_cards/.yaml \ - && echo "OK perf yaml m4-max" || echo "MISSING perf yaml m4-max" -grep -q "^ ryzen-4750u:" scripts/hf_cards/.yaml \ - && echo "OK perf yaml ryzen-4750u" || echo "MISSING perf yaml ryzen-4750u" -ls reports/wer/-*..score.json >/dev/null 2>&1 \ - && echo "OK wer-scores" || echo "MISSING wer-scores" +``` + +Then audit the files that will be uploaded: + +```bash +uv run --project scripts/envs/moonshine scripts/audit_gguf_metadata.py models/ +uv run scripts/catalog/sync_capabilities.py --check --models +``` + +`audit_gguf_metadata.py` exits non-zero on any metadata issue. +`sync_capabilities.py --check --models ` reads every published quant +and exits non-zero if any file is unreadable, lacks a capability KV, disagrees +with another quant, or disagrees with the record. A file and its own model +card must not contradict each other on the Hub. + +**Never hand-write the `capabilities` block.** Hand-writing it is how +moss-transcribe-diarize shipped as `diarize:false`, how the granite GGUFs came +to carry `stt.capability.translation` where the loader reads +`stt.capability.translate`, and how nemotron-3.5 shipped with no streaming KV +at all. `sync_capabilities.py` (without `--check`) reads the block back out of +the file. If it disagrees with what the model actually does, the GGUF is +wrong and the fix is a converter change plus a re-export, never an edit to the +record or the card spec. + +**Absence is not falsity.** `read_capability_bool()` leaves a field untouched +when its KV is missing, so a missing KV silently inherits the family default. +`granite/capabilities.cpp` sets `supports_translate = true` on purpose so +each variant's GGUF can lower it; `granite-speech-4.1-2b-plus` spelled that +key `stt.capability.translation`, the lowering never happened, and a model +that does not translate advertised that it does. The shared writer factory in +`scripts/lib/gguf_common.py` writes `false` for any capability KV a converter +leaves unset, so every fresh export states all four. + +**Know where the local files came from.** `models//` is for most +variants a symlink into external storage holding whatever was built there +last. That mirror can be *older* than the Hub. Before re-uploading a variant +you did not just convert, either re-download it from its published repo or +confirm the divergence is intended. + +### Step 2: Ingest measurements (execute) + +Idempotent; Stages 6 and 7 normally did this already. + +```bash +uv run scripts/catalog/ingest_perf.py +uv run scripts/catalog/ingest_accuracy.py --models +``` + +`ingest_perf.py` takes publication runs only and refuses a row whose xRT +would move more than 5% against the published value; re-bench at the current +sha rather than passing `--force`. `ingest_accuracy.py` takes profile-stamped +scores only. Confirm `headline_benchmark` is set in `catalog/.json`. + +### Step 3: Validate the publication profile (execute) + +```bash uv run scripts/catalog/check.py --publication-profile --models ``` -Any `MISSING` or publication-profile failure halts Stage 8. A -`legacy-published` provenance marker is honest migration provenance and may -satisfy the current gate; it is not permission to assign a guessed engine SHA. +A failure halts Stage 8. A `legacy-published` provenance marker is honest +migration provenance and may satisfy the gate; it is not permission to assign +a guessed engine SHA. + +### Step 4: Author prose (execute + ask-point) -A `MISSING bench-rig` is the one row that is easy to wave through, because -a model card with one rig table *looks* finished. It is not: publication -scope is two rigs (`porting-6-bench`, Reference machine matrix). Send the -user back to Stage 6 on the missing rig. The only way past it is the user -explicitly signing off on shipping with one rig, in which case the card -must name the rig the numbers were measured on. +Three files, prose only. Every number, repo, licence, language, capability, +and table is rendered from the catalog in Step 5. -### Step 2: Family doc (execute + ask-point) +### Step 4a: Family doc Open `docs/porting/families/.md`. If still the `_template.md` shape, fill it section by section by pulling facts from the artifacts: @@ -123,7 +166,7 @@ For a new family, draft the Known Limitations section from intake capabilities (streaming flag, translation flag, language coverage, timestamp granularity) plus any sharp edges the port surfaced. Do not invent limitations the port didn't discover; do not omit limitations the -capabilities flags imply. Present the draft for human review in Step 6. +capabilities flags imply. Present the draft for human review in Step 7. State the **batch and streaming** posture from the Capability Validation rows: @@ -137,7 +180,7 @@ rows: accepted gap for a natively-streaming model. If the model does not stream, omit the row. -### Step 3: User-facing model card (execute) +### Step 4b: Model page Author `docs/models/.md`. The repo ships a Jinja template at `docs/_templates/model-card.md.j2` and existing rendered cards (e.g. @@ -160,7 +203,7 @@ Two acceptable approaches: Subsequent regenerations must respect human edits. -### Step 4: HF card YAML spec (execute) +### Step 4c: HF card spec Write `scripts/hf_cards/.yaml`, mirroring a current nearby spec. It contains editorial and release state only; identity, repositories, upstream @@ -192,124 +235,70 @@ wer: ``` -Before rendering, verify that the validation pin is a real commit and its date -is today's UTC ship date (while `pin_date` is not in the future): +### Step 5: Render docs and card (execute) ```bash -uv run scripts/hf_cards/check_release.py +uv run scripts/hf_cards/check_release.py # pin_date and validation pin +uv run scripts/catalog/render.py # docs/models/*.md and the root README +uv run scripts/hf_cards/generate.py scripts/hf_cards/.yaml ``` -### Step 5: Render the HF README (execute) +`render.py` fills every marked region: download and accuracy tables, perf +tables with their provenance, the intro and WER note from the spec, family +roll-ups, and the supported-models table in the root README. `generate.py` +writes `models//README.md` from the spec and the catalog record, and +refuses a spec that states a catalog-owned field. + +### Step 6: Verify no drift (execute) ```bash -uv run scripts/hf_cards/generate.py scripts/hf_cards/.yaml +uv run scripts/catalog/format.py --check +uv run scripts/catalog/check.py --publication-profile --models +uv run scripts/catalog/render.py --check ``` -Writes `models//README.md` by default. +All three must be clean. This is what CI runs; a failure here is a failure +there. -### Step 6: Pre-upload review (ask-point) +### Step 7: Human review (ask-point) -Drafts from Steps 2, 3, and 5 are now on disk. Present three paths for -human review: +Present for review: - `docs/porting/families/.md` - `docs/models/.md` - `models//README.md` -Flag likely over-promising sections (the spec's `summary` and `wer.notes`, which -render into both the HF README and the model page; `capabilities_prose`, -Known Limitations) and wait for explicit sign-off before Step 7. - -### Step 7: Sign-off - -Report: -- All four output paths (family doc, model card, HF YAML, HF README). -- Target private HF repo. -- Pre-flight checklist outcome from Step 1. -- Push the rendered docs/README to the private repo: - ```bash - hf upload models/ . --repo-type model - ``` -- Remind the user to commit the docs/families/models/hf_cards changes. -- If this port adds a new family (or new variants under an existing - family), remind the user to update the supported-models table in the - root `README.md` so the family/variants are listed. +Flag likely over-promising sections (the spec's `summary` and `wer.notes`, +which render into both the HF README and the model page; Known Limitations) +and wait for explicit sign-off before Step 8. -**Do not commit.** Keep the repo private; flipping it public is a future -action, not part of this stage. - -## Catalog (mandatory exit step) - -**Never hand-write the `capabilities` block.** Hand-writing it is how -moss-transcribe-diarize shipped as `diarize:false`, how the granite GGUFs came -to carry `stt.capability.translation` where the loader reads -`stt.capability.translate`, and how nemotron-3.5 shipped with no streaming KV -at all. Read it back out of the file you are shipping: +### Step 8: Upload (execute) ```bash -uv run scripts/catalog/sync_capabilities.py -uv run scripts/catalog/render.py -uv run scripts/catalog/render.py --check -uv run scripts/catalog/check.py --publication-profile --models -uv run scripts/hf_cards/check_release.py +hf upload models/ . --repo-type model ``` -**Gate the upload, before `hf upload`, never after:** +Report the output paths, the target private repo, and the Step 6 results. +Remind the user to commit the catalog, docs, and spec changes. -```bash -uv run --project scripts/envs/moonshine scripts/audit_gguf_metadata.py models/ -uv run scripts/catalog/sync_capabilities.py --check --models -``` - -`audit_gguf_metadata.py` exits non-zero on any metadata issue and was written -to gate exactly this. `sync_capabilities.py --check --models ` reads -every published quant and exits non-zero if any file is unreadable, lacks a -capability KV, disagrees with another quant, or disagrees with the record: a -file and its own model card must not contradict each other on the Hub. - -**Absence is not falsity.** `read_capability_bool()` returns OK and leaves the -field untouched when a key is missing, so a missing KV silently inherits the -family default. `granite/capabilities.cpp` sets `supports_translate = true` on -purpose so each variant's GGUF can lower it; `granite-speech-4.1-2b-plus` -spelled that key `stt.capability.translation`, the lowering never happened, -and a model that does not translate advertised that it does. The shared writer -factory in `scripts/lib/gguf_common.py` now writes `false` for any capability -KV a converter leaves unset, so every fresh export states all four. - -If `sync_capabilities.py` disagrees with what the model actually does, the -GGUF is wrong and the fix is a converter change plus a re-export. Do not -paper over it with an edit to the record or the card spec. - -**Audit the file you are about to upload, and know where it came from.** -`models//` is for most variants a symlink into external storage -holding whatever was built there last. That mirror can be *older* than the -Hub: a re-export lands on the Hub and the local copy is never refreshed. Before -re-uploading a variant you did not just convert, either re-download it from -its published repo or confirm the divergence is intended. - -The HF card spec under `scripts/hf_cards/` is editorial only. `generate.py` -reads it together with `catalog/.json` and refuses a spec that states -a catalog-owned field (repos, commit, licence, languages, quants, perf, -capabilities), so a number that belongs on the card goes into the catalog -first. +**Do not commit.** Keep the repo private; flipping it public is a future +action, not part of this stage. ## Postconditions -- Pre-flight checklist and per-variant publication profile were green before - any drafting. +- Steps 1 to 3 were green before any prose was drafted. - HF validation commit exists and `validation.date` equals the UTC ship date. - `docs/porting/families/.md` filled and reviewed. -- `docs/models/.md` authored with a populated download / WER / - bench table, the bench carrying **both** rig sections (Apple M4 Max, - AMD Ryzen 7 PRO 4750U) unless the user signed off on fewer. +- `docs/models/.md` authored; its marked regions render from the + catalog. - `scripts/hf_cards/.yaml` committed-ready. -- `models//README.md` rendered. -- Docs/README pushed to the private HF repo; public flip deferred. +- `models//README.md` rendered and uploaded to the private repo; + public flip deferred. +- The root README's supported-models table renders the new variant. ## Pointers (read, not execute) - `docs/porting/families/_template.md` — family doc shape -- `docs/models/parakeet-tdt-0.6b-v2.md` — model card shape reference -- `scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml` — HF card YAML reference -- `scripts/hf_cards/template.md.j2` — Jinja template that generate.py - renders -- `scripts/hf_cards/generate.py` — renderer (execute only via Step 5) +- `docs/models/parakeet-tdt-0.6b-v2.md` — model page shape reference +- `scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml` — HF card spec reference +- `scripts/hf_cards/README.md` — the render, review, upload loop +- `scripts/catalog/render.py` — marker blocks and what each renders diff --git a/.github/workflows/catalog.yml b/.github/workflows/catalog.yml index 80c1bae6..d02da250 100644 --- a/.github/workflows/catalog.yml +++ b/.github/workflows/catalog.yml @@ -8,6 +8,9 @@ on: - "scripts/catalog/**" - "scripts/hf_cards/**" - "docs/models/**" + - "README.md" + - "scripts/bench/**" + - "scripts/wer/languages.py" - ".github/workflows/catalog.yml" push: branches: [main] @@ -16,6 +19,9 @@ on: - "scripts/catalog/**" - "scripts/hf_cards/**" - "docs/models/**" + - "README.md" + - "scripts/bench/**" + - "scripts/wer/languages.py" - ".github/workflows/catalog.yml" concurrency: @@ -42,5 +48,6 @@ jobs: run: uv run scripts/catalog/render.py --check - name: Rebuild portable database run: | + uv run --with pytest pytest -q scripts/catalog/test_db_mapping.py uv run scripts/catalog/db.py --out "$RUNNER_TEMP/catalog.db" sqlite3 "$RUNNER_TEMP/catalog.db" "PRAGMA integrity_check" diff --git a/README.md b/README.md index 97fcdcae..19c924c4 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ C/C++ speech-to-text inference library. Runs diverse STT model families via [GGU **Supported models:** -| Family | Variants | Capabilities | Docs | +| Family | Variants | Available capabilities | Docs | | --- | --- | --- | --- | | Canary | `canary-180m-flash`, `canary-1b`, `canary-1b-flash`, `canary-1b-v2` | translate | [docs/models/canary.md](docs/models/canary.md) | | Canary-Qwen 2.5B | `canary-qwen-2.5b` | - | [docs/models/canary-qwen-2.5b.md](docs/models/canary-qwen-2.5b.md) | @@ -15,6 +15,7 @@ C/C++ speech-to-text inference library. Runs diverse STT model families via [GGU | Fun-ASR-Nano | `fun-asr-mlt-nano-2512`, `fun-asr-nano-2512` | - | [docs/models/fun-asr-nano.md](docs/models/fun-asr-nano.md) | | GigaAM-v3 | `gigaam-v3-ctc`, `gigaam-v3-e2e-ctc`, `gigaam-v3-e2e-rnnt`, `gigaam-v3-rnnt` | token timestamps | [docs/models/gigaam.md](docs/models/gigaam.md) | | Granite Speech 4 / 4.1 | `granite-4.0-1b-speech`, `granite-speech-4.1-2b`, `granite-speech-4.1-2b-nar`, `granite-speech-4.1-2b-plus` | diarize, translate, word timestamps | [docs/models/granite-speech.md](docs/models/granite-speech.md) | +| Granite Speech 5.0 TurboCTC | `granite-speech-5.0-470m-turboctc`, `granite-speech-5.0-470m-turboctc-nc` | - | [docs/models/granite-speech-5.0-turboctc.md](docs/models/granite-speech-5.0-turboctc.md) | | MedASR | `medasr` | token timestamps | [docs/models/medasr.md](docs/models/medasr.md) | | Moonshine | `moonshine-base`, `moonshine-base-ar`, `moonshine-base-ja`, `moonshine-base-ko`, `moonshine-base-uk`, `moonshine-base-vi`, `moonshine-base-zh`, `moonshine-tiny`, `moonshine-tiny-ar`, `moonshine-tiny-ja`, `moonshine-tiny-ko`, `moonshine-tiny-uk`, `moonshine-tiny-vi`, `moonshine-tiny-zh` | - | [docs/models/moonshine.md](docs/models/moonshine.md) | | Moonshine Streaming | `moonshine-streaming-medium`, `moonshine-streaming-small`, `moonshine-streaming-tiny` | streaming | [docs/models/moonshine-streaming.md](docs/models/moonshine-streaming.md) | @@ -26,14 +27,14 @@ C/C++ speech-to-text inference library. Runs diverse STT model families via [GGU | Qwen3-ASR | `qwen3-asr-0.6b`, `qwen3-asr-1.7b` | - | [docs/models/qwen3-asr.md](docs/models/qwen3-asr.md) | | SenseVoice Small | `sensevoice-small` | - | [docs/models/sensevoice-small.md](docs/models/sensevoice-small.md) | | Voxtral (2507) | `voxtral-mini-3b-2507`, `voxtral-small-24b-2507` | translate | [docs/models/voxtral.md](docs/models/voxtral.md) | -| voxtral-mini-4b-realtime-2602 | `voxtral-mini-4b-realtime-2602` | streaming | [handy-computer/Voxtral-Mini-4B-Realtime-2602-gguf](https://huggingface.co/handy-computer/Voxtral-Mini-4B-Realtime-2602-gguf) | +| Voxtral Realtime (2602) | `voxtral-mini-4b-realtime-2602` | streaming | [docs/models/voxtral-realtime.md](docs/models/voxtral-realtime.md) | | Whisper | `breeze-asr-25`, `whisper-base`, `whisper-base.en`, `whisper-large`, `whisper-large-v2`, `whisper-large-v3`, `whisper-large-v3-turbo`, `whisper-medium`, `whisper-medium.en`, `whisper-small`, `whisper-small.en`, `whisper-tiny`, `whisper-tiny.en` | segment timestamps, translate | [docs/models/whisper.md](docs/models/whisper.md) | **Speaker diarization models** (no transcription; verified by DER/JER rather than WER): -| Family | Variants | Capabilities | Docs | +| Family | Variants | Available capabilities | Docs | | --- | --- | --- | --- | | Streaming Sortformer Diarizer 4spk v2.1 | `diar_streaming_sortformer_4spk-v2.1` | diarize, streaming | [docs/models/diar_streaming_sortformer_4spk-v2.1.md](docs/models/diar_streaming_sortformer_4spk-v2.1.md) | diff --git a/catalog/_benchmark_profiles.json b/catalog/_benchmark_profiles.json index e0bb1d97..3ca1737d 100644 --- a/catalog/_benchmark_profiles.json +++ b/catalog/_benchmark_profiles.json @@ -1,8 +1,77 @@ { - "default": "asr-publication-v1", + "default": "asr-publication-v2", "profiles": { + "asr-publication-v2": { + "description": "The complete benchmark set published for transcription models. v2: accuracy on L40S; batch_size is the recommended setting for new runs, and a cell is satisfied at any batch size (the row records the one used).", + "accuracy": [ + { + "dataset": "librispeech", + "split": "test-clean", + "languages": "english-if-supported", + "quants": "all-downloads", + "batch_size": 8, + "sort_by_length": true, + "timestamps": "none", + "gpu": "L40S", + "backend": "cuda" + }, + { + "dataset": "fleurs", + "split": "test", + "languages": "supported-intersect-fleurs", + "quants": [ + "Q8_0" + ], + "batch_size": 8, + "sort_by_length": true, + "timestamps": "none", + "gpu": "L40S", + "backend": "cuda" + } + ], + "speed": { + "quants": [ + "Q8_0", + "Q4_K_M" + ], + "samples": [ + "jfk", + "dots" + ], + "iterations": 3, + "warmup": 1, + "family_overrides": { + "gigaam": { + "samples": [ + "ru" + ], + "reason": "Russian-only family; use the currently published supported-language clip until a long Russian fixture is added." + } + }, + "model_overrides": {}, + "targets": [ + { + "machine": "m4-max", + "display": "Apple M4 Max", + "backends": [ + "cpu", + "metal" + ] + }, + { + "machine": "ryzen-4750u", + "display": "AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR)", + "backends": [ + "cpu", + "vulkan" + ], + "cooldown_tctl_c": 55.0 + } + ] + } + }, "asr-publication-v1": { - "description": "The complete benchmark set published for transcription models.", + "description": "Superseded by v2 (L4, LibriSpeech at batch 1); kept so rows stamped with it still resolve.", "accuracy": [ { "dataset": "librispeech", @@ -19,7 +88,9 @@ "dataset": "fleurs", "split": "test", "languages": "supported-intersect-fleurs", - "quants": ["Q8_0"], + "quants": [ + "Q8_0" + ], "batch_size": 8, "sort_by_length": true, "timestamps": "none", @@ -28,13 +99,21 @@ } ], "speed": { - "quants": ["Q8_0","Q4_K_M"], - "samples": ["jfk","dots"], + "quants": [ + "Q8_0", + "Q4_K_M" + ], + "samples": [ + "jfk", + "dots" + ], "iterations": 3, "warmup": 1, "family_overrides": { "gigaam": { - "samples": ["ru"], + "samples": [ + "ru" + ], "reason": "Russian-only family; use the currently published supported-language clip until a long Russian fixture is added." } }, @@ -43,12 +122,18 @@ { "machine": "m4-max", "display": "Apple M4 Max", - "backends": ["cpu","metal"] + "backends": [ + "cpu", + "metal" + ] }, { "machine": "ryzen-4750u", "display": "AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR)", - "backends": ["cpu","vulkan"], + "backends": [ + "cpu", + "vulkan" + ], "cooldown_tctl_c": 55.0 } ] diff --git a/catalog/_schema.json b/catalog/_schema.json index b33c52cc..6f25ad25 100644 --- a/catalog/_schema.json +++ b/catalog/_schema.json @@ -60,6 +60,10 @@ "type": "string", "description": "The upstream revision used to produce the published GGUFs." }, + "docs_page": { + "type": "string", + "description": "Filename under docs/models/ of the page that documents this variant: its own page, or the family page whose roll-up lists it. Drives the family roll-ups and the root README index." + }, "published_repo": { "type": ["string","null"], "description": "Our GGUF repo. null until published." @@ -370,6 +374,18 @@ "utts_over_50pct": { "type": ["integer","null"], "description": "Catastrophic-tail count." + }, + "publication_profile": { + "type": ["string","null"], + "description": "Id of the catalog/_benchmark_profiles.json profile whose sweep produced this row. Names the recipe; absent on rows published before profiles existed." + }, + "scoring": { + "type": "string", + "description": "A scoring step beyond the standard normalizer, e.g. \"opencc-t2s\" for Traditional-to-Simplified folding of both sides. Rows with a scoring value are a separate result set from the profile cell." + }, + "mode": { + "type": "string", + "description": "Decoding mode for models that publish one metric under several modes (multitalker \"kernel\" / \"masked\" cpWER). Rows with a mode are a separate result set." } } } @@ -472,13 +488,13 @@ "type": ["string","null"], "format": "date" }, - "os": { - "type": "string", - "description": "Operating system string the bench driver recorded (machine.os), e.g. \"macOS 26.4.1\". Provenance for the doc footer; absent on rows ingested before it was carried." - }, "thermal_gated": { "type": ["boolean","null"], "description": "Whether the machine's thermal precondition was met before this block. Not cosmetic: the same parakeet-unified CPU cells measure 8.17x realtime gated and 5.51x ungated, a 48% difference that dwarfs most code changes." + }, + "publication_profile": { + "type": ["string","null"], + "description": "Id of the profile whose bench run produced this row; it pins iterations, warmup, samples and thermal policy. Absent on rows measured before profile stamping." } } } diff --git a/catalog/breeze-asr-25.json b/catalog/breeze-asr-25.json index 1ab5e276..f485aafc 100644 --- a/catalog/breeze-asr-25.json +++ b/catalog/breeze-asr-25.json @@ -11,17 +11,8 @@ "upstream_repo": "MediaTek-Research/Breeze-ASR-25", "upstream_commit": "cffe7ccb404d025296a00758d0a33468bec3a9d0", "published_repo": "handy-computer/Breeze-ASR-25-gguf", - "languages": [ - "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", - "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", - "fo", "fr", "gl", "gu", "haw", "ha", "he", "hi", "hr", "ht", "hu", "hy", - "id", "is", "it", "ja", "jw", "ka", "kk", "km", "kn", "ko", "la", "lb", - "ln", "lo", "lt", "lv", "mg", "mi", "mk", "ml", "mn", "mr", "ms", "mt", - "my", "ne", "nl", "nn", "no", "oc", "pa", "pl", "ps", "pt", "ro", "ru", - "sa", "sd", "si", "sk", "sl", "sn", "so", "sq", "sr", "su", "sv", "sw", - "ta", "te", "tg", "th", "tk", "tl", "tr", "tt", "uk", "ur", "uz", "vi", - "yi", "yo", "zh" - ], + "docs_page": "whisper.md", + "languages": ["zh","en"], "long_form_strategy": "chunked-unbounded", "capabilities": { "transcribe": {"supported":true,"verified":false}, @@ -48,7 +39,13 @@ {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.27,"ci95":[null,null],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.29,"ci95":[null,null],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.25,"ci95":[null,null],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.26,"ci95":[null,null],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"} + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.26,"ci95":[null,null],"n_utts":2620,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"BF16","metric":"cer","err_pct":8.12,"ci95":[null,null],"n_utts":945,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published","scoring":"opencc-t2s"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"F16","metric":"cer","err_pct":8.11,"ci95":[null,null],"n_utts":945,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published","scoring":"opencc-t2s"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q8_0","metric":"cer","err_pct":8.1,"ci95":[null,null],"n_utts":945,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published","scoring":"opencc-t2s"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q6_K","metric":"cer","err_pct":8.12,"ci95":[null,null],"n_utts":945,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published","scoring":"opencc-t2s"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q5_K_M","metric":"cer","err_pct":8.12,"ci95":[null,null],"n_utts":945,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published","scoring":"opencc-t2s"}, + {"dataset":"fleurs","split":"test","language":"zh","quant":"Q4_K_M","metric":"cer","err_pct":8.08,"ci95":[null,null],"n_utts":945,"batch_size":1,"timestamps":"segment","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published","scoring":"opencc-t2s"} ], "headline_benchmark": { "dataset": "librispeech", diff --git a/catalog/canary-180m-flash.json b/catalog/canary-180m-flash.json index 4735dbb7..894975ef 100644 --- a/catalog/canary-180m-flash.json +++ b/catalog/canary-180m-flash.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/canary-180m-flash", "upstream_commit": "b12ab41", "published_repo": "handy-computer/canary-180m-flash-gguf", + "docs_page": "canary.md", "languages": ["en","de","es","fr"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/canary-1b-flash.json b/catalog/canary-1b-flash.json index 88facb28..e6fde46f 100644 --- a/catalog/canary-1b-flash.json +++ b/catalog/canary-1b-flash.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/canary-1b-flash", "upstream_commit": "a9a55e0", "published_repo": "handy-computer/canary-1b-flash-gguf", + "docs_page": "canary.md", "languages": ["en","de","es","fr"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/canary-1b-v2.json b/catalog/canary-1b-v2.json index 28f41155..2167bdec 100644 --- a/catalog/canary-1b-v2.json +++ b/catalog/canary-1b-v2.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/canary-1b-v2", "upstream_commit": "87bc526", "published_repo": "handy-computer/canary-1b-v2-gguf", + "docs_page": "canary.md", "languages": [ "bg", "hr", "cs", "da", "nl", "en", "et", "fi", "fr", "de", "el", "hu", "it", "lv", "lt", "mt", "pl", "pt", "ro", "sk", "sl", "es", "sv", "ru", diff --git a/catalog/canary-1b.json b/catalog/canary-1b.json index 602c463b..b72754e1 100644 --- a/catalog/canary-1b.json +++ b/catalog/canary-1b.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/canary-1b", "upstream_commit": "1698acf", "published_repo": "handy-computer/canary-1b-gguf", + "docs_page": "canary.md", "languages": ["en","de","es","fr"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/canary-qwen-2.5b.json b/catalog/canary-qwen-2.5b.json index bbd8bc7a..fe16d0b2 100644 --- a/catalog/canary-qwen-2.5b.json +++ b/catalog/canary-qwen-2.5b.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/canary-qwen-2.5b", "upstream_commit": "b1469e1bba1cfe140205529c79c434ca47180960", "published_repo": "handy-computer/canary-qwen-2.5b-gguf", + "docs_page": "canary-qwen-2.5b.md", "languages": ["en"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/cohere-transcribe-03-2026.json b/catalog/cohere-transcribe-03-2026.json index 374c23d6..3cc27a75 100644 --- a/catalog/cohere-transcribe-03-2026.json +++ b/catalog/cohere-transcribe-03-2026.json @@ -11,6 +11,7 @@ "upstream_repo": "CohereLabs/cohere-transcribe-03-2026", "upstream_commit": "76b8b23", "published_repo": "handy-computer/cohere-transcribe-03-2026-gguf", + "docs_page": "cohere.md", "languages": ["en","fr","de","es","it","pt","nl","pl","el","ar","ja","zh","vi","ko"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/cohere-transcribe-arabic-07-2026.json b/catalog/cohere-transcribe-arabic-07-2026.json index 9a537b94..f72ce5e4 100644 --- a/catalog/cohere-transcribe-arabic-07-2026.json +++ b/catalog/cohere-transcribe-arabic-07-2026.json @@ -11,6 +11,7 @@ "upstream_repo": "CohereLabs/cohere-transcribe-arabic-07-2026", "upstream_commit": "0a8193c", "published_repo": "handy-computer/cohere-transcribe-arabic-07-2026-gguf", + "docs_page": "cohere.md", "languages": ["en","ar"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/diar_streaming_sortformer_4spk-v2.1.json b/catalog/diar_streaming_sortformer_4spk-v2.1.json index 1f2f6712..3e243a66 100644 --- a/catalog/diar_streaming_sortformer_4spk-v2.1.json +++ b/catalog/diar_streaming_sortformer_4spk-v2.1.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/diar_streaming_sortformer_4spk-v2.1", "upstream_commit": "fafaab5", "published_repo": "handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf", + "docs_page": "diar_streaming_sortformer_4spk-v2.1.md", "languages": ["en"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/fun-asr-mlt-nano-2512.json b/catalog/fun-asr-mlt-nano-2512.json index d0dc6a54..c676ef27 100644 --- a/catalog/fun-asr-mlt-nano-2512.json +++ b/catalog/fun-asr-mlt-nano-2512.json @@ -11,6 +11,7 @@ "upstream_repo": "FunAudioLLM/Fun-ASR-MLT-Nano-2512", "upstream_commit": "cf67a938bf2829959d08fdfb84e186eff02a67ff", "published_repo": "handy-computer/Fun-ASR-MLT-Nano-2512-gguf", + "docs_page": "fun-asr-nano.md", "languages": [ "zh", "en", "yue", "ja", "ko", "vi", "id", "th", "ms", "tl", "ar", "hi", "bg", "hr", "cs", "da", "nl", "et", "fi", "el", "hu", "ga", "lv", "lt", diff --git a/catalog/fun-asr-nano-2512.json b/catalog/fun-asr-nano-2512.json index 40854fab..dd0f22a0 100644 --- a/catalog/fun-asr-nano-2512.json +++ b/catalog/fun-asr-nano-2512.json @@ -11,6 +11,7 @@ "upstream_repo": "FunAudioLLM/Fun-ASR-Nano-2512", "upstream_commit": "a7088d620f755dcdca575b63db184c3ad55b2865", "published_repo": "handy-computer/Fun-ASR-Nano-2512-gguf", + "docs_page": "fun-asr-nano.md", "languages": ["zh","en","ja"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/gigaam-v3-ctc.json b/catalog/gigaam-v3-ctc.json index f508038a..10174e61 100644 --- a/catalog/gigaam-v3-ctc.json +++ b/catalog/gigaam-v3-ctc.json @@ -11,6 +11,7 @@ "upstream_repo": "ai-sage/GigaAM-v3", "upstream_commit": "15ef3b5", "published_repo": "handy-computer/gigaam-v3-ctc-gguf", + "docs_page": "gigaam.md", "languages": ["ru"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/gigaam-v3-e2e-ctc.json b/catalog/gigaam-v3-e2e-ctc.json index 0678dac2..4e6eb5cb 100644 --- a/catalog/gigaam-v3-e2e-ctc.json +++ b/catalog/gigaam-v3-e2e-ctc.json @@ -11,6 +11,7 @@ "upstream_repo": "ai-sage/GigaAM-v3", "upstream_commit": "cec030b", "published_repo": "handy-computer/gigaam-v3-e2e-ctc-gguf", + "docs_page": "gigaam.md", "languages": ["ru"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/gigaam-v3-e2e-rnnt.json b/catalog/gigaam-v3-e2e-rnnt.json index fbd3ae8d..3c682c19 100644 --- a/catalog/gigaam-v3-e2e-rnnt.json +++ b/catalog/gigaam-v3-e2e-rnnt.json @@ -11,6 +11,7 @@ "upstream_repo": "ai-sage/GigaAM-v3", "upstream_commit": "ec1dc1f", "published_repo": "handy-computer/gigaam-v3-e2e-rnnt-gguf", + "docs_page": "gigaam.md", "languages": ["ru"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/gigaam-v3-rnnt.json b/catalog/gigaam-v3-rnnt.json index 91620fca..1ca7b5d6 100644 --- a/catalog/gigaam-v3-rnnt.json +++ b/catalog/gigaam-v3-rnnt.json @@ -11,6 +11,7 @@ "upstream_repo": "ai-sage/GigaAM-v3", "upstream_commit": "c7f128b", "published_repo": "handy-computer/gigaam-v3-rnnt-gguf", + "docs_page": "gigaam.md", "languages": ["ru"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/granite-4.0-1b-speech.json b/catalog/granite-4.0-1b-speech.json index e4891c59..bdf01059 100644 --- a/catalog/granite-4.0-1b-speech.json +++ b/catalog/granite-4.0-1b-speech.json @@ -11,6 +11,7 @@ "upstream_repo": "ibm-granite/granite-4.0-1b-speech", "upstream_commit": "bd87ab8", "published_repo": "handy-computer/granite-4.0-1b-speech-gguf", + "docs_page": "granite-speech.md", "languages": ["en","fr","de","es","pt","ja"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/granite-speech-4.1-2b-nar.json b/catalog/granite-speech-4.1-2b-nar.json index e530f170..e77c2387 100644 --- a/catalog/granite-speech-4.1-2b-nar.json +++ b/catalog/granite-speech-4.1-2b-nar.json @@ -11,6 +11,7 @@ "upstream_repo": "ibm-granite/granite-speech-4.1-2b-nar", "upstream_commit": "99a4df9", "published_repo": "handy-computer/granite-speech-4.1-2b-nar-gguf", + "docs_page": "granite-speech.md", "languages": ["en","fr","de","es","pt"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/granite-speech-4.1-2b-plus.json b/catalog/granite-speech-4.1-2b-plus.json index 55d43428..c95737ba 100644 --- a/catalog/granite-speech-4.1-2b-plus.json +++ b/catalog/granite-speech-4.1-2b-plus.json @@ -11,6 +11,7 @@ "upstream_repo": "ibm-granite/granite-speech-4.1-2b-plus", "upstream_commit": "edd3bf5", "published_repo": "handy-computer/granite-speech-4.1-2b-plus-gguf", + "docs_page": "granite-speech.md", "languages": ["en","fr","de","es","pt"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/granite-speech-4.1-2b.json b/catalog/granite-speech-4.1-2b.json index a917940d..53ecfa7b 100644 --- a/catalog/granite-speech-4.1-2b.json +++ b/catalog/granite-speech-4.1-2b.json @@ -11,6 +11,7 @@ "upstream_repo": "ibm-granite/granite-speech-4.1-2b", "upstream_commit": "8f4bb5f", "published_repo": "handy-computer/granite-speech-4.1-2b-gguf", + "docs_page": "granite-speech.md", "languages": ["en","fr","de","es","pt","ja"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/granite-speech-5.0-470m-turboctc-nc.json b/catalog/granite-speech-5.0-470m-turboctc-nc.json new file mode 100644 index 00000000..9d323c7f --- /dev/null +++ b/catalog/granite-speech-5.0-470m-turboctc-nc.json @@ -0,0 +1,70 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "granite-speech-5.0-470m-turboctc-nc", + "family": "granite5_ctc", + "display_name": "Granite Speech 5.0 470M TurboCTC NC", + "params": 473014752, + "license": { + "spdx": "cc-by-nc-sa-4.0", + "display": "CC-BY-NC-SA-4.0" + }, + "upstream_repo": "ibm-granite/granite-speech-5.0-470m-turboctc-nc", + "upstream_commit": "0eb7b4f", + "published_repo": "handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf", + "docs_page": "granite-speech-5.0-turboctc.md", + "languages": ["en"], + "language_tag_form": "bare-bcp47", + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"granite-speech-5.0-470m-turboctc-nc-BF16.gguf","size_bytes":948103840}, + {"quant":"F16","filename":"granite-speech-5.0-470m-turboctc-nc-F16.gguf","size_bytes":948562592}, + {"quant":"Q8_0","filename":"granite-speech-5.0-470m-turboctc-nc-Q8_0.gguf","size_bytes":505885856}, + {"quant":"Q6_K","filename":"granite-speech-5.0-470m-turboctc-nc-Q6_K.gguf","size_bytes":392115360}, + {"quant":"Q5_K_M","filename":"granite-speech-5.0-470m-turboctc-nc-Q5_K_M.gguf","size_bytes":336016544}, + {"quant":"Q4_K_M","filename":"granite-speech-5.0-470m-turboctc-nc-Q4_K_M.gguf","size_bytes":279393440} + ], + "accuracy_benchmarks": [ + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"BF16","metric":"wer","err_pct":1.29,"ci95":[1.17,1.44],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":520,"del":83,"ins":82},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"F16","metric":"wer","err_pct":1.28,"ci95":[1.16,1.42],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":515,"del":81,"ins":82},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":1.29,"ci95":[1.17,1.44],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":521,"del":83,"ins":82},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q6_K","metric":"wer","err_pct":1.29,"ci95":[1.17,1.43],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":523,"del":81,"ins":82},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q5_K_M","metric":"wer","err_pct":1.29,"ci95":[1.17,1.43],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":520,"del":82,"ins":83},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q4_K_M","metric":"wer","err_pct":1.34,"ci95":[1.21,1.49],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":534,"del":86,"ins":90},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"en","language_hint":"en","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":4.3,"ci95":[3.86,4.76],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":432,"del":130,"ins":64},"empty_hyp":0,"utts_over_50pct":0} + ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": null, + "timestamps": "none" + }, + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":684.8,"xrt_compute":51.59,"wall_ms":686.7,"xrt_wall":51.45,"load_ms":89.0,"mel_ms":2.0,"encode_ms":670.6,"decode_ms":12.2,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":231.8,"xrt_compute":47.46,"wall_ms":233.0,"xrt_wall":47.21,"load_ms":83.3,"mel_ms":0.8,"encode_ms":227.8,"decode_ms":3.2,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":694.0,"xrt_compute":50.91,"wall_ms":696.4,"xrt_wall":50.73,"load_ms":127.3,"mel_ms":2.2,"encode_ms":679.5,"decode_ms":12.3,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":231.4,"xrt_compute":47.54,"wall_ms":232.6,"xrt_wall":47.29,"load_ms":138.2,"mel_ms":0.7,"encode_ms":227.4,"decode_ms":3.3,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":83.0,"xrt_compute":425.61,"wall_ms":87.2,"xrt_wall":405.09,"load_ms":87.7,"mel_ms":1.9,"encode_ms":70.2,"decode_ms":10.9,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":36.3,"xrt_compute":303.27,"wall_ms":38.1,"xrt_wall":288.74,"load_ms":94.7,"mel_ms":0.7,"encode_ms":32.6,"decode_ms":3.0,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":81.1,"xrt_compute":435.64,"wall_ms":85.3,"xrt_wall":414.44,"load_ms":123.5,"mel_ms":1.9,"encode_ms":67.8,"decode_ms":11.4,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":35.2,"xrt_compute":312.62,"wall_ms":37.0,"xrt_wall":297.32,"load_ms":124.4,"mel_ms":0.7,"encode_ms":31.6,"decode_ms":2.9,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2244.6,"xrt_compute":15.74,"wall_ms":2263.2,"xrt_wall":15.61,"load_ms":211.8,"mel_ms":43.8,"encode_ms":2179.8,"decode_ms":21.1,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":647.7,"xrt_compute":16.98,"wall_ms":653.9,"xrt_wall":16.82,"load_ms":339.9,"mel_ms":13.8,"encode_ms":630.5,"decode_ms":3.4,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2247.4,"xrt_compute":15.72,"wall_ms":2266.9,"xrt_wall":15.59,"load_ms":370.0,"mel_ms":43.7,"encode_ms":2182.6,"decode_ms":21.1,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":694.5,"xrt_compute":15.84,"wall_ms":701.5,"xrt_wall":15.68,"load_ms":537.9,"mel_ms":16.9,"encode_ms":671.8,"decode_ms":5.9,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1339.8,"xrt_compute":26.37,"wall_ms":1515.3,"xrt_wall":23.32,"load_ms":131.0,"mel_ms":47.5,"encode_ms":1277.3,"decode_ms":15.0,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":597.8,"xrt_compute":18.4,"wall_ms":646.6,"xrt_wall":17.01,"load_ms":132.1,"mel_ms":15.1,"encode_ms":579.2,"decode_ms":3.5,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1315.4,"xrt_compute":26.86,"wall_ms":1494.8,"xrt_wall":23.64,"load_ms":221.7,"mel_ms":47.0,"encode_ms":1253.0,"decode_ms":15.4,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":585.3,"xrt_compute":18.79,"wall_ms":630.5,"xrt_wall":17.45,"load_ms":222.8,"mel_ms":15.0,"encode_ms":566.8,"decode_ms":3.5,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"} + ] +} diff --git a/catalog/granite-speech-5.0-470m-turboctc.json b/catalog/granite-speech-5.0-470m-turboctc.json new file mode 100644 index 00000000..c4dab559 --- /dev/null +++ b/catalog/granite-speech-5.0-470m-turboctc.json @@ -0,0 +1,70 @@ +{ + "schema": "transcribe-catalog-v1", + "variant": "granite-speech-5.0-470m-turboctc", + "family": "granite5_ctc", + "display_name": "Granite Speech 5.0 470M TurboCTC", + "params": 473014752, + "license": { + "spdx": "apache-2.0", + "display": "Apache-2.0" + }, + "upstream_repo": "ibm-granite/granite-speech-5.0-470m-turboctc", + "upstream_commit": "18ca3c1", + "published_repo": "handy-computer/granite-speech-5.0-470m-turboctc-gguf", + "docs_page": "granite-speech-5.0-turboctc.md", + "languages": ["en"], + "language_tag_form": "bare-bcp47", + "long_form_strategy": "soft-window", + "capabilities": { + "transcribe": {"supported":true,"verified":false}, + "translate": {"supported":false}, + "lang_detect": {"supported":false}, + "timestamps": {"supported":false}, + "streaming": {"supported":false}, + "diarize": {"supported":false}, + "batching": {"supported":true,"verified":false} + }, + "downloads": [ + {"quant":"BF16","filename":"granite-speech-5.0-470m-turboctc-BF16.gguf","size_bytes":947824480}, + {"quant":"F16","filename":"granite-speech-5.0-470m-turboctc-F16.gguf","size_bytes":947824480}, + {"quant":"Q8_0","filename":"granite-speech-5.0-470m-turboctc-Q8_0.gguf","size_bytes":505606496}, + {"quant":"Q6_K","filename":"granite-speech-5.0-470m-turboctc-Q6_K.gguf","size_bytes":391836000}, + {"quant":"Q5_K_M","filename":"granite-speech-5.0-470m-turboctc-Q5_K_M.gguf","size_bytes":335737184}, + {"quant":"Q4_K_M","filename":"granite-speech-5.0-470m-turboctc-Q4_K_M.gguf","size_bytes":279114080} + ], + "accuracy_benchmarks": [ + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"BF16","metric":"wer","err_pct":1.34,"ci95":[1.21,1.47],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":529,"del":87,"ins":92},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"F16","metric":"wer","err_pct":1.33,"ci95":[1.2,1.47],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":527,"del":87,"ins":92},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":1.33,"ci95":[1.2,1.46],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":527,"del":85,"ins":92},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q6_K","metric":"wer","err_pct":1.33,"ci95":[1.2,1.46],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":524,"del":88,"ins":93},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q5_K_M","metric":"wer","err_pct":1.34,"ci95":[1.21,1.47],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":531,"del":86,"ins":93},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"librispeech","split":"test-clean","language":"en","language_hint":"en","backend":"cuda","quant":"Q4_K_M","metric":"wer","err_pct":1.35,"ci95":[1.22,1.49],"n_utts":2620,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":533,"del":91,"ins":92},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"en","language_hint":"en","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":4.61,"ci95":[4.19,5.07],"n_utts":647,"batch_size":8,"timestamps":"none","engine_sha":"9daf396","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":477,"del":115,"ins":79},"empty_hyp":0,"utts_over_50pct":1} + ], + "headline_benchmark": { + "dataset": "librispeech", + "split": "test-clean", + "language": "en", + "metric": "wer", + "batch_size": null, + "timestamps": "none" + }, + "speed_benchmarks": [ + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":686.7,"xrt_compute":51.45,"wall_ms":689.2,"xrt_wall":51.27,"load_ms":84.2,"mel_ms":2.2,"encode_ms":672.1,"decode_ms":12.4,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":231.4,"xrt_compute":47.53,"wall_ms":232.6,"xrt_wall":47.28,"load_ms":81.9,"mel_ms":0.8,"encode_ms":227.4,"decode_ms":3.3,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":700.2,"xrt_compute":50.46,"wall_ms":702.7,"xrt_wall":50.28,"load_ms":127.5,"mel_ms":2.2,"encode_ms":685.4,"decode_ms":12.6,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":230.2,"xrt_compute":47.79,"wall_ms":231.6,"xrt_wall":47.5,"load_ms":127.5,"mel_ms":0.8,"encode_ms":226.1,"decode_ms":3.3,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":83.8,"xrt_compute":421.77,"wall_ms":87.9,"xrt_wall":402.01,"load_ms":83.6,"mel_ms":1.9,"encode_ms":70.8,"decode_ms":11.0,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":37.0,"xrt_compute":297.06,"wall_ms":38.9,"xrt_wall":282.86,"load_ms":118.7,"mel_ms":0.7,"encode_ms":33.4,"decode_ms":2.9,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":81.4,"xrt_compute":433.84,"wall_ms":85.6,"xrt_wall":412.8,"load_ms":129.7,"mel_ms":1.9,"encode_ms":68.4,"decode_ms":11.1,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":35.7,"xrt_compute":308.18,"wall_ms":37.5,"xrt_wall":293.12,"load_ms":129.8,"mel_ms":0.7,"encode_ms":32.0,"decode_ms":2.9,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2233.7,"xrt_compute":15.82,"wall_ms":2252.6,"xrt_wall":15.69,"load_ms":214.7,"mel_ms":44.6,"encode_ms":2168.3,"decode_ms":20.8,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":654.7,"xrt_compute":16.8,"wall_ms":663.3,"xrt_wall":16.58,"load_ms":305.7,"mel_ms":14.3,"encode_ms":635.5,"decode_ms":5.0,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2257.8,"xrt_compute":15.65,"wall_ms":2277.6,"xrt_wall":15.51,"load_ms":373.4,"mel_ms":43.7,"encode_ms":2193.0,"decode_ms":21.0,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":689.0,"xrt_compute":15.97,"wall_ms":695.9,"xrt_wall":15.81,"load_ms":541.7,"mel_ms":17.5,"encode_ms":665.7,"decode_ms":5.8,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1336.4,"xrt_compute":26.44,"wall_ms":1513.3,"xrt_wall":23.35,"load_ms":132.9,"mel_ms":45.7,"encode_ms":1275.8,"decode_ms":14.9,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":600.3,"xrt_compute":18.33,"wall_ms":647.3,"xrt_wall":16.99,"load_ms":138.1,"mel_ms":15.9,"encode_ms":580.9,"decode_ms":3.5,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1298.0,"xrt_compute":27.22,"wall_ms":1475.0,"xrt_wall":23.95,"load_ms":229.1,"mel_ms":47.8,"encode_ms":1235.4,"decode_ms":14.8,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":590.8,"xrt_compute":18.62,"wall_ms":652.1,"xrt_wall":16.87,"load_ms":226.0,"mel_ms":15.5,"encode_ms":571.9,"decode_ms":3.5,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"} + ] +} diff --git a/catalog/medasr.json b/catalog/medasr.json index d9eb5c9c..b28fd3a9 100644 --- a/catalog/medasr.json +++ b/catalog/medasr.json @@ -11,6 +11,7 @@ "upstream_repo": "google/medasr", "upstream_commit": "ae1e484", "published_repo": "handy-computer/medasr-gguf", + "docs_page": "medasr.md", "languages": ["en"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-base-ar.json b/catalog/moonshine-base-ar.json index 2f01741e..c84346d0 100644 --- a/catalog/moonshine-base-ar.json +++ b/catalog/moonshine-base-ar.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-base-ar", "upstream_commit": "264cc18", "published_repo": "handy-computer/moonshine-base-ar-gguf", + "docs_page": "moonshine.md", "languages": ["ar"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-base-ja.json b/catalog/moonshine-base-ja.json index f367dbac..8fa5dea8 100644 --- a/catalog/moonshine-base-ja.json +++ b/catalog/moonshine-base-ja.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-base-ja", "upstream_commit": "f9d4e6a", "published_repo": "handy-computer/moonshine-base-ja-gguf", + "docs_page": "moonshine.md", "languages": ["ja"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-base-ko.json b/catalog/moonshine-base-ko.json index bdf71e50..13d57539 100644 --- a/catalog/moonshine-base-ko.json +++ b/catalog/moonshine-base-ko.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-base-ko", "upstream_commit": "fff6035", "published_repo": "handy-computer/moonshine-base-ko-gguf", + "docs_page": "moonshine.md", "languages": ["ko"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-base-uk.json b/catalog/moonshine-base-uk.json index b308e3fa..819b882c 100644 --- a/catalog/moonshine-base-uk.json +++ b/catalog/moonshine-base-uk.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-base-uk", "upstream_commit": "a52b2e9", "published_repo": "handy-computer/moonshine-base-uk-gguf", + "docs_page": "moonshine.md", "languages": ["uk"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-base-vi.json b/catalog/moonshine-base-vi.json index a6fe362d..1a361994 100644 --- a/catalog/moonshine-base-vi.json +++ b/catalog/moonshine-base-vi.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-base-vi", "upstream_commit": "0ee9ce9", "published_repo": "handy-computer/moonshine-base-vi-gguf", + "docs_page": "moonshine.md", "languages": ["vi"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-base-zh.json b/catalog/moonshine-base-zh.json index a519862b..39b2a35e 100644 --- a/catalog/moonshine-base-zh.json +++ b/catalog/moonshine-base-zh.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-base-zh", "upstream_commit": "1df4f95", "published_repo": "handy-computer/moonshine-base-zh-gguf", + "docs_page": "moonshine.md", "languages": ["zh"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-base.json b/catalog/moonshine-base.json index ebc0ea8f..f678ef35 100644 --- a/catalog/moonshine-base.json +++ b/catalog/moonshine-base.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-base", "upstream_commit": "7a73d8d", "published_repo": "handy-computer/moonshine-base-gguf", + "docs_page": "moonshine.md", "languages": ["en"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-streaming-medium.json b/catalog/moonshine-streaming-medium.json index aa34806e..59a6ca19 100644 --- a/catalog/moonshine-streaming-medium.json +++ b/catalog/moonshine-streaming-medium.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-streaming-medium", "upstream_commit": "57b8436", "published_repo": "handy-computer/moonshine-streaming-medium-gguf", + "docs_page": "moonshine-streaming.md", "languages": ["en"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-streaming-small.json b/catalog/moonshine-streaming-small.json index 2f9e7107..1ddea8a2 100644 --- a/catalog/moonshine-streaming-small.json +++ b/catalog/moonshine-streaming-small.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-streaming-small", "upstream_commit": "2c03650", "published_repo": "handy-computer/moonshine-streaming-small-gguf", + "docs_page": "moonshine-streaming.md", "languages": ["en"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-streaming-tiny.json b/catalog/moonshine-streaming-tiny.json index 804e04f1..59dbd948 100644 --- a/catalog/moonshine-streaming-tiny.json +++ b/catalog/moonshine-streaming-tiny.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-streaming-tiny", "upstream_commit": "f8e9dfd", "published_repo": "handy-computer/moonshine-streaming-tiny-gguf", + "docs_page": "moonshine-streaming.md", "languages": ["en"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-tiny-ar.json b/catalog/moonshine-tiny-ar.json index 7c69056e..6a3cae6c 100644 --- a/catalog/moonshine-tiny-ar.json +++ b/catalog/moonshine-tiny-ar.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-tiny-ar", "upstream_commit": "99e7fee", "published_repo": "handy-computer/moonshine-tiny-ar-gguf", + "docs_page": "moonshine.md", "languages": ["ar"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-tiny-ja.json b/catalog/moonshine-tiny-ja.json index a2bf33ea..a385cc7c 100644 --- a/catalog/moonshine-tiny-ja.json +++ b/catalog/moonshine-tiny-ja.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-tiny-ja", "upstream_commit": "02ca41b", "published_repo": "handy-computer/moonshine-tiny-ja-gguf", + "docs_page": "moonshine.md", "languages": ["ja"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-tiny-ko.json b/catalog/moonshine-tiny-ko.json index 4178ce1b..e0ac0c8c 100644 --- a/catalog/moonshine-tiny-ko.json +++ b/catalog/moonshine-tiny-ko.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-tiny-ko", "upstream_commit": "80995f0", "published_repo": "handy-computer/moonshine-tiny-ko-gguf", + "docs_page": "moonshine.md", "languages": ["ko"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-tiny-uk.json b/catalog/moonshine-tiny-uk.json index 3e85e473..0abdf5a1 100644 --- a/catalog/moonshine-tiny-uk.json +++ b/catalog/moonshine-tiny-uk.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-tiny-uk", "upstream_commit": "8cf70f4", "published_repo": "handy-computer/moonshine-tiny-uk-gguf", + "docs_page": "moonshine.md", "languages": ["uk"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-tiny-vi.json b/catalog/moonshine-tiny-vi.json index 1dff0dcb..f2714319 100644 --- a/catalog/moonshine-tiny-vi.json +++ b/catalog/moonshine-tiny-vi.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-tiny-vi", "upstream_commit": "d4d20da", "published_repo": "handy-computer/moonshine-tiny-vi-gguf", + "docs_page": "moonshine.md", "languages": ["vi"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-tiny-zh.json b/catalog/moonshine-tiny-zh.json index 96b84d88..a9fcc6ce 100644 --- a/catalog/moonshine-tiny-zh.json +++ b/catalog/moonshine-tiny-zh.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-tiny-zh", "upstream_commit": "3306270", "published_repo": "handy-computer/moonshine-tiny-zh-gguf", + "docs_page": "moonshine.md", "languages": ["zh"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moonshine-tiny.json b/catalog/moonshine-tiny.json index 78039c41..aec729a4 100644 --- a/catalog/moonshine-tiny.json +++ b/catalog/moonshine-tiny.json @@ -11,6 +11,7 @@ "upstream_repo": "UsefulSensors/moonshine-tiny", "upstream_commit": "390624e", "published_repo": "handy-computer/moonshine-tiny-gguf", + "docs_page": "moonshine.md", "languages": ["en"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/moss-transcribe-diarize.json b/catalog/moss-transcribe-diarize.json index 0f1f20da..9506ead9 100644 --- a/catalog/moss-transcribe-diarize.json +++ b/catalog/moss-transcribe-diarize.json @@ -11,6 +11,7 @@ "upstream_repo": "OpenMOSS-Team/MOSS-Transcribe-Diarize", "upstream_commit": "d7231bb", "published_repo": "handy-computer/MOSS-Transcribe-Diarize-gguf", + "docs_page": "moss-transcribe-diarize.md", "languages": ["en","zh"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/multitalker-parakeet-streaming-0.6b-v1.json b/catalog/multitalker-parakeet-streaming-0.6b-v1.json index b3f478c0..83cd2fde 100644 --- a/catalog/multitalker-parakeet-streaming-0.6b-v1.json +++ b/catalog/multitalker-parakeet-streaming-0.6b-v1.json @@ -13,6 +13,7 @@ "upstream_repo": "nvidia/multitalker-parakeet-streaming-0.6b-v1", "upstream_commit": "8749fc7", "published_repo": "handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf", + "docs_page": "multitalker-parakeet-streaming-0.6b-v1.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { @@ -39,7 +40,9 @@ {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q8_0","metric":"wer","err_pct":2.18,"ci95":[2.02,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":173,"ins":114},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q6_K","metric":"wer","err_pct":2.2,"ci95":[2.04,2.38],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":875,"del":174,"ins":119},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.18,"ci95":[2.01,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":169,"ins":116},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, - {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.18,"ci95":[2.02,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":864,"del":176,"ins":117},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"} + {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.18,"ci95":[2.02,2.36],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":864,"del":176,"ins":117},"empty_hyp":0,"utts_over_50pct":5,"measurement_provenance":"legacy-published"}, + {"dataset":"ami","split":"ihm-test","language":"en","backend":"cuda","quant":"F32","metric":"cpwer","err_pct":19.35,"ci95":[null,null],"n_utts":16,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published","mode":"kernel"}, + {"dataset":"ami","split":"ihm-test","language":"en","backend":"cuda","quant":"F32","metric":"cpwer","err_pct":23.73,"ci95":[null,null],"n_utts":16,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"measurement_provenance":"legacy-published","mode":"masked"} ], "headline_benchmark": { "dataset": "librispeech", diff --git a/catalog/nemotron-3.5-asr-streaming-0.6b.json b/catalog/nemotron-3.5-asr-streaming-0.6b.json index 84330993..7e184ebe 100644 --- a/catalog/nemotron-3.5-asr-streaming-0.6b.json +++ b/catalog/nemotron-3.5-asr-streaming-0.6b.json @@ -13,6 +13,7 @@ "upstream_repo": "nvidia/nemotron-3.5-asr-streaming-0.6b", "upstream_commit": "24b151a", "published_repo": "handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf", + "docs_page": "nemotron-3.5-asr-streaming-0.6b.md", "languages": [ "en-US", "en-GB", "es-US", "es-ES", "fr-FR", "fr-CA", "it-IT", "pt-BR", "pt-PT", "nl-NL", "de-DE", "tr-TR", "ru-RU", "ar-AR", "hi-IN", "ja-JP", diff --git a/catalog/nemotron-speech-streaming-en-0.6b.json b/catalog/nemotron-speech-streaming-en-0.6b.json index a8d1a38e..7b453a9d 100644 --- a/catalog/nemotron-speech-streaming-en-0.6b.json +++ b/catalog/nemotron-speech-streaming-en-0.6b.json @@ -13,6 +13,7 @@ "upstream_repo": "nvidia/nemotron-speech-streaming-en-0.6b", "upstream_commit": "ef3bf40", "published_repo": "handy-computer/nemotron-speech-streaming-en-0.6b-gguf", + "docs_page": "nemotron-speech-streaming-en-0.6b.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/parakeet-ctc-0.6b.json b/catalog/parakeet-ctc-0.6b.json index 7c705f95..cab83772 100644 --- a/catalog/parakeet-ctc-0.6b.json +++ b/catalog/parakeet-ctc-0.6b.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/parakeet-ctc-0.6b", "upstream_commit": "ad09ba1", "published_repo": "handy-computer/parakeet-ctc-0.6b-gguf", + "docs_page": "parakeet.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/parakeet-ctc-1.1b.json b/catalog/parakeet-ctc-1.1b.json index 2fc0fe32..91f57f44 100644 --- a/catalog/parakeet-ctc-1.1b.json +++ b/catalog/parakeet-ctc-1.1b.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/parakeet-ctc-1.1b", "upstream_commit": "a707e81", "published_repo": "handy-computer/parakeet-ctc-1.1b-gguf", + "docs_page": "parakeet.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/parakeet-primeline.json b/catalog/parakeet-primeline.json index f38795d8..251a7db7 100644 --- a/catalog/parakeet-primeline.json +++ b/catalog/parakeet-primeline.json @@ -11,6 +11,7 @@ "upstream_repo": "primeline/parakeet-primeline", "upstream_commit": "3f1a9bc", "published_repo": "handy-computer/parakeet-primeline-gguf", + "docs_page": "parakeet.md", "languages": [ "bg", "hr", "cs", "da", "nl", "en", "et", "fi", "fr", "de", "el", "hu", "it", "lv", "lt", "mt", "pl", "pt", "ro", "ru", "sk", "sl", "es", "sv", diff --git a/catalog/parakeet-rnnt-0.6b.json b/catalog/parakeet-rnnt-0.6b.json index 3d024098..b0a236a8 100644 --- a/catalog/parakeet-rnnt-0.6b.json +++ b/catalog/parakeet-rnnt-0.6b.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/parakeet-rnnt-0.6b", "upstream_commit": "c0c1f09", "published_repo": "handy-computer/parakeet-rnnt-0.6b-gguf", + "docs_page": "parakeet.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/parakeet-rnnt-1.1b.json b/catalog/parakeet-rnnt-1.1b.json index d111acd6..1cbc6e6c 100644 --- a/catalog/parakeet-rnnt-1.1b.json +++ b/catalog/parakeet-rnnt-1.1b.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/parakeet-rnnt-1.1b", "upstream_commit": "a07b19e", "published_repo": "handy-computer/parakeet-rnnt-1.1b-gguf", + "docs_page": "parakeet.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/parakeet-tdt-0.6b-v2.json b/catalog/parakeet-tdt-0.6b-v2.json index e86cdd63..fb96e8e5 100644 --- a/catalog/parakeet-tdt-0.6b-v2.json +++ b/catalog/parakeet-tdt-0.6b-v2.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/parakeet-tdt-0.6b-v2", "upstream_commit": "1b149a3", "published_repo": "handy-computer/parakeet-tdt-0.6b-v2-gguf", + "docs_page": "parakeet.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/parakeet-tdt-0.6b-v3.json b/catalog/parakeet-tdt-0.6b-v3.json index d016af20..bf0263b1 100644 --- a/catalog/parakeet-tdt-0.6b-v3.json +++ b/catalog/parakeet-tdt-0.6b-v3.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/parakeet-tdt-0.6b-v3", "upstream_commit": "6d590f7", "published_repo": "handy-computer/parakeet-tdt-0.6b-v3-gguf", + "docs_page": "parakeet.md", "languages": [ "bg", "hr", "cs", "da", "nl", "en", "et", "fi", "fr", "de", "el", "hu", "it", "lv", "lt", "mt", "pl", "pt", "ro", "ru", "sk", "sl", "es", "sv", diff --git a/catalog/parakeet-tdt-1.1b.json b/catalog/parakeet-tdt-1.1b.json index ad456f51..73519147 100644 --- a/catalog/parakeet-tdt-1.1b.json +++ b/catalog/parakeet-tdt-1.1b.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/parakeet-tdt-1.1b", "upstream_commit": "53276c6", "published_repo": "handy-computer/parakeet-tdt-1.1b-gguf", + "docs_page": "parakeet.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/parakeet-tdt_ctc-1.1b.json b/catalog/parakeet-tdt_ctc-1.1b.json index eba76346..55b6168e 100644 --- a/catalog/parakeet-tdt_ctc-1.1b.json +++ b/catalog/parakeet-tdt_ctc-1.1b.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/parakeet-tdt_ctc-1.1b", "upstream_commit": "675e786", "published_repo": "handy-computer/parakeet-tdt_ctc-1.1b-gguf", + "docs_page": "parakeet.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/parakeet-tdt_ctc-110m.json b/catalog/parakeet-tdt_ctc-110m.json index ea0145ae..4bab5ee5 100644 --- a/catalog/parakeet-tdt_ctc-110m.json +++ b/catalog/parakeet-tdt_ctc-110m.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/parakeet-tdt_ctc-110m", "upstream_commit": "431a349", "published_repo": "handy-computer/parakeet-tdt_ctc-110m-gguf", + "docs_page": "parakeet.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/parakeet-unified-en-0.6b.json b/catalog/parakeet-unified-en-0.6b.json index 73dbb2b5..734e5f7e 100644 --- a/catalog/parakeet-unified-en-0.6b.json +++ b/catalog/parakeet-unified-en-0.6b.json @@ -11,6 +11,7 @@ "upstream_repo": "nvidia/parakeet-unified-en-0.6b", "upstream_commit": "d4ac992", "published_repo": "handy-computer/parakeet-unified-en-0.6b-gguf", + "docs_page": "parakeet.md", "languages": ["en"], "language_tag_form": "bare-bcp47", "long_form_strategy": "chunked-unbounded", diff --git a/catalog/qwen3-asr-0.6b.json b/catalog/qwen3-asr-0.6b.json index 4897939e..fda8c674 100644 --- a/catalog/qwen3-asr-0.6b.json +++ b/catalog/qwen3-asr-0.6b.json @@ -11,6 +11,7 @@ "upstream_repo": "Qwen/Qwen3-ASR-0.6B", "upstream_commit": "5eb144179a02acc5e5ba31e748d22b0cf3e303b0", "published_repo": "handy-computer/Qwen3-ASR-0.6B-gguf", + "docs_page": "qwen3-asr.md", "languages": [ "zh", "en", "yue", "ar", "de", "fr", "es", "pt", "id", "it", "ko", "ru", "th", "vi", "ja", "tr", "hi", "ms", "nl", "sv", "da", "fi", "pl", "cs", diff --git a/catalog/qwen3-asr-1.7b.json b/catalog/qwen3-asr-1.7b.json index 3befd325..4ffb11a7 100644 --- a/catalog/qwen3-asr-1.7b.json +++ b/catalog/qwen3-asr-1.7b.json @@ -11,6 +11,7 @@ "upstream_repo": "Qwen/Qwen3-ASR-1.7B", "upstream_commit": "7278e1e70fe206f11671096ffdd38061171dd6e5", "published_repo": "handy-computer/Qwen3-ASR-1.7B-gguf", + "docs_page": "qwen3-asr.md", "languages": [ "zh", "en", "yue", "ar", "de", "fr", "es", "pt", "id", "it", "ko", "ru", "th", "vi", "ja", "tr", "hi", "ms", "nl", "sv", "da", "fi", "pl", "cs", diff --git a/catalog/sensevoice-small.json b/catalog/sensevoice-small.json index 1856b94d..c65addd6 100644 --- a/catalog/sensevoice-small.json +++ b/catalog/sensevoice-small.json @@ -11,6 +11,7 @@ "upstream_repo": "FunAudioLLM/SenseVoiceSmall", "upstream_commit": "3eb3b4eeffc2f2dde6051b853983753db33e35c3", "published_repo": "handy-computer/SenseVoiceSmall-gguf", + "docs_page": "sensevoice-small.md", "languages": ["zh","yue","en","ja","ko"], "long_form_strategy": "soft-window", "capabilities": { diff --git a/catalog/voxtral-mini-3b-2507.json b/catalog/voxtral-mini-3b-2507.json index bd1253fb..8aed8fb0 100644 --- a/catalog/voxtral-mini-3b-2507.json +++ b/catalog/voxtral-mini-3b-2507.json @@ -11,6 +11,7 @@ "upstream_repo": "mistralai/Voxtral-Mini-3B-2507", "upstream_commit": "3060fe3", "published_repo": "handy-computer/Voxtral-Mini-3B-2507-gguf", + "docs_page": "voxtral.md", "languages": ["en","fr","de","es","it","pt","nl","hi"], "long_form_strategy": "hard-cap", "capabilities": { diff --git a/catalog/voxtral-mini-4b-realtime-2602.json b/catalog/voxtral-mini-4b-realtime-2602.json index 474d6ae0..45088ef5 100644 --- a/catalog/voxtral-mini-4b-realtime-2602.json +++ b/catalog/voxtral-mini-4b-realtime-2602.json @@ -11,6 +11,7 @@ "upstream_repo": "mistralai/Voxtral-Mini-4B-Realtime-2602", "upstream_commit": "2769294", "published_repo": "handy-computer/Voxtral-Mini-4B-Realtime-2602-gguf", + "docs_page": "voxtral-realtime.md", "languages": ["en","fr","es","de","ru","zh","ja","it","pt","nl","ar","hi","ko"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/voxtral-small-24b-2507.json b/catalog/voxtral-small-24b-2507.json index 203dd0dc..6ff9746b 100644 --- a/catalog/voxtral-small-24b-2507.json +++ b/catalog/voxtral-small-24b-2507.json @@ -11,6 +11,7 @@ "upstream_repo": "mistralai/Voxtral-Small-24B-2507", "upstream_commit": "da5b424", "published_repo": "handy-computer/Voxtral-Small-24B-2507-gguf", + "docs_page": "voxtral.md", "languages": ["en","fr","de","es","it","pt","nl","hi"], "long_form_strategy": "hard-cap", "benchmark_exceptions": [ diff --git a/catalog/whisper-base.en.json b/catalog/whisper-base.en.json index e8ad6549..230f626d 100644 --- a/catalog/whisper-base.en.json +++ b/catalog/whisper-base.en.json @@ -11,6 +11,7 @@ "upstream_repo": "openai/whisper-base.en", "upstream_commit": "911407f", "published_repo": "handy-computer/whisper-base.en-gguf", + "docs_page": "whisper.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/whisper-base.json b/catalog/whisper-base.json index ebd1220a..e0ebf625 100644 --- a/catalog/whisper-base.json +++ b/catalog/whisper-base.json @@ -11,6 +11,7 @@ "upstream_repo": "openai/whisper-base", "upstream_commit": "e37978b", "published_repo": "handy-computer/whisper-base-gguf", + "docs_page": "whisper.md", "languages": [ "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", diff --git a/catalog/whisper-large-v2.json b/catalog/whisper-large-v2.json index cbd982b5..a775eed1 100644 --- a/catalog/whisper-large-v2.json +++ b/catalog/whisper-large-v2.json @@ -11,6 +11,7 @@ "upstream_repo": "openai/whisper-large-v2", "upstream_commit": "ae46427", "published_repo": "handy-computer/whisper-large-v2-gguf", + "docs_page": "whisper.md", "languages": [ "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", @@ -90,7 +91,44 @@ {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.71,"ci95":[2.26,3.39],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":869,"del":292,"ins":274},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.46,"ci95":[2.21,2.78],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":870,"del":270,"ins":162},"empty_hyp":0,"utts_over_50pct":7,"measurement_provenance":"legacy-published"}, {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":150.84,"ci95":[146.99,154.74],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":54849,"del":6541,"ins":34710},"empty_hyp":12,"utts_over_50pct":771,"measurement_provenance":"legacy-published"}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":101.65,"ci95":[101.07,102.27],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35553,"del":1166,"ins":1326},"empty_hyp":0,"utts_over_50pct":405,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":101.65,"ci95":[101.07,102.27],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35553,"del":1166,"ins":1326},"empty_hyp":0,"utts_over_50pct":405,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mi","language_hint":"mi","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":39.72,"ci95":[38.5,40.98],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":9256,"del":1389,"ins":1677},"empty_hyp":0,"utts_over_50pct":249}, + {"dataset":"fleurs","split":"test","language":"mk","language_hint":"mk","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":18.76,"ci95":[17.94,19.58],"n_utts":973,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":3210,"del":264,"ins":482},"empty_hyp":0,"utts_over_50pct":26}, + {"dataset":"fleurs","split":"test","language":"ml","language_hint":"ml","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":101.85,"ci95":[101.53,102.18],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":41708,"del":12307,"ins":1228},"empty_hyp":0,"utts_over_50pct":958}, + {"dataset":"fleurs","split":"test","language":"mn","language_hint":"mn","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":115.7,"ci95":[112.97,118.72],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":14761,"del":3674,"ins":3006},"empty_hyp":5,"utts_over_50pct":949}, + {"dataset":"fleurs","split":"test","language":"mr","language_hint":"mr","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":39.81,"ci95":[38.87,40.91],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":12433,"del":5512,"ins":2484},"empty_hyp":0,"utts_over_50pct":202}, + {"dataset":"fleurs","split":"test","language":"ms","language_hint":"ms","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":9.38,"ci95":[8.7,10.08],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":1144,"del":132,"ins":108},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"mt","language_hint":"mt","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":73.79,"ci95":[72.78,74.79],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":13495,"del":1341,"ins":1568},"empty_hyp":0,"utts_over_50pct":862}, + {"dataset":"fleurs","split":"test","language":"my","language_hint":"my","backend":"cuda","quant":"Q8_0","metric":"cer","err_pct":149.11,"ci95":[143.42,155.7],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":39444,"del":18579,"ins":29196},"empty_hyp":5,"utts_over_50pct":880}, + {"dataset":"fleurs","split":"test","language":"ne","language_hint":"ne","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":47.74,"ci95":[46.75,48.79],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":10447,"del":2686,"ins":2786},"empty_hyp":0,"utts_over_50pct":270}, + {"dataset":"fleurs","split":"test","language":"nl","language_hint":"nl","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":6.76,"ci95":[6.07,7.46],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":428,"del":70,"ins":70},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"nb","language_hint":"no","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":9.73,"ci95":[8.86,10.58],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":586,"del":75,"ins":80},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"oc","language_hint":"oc","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":75.41,"ci95":[74.46,76.45],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":17232,"del":1280,"ins":1395},"empty_hyp":0,"utts_over_50pct":939}, + {"dataset":"fleurs","split":"test","language":"pa","language_hint":"pa","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":102.11,"ci95":[101.71,102.54],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":23505,"del":1937,"ins":601},"empty_hyp":0,"utts_over_50pct":574}, + {"dataset":"fleurs","split":"test","language":"pl","language_hint":"pl","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":5.87,"ci95":[5.27,6.59],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":685,"del":85,"ins":75},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ps","language_hint":"ps","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":94.98,"ci95":[94.01,96.09],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":11028,"del":989,"ins":535},"empty_hyp":0,"utts_over_50pct":512}, + {"dataset":"fleurs","split":"test","language":"pt","language_hint":"pt","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":4.4,"ci95":[3.96,4.89],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":672,"del":100,"ins":172},"empty_hyp":0,"utts_over_50pct":3}, + {"dataset":"fleurs","split":"test","language":"ro","language_hint":"ro","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":17.1,"ci95":[16.07,18.11],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":3016,"del":306,"ins":235},"empty_hyp":0,"utts_over_50pct":29}, + {"dataset":"fleurs","split":"test","language":"ru","language_hint":"ru","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":5.61,"ci95":[5.12,6.09],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":715,"del":77,"ins":55},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"sd","language_hint":"sd","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":148.34,"ci95":[145.22,151.25],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":22192,"del":265,"ins":12608},"empty_hyp":0,"utts_over_50pct":980}, + {"dataset":"fleurs","split":"test","language":"sk","language_hint":"sk","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":12.49,"ci95":[11.55,13.36],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":1517,"del":264,"ins":123},"empty_hyp":1,"utts_over_50pct":14}, + {"dataset":"fleurs","split":"test","language":"sl","language_hint":"sl","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":24.73,"ci95":[23.66,25.74],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":3290,"del":340,"ins":454},"empty_hyp":0,"utts_over_50pct":59}, + {"dataset":"fleurs","split":"test","language":"sn","language_hint":"sn","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":127.84,"ci95":[125.11,130.72],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":13112,"del":682,"ins":6660},"empty_hyp":1,"utts_over_50pct":925}, + {"dataset":"fleurs","split":"test","language":"so","language_hint":"so","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":106.8,"ci95":[105.08,108.77],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":14461,"del":9700,"ins":1669},"empty_hyp":11,"utts_over_50pct":1019}, + {"dataset":"fleurs","split":"test","language":"sr","language_hint":"sr","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":38.06,"ci95":[34.91,41.17],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":4808,"del":314,"ins":150},"empty_hyp":0,"utts_over_50pct":186}, + {"dataset":"fleurs","split":"test","language":"sv","language_hint":"sv","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":9.25,"ci95":[8.6,9.89],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":1074,"del":188,"ins":161},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"sw","language_hint":"sw","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":41.85,"ci95":[40.36,43.4],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":3247,"del":315,"ins":622},"empty_hyp":0,"utts_over_50pct":138}, + {"dataset":"fleurs","split":"test","language":"ta","language_hint":"ta","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":20.12,"ci95":[18.65,21.85],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":3548,"del":1451,"ins":1775},"empty_hyp":0,"utts_over_50pct":16}, + {"dataset":"fleurs","split":"test","language":"te","language_hint":"te","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":100.76,"ci95":[99.51,102.16],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":17295,"del":4791,"ins":693},"empty_hyp":3,"utts_over_50pct":464}, + {"dataset":"fleurs","split":"test","language":"tg","language_hint":"tg","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":89.42,"ci95":[87.58,91.43],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":10258,"del":205,"ins":1192},"empty_hyp":0,"utts_over_50pct":564}, + {"dataset":"fleurs","split":"test","language":"th","language_hint":"th","backend":"cuda","quant":"Q8_0","metric":"cer","err_pct":12.42,"ci95":[11.72,13.23],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":5816,"del":3146,"ins":3151},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"tr","language_hint":"tr","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":7.63,"ci95":[7.0,8.34],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":735,"del":137,"ins":142},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"uk","language_hint":"uk","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":8.17,"ci95":[7.5,8.82],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":905,"del":140,"ins":129},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ur","language_hint":"ur","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":23.96,"ci95":[22.62,25.48],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":1624,"del":188,"ins":224},"empty_hyp":0,"utts_over_50pct":9}, + {"dataset":"fleurs","split":"test","language":"uz","language_hint":"uz","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":91.97,"ci95":[90.59,93.5],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":12363,"del":952,"ins":1371},"empty_hyp":1,"utts_over_50pct":854}, + {"dataset":"fleurs","split":"test","language":"vi","language_hint":"vi","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":11.25,"ci95":[10.49,12.04],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":2382,"del":331,"ins":214},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"yo","language_hint":"yo","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":96.0,"ci95":[95.28,96.79],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":16523,"del":4130,"ins":620},"empty_hyp":0,"utts_over_50pct":828}, + {"dataset":"fleurs","split":"test","language":"zh","language_hint":"zh","backend":"cuda","quant":"Q8_0","metric":"cer","err_pct":15.39,"ci95":[14.02,16.64],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":3850,"del":1453,"ins":186},"empty_hyp":0,"utts_over_50pct":27} ], "headline_benchmark": { "dataset": "librispeech", diff --git a/catalog/whisper-large-v3-turbo.json b/catalog/whisper-large-v3-turbo.json index ad441750..42d2418d 100644 --- a/catalog/whisper-large-v3-turbo.json +++ b/catalog/whisper-large-v3-turbo.json @@ -11,6 +11,7 @@ "upstream_repo": "openai/whisper-large-v3-turbo", "upstream_commit": "41f01f3", "published_repo": "handy-computer/whisper-large-v3-turbo-gguf", + "docs_page": "whisper.md", "languages": [ "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", @@ -127,7 +128,8 @@ {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.04,"ci95":[1.85,2.26],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":784,"del":188,"ins":111},"empty_hyp":0,"utts_over_50pct":6,"measurement_provenance":"legacy-published"}, {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":95.2,"ci95":[93.97,96.37],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":29731,"del":27154,"ins":3767},"empty_hyp":2,"utts_over_50pct":771,"measurement_provenance":"legacy-published"}, {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":115.41,"ci95":[111.93,119.15],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":25892,"del":10285,"ins":7018},"empty_hyp":0,"utts_over_50pct":405,"measurement_provenance":"legacy-published"}, - {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":121.67,"ci95":[117.84,125.71],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39288,"del":15150,"ins":16732},"empty_hyp":1,"utts_over_50pct":880,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"my","quant":"Q8_0","metric":"cer","err_pct":121.67,"ci95":[117.84,125.71],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":39288,"del":15150,"ins":16732},"empty_hyp":1,"utts_over_50pct":880,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"jv","language_hint":"jw","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":53.8,"ci95":[52.56,55.0],"n_utts":728,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":6586,"del":622,"ins":705},"empty_hyp":0,"utts_over_50pct":405} ], "headline_benchmark": { "dataset": "librispeech", diff --git a/catalog/whisper-large-v3.json b/catalog/whisper-large-v3.json index cb2f2f7f..2642819d 100644 --- a/catalog/whisper-large-v3.json +++ b/catalog/whisper-large-v3.json @@ -11,6 +11,7 @@ "upstream_repo": "openai/whisper-large-v3", "upstream_commit": "06f233f", "published_repo": "handy-computer/whisper-large-v3-gguf", + "docs_page": "whisper.md", "languages": [ "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", diff --git a/catalog/whisper-large.json b/catalog/whisper-large.json index 7e44536f..3202b75a 100644 --- a/catalog/whisper-large.json +++ b/catalog/whisper-large.json @@ -11,6 +11,7 @@ "upstream_repo": "openai/whisper-large", "upstream_commit": "4ef9b41", "published_repo": "handy-computer/whisper-large-gguf", + "docs_page": "whisper.md", "languages": [ "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", @@ -91,7 +92,43 @@ {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q5_K_M","metric":"wer","err_pct":2.84,"ci95":[2.48,3.31],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":916,"del":283,"ins":309},"empty_hyp":0,"utts_over_50pct":15,"measurement_provenance":"legacy-published"}, {"dataset":"librispeech","split":"test-clean","language":"en","quant":"Q4_K_M","metric":"wer","err_pct":2.67,"ci95":[2.38,2.98],"n_utts":2620,"batch_size":1,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":933,"del":292,"ins":191},"empty_hyp":0,"utts_over_50pct":10,"measurement_provenance":"legacy-published"}, {"dataset":"fleurs","split":"test","language":"km","quant":"Q8_0","metric":"cer","err_pct":118.15,"ci95":[114.41,122.27],"n_utts":771,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":29338,"del":32074,"ins":13862},"empty_hyp":128,"utts_over_50pct":771,"measurement_provenance":"legacy-published"}, - {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":102.35,"ci95":[101.26,103.98],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35086,"del":1850,"ins":1371},"empty_hyp":0,"utts_over_50pct":405,"measurement_provenance":"legacy-published"} + {"dataset":"fleurs","split":"test","language":"lo","quant":"Q8_0","metric":"cer","err_pct":102.35,"ci95":[101.26,103.98],"n_utts":405,"batch_size":8,"timestamps":"none","engine_sha":null,"measured_on":null,"errors":{"sub":35086,"del":1850,"ins":1371},"empty_hyp":0,"utts_over_50pct":405,"measurement_provenance":"legacy-published"}, + {"dataset":"fleurs","split":"test","language":"mi","language_hint":"mi","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":54.38,"ci95":[52.4,56.47],"n_utts":1008,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":11313,"del":2533,"ins":3025},"empty_hyp":2,"utts_over_50pct":477}, + {"dataset":"fleurs","split":"test","language":"ml","language_hint":"ml","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":101.2,"ci95":[100.79,101.68],"n_utts":958,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":34921,"del":19187,"ins":780},"empty_hyp":15,"utts_over_50pct":958}, + {"dataset":"fleurs","split":"test","language":"mn","language_hint":"mn","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":115.92,"ci95":[112.19,119.7],"n_utts":949,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":12379,"del":6007,"ins":3097},"empty_hyp":9,"utts_over_50pct":949}, + {"dataset":"fleurs","split":"test","language":"mr","language_hint":"mr","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":48.22,"ci95":[47.0,49.6],"n_utts":1015,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":14682,"del":7182,"ins":2879},"empty_hyp":0,"utts_over_50pct":351}, + {"dataset":"fleurs","split":"test","language":"ms","language_hint":"ms","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":11.28,"ci95":[10.54,12.03],"n_utts":749,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":1422,"del":114,"ins":128},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"mt","language_hint":"mt","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":84.11,"ci95":[82.88,85.46],"n_utts":926,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":15296,"del":1580,"ins":1824},"empty_hyp":0,"utts_over_50pct":914}, + {"dataset":"fleurs","split":"test","language":"my","language_hint":"my","backend":"cuda","quant":"Q8_0","metric":"cer","err_pct":128.0,"ci95":[124.8,131.79],"n_utts":880,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":40608,"del":17542,"ins":16719},"empty_hyp":10,"utts_over_50pct":880}, + {"dataset":"fleurs","split":"test","language":"ne","language_hint":"ne","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":55.71,"ci95":[54.38,57.09],"n_utts":726,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":11265,"del":4142,"ins":3171},"empty_hyp":0,"utts_over_50pct":408}, + {"dataset":"fleurs","split":"test","language":"nl","language_hint":"nl","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":8.48,"ci95":[7.73,9.28],"n_utts":364,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":521,"del":93,"ins":98},"empty_hyp":0,"utts_over_50pct":0}, + {"dataset":"fleurs","split":"test","language":"nb","language_hint":"no","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":11.98,"ci95":[11.03,13.03],"n_utts":357,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":729,"del":94,"ins":90},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"oc","language_hint":"oc","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":76.72,"ci95":[75.6,78.0],"n_utts":998,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":17277,"del":1470,"ins":1508},"empty_hyp":0,"utts_over_50pct":936}, + {"dataset":"fleurs","split":"test","language":"pa","language_hint":"pa","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":102.98,"ci95":[102.47,103.54],"n_utts":574,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":23755,"del":1683,"ins":828},"empty_hyp":0,"utts_over_50pct":573}, + {"dataset":"fleurs","split":"test","language":"pl","language_hint":"pl","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":7.44,"ci95":[6.82,8.18],"n_utts":758,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":849,"del":112,"ins":110},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"ps","language_hint":"ps","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":98.52,"ci95":[96.54,100.83],"n_utts":512,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":9149,"del":3103,"ins":769},"empty_hyp":4,"utts_over_50pct":512}, + {"dataset":"fleurs","split":"test","language":"pt","language_hint":"pt","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":4.49,"ci95":[4.04,4.99],"n_utts":919,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":686,"del":96,"ins":183},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ro","language_hint":"ro","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":17.52,"ci95":[16.52,18.48],"n_utts":883,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":3028,"del":315,"ins":301},"empty_hyp":0,"utts_over_50pct":30}, + {"dataset":"fleurs","split":"test","language":"ru","language_hint":"ru","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":6.49,"ci95":[5.95,7.04],"n_utts":775,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":826,"del":89,"ins":65},"empty_hyp":0,"utts_over_50pct":1}, + {"dataset":"fleurs","split":"test","language":"sd","language_hint":"sd","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":176.25,"ci95":[173.82,178.51],"n_utts":980,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":22764,"del":820,"ins":18077},"empty_hyp":0,"utts_over_50pct":980}, + {"dataset":"fleurs","split":"test","language":"sk","language_hint":"sk","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":17.17,"ci95":[16.27,18.23],"n_utts":792,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":2177,"del":290,"ins":151},"empty_hyp":3,"utts_over_50pct":26}, + {"dataset":"fleurs","split":"test","language":"sl","language_hint":"sl","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":29.94,"ci95":[28.95,31.0],"n_utts":834,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":3996,"del":411,"ins":538},"empty_hyp":0,"utts_over_50pct":75}, + {"dataset":"fleurs","split":"test","language":"sn","language_hint":"sn","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":142.46,"ci95":[136.47,148.75],"n_utts":925,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":10442,"del":5350,"ins":7001},"empty_hyp":41,"utts_over_50pct":925}, + {"dataset":"fleurs","split":"test","language":"so","language_hint":"so","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":105.45,"ci95":[103.87,107.13],"n_utts":1019,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":13797,"del":10353,"ins":1354},"empty_hyp":10,"utts_over_50pct":1019}, + {"dataset":"fleurs","split":"test","language":"sr","language_hint":"sr","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":35.57,"ci95":[32.62,38.51],"n_utts":700,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":4529,"del":201,"ins":197},"empty_hyp":0,"utts_over_50pct":142}, + {"dataset":"fleurs","split":"test","language":"sv","language_hint":"sv","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":11.5,"ci95":[10.75,12.26],"n_utts":759,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":1333,"del":241,"ins":195},"empty_hyp":0,"utts_over_50pct":4}, + {"dataset":"fleurs","split":"test","language":"sw","language_hint":"sw","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":52.38,"ci95":[50.83,54.02],"n_utts":487,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":3975,"del":751,"ins":510},"empty_hyp":0,"utts_over_50pct":246}, + {"dataset":"fleurs","split":"test","language":"ta","language_hint":"ta","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":21.7,"ci95":[20.49,23.11],"n_utts":591,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":3924,"del":1687,"ins":1695},"empty_hyp":0,"utts_over_50pct":22}, + {"dataset":"fleurs","split":"test","language":"te","language_hint":"te","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":99.27,"ci95":[98.16,100.29],"n_utts":472,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":14112,"del":7648,"ins":682},"empty_hyp":4,"utts_over_50pct":464}, + {"dataset":"fleurs","split":"test","language":"tg","language_hint":"tg","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":79.55,"ci95":[77.71,81.6],"n_utts":600,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":8649,"del":572,"ins":1147},"empty_hyp":1,"utts_over_50pct":573}, + {"dataset":"fleurs","split":"test","language":"th","language_hint":"th","backend":"cuda","quant":"Q8_0","metric":"cer","err_pct":13.88,"ci95":[13.16,14.69],"n_utts":1021,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":6538,"del":3569,"ins":3425},"empty_hyp":0,"utts_over_50pct":15}, + {"dataset":"fleurs","split":"test","language":"tr","language_hint":"tr","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":8.73,"ci95":[7.99,9.46],"n_utts":743,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":855,"del":154,"ins":152},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"uk","language_hint":"uk","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":9.87,"ci95":[9.18,10.58],"n_utts":750,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":1156,"del":131,"ins":131},"empty_hyp":0,"utts_over_50pct":2}, + {"dataset":"fleurs","split":"test","language":"ur","language_hint":"ur","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":26.28,"ci95":[24.87,27.75],"n_utts":299,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":1798,"del":217,"ins":218},"empty_hyp":0,"utts_over_50pct":16}, + {"dataset":"fleurs","split":"test","language":"uz","language_hint":"uz","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":96.56,"ci95":[95.43,97.96],"n_utts":862,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":13128,"del":1131,"ins":1159},"empty_hyp":0,"utts_over_50pct":861}, + {"dataset":"fleurs","split":"test","language":"vi","language_hint":"vi","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":11.51,"ci95":[10.82,12.15],"n_utts":857,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":2474,"del":301,"ins":220},"empty_hyp":0,"utts_over_50pct":8}, + {"dataset":"fleurs","split":"test","language":"yo","language_hint":"yo","backend":"cuda","quant":"Q8_0","metric":"wer","err_pct":113.72,"ci95":[111.14,116.64],"n_utts":831,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":13837,"del":7939,"ins":3424},"empty_hyp":6,"utts_over_50pct":831}, + {"dataset":"fleurs","split":"test","language":"zh","language_hint":"zh","backend":"cuda","quant":"Q8_0","metric":"cer","err_pct":19.32,"ci95":[18.03,20.64],"n_utts":945,"batch_size":8,"timestamps":"none","engine_sha":"0a26478","publication_profile":"asr-publication-v2","measured_on":null,"errors":{"sub":5198,"del":1508,"ins":184},"empty_hyp":0,"utts_over_50pct":43} ], "headline_benchmark": { "dataset": "librispeech", diff --git a/catalog/whisper-medium.en.json b/catalog/whisper-medium.en.json index 99626cfb..976c0afd 100644 --- a/catalog/whisper-medium.en.json +++ b/catalog/whisper-medium.en.json @@ -11,6 +11,7 @@ "upstream_repo": "openai/whisper-medium.en", "upstream_commit": "2e98eb6", "published_repo": "handy-computer/whisper-medium.en-gguf", + "docs_page": "whisper.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/whisper-medium.json b/catalog/whisper-medium.json index caa11b28..22bf3d04 100644 --- a/catalog/whisper-medium.json +++ b/catalog/whisper-medium.json @@ -11,6 +11,7 @@ "upstream_repo": "openai/whisper-medium", "upstream_commit": "abdf7c3", "published_repo": "handy-computer/whisper-medium-gguf", + "docs_page": "whisper.md", "languages": [ "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", diff --git a/catalog/whisper-small.en.json b/catalog/whisper-small.en.json index eb16fa17..da9b4bea 100644 --- a/catalog/whisper-small.en.json +++ b/catalog/whisper-small.en.json @@ -11,6 +11,7 @@ "upstream_repo": "openai/whisper-small.en", "upstream_commit": "e872752", "published_repo": "handy-computer/whisper-small.en-gguf", + "docs_page": "whisper.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/whisper-small.json b/catalog/whisper-small.json index c45effbf..c0829ddd 100644 --- a/catalog/whisper-small.json +++ b/catalog/whisper-small.json @@ -11,6 +11,7 @@ "upstream_repo": "openai/whisper-small", "upstream_commit": "973afd2", "published_repo": "handy-computer/whisper-small-gguf", + "docs_page": "whisper.md", "languages": [ "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", diff --git a/catalog/whisper-tiny.en.json b/catalog/whisper-tiny.en.json index e2150dd7..84ec7b27 100644 --- a/catalog/whisper-tiny.en.json +++ b/catalog/whisper-tiny.en.json @@ -11,6 +11,7 @@ "upstream_repo": "openai/whisper-tiny.en", "upstream_commit": "87c7102", "published_repo": "handy-computer/whisper-tiny.en-gguf", + "docs_page": "whisper.md", "languages": ["en"], "long_form_strategy": "chunked-unbounded", "capabilities": { diff --git a/catalog/whisper-tiny.json b/catalog/whisper-tiny.json index 8c7ebe24..24a7c299 100644 --- a/catalog/whisper-tiny.json +++ b/catalog/whisper-tiny.json @@ -11,6 +11,7 @@ "upstream_repo": "openai/whisper-tiny", "upstream_commit": "169d4a4", "published_repo": "handy-computer/whisper-tiny-gguf", + "docs_page": "whisper.md", "languages": [ "af", "am", "ar", "as", "az", "ba", "be", "bg", "bn", "bo", "br", "bs", "ca", "cs", "cy", "da", "de", "el", "en", "es", "et", "eu", "fa", "fi", diff --git a/docs/_templates/model-card.md.j2 b/docs/_templates/model-card.md.j2 index 7d6dda88..eb6ac022 100644 --- a/docs/_templates/model-card.md.j2 +++ b/docs/_templates/model-card.md.j2 @@ -47,8 +47,8 @@ See the upstream [model card](https://huggingface.co/{{ hf_repo }}) for training data, intended use, and upstream evaluation methodology. -Licensed {{ license_display }}. Ported from upstream commit -[`{{ upstream_commit_short }}`]({{ upstream_commit_url }}), pinned {{ pin_date }}. + + ## Input limits @@ -80,6 +80,9 @@ full contract and the per-family bucket table. + + + diff --git a/docs/models/canary-180m-flash.md b/docs/models/canary-180m-flash.md index 3544c14a..5201280d 100644 --- a/docs/models/canary-180m-flash.md +++ b/docs/models/canary-180m-flash.md @@ -47,13 +47,15 @@ pinned 2026-05-08. | Q4_K_M | [canary-180m-flash-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-180m-flash-gguf/resolve/main/canary-180m-flash-Q4_K_M.gguf) | 139 MB | 1.93% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy decoding and no external LM. F32 reference baseline: 1.94%. -On the same wavs, NeMo's reference run produces 1.93% (one substitution -difference out of ~27k reference words), so the F32 port matches the -reference framework at the noise floor. NVIDIA's self-reported number -on the upstream model card is 1.87%. +Greedy decoding, no external LM. F32 reference baseline: 1.94%. On the same wavs, +NeMo's reference run produces 1.93% (one substitution difference out of ~27k +reference words), so the F32 port matches the reference framework at the noise +floor. NVIDIA's self-reported number on the upstream model card is 1.87%. @@ -105,7 +107,7 @@ CLI flags specific to canary: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | @@ -120,7 +122,7 @@ Apple M4 Max: transcribe.cpp `0f42b37` on 2026-05-08; transcribe.cpp `19b3b87` o ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | diff --git a/docs/models/canary-1b-flash.md b/docs/models/canary-1b-flash.md index 075f21d2..1fbc1965 100644 --- a/docs/models/canary-1b-flash.md +++ b/docs/models/canary-1b-flash.md @@ -43,10 +43,13 @@ pinned 2026-05-08. | Q4_K_M | [canary-1b-flash-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-flash-gguf/resolve/main/canary-1b-flash-Q4_K_M.gguf) | 677 MB | 1.59% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy decoding and no external LM. F32 reference baseline: 1.62%. -NVIDIA's self-reported number on the upstream model card is 1.48%. +Greedy decoding, no external LM. F32 reference baseline: 1.62%. NVIDIA's +self-reported number on the upstream model card is 1.48%. @@ -98,7 +101,7 @@ CLI flags specific to canary: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | @@ -113,7 +116,7 @@ Apple M4 Max: transcribe.cpp `0f42b37` on 2026-05-08; transcribe.cpp `19b3b87` o ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | diff --git a/docs/models/canary-1b-v2.md b/docs/models/canary-1b-v2.md index 7d9f98b8..cd5115dd 100644 --- a/docs/models/canary-1b-v2.md +++ b/docs/models/canary-1b-v2.md @@ -54,12 +54,15 @@ pinned 2026-05-08. | Q4_K_M | [canary-1b-v2-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-v2-gguf/resolve/main/canary-1b-v2-Q4_K_M.gguf) | 735 MB | 1.91% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy decoding and no external LM. F32 reference baseline: 1.92%. -NVIDIA's self-reported number on the upstream model card is 2.18%; -our F32 port comes in slightly under the upstream-reported number -(Δ −0.26pp) and is likely down to scoring differences. +Greedy decoding, no external LM. F32 reference baseline: 1.92%. NVIDIA's +self-reported number on the upstream model card is 2.18%; our F32 port comes in +slightly under the upstream-reported number (Δ −0.26pp) and is likely down to +scoring differences. @@ -141,7 +144,7 @@ CLI flags specific to canary: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | @@ -156,7 +159,7 @@ Apple M4 Max: transcribe.cpp `0f42b37` on 2026-05-08; transcribe.cpp `abb6506` o ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | diff --git a/docs/models/canary-1b.md b/docs/models/canary-1b.md index 76bfa26f..002e77c9 100644 --- a/docs/models/canary-1b.md +++ b/docs/models/canary-1b.md @@ -41,12 +41,15 @@ pinned 2026-05-08. | Q4_K_M | [canary-1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-1b-gguf/resolve/main/canary-1b-Q4_K_M.gguf) | 730 MB | 1.55% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy decoding and no external LM. F32 reference baseline: 1.55%. -NVIDIA's self-reported number on the upstream model card is 1.48%; -likely this is due to differences in how we score WER, based on the -results we have from canary-180m-flash. +Greedy decoding, no external LM. F32 reference baseline: 1.55%. NVIDIA's +self-reported number on the upstream model card is 1.48%; likely this is due to +differences in how we score WER, based on the results we have from +canary-180m-flash. @@ -106,7 +109,7 @@ overhead. ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | @@ -121,7 +124,7 @@ Apple M4 Max: transcribe.cpp `23c2ee6` on 2026-05-08; transcribe.cpp `19b3b87` o ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | ----------------: | diff --git a/docs/models/canary-qwen-2.5b.md b/docs/models/canary-qwen-2.5b.md index f0ebd7e9..a0bb9404 100644 --- a/docs/models/canary-qwen-2.5b.md +++ b/docs/models/canary-qwen-2.5b.md @@ -47,18 +47,19 @@ exact per-session value. See the [input-length contract](../input-limits.md). | Q4_K_M | [canary-qwen-2.5b-Q4_K_M.gguf](https://huggingface.co/handy-computer/canary-qwen-2.5b-gguf/resolve/main/canary-qwen-2.5b-Q4_K_M.gguf) | 1.74 GB | 1.63% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech `test-clean` split (2620 English -utterances) with the Whisper-style English text normalizer and jiwer -3.x, on the metal backend of an Apple M4. The same-machine NeMo SALM -reference run (CPU torch, dither=0.0, greedy `model.generate`) lands -at **1.61%** with 95% bootstrap CI [1.47%, 1.75%]: `0.01` above -NVIDIA's published 1.60% but well within statistical noise. All six -GGUF presets land at exactly 1.63% (`+0.02` over our reference run, -same CI band). Investigation of the worst per-utterance differences -shows scattered token-level noise consistent with BF16 weight -precision (homophones, word-boundary flips, function-word -substitutions). Reproduce with `scripts/wer/run.py` + +Scored with the Whisper-style English text normalizer and jiwer 3.x on an Apple M4. +The same-machine NeMo SALM reference run (CPU torch, dither=0.0, greedy +`model.generate`) lands at **1.61%** with 95% bootstrap CI [1.47%, 1.75%]: `0.01` +above NVIDIA's published 1.60% but well within statistical noise. All six GGUF +presets land at exactly 1.63% (`+0.02` over our reference run, same CI band). +Investigation of the worst per-utterance differences shows scattered token-level +noise consistent with BF16 weight precision (homophones, word-boundary flips, +function-word substitutions). Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. @@ -99,7 +100,7 @@ CLI flags: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | @@ -114,7 +115,7 @@ Apple M4 Max: transcribe.cpp `1b19945` on 2026-05-17. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/cohere-transcribe-03-2026.md b/docs/models/cohere-transcribe-03-2026.md index b49ff774..512cee6d 100644 --- a/docs/models/cohere-transcribe-03-2026.md +++ b/docs/models/cohere-transcribe-03-2026.md @@ -45,13 +45,16 @@ it into shorter segments. See the [input-length contract](../input-limits.md). | Q4_K_M | [cohere-transcribe-03-2026-Q4_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-03-2026-gguf/resolve/main/cohere-transcribe-03-2026-Q4_K_M.gguf) | 1.56 GB | 1.24% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with -greedy decoding and no external LM. BF16 reference baseline: 1.26%. -Cohere's self-reported number on the same split is 1.25% -(Open ASR Leaderboard, as of 2026-03-26). Both ours and Cohere's numbers -use the Whisper EnglishTextNormalizer, so the comparison is apples-to-apples -and our port matches the upstream reference within rounding. +Greedy decoding, no external LM. BF16 reference baseline: 1.26%. Cohere's +self-reported number on the same split is 1.25% (Open ASR Leaderboard, as of +2026-03-26). Both ours and Cohere's numbers use the Whisper EnglishTextNormalizer, +so the comparison is apples-to-apples and our port matches the upstream reference +within rounding. @@ -97,7 +100,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ------------: | ------------: | @@ -112,7 +115,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | -------------: | diff --git a/docs/models/cohere-transcribe-arabic-07-2026.md b/docs/models/cohere-transcribe-arabic-07-2026.md index f260175e..68d0c113 100644 --- a/docs/models/cohere-transcribe-arabic-07-2026.md +++ b/docs/models/cohere-transcribe-arabic-07-2026.md @@ -46,14 +46,17 @@ it into shorter segments. See the [input-length contract](../input-limits.md). | Q4_K_M | [cohere-transcribe-arabic-07-2026-Q4_K_M.gguf](https://huggingface.co/handy-computer/cohere-transcribe-arabic-07-2026-gguf/resolve/main/cohere-transcribe-arabic-07-2026-Q4_K_M.gguf) | 1.56 GB | 11.18% | + +WER on the full FLEURS ar split (428 utterances), batch size 8, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full FLEURS Arabic (`ar_eg`) test split (428 -utterances) with greedy decoding and no external LM, scored with the -Whisper BasicTextNormalizer. BF16 reference baseline, measured with -native Transformers on the same manifest: 11.00%; the BF16 port scores -11.02%, and every quant falls inside the reference's 95% confidence -interval. FLEURS Arabic is Egyptian-dialect speech; upstream numbers -published on other Arabic test sets are not directly comparable. +Greedy decoding, no external LM, scored with the Whisper BasicTextNormalizer; the +FLEURS Arabic split is `ar_eg`, Egyptian-dialect speech. BF16 reference baseline, +measured with native Transformers on the same manifest: 11.00%; the BF16 port scores +11.02%, and every quant falls inside the reference's 95% confidence interval. FLEURS +Arabic is Egyptian-dialect speech; upstream numbers published on other Arabic test +sets are not directly comparable. @@ -98,7 +101,7 @@ the same architecture with identical tensor shapes and quantization layout ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ------------: | ------------: | @@ -113,7 +116,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ------------: | ------------: | diff --git a/docs/models/diar_streaming_sortformer_4spk-v2.1.md b/docs/models/diar_streaming_sortformer_4spk-v2.1.md index d7ec179a..c8b8b787 100644 --- a/docs/models/diar_streaming_sortformer_4spk-v2.1.md +++ b/docs/models/diar_streaming_sortformer_4spk-v2.1.md @@ -37,15 +37,17 @@ pinned 2026-07-19. | Q8_0 | [diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf](https://huggingface.co/handy-computer/diar_streaming_sortformer_4spk-v2.1-gguf/resolve/main/diar_streaming_sortformer_4spk-v2.1-Q8_0.gguf) | 139 MB | 14.73% | + +DER on the full AMI IHM test split (16 meetings). Figures without a commit were published before provenance was recorded. + + -DER measured on the full AMI IHM test set (16 meetings, ~9 h) against -forced-alignment RTTMs with dihard3-dev post-processing, collar 0.0, -overlap scored, at the very_high_latency operating point. Measured NeMo -reference under the identical protocol: 14.83% DER / 19.89% JER; the -C++ F32 port scores 14.59% / 19.51%. Published DER numbers vary with -RTTM source and post-processing; compare like with like. Only -near-reference tiers ship for this family (k-quant tiers withdrawn; -see the transcribe.cpp family doc, "Quant policy (Stage 7)"). +Scored against forced-alignment RTTMs with dihard3-dev post-processing, collar 0.0, +overlap scored, at the very_high_latency operating point. Measured NeMo reference +under the identical protocol: 14.83% DER / 19.89% JER; the C++ F32 port scores +14.59% / 19.51%. Published DER numbers vary with RTTM source and post-processing; +compare like with like. Only near-reference tiers ship for this family (k-quant +tiers withdrawn; see the transcribe.cpp family doc, "Quant policy (Stage 7)"). Only near-reference tiers ship for this family. K-quant tiers were @@ -97,7 +99,7 @@ second (many small windows). ### Apple M4 -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | F16 | Q8_0 | | ------- | ------------ | ---------------: | ---------------: | diff --git a/docs/models/fun-asr-mlt-nano-2512.md b/docs/models/fun-asr-mlt-nano-2512.md index 0fb027e7..b5fe7ffd 100644 --- a/docs/models/fun-asr-mlt-nano-2512.md +++ b/docs/models/fun-asr-mlt-nano-2512.md @@ -66,17 +66,18 @@ pinned 2026-05-06. | Q4_K_M | [Fun-ASR-MLT-Nano-2512-Q4_K_M.gguf](https://huggingface.co/handy-computer/Fun-ASR-MLT-Nano-2512-gguf/resolve/main/Fun-ASR-MLT-Nano-2512-Q4_K_M.gguf) | 557 MB | 1.89% | + +WER on the full LibriSpeech test-clean split (2,620 utterances). Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy LLM decoding via the bundled Qwen3-0.6B head. The publisher -does not report a numerical LibriSpeech WER for the MLT variant -specifically (the shared README's per-model table covers Fun-ASR-Nano -only). Gate baseline is our own FunASR 1.3.1 reference run on the same -manifest: 1.76% (95% CI [1.60%, 1.93%]). transcribe.cpp's BF16 port -matches that baseline within -0.02 percentage-points. LibriSpeech is -English only; the strength of the MLT variant is multilingual coverage, -not English accuracy. For the other 30 languages, run your own -representative manifest. +Greedy LLM decoding via the bundled Qwen3-0.6B head. The publisher does not report a +numerical LibriSpeech WER for the MLT variant specifically (the shared README's +per-model table covers Fun-ASR-Nano only). Gate baseline is our own FunASR 1.3.1 +reference run on the same manifest: 1.76% (95% CI [1.60%, 1.93%]). transcribe.cpp's +BF16 port matches that baseline within -0.02 percentage-points. LibriSpeech is +English only; the strength of the MLT variant is multilingual coverage, not English +accuracy. For the other 30 languages, run your own representative manifest. @@ -152,7 +153,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ------------: | ------------: | @@ -167,7 +168,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -------------: | --------------: | diff --git a/docs/models/fun-asr-nano-2512.md b/docs/models/fun-asr-nano-2512.md index d310ea54..ea8fa83c 100644 --- a/docs/models/fun-asr-nano-2512.md +++ b/docs/models/fun-asr-nano-2512.md @@ -53,16 +53,17 @@ pinned 2026-05-06. | Q4_K_M | [Fun-ASR-Nano-2512-Q4_K_M.gguf](https://huggingface.co/handy-computer/Fun-ASR-Nano-2512-gguf/resolve/main/Fun-ASR-Nano-2512-Q4_K_M.gguf) | 557 MB | 1.92% | + +WER on the full LibriSpeech test-clean split (2,620 utterances). Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy LLM decoding via the bundled Qwen3-0.6B head. Publisher -reports 1.76% on this split (model card "Open-Source Dataset -Performance" table). Our FunASR 1.3.1 reference run scores 1.79% -(95% CI [1.63%, 1.95%]), within bootstrap noise of the publisher's -number. transcribe.cpp's BF16 port matches that baseline within --0.01 percentage-points. LibriSpeech is an English-only benchmark; -Chinese (AISHELL-1, WenetSpeech) and Japanese (CommonVoice JA) are -the recommended complementary checks. +Greedy LLM decoding via the bundled Qwen3-0.6B head. Publisher reports 1.76% on this +split (model card "Open-Source Dataset Performance" table). Our FunASR 1.3.1 +reference run scores 1.79% (95% CI [1.63%, 1.95%]), within bootstrap noise of the +publisher's number. transcribe.cpp's BF16 port matches that baseline within -0.01 +percentage-points. LibriSpeech is an English-only benchmark; Chinese (AISHELL-1, +WenetSpeech) and Japanese (CommonVoice JA) are the recommended complementary checks. @@ -113,7 +114,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ------------: | ------------: | @@ -128,7 +129,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/gigaam-v3-ctc.md b/docs/models/gigaam-v3-ctc.md index 291e69f8..58967ae1 100644 --- a/docs/models/gigaam-v3-ctc.md +++ b/docs/models/gigaam-v3-ctc.md @@ -45,8 +45,17 @@ pinned 2026-05-12. | Q4_K_M | [gigaam-v3-ctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-ctc-gguf/resolve/main/gigaam-v3-ctc-Q4_K_M.gguf) | 182 MB | 8.42% | + +WER on the full FLEURS ru split (775 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 8.42%. Upstream `gigaam` author package measured on the same manifest: 9.81%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. +Greedy decoding, no external LM. F32 reference baseline: 8.42%. Upstream `gigaam` +author package measured on the same manifest: 9.81%; the 1.4 pp gap is upstream +rejecting 5 long (>25 s) utterances with `Too long wav file, use +'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt +subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not +publish a FLEURS ru WER; this number is measured here. Upstream (`gigaam` author package at `6e4b027c`) measured on the same @@ -82,7 +91,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | --------- | ------------: | ------------: | @@ -95,7 +104,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | --------- | ------------: | ------------: | diff --git a/docs/models/gigaam-v3-e2e-ctc.md b/docs/models/gigaam-v3-e2e-ctc.md index 61c80439..f7365413 100644 --- a/docs/models/gigaam-v3-e2e-ctc.md +++ b/docs/models/gigaam-v3-e2e-ctc.md @@ -45,8 +45,17 @@ pinned 2026-05-12. | Q4_K_M | [gigaam-v3-e2e-ctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-ctc-gguf/resolve/main/gigaam-v3-e2e-ctc-Q4_K_M.gguf) | 182 MB | 5.57% | + +WER on the full FLEURS ru split (775 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 5.50%. Upstream `gigaam` author package measured on the same manifest: 6.93%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. +Greedy decoding, no external LM. F32 reference baseline: 5.50%. Upstream `gigaam` +author package measured on the same manifest: 6.93%; the 1.4 pp gap is upstream +rejecting 5 long (>25 s) utterances with `Too long wav file, use +'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt +subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not +publish a FLEURS ru WER; this number is measured here. Upstream (`gigaam` author package at `6e4b027c`) measured on the same @@ -82,7 +91,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | --------- | ------------: | ------------: | @@ -95,7 +104,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | --------- | ------------: | ------------: | diff --git a/docs/models/gigaam-v3-e2e-rnnt.md b/docs/models/gigaam-v3-e2e-rnnt.md index c44d5bb5..4b6c26f5 100644 --- a/docs/models/gigaam-v3-e2e-rnnt.md +++ b/docs/models/gigaam-v3-e2e-rnnt.md @@ -45,8 +45,17 @@ pinned 2026-05-12. | Q4_K_M | [gigaam-v3-e2e-rnnt-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-e2e-rnnt-gguf/resolve/main/gigaam-v3-e2e-rnnt-Q4_K_M.gguf) | 184 MB | 5.36% | + +WER on the full FLEURS ru split (775 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 5.35%. Upstream `gigaam` author package measured on the same manifest: 6.78%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. +Greedy decoding, no external LM. F32 reference baseline: 5.35%. Upstream `gigaam` +author package measured on the same manifest: 6.78%; the 1.4 pp gap is upstream +rejecting 5 long (>25 s) utterances with `Too long wav file, use +'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt +subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not +publish a FLEURS ru WER; this number is measured here. Upstream (`gigaam` author package at `6e4b027c`) measured on the same @@ -82,7 +91,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | --------- | ------------: | ------------: | @@ -95,7 +104,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | --------- | ------------: | ------------: | diff --git a/docs/models/gigaam-v3-rnnt.md b/docs/models/gigaam-v3-rnnt.md index b19950e2..f2292192 100644 --- a/docs/models/gigaam-v3-rnnt.md +++ b/docs/models/gigaam-v3-rnnt.md @@ -45,8 +45,17 @@ pinned 2026-05-12. | Q4_K_M | [gigaam-v3-rnnt-Q4_K_M.gguf](https://huggingface.co/handy-computer/gigaam-v3-rnnt-gguf/resolve/main/gigaam-v3-rnnt-Q4_K_M.gguf) | 183 MB | 8.12% | + +WER on the full FLEURS ru split (775 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 8.08%. Upstream `gigaam` author package measured on the same manifest: 9.46%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. +Greedy decoding, no external LM. F32 reference baseline: 8.08%. Upstream `gigaam` +author package measured on the same manifest: 9.46%; the 1.4 pp gap is upstream +rejecting 5 long (>25 s) utterances with `Too long wav file, use +'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt +subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not +publish a FLEURS ru WER; this number is measured here. Upstream (`gigaam` author package at `6e4b027c`) measured on the same @@ -82,7 +91,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | --------- | ------------: | ------------: | @@ -95,7 +104,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | --------- | ------------: | ------------: | diff --git a/docs/models/granite-4.0-1b-speech.md b/docs/models/granite-4.0-1b-speech.md index c037a64f..a8a05adb 100644 --- a/docs/models/granite-4.0-1b-speech.md +++ b/docs/models/granite-4.0-1b-speech.md @@ -45,12 +45,15 @@ pinned 2026-05-17. | Q4_K_M | [granite-4.0-1b-speech-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-4.0-1b-speech-gguf/resolve/main/granite-4.0-1b-speech-Q4_K_M.gguf) | 1.60 GB | 1.48% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy decoding. BF16 reference baseline (re-run locally with the -model card's exact prompt): 1.42% — matches the upstream Open ASR -Leaderboard number exactly. Text normalizer: Whisper -`EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. +Greedy decoding. BF16 reference baseline (re-run locally with the model card's exact +prompt): 1.42% — matches the upstream Open ASR Leaderboard number exactly. Text +normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR +Leaderboard uses. @@ -97,7 +100,7 @@ build/bin/transcribe-cli \ ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | @@ -112,7 +115,7 @@ Apple M4 Max: transcribe.cpp `de05c43` on 2026-05-21. ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/granite-speech-4.1-2b-nar.md b/docs/models/granite-speech-4.1-2b-nar.md index 344ae44f..58a078f5 100644 --- a/docs/models/granite-speech-4.1-2b-nar.md +++ b/docs/models/granite-speech-4.1-2b-nar.md @@ -41,19 +41,20 @@ the README's canonical inference target). | Q4_K_M | [granite-speech-4.1-2b-nar-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-nar-gguf/resolve/main/granite-speech-4.1-2b-nar-Q4_K_M.gguf) | 1.56 GB | 1.34% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances). -BF16 reference baseline (transformers `model.transcribe`, MPS, re-run -locally): 1.28% — matches the upstream model card's 1.29% to within -sampling noise. Text normalizer: Whisper `EnglishTextNormalizer`, the -same normalizer Open ASR Leaderboard uses. Reference reproduction -follows the model card path verbatim (`AutoProcessor` + -`AutoModel.transcribe` + `processor.batch_decode`) at HF revision -`99a4df9` (single-file `modeling_granite_speech_nar.py` snapshot, the -README's canonical target); no mask patching is required because the -NAR LM uses `create_bidirectional_mask()` natively. F16, Q8_0, and -Q6_K all match BF16's 1.29%; Q5_K_M dips slightly to 1.25% (within -overlapping CIs). +BF16 reference baseline (transformers `model.transcribe`, MPS, re-run locally): +1.28% — matches the upstream model card's 1.29% to within sampling noise. Text +normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR +Leaderboard uses. Reference reproduction follows the model card path verbatim +(`AutoProcessor` + `AutoModel.transcribe` + `processor.batch_decode`) at HF revision +`99a4df9` (single-file `modeling_granite_speech_nar.py` snapshot, the README's +canonical target); no mask patching is required because the NAR LM uses +`create_bidirectional_mask()` natively. F16, Q8_0, and Q6_K all match BF16's 1.29%; +Q5_K_M dips slightly to 1.25% (within overlapping CIs). @@ -94,7 +95,7 @@ editor handles language detection implicitly. ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | @@ -109,7 +110,7 @@ Apple M4 Max: transcribe.cpp `de05c43` on 2026-05-21. ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/granite-speech-4.1-2b-plus.md b/docs/models/granite-speech-4.1-2b-plus.md index 2e788a75..9c223484 100644 --- a/docs/models/granite-speech-4.1-2b-plus.md +++ b/docs/models/granite-speech-4.1-2b-plus.md @@ -53,18 +53,20 @@ pinned 2026-05-17. | Q4_K_M | [granite-speech-4.1-2b-plus-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-plus-gguf/resolve/main/granite-speech-4.1-2b-plus-Q4_K_M.gguf) | 1.49 GB | 1.56% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy decoding and the model-card chat template (system prompt + -leading-space user instruction + `add_generation_prompt=True`). BF16 -reference baseline (re-run locally with that exact prompt): 1.48%; 0.04pp -above upstream's published 1.44%, within bootstrap CI overlap and likely -a chat-template / normalization difference on the publisher side. Text -normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR -Leaderboard uses. The `add_generation_prompt=True` is load-bearing — -without it the model emits 25-27 empty hypotheses on short test-clean -clips and WER blows up to ~26%. The transcribe.cpp runtime hard-codes the -prompt correctly; this note only matters if you reproduce the reference. +Greedy decoding with the model-card chat template (system prompt + leading-space +user instruction + `add_generation_prompt=True`). BF16 reference baseline (re-run +locally with that exact prompt): 1.48%; 0.04pp above upstream's published 1.44%, +within bootstrap CI overlap and likely a chat-template / normalization difference on +the publisher side. Text normalizer: Whisper `EnglishTextNormalizer`, the same +normalizer Open ASR Leaderboard uses. The `add_generation_prompt=True` is +load-bearing — without it the model emits 25-27 empty hypotheses on short test-clean +clips and WER blows up to ~26%. The transcribe.cpp runtime hard-codes the prompt +correctly; this note only matters if you reproduce the reference. @@ -126,7 +128,7 @@ words: 22 ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | --------------: | @@ -141,7 +143,7 @@ Apple M4 Max: transcribe.cpp `de05c43` on 2026-05-21. ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/granite-speech-4.1-2b.md b/docs/models/granite-speech-4.1-2b.md index 827dcf30..56c6033d 100644 --- a/docs/models/granite-speech-4.1-2b.md +++ b/docs/models/granite-speech-4.1-2b.md @@ -46,13 +46,16 @@ pinned 2026-05-17. | Q4_K_M | [granite-speech-4.1-2b-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-4.1-2b-gguf/resolve/main/granite-speech-4.1-2b-Q4_K_M.gguf) | 1.60 GB | 1.37% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy decoding. BF16 reference baseline (re-run locally with the -model card's exact prompt): 1.31% — 0.02pp below upstream's published -1.33%, likely a minor normalization difference on the publisher side and -well within bootstrap CI overlap. Text normalizer: Whisper -`EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. +Greedy decoding. BF16 reference baseline (re-run locally with the model card's exact +prompt): 1.31% — 0.02pp below upstream's published 1.33%, likely a minor +normalization difference on the publisher side and well within bootstrap CI overlap. +Text normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR +Leaderboard uses. @@ -99,7 +102,7 @@ build/bin/transcribe-cli \ ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | @@ -114,7 +117,7 @@ Apple M4 Max: transcribe.cpp `de05c43` on 2026-05-21. ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/granite-speech-5.0-470m-turboctc-nc.md b/docs/models/granite-speech-5.0-470m-turboctc-nc.md index 6cc66eb9..3a863b4a 100644 --- a/docs/models/granite-speech-5.0-470m-turboctc-nc.md +++ b/docs/models/granite-speech-5.0-470m-turboctc-nc.md @@ -1,14 +1,12 @@ # Granite Speech 5.0 470M TurboCTC NC -IBM's [`ibm-granite/granite-speech-5.0-470m-turboctc-nc`](https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc-nc) -ported to transcribe.cpp. A 470M-parameter Granite Conformer encoder with a -self-conditioned CTC head. + +Upstream: [`ibm-granite/granite-speech-5.0-470m-turboctc-nc`](https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc-nc) at [`0eb7b4f`](https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc-nc/commit/0eb7b4f). -> **Non-commercial.** Licensed -> [CC-BY-NC-SA-4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/), not -> Apache-2.0. Research and non-commercial use only, and ShareAlike means these -> GGUFs carry the same terms. For commercial use take the Apache-2.0 sibling, -> [`granite-speech-5.0-470m-turboctc`](granite-speech-5.0-470m-turboctc.md). +Offline English speech-to-text, research and non-commercial use only. A 470M +parameter Granite Conformer encoder with a self-conditioned CTC head. +Takes a 16 kHz mono WAV and produces a transcript. Not a streaming model. English only. + ## What it's for @@ -19,27 +17,39 @@ Same architecture as the Apache-2.0 sibling, trained on more data (~75,000 h vs ~60,000 h). IBM reports 4.85% aggregate WER across the 8 Open ASR leaderboard test sets for this model, against 5.00% for the sibling. -Licensed CC-BY-NC-SA-4.0. Ported from upstream commit -[`0eb7b4f`](https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc-nc/commit/0eb7b4fe726a294815dc45d342860465b5af68ef), -pinned 2026-09-12. + +Licensed CC-BY-NC-SA-4.0. Ported from upstream commit [`0eb7b4f`](https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc-nc/commit/0eb7b4f), pinned 2026-09-12. Validated against the transformers reference at transcribe.cpp commit [`f1d0e10`](https://github.com/handy-computer/transcribe.cpp/tree/f1d0e10) on 2026-09-12. + ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [granite-speech-5.0-470m-turboctc-nc-BF16.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-nc-BF16.gguf) | 948 MB | 1.29% | -| F16 | [granite-speech-5.0-470m-turboctc-nc-F16.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-nc-F16.gguf) | 949 MB | 1.29% | -| Q8_0 | [granite-speech-5.0-470m-turboctc-nc-Q8_0.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-nc-Q8_0.gguf) | 506 MB | 1.30% | -| Q6_K | [granite-speech-5.0-470m-turboctc-nc-Q6_K.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-nc-Q6_K.gguf) | 392 MB | 1.28% | -| Q5_K_M | [granite-speech-5.0-470m-turboctc-nc-Q5_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-nc-Q5_K_M.gguf) | 336 MB | 1.29% | -| Q4_K_M | [granite-speech-5.0-470m-turboctc-nc-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-nc-Q4_K_M.gguf) | 279 MB | 1.33% | - -Measured on the full LibriSpeech test-clean split (2620 utterances), greedy CTC -decoding, no external LM. Reference baseline (transformers 5.17.0, F32, CPU): -**1.29%**, 95% CI [1.15%, 1.42%]. Every tier falls inside that CI, so the -ordering between them is not meaningful. Q4_K_M is the weakest at 1.33%; if you -want a small file without that, use Q5_K_M. Clean read speech only, not checked -on noisy or accented audio. +| BF16 | [granite-speech-5.0-470m-turboctc-nc-BF16.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-nc-BF16.gguf) | 948 MB | 1.29% | +| F16 | [granite-speech-5.0-470m-turboctc-nc-F16.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-nc-F16.gguf) | 949 MB | 1.28% | +| Q8_0 | [granite-speech-5.0-470m-turboctc-nc-Q8_0.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-nc-Q8_0.gguf) | 506 MB | 1.29% | +| Q6_K | [granite-speech-5.0-470m-turboctc-nc-Q6_K.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-nc-Q6_K.gguf) | 392 MB | 1.29% | +| Q5_K_M | [granite-speech-5.0-470m-turboctc-nc-Q5_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-nc-Q5_K_M.gguf) | 336 MB | 1.29% | +| Q4_K_M | [granite-speech-5.0-470m-turboctc-nc-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-nc-Q4_K_M.gguf) | 279 MB | 1.34% | + + + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 8, timestamps none, language hint `en`, decoded on cuda. Measured at transcribe.cpp `9daf396`. + + + +Greedy CTC decoding, no external LM. Measured reference baseline (transformers +5.17.0, F32, CPU): 1.29%, 95% CI [1.15, 1.42]. + + + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 4.30% | + ## Quick Start @@ -51,41 +61,35 @@ build/bin/transcribe-cli \ ## Performance -Wall-clock latency (mean over 3 iterations after 1 warmup), with speedup over -realtime in parentheses. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 37.0 ms (297×) | 38.1 ms (289×) | -| Metal | dots (35.3s) | 85.3 ms (414×) | 87.2 ms (405×) | -| CPU | jfk (11.0s) | 233 ms (47×) | 233 ms (47×) | -| CPU | dots (35.3s) | 696 ms (51×) | 687 ms (52×) | - -macOS 26.6.2, transcribe.cpp `144ccad`. + +Compute latency (mel + encode + decode), speedup over realtime in parentheses. -### AMD Ryzen 7 PRO 4750U +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 35 ms (312.62×) | 36 ms (303.27×) | +| Metal | dots (35.3s) | 81 ms (435.64×) | 83 ms (425.61×) | +| CPU | jfk (11.0s) | 231 ms (47.54×) | 232 ms (47.46×) | +| CPU | dots (35.3s) | 694 ms (50.91×) | 685 ms (51.59×) | -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 631 ms (17×) | 647 ms (17×) | -| Vulkan | dots (35.3s) | 1.49 s (24×) | 1.52 s (23×) | -| CPU | jfk (11.0s) | 702 ms (16×) | 654 ms (17×) | -| CPU | dots (35.3s) | 2.27 s (16×) | 2.26 s (16×) | +Apple M4 Max: transcribe.cpp `144ccad` on 2026-09-12. + -Fedora 43, transcribe.cpp `3a5ed01`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. +### AMD Ryzen 7 PRO 4750U -### Apple M4 + +Compute latency (mel + encode + decode), speedup over realtime in parentheses. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 100 ms (110×) | 103 ms (107×) | -| Metal | dots (35.3s) | 271 ms (131×) | 278 ms (127×) | -| CPU | jfk (11.0s) | 383 ms (29×) | 414 ms (27×) | -| CPU | dots (35.3s) | 1.17 s (30×) | 1.26 s (28×) | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 585 ms (18.79×) | 598 ms (18.40×) | +| Vulkan | dots (35.3s) | 1.32 s (26.86×) | 1.34 s (26.37×) | +| CPU | jfk (11.0s) | 694 ms (15.84×) | 648 ms (16.98×) | +| CPU | dots (35.3s) | 2.25 s (15.72×) | 2.24 s (15.74×) | -macOS 26.5.1, transcribe.cpp `54b241e`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `3a5ed01` on 2026-09-12. + Q8_0 is usually a little faster than Q4_K_M despite being 1.8× the size, so pick Q4_K_M for footprint rather than speed. Cost is linear in audio length, so diff --git a/docs/models/granite-speech-5.0-470m-turboctc.md b/docs/models/granite-speech-5.0-470m-turboctc.md index a880a102..2457885d 100644 --- a/docs/models/granite-speech-5.0-470m-turboctc.md +++ b/docs/models/granite-speech-5.0-470m-turboctc.md @@ -1,17 +1,21 @@ # Granite Speech 5.0 470M TurboCTC -IBM's [`ibm-granite/granite-speech-5.0-470m-turboctc`](https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc) -ported to transcribe.cpp. A 470M-parameter Granite Conformer encoder with a -self-conditioned CTC head. + +Upstream: [`ibm-granite/granite-speech-5.0-470m-turboctc`](https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc) at [`18ca3c1`](https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc/commit/18ca3c1). + +Offline English speech-to-text. A 470M parameter Granite Conformer encoder +with a self-conditioned CTC head. +Takes a 16 kHz mono WAV and produces a transcript. Not a streaming model. English only. + ## What it's for Offline English speech-to-text. Takes a 16 kHz mono WAV and produces a transcript. Not a streaming model. English only, and it does not translate. -Licensed Apache-2.0. Ported from upstream commit -[`18ca3c1`](https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc/commit/18ca3c1de6cd092b5a30c39fb0f04550b38ed1a0), -pinned 2026-09-12. + +Licensed Apache-2.0. Ported from upstream commit [`18ca3c1`](https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc/commit/18ca3c1), pinned 2026-09-12. Validated against the transformers reference at transcribe.cpp commit [`b9427cf`](https://github.com/handy-computer/transcribe.cpp/tree/b9427cf) on 2026-09-12. + There is also a non-commercial sibling, [`granite-speech-5.0-470m-turboctc-nc`](granite-speech-5.0-470m-turboctc-nc.md), @@ -20,20 +24,33 @@ this one for anything commercial. ## Download -| Quantization | Download | Size | WER (LibriSpeech test-clean) | + +| Quantization | Download | Size | WER (LibriSpeech test-clean) | | --- | --- | ---: | ---: | -| BF16 | [granite-speech-5.0-470m-turboctc-BF16.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-BF16.gguf) | 948 MB | 1.33% | -| F16 | [granite-speech-5.0-470m-turboctc-F16.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-F16.gguf) | 948 MB | 1.33% | -| Q8_0 | [granite-speech-5.0-470m-turboctc-Q8_0.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-Q8_0.gguf) | 506 MB | 1.34% | -| Q6_K | [granite-speech-5.0-470m-turboctc-Q6_K.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-Q6_K.gguf) | 392 MB | 1.33% | -| Q5_K_M | [granite-speech-5.0-470m-turboctc-Q5_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-Q5_K_M.gguf) | 336 MB | 1.34% | -| Q4_K_M | [granite-speech-5.0-470m-turboctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-Q4_K_M.gguf) | 279 MB | 1.34% | - -Measured on the full LibriSpeech test-clean split (2620 utterances), greedy CTC -decoding, no external LM. Reference baseline (transformers 5.17.0, F32, CPU): -**1.33%**, 95% CI [1.20%, 1.47%]. Every tier falls inside that CI, so the -ordering between them is not meaningful and quantizing down to Q4_K_M costs -very little. Clean read speech only, not checked on noisy or accented audio. +| BF16 | [granite-speech-5.0-470m-turboctc-BF16.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-BF16.gguf) | 948 MB | 1.34% | +| F16 | [granite-speech-5.0-470m-turboctc-F16.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-F16.gguf) | 948 MB | 1.33% | +| Q8_0 | [granite-speech-5.0-470m-turboctc-Q8_0.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-Q8_0.gguf) | 506 MB | 1.33% | +| Q6_K | [granite-speech-5.0-470m-turboctc-Q6_K.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-Q6_K.gguf) | 392 MB | 1.33% | +| Q5_K_M | [granite-speech-5.0-470m-turboctc-Q5_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-Q5_K_M.gguf) | 336 MB | 1.34% | +| Q4_K_M | [granite-speech-5.0-470m-turboctc-Q4_K_M.gguf](https://huggingface.co/handy-computer/granite-speech-5.0-470m-turboctc-gguf/resolve/main/granite-speech-5.0-470m-turboctc-Q4_K_M.gguf) | 279 MB | 1.35% | + + + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 8, timestamps none, language hint `en`, decoded on cuda. Measured at transcribe.cpp `9daf396`. + + + +Greedy CTC decoding, no external LM. Measured reference baseline (transformers +5.17.0, F32, CPU): 1.33%, 95% CI [1.20, 1.47]. + + + +**FLEURS test** + +| Language | Metric | Q8_0 | +| --- | --- | ---: | +| en | WER | 4.61% | + ## Quick Start @@ -45,43 +62,35 @@ build/bin/transcribe-cli \ ## Performance -Wall-clock latency (mean over 3 iterations after 1 warmup), with speedup over -realtime in parentheses. - ### Apple M4 Max -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 37.5 ms (293×) | 38.9 ms (283×) | -| Metal | dots (35.3s) | 85.6 ms (413×) | 87.9 ms (402×) | -| CPU | jfk (11.0s) | 232 ms (48×) | 233 ms (47×) | -| CPU | dots (35.3s) | 703 ms (50×) | 689 ms (51×) | + +Compute latency (mel + encode + decode), speedup over realtime in parentheses. -macOS 26.6.2, transcribe.cpp `54b241e`. +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 36 ms (308.18×) | 37 ms (297.06×) | +| Metal | dots (35.3s) | 81 ms (433.84×) | 84 ms (421.77×) | +| CPU | jfk (11.0s) | 230 ms (47.79×) | 231 ms (47.53×) | +| CPU | dots (35.3s) | 700 ms (50.46×) | 687 ms (51.45×) | -### AMD Ryzen 7 PRO 4750U +Apple M4 Max: transcribe.cpp `54b241e` on 2026-09-12. + -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 652 ms (17×) | 647 ms (17×) | -| Vulkan | dots (35.3s) | 1.48 s (24×) | 1.51 s (23×) | -| CPU | jfk (11.0s) | 696 ms (16×) | 663 ms (17×) | -| CPU | dots (35.3s) | 2.28 s (16×) | 2.25 s (16×) | - -Fedora 43, transcribe.cpp `3a5ed01`. Vulkan device: `AMD Radeon Graphics (RADV RENOIR)`. +### AMD Ryzen 7 PRO 4750U -### Apple M4 + +Compute latency (mel + encode + decode), speedup over realtime in parentheses. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ----------------- | ------------: | ------------: | -| Metal | jfk (11.0s) | 100 ms (110×) | 103 ms (107×) | -| Metal | dots (35.3s) | 272 ms (130×) | 279 ms (127×) | -| Metal | dots-full (305.9s)| 2.33 s (131×) | 2.38 s (128×) | -| CPU | jfk (11.0s) | 388 ms (28×) | 423 ms (26×) | -| CPU | dots (35.3s) | 1.19 s (30×) | 1.27 s (28×) | -| CPU | dots-full (305.9s)| 8.30 s (37×) | 9.73 s (31×) | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 591 ms (18.62×) | 600 ms (18.33×) | +| Vulkan | dots (35.3s) | 1.30 s (27.22×) | 1.34 s (26.44×) | +| CPU | jfk (11.0s) | 689 ms (15.97×) | 655 ms (16.80×) | +| CPU | dots (35.3s) | 2.26 s (15.65×) | 2.23 s (15.82×) | -macOS 26.5.1, transcribe.cpp `f2d5e31`. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `3a5ed01` on 2026-09-12. + Q8_0 is usually a little faster than Q4_K_M despite being 1.8× the size, so pick Q4_K_M for footprint rather than speed. Cost is linear in audio length: diff --git a/docs/models/granite-speech-5.0-turboctc.md b/docs/models/granite-speech-5.0-turboctc.md index 010cd741..46c190fa 100644 --- a/docs/models/granite-speech-5.0-turboctc.md +++ b/docs/models/granite-speech-5.0-turboctc.md @@ -28,10 +28,12 @@ Apache one unless you specifically want the NC weights. ## All variants -| Variant | Licence | WER (test-clean) | Card | -| --- | --- | ---: | --- | -| `granite-speech-5.0-470m-turboctc` | Apache-2.0 | 1.33% | [card](granite-speech-5.0-470m-turboctc.md) | -| `granite-speech-5.0-470m-turboctc-nc` | CC-BY-NC-SA-4.0 | 1.29% | [card](granite-speech-5.0-470m-turboctc-nc.md) | + +| Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | +| --- | ---: | --- | ---: | --- | ---: | --- | --- | +| `granite-speech-5.0-470m-turboctc` | 473M | en | 506 MB | LibriSpeech test-clean (WER) | 1.33% | - | [granite-speech-5.0-470m-turboctc.md](granite-speech-5.0-470m-turboctc.md) | +| `granite-speech-5.0-470m-turboctc-nc` | 473M | en | 506 MB | LibriSpeech test-clean (WER) | 1.29% | - | [granite-speech-5.0-470m-turboctc-nc.md](granite-speech-5.0-470m-turboctc-nc.md) | + Both ship BF16, F16, Q8_0, Q6_K, Q5_K_M and Q4_K_M, from 948 MB down to 279 MB. Download links are on the per-variant cards. diff --git a/docs/models/medasr.md b/docs/models/medasr.md index 225ff335..607221d3 100644 --- a/docs/models/medasr.md +++ b/docs/models/medasr.md @@ -37,8 +37,20 @@ long recordings for best results. See the | Q4_K_M | [medasr-Q4_K_M.gguf](https://huggingface.co/handy-computer/medasr-gguf/resolve/main/medasr-Q4_K_M.gguf) | 83 MB | 18.14% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2,620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline (HuggingFace transformers, Mac MPS): 17.88%; transcribe.cpp F32 matches exactly. Absolute WER is higher than general-purpose ASR (e.g. Whisper-base ~5%) because the model is fine-tuned for medical dictation — on the publisher's internal RAD-DICT / GENERAL-DICT / FM-DICT datasets the model scores 6.6%–9.3%, but those datasets are not publicly reproducible. Q8_0 is the recommended default (smallest preset with no statistically detectable WER degradation); Q4_K_M shows a real +0.26 pp degradation and is shipped for completeness but not recommended — prefer Q5_K_M if you need smaller than Q8_0. +Greedy CTC decoding, no external LM. F32 reference baseline (HuggingFace +transformers, Mac MPS): 17.88%; transcribe.cpp F32 matches exactly. Absolute WER is +higher than general-purpose ASR (e.g. Whisper-base ~5%) because the model is +fine-tuned for medical dictation — on the publisher's internal RAD-DICT / +GENERAL-DICT / FM-DICT datasets the model scores 6.6%–9.3%, but those datasets are +not publicly reproducible. Q8_0 is the recommended default (smallest preset with no +statistically detectable WER degradation); Q4_K_M shows a real +0.26 pp degradation +and is shipped for completeness but not recommended — prefer Q5_K_M if you need +smaller than Q8_0. @@ -72,7 +84,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ------------: | ------------: | @@ -87,7 +99,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/moonshine-base.md b/docs/models/moonshine-base.md index 2e59e9cb..7f3eab25 100644 --- a/docs/models/moonshine-base.md +++ b/docs/models/moonshine-base.md @@ -23,12 +23,9 @@ timestamps. See the [upstream model card](https://huggingface.co/UsefulSensors/moonshine-base) for training data, intended use, and the original evaluation methodology. -Licensed MIT. Ported from upstream commit -[`7a73d8d`](https://huggingface.co/UsefulSensors/moonshine-base/commit/7a73d8d55ac0ba2ef3ae761593f6784b51f96dcf), -pinned 2026-05-05. Validated against the transformers reference at -transcribe.cpp commit -[`07a8a84`](https://github.com/handy-computer/transcribe.cpp/tree/07a8a84) -on 2026-05-05. + +Licensed MIT. Ported from upstream commit [`7a73d8d`](https://huggingface.co/UsefulSensors/moonshine-base/commit/7a73d8d), pinned 2026-05-05. Validated against the transformers reference at transcribe.cpp commit [`07a8a84`](https://github.com/handy-computer/transcribe.cpp/tree/07a8a84) on 2026-05-05. + ## Download @@ -40,15 +37,17 @@ on 2026-05-05. | Q8_0 | [moonshine-base-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-base-gguf/resolve/main/moonshine-base-Q8_0.gguf) | 77 MB | 3.26% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with the transcribe.cpp default decode (greedy, num_beams=1, -max_length=194 — matching the upstream generation_config). Upstream -reports 3.27% on the same split (Moonshine paper, Table 2; also Open -ASR Leaderboard). Our F32 reference baseline lands at 3.28%, identical -to upstream within rounding and well within the ±1.00 pp Stage 7 -acceptance gate. Q8_0 lands at 3.26%, slightly under F32 — that delta -sits inside the 95% bootstrap CI and is noise, not a real improvement. +Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=194, +matching the upstream generation_config). Upstream reports 3.27% on the same split +(Moonshine paper, Table 2; also Open ASR Leaderboard). Our F32 reference baseline +lands at 3.28%, identical to upstream within rounding and well within the ±1.00 pp +Stage 7 acceptance gate. Q8_0 lands at 3.26%, slightly under F32 — that delta sits +inside the 95% bootstrap CI and is noise, not a real improvement. @@ -81,7 +80,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | @@ -96,7 +95,7 @@ Apple M4 Max: transcribe.cpp `9824fdb` on 2026-05-06. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | diff --git a/docs/models/moonshine-streaming-medium.md b/docs/models/moonshine-streaming-medium.md index 909c41b5..ac1b18ce 100644 --- a/docs/models/moonshine-streaming-medium.md +++ b/docs/models/moonshine-streaming-medium.md @@ -35,17 +35,18 @@ pinned 2026-05-06. | Q8_0 | [moonshine-streaming-medium-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-streaming-medium-gguf/resolve/main/moonshine-streaming-medium-Q8_0.gguf) | 296 MB | 2.16% | + +WER on the full LibriSpeech test-clean split (2,620 utterances). Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference -baseline: 2.16%. Quants are numerically indistinguishable from F32 on -this manifest. Useful Sensors' self-reported number on this split is -2.08% from the Open ASR Leaderboard table; the +0.08pp residual matches -the same scoring / text-normalization difference seen across the tiny -and small variants (cross-checked against HF Transformers on tiny and -found to be at 99.6% identical hypotheses to our port), and is not a -numerical drift. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped -for this variant. +Greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference baseline: 2.16%. +Quants are numerically indistinguishable from F32 on this manifest. Useful Sensors' +self-reported number on this split is 2.08% from the Open ASR Leaderboard table; the ++0.08pp residual matches the same scoring / text-normalization difference seen +across the tiny and small variants (cross-checked against HF Transformers on tiny +and found to be at 99.6% identical hypotheses to our port), and is not a numerical +drift. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. @@ -97,7 +98,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | @@ -112,7 +113,7 @@ Apple M4 Max: transcribe.cpp `0d312ce` on 2026-05-06. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | diff --git a/docs/models/moonshine-streaming-small.md b/docs/models/moonshine-streaming-small.md index d4a09a9a..a3b98a77 100644 --- a/docs/models/moonshine-streaming-small.md +++ b/docs/models/moonshine-streaming-small.md @@ -34,16 +34,18 @@ pinned 2026-05-06. | Q8_0 | [moonshine-streaming-small-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-streaming-small-gguf/resolve/main/moonshine-streaming-small-Q8_0.gguf) | 199 MB | 2.54% | + +WER on the full LibriSpeech test-clean split (2,620 utterances). Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference -baseline: 2.53%. Useful Sensors' self-reported number on this split is -2.49% from the Open ASR Leaderboard table; the +0.04pp residual matches -the same scoring / text-normalization difference seen on the tiny variant -where we cross-checked against the HF Transformers reference (4.52% on -the same manifest, 99.6% identical hypotheses to our F32) and confirmed -it is not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M GGUFs -are not currently shipped for this variant. +Greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference baseline: 2.53%. +Useful Sensors' self-reported number on this split is 2.49% from the Open ASR +Leaderboard table; the +0.04pp residual matches the same scoring / +text-normalization difference seen on the tiny variant where we cross-checked +against the HF Transformers reference (4.52% on the same manifest, 99.6% identical +hypotheses to our F32) and confirmed it is not a numerical drift in the port. Q6_K / +Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. @@ -78,7 +80,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | @@ -93,7 +95,7 @@ Apple M4 Max: transcribe.cpp `0d312ce` on 2026-05-06. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | diff --git a/docs/models/moonshine-streaming-tiny.md b/docs/models/moonshine-streaming-tiny.md index d2f9e456..a26e6a28 100644 --- a/docs/models/moonshine-streaming-tiny.md +++ b/docs/models/moonshine-streaming-tiny.md @@ -33,16 +33,18 @@ pinned 2026-05-06. | Q8_0 | [moonshine-streaming-tiny-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-streaming-tiny-gguf/resolve/main/moonshine-streaming-tiny-Q8_0.gguf) | 50 MB | 4.52% | + +WER on the full LibriSpeech test-clean split (2,620 utterances). Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference -baseline: 4.53%. The HF Transformers reference scored on the same manifest -in the same regime lands at 4.52% with 99.6% byte-identical hypotheses to -our F32, so the port is at exact parity with the reference. Useful Sensors' -self-reported number on this split is 4.49% from the Open ASR Leaderboard -table; the +0.04pp residual is a scoring / text-normalization difference vs -that methodology, not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M -GGUFs are not currently shipped for this variant. +Greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference baseline: 4.53%. +The HF Transformers reference scored on the same manifest in the same regime lands +at 4.52% with 99.6% byte-identical hypotheses to our F32, so the port is at exact +parity with the reference. Useful Sensors' self-reported number on this split is +4.49% from the Open ASR Leaderboard table; the +0.04pp residual is a scoring / +text-normalization difference vs that methodology, not a numerical drift in the +port. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. @@ -97,7 +99,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | | ------- | ------------ | ---------------: | @@ -112,7 +114,7 @@ Apple M4 Max: transcribe.cpp `0d312ce` on 2026-05-06. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | diff --git a/docs/models/moonshine-tiny.md b/docs/models/moonshine-tiny.md index 5d8e3e8e..aaff1894 100644 --- a/docs/models/moonshine-tiny.md +++ b/docs/models/moonshine-tiny.md @@ -21,12 +21,9 @@ timestamps. See the [upstream model card](https://huggingface.co/UsefulSensors/moonshine-tiny) for training data, intended use, and the original evaluation methodology. -Licensed MIT. Ported from upstream commit -[`390624e`](https://huggingface.co/UsefulSensors/moonshine-tiny/commit/390624ed33d594443aa4aa221f5b9f283b545b5a), -pinned 2026-05-05. Validated against the transformers reference at -transcribe.cpp commit -[`07a8a84`](https://github.com/handy-computer/transcribe.cpp/tree/07a8a84) -on 2026-05-05. + +Licensed MIT. Ported from upstream commit [`390624e`](https://huggingface.co/UsefulSensors/moonshine-tiny/commit/390624e), pinned 2026-05-05. Validated against the transformers reference at transcribe.cpp commit [`07a8a84`](https://github.com/handy-computer/transcribe.cpp/tree/07a8a84) on 2026-05-05. + ## Download @@ -38,14 +35,16 @@ on 2026-05-05. | Q8_0 | [moonshine-tiny-Q8_0.gguf](https://huggingface.co/handy-computer/moonshine-tiny-gguf/resolve/main/moonshine-tiny-Q8_0.gguf) | 35 MB | 4.60% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with the transcribe.cpp default decode (greedy, num_beams=1, -max_length=194 — matching the upstream generation_config). Useful -Sensors' self-reported number on the same split is 4.55% (model card). -Our F32 reference baseline lands at 4.58%, within rounding of upstream -and well within the ±1.00 pp Stage 7 acceptance gate. Q8_0 drift is -+0.02 pp vs F32 — within bootstrap CI noise. +Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=194, +matching the upstream generation_config). Useful Sensors' self-reported number on +the same split is 4.55% (model card). Our F32 reference baseline lands at 4.58%, +within rounding of upstream and well within the ±1.00 pp Stage 7 acceptance gate. +Q8_0 drift is +0.02 pp vs F32 — within bootstrap CI noise. @@ -78,7 +77,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | @@ -93,7 +92,7 @@ Apple M4 Max: transcribe.cpp `9824fdb` on 2026-05-06. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | diff --git a/docs/models/moss-transcribe-diarize.md b/docs/models/moss-transcribe-diarize.md index a24115d7..721f488f 100644 --- a/docs/models/moss-transcribe-diarize.md +++ b/docs/models/moss-transcribe-diarize.md @@ -53,26 +53,26 @@ into shorter pieces. | Q4_K_M | [MOSS-Transcribe-Diarize-Q4_K_M.gguf](https://huggingface.co/handy-computer/MOSS-Transcribe-Diarize-gguf/resolve/main/MOSS-Transcribe-Diarize-Q4_K_M.gguf) | 617 MB | 2.59% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech `test-clean` split (2620 English -utterances) with the Whisper-style English text normalizer and jiwer -3.x. MOSS emits the diarized format `[start][Sxx]text[end]`; the bracket -spans are metadata and are de-diarized to a space (for both hypothesis -and reference) before scoring, matching the author-repo reference runner. -These values describe this dataset only, not a general quality ranking: a -quant that scores slightly better here is not necessarily better in -real-world use, because dataset-specific decoding near-ties can make -quantization noise help or hurt individual utterances. The same-manifest -MOSS author-repo reference (bf16, greedy) lands at -**2.07%** with 95% bootstrap CI [1.82%, 2.40%]. The BF16 port lands at -2.08% (within +0.01 of the reference, well inside the CI band); the -lower-bit presets sit between 1.93% and 1.99% (statistical noise) except -Q4_K_M at 2.59%, whose excess is a handful of 4-bit tail failures -(6 empty outputs, 5 English->Chinese language-drift utterances, 1 -timestamp-token repetition loop) rather than broad degradation. Prefer -Q5_K_M or higher if those tail failures matter. Reproduce with -`scripts/wer/run.py` + `scripts/wer/score.py --dediarize`; public -`full_text` applies equivalent marker removal. +Scored with the Whisper-style English text normalizer and jiwer 3.x. MOSS emits the +diarized format `[start][Sxx]text[end]`; the bracket spans are metadata and are +de-diarized to a space (for both hypothesis and reference) before scoring, matching +the author-repo reference runner. These values describe this dataset only, not a +general quality ranking: a quant that scores slightly better here is not necessarily +better in real-world use, because dataset-specific decoding near-ties can make +quantization noise help or hurt individual utterances. The same-manifest MOSS +author-repo reference (bf16, greedy) lands at **2.07%** with 95% bootstrap CI +[1.82%, 2.40%]. The BF16 port lands at 2.08% (within +0.01 of the reference, well +inside the CI band); the lower-bit presets sit between 1.93% and 1.99% (statistical +noise) except Q4_K_M at 2.59%, whose excess is a handful of 4-bit tail failures (6 +empty outputs, 5 English->Chinese language-drift utterances, 1 timestamp-token +repetition loop) rather than broad degradation. Prefer Q5_K_M or higher if those +tail failures matter. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py +--dediarize`; public `full_text` applies equivalent marker removal. @@ -117,7 +117,7 @@ CLI flags: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | @@ -132,7 +132,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md index 700bd26c..742d891a 100644 --- a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md +++ b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md @@ -49,8 +49,15 @@ pinned 2026-07-12. | Q4_K_M | [bundle/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf](https://huggingface.co/handy-computer/multitalker-parakeet-streaming-0.6b-v1-gguf/resolve/main/bundle/multitalker-parakeet-streaming-0.6b-v1-Q4_K_M.gguf) | 617 MB | 2.18% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) in single_speaker_mode with greedy RNN-T decoding and whisper-normalizer (PnC-stripped) scoring. F32 reference baseline: 2.19%. The measured NeMo single_speaker_mode reference and NVIDIA's self-reported number on the same split are both 2.19%. +Run in single_speaker_mode with greedy RNN-T decoding and whisper-normalizer +(PnC-stripped) scoring. F32 reference baseline: 2.19%. The measured NeMo +single_speaker_mode reference and NVIDIA's self-reported number on the same split +are both 2.19%. ### Multitalker bundles (speaker-attributed ASR) @@ -75,6 +82,18 @@ build/bin/transcribe-cli --diarize \ +**AMI IHM test, `kernel` mode** + +| Language | Metric | F32 | +| --- | --- | ---: | +| en | CPWER | 19.35% | + +**AMI IHM test, `masked` mode** + +| Language | Metric | F32 | +| --- | --- | ---: | +| en | CPWER | 23.73% | + **FLEURS test** | Language | Metric | Q8_0 | @@ -141,7 +160,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | @@ -156,7 +175,7 @@ Apple M4 Max: transcribe.cpp `c55a09d` on 2026-07-13. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/nemotron-3.5-asr-streaming-0.6b.md b/docs/models/nemotron-3.5-asr-streaming-0.6b.md index b1b49ad6..2acb1348 100644 --- a/docs/models/nemotron-3.5-asr-streaming-0.6b.md +++ b/docs/models/nemotron-3.5-asr-streaming-0.6b.md @@ -64,8 +64,16 @@ stays unbounded for the same reason. See the | Q4_K_M | [nemotron-3.5-asr-streaming-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/nemotron-3.5-asr-streaming-0.6b-gguf/resolve/main/nemotron-3.5-asr-streaming-0.6b-Q4_K_M.gguf) | 496 MB | + +WER on the full FLEURS en split (647 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on FLEURS test en (647 utterances), greedy RNN-T, --language en-US, whisper-normalizer scoring; the per-quant column is FLEURS en. NeMo reference baseline on the same manifest: 7.99% (NVIDIA self-reports 7.91% en-US). On LibriSpeech test-clean (2620 utterances) the same presets score F32 3.04 / F16 3.03 / Q8_0 3.06 / Q6_K 3.07 / Q5_K_M 3.10 / Q4_K_M 3.28, against a 3.03% NeMo reference. +Greedy RNN-T decoding with whisper-normalizer scoring; the per-quant column is +FLEURS en. NeMo reference baseline on the same manifest: 7.99% (NVIDIA self-reports +7.91% en-US). On LibriSpeech test-clean (2620 utterances) the same presets score F32 +3.04 / F16 3.03 / Q8_0 3.06 / Q6_K 3.07 / Q5_K_M 3.10 / Q4_K_M 3.28, against a 3.03% +NeMo reference. @@ -136,7 +144,7 @@ are out-of-the-box numbers with no tuning. ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | @@ -151,7 +159,7 @@ Apple M4 Max: transcribe.cpp `d9708f1` on 2026-06-08. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/nemotron-speech-streaming-en-0.6b.md b/docs/models/nemotron-speech-streaming-en-0.6b.md index 1d9bbff3..8c58f27e 100644 --- a/docs/models/nemotron-speech-streaming-en-0.6b.md +++ b/docs/models/nemotron-speech-streaming-en-0.6b.md @@ -48,8 +48,13 @@ pinned 2026-05-11. | Q4_K_M | [nemotron-speech-streaming-en-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/nemotron-speech-streaming-en-0.6b-gguf/resolve/main/nemotron-speech-streaming-en-0.6b-Q4_K_M.gguf) | 475 MB | 2.38% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding. F32 reference baseline: 2.31%. NVIDIA's self-reported number on the same split at att_context_size=[70, 13] (1.12s chunk, w/o PnC) is 2.32%. +Greedy RNN-T decoding. F32 reference baseline: 2.31%. NVIDIA's self-reported number +on the same split at att_context_size=[70, 13] (1.12s chunk, w/o PnC) is 2.32%. @@ -108,7 +113,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | @@ -123,7 +128,7 @@ Apple M4 Max: transcribe.cpp `c2e7bf9` on 2026-05-11. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/parakeet-ctc-0.6b.md b/docs/models/parakeet-ctc-0.6b.md index 559f0013..651e59df 100644 --- a/docs/models/parakeet-ctc-0.6b.md +++ b/docs/models/parakeet-ctc-0.6b.md @@ -37,8 +37,13 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-ctc-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-ctc-0.6b-gguf/resolve/main/parakeet-ctc-0.6b-Q4_K_M.gguf) | 469 MB | 1.90% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.87%. +Greedy CTC decoding, no external LM. F32 reference baseline: 1.87%. NVIDIA's +self-reported number on the same split is 1.87%. @@ -71,7 +76,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | @@ -86,7 +91,7 @@ Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/parakeet-ctc-1.1b.md b/docs/models/parakeet-ctc-1.1b.md index c60f4193..5c494d8f 100644 --- a/docs/models/parakeet-ctc-1.1b.md +++ b/docs/models/parakeet-ctc-1.1b.md @@ -37,8 +37,13 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-ctc-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-ctc-1.1b-gguf/resolve/main/parakeet-ctc-1.1b-Q4_K_M.gguf) | 818 MB | 1.90% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.85%. NVIDIA's self-reported number on the same split is 1.83%. +Greedy CTC decoding, no external LM. F32 reference baseline: 1.85%. NVIDIA's +self-reported number on the same split is 1.83%. @@ -71,7 +76,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | @@ -86,7 +91,7 @@ Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/parakeet-primeline.md b/docs/models/parakeet-primeline.md index e38b15cd..b1c990ae 100644 --- a/docs/models/parakeet-primeline.md +++ b/docs/models/parakeet-primeline.md @@ -42,9 +42,12 @@ pinned 2026-08-16. | Q4_K_M | [parakeet-primeline-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-primeline-gguf/resolve/main/parakeet-primeline-Q4_K_M.gguf) | 485 MB | 5.98% | + +WER on the full FLEURS de split (862 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the FLEURS German test split (862 utterances) with greedy -transducer decoding and no external LM. +Greedy transducer decoding, no external LM. primeLine's published figures (2.95% average over Tuda-De, Multilingual LibriSpeech, and Common Voice 19.0) are on different corpora and are not diff --git a/docs/models/parakeet-rnnt-0.6b.md b/docs/models/parakeet-rnnt-0.6b.md index c353eb64..3e78ca4b 100644 --- a/docs/models/parakeet-rnnt-0.6b.md +++ b/docs/models/parakeet-rnnt-0.6b.md @@ -39,8 +39,13 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-rnnt-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-0.6b-gguf/resolve/main/parakeet-rnnt-0.6b-Q4_K_M.gguf) | 476 MB | 1.66% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.62%. NVIDIA's self-reported number on the same split is 1.63%. +Greedy RNN-T decoding, no external LM. F32 reference baseline: 1.62%. NVIDIA's +self-reported number on the same split is 1.63%. @@ -73,7 +78,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -------------: | -------------: | @@ -88,7 +93,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/parakeet-rnnt-1.1b.md b/docs/models/parakeet-rnnt-1.1b.md index 596d4ee0..c455e495 100644 --- a/docs/models/parakeet-rnnt-1.1b.md +++ b/docs/models/parakeet-rnnt-1.1b.md @@ -37,8 +37,13 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-rnnt-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-rnnt-1.1b-gguf/resolve/main/parakeet-rnnt-1.1b-Q4_K_M.gguf) | 825 MB | 1.41% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.45%. NVIDIA's self-reported number on the same split is 1.46%. +Greedy RNN-T decoding, no external LM. F32 reference baseline: 1.45%. NVIDIA's +self-reported number on the same split is 1.46%. @@ -71,7 +76,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -------------: | --------------: | @@ -86,7 +91,7 @@ Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/parakeet-tdt-0.6b-v2.md b/docs/models/parakeet-tdt-0.6b-v2.md index 5beaa596..c4ac1686 100644 --- a/docs/models/parakeet-tdt-0.6b-v2.md +++ b/docs/models/parakeet-tdt-0.6b-v2.md @@ -36,11 +36,14 @@ pinned 2026-04-15. | Q4_K_M | [parakeet-tdt-0.6b-v2-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v2-gguf/resolve/main/parakeet-tdt-0.6b-v2-Q4_K_M.gguf) | 475 MB | 1.72% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with -greedy transducer decoding and no external LM. F32 reference baseline: 1.68%. -NVIDIA's self-reported number on the same split is 1.69%, so the F32 and Q8_0 -ports match the upstream reference within rounding. +Greedy transducer decoding, no external LM. F32 reference baseline: 1.68%. NVIDIA's +self-reported number on the same split is 1.69%, so the F32 and Q8_0 ports match the +upstream reference within rounding. @@ -73,7 +76,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -------------: | -------------: | @@ -88,7 +91,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/parakeet-tdt-0.6b-v3.md b/docs/models/parakeet-tdt-0.6b-v3.md index 806a2d62..b02cb505 100644 --- a/docs/models/parakeet-tdt-0.6b-v3.md +++ b/docs/models/parakeet-tdt-0.6b-v3.md @@ -39,10 +39,13 @@ pinned 2026-04-16. | Q4_K_M | [parakeet-tdt-0.6b-v3-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-0.6b-v3-gguf/resolve/main/parakeet-tdt-0.6b-v3-Q4_K_M.gguf) | 485 MB | 1.98% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with -greedy transducer decoding and no external LM. F32 reference baseline: 1.95%. -NVIDIA's self-reported number on the same split is 1.93%. +Greedy transducer decoding, no external LM. F32 reference baseline: 1.95%. NVIDIA's +self-reported number on the same split is 1.93%. @@ -99,7 +102,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | @@ -114,7 +117,7 @@ Apple M4 Max: transcribe.cpp `140ed3a` on 2026-04-16. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/parakeet-tdt-1.1b.md b/docs/models/parakeet-tdt-1.1b.md index abc546ab..de41935a 100644 --- a/docs/models/parakeet-tdt-1.1b.md +++ b/docs/models/parakeet-tdt-1.1b.md @@ -38,8 +38,13 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-tdt-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt-1.1b-gguf/resolve/main/parakeet-tdt-1.1b-Q4_K_M.gguf) | 825 MB | 1.42% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.39%. NVIDIA's self-reported number on the same split is 1.39%. +Greedy TDT/RNN-T transducer decoding, no external LM. F32 reference baseline: 1.39%. +NVIDIA's self-reported number on the same split is 1.39%. @@ -72,7 +77,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | @@ -87,7 +92,7 @@ Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/parakeet-tdt_ctc-1.1b.md b/docs/models/parakeet-tdt_ctc-1.1b.md index bb51da7e..db887139 100644 --- a/docs/models/parakeet-tdt_ctc-1.1b.md +++ b/docs/models/parakeet-tdt_ctc-1.1b.md @@ -36,8 +36,13 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-tdt_ctc-1.1b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-1.1b-gguf/resolve/main/parakeet-tdt_ctc-1.1b-Q4_K_M.gguf) | 825 MB | 1.91% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.82%. +Greedy TDT/RNN-T transducer decoding, no external LM. F32 reference baseline: 1.87%. +NVIDIA's self-reported number on the same split is 1.82%. @@ -70,7 +75,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | @@ -85,7 +90,7 @@ Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/parakeet-tdt_ctc-110m.md b/docs/models/parakeet-tdt_ctc-110m.md index 1b38b552..cd82d7cd 100644 --- a/docs/models/parakeet-tdt_ctc-110m.md +++ b/docs/models/parakeet-tdt_ctc-110m.md @@ -34,8 +34,13 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-tdt_ctc-110m-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-tdt_ctc-110m-gguf/resolve/main/parakeet-tdt_ctc-110m-Q4_K_M.gguf) | 90 MB | 2.53% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 2.43%. NVIDIA's self-reported number on the same split is 2.40%. +Greedy TDT/RNN-T transducer decoding, no external LM. F32 reference baseline: 2.43%. +NVIDIA's self-reported number on the same split is 2.40%. @@ -68,7 +73,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | @@ -83,7 +88,7 @@ Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/parakeet-unified-en-0.6b.md b/docs/models/parakeet-unified-en-0.6b.md index 0ae1bec9..684af2b0 100644 --- a/docs/models/parakeet-unified-en-0.6b.md +++ b/docs/models/parakeet-unified-en-0.6b.md @@ -51,8 +51,13 @@ pinned 2026-05-10. | Q4_K_M | [parakeet-unified-en-0.6b-Q4_K_M.gguf](https://huggingface.co/handy-computer/parakeet-unified-en-0.6b-gguf/resolve/main/parakeet-unified-en-0.6b-Q4_K_M.gguf) | 477 MB | 1.62% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.59%. NVIDIA's self-reported number on the same split is 1.63%. +Greedy RNN-T decoding, no external LM. F32 reference baseline: 1.59%. NVIDIA's +self-reported number on the same split is 1.63%. @@ -85,7 +90,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | @@ -100,7 +105,7 @@ Apple M4 Max: transcribe.cpp `12f1076`. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/qwen3-asr-0.6b.md b/docs/models/qwen3-asr-0.6b.md index 299360cd..09f8995a 100644 --- a/docs/models/qwen3-asr-0.6b.md +++ b/docs/models/qwen3-asr-0.6b.md @@ -39,14 +39,16 @@ Ported from upstream commit | Q4_K_M | [Qwen3-ASR-0.6B-Q4_K_M.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-0.6B-gguf/resolve/main/Qwen3-ASR-0.6B-Q4_K_M.gguf) | 590 MB | 2.26% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech `test-clean` split (2620 English -utterances) with the Whisper-style English text normalizer and jiwer 3.x, -on the metal backend of an Apple M4. Qwen3-ASR is a multilingual model — -this number characterizes the English case only. BF16 / F16 / Q8_0 / Q6_K -are all within bootstrap CI of each other; Q5_K_M and Q4_K_M show a small -but real regression driven by the tied token-embedding / head. Reproduce -with `scripts/wer/run.py` + `scripts/wer/score.py`. +Scored with the Whisper-style English text normalizer and jiwer 3.x on an Apple M4. +Qwen3-ASR is a multilingual model — this number characterizes the English case only. +BF16 / F16 / Q8_0 / Q6_K are all within bootstrap CI of each other; Q5_K_M and +Q4_K_M show a small but real regression driven by the tied token-embedding / head. +Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. @@ -124,7 +126,7 @@ chat template is tracked as follow-up work; see the family note at ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ------------: | ------------: | @@ -139,7 +141,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -------------: | --------------: | diff --git a/docs/models/qwen3-asr-1.7b.md b/docs/models/qwen3-asr-1.7b.md index de785977..47d8ccf9 100644 --- a/docs/models/qwen3-asr-1.7b.md +++ b/docs/models/qwen3-asr-1.7b.md @@ -39,15 +39,16 @@ Ported from upstream commit | Q4_K_M | [Qwen3-ASR-1.7B-Q4_K_M.gguf](https://huggingface.co/handy-computer/Qwen3-ASR-1.7B-gguf/resolve/main/Qwen3-ASR-1.7B-Q4_K_M.gguf) | 1.32 GB | 1.81% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech `test-clean` split (2620 English -utterances) with the Whisper-style English text normalizer and jiwer 3.x, -on the metal backend of an Apple M4. Qwen3-ASR is a multilingual model — -this number characterizes the English case only. The larger decoder -gives 1.7B more quantization headroom than the 0.6B; BF16 / F16 / Q8_0 / -Q6_K / Q5_K_M are all within bootstrap CI of each other, and Q4_K_M -regresses only ~0.2 WER points. Reproduce with `scripts/wer/run.py` + -`scripts/wer/score.py`. +Scored with the Whisper-style English text normalizer and jiwer 3.x on an Apple M4. +Qwen3-ASR is a multilingual model — this number characterizes the English case only. +The larger decoder gives 1.7B more quantization headroom than the 0.6B; BF16 / F16 / +Q8_0 / Q6_K / Q5_K_M are all within bootstrap CI of each other, and Q4_K_M regresses +only ~0.2 WER points. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. @@ -116,7 +117,7 @@ the rationale and the planned follow-up. ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ------------: | ------------: | @@ -131,7 +132,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/sensevoice-small.md b/docs/models/sensevoice-small.md index 4a886523..343b4b91 100644 --- a/docs/models/sensevoice-small.md +++ b/docs/models/sensevoice-small.md @@ -9,8 +9,10 @@ and Korean. A 234M-parameter SAN-M encoder with a single CTC head over a 30 seconds per call, per upstream's direct-inference contract) and produces a transcript. Not a streaming model, no translation, no built-in long-form chunking. The same CTC head also emits language-ID, simple emotion labels, -audio-event tags, and an inverse-text-normalization flag — opt-in via -`--raw-tokens` and `--itn`. +audio-event tags, and inverse-text-normalization control tags. These tags are +hidden unless `--raw-tokens` is passed. ITN is on by default for readable +casing, punctuation, and digits; pass `--no-itn` for upstream's spoken-form +output. ## What it's for @@ -82,15 +84,19 @@ recordings (e.g. with VAD) for best results. See the | Q4_K_M | [SenseVoiceSmall-Q4_K_M.gguf](https://huggingface.co/handy-computer/SenseVoiceSmall-gguf/resolve/main/SenseVoiceSmall-Q4_K_M.gguf) | 146 MB | 3.45% | + +WER on the full LibriSpeech test-clean split (2,620 utterances). Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) -with greedy CTC decoding. The publisher does not report a numerical -LibriSpeech WER (the model card publishes scores only as PNG figures), so -the gate baseline is our own FunASR 1.3.1 reference run on the same -manifest: 3.13% (95% CI [2.93%, 3.34%]). transcribe.cpp's F32 port matches -that baseline within +0.002 percentage-points. LibriSpeech is an English -benchmark; SenseVoice's strongest case is Mandarin, and AISHELL-1 (CER) -is the recommended complementary check. +Greedy CTC decoding. The publisher does not report a numerical LibriSpeech WER (the +model card publishes scores only as PNG figures), so the gate baseline is our own +FunASR 1.3.1 reference run on the same manifest: 3.13% (95% CI [2.93%, 3.34%]). +transcribe.cpp's F32 port matches that baseline within +0.002 percentage-points. +LibriSpeech is an English benchmark; SenseVoice's strongest case is Mandarin, and +AISHELL-1 (CER) is the recommended complementary check. These table values were +measured with ITN off, matching the FunASR reference; `scripts/wer/run.py` pins +`--no-itn` so the benchmark does not inherit the runtime default. @@ -153,7 +159,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -------------: | -------------: | @@ -168,7 +174,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/voxtral-mini-3b-2507.md b/docs/models/voxtral-mini-3b-2507.md index d2fda48a..8238a5a6 100644 --- a/docs/models/voxtral-mini-3b-2507.md +++ b/docs/models/voxtral-mini-3b-2507.md @@ -45,14 +45,16 @@ pinned 2026-06-06. | Q4_K_M | [Voxtral-Mini-3B-2507-Q4_K_M.gguf](https://huggingface.co/handy-computer/Voxtral-Mini-3B-2507-gguf/resolve/main/Voxtral-Mini-3B-2507-Q4_K_M.gguf) | 2.98 GB | 1.94% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 8, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with -the Whisper English text normalizer, batch size 8 on an NVIDIA L40S. -Same-machine HuggingFace transformers reference -(VoxtralForConditionalGeneration, BF16, attn_implementation=eager, greedy): -1.87%; the BF16 GGUF matches within rounding. The BF16-vs-reference parity is -the family's tensor-level numerical gate — 43 checkpointed tensors within -tolerance, transcript byte-exact. +Scored with the Whisper English text normalizer on an NVIDIA L40S. Same-machine +HuggingFace transformers reference (VoxtralForConditionalGeneration, BF16, +attn_implementation=eager, greedy): 1.87%; the BF16 GGUF matches within rounding. +The BF16-vs-reference parity is the family's tensor-level numerical gate — 43 +checkpointed tensors within tolerance, transcript byte-exact. @@ -109,7 +111,7 @@ CLI flags: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | @@ -124,7 +126,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/voxtral-realtime.md b/docs/models/voxtral-realtime.md index a7f53c37..1758fc5a 100644 --- a/docs/models/voxtral-realtime.md +++ b/docs/models/voxtral-realtime.md @@ -93,7 +93,7 @@ CLI flags: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | @@ -108,7 +108,7 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | diff --git a/docs/models/voxtral-small-24b-2507.md b/docs/models/voxtral-small-24b-2507.md index 2b9096a8..cbe5beea 100644 --- a/docs/models/voxtral-small-24b-2507.md +++ b/docs/models/voxtral-small-24b-2507.md @@ -43,14 +43,17 @@ pinned 2026-06-05. | Q4_K_M | [Voxtral-Small-24B-2507-Q4_K_M.gguf](https://huggingface.co/handy-computer/Voxtral-Small-24B-2507-gguf/resolve/main/Voxtral-Small-24B-2507-Q4_K_M.gguf) | 14.30 GB | 2.11% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 8, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with -the Whisper English text normalizer, greedy decoding, batch size 8 on an -NVIDIA A100 80 GB. Same-machine HuggingFace transformers reference -(VoxtralForConditionalGeneration, BF16, greedy): 1.57%; the BF16 GGUF matches -at 1.56%. Validation for this variant is end-to-end by WER — the family's -tensor-level numerical parity is established by the Voxtral Mini 3B sibling -(identical architecture). +Greedy decoding scored with the Whisper English text normalizer on an NVIDIA A100 80 +GB. Same-machine HuggingFace transformers reference +(VoxtralForConditionalGeneration, BF16, greedy): 1.57%; the BF16 GGUF matches at +1.56%. Validation for this variant is end-to-end by WER — the family's tensor-level +numerical parity is established by the Voxtral Mini 3B sibling (identical +architecture). @@ -109,7 +112,7 @@ CLI flags: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | -------------: | diff --git a/docs/models/whisper-base.en.md b/docs/models/whisper-base.en.md index 611c794f..e97d6d65 100644 --- a/docs/models/whisper-base.en.md +++ b/docs/models/whisper-base.en.md @@ -13,12 +13,9 @@ Offline English speech-to-text. The model takes a 16 kHz mono WAV and returns a See the [upstream model card](https://huggingface.co/openai/whisper-base.en) for training data, intended use, and the original evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`911407f`](https://huggingface.co/openai/whisper-base.en/commit/911407f), -pinned 2026-04-25. Validated against the transformers reference at -transcribe.cpp commit -[`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) -on 2026-04-26. + +Licensed Apache-2.0. Ported from upstream commit [`911407f`](https://huggingface.co/openai/whisper-base.en/commit/911407f), pinned 2026-04-25. Validated against the transformers reference at transcribe.cpp commit [`0a26478`](https://github.com/handy-computer/transcribe.cpp/tree/0a26478) on 2026-09-13. + ## Download @@ -33,8 +30,16 @@ on 2026-04-26. | Q4_K_M | [whisper-base.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-base.en-gguf/resolve/main/whisper-base.en-Q4_K_M.gguf) | 59 MB | 4.29% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 4.25%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. +OpenAI's self-reported number on the same split is 4.25%. Both are +short-form WER decoded without timestamps; OpenAI does not publish its exact +evaluation configuration, so small differences are expected. Single-run +figures: GPU reductions can shift corpus WER by about 0.1pp between runs, +mostly on short-clip hallucination outcomes at the noise floor. @@ -67,7 +72,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | @@ -88,7 +93,7 @@ uv run scripts/bench/run.py --profile --models whisper-base.en ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/whisper-base.md b/docs/models/whisper-base.md index 2cedd3a9..ac6a217a 100644 --- a/docs/models/whisper-base.md +++ b/docs/models/whisper-base.md @@ -13,12 +13,9 @@ Offline multilingual speech-to-text and any-language → English speech translat See the [upstream model card](https://huggingface.co/openai/whisper-base) for training data, intended use, and the original evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`e37978b`](https://huggingface.co/openai/whisper-base/commit/e37978b), -pinned 2026-04-25. Validated against the transformers reference at -transcribe.cpp commit -[`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) -on 2026-04-26. + +Licensed Apache-2.0. Ported from upstream commit [`e37978b`](https://huggingface.co/openai/whisper-base/commit/e37978b), pinned 2026-04-25. Validated against the transformers reference at transcribe.cpp commit [`0a26478`](https://github.com/handy-computer/transcribe.cpp/tree/0a26478) on 2026-09-13. + ## Download @@ -33,8 +30,16 @@ on 2026-04-26. | Q4_K_M | [whisper-base-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-base-gguf/resolve/main/whisper-base-Q4_K_M.gguf) | 59 MB | 5.36% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.009%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. +OpenAI's self-reported number on the same split is 5.009%. Both are +short-form WER decoded without timestamps; OpenAI does not publish its exact +evaluation configuration, so small differences are expected. Single-run +figures: GPU reductions can shift corpus WER by about 0.1pp between runs, +mostly on short-clip hallucination outcomes at the noise floor. @@ -147,7 +152,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | @@ -168,7 +173,7 @@ uv run scripts/bench/run.py --profile --models whisper-base ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/whisper-large-v2.md b/docs/models/whisper-large-v2.md index c2c70a82..bfd65869 100644 --- a/docs/models/whisper-large-v2.md +++ b/docs/models/whisper-large-v2.md @@ -13,12 +13,9 @@ Offline multilingual speech-to-text and any-language → English speech translat See the [upstream model card](https://huggingface.co/openai/whisper-large-v2) for training data, intended use, and the original evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`ae46427`](https://huggingface.co/openai/whisper-large-v2/commit/ae46427), -pinned 2026-04-25. Validated against the transformers reference at -transcribe.cpp commit -[`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) -on 2026-04-26. + +Licensed Apache-2.0. Ported from upstream commit [`ae46427`](https://huggingface.co/openai/whisper-large-v2/commit/ae46427), pinned 2026-04-25. Validated against the transformers reference at transcribe.cpp commit [`0a26478`](https://github.com/handy-computer/transcribe.cpp/tree/0a26478) on 2026-09-13. + ## Download @@ -33,8 +30,16 @@ on 2026-04-26. | Q4_K_M | [whisper-large-v2-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v2-gguf/resolve/main/whisper-large-v2-Q4_K_M.gguf) | 997 MB | 2.46% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.83%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. +OpenAI's self-reported number on the same split is 2.83%. Both are +short-form WER decoded without timestamps; OpenAI does not publish its exact +evaluation configuration, so small differences are expected. Single-run +figures: GPU reductions can shift corpus WER by about 0.1pp between runs, +mostly on short-clip hallucination outcomes at the noise floor. @@ -86,6 +91,43 @@ WER measured on the full LibriSpeech test-clean split (2620 utterances) with the | lo | CER | 101.65% | | lt | WER | 30.37% | | lv | WER | 24.49% | +| mi | WER | 39.72% | +| mk | WER | 18.76% | +| ml | WER | 101.85% | +| mn | WER | 115.70% | +| mr | WER | 39.81% | +| ms | WER | 9.38% | +| mt | WER | 73.79% | +| my | CER | 149.11% | +| nb | WER | 9.73% | +| ne | WER | 47.74% | +| nl | WER | 6.76% | +| oc | WER | 75.41% | +| pa | WER | 102.11% | +| pl | WER | 5.87% | +| ps | WER | 94.98% | +| pt | WER | 4.40% | +| ro | WER | 17.10% | +| ru | WER | 5.61% | +| sd | WER | 148.34% | +| sk | WER | 12.49% | +| sl | WER | 24.73% | +| sn | WER | 127.84% | +| so | WER | 106.80% | +| sr | WER | 38.06% | +| sv | WER | 9.25% | +| sw | WER | 41.85% | +| ta | WER | 20.12% | +| te | WER | 100.76% | +| tg | WER | 89.42% | +| th | CER | 12.42% | +| tr | WER | 7.63% | +| uk | WER | 8.17% | +| ur | WER | 23.96% | +| uz | WER | 91.97% | +| vi | WER | 11.25% | +| yo | WER | 96.00% | +| zh | CER | 15.39% | ## Quick Start @@ -110,7 +152,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | @@ -131,7 +173,7 @@ uv run scripts/bench/run.py --profile --models whisper-large-v2 ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/whisper-large-v3-turbo.md b/docs/models/whisper-large-v3-turbo.md index 59ac070b..ce889003 100644 --- a/docs/models/whisper-large-v3-turbo.md +++ b/docs/models/whisper-large-v3-turbo.md @@ -13,12 +13,9 @@ Offline multilingual speech-to-text and any-language → English speech translat See the [upstream model card](https://huggingface.co/openai/whisper-large-v3-turbo) for training data, intended use, and the original evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`41f01f3`](https://huggingface.co/openai/whisper-large-v3-turbo/commit/41f01f3), -pinned 2026-04-25. Validated against the transformers reference at -transcribe.cpp commit -[`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) -on 2026-04-26. + +Licensed Apache-2.0. Ported from upstream commit [`41f01f3`](https://huggingface.co/openai/whisper-large-v3-turbo/commit/41f01f3), pinned 2026-04-25. Validated against the transformers reference at transcribe.cpp commit [`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) on 2026-04-26. + ## Download @@ -32,8 +29,16 @@ on 2026-04-26. | Q4_K_M | [whisper-large-v3-turbo-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v3-turbo-gguf/resolve/main/whisper-large-v3-turbo-Q4_K_M.gguf) | 536 MB | 2.04% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.10%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. +OpenAI's self-reported number on the same split is 2.10%. Both are +short-form WER decoded without timestamps; OpenAI does not publish its exact +evaluation configuration, so small differences are expected. Single-run +figures: GPU reductions can shift corpus WER by about 0.1pp between runs, +mostly on short-clip hallucination outcomes at the noise floor. @@ -75,6 +80,7 @@ WER measured on the full LibriSpeech test-clean split (2620 utterances) with the | is | WER | 21.39% | | it | WER | 2.77% | | ja | CER | 4.82% | +| jv | WER | 53.80% | | ka | WER | 109.21% | | kk | WER | 21.27% | | km | CER | 95.20% | @@ -147,7 +153,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | @@ -168,7 +174,7 @@ uv run scripts/bench/run.py --profile --models whisper-large-v3-turbo ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/whisper-large-v3.md b/docs/models/whisper-large-v3.md index 336c6bcd..9b0fb1a9 100644 --- a/docs/models/whisper-large-v3.md +++ b/docs/models/whisper-large-v3.md @@ -13,12 +13,9 @@ Offline multilingual speech-to-text and any-language → English speech translat See the [upstream model card](https://huggingface.co/openai/whisper-large-v3) for training data, intended use, and the original evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`06f233f`](https://huggingface.co/openai/whisper-large-v3/commit/06f233f), -pinned 2026-04-25. Validated against the transformers reference at -transcribe.cpp commit -[`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) -on 2026-04-26. + +Licensed Apache-2.0. Ported from upstream commit [`06f233f`](https://huggingface.co/openai/whisper-large-v3/commit/06f233f), pinned 2026-04-25. Validated against the transformers reference at transcribe.cpp commit [`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) on 2026-04-26. + ## Download @@ -32,8 +29,16 @@ on 2026-04-26. | Q4_K_M | [whisper-large-v3-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-v3-gguf/resolve/main/whisper-large-v3-Q4_K_M.gguf) | 997 MB | 1.86% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.01%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. +OpenAI's self-reported number on the same split is 2.01%. Both are +short-form WER decoded without timestamps; OpenAI does not publish its exact +evaluation configuration, so small differences are expected. Single-run +figures: GPU reductions can shift corpus WER by about 0.1pp between runs, +mostly on short-clip hallucination outcomes at the noise floor. @@ -147,7 +152,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | @@ -168,7 +173,7 @@ uv run scripts/bench/run.py --profile --models whisper-large-v3 ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/whisper-large.md b/docs/models/whisper-large.md index c0a8f11b..fa334655 100644 --- a/docs/models/whisper-large.md +++ b/docs/models/whisper-large.md @@ -13,12 +13,9 @@ Offline multilingual speech-to-text and any-language → English speech translat See the [upstream model card](https://huggingface.co/openai/whisper-large) for training data, intended use, and the original evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`4ef9b41`](https://huggingface.co/openai/whisper-large/commit/4ef9b41), -pinned 2026-04-25. Validated against the transformers reference at -transcribe.cpp commit -[`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) -on 2026-04-26. + +Licensed Apache-2.0. Ported from upstream commit [`4ef9b41`](https://huggingface.co/openai/whisper-large/commit/4ef9b41), pinned 2026-04-25. Validated against the transformers reference at transcribe.cpp commit [`0a26478`](https://github.com/handy-computer/transcribe.cpp/tree/0a26478) on 2026-09-13. + ## Download @@ -33,8 +30,16 @@ on 2026-04-26. | Q4_K_M | [whisper-large-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-large-gguf/resolve/main/whisper-large-Q4_K_M.gguf) | 997 MB | 2.67% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.73%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. +OpenAI's self-reported number on the same split is 2.73%. Both are +short-form WER decoded without timestamps; OpenAI does not publish its exact +evaluation configuration, so small differences are expected. Single-run +figures: GPU reductions can shift corpus WER by about 0.1pp between runs, +mostly on short-clip hallucination outcomes at the noise floor. @@ -86,7 +91,43 @@ WER measured on the full LibriSpeech test-clean split (2620 utterances) with the | lo | CER | 102.35% | | lt | WER | 37.58% | | lv | WER | 30.18% | +| mi | WER | 54.38% | | mk | WER | 22.81% | +| ml | WER | 101.20% | +| mn | WER | 115.92% | +| mr | WER | 48.22% | +| ms | WER | 11.28% | +| mt | WER | 84.11% | +| my | CER | 128.00% | +| nb | WER | 11.98% | +| ne | WER | 55.71% | +| nl | WER | 8.48% | +| oc | WER | 76.72% | +| pa | WER | 102.98% | +| pl | WER | 7.44% | +| ps | WER | 98.52% | +| pt | WER | 4.49% | +| ro | WER | 17.52% | +| ru | WER | 6.49% | +| sd | WER | 176.25% | +| sk | WER | 17.17% | +| sl | WER | 29.94% | +| sn | WER | 142.46% | +| so | WER | 105.45% | +| sr | WER | 35.57% | +| sv | WER | 11.50% | +| sw | WER | 52.38% | +| ta | WER | 21.70% | +| te | WER | 99.27% | +| tg | WER | 79.55% | +| th | CER | 13.88% | +| tr | WER | 8.73% | +| uk | WER | 9.87% | +| ur | WER | 26.28% | +| uz | WER | 96.56% | +| vi | WER | 11.51% | +| yo | WER | 113.72% | +| zh | CER | 19.32% | ## Quick Start @@ -111,7 +152,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | @@ -132,7 +173,7 @@ uv run scripts/bench/run.py --profile --models whisper-large ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/whisper-medium.en.md b/docs/models/whisper-medium.en.md index 271bd352..4cc97f28 100644 --- a/docs/models/whisper-medium.en.md +++ b/docs/models/whisper-medium.en.md @@ -13,12 +13,9 @@ Offline English speech-to-text. The model takes a 16 kHz mono WAV and returns a See the [upstream model card](https://huggingface.co/openai/whisper-medium.en) for training data, intended use, and the original evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`2e98eb6`](https://huggingface.co/openai/whisper-medium.en/commit/2e98eb6), -pinned 2026-04-25. Validated against the transformers reference at -transcribe.cpp commit -[`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) -on 2026-04-26. + +Licensed Apache-2.0. Ported from upstream commit [`2e98eb6`](https://huggingface.co/openai/whisper-medium.en/commit/2e98eb6), pinned 2026-04-25. Validated against the transformers reference at transcribe.cpp commit [`0a26478`](https://github.com/handy-computer/transcribe.cpp/tree/0a26478) on 2026-09-13. + ## Download @@ -33,8 +30,16 @@ on 2026-04-26. | Q4_K_M | [whisper-medium.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-medium.en-gguf/resolve/main/whisper-medium.en-Q4_K_M.gguf) | 504 MB | 2.91% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.02%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. +OpenAI's self-reported number on the same split is 3.02%. Both are +short-form WER decoded without timestamps; OpenAI does not publish its exact +evaluation configuration, so small differences are expected. Single-run +figures: GPU reductions can shift corpus WER by about 0.1pp between runs, +mostly on short-clip hallucination outcomes at the noise floor. @@ -67,7 +72,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | @@ -88,7 +93,7 @@ uv run scripts/bench/run.py --profile --models whisper-medium.en ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/whisper-medium.md b/docs/models/whisper-medium.md index 37d6c6a8..aa552626 100644 --- a/docs/models/whisper-medium.md +++ b/docs/models/whisper-medium.md @@ -13,12 +13,9 @@ Offline multilingual speech-to-text and any-language → English speech translat See the [upstream model card](https://huggingface.co/openai/whisper-medium) for training data, intended use, and the original evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`abdf7c3`](https://huggingface.co/openai/whisper-medium/commit/abdf7c3), -pinned 2026-04-25. Validated against the transformers reference at -transcribe.cpp commit -[`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) -on 2026-04-26. + +Licensed Apache-2.0. Ported from upstream commit [`abdf7c3`](https://huggingface.co/openai/whisper-medium/commit/abdf7c3), pinned 2026-04-25. Validated against the transformers reference at transcribe.cpp commit [`0a26478`](https://github.com/handy-computer/transcribe.cpp/tree/0a26478) on 2026-09-13. + ## Download @@ -33,8 +30,16 @@ on 2026-04-26. | Q4_K_M | [whisper-medium-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-medium-gguf/resolve/main/whisper-medium-Q4_K_M.gguf) | 504 MB | 2.59% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.90%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. +OpenAI's self-reported number on the same split is 2.90%. Both are +short-form WER decoded without timestamps; OpenAI does not publish its exact +evaluation configuration, so small differences are expected. Single-run +figures: GPU reductions can shift corpus WER by about 0.1pp between runs, +mostly on short-clip hallucination outcomes at the noise floor. @@ -147,7 +152,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | @@ -168,7 +173,7 @@ uv run scripts/bench/run.py --profile --models whisper-medium ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/whisper-small.en.md b/docs/models/whisper-small.en.md index e589f8e5..6e19ca79 100644 --- a/docs/models/whisper-small.en.md +++ b/docs/models/whisper-small.en.md @@ -13,12 +13,9 @@ Offline English speech-to-text. The model takes a 16 kHz mono WAV and returns a See the [upstream model card](https://huggingface.co/openai/whisper-small.en) for training data, intended use, and the original evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`e872752`](https://huggingface.co/openai/whisper-small.en/commit/e872752), -pinned 2026-04-25. Validated against the transformers reference at -transcribe.cpp commit -[`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) -on 2026-04-26. + +Licensed Apache-2.0. Ported from upstream commit [`e872752`](https://huggingface.co/openai/whisper-small.en/commit/e872752), pinned 2026-04-25. Validated against the transformers reference at transcribe.cpp commit [`0a26478`](https://github.com/handy-computer/transcribe.cpp/tree/0a26478) on 2026-09-13. + ## Download @@ -33,8 +30,16 @@ on 2026-04-26. | Q4_K_M | [whisper-small.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-small.en-gguf/resolve/main/whisper-small.en-Q4_K_M.gguf) | 172 MB | 3.09% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.05%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. +OpenAI's self-reported number on the same split is 3.05%. Both are +short-form WER decoded without timestamps; OpenAI does not publish its exact +evaluation configuration, so small differences are expected. Single-run +figures: GPU reductions can shift corpus WER by about 0.1pp between runs, +mostly on short-clip hallucination outcomes at the noise floor. @@ -67,7 +72,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | @@ -88,7 +93,7 @@ uv run scripts/bench/run.py --profile --models whisper-small.en ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/whisper-small.md b/docs/models/whisper-small.md index f25a9517..8f34a44f 100644 --- a/docs/models/whisper-small.md +++ b/docs/models/whisper-small.md @@ -13,12 +13,9 @@ Offline multilingual speech-to-text and any-language → English speech translat See the [upstream model card](https://huggingface.co/openai/whisper-small) for training data, intended use, and the original evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`973afd2`](https://huggingface.co/openai/whisper-small/commit/973afd2), -pinned 2026-04-25. Validated against the transformers reference at -transcribe.cpp commit -[`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) -on 2026-04-26. + +Licensed Apache-2.0. Ported from upstream commit [`973afd2`](https://huggingface.co/openai/whisper-small/commit/973afd2), pinned 2026-04-25. Validated against the transformers reference at transcribe.cpp commit [`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) on 2026-04-26. + ## Download @@ -33,8 +30,16 @@ on 2026-04-26. | Q4_K_M | [whisper-small-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-small-gguf/resolve/main/whisper-small-Q4_K_M.gguf) | 172 MB | 3.40% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.432%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. +OpenAI's self-reported number on the same split is 3.432%. Both are +short-form WER decoded without timestamps; OpenAI does not publish its exact +evaluation configuration, so small differences are expected. Single-run +figures: GPU reductions can shift corpus WER by about 0.1pp between runs, +mostly on short-clip hallucination outcomes at the noise floor. @@ -147,7 +152,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | @@ -168,7 +173,7 @@ uv run scripts/bench/run.py --profile --models whisper-small ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/whisper-tiny.en.md b/docs/models/whisper-tiny.en.md index e7d40734..37c0f46e 100644 --- a/docs/models/whisper-tiny.en.md +++ b/docs/models/whisper-tiny.en.md @@ -13,12 +13,9 @@ Offline English speech-to-text. The model takes a 16 kHz mono WAV and returns a See the [upstream model card](https://huggingface.co/openai/whisper-tiny.en) for training data, intended use, and the original evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`87c7102`](https://huggingface.co/openai/whisper-tiny.en/commit/87c7102), -pinned 2026-04-25. Validated against the transformers reference at -transcribe.cpp commit -[`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) -on 2026-04-26. + +Licensed Apache-2.0. Ported from upstream commit [`87c7102`](https://huggingface.co/openai/whisper-tiny.en/commit/87c7102), pinned 2026-04-25. Validated against the transformers reference at transcribe.cpp commit [`0a26478`](https://github.com/handy-computer/transcribe.cpp/tree/0a26478) on 2026-09-13. + ## Download @@ -33,8 +30,16 @@ on 2026-04-26. | Q4_K_M | [whisper-tiny.en-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-tiny.en-gguf/resolve/main/whisper-tiny.en-Q4_K_M.gguf) | 44 MB | 5.96% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.66%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. +OpenAI's self-reported number on the same split is 5.66%. Both are +short-form WER decoded without timestamps; OpenAI does not publish its exact +evaluation configuration, so small differences are expected. Single-run +figures: GPU reductions can shift corpus WER by about 0.1pp between runs, +mostly on short-clip hallucination outcomes at the noise floor. @@ -67,7 +72,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | @@ -88,7 +93,7 @@ uv run scripts/bench/run.py --profile --models whisper-tiny.en ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/whisper-tiny.md b/docs/models/whisper-tiny.md index 0976b85a..fb559959 100644 --- a/docs/models/whisper-tiny.md +++ b/docs/models/whisper-tiny.md @@ -13,12 +13,9 @@ Offline multilingual speech-to-text and any-language → English speech translat See the [upstream model card](https://huggingface.co/openai/whisper-tiny) for training data, intended use, and the original evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`169d4a4`](https://huggingface.co/openai/whisper-tiny/commit/169d4a4), -pinned 2026-04-25. Validated against the transformers reference at -transcribe.cpp commit -[`5.6.1`](https://github.com/handy-computer/transcribe.cpp/tree/5.6.1) -on 2026-04-26. + +Licensed Apache-2.0. Ported from upstream commit [`169d4a4`](https://huggingface.co/openai/whisper-tiny/commit/169d4a4), pinned 2026-04-25. Validated against the transformers reference at transcribe.cpp commit [`0a26478`](https://github.com/handy-computer/transcribe.cpp/tree/0a26478) on 2026-09-13. + ## Download @@ -33,8 +30,16 @@ on 2026-04-26. | Q4_K_M | [whisper-tiny-Q4_K_M.gguf](https://huggingface.co/handy-computer/whisper-tiny-gguf/resolve/main/whisper-tiny-Q4_K_M.gguf) | 44 MB | 7.78% | + +WER on the full LibriSpeech test-clean split (2,620 utterances), batch size 1, timestamps none. Figures without a commit were published before provenance was recorded. + + -WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 7.54%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. +OpenAI's self-reported number on the same split is 7.54%. Both are +short-form WER decoded without timestamps; OpenAI does not publish its exact +evaluation configuration, so small differences are expected. Single-run +figures: GPU reductions can shift corpus WER by about 0.1pp between runs, +mostly on short-clip hallucination outcomes at the noise floor. @@ -147,7 +152,7 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | @@ -168,7 +173,7 @@ uv run scripts/bench/run.py --profile --models whisper-tiny ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses; mean over 3 iterations after 1 warmup. +Compute latency (mel + encode + decode), speedup over realtime in parentheses. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | diff --git a/docs/models/whisper.md b/docs/models/whisper.md index 8ffd5371..ac292a36 100644 --- a/docs/models/whisper.md +++ b/docs/models/whisper.md @@ -46,7 +46,7 @@ numbers compare to OpenAI's self-reported figures. Numbers come from single Meta | Variant | Params | Languages | Q8_0 size | Benchmark | Q8_0 | Capabilities | Doc | | --- | ---: | --- | ---: | --- | ---: | --- | --- | -| `breeze-asr-25` | 1.5B | 99 languages + auto-detect | 1.67 GB | LibriSpeech test-clean (WER) | 2.27% | translate, segment timestamps | [handy-computer/Breeze-ASR-25-gguf](https://huggingface.co/handy-computer/Breeze-ASR-25-gguf) | +| `breeze-asr-25` | 1.5B | zh, en + auto-detect | 1.67 GB | LibriSpeech test-clean (WER) | 2.27% | translate, segment timestamps | [handy-computer/Breeze-ASR-25-gguf](https://huggingface.co/handy-computer/Breeze-ASR-25-gguf) | | `whisper-tiny` | 38M | 99 languages + auto-detect | 46 MB | LibriSpeech test-clean (WER) | 7.52% | translate, segment timestamps | [whisper-tiny.md](whisper-tiny.md) | | `whisper-tiny.en` | 38M | en | 46 MB | LibriSpeech test-clean (WER) | 5.72% | segment timestamps | [whisper-tiny.en.md](whisper-tiny.en.md) | | `whisper-base` | 73M | 99 languages + auto-detect | 85 MB | LibriSpeech test-clean (WER) | 5.12% | translate, segment timestamps | [whisper-base.md](whisper-base.md) | diff --git a/docs/tools/hf-metadata-schema.md b/docs/tools/hf-metadata-schema.md index bc0ccf60..df0bf748 100644 --- a/docs/tools/hf-metadata-schema.md +++ b/docs/tools/hf-metadata-schema.md @@ -11,25 +11,27 @@ capability flags; any 0–100 score is left to the consumer to compute from thes ## Where it comes from `scripts/hf_cards/generate.py` serializes the block from the catalog record -(`catalog/.json`): per-quant error rates from the headline benchmark -rows, realtime factors from the speed rows at the card's default quant, and -capability flags from the record's `capabilities` block. The editorial spec -(`scripts/hf_cards/.yaml`) adds only optional task-specific raw -measurements (`metrics:`) and secondary per-quant maps under `wer:`. A record -with no speed rows at the default quant emits no block. +(`catalog/.json`): one per-quant map for every accuracy result set the +record holds, realtime factors from the speed rows at the card's default quant, +and capability flags from the record's `capabilities` block. The editorial spec +(`scripts/hf_cards/.yaml`) contributes nothing to it. A record with no +speed rows at the default quant emits no block. ## Fields ```yaml transcribe_cpp: + schema_version: 2 # bumped when key names or shapes change wer_librispeech_test_clean: # raw %, per quant — lower is better f32: 1.68 q8_0: 1.69 q4_k_m: 1.72 - rtf_ryzen_4750u: { cpu: 8, vulkan: 15 } # raw ×realtime — higher is better - rtf_m4_max: { cpu: 29, metal: 175 } - cpwer_ami_ihm_test: # optional task metric, raw % - bundle_f32_kernel: 19.35 + cer_fleurs_zh: # one map per result set + q8_0: 8.10 + cpwer_ami_ihm_test_kernel: # a decoding mode is its own set + f32: 19.35 + rtf_ryzen_4750u: { cpu: 8.12, vulkan: 15.4 } # raw ×realtime — higher is better + rtf_m4_max: { cpu: 29.05, metal: 175.2 } streaming: false diarize: false translate: false @@ -39,25 +41,18 @@ transcribe_cpp: | Field | Meaning | | --- | --- | -| `wer_` | Word error rate (%) per quant, on the named dataset. Lower is better. | -| `rtf_` | Speedup-over-realtime (×RT) per backend, mean over the published bench samples. Higher is better. | -| Task metrics from `metrics:` | Optional raw measurements emitted verbatim under their spec key, such as `cpwer_ami_ihm_test`. | +| `schema_version` | 2. Version 1 cards (no field) carried one hand-named headline map; a CER or DER set could appear under a `wer_` key there. Consumers should read `.get()` and key on the metric prefix. | +| `__[_][_]` | Error rate (%) per quant on that result set. Lower is better. `wer`, `cer`, `der`, `cpwer` as the row's metric; FLEURS keys carry the language, other datasets the split; a scoring step (`opencc_t2s`) or decoding mode (`kernel`) makes a separate key. | +| `rtf_` | Speedup-over-realtime (×RT) per backend at the default quant, mean over the published bench samples. Higher is better. | | `streaming` | Model supports buffered/cache-aware streaming. | | `diarize` | Model can emit speaker-attributed transcript rows or speaker turns. | | `translate` | Model can emit a translation (not just transcription). | | `lang_detect` | Model auto-detects the input language (vs. requiring an explicit hint). | | `timestamps` | Finest timestamp granularity the model emits (`none`/`segment`/`word`/`token`, mirroring the library's `max_timestamp_kind`). | -The `` suffix is the spec's `wer.metadata_key` (default -`librispeech_test_clean`); the `` suffix is the `perf:` rig key with `-` -mapped to `_`. A spec can also publish secondary benchmarks inline: any dataset-named key -under `wer:` whose value is a `{quant: wer%}` map (e.g. `librispeech_test_clean:`) -is emitted as its own `wer_` block alongside the headline one — so a -model whose per-quant column is e.g. FLEURS can still expose LibriSpeech -machine-readably. Add a dataset by adding a key; no wrapper needed. Other -raw task measurements live under the spec's `metrics:` map and are emitted -verbatim. Standard HF keys (`license`, `language`, `pipeline_tag`, `base_model`, -`tags`, …) are emitted alongside and unchanged by this block. +The `` suffix is the catalog machine slug with `-` mapped to `_`. +Standard HF keys (`license`, `language`, `pipeline_tag`, `base_model`, `tags`, +…) are emitted alongside and unchanged by this block. ## Reading it diff --git a/docs/tools/wer.md b/docs/tools/wer.md index 8cedb3bc..1b6d7418 100644 --- a/docs/tools/wer.md +++ b/docs/tools/wer.md @@ -71,6 +71,10 @@ uv run scripts/catalog/check.py --publication-profile --models Arbitrary `run.py` and `modal_sweep.py::sweep` invocations remain useful for experiments, but only profile-stamped full-split reports can be ingested as published accuracy. +Batch size is not part of a cell's identity: the profile recommends batch 8 +because it is faster and cheaper, a cell measured at batch 1 still satisfies +it, and the catalog row records whichever was run. + > **ITN is pinned, not inherited.** The run-time ITN default is per-family and > is a product decision that can move: `sensevoice` resolves it to *on* (there > the ITN toggle is also the only source of casing and punctuation, so ITN-off diff --git a/scripts/bench/run.py b/scripts/bench/run.py index 85f3bae2..dfa21488 100755 --- a/scripts/bench/run.py +++ b/scripts/bench/run.py @@ -678,10 +678,6 @@ def parse_args() -> argparse.Namespace: p.add_argument("--name", type=str, default=None, help="stable label for named baselines " "(replaces timestamp in output filename)") - p.add_argument("--publication", action="store_true", - help="mark a manually specified matrix as publishable. " - "Prefer --profile, which derives and validates the " - "whole publication protocol.") p.add_argument("--profile", nargs="?", const="", help="run a catalog publication profile; optionally name " "it (default: catalog/_benchmark_profiles.json default). " @@ -765,7 +761,7 @@ def _run_one_backend(backend: BackendSpec, # A publication run names itself after the variant unless told # otherwise, so the file on disk says what it is. - run_name = args.name or (f"{variant}-publication" if args.publication else None) + run_name = args.name or (f"{variant}-publication" if args.profile is not None else None) name_slug = slugify(run_name) if run_name else None runs: list[dict] = [] for cell in group: @@ -797,7 +793,6 @@ def _run_one_backend(backend: BackendSpec, "name": run_name or "", # Eligibility for the catalog is a property the run declares, not # something an importer infers from the filename later. - "publication": bool(args.publication), "publication_profile": args._profile_id, "machine": machine, "git_sha": git_sha, @@ -872,7 +867,6 @@ def main() -> int: args.iters = int(speed["iterations"]) args.warmup = int(speed["warmup"]) args.cooldown_tctl_c = float(target.get("cooldown_tctl_c", 0.0)) - args.publication = True else: quants = [q.strip() for q in (args.quants or ",".join(DEFAULT_QUANTS)).split(",") if q.strip()] diff --git a/scripts/catalog/check.py b/scripts/catalog/check.py index df4c6cd8..226a2d35 100755 --- a/scripts/catalog/check.py +++ b/scripts/catalog/check.py @@ -61,33 +61,40 @@ def integrity_pass(records: dict) -> int: return bad -def pairing_pass(records: dict) -> int: +def pairing_pass(records: dict, selected: bool = False) -> int: """Catalog records and card specs pair exactly; docs may be shared. - A dozen variants are documented inside a family page rather than a page of - their own (the Moonshine language fine-tunes), so a missing doc is a note - rather than a failure. The editorial card specs under scripts/hf_cards/ + Every record names its docs page (its own, or the family page whose + roll-up lists it), and that file must exist. The editorial card specs under scripts/hf_cards/ pair one to one with records: generate.py reads both, so an orphan spec has no catalog to render from and a record with no spec has no card. """ card_names = {path.stem for path in (REPO / "scripts" / "hf_cards").glob("*.yaml")} record_names = set(records) missing_cards = sorted(record_names - card_names) - missing_records = sorted(card_names - record_names) - undocumented = sorted( - name for name in record_names - if not (REPO / "docs" / "models" / f"{name}.md").exists() - ) + # Orphan specs are a whole-catalog question; a --models run only asks + # whether the selected records have their card. + missing_records = [] if selected else sorted(card_names - record_names) + if selected: + card_names &= record_names + undocumented = sorted(name for name in record_names if not records[name].get("docs_page")) + bad_pages = sorted( + f"{name}: docs/models/{records[name]['docs_page']} does not exist" + for name in record_names + if records[name].get("docs_page") + and not (REPO / "docs" / "models" / records[name]["docs_page"]).exists()) + for line in bad_pages: + print(f" FAIL {line}") for name in missing_cards: print(f" FAIL {name}: no scripts/hf_cards/{name}.yaml") for name in missing_records: print(f" FAIL scripts/hf_cards/{name}.yaml: no catalog/{name}.json") paired = len(record_names & card_names) print(f"pairing {paired}/{len(record_names | card_names)} catalog/card pairs; " - f"{len(records) - len(undocumented)}/{len(records)} have their own doc") + f"{len(records) - len(undocumented)}/{len(records)} name a docs page") if undocumented: - print(f" documented elsewhere: {', '.join(undocumented)}") - return len(missing_cards) + len(missing_records) + print(f" no docs_page: {', '.join(undocumented)}") + return len(missing_cards) + len(missing_records) + len(bad_pages) def publication_pass(records: dict, profile_id: str | None, enforce: bool) -> int: @@ -122,15 +129,14 @@ def publication_pass(records: dict, profile_id: str | None, enforce: bool) -> in stale_exceptions += 1 per_model = collections.Counter(stale_exception=stale_exceptions) - # Accuracy is closed by dataset/language/quant/metric. New results - # match the profile recipe exactly; explicitly marked legacy results - # retain the published recipe (or null when it did not survive). - expected_by_key = { - profiles.cell_key(cell, "accuracy"): cell for cell in accuracy - } + # Accuracy is closed by dataset/language/quant/metric/timestamps. Any + # batch size satisfies a cell (the row records which); explicitly + # marked legacy results retain the published recipe (or null when it + # did not survive). + expected_by_key = {profiles.profile_key(cell): cell for cell in accuracy} expected_keys = set(expected_by_key) expected_by_core = { - profiles.accuracy_core_key(cell): profiles.cell_key(cell, "accuracy") + profiles.accuracy_core_key(cell): profiles.profile_key(cell) for cell in accuracy } accuracy_rows = record.get("accuracy_benchmarks", []) @@ -138,7 +144,7 @@ def publication_pass(records: dict, profile_id: str | None, enforce: bool) -> in profiles.cell_key(row, "accuracy") for row in accuracy_rows) accuracy_covered, accuracy_extra, accuracy_invalid = set(), set(), set() for row in accuracy_rows: - key = profiles.cell_key(row, "accuracy") + key = profiles.profile_key(row) legacy = row.get("measurement_provenance") == "legacy-published" if key in expected_keys: target_key = key @@ -268,7 +274,7 @@ def main() -> int: enforce_publication = args.publication_profile is not None selected_profile = args.publication_profile or None bad = (schema_pass(records, schema) + integrity_pass(records) - + pairing_pass(records) + provenance_pass(records) + + pairing_pass(records, bool(selected)) + provenance_pass(records) + publication_pass(records, selected_profile, enforce_publication)) return 1 if bad else 0 diff --git a/scripts/catalog/common.py b/scripts/catalog/common.py index 279857b3..fae70b79 100644 --- a/scripts/catalog/common.py +++ b/scripts/catalog/common.py @@ -102,6 +102,38 @@ def headline_label(record: dict) -> str: return dataset_label(target["dataset"], target["split"], target["language"]) +def headline_recipe(record: dict) -> str: + """The mechanical half of a WER note, from the headline rows themselves: + dataset, size, batch, timestamps, backend, and which build measured it.""" + rows = list(headline_rows(record).values()) + target = headline(record) + if not rows or not target: + return "" + measured = [row for row in rows if row.get("engine_sha")] or rows + sample = measured[0] + n_utts = max(row["n_utts"] for row in rows) + unit = "meetings" if target["metric"] in ("der", "cpwer") else "utterances" + parts = [f"{target['metric'].upper()} on the full {headline_label(record)} split " + f"({n_utts:,} {unit})"] + if sample.get("batch_size") is not None: + parts.append(f"batch size {sample['batch_size']}") + if sample.get("timestamps"): + parts.append(f"timestamps {sample['timestamps']}") + if sample.get("language_hint"): + parts.append(f"language hint `{sample['language_hint']}`") + if sample.get("backend"): + parts.append(f"decoded on {sample['backend']}") + text = ", ".join(parts) + "." + shas = sorted({(row["engine_sha"], row.get("measured_on") or "") + for row in rows if row.get("engine_sha")}) + if shas: + text += " Measured at " + "; ".join( + f"transcribe.cpp `{sha}`" + (f" on {date}" if date else "") for sha, date in shas) + "." + if any(not row.get("engine_sha") for row in rows): + text += " Figures without a commit were published before provenance was recorded." + return text + + def fmt_err(row: dict | None, dp: int = 2) -> str: """An error rate as a card prints it. `-` when the cell was not measured.""" if row is None: diff --git a/scripts/catalog/db.py b/scripts/catalog/db.py index fe2dc474..5f39ac27 100755 --- a/scripts/catalog/db.py +++ b/scripts/catalog/db.py @@ -114,11 +114,14 @@ deletions INTEGER, insertions INTEGER, empty_hyp INTEGER, - utts_over_50pct INTEGER + utts_over_50pct INTEGER, + publication_profile TEXT, + scoring TEXT, + mode TEXT ); CREATE UNIQUE INDEX accuracy_identity ON accuracy( dataset_id, variant, quant, metric, - IFNULL(batch_size, 0), IFNULL(timestamps, '') + IFNULL(batch_size, 0), IFNULL(timestamps, ''), IFNULL(scoring, ''), IFNULL(mode, '') ); CREATE TABLE machines( @@ -143,6 +146,7 @@ measurement_provenance TEXT, measured_on TEXT, thermal_gated INTEGER, + publication_profile TEXT, PRIMARY KEY(variant, machine, backend, quant, sample) ); @@ -225,7 +229,7 @@ def build(records: dict[str, dict], out: pathlib.Path) -> dict[str, int]: (variant, item["quant"], item["filename"], item["size_bytes"]) for item in record.get("downloads", [])]) con.executemany( - "INSERT INTO accuracy VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ + "INSERT INTO accuracy VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ (dataset_id(row), variant, row["quant"], row["metric"], row.get("language_hint"), row.get("backend"), row["err_pct"], (row.get("ci95") or [None, None])[0], @@ -235,16 +239,18 @@ def build(records: dict[str, dict], out: pathlib.Path) -> dict[str, int]: (row.get("errors") or {}).get("sub"), (row.get("errors") or {}).get("del"), (row.get("errors") or {}).get("ins"), row.get("empty_hyp"), - row.get("utts_over_50pct")) + row.get("utts_over_50pct"), row.get("publication_profile"), + row.get("scoring"), row.get("mode")) for row in record.get("accuracy_benchmarks", [])]) con.executemany( - "INSERT INTO speed VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ + "INSERT INTO speed VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", [ (variant, row["machine"], row["backend"], row["quant"], row["sample"], row["sample_duration_s"], row.get("total_ms"), row["xrt_compute"], row.get("wall_ms"), row.get("xrt_wall"), row.get("load_ms"), row.get("mel_ms"), row.get("encode_ms"), row.get("decode_ms"), row.get("engine_sha"), row.get("measurement_provenance"), row.get("measured_on"), - None if row.get("thermal_gated") is None else int(row["thermal_gated"])) + None if row.get("thermal_gated") is None else int(row["thermal_gated"]), + row.get("publication_profile")) for row in record.get("speed_benchmarks", [])]) profile_id, _ = profiles.load_profile() diff --git a/scripts/catalog/ingest_accuracy.py b/scripts/catalog/ingest_accuracy.py index 8a30bca1..ac2f330d 100755 --- a/scripts/catalog/ingest_accuracy.py +++ b/scripts/catalog/ingest_accuracy.py @@ -36,7 +36,7 @@ def score_path(record: dict, cell: dict, reports: pathlib.Path) -> pathlib.Path: return reports / f"{model}.{dataset}{batch}{timestamps}.score.json" -def row_from_score(cell: dict, score: dict) -> dict: +def row_from_score(cell: dict, score: dict, profile_id: str) -> dict: per_utterance = score.get("per_utterance") or [] metric = cell["metric"] return { @@ -51,9 +51,10 @@ def row_from_score(cell: dict, score: dict) -> dict: "ci95": [round(score["error_rate_ci_lo"] * 100, 2), round(score["error_rate_ci_hi"] * 100, 2)], "n_utts": score["n"], - "batch_size": cell["batch_size"], + "batch_size": score.get("batch_size") if score.get("batch_size") is not None else cell["batch_size"], "timestamps": cell["timestamps"], "engine_sha": score["engine_sha"], + "publication_profile": profile_id, "measured_on": None, "errors": { "sub": score["substitutions"], @@ -85,7 +86,7 @@ def main() -> int: print(f"error: no catalog record for {', '.join(sorted(unknown))}", file=sys.stderr) return 2 - added = replaced = rejected = missing = 0 + added = replaced = rejected = missing = unstamped = 0 for variant, record in records.items(): if selected and variant not in selected: continue @@ -101,13 +102,20 @@ def main() -> int: continue score = json.loads(source_path.read_text()) recipe = score.get("recipe") or {} + covered = any(profiles.profile_key(row) == profiles.profile_key(cell) + or (row.get("measurement_provenance") == "legacy-published" + and profiles.accuracy_core_key(row) == profiles.accuracy_core_key(cell)) + for row in rows) + if not recipe.get("publication_profile") and covered: + # A score from before profile stamping, for a cell the catalog + # already publishes: superseded history, not a problem. + unstamped += 1 + continue reasons = [] if recipe.get("publication_profile") != profile_id: reasons.append(f"profile={recipe.get('publication_profile')!r}") if score.get("metric") != cell["metric"]: reasons.append(f"metric={score.get('metric')!r}") - if score.get("batch_size") != cell["batch_size"]: - reasons.append(f"batch_size={score.get('batch_size')!r}") if score.get("timestamps") != cell["timestamps"]: reasons.append(f"timestamps={score.get('timestamps')!r}") if recipe.get("backend") != cell["backend"]: @@ -119,9 +127,11 @@ def main() -> int: print(f" reject {source_path.name}: {', '.join(reasons)}") continue - key = profiles.cell_key(cell, "accuracy") + # Any batch size satisfies the cell; the newest measurement + # replaces whatever the cell held and records its own batch size. + key = profiles.profile_key(cell) indices = [index for index, row in enumerate(rows) - if profiles.cell_key(row, "accuracy") == key] + if profiles.profile_key(row) == key] if not indices: # A fresh exact run supersedes the matching historical table # row even if that row used an older/unknown recipe. @@ -129,7 +139,7 @@ def main() -> int: indices = [index for index, row in enumerate(rows) if row.get("measurement_provenance") == "legacy-published" and profiles.accuracy_core_key(row) == core] - new_row = row_from_score(cell, score) + new_row = row_from_score(cell, score, profile_id) if indices: first = indices[0] if rows[first] == new_row and len(indices) == 1: @@ -146,7 +156,8 @@ def main() -> int: common.write_record(path, record) print(f"profile {profile_id}: {added} added, {replaced} replaced, " - f"{rejected} rejected, {missing} score file(s) absent") + f"{rejected} rejected, {unstamped} unstamped score(s) for already published " + f"cells skipped, {missing} score file(s) absent") if args.dry_run: print("dry run: nothing written") return 1 if rejected else 0 diff --git a/scripts/catalog/ingest_perf.py b/scripts/catalog/ingest_perf.py index 470b150b..034fefbf 100755 --- a/scripts/catalog/ingest_perf.py +++ b/scripts/catalog/ingest_perf.py @@ -12,10 +12,9 @@ A cell is identified by (machine, backend, quant, sample). Many reports cover the same cell, because porting-6-bench runs a hypothesis loop over it, and those iterations are NOT interchangeable with the published figure -- CPU -cells in particular swing tens of percent with thermal state. So selection is -by intent first: a profile-stamped publication run beats a manual/legacy -publication run, which beats any experiment, and only within a tier does the -newest timestamp win. +cells in particular swing tens of percent with thermal state. Only a +profile-stamped run (`scripts/bench/run.py --profile`) is eligible, and among +those the newest wins. uv run scripts/catalog/ingest_perf.py --dry-run uv run scripts/catalog/ingest_perf.py @@ -56,18 +55,11 @@ def variant_of(report: dict, model_path: str) -> str | None: return report.get("variant") -def intent(report: dict) -> int: - """Rank a bench run by publication intent. Lower wins. - - A profile-stamped run wins over a manually selected publication run: the - latter says the operator intended to publish it, while the former also - proves which checked-in matrix selected it. - """ - if report.get("publication") is True and report.get("publication_profile"): - return 0 - if report.get("publication") is True: - return 1 - return 2 # an experiment, or a report from before the driver stamped intent +def publishable(report: dict) -> bool: + """Only a profile-stamped run can become a catalog row: the stamp names + the recipe (iterations, warmup, samples, thermal policy) the number was + measured under. Hypothesis-loop and hand-flagged runs are experiments.""" + return bool(report.get("publication_profile")) def cells(report: dict) -> list[dict]: @@ -87,7 +79,6 @@ def mean(field: str): return None if value is None else round(value, 1) out.append({ - "_rank": (intent(report), ), "_profile": report.get("publication_profile"), "variant": variant, "machine": profiles.canonical_machine(report["machine"]["slug"]), @@ -109,23 +100,17 @@ def mean(field: str): "encode_ms": mean("encode_ms"), "decode_ms": mean("decode_ms"), "engine_sha": report.get("git_sha"), + "publication_profile": report.get("publication_profile"), "measured_on": (report.get("timestamp") or "")[:10] or None, - "os": (report.get("machine") or {}).get("os"), "_when": report.get("timestamp") or "", "_file": report["_file"], }) return out -def collect(reports_dir: pathlib.Path, - allow_experiments: bool = False) -> tuple[dict, list[str]]: - """Best measurement per cell, plus notes about what was skipped. - - "Best" means publication-grade: porting-6-bench leaves a long tail of - hypothesis-loop runs per cell, and on CPU those differ from the published - figure by tens of percent. They are measurements of a question, not of the - shipped build, so by default they are not eligible at all. - """ +def collect(reports_dir: pathlib.Path) -> tuple[dict, list[str]]: + """Newest profile-stamped measurement per cell, plus notes on what was + skipped.""" best: dict[tuple, dict] = {} superseded, unreadable, experiments = collections.Counter(), [], 0 for path in sorted(reports_dir.glob("*/*.json")): @@ -138,19 +123,14 @@ def collect(reports_dir: pathlib.Path, kind = report.get("schema") if isinstance(report, dict) else type(report).__name__ unreadable.append(f"{path.relative_to(common.REPO)} (schema {kind!r})") continue + if not publishable(report): + experiments += 1 + continue report["_file"] = str(path.relative_to(common.REPO)) for row in cells(report): - if row["_rank"][0] == 2 and not allow_experiments: - experiments += 1 - continue key = (row["variant"], row["machine"], row["backend"], row["quant"], row["sample"]) previous = best.get(key) - # A better-intentioned run always wins; among equals, the newest. - wins = previous is None or ( - row["_rank"] < previous["_rank"] - or (row["_rank"] == previous["_rank"] - and row["_when"] > previous["_when"])) - if wins: + if previous is None or row["_when"] > previous["_when"]: if previous is not None: superseded[key] += 1 best[key] = row @@ -158,8 +138,7 @@ def collect(reports_dir: pathlib.Path, superseded[key] += 1 notes = [f"{path}: unreadable or not a bench report" for path in unreadable] if experiments: - notes.append(f"{experiments} experiment/baseline run(s) ignored " - f"(--allow-experiments to include)") + notes.append(f"{experiments} report(s) without a profile stamp ignored") if superseded: notes.append(f"{sum(superseded.values())} older report(s) superseded on " f"{len(superseded)} cell(s)") @@ -167,7 +146,8 @@ def collect(reports_dir: pathlib.Path, FIELDS = ("sample_duration_s", "total_ms", "xrt_compute", "wall_ms", "xrt_wall", - "load_ms", "mel_ms", "encode_ms", "decode_ms", "engine_sha", "measured_on", "os") + "load_ms", "mel_ms", "encode_ms", "decode_ms", "engine_sha", + "publication_profile", "measured_on") def catalog_row(source: dict) -> dict: @@ -190,25 +170,15 @@ def main() -> int: parser.add_argument("--force", action="store_true", help="apply measurements even when they contradict the " "published xRT") - parser.add_argument("--allow-experiments", action="store_true", - help="also ingest reports not marked for publication. " - "Off by default: a hypothesis-loop run is not a " - "publishable number.") args = parser.parse_args() reports_dir = pathlib.Path(args.reports) if not reports_dir.exists(): print(f"no reports at {reports_dir}", file=sys.stderr) return 2 - measured, notes = collect(reports_dir, args.allow_experiments) + measured, notes = collect(reports_dir) print(f"{len(measured)} measured cell(s) across " f"{len({key[1] for key in measured})} machine slug(s)") - by_intent = collections.Counter(row["_rank"][0] for row in measured.values()) - labels = {0: "profile-stamped publication run", - 1: "manual publication run (--publication without --profile)", - 2: "experiment or baseline only"} - for rank in sorted(by_intent): - print(f" {by_intent[rank]:5d} {labels[rank]}") for note in notes: print(f" note: {note}") diff --git a/scripts/catalog/new_record.py b/scripts/catalog/new_record.py new file mode 100755 index 00000000..a8755359 --- /dev/null +++ b/scripts/catalog/new_record.py @@ -0,0 +1,125 @@ +#!/usr/bin/env -S uv run --script +# /// script +# requires-python = ">=3.11" +# dependencies = ["gguf", "numpy"] +# /// +"""Seed catalog/.json for a newly ported model. + +Everything mechanical comes from artifacts that already exist by the end of +Stage 5: the intake (family, upstream repo and revision, languages), the +local GGUFs under models// (downloads, byte sizes, parameter count, +capability KVs, licence, display name). The few editorial facts the artifacts +cannot supply are flags. Benchmark rows are left empty for Stages 6 and 7. + + uv run scripts/catalog/new_record.py --long-form soft-window --docs-page .md +""" +from __future__ import annotations + +import argparse +import pathlib +import sys + +import numpy as np +from gguf import GGUFReader + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +import common # noqa: E402 +import sync_capabilities # noqa: E402 + +QUANT_ORDER = ("F32", "BF16", "F16", "Q8_0", "Q6_K", "Q5_K_M", "Q4_K_M") +LICENSE_DISPLAY = {"apache-2.0": "Apache-2.0", "mit": "MIT", "cc-by-4.0": "CC-BY-4.0", + "cc-by-nc-4.0": "CC-BY-NC-4.0", "cc-by-nc-sa-4.0": "CC-BY-NC-SA-4.0"} + + +def quant_of(filename: str) -> str: + return filename.rsplit("-", 1)[-1].removesuffix(".gguf") + + +def kv(reader: GGUFReader, key: str, default=None): + field = reader.fields.get(key) + return field.contents() if field is not None else default + + +def main() -> int: + ap = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + ap.add_argument("variant") + ap.add_argument("--long-form", required=True, choices=("chunked-unbounded", "hard-cap", "soft-window"), + help="which bucket in docs/input-limits.md the family falls into") + ap.add_argument("--docs-page", required=True, help="page under docs/models/ that documents it") + ap.add_argument("--published-repo", default=None, help="default handy-computer/-gguf") + ap.add_argument("--display-name", default=None, help="default: the GGUF's general.name") + ap.add_argument("--license", default=None, help="SPDX id; default: the GGUF's general.license") + ap.add_argument("--license-display", default=None) + ap.add_argument("--language-tag-form", default="bare-bcp47", choices=("bare-bcp47", "locale", "mixed")) + ap.add_argument("--force", action="store_true", help="overwrite an existing record") + args = ap.parse_args() + + out = common.CATALOG_DIR / f"{args.variant}.json" + if out.exists() and not args.force: + print(f"{out.relative_to(common.REPO)} exists; pass --force to overwrite", file=sys.stderr) + return 2 + intakes = list((common.REPO / "reports" / "porting").glob(f"*/{args.variant}/intake.json")) + if len(intakes) != 1: + print(f"expected one intake for {args.variant}, found {len(intakes)}", file=sys.stderr) + return 2 + import json + intake = json.loads(intakes[0].read_text()) + model_dir = common.REPO / "models" / args.variant + files = sorted(model_dir.glob("*.gguf"), key=lambda p: (QUANT_ORDER.index(quant_of(p.name)) + if quant_of(p.name) in QUANT_ORDER else 99)) + if not files: + print(f"no GGUFs under {model_dir}", file=sys.stderr) + return 2 + if not (common.DOCS_DIR / args.docs_page).exists(): + print(f"docs/models/{args.docs_page} does not exist", file=sys.stderr) + return 2 + + reference = files[0] + reader = GGUFReader(str(reference)) + params = sum(int(np.prod(t.shape)) for t in reader.tensors) + spdx = args.license or str(kv(reader, "general.license", "")).lower() + if not spdx: + print("no licence in the GGUF; pass --license", file=sys.stderr) + return 2 + display = args.license_display or LICENSE_DISPLAY.get(spdx) + if not display: + print(f"no display form known for licence {spdx!r}; pass --license-display", file=sys.stderr) + return 2 + caps = intake.get("capabilities") or {} + languages = [str(lang) for lang in caps.get("languages", [])] + acceptance = next((b for b in intake.get("upstream_benchmarks", []) + if str(b.get("dataset", "")).lower().startswith("librispeech")), None) + + record = { + "schema": "transcribe-catalog-v1", + "variant": args.variant, + "family": intake["family"], + "display_name": args.display_name or str(kv(reader, "general.name", args.variant)), + "params": params, + "license": {"spdx": spdx, "display": display}, + "upstream_repo": intake["hf_repo"], + "upstream_commit": str(intake["hf_revision"])[:7], + "published_repo": args.published_repo or f"handy-computer/{args.variant}-gguf", + "docs_page": args.docs_page, + "languages": languages, + "language_tag_form": args.language_tag_form, + "long_form_strategy": args.long_form, + "capabilities": {}, + "downloads": [{"quant": quant_of(p.name), "filename": p.name, "size_bytes": p.stat().st_size} + for p in files], + "accuracy_benchmarks": [], + "headline_benchmark": ({"dataset": "librispeech", "split": "test-clean", "language": "en", + "metric": "wer", "batch_size": None, "timestamps": "none"} + if acceptance else None), + "speed_benchmarks": [], + } + # Capabilities come from the file, never from hand: same reader the sweep uses. + record["capabilities"] = sync_capabilities.build(record, sync_capabilities.read_kvs(reader)) + common.write_record(out, record) + print(f"wrote {out.relative_to(common.REPO)}: {len(files)} downloads, {params:,} params, " + f"{len(languages)} language(s), capabilities from {reference.name}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/catalog/profiles.py b/scripts/catalog/profiles.py index 64b29f5f..036993c2 100644 --- a/scripts/catalog/profiles.py +++ b/scripts/catalog/profiles.py @@ -168,7 +168,12 @@ def has_measurement_provenance(row: dict) -> bool: ACCURACY_CORE_KEY = ("dataset", "split", "language", "quant", "metric") -ACCURACY_KEY = (*ACCURACY_CORE_KEY, "batch_size", "timestamps") +# What a profile cell requires. Batch size is deliberately absent: a cell is +# satisfied at any batch size and the row records the one that was run. The +# profile's batch_size is the recommendation for new runs, not an identity. +PROFILE_KEY = (*ACCURACY_CORE_KEY, "timestamps", "scoring", "mode") +# A row's full identity, for duplicate detection. +ACCURACY_KEY = (*PROFILE_KEY, "batch_size") SPEED_KEY = ("machine", "backend", "quant", "sample") @@ -176,6 +181,10 @@ def accuracy_core_key(cell: dict) -> tuple: return tuple(cell.get(field) for field in ACCURACY_CORE_KEY) +def profile_key(cell: dict) -> tuple: + return tuple(cell.get(field) for field in PROFILE_KEY) + + def cell_key(cell: dict, kind: str) -> tuple: fields = ACCURACY_KEY if kind == "accuracy" else SPEED_KEY return tuple(cell.get(field) for field in fields) diff --git a/scripts/catalog/render.py b/scripts/catalog/render.py index 340980ff..d635851f 100755 --- a/scripts/catalog/render.py +++ b/scripts/catalog/render.py @@ -16,9 +16,10 @@ Blocks: `downloads`, `perf machine=`, `accuracy` (one table per -dataset split beyond the headline), `intro` (upstream link plus the card -spec's `summary`), `prose field=wer.notes` (any `|` text field of the spec, -dotted path), `family variants=a,b,c` (a roll-up row per variant, for +dataset split beyond the headline), `recipe` (the mechanical WER sentence +from the headline rows), `pin` (licence, upstream and validation pins), +`intro` (upstream link plus the card spec's `summary`), `prose +field=wer.notes` (any `|` text field of the spec, dotted path), `family variants=a,b,c` (a roll-up row per variant, for family pages), and `family-index` (the root README's supported-models table, one row per documentation page). Everything outside a marker pair is untouched. The root README is rendered along with docs/models. The variant is the file stem @@ -159,32 +160,34 @@ def ordered(index: int, override: str | None, rank) -> list[str]: def perf_methodology(rows: dict) -> list[str]: - """What a cell is. Iterations and warmup are profile policy.""" - _, profile = profiles.load_profile() - speed = profile["speed"] - return [f"Compute latency (mel + encode + decode), speedup over realtime in " - f"parentheses; mean over {speed['iterations']} iterations after " - f"{speed['warmup']} warmup."] + """What a cell is. Iterations and warmup are claimed only for rows that + name the profile they were measured under.""" + line = "Compute latency (mel + encode + decode), speedup over realtime in parentheses" + ids = sorted({row["publication_profile"] for row in rows.values() + if row.get("publication_profile")}) + claims = [] + for profile_id in ids: + speed = profiles.load_profile(profile_id)[1]["speed"] + claims.append(f"profile `{profile_id}`: mean over {speed['iterations']} iterations " + f"after {speed['warmup']} warmup") + if claims: + line += "; " + "; ".join(claims) + return [line + "."] def perf_provenance(machine: str, rows: dict) -> list[str]: - """Where the numbers came from: machine, engine commit, date, OS.""" + """Where the numbers came from: machine, engine commit, date.""" _, profile = profiles.load_profile() display = profiles.machine_display(profile, machine) builds: dict[tuple, int] = {} for row in rows.values(): if row.get("engine_sha"): - key = (row["engine_sha"], row.get("measured_on") or "", row.get("os") or "") + key = (row["engine_sha"], row.get("measured_on") or "") builds[key] = builds.get(key, 0) + 1 legacy = sum(1 for row in rows.values() if not row.get("engine_sha")) parts = [] - for (sha, date, os_name), _ in sorted(builds.items(), key=lambda kv: -kv[1]): - text = f"transcribe.cpp `{sha}`" - if date: - text += f" on {date}" - if os_name: - text += f", {os_name}" - parts.append(text) + for (sha, date), _ in sorted(builds.items(), key=lambda kv: -kv[1]): + parts.append(f"transcribe.cpp `{sha}`" + (f" on {date}" if date else "")) line = f"{display}: " + "; ".join(parts) + "." if parts else f"{display}." if legacy: line += " † published before provenance was recorded; not yet re-measured." @@ -220,6 +223,30 @@ def block_intro(record: dict, attrs: dict[str, str]) -> list[str]: return [line, ""] + prose_lines(spec_for(record).get("summary"), "summary") +def block_recipe(record: dict, attrs: dict[str, str]) -> list[str]: + """The mechanical WER sentence, from the headline rows.""" + text = common.headline_recipe(record) + if not text: + raise RenderError("no headline rows to describe") + return [text] + + +def block_pin(record: dict, attrs: dict[str, str]) -> list[str]: + """Licence, upstream pin and validation pin, from the record and the + card spec's release fields.""" + spec = spec_for(record) + repo, commit = record["upstream_repo"], record["upstream_commit"] + validation = spec.get("validation") or {} + if not (spec.get("pin_date") and validation.get("commit") and validation.get("date")): + raise RenderError("spec needs pin_date and validation.{commit,date}") + return [f"Licensed {record['license']['display']}. Ported from upstream commit " + f"[`{commit}`](https://huggingface.co/{repo}/commit/{commit}), pinned " + f"{spec['pin_date']}. Validated against the {validation.get('reference', 'reference')} " + f"reference at transcribe.cpp commit [`{validation['commit']}`]" + f"(https://github.com/handy-computer/transcribe.cpp/tree/{validation['commit']}) " + f"on {validation['date']}."] + + def block_prose(record: dict, attrs: dict[str, str]) -> list[str]: """A text field of the card spec, named by dotted path (`wer.notes`).""" field = attrs.get("field") @@ -243,22 +270,25 @@ def block_accuracy(record: dict, attrs: dict[str, str]) -> list[str]: wanted = None if attrs.get("datasets"): wanted = {tuple(item.split(":", 1)) for item in attrs["datasets"].split(",")} - groups: dict[tuple[str, str], list[dict]] = {} + groups: dict[tuple, list[dict]] = {} for row in record.get("accuracy_benchmarks", []): - key = (row["dataset"], row["split"]) - if wanted is not None and key not in wanted: + split_key = (row["dataset"], row["split"]) + if wanted is not None and split_key not in wanted: continue if wanted is None and not as_bool(attrs.get("all"), False) \ - and (*key, row["language"]) == (headline.get("dataset"), headline.get("split"), - headline.get("language")): + and not row.get("scoring") and not row.get("mode") \ + and (*split_key, row["language"]) == (headline.get("dataset"), headline.get("split"), + headline.get("language")): continue - groups.setdefault(key, []).append(row) + # A scoring step or decoding mode makes a separate result set. + groups.setdefault((*split_key, row.get("scoring") or "", row.get("mode") or ""), + []).append(row) if not groups: raise RenderError("no accuracy rows beyond the headline benchmark") quant_rank = {item["quant"]: i for i, item in enumerate(record.get("downloads", []))} out: list[str] = [] - for (dataset, split), rows in sorted(groups.items()): + for (dataset, split, scoring, mode), rows in sorted(groups.items()): quants = sorted({row["quant"] for row in rows}, key=lambda q: (quant_rank.get(q, 99), q)) cells: dict[tuple[str, str], dict] = {} for row in rows: @@ -275,6 +305,10 @@ def block_accuracy(record: dict, attrs: dict[str, str]) -> list[str]: if out: out.append("") label = f"FLEURS {split}" if dataset == "fleurs" else common.dataset_label(dataset, split, "") + if scoring: + label += f", scoring `{scoring}`" + if mode: + label += f", `{mode}` mode" out.extend([f"**{label}**", ""]) out.extend(common.render_table(["Language", "Metric"] + quants, ["l", "l"] + ["r"] * len(quants), body)) @@ -294,8 +328,10 @@ def block_family(records: dict[str, dict], attrs: dict[str, str]) -> list[str]: raise RenderError(f"no catalog record for {name!r}") download = next((d for d in record.get("downloads", []) if d["quant"] == quant), None) headline = common.headline(record) or {} - doc = common.DOCS_DIR / f"{name}.md" - link = (f"[{name}.md]({name}.md)" if doc.exists() + # A variant with a page of its own links there; one documented only + # on this family page links to its published repo. + own = f"{name}.md" + link = (f"[{own}]({own})" if (common.DOCS_DIR / own).exists() and own != attrs.get("_page") else f"[{record['published_repo']}](https://huggingface.co/{record['published_repo']})") body.append([ f"`{name}`", common.fmt_params(record["params"]), common.languages_summary(record), @@ -310,19 +346,9 @@ def block_family(records: dict[str, dict], attrs: dict[str, str]) -> list[str]: ["l", "r", "l", "r", "l", "r", "l", "l"], body, max_pad=34) -def doc_for(records: dict[str, dict], variant: str) -> pathlib.Path | None: - """The page a variant is documented on: its own, else the family page - whose roll-up lists it.""" - own = common.DOCS_DIR / f"{variant}.md" - for path in sorted(common.DOCS_DIR.glob("*.md")): - if path.stem in records: - continue - for line in path.read_text().splitlines(): - match = OPEN.match(line) - if match and match.group(2) == "family" \ - and variant in parse_attrs(match.group(3)).get("variants", "").split(","): - return path - return own if own.exists() else None +def doc_for(record: dict) -> pathlib.Path | None: + page = record.get("docs_page") + return common.DOCS_DIR / page if page else None def block_family_index(records: dict[str, dict], attrs: dict[str, str]) -> list[str]: @@ -334,7 +360,7 @@ def block_family_index(records: dict[str, dict], attrs: dict[str, str]) -> list[ for variant, record in records.items(): if bool(record.get("capabilities", {}).get("transcribe", {}).get("supported")) != want: continue - doc = doc_for(records, variant) + doc = doc_for(record) if doc is not None: key = doc.stem title = doc.read_text().splitlines()[0].lstrip("# ").strip() @@ -352,12 +378,13 @@ def block_family_index(records: dict[str, dict], attrs: dict[str, str]) -> list[ for group in sorted(groups.values(), key=lambda g: g["title"].lower()): body.append([group["title"], ", ".join(f"`{v}`" for v in sorted(group["variants"])), ", ".join(sorted(group["caps"])) or "-", group["link"]]) - return common.render_table(["Family", "Variants", "Capabilities", "Docs"], + return common.render_table(["Family", "Variants", "Available capabilities", "Docs"], ["l", "l", "l", "l"], body) BLOCKS = {"downloads": block_downloads, "perf": block_perf, - "intro": block_intro, "prose": block_prose, "accuracy": block_accuracy} + "intro": block_intro, "prose": block_prose, "accuracy": block_accuracy, + "recipe": block_recipe, "pin": block_pin} # -------------------------------------------------------------------------- @@ -387,7 +414,7 @@ def rewrite(path: pathlib.Path, records: dict[str, dict]) -> tuple[str, list[str variant = attrs.get("variant", path.stem) try: if name == "family": - rendered = block_family(records, attrs) + rendered = block_family(records, {**attrs, "_page": path.name}) elif name == "family-index": rendered = block_family_index(records, attrs) elif name not in BLOCKS: diff --git a/scripts/catalog/test_db_mapping.py b/scripts/catalog/test_db_mapping.py new file mode 100644 index 00000000..44a23f23 --- /dev/null +++ b/scripts/catalog/test_db_mapping.py @@ -0,0 +1,48 @@ +"""Every catalog row property reaches the database, or is excluded on purpose. + + uv run --with pytest pytest scripts/catalog/test_db_mapping.py +""" +import json +import pathlib +import re +import sqlite3 +import sys + +HERE = pathlib.Path(__file__).resolve().parent +sys.path.insert(0, str(HERE)) +import db # noqa: E402 + +SCHEMA = json.loads((HERE.parents[1] / "catalog" / "_schema.json").read_text()) + +# Row properties that are flattened or renamed rather than stored one to one. +ACCURACY_MAPPED = {"dataset": "dataset_id", "split": "dataset_id", "language": "dataset_id", + "ci95": "ci_lo/ci_hi", "errors": "substitutions/deletions/insertions"} +SPEED_MAPPED = {} + + +def columns(table: str) -> set[str]: + con = sqlite3.connect(":memory:") + con.executescript(db.SCHEMA) + return {row[1] for row in con.execute(f"PRAGMA table_info({table})")} + + +def check(section: str, table: str, mapped: dict[str, str]) -> None: + props = set(SCHEMA["properties"][section]["items"]["properties"]) + cols = columns(table) + missing = sorted(p for p in props if p not in cols and p not in mapped) + assert not missing, f"{section} properties with no {table} column: {missing}" + for prop, target in mapped.items(): + for col in re.split(r"/", target): + assert col in cols, f"{section}.{prop} maps to missing column {col}" + + +def test_accuracy_rows_reach_the_database(): + check("accuracy_benchmarks", "accuracy", ACCURACY_MAPPED) + + +def test_speed_rows_reach_the_database(): + check("speed_benchmarks", "speed", SPEED_MAPPED) + + +def test_download_rows_reach_the_database(): + check("downloads", "downloads", {}) diff --git a/scripts/hf_cards/README.md b/scripts/hf_cards/README.md index 3ace0631..1e293b86 100644 --- a/scripts/hf_cards/README.md +++ b/scripts/hf_cards/README.md @@ -5,7 +5,11 @@ number, repo, licence, language, and capability comes from `catalog/.json`; `generate.py` refuses a spec that states one. `summary` and `wer.notes` are also the source for `docs/models/.md`, rendered into its `catalog:intro` and `catalog:prose` markers by -`scripts/catalog/render.py`. +`scripts/catalog/render.py`. The mechanical WER sentence (dataset, size, +batch, timestamps, build) is generated from the headline rows; `wer.notes` +holds only editorial caveats. A second download-table column is +`wer.source2` plus `wer.secondary: __` naming a +result set the catalog holds. ```bash uv run scripts/hf_cards/check_release.py # pin + validation date diff --git a/scripts/hf_cards/breeze-asr-25.yaml b/scripts/hf_cards/breeze-asr-25.yaml index 7e227108..0bfaca52 100644 --- a/scripts/hf_cards/breeze-asr-25.yaml +++ b/scripts/hf_cards/breeze-asr-25.yaml @@ -38,13 +38,11 @@ summary: | wer: source: LibriSpeech test-clean - metadata_key: librispeech_test_clean - source2: FLEURS zh - metadata_key2: fleurs_zh + source2: FLEURS zh (OpenCC t2s-folded) + secondary: cer_fleurs_zh_opencc_t2s notes: | - Two benchmarks, both full test splits, decoded on a Modal L40S with the - transcribe.cpp default recipe (greedy + temperature fallback, - suppress_tokens, segment timestamps), batch 1. + Both benchmarks use the transcribe.cpp default recipe (greedy with temperature + fallback, suppress_tokens) on a Modal L40S. **English — WER, LibriSpeech test-clean (2620 utterances).** Standard Whisper/`EnglishTextNormalizer` scoring. @@ -59,12 +57,3 @@ wer: Quantization is effectively free on both languages: every quant down to Q4_K_M (1.0 GB) sits within run-to-run noise of the BF16 reference (English 2.25-2.29%, Chinese 8.08-8.12%). - - # Secondary per-quant metric → wer_fleurs_zh in the metadata block. - fleurs_zh: - bf16: 8.12 - f16: 8.11 - q8_0: 8.10 - q6_k: 8.12 - q5_k_m: 8.12 - q4_k_m: 8.08 diff --git a/scripts/hf_cards/canary-180m-flash.yaml b/scripts/hf_cards/canary-180m-flash.yaml index ff3e5714..29f52d4a 100644 --- a/scripts/hf_cards/canary-180m-flash.yaml +++ b/scripts/hf_cards/canary-180m-flash.yaml @@ -36,9 +36,7 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with greedy decoding and no external LM. F32 reference baseline: 1.94%. - On the same wavs, NeMo's reference run produces 1.93% (one substitution - difference out of ~27k reference words), so the F32 port matches the - reference framework at the noise floor. NVIDIA's self-reported number - on the upstream model card is 1.87%. + Greedy decoding, no external LM. F32 reference baseline: 1.94%. On the same wavs, + NeMo's reference run produces 1.93% (one substitution difference out of ~27k + reference words), so the F32 port matches the reference framework at the noise + floor. NVIDIA's self-reported number on the upstream model card is 1.87%. diff --git a/scripts/hf_cards/canary-1b-flash.yaml b/scripts/hf_cards/canary-1b-flash.yaml index 0c2230dc..e1b6b23b 100644 --- a/scripts/hf_cards/canary-1b-flash.yaml +++ b/scripts/hf_cards/canary-1b-flash.yaml @@ -34,6 +34,5 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with greedy decoding and no external LM. F32 reference baseline: 1.62%. - NVIDIA's self-reported number on the upstream model card is 1.48%. + Greedy decoding, no external LM. F32 reference baseline: 1.62%. NVIDIA's + self-reported number on the upstream model card is 1.48%. diff --git a/scripts/hf_cards/canary-1b-v2.yaml b/scripts/hf_cards/canary-1b-v2.yaml index 1cb9d8cd..718da5f6 100644 --- a/scripts/hf_cards/canary-1b-v2.yaml +++ b/scripts/hf_cards/canary-1b-v2.yaml @@ -35,8 +35,7 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with greedy decoding and no external LM. F32 reference baseline: 1.92%. - NVIDIA's self-reported number on the upstream model card is 2.18%; - our F32 port comes in slightly under the upstream-reported number - (Δ −0.26pp) and is likely down to scoring differences. + Greedy decoding, no external LM. F32 reference baseline: 1.92%. NVIDIA's + self-reported number on the upstream model card is 2.18%; our F32 port comes in + slightly under the upstream-reported number (Δ −0.26pp) and is likely down to + scoring differences. diff --git a/scripts/hf_cards/canary-1b.yaml b/scripts/hf_cards/canary-1b.yaml index 564c0495..a87e9fce 100644 --- a/scripts/hf_cards/canary-1b.yaml +++ b/scripts/hf_cards/canary-1b.yaml @@ -41,8 +41,7 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with greedy decoding and no external LM. F32 reference baseline: 1.55%. - NVIDIA's self-reported number on the upstream model card is 1.48%; - likely this is due to differences in how we score WER, based on the - results we have from canary-180m-flash. + Greedy decoding, no external LM. F32 reference baseline: 1.55%. NVIDIA's + self-reported number on the upstream model card is 1.48%; likely this is due to + differences in how we score WER, based on the results we have from + canary-180m-flash. diff --git a/scripts/hf_cards/canary-qwen-2.5b.yaml b/scripts/hf_cards/canary-qwen-2.5b.yaml index 8ce15b4b..6f5e907f 100644 --- a/scripts/hf_cards/canary-qwen-2.5b.yaml +++ b/scripts/hf_cards/canary-qwen-2.5b.yaml @@ -34,15 +34,12 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech `test-clean` split (2620 English - utterances) with the Whisper-style English text normalizer and jiwer - 3.x, on the metal backend of an Apple M4. The same-machine NeMo SALM - reference run (CPU torch, dither=0.0, greedy `model.generate`) lands - at **1.61%** with 95% bootstrap CI [1.47%, 1.75%]: `0.01` above - NVIDIA's published 1.60% but well within statistical noise. All six - GGUF presets land at exactly 1.63% (`+0.02` over our reference run, - same CI band). Investigation of the worst per-utterance differences - shows scattered token-level noise consistent with BF16 weight - precision (homophones, word-boundary flips, function-word - substitutions). Reproduce with `scripts/wer/run.py` + + Scored with the Whisper-style English text normalizer and jiwer 3.x on an Apple M4. + The same-machine NeMo SALM reference run (CPU torch, dither=0.0, greedy + `model.generate`) lands at **1.61%** with 95% bootstrap CI [1.47%, 1.75%]: `0.01` + above NVIDIA's published 1.60% but well within statistical noise. All six GGUF + presets land at exactly 1.63% (`+0.02` over our reference run, same CI band). + Investigation of the worst per-utterance differences shows scattered token-level + noise consistent with BF16 weight precision (homophones, word-boundary flips, + function-word substitutions). Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. diff --git a/scripts/hf_cards/cohere-transcribe-03-2026.yaml b/scripts/hf_cards/cohere-transcribe-03-2026.yaml index a4d2b761..794e8f5b 100644 --- a/scripts/hf_cards/cohere-transcribe-03-2026.yaml +++ b/scripts/hf_cards/cohere-transcribe-03-2026.yaml @@ -33,9 +33,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with - greedy decoding and no external LM. BF16 reference baseline: 1.26%. - Cohere's self-reported number on the same split is 1.25% - (Open ASR Leaderboard, as of 2026-03-26). Both ours and Cohere's numbers - use the Whisper EnglishTextNormalizer, so the comparison is apples-to-apples - and our port matches the upstream reference within rounding. + Greedy decoding, no external LM. BF16 reference baseline: 1.26%. Cohere's + self-reported number on the same split is 1.25% (Open ASR Leaderboard, as of + 2026-03-26). Both ours and Cohere's numbers use the Whisper EnglishTextNormalizer, + so the comparison is apples-to-apples and our port matches the upstream reference + within rounding. diff --git a/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml b/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml index 68e5d78b..acc76478 100644 --- a/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml +++ b/scripts/hf_cards/cohere-transcribe-arabic-07-2026.yaml @@ -60,13 +60,11 @@ usage: | numbers, numerical validation, and reproduction steps. wer: - metadata_key: fleurs_ar_test source: FLEURS Arabic test notes: | - WER measured on the full FLEURS Arabic (`ar_eg`) test split (428 - utterances) with greedy decoding and no external LM, scored with the - Whisper BasicTextNormalizer. BF16 reference baseline, measured with - native Transformers on the same manifest: 11.00%; the BF16 port scores - 11.02%, and every quant falls inside the reference's 95% confidence - interval. FLEURS Arabic is Egyptian-dialect speech; upstream numbers - published on other Arabic test sets are not directly comparable. + Greedy decoding, no external LM, scored with the Whisper BasicTextNormalizer; the + FLEURS Arabic split is `ar_eg`, Egyptian-dialect speech. BF16 reference baseline, + measured with native Transformers on the same manifest: 11.00%; the BF16 port scores + 11.02%, and every quant falls inside the reference's 95% confidence interval. FLEURS + Arabic is Egyptian-dialect speech; upstream numbers published on other Arabic test + sets are not directly comparable. diff --git a/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml b/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml index 34dc346e..db3561b7 100644 --- a/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml +++ b/scripts/hf_cards/diar_streaming_sortformer_4spk-v2.1.yaml @@ -70,13 +70,10 @@ usage: | wer: source: AMI IHM test - metadata_key: ami_ihm_test notes: | - DER measured on the full AMI IHM test set (16 meetings, ~9 h) against - forced-alignment RTTMs with dihard3-dev post-processing, collar 0.0, - overlap scored, at the very_high_latency operating point. Measured NeMo - reference under the identical protocol: 14.83% DER / 19.89% JER; the - C++ F32 port scores 14.59% / 19.51%. Published DER numbers vary with - RTTM source and post-processing; compare like with like. Only - near-reference tiers ship for this family (k-quant tiers withdrawn; - see the transcribe.cpp family doc, "Quant policy (Stage 7)"). + Scored against forced-alignment RTTMs with dihard3-dev post-processing, collar 0.0, + overlap scored, at the very_high_latency operating point. Measured NeMo reference + under the identical protocol: 14.83% DER / 19.89% JER; the C++ F32 port scores + 14.59% / 19.51%. Published DER numbers vary with RTTM source and post-processing; + compare like with like. Only near-reference tiers ship for this family (k-quant + tiers withdrawn; see the transcribe.cpp family doc, "Quant policy (Stage 7)"). diff --git a/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml b/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml index 80953f4f..77eca175 100644 --- a/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml +++ b/scripts/hf_cards/fun-asr-mlt-nano-2512.yaml @@ -45,13 +45,10 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with greedy LLM decoding via the bundled Qwen3-0.6B head. The publisher - does not report a numerical LibriSpeech WER for the MLT variant - specifically (the shared README's per-model table covers Fun-ASR-Nano - only). Gate baseline is our own FunASR 1.3.1 reference run on the same - manifest: 1.76% (95% CI [1.60%, 1.93%]). transcribe.cpp's BF16 port - matches that baseline within -0.02 percentage-points. LibriSpeech is - English only; the strength of the MLT variant is multilingual coverage, - not English accuracy. For the other 30 languages, run your own - representative manifest. + Greedy LLM decoding via the bundled Qwen3-0.6B head. The publisher does not report a + numerical LibriSpeech WER for the MLT variant specifically (the shared README's + per-model table covers Fun-ASR-Nano only). Gate baseline is our own FunASR 1.3.1 + reference run on the same manifest: 1.76% (95% CI [1.60%, 1.93%]). transcribe.cpp's + BF16 port matches that baseline within -0.02 percentage-points. LibriSpeech is + English only; the strength of the MLT variant is multilingual coverage, not English + accuracy. For the other 30 languages, run your own representative manifest. diff --git a/scripts/hf_cards/fun-asr-nano-2512.yaml b/scripts/hf_cards/fun-asr-nano-2512.yaml index cf39906a..afa5d1af 100644 --- a/scripts/hf_cards/fun-asr-nano-2512.yaml +++ b/scripts/hf_cards/fun-asr-nano-2512.yaml @@ -39,12 +39,9 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with greedy LLM decoding via the bundled Qwen3-0.6B head. Publisher - reports 1.76% on this split (model card "Open-Source Dataset - Performance" table). Our FunASR 1.3.1 reference run scores 1.79% - (95% CI [1.63%, 1.95%]), within bootstrap noise of the publisher's - number. transcribe.cpp's BF16 port matches that baseline within - -0.01 percentage-points. LibriSpeech is an English-only benchmark; - Chinese (AISHELL-1, WenetSpeech) and Japanese (CommonVoice JA) are - the recommended complementary checks. + Greedy LLM decoding via the bundled Qwen3-0.6B head. Publisher reports 1.76% on this + split (model card "Open-Source Dataset Performance" table). Our FunASR 1.3.1 + reference run scores 1.79% (95% CI [1.63%, 1.95%]), within bootstrap noise of the + publisher's number. transcribe.cpp's BF16 port matches that baseline within -0.01 + percentage-points. LibriSpeech is an English-only benchmark; Chinese (AISHELL-1, + WenetSpeech) and Japanese (CommonVoice JA) are the recommended complementary checks. diff --git a/scripts/hf_cards/generate.py b/scripts/hf_cards/generate.py index cf2324aa..cc720a4b 100755 --- a/scripts/hf_cards/generate.py +++ b/scripts/hf_cards/generate.py @@ -33,6 +33,7 @@ from __future__ import annotations import argparse +import re import statistics import sys from pathlib import Path @@ -103,9 +104,35 @@ def derive_perf(record: dict, default_quant: str | None) -> dict: return perf +def metric_key(row: dict) -> str: + """`__[_][_]`, the name of + the per-quant map this row belongs to in the metadata block.""" + tail = row["language"] if row["dataset"] == "fleurs" else row["split"] + key = f"{row['metric']}_{row['dataset']}_{tail}" + for extra in ("scoring", "mode"): + if row.get(extra): + key += f"_{row[extra]}" + return re.sub(r"[^a-z0-9]+", "_", key.lower()) + + +def derive_metric_blocks(record: dict) -> dict[str, dict[str, float]]: + """Every per-quant error map the catalog holds, keyed by metric_key. + Where a cell was measured under several recipes (batch size, timestamps) + the profile-stamped row wins, else the first listed.""" + chosen: dict[tuple[str, str], dict] = {} + for row in record.get("accuracy_benchmarks", []): + cell = (metric_key(row), row["quant"].lower()) + if cell not in chosen or (row.get("engine_sha") and not chosen[cell].get("engine_sha")): + chosen[cell] = row + blocks: dict[str, dict[str, float]] = {} + for (key, quant), row in chosen.items(): + blocks.setdefault(key, {})[quant] = row["err_pct"] + return blocks + + def derive_quants(record: dict, secondary: dict | None) -> list[dict]: """One row per published GGUF: size, headline error rate, and the optional - second metric column the spec supplies under `wer.`.""" + second metric column named by `wer.secondary`.""" errors = common.headline_rows(record) quants = [] for item in record.get("downloads", []): @@ -122,6 +149,23 @@ def derive_quants(record: dict, secondary: dict | None) -> list[dict]: return quants + +def hub_language_tags(languages) -> tuple[list[str], list[str]]: + """Split catalog language tags the way the Hub's metadata validator wants. + + `language:` accepts ISO 639 codes only, so a model whose GGUF advertises + locales (nemotron tags `en-US`) keeps the full tags in `language_bcp47` + and contributes each primary subtag, deduped, to `language`. + """ + tags = [str(lang) for lang in languages] + base, seen = [], set() + for tag in tags: + primary = tag.split("-")[0].lower() + if primary not in seen: + seen.add(primary) + base.append(primary) + return base, [tag for tag in tags if "-" in tag] + def build_context(record: dict, spec: dict) -> dict: """Everything the template needs: catalog facts plus the editorial spec.""" downloads = {item["quant"]: item for item in record.get("downloads", [])} @@ -130,16 +174,25 @@ def build_context(record: dict, spec: dict) -> dict: raise SystemExit(f"{record['variant']}: default quant {default_quant!r} is not " f"a published download ({', '.join(downloads) or 'none'})") wer = dict(spec.get("wer") or {}) + stale = [k for k, v in wer.items() if isinstance(v, dict)] + \ + [k for k in ("metadata_key", "metadata_key2") if k in wer] + if stale or "metrics" in spec: + raise SystemExit(f"{record['variant']}: per-quant numbers and metadata keys are " + f"derived from the catalog; remove wer.{'/'.join(stale)}" + + (" and metrics" if "metrics" in spec else "")) if not wer.get("source"): wer["source"] = common.headline_label(record) + wer["recipe"] = common.headline_recipe(record) + blocks = derive_metric_blocks(record) secondary = None if "source2" in wer: - key2 = wer.get("metadata_key2") - if not key2 or not isinstance(wer.get(key2), dict): - raise SystemExit("wer.source2 needs wer.metadata_key2 naming a " - "{quant: value} map under wer:") - secondary = {str(q).lower(): v for q, v in wer[key2].items()} + key2 = wer.get("secondary") + if key2 not in blocks: + raise SystemExit(f"{record['variant']}: wer.secondary must name one of " + f"{sorted(blocks)}") + secondary = blocks[key2] headline = common.headline(record) or {} + hub_languages, languages_bcp47 = hub_language_tags(record.get("languages", [])) ctx = { **spec, "hf_repo": record["upstream_repo"], @@ -147,12 +200,14 @@ def build_context(record: dict, spec: dict) -> dict: "upstream_commit": record["upstream_commit"], "license": record["license"]["spdx"], "license_display": record["license"]["display"], - "languages": list(record.get("languages", [])), + "languages": hub_languages, + "languages_bcp47": languages_bcp47, "capabilities": derive_capabilities(record), "perf": derive_perf(record, default_quant), "quants": derive_quants(record, secondary), "default_quant_filename": downloads[default_quant]["filename"], "wer": wer, + "metric_blocks": blocks, } if headline.get("metric"): ctx["metric"] = headline["metric"].upper() @@ -169,7 +224,8 @@ def build_context(record: dict, spec: dict) -> dict: def build_transcribe_cpp_block(ctx: dict) -> str: - """Serialize the `transcribe_cpp:` block (raw WER/RTF + capability flags). + """Serialize the `transcribe_cpp:` block (raw error rates, RTF, and + capability flags), entirely from the catalog record. See docs/tools/hf-metadata-schema.md. Returns "" when the catalog holds no speed rows for the default quant, opting out of the block. @@ -178,31 +234,15 @@ def build_transcribe_cpp_block(ctx: dict) -> str: return "" caps = ctx["capabilities"] - wer = ctx["wer"] - dataset_key = wer.get("metadata_key", "librispeech_test_clean") - block: dict = {} - # Headline dataset: per-quant WER taken from the `quants:` column. - headline = { - q["name"].lower(): float(str(q["wer"]).rstrip("%")) - for q in ctx["quants"] if q.get("wer") is not None - } - if headline: - block[f"wer_{dataset_key}"] = headline - # Any additional per-quant WER maps listed inline under `wer:` (keyed by - # dataset name, e.g. `librispeech_test_clean:`) are emitted as their own - # `wer_` blocks. Only dict values count as datasets; scalar keys - # (metadata_key, source, notes) are skipped. - for key, per_quant in wer.items(): - if isinstance(per_quant, dict): - block[f"wer_{key}"] = { - str(q).lower(): float(str(v).rstrip("%")) for q, v in per_quant.items() - } + # Bumped when key names or shapes change. 2: every result set the catalog + # holds is emitted, keyed __[_scoring][_mode]; + # earlier cards emitted a hand-named headline map and up to one extra. + block: dict = {"schema_version": 2} + # Every per-quant error map the catalog holds, headline first. + for key, per_quant in ctx["metric_blocks"].items(): + block[key] = dict(per_quant) for machine, backends in ctx["perf"].items(): block[f"rtf_{machine.replace('-', '_')}"] = backends - # Optional non-WER task metrics (for example cpWER for - # speaker-attributed ASR). Values are emitted verbatim so the spec keeps - # the metric's natural shape and units. - block.update(ctx.get("metrics", {})) block["streaming"] = bool(caps.get("streaming", False)) if "diarize" in caps: block["diarize"] = bool(caps["diarize"]) diff --git a/scripts/hf_cards/gigaam-v3-ctc.yaml b/scripts/hf_cards/gigaam-v3-ctc.yaml index c7d1925d..b897562d 100644 --- a/scripts/hf_cards/gigaam-v3-ctc.yaml +++ b/scripts/hf_cards/gigaam-v3-ctc.yaml @@ -30,7 +30,11 @@ summary: | Offline Russian speech-to-text with greedy CTC decoding. 16-layer Conformer encoder with a 1×1 Conv1d CTC head. Output is lowercased Russian, no punctuation; 33-entry character vocabulary. wer: - metadata_key: fleurs_ru source: FLEURS ru notes: | - WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 8.42%. Upstream `gigaam` author package measured on the same manifest: 9.81%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. + Greedy decoding, no external LM. F32 reference baseline: 8.42%. Upstream `gigaam` + author package measured on the same manifest: 9.81%; the 1.4 pp gap is upstream + rejecting 5 long (>25 s) utterances with `Too long wav file, use + 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt + subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not + publish a FLEURS ru WER; this number is measured here. diff --git a/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml b/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml index 5dff6c82..f4ad888b 100644 --- a/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml +++ b/scripts/hf_cards/gigaam-v3-e2e-ctc.yaml @@ -30,7 +30,11 @@ summary: | Offline Russian speech-to-text with greedy CTC decoding. 16-layer Conformer encoder with a 1×1 Conv1d CTC head. Output is cased Russian with punctuation, decoded from a 256-piece SentencePiece tokenizer. wer: - metadata_key: fleurs_ru source: FLEURS ru notes: | - WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 5.50%. Upstream `gigaam` author package measured on the same manifest: 6.93%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. + Greedy decoding, no external LM. F32 reference baseline: 5.50%. Upstream `gigaam` + author package measured on the same manifest: 6.93%; the 1.4 pp gap is upstream + rejecting 5 long (>25 s) utterances with `Too long wav file, use + 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt + subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not + publish a FLEURS ru WER; this number is measured here. diff --git a/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml b/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml index 8edd77f2..b07b8c32 100644 --- a/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml +++ b/scripts/hf_cards/gigaam-v3-e2e-rnnt.yaml @@ -31,7 +31,11 @@ summary: | Offline Russian speech-to-text with greedy RNN-T decoding. 16-layer Conformer encoder paired with an RNN-T transducer head. Output is cased Russian with punctuation, decoded from a 1024-piece SentencePiece tokenizer. Not a streaming model and does not translate. Short-form only (≤25 s per utterance). wer: - metadata_key: fleurs_ru source: FLEURS ru notes: | - WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 5.35%. Upstream `gigaam` author package measured on the same manifest: 6.78%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. + Greedy decoding, no external LM. F32 reference baseline: 5.35%. Upstream `gigaam` + author package measured on the same manifest: 6.78%; the 1.4 pp gap is upstream + rejecting 5 long (>25 s) utterances with `Too long wav file, use + 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt + subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not + publish a FLEURS ru WER; this number is measured here. diff --git a/scripts/hf_cards/gigaam-v3-rnnt.yaml b/scripts/hf_cards/gigaam-v3-rnnt.yaml index 174d6dfa..443765e8 100644 --- a/scripts/hf_cards/gigaam-v3-rnnt.yaml +++ b/scripts/hf_cards/gigaam-v3-rnnt.yaml @@ -30,7 +30,11 @@ summary: | Offline Russian speech-to-text with greedy RNN-T decoding. Same 16-layer Conformer encoder as the e2e variant, fine-tuned to emit lowercased Russian with no punctuation; 33-entry character vocabulary. wer: - metadata_key: fleurs_ru source: FLEURS ru notes: | - WER measured on the full FLEURS ru test split (775 utterances) with greedy decoding and no external LM. F32 reference baseline: 8.08%. Upstream `gigaam` author package measured on the same manifest: 9.46%; the 1.4 pp gap is upstream rejecting 5 long (>25 s) utterances with `Too long wav file, use 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not publish a FLEURS ru WER; this number is measured here. + Greedy decoding, no external LM. F32 reference baseline: 8.08%. Upstream `gigaam` + author package measured on the same manifest: 9.46%; the 1.4 pp gap is upstream + rejecting 5 long (>25 s) utterances with `Too long wav file, use + 'transcribe_longform' method.` (counted as 100% deletion errors). On the 770-utt + subset both sides decode, transcribe.cpp matches upstream exactly. ai-sage does not + publish a FLEURS ru WER; this number is measured here. diff --git a/scripts/hf_cards/granite-4.0-1b-speech.yaml b/scripts/hf_cards/granite-4.0-1b-speech.yaml index af8d186a..d67a04ee 100644 --- a/scripts/hf_cards/granite-4.0-1b-speech.yaml +++ b/scripts/hf_cards/granite-4.0-1b-speech.yaml @@ -34,8 +34,7 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with greedy decoding. BF16 reference baseline (re-run locally with the - model card's exact prompt): 1.42% — matches the upstream Open ASR - Leaderboard number exactly. Text normalizer: Whisper - `EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. + Greedy decoding. BF16 reference baseline (re-run locally with the model card's exact + prompt): 1.42% — matches the upstream Open ASR Leaderboard number exactly. Text + normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR + Leaderboard uses. diff --git a/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml b/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml index 2e4c5c35..aff1d4f3 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b-nar.yaml @@ -36,15 +36,12 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances). - BF16 reference baseline (transformers `model.transcribe`, MPS, re-run - locally): 1.28% — matches the upstream model card's 1.29% to within - sampling noise. Text normalizer: Whisper `EnglishTextNormalizer`, the - same normalizer Open ASR Leaderboard uses. Reference reproduction - follows the model card path verbatim (`AutoProcessor` + - `AutoModel.transcribe` + `processor.batch_decode`) at HF revision - `99a4df9` (single-file `modeling_granite_speech_nar.py` snapshot, the - README's canonical target); no mask patching is required because the - NAR LM uses `create_bidirectional_mask()` natively. F16, Q8_0, and - Q6_K all match BF16's 1.29%; Q5_K_M dips slightly to 1.25% (within - overlapping CIs). + BF16 reference baseline (transformers `model.transcribe`, MPS, re-run locally): + 1.28% — matches the upstream model card's 1.29% to within sampling noise. Text + normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR + Leaderboard uses. Reference reproduction follows the model card path verbatim + (`AutoProcessor` + `AutoModel.transcribe` + `processor.batch_decode`) at HF revision + `99a4df9` (single-file `modeling_granite_speech_nar.py` snapshot, the README's + canonical target); no mask patching is required because the NAR LM uses + `create_bidirectional_mask()` natively. F16, Q8_0, and Q6_K all match BF16's 1.29%; + Q5_K_M dips slightly to 1.25% (within overlapping CIs). diff --git a/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml b/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml index 426fefe0..0cb2f715 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b-plus.yaml @@ -43,14 +43,12 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with greedy decoding and the model-card chat template (system prompt + - leading-space user instruction + `add_generation_prompt=True`). BF16 - reference baseline (re-run locally with that exact prompt): 1.48%; 0.04pp - above upstream's published 1.44%, within bootstrap CI overlap and likely - a chat-template / normalization difference on the publisher side. Text - normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR - Leaderboard uses. The `add_generation_prompt=True` is load-bearing — - without it the model emits 25-27 empty hypotheses on short test-clean - clips and WER blows up to ~26%. The transcribe.cpp runtime hard-codes the - prompt correctly; this note only matters if you reproduce the reference. + Greedy decoding with the model-card chat template (system prompt + leading-space + user instruction + `add_generation_prompt=True`). BF16 reference baseline (re-run + locally with that exact prompt): 1.48%; 0.04pp above upstream's published 1.44%, + within bootstrap CI overlap and likely a chat-template / normalization difference on + the publisher side. Text normalizer: Whisper `EnglishTextNormalizer`, the same + normalizer Open ASR Leaderboard uses. The `add_generation_prompt=True` is + load-bearing — without it the model emits 25-27 empty hypotheses on short test-clean + clips and WER blows up to ~26%. The transcribe.cpp runtime hard-codes the prompt + correctly; this note only matters if you reproduce the reference. diff --git a/scripts/hf_cards/granite-speech-4.1-2b.yaml b/scripts/hf_cards/granite-speech-4.1-2b.yaml index 632713aa..dc7bcbb2 100644 --- a/scripts/hf_cards/granite-speech-4.1-2b.yaml +++ b/scripts/hf_cards/granite-speech-4.1-2b.yaml @@ -35,9 +35,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with greedy decoding. BF16 reference baseline (re-run locally with the - model card's exact prompt): 1.31% — 0.02pp below upstream's published - 1.33%, likely a minor normalization difference on the publisher side and - well within bootstrap CI overlap. Text normalizer: Whisper - `EnglishTextNormalizer`, the same normalizer Open ASR Leaderboard uses. + Greedy decoding. BF16 reference baseline (re-run locally with the model card's exact + prompt): 1.31% — 0.02pp below upstream's published 1.33%, likely a minor + normalization difference on the publisher side and well within bootstrap CI overlap. + Text normalizer: Whisper `EnglishTextNormalizer`, the same normalizer Open ASR + Leaderboard uses. diff --git a/scripts/hf_cards/granite-speech-5.0-470m-turboctc-nc.yaml b/scripts/hf_cards/granite-speech-5.0-470m-turboctc-nc.yaml index 7da78bf3..f4ed3821 100644 --- a/scripts/hf_cards/granite-speech-5.0-470m-turboctc-nc.yaml +++ b/scripts/hf_cards/granite-speech-5.0-470m-turboctc-nc.yaml @@ -1,15 +1,12 @@ # Spec for the HF README of handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. # # NON-COMMERCIAL. Upstream is CC-BY-NC-SA-4.0, so these GGUFs are derivatives # under the same terms (ShareAlike). Do not copy the Apache-2.0 sibling's # license fields into this file. -hf_repo: ibm-granite/granite-speech-5.0-470m-turboctc-nc -target_repo: handy-computer/granite-speech-5.0-470m-turboctc-nc-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-speech-5.0-470m-turboctc-nc.md -upstream_commit: 0eb7b4f pin_date: 2026-09-12 # Validation pin for the most recent upload. Updated on each release — @@ -19,11 +16,7 @@ validation: commit: f1d0e10 date: 2026-09-12 -license: cc-by-nc-sa-4.0 -license_display: CC-BY-NC-SA-4.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -39,58 +32,8 @@ summary: | parameter Granite Conformer encoder with a self-conditioned CTC head. Takes a 16 kHz mono WAV and produces a transcript. Not a streaming model. English only. -default_quant_index: 2 # Q8_0 - -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, hand-authored from the bench as -# the mean of the four publication cells (q8_0/q4_k_m × jfk/dots); published raw -# as rtf_ in the metadata block. -perf: - m4-max: - cpu: 49 - metal: 351 - m4: - cpu: 28.5 - metal: 119 - ryzen-4750u: - cpu: 15.9 - vulkan: 20.3 - wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances), - greedy CTC decoding, no external LM. Measured reference baseline - (transformers 5.17.0, F32, CPU): 1.29%, 95% CI [1.15, 1.42]. - -quants: - - name: BF16 - filename: granite-speech-5.0-470m-turboctc-nc-BF16.gguf - size: 948 MB - wer: 1.29% - - name: F16 - filename: granite-speech-5.0-470m-turboctc-nc-F16.gguf - size: 949 MB - wer: 1.29% - - name: Q8_0 - filename: granite-speech-5.0-470m-turboctc-nc-Q8_0.gguf - size: 506 MB - wer: 1.30% - - name: Q6_K - filename: granite-speech-5.0-470m-turboctc-nc-Q6_K.gguf - size: 392 MB - wer: 1.28% - - name: Q5_K_M - filename: granite-speech-5.0-470m-turboctc-nc-Q5_K_M.gguf - size: 336 MB - wer: 1.29% - - name: Q4_K_M - filename: granite-speech-5.0-470m-turboctc-nc-Q4_K_M.gguf - size: 279 MB - wer: 1.33% + Greedy CTC decoding, no external LM. Measured reference baseline (transformers + 5.17.0, F32, CPU): 1.29%, 95% CI [1.15, 1.42]. diff --git a/scripts/hf_cards/granite-speech-5.0-470m-turboctc.yaml b/scripts/hf_cards/granite-speech-5.0-470m-turboctc.yaml index b538f413..1abe821c 100644 --- a/scripts/hf_cards/granite-speech-5.0-470m-turboctc.yaml +++ b/scripts/hf_cards/granite-speech-5.0-470m-turboctc.yaml @@ -1,11 +1,8 @@ # Spec for the HF README of handy-computer/granite-speech-5.0-470m-turboctc-gguf. -# Consumed by scripts/hf_cards/generate.py. +# Prose only; numbers and metadata come from catalog/.json. See README.md. -hf_repo: ibm-granite/granite-speech-5.0-470m-turboctc -target_repo: handy-computer/granite-speech-5.0-470m-turboctc-gguf transcribe_docs_url: https://github.com/handy-computer/transcribe.cpp/blob/main/docs/models/granite-speech-5.0-470m-turboctc.md -upstream_commit: 18ca3c1 pin_date: 2026-09-12 # Validation pin for the most recent upload. Updated on each release — @@ -15,11 +12,7 @@ validation: commit: b9427cf date: 2026-09-12 -license: apache-2.0 -license_display: Apache-2.0 pipeline_tag: automatic-speech-recognition -languages: - - en tags: - gguf - transcribe.cpp @@ -34,57 +27,8 @@ summary: | with a self-conditioned CTC head. Takes a 16 kHz mono WAV and produces a transcript. Not a streaming model. English only. -default_quant_index: 2 # Q8_0 - -# Capability flags for the transcribe_cpp metadata block. -capabilities: - streaming: false - translate: false - lang_detect: false - timestamps: none # none | segment | word | token - -# Speedup-over-realtime (×RT) per rig/backend, hand-authored from the bench; -# published raw as rtf_ in the metadata block. -perf: - m4-max: - cpu: 49 - metal: 353 - m4: - cpu: 29 - metal: 130 - ryzen-4750u: - cpu: 15.5 - vulkan: 20.5 - wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances), - greedy CTC decoding, no external LM. Measured reference baseline - (transformers 5.17.0, F32, CPU): 1.33%, 95% CI [1.20, 1.47]. - -quants: - - name: BF16 - filename: granite-speech-5.0-470m-turboctc-BF16.gguf - size: 948 MB - wer: 1.33% - - name: F16 - filename: granite-speech-5.0-470m-turboctc-F16.gguf - size: 948 MB - wer: 1.33% - - name: Q8_0 - filename: granite-speech-5.0-470m-turboctc-Q8_0.gguf - size: 506 MB - wer: 1.34% - - name: Q6_K - filename: granite-speech-5.0-470m-turboctc-Q6_K.gguf - size: 392 MB - wer: 1.33% - - name: Q5_K_M - filename: granite-speech-5.0-470m-turboctc-Q5_K_M.gguf - size: 336 MB - wer: 1.34% - - name: Q4_K_M - filename: granite-speech-5.0-470m-turboctc-Q4_K_M.gguf - size: 279 MB - wer: 1.34% + Greedy CTC decoding, no external LM. Measured reference baseline (transformers + 5.17.0, F32, CPU): 1.33%, 95% CI [1.20, 1.47]. diff --git a/scripts/hf_cards/medasr.yaml b/scripts/hf_cards/medasr.yaml index ec376bce..7c6e4a00 100644 --- a/scripts/hf_cards/medasr.yaml +++ b/scripts/hf_cards/medasr.yaml @@ -30,4 +30,12 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2,620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline (HuggingFace transformers, Mac MPS): 17.88%; transcribe.cpp F32 matches exactly. Absolute WER is higher than general-purpose ASR (e.g. Whisper-base ~5%) because the model is fine-tuned for medical dictation — on the publisher's internal RAD-DICT / GENERAL-DICT / FM-DICT datasets the model scores 6.6%–9.3%, but those datasets are not publicly reproducible. Q8_0 is the recommended default (smallest preset with no statistically detectable WER degradation); Q4_K_M shows a real +0.26 pp degradation and is shipped for completeness but not recommended — prefer Q5_K_M if you need smaller than Q8_0. + Greedy CTC decoding, no external LM. F32 reference baseline (HuggingFace + transformers, Mac MPS): 17.88%; transcribe.cpp F32 matches exactly. Absolute WER is + higher than general-purpose ASR (e.g. Whisper-base ~5%) because the model is + fine-tuned for medical dictation — on the publisher's internal RAD-DICT / + GENERAL-DICT / FM-DICT datasets the model scores 6.6%–9.3%, but those datasets are + not publicly reproducible. Q8_0 is the recommended default (smallest preset with no + statistically detectable WER degradation); Q4_K_M shows a real +0.26 pp degradation + and is shipped for completeness but not recommended — prefer Q5_K_M if you need + smaller than Q8_0. diff --git a/scripts/hf_cards/moonshine-base-ar.yaml b/scripts/hf_cards/moonshine-base-ar.yaml index bbd3df07..69d0d79a 100644 --- a/scripts/hf_cards/moonshine-base-ar.yaml +++ b/scripts/hf_cards/moonshine-base-ar.yaml @@ -28,12 +28,10 @@ summary: | (ar); no translation, no language detection, no timestamps. wer: - metadata_key: fleurs_ar source: FLEURS ar test notes: | - WER measured on the FLEURS-ar test split (428 - utterances) using the transcribe.cpp default decode (greedy, - num_beams=1, max_length=192 — matching the upstream generation_config). + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=192, + matching the upstream generation_config). UsefulSensors does not publish a per-language WER number for this variant. As a comparable baseline we ran the Transformers F32 diff --git a/scripts/hf_cards/moonshine-base-ja.yaml b/scripts/hf_cards/moonshine-base-ja.yaml index bf2da3cb..c6960281 100644 --- a/scripts/hf_cards/moonshine-base-ja.yaml +++ b/scripts/hf_cards/moonshine-base-ja.yaml @@ -28,12 +28,10 @@ summary: | (ja); no translation, no language detection, no timestamps. wer: - metadata_key: fleurs_ja source: FLEURS ja test notes: | - CER measured on the FLEURS-ja test split (650 - utterances) using the transcribe.cpp default decode (greedy, - num_beams=1, max_length=192 — matching the upstream generation_config). + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=192, + matching the upstream generation_config). UsefulSensors does not publish a per-language CER number for this variant. As a comparable baseline we ran the Transformers F32 diff --git a/scripts/hf_cards/moonshine-base-ko.yaml b/scripts/hf_cards/moonshine-base-ko.yaml index 9844b305..0c64508e 100644 --- a/scripts/hf_cards/moonshine-base-ko.yaml +++ b/scripts/hf_cards/moonshine-base-ko.yaml @@ -28,12 +28,10 @@ summary: | (ko); no translation, no language detection, no timestamps. wer: - metadata_key: fleurs_ko source: FLEURS ko test notes: | - CER measured on the FLEURS-ko test split (382 - utterances) using the transcribe.cpp default decode (greedy, - num_beams=1, max_length=192 — matching the upstream generation_config). + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=192, + matching the upstream generation_config). UsefulSensors does not publish a per-language CER number for this variant. As a comparable baseline we ran the Transformers F32 diff --git a/scripts/hf_cards/moonshine-base-uk.yaml b/scripts/hf_cards/moonshine-base-uk.yaml index f0cc8bef..8758c725 100644 --- a/scripts/hf_cards/moonshine-base-uk.yaml +++ b/scripts/hf_cards/moonshine-base-uk.yaml @@ -28,12 +28,10 @@ summary: | (uk); no translation, no language detection, no timestamps. wer: - metadata_key: fleurs_uk source: FLEURS uk test notes: | - WER measured on the FLEURS-uk test split (750 - utterances) using the transcribe.cpp default decode (greedy, - num_beams=1, max_length=192 — matching the upstream generation_config). + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=192, + matching the upstream generation_config). UsefulSensors does not publish a per-language WER number for this variant. As a comparable baseline we ran the Transformers F32 diff --git a/scripts/hf_cards/moonshine-base-vi.yaml b/scripts/hf_cards/moonshine-base-vi.yaml index d81e4608..61d9df7c 100644 --- a/scripts/hf_cards/moonshine-base-vi.yaml +++ b/scripts/hf_cards/moonshine-base-vi.yaml @@ -28,12 +28,10 @@ summary: | (vi); no translation, no language detection, no timestamps. wer: - metadata_key: fleurs_vi source: FLEURS vi test notes: | - WER measured on the FLEURS-vi test split (857 - utterances) using the transcribe.cpp default decode (greedy, - num_beams=1, max_length=192 — matching the upstream generation_config). + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=192, + matching the upstream generation_config). UsefulSensors does not publish a per-language WER number for this variant. As a comparable baseline we ran the Transformers F32 diff --git a/scripts/hf_cards/moonshine-base-zh.yaml b/scripts/hf_cards/moonshine-base-zh.yaml index 32c4ad60..4a7c0605 100644 --- a/scripts/hf_cards/moonshine-base-zh.yaml +++ b/scripts/hf_cards/moonshine-base-zh.yaml @@ -28,12 +28,10 @@ summary: | (zh); no translation, no language detection, no timestamps. wer: - metadata_key: fleurs_zh source: FLEURS zh test notes: | - CER measured on the FLEURS-zh test split (945 - utterances) using the transcribe.cpp default decode (greedy, - num_beams=1, max_length=192 — matching the upstream generation_config). + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=192, + matching the upstream generation_config). UsefulSensors does not publish a per-language CER number for this variant. As a comparable baseline we ran the Transformers F32 diff --git a/scripts/hf_cards/moonshine-base.yaml b/scripts/hf_cards/moonshine-base.yaml index 950cc80f..71247d22 100644 --- a/scripts/hf_cards/moonshine-base.yaml +++ b/scripts/hf_cards/moonshine-base.yaml @@ -31,11 +31,9 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with the transcribe.cpp default decode (greedy, num_beams=1, - max_length=194 — matching the upstream generation_config). Upstream - reports 3.27% on the same split (Moonshine paper, Table 2; also Open - ASR Leaderboard). Our F32 reference baseline lands at 3.28%, identical - to upstream within rounding and well within the ±1.00 pp Stage 7 - acceptance gate. Q8_0 lands at 3.26%, slightly under F32 — that delta - sits inside the 95% bootstrap CI and is noise, not a real improvement. + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=194, + matching the upstream generation_config). Upstream reports 3.27% on the same split + (Moonshine paper, Table 2; also Open ASR Leaderboard). Our F32 reference baseline + lands at 3.28%, identical to upstream within rounding and well within the ±1.00 pp + Stage 7 acceptance gate. Q8_0 lands at 3.26%, slightly under F32 — that delta sits + inside the 95% bootstrap CI and is noise, not a real improvement. diff --git a/scripts/hf_cards/moonshine-streaming-medium.yaml b/scripts/hf_cards/moonshine-streaming-medium.yaml index ed93fb17..dbb93e4e 100644 --- a/scripts/hf_cards/moonshine-streaming-medium.yaml +++ b/scripts/hf_cards/moonshine-streaming-medium.yaml @@ -33,13 +33,10 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference - baseline: 2.16%. Quants are numerically indistinguishable from F32 on - this manifest. Useful Sensors' self-reported number on this split is - 2.08% from the Open ASR Leaderboard table; the +0.08pp residual matches - the same scoring / text-normalization difference seen across the tiny - and small variants (cross-checked against HF Transformers on tiny and - found to be at 99.6% identical hypotheses to our port), and is not a - numerical drift. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped - for this variant. + Greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference baseline: 2.16%. + Quants are numerically indistinguishable from F32 on this manifest. Useful Sensors' + self-reported number on this split is 2.08% from the Open ASR Leaderboard table; the + +0.08pp residual matches the same scoring / text-normalization difference seen + across the tiny and small variants (cross-checked against HF Transformers on tiny + and found to be at 99.6% identical hypotheses to our port), and is not a numerical + drift. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. diff --git a/scripts/hf_cards/moonshine-streaming-small.yaml b/scripts/hf_cards/moonshine-streaming-small.yaml index 87cdd04f..68b29217 100644 --- a/scripts/hf_cards/moonshine-streaming-small.yaml +++ b/scripts/hf_cards/moonshine-streaming-small.yaml @@ -32,12 +32,10 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference - baseline: 2.53%. Useful Sensors' self-reported number on this split is - 2.49% from the Open ASR Leaderboard table; the +0.04pp residual matches - the same scoring / text-normalization difference seen on the tiny variant - where we cross-checked against the HF Transformers reference (4.52% on - the same manifest, 99.6% identical hypotheses to our F32) and confirmed - it is not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M GGUFs - are not currently shipped for this variant. + Greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference baseline: 2.53%. + Useful Sensors' self-reported number on this split is 2.49% from the Open ASR + Leaderboard table; the +0.04pp residual matches the same scoring / + text-normalization difference seen on the tiny variant where we cross-checked + against the HF Transformers reference (4.52% on the same manifest, 99.6% identical + hypotheses to our F32) and confirmed it is not a numerical drift in the port. Q6_K / + Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. diff --git a/scripts/hf_cards/moonshine-streaming-tiny.yaml b/scripts/hf_cards/moonshine-streaming-tiny.yaml index fbd9abaa..de9c18fc 100644 --- a/scripts/hf_cards/moonshine-streaming-tiny.yaml +++ b/scripts/hf_cards/moonshine-streaming-tiny.yaml @@ -33,12 +33,10 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference - baseline: 4.53%. The HF Transformers reference scored on the same manifest - in the same regime lands at 4.52% with 99.6% byte-identical hypotheses to - our F32, so the port is at exact parity with the reference. Useful Sensors' - self-reported number on this split is 4.49% from the Open ASR Leaderboard - table; the +0.04pp residual is a scoring / text-normalization difference vs - that methodology, not a numerical drift in the port. Q6_K / Q5_K_M / Q4_K_M - GGUFs are not currently shipped for this variant. + Greedy decoding (`num_beams=1`, `do_sample=False`). F32 reference baseline: 4.53%. + The HF Transformers reference scored on the same manifest in the same regime lands + at 4.52% with 99.6% byte-identical hypotheses to our F32, so the port is at exact + parity with the reference. Useful Sensors' self-reported number on this split is + 4.49% from the Open ASR Leaderboard table; the +0.04pp residual is a scoring / + text-normalization difference vs that methodology, not a numerical drift in the + port. Q6_K / Q5_K_M / Q4_K_M GGUFs are not currently shipped for this variant. diff --git a/scripts/hf_cards/moonshine-tiny-ar.yaml b/scripts/hf_cards/moonshine-tiny-ar.yaml index fedb0b4e..a92cb702 100644 --- a/scripts/hf_cards/moonshine-tiny-ar.yaml +++ b/scripts/hf_cards/moonshine-tiny-ar.yaml @@ -28,12 +28,10 @@ summary: | (ar); no translation, no language detection, no timestamps. wer: - metadata_key: fleurs_ar source: FLEURS ar test notes: | - WER measured on the FLEURS-ar test split (428 - utterances) using the transcribe.cpp default decode (greedy, - num_beams=1, max_length=192 — matching the upstream generation_config). + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=192, + matching the upstream generation_config). UsefulSensors does not publish a per-language WER number for this variant. As a comparable baseline we ran the Transformers F32 diff --git a/scripts/hf_cards/moonshine-tiny-ja.yaml b/scripts/hf_cards/moonshine-tiny-ja.yaml index 37646278..216c555a 100644 --- a/scripts/hf_cards/moonshine-tiny-ja.yaml +++ b/scripts/hf_cards/moonshine-tiny-ja.yaml @@ -28,12 +28,10 @@ summary: | (ja); no translation, no language detection, no timestamps. wer: - metadata_key: fleurs_ja source: FLEURS ja test notes: | - CER measured on the FLEURS-ja test split (650 - utterances) using the transcribe.cpp default decode (greedy, - num_beams=1, max_length=192 — matching the upstream generation_config). + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=192, + matching the upstream generation_config). UsefulSensors does not publish a per-language CER number for this variant. As a comparable baseline we ran the Transformers F32 diff --git a/scripts/hf_cards/moonshine-tiny-ko.yaml b/scripts/hf_cards/moonshine-tiny-ko.yaml index 219cc640..e091dd04 100644 --- a/scripts/hf_cards/moonshine-tiny-ko.yaml +++ b/scripts/hf_cards/moonshine-tiny-ko.yaml @@ -28,12 +28,10 @@ summary: | (ko); no translation, no language detection, no timestamps. wer: - metadata_key: fleurs_ko source: FLEURS ko test notes: | - CER measured on the FLEURS-ko test split (382 - utterances) using the transcribe.cpp default decode (greedy, - num_beams=1, max_length=192 — matching the upstream generation_config). + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=192, + matching the upstream generation_config). UsefulSensors does not publish a per-language CER number for this variant. As a comparable baseline we ran the Transformers F32 diff --git a/scripts/hf_cards/moonshine-tiny-uk.yaml b/scripts/hf_cards/moonshine-tiny-uk.yaml index 13188e0b..9fffc1d7 100644 --- a/scripts/hf_cards/moonshine-tiny-uk.yaml +++ b/scripts/hf_cards/moonshine-tiny-uk.yaml @@ -28,12 +28,10 @@ summary: | (uk); no translation, no language detection, no timestamps. wer: - metadata_key: fleurs_uk source: FLEURS uk test notes: | - WER measured on the FLEURS-uk test split (750 - utterances) using the transcribe.cpp default decode (greedy, - num_beams=1, max_length=192 — matching the upstream generation_config). + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=192, + matching the upstream generation_config). UsefulSensors does not publish a per-language WER number for this variant. As a comparable baseline we ran the Transformers F32 diff --git a/scripts/hf_cards/moonshine-tiny-vi.yaml b/scripts/hf_cards/moonshine-tiny-vi.yaml index 7f58d85c..8725e58a 100644 --- a/scripts/hf_cards/moonshine-tiny-vi.yaml +++ b/scripts/hf_cards/moonshine-tiny-vi.yaml @@ -28,12 +28,10 @@ summary: | (vi); no translation, no language detection, no timestamps. wer: - metadata_key: fleurs_vi source: FLEURS vi test notes: | - WER measured on the FLEURS-vi test split (857 - utterances) using the transcribe.cpp default decode (greedy, - num_beams=1, max_length=192 — matching the upstream generation_config). + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=192, + matching the upstream generation_config). UsefulSensors does not publish a per-language WER number for this variant. As a comparable baseline we ran the Transformers F32 diff --git a/scripts/hf_cards/moonshine-tiny-zh.yaml b/scripts/hf_cards/moonshine-tiny-zh.yaml index 9386fe84..0741d351 100644 --- a/scripts/hf_cards/moonshine-tiny-zh.yaml +++ b/scripts/hf_cards/moonshine-tiny-zh.yaml @@ -28,12 +28,10 @@ summary: | (zh); no translation, no language detection, no timestamps. wer: - metadata_key: fleurs_zh source: FLEURS zh test notes: | - CER measured on the FLEURS-zh test split (945 - utterances) using the transcribe.cpp default decode (greedy, - num_beams=1, max_length=192 — matching the upstream generation_config). + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=192, + matching the upstream generation_config). UsefulSensors does not publish a per-language CER number for this variant. As a comparable baseline we ran the Transformers F32 diff --git a/scripts/hf_cards/moonshine-tiny.yaml b/scripts/hf_cards/moonshine-tiny.yaml index bf7840f6..3c154c5e 100644 --- a/scripts/hf_cards/moonshine-tiny.yaml +++ b/scripts/hf_cards/moonshine-tiny.yaml @@ -29,10 +29,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with the transcribe.cpp default decode (greedy, num_beams=1, - max_length=194 — matching the upstream generation_config). Useful - Sensors' self-reported number on the same split is 4.55% (model card). - Our F32 reference baseline lands at 4.58%, within rounding of upstream - and well within the ±1.00 pp Stage 7 acceptance gate. Q8_0 drift is - +0.02 pp vs F32 — within bootstrap CI noise. + Decoded with the transcribe.cpp defaults (greedy, num_beams=1, max_length=194, + matching the upstream generation_config). Useful Sensors' self-reported number on + the same split is 4.55% (model card). Our F32 reference baseline lands at 4.58%, + within rounding of upstream and well within the ±1.00 pp Stage 7 acceptance gate. + Q8_0 drift is +0.02 pp vs F32 — within bootstrap CI noise. diff --git a/scripts/hf_cards/moss-transcribe-diarize.yaml b/scripts/hf_cards/moss-transcribe-diarize.yaml index db98b9e4..f2634be3 100644 --- a/scripts/hf_cards/moss-transcribe-diarize.yaml +++ b/scripts/hf_cards/moss-transcribe-diarize.yaml @@ -34,22 +34,18 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech `test-clean` split (2620 English - utterances) with the Whisper-style English text normalizer and jiwer - 3.x. MOSS emits the diarized format `[start][Sxx]text[end]`; the bracket - spans are metadata and are de-diarized to a space (for both hypothesis - and reference) before scoring, matching the author-repo reference runner. - These values describe this dataset only, not a general quality ranking: a - quant that scores slightly better here is not necessarily better in - real-world use, because dataset-specific decoding near-ties can make - quantization noise help or hurt individual utterances. The same-manifest - MOSS author-repo reference (bf16, greedy) lands at - **2.07%** with 95% bootstrap CI [1.82%, 2.40%]. The BF16 port lands at - 2.08% (within +0.01 of the reference, well inside the CI band); the - lower-bit presets sit between 1.93% and 1.99% (statistical noise) except - Q4_K_M at 2.59%, whose excess is a handful of 4-bit tail failures - (6 empty outputs, 5 English->Chinese language-drift utterances, 1 - timestamp-token repetition loop) rather than broad degradation. Prefer - Q5_K_M or higher if those tail failures matter. Reproduce with - `scripts/wer/run.py` + `scripts/wer/score.py --dediarize`; public - `full_text` applies equivalent marker removal. + Scored with the Whisper-style English text normalizer and jiwer 3.x. MOSS emits the + diarized format `[start][Sxx]text[end]`; the bracket spans are metadata and are + de-diarized to a space (for both hypothesis and reference) before scoring, matching + the author-repo reference runner. These values describe this dataset only, not a + general quality ranking: a quant that scores slightly better here is not necessarily + better in real-world use, because dataset-specific decoding near-ties can make + quantization noise help or hurt individual utterances. The same-manifest MOSS + author-repo reference (bf16, greedy) lands at **2.07%** with 95% bootstrap CI + [1.82%, 2.40%]. The BF16 port lands at 2.08% (within +0.01 of the reference, well + inside the CI band); the lower-bit presets sit between 1.93% and 1.99% (statistical + noise) except Q4_K_M at 2.59%, whose excess is a handful of 4-bit tail failures (6 + empty outputs, 5 English->Chinese language-drift utterances, 1 timestamp-token + repetition loop) rather than broad degradation. Prefer Q5_K_M or higher if those + tail failures matter. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py + --dediarize`; public `full_text` applies equivalent marker removal. diff --git a/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml b/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml index 91884af2..d8a47a44 100644 --- a/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml +++ b/scripts/hf_cards/multitalker-parakeet-streaming-0.6b-v1.yaml @@ -30,15 +30,13 @@ tags: summary: | Offline and cache-aware streaming English speech-to-text with punctuation and capitalization. A 0.6B-parameter cache-aware streaming FastConformer encoder with an RNN-T transducer decoder, fine-tuned from nvidia/nemotron-speech-streaming-en-0.6b. Plain GGUFs run the single_speaker_mode ASR path, while bundle GGUFs under `bundle/` embed nvidia/diar_streaming_sortformer_4spk-v2.1 and, with `--diarize`, transcribe up to four overlapping speakers into a speaker-tagged transcript. The encoder preserves the upstream att_context_size=[70, 13] (1.12s) cache-aware attention mask; all four latency lookahead settings are selectable. -metrics: - cpwer_ami_ihm_test: - bundle_f32_kernel: 19.35 - bundle_f32_masked: 23.73 - wer: source: LibriSpeech test-clean, offline notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) in single_speaker_mode with greedy RNN-T decoding and whisper-normalizer (PnC-stripped) scoring. F32 reference baseline: 2.19%. The measured NeMo single_speaker_mode reference and NVIDIA's self-reported number on the same split are both 2.19%. + Run in single_speaker_mode with greedy RNN-T decoding and whisper-normalizer + (PnC-stripped) scoring. F32 reference baseline: 2.19%. The measured NeMo + single_speaker_mode reference and NVIDIA's self-reported number on the same split + are both 2.19%. ### Multitalker bundles (speaker-attributed ASR) diff --git a/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml b/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml index e8ce6ee3..432f562e 100644 --- a/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml +++ b/scripts/hf_cards/nemotron-3.5-asr-streaming-0.6b.yaml @@ -29,14 +29,10 @@ summary: | Multilingual speech-to-text across 32 supported language-locales (the model's tokenizer recognizes 40, but 8 are adaptation-ready and need fine-tuning) with punctuation and capitalization. A 0.6B-parameter cache-aware streaming FastConformer encoder with a prompt-conditioned RNN-T transducer decoder; the target language is selected per call (--language en-US, fr-FR, de-DE, ...) and an auto mode emits a tag. Ships both the offline path (att_context_size=[56, 13], 1.12s, headline accuracy) and runtime-selectable chunked streaming (--stream-chunk-ms 1120 --stream-att-right {0,3,6,13}). wer: - metadata_key: fleurs_en source: FLEURS test en (en-US), offline att_context_size=[56, 13] notes: | - WER measured on FLEURS test en (647 utterances), greedy RNN-T, --language en-US, whisper-normalizer scoring; the per-quant column is FLEURS en. NeMo reference baseline on the same manifest: 7.99% (NVIDIA self-reports 7.91% en-US). On LibriSpeech test-clean (2620 utterances) the same presets score F32 3.04 / F16 3.03 / Q8_0 3.06 / Q6_K 3.07 / Q5_K_M 3.10 / Q4_K_M 3.28, against a 3.03% NeMo reference. - librispeech_test_clean: - f32: 3.04 - f16: 3.03 - q8_0: 3.06 - q6_k: 3.07 - q5_k_m: 3.10 - q4_k_m: 3.28 + Greedy RNN-T decoding with whisper-normalizer scoring; the per-quant column is + FLEURS en. NeMo reference baseline on the same manifest: 7.99% (NVIDIA self-reports + 7.91% en-US). On LibriSpeech test-clean (2620 utterances) the same presets score F32 + 3.04 / F16 3.03 / Q8_0 3.06 / Q6_K 3.07 / Q5_K_M 3.10 / Q4_K_M 3.28, against a 3.03% + NeMo reference. diff --git a/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml b/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml index 5f1902d1..8734dc79 100644 --- a/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml +++ b/scripts/hf_cards/nemotron-speech-streaming-en-0.6b.yaml @@ -30,4 +30,5 @@ summary: | wer: source: LibriSpeech test-clean, offline notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding. F32 reference baseline: 2.31%. NVIDIA's self-reported number on the same split at att_context_size=[70, 13] (1.12s chunk, w/o PnC) is 2.32%. + Greedy RNN-T decoding. F32 reference baseline: 2.31%. NVIDIA's self-reported number + on the same split at att_context_size=[70, 13] (1.12s chunk, w/o PnC) is 2.32%. diff --git a/scripts/hf_cards/parakeet-ctc-0.6b.yaml b/scripts/hf_cards/parakeet-ctc-0.6b.yaml index 88d1aadc..95707b7c 100644 --- a/scripts/hf_cards/parakeet-ctc-0.6b.yaml +++ b/scripts/hf_cards/parakeet-ctc-0.6b.yaml @@ -28,4 +28,5 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.87%. + Greedy CTC decoding, no external LM. F32 reference baseline: 1.87%. NVIDIA's + self-reported number on the same split is 1.87%. diff --git a/scripts/hf_cards/parakeet-ctc-1.1b.yaml b/scripts/hf_cards/parakeet-ctc-1.1b.yaml index 8209b534..f3541f5f 100644 --- a/scripts/hf_cards/parakeet-ctc-1.1b.yaml +++ b/scripts/hf_cards/parakeet-ctc-1.1b.yaml @@ -28,4 +28,5 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy CTC decoding and no external LM. F32 reference baseline: 1.85%. NVIDIA's self-reported number on the same split is 1.83%. + Greedy CTC decoding, no external LM. F32 reference baseline: 1.85%. NVIDIA's + self-reported number on the same split is 1.83%. diff --git a/scripts/hf_cards/parakeet-primeline.yaml b/scripts/hf_cards/parakeet-primeline.yaml index 22d01a7c..dcd13a32 100644 --- a/scripts/hf_cards/parakeet-primeline.yaml +++ b/scripts/hf_cards/parakeet-primeline.yaml @@ -33,11 +33,9 @@ summary: | punctuation. Not a streaming model and does not translate. wer: - metadata_key: fleurs_de source: FLEURS de test notes: | - WER measured on the FLEURS German test split (862 utterances) with greedy - transducer decoding and no external LM. + Greedy transducer decoding, no external LM. primeLine's published figures (2.95% average over Tuda-De, Multilingual LibriSpeech, and Common Voice 19.0) are on different corpora and are not diff --git a/scripts/hf_cards/parakeet-rnnt-0.6b.yaml b/scripts/hf_cards/parakeet-rnnt-0.6b.yaml index b299e4d1..00d796ac 100644 --- a/scripts/hf_cards/parakeet-rnnt-0.6b.yaml +++ b/scripts/hf_cards/parakeet-rnnt-0.6b.yaml @@ -28,4 +28,5 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.62%. NVIDIA's self-reported number on the same split is 1.63%. + Greedy RNN-T decoding, no external LM. F32 reference baseline: 1.62%. NVIDIA's + self-reported number on the same split is 1.63%. diff --git a/scripts/hf_cards/parakeet-rnnt-1.1b.yaml b/scripts/hf_cards/parakeet-rnnt-1.1b.yaml index 55ce2d33..3b597dce 100644 --- a/scripts/hf_cards/parakeet-rnnt-1.1b.yaml +++ b/scripts/hf_cards/parakeet-rnnt-1.1b.yaml @@ -28,4 +28,5 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.45%. NVIDIA's self-reported number on the same split is 1.46%. + Greedy RNN-T decoding, no external LM. F32 reference baseline: 1.45%. NVIDIA's + self-reported number on the same split is 1.46%. diff --git a/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml b/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml index 90cf9b62..11e08cbc 100644 --- a/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml +++ b/scripts/hf_cards/parakeet-tdt-0.6b-v2.yaml @@ -33,7 +33,6 @@ wer: source: LibriSpeech test-clean # metadata_key: librispeech_test_clean # names the wer_ field; override when scored on another corpus notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with - greedy transducer decoding and no external LM. F32 reference baseline: 1.68%. - NVIDIA's self-reported number on the same split is 1.69%, so the F32 and Q8_0 - ports match the upstream reference within rounding. + Greedy transducer decoding, no external LM. F32 reference baseline: 1.68%. NVIDIA's + self-reported number on the same split is 1.69%, so the F32 and Q8_0 ports match the + upstream reference within rounding. diff --git a/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml b/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml index 0e06cafb..fe6afa6a 100644 --- a/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml +++ b/scripts/hf_cards/parakeet-tdt-0.6b-v3.yaml @@ -33,6 +33,5 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with - greedy transducer decoding and no external LM. F32 reference baseline: 1.95%. - NVIDIA's self-reported number on the same split is 1.93%. + Greedy transducer decoding, no external LM. F32 reference baseline: 1.95%. NVIDIA's + self-reported number on the same split is 1.93%. diff --git a/scripts/hf_cards/parakeet-tdt-1.1b.yaml b/scripts/hf_cards/parakeet-tdt-1.1b.yaml index b753a60d..14e39de3 100644 --- a/scripts/hf_cards/parakeet-tdt-1.1b.yaml +++ b/scripts/hf_cards/parakeet-tdt-1.1b.yaml @@ -29,4 +29,5 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.39%. NVIDIA's self-reported number on the same split is 1.39%. + Greedy TDT/RNN-T transducer decoding, no external LM. F32 reference baseline: 1.39%. + NVIDIA's self-reported number on the same split is 1.39%. diff --git a/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml b/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml index 022e5fe9..0f257cd2 100644 --- a/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml +++ b/scripts/hf_cards/parakeet-tdt_ctc-1.1b.yaml @@ -29,4 +29,5 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 1.87%. NVIDIA's self-reported number on the same split is 1.82%. + Greedy TDT/RNN-T transducer decoding, no external LM. F32 reference baseline: 1.87%. + NVIDIA's self-reported number on the same split is 1.82%. diff --git a/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml b/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml index 19bfcffb..45c41518 100644 --- a/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml +++ b/scripts/hf_cards/parakeet-tdt_ctc-110m.yaml @@ -29,4 +29,5 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy TDT/RNN-T transducer decoding and no external LM. F32 reference baseline: 2.43%. NVIDIA's self-reported number on the same split is 2.40%. + Greedy TDT/RNN-T transducer decoding, no external LM. F32 reference baseline: 2.43%. + NVIDIA's self-reported number on the same split is 2.40%. diff --git a/scripts/hf_cards/parakeet-unified-en-0.6b.yaml b/scripts/hf_cards/parakeet-unified-en-0.6b.yaml index d3cd5575..24fbfc2e 100644 --- a/scripts/hf_cards/parakeet-unified-en-0.6b.yaml +++ b/scripts/hf_cards/parakeet-unified-en-0.6b.yaml @@ -28,4 +28,5 @@ summary: | wer: source: LibriSpeech test-clean, offline notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with greedy RNN-T decoding and no external LM. F32 reference baseline: 1.59%. NVIDIA's self-reported number on the same split is 1.63%. + Greedy RNN-T decoding, no external LM. F32 reference baseline: 1.59%. NVIDIA's + self-reported number on the same split is 1.63%. diff --git a/scripts/hf_cards/qwen3-asr-0.6b.yaml b/scripts/hf_cards/qwen3-asr-0.6b.yaml index c3ae90cf..65cdf94d 100644 --- a/scripts/hf_cards/qwen3-asr-0.6b.yaml +++ b/scripts/hf_cards/qwen3-asr-0.6b.yaml @@ -32,10 +32,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech `test-clean` split (2620 English - utterances) with the Whisper-style English text normalizer and jiwer 3.x, - on the metal backend of an Apple M4. Qwen3-ASR is a multilingual model — - this number characterizes the English case only. BF16 / F16 / Q8_0 / Q6_K - are all within bootstrap CI of each other; Q5_K_M and Q4_K_M show a small - but real regression driven by the tied token-embedding / head. Reproduce - with `scripts/wer/run.py` + `scripts/wer/score.py`. + Scored with the Whisper-style English text normalizer and jiwer 3.x on an Apple M4. + Qwen3-ASR is a multilingual model — this number characterizes the English case only. + BF16 / F16 / Q8_0 / Q6_K are all within bootstrap CI of each other; Q5_K_M and + Q4_K_M show a small but real regression driven by the tied token-embedding / head. + Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. diff --git a/scripts/hf_cards/qwen3-asr-1.7b.yaml b/scripts/hf_cards/qwen3-asr-1.7b.yaml index abb2a981..c1e4ea6d 100644 --- a/scripts/hf_cards/qwen3-asr-1.7b.yaml +++ b/scripts/hf_cards/qwen3-asr-1.7b.yaml @@ -34,11 +34,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech `test-clean` split (2620 English - utterances) with the Whisper-style English text normalizer and jiwer 3.x, - on the metal backend of an Apple M4. Qwen3-ASR is a multilingual model — - this number characterizes the English case only. The larger decoder - gives 1.7B more quantization headroom than the 0.6B; BF16 / F16 / Q8_0 / - Q6_K / Q5_K_M are all within bootstrap CI of each other, and Q4_K_M - regresses only ~0.2 WER points. Reproduce with `scripts/wer/run.py` + - `scripts/wer/score.py`. + Scored with the Whisper-style English text normalizer and jiwer 3.x on an Apple M4. + Qwen3-ASR is a multilingual model — this number characterizes the English case only. + The larger decoder gives 1.7B more quantization headroom than the 0.6B; BF16 / F16 / + Q8_0 / Q6_K / Q5_K_M are all within bootstrap CI of each other, and Q4_K_M regresses + only ~0.2 WER points. Reproduce with `scripts/wer/run.py` + `scripts/wer/score.py`. diff --git a/scripts/hf_cards/sensevoice-small.yaml b/scripts/hf_cards/sensevoice-small.yaml index a6bf6d20..ecb95dd8 100644 --- a/scripts/hf_cards/sensevoice-small.yaml +++ b/scripts/hf_cards/sensevoice-small.yaml @@ -38,14 +38,11 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) - with greedy CTC decoding. The publisher does not report a numerical - LibriSpeech WER (the model card publishes scores only as PNG figures), so - the gate baseline is our own FunASR 1.3.1 reference run on the same - manifest: 3.13% (95% CI [2.93%, 3.34%]). transcribe.cpp's F32 port matches - that baseline within +0.002 percentage-points. LibriSpeech is an English - benchmark; SenseVoice's strongest case is Mandarin, and AISHELL-1 (CER) - is the recommended complementary check. These table values were measured - with ITN off, matching the FunASR reference; `scripts/wer/run.py` pins + Greedy CTC decoding. The publisher does not report a numerical LibriSpeech WER (the + model card publishes scores only as PNG figures), so the gate baseline is our own + FunASR 1.3.1 reference run on the same manifest: 3.13% (95% CI [2.93%, 3.34%]). + transcribe.cpp's F32 port matches that baseline within +0.002 percentage-points. + LibriSpeech is an English benchmark; SenseVoice's strongest case is Mandarin, and + AISHELL-1 (CER) is the recommended complementary check. These table values were + measured with ITN off, matching the FunASR reference; `scripts/wer/run.py` pins `--no-itn` so the benchmark does not inherit the runtime default. - diff --git a/scripts/hf_cards/template.md.j2 b/scripts/hf_cards/template.md.j2 index 4bbb9e01..758be13a 100644 --- a/scripts/hf_cards/template.md.j2 +++ b/scripts/hf_cards/template.md.j2 @@ -14,6 +14,12 @@ language: {%- for lang in languages %} - {{ lang }} {%- endfor %} +{%- if languages_bcp47 %} +language_bcp47: +{%- for lang in languages_bcp47 %} + - {{ lang }} +{%- endfor %} +{%- endif %} tags: {%- for tag in tags %} - {{ tag }} @@ -45,6 +51,8 @@ on {{ validation.date }}. | {{ q.name }} | [{{ q.filename }}](https://huggingface.co/{{ target_repo }}/resolve/main/{{ q.filename }}) | {{ q.size }} | {{ q.wer | default("-") }}{% if wer.source2 is defined %} | {{ q.wer2 | default("-") }}{% endif %} | {%- endfor %} +{{ wer.recipe }} + {{ wer.notes }} ## Usage diff --git a/scripts/hf_cards/voxtral-mini-3b-2507.yaml b/scripts/hf_cards/voxtral-mini-3b-2507.yaml index 6fa67a2b..e8823519 100644 --- a/scripts/hf_cards/voxtral-mini-3b-2507.yaml +++ b/scripts/hf_cards/voxtral-mini-3b-2507.yaml @@ -35,10 +35,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with - the Whisper English text normalizer, batch size 8 on an NVIDIA L40S. - Same-machine HuggingFace transformers reference - (VoxtralForConditionalGeneration, BF16, attn_implementation=eager, greedy): - 1.87%; the BF16 GGUF matches within rounding. The BF16-vs-reference parity is - the family's tensor-level numerical gate — 43 checkpointed tensors within - tolerance, transcript byte-exact. + Scored with the Whisper English text normalizer on an NVIDIA L40S. Same-machine + HuggingFace transformers reference (VoxtralForConditionalGeneration, BF16, + attn_implementation=eager, greedy): 1.87%; the BF16 GGUF matches within rounding. + The BF16-vs-reference parity is the family's tensor-level numerical gate — 43 + checkpointed tensors within tolerance, transcript byte-exact. diff --git a/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml b/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml index 3b77e0b6..1c95d79a 100644 --- a/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml +++ b/scripts/hf_cards/voxtral-mini-4b-realtime-2602.yaml @@ -38,12 +38,10 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with - the Whisper English text normalizer, offline path at delay 6, batch size 8 - on an NVIDIA L40S. A delay-30 remeasurement is pending. Same-machine - HuggingFace transformers reference - (VoxtralRealtimeForConditionalGeneration, BF16, greedy): 2.08%; the BF16 GGUF - matches at 2.08%. Every shipped quant stays within bootstrap noise - (2.07-2.09%), so the quantization ladder is WER-neutral down to Q4_K_M. The - model is multilingual (13 languages, auto-detect); the published WER is - English only. + Scored with the Whisper English text normalizer, offline path at delay 6, on an + NVIDIA L40S. A delay-30 remeasurement is pending. Same-machine HuggingFace + transformers reference (VoxtralRealtimeForConditionalGeneration, BF16, greedy): + 2.08%; the BF16 GGUF matches at 2.08%. Every shipped quant stays within bootstrap + noise (2.07-2.09%), so the quantization ladder is WER-neutral down to Q4_K_M. The + model is multilingual (13 languages, auto-detect); the published WER is English + only. diff --git a/scripts/hf_cards/voxtral-small-24b-2507.yaml b/scripts/hf_cards/voxtral-small-24b-2507.yaml index 065fd934..a5639441 100644 --- a/scripts/hf_cards/voxtral-small-24b-2507.yaml +++ b/scripts/hf_cards/voxtral-small-24b-2507.yaml @@ -33,10 +33,9 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with - the Whisper English text normalizer, greedy decoding, batch size 8 on an - NVIDIA A100 80 GB. Same-machine HuggingFace transformers reference - (VoxtralForConditionalGeneration, BF16, greedy): 1.57%; the BF16 GGUF matches - at 1.56%. Validation for this variant is end-to-end by WER — the family's - tensor-level numerical parity is established by the Voxtral Mini 3B sibling - (identical architecture). + Greedy decoding scored with the Whisper English text normalizer on an NVIDIA A100 80 + GB. Same-machine HuggingFace transformers reference + (VoxtralForConditionalGeneration, BF16, greedy): 1.57%; the BF16 GGUF matches at + 1.56%. Validation for this variant is end-to-end by WER — the family's tensor-level + numerical parity is established by the Voxtral Mini 3B sibling (identical + architecture). diff --git a/scripts/hf_cards/whisper-base.en.yaml b/scripts/hf_cards/whisper-base.en.yaml index 04784d03..7d355f48 100644 --- a/scripts/hf_cards/whisper-base.en.yaml +++ b/scripts/hf_cards/whisper-base.en.yaml @@ -7,8 +7,8 @@ pin_date: 2026-04-25 validation: reference: transformers - commit: 5.6.1 - date: 2026-04-26 + commit: 0a26478 + date: 2026-09-13 pipeline_tag: automatic-speech-recognition tags: @@ -26,4 +26,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 4.25%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + OpenAI's self-reported number on the same split is 4.25%. Both are + short-form WER decoded without timestamps; OpenAI does not publish its exact + evaluation configuration, so small differences are expected. Single-run + figures: GPU reductions can shift corpus WER by about 0.1pp between runs, + mostly on short-clip hallucination outcomes at the noise floor. diff --git a/scripts/hf_cards/whisper-base.yaml b/scripts/hf_cards/whisper-base.yaml index 7f4ef0f5..22985801 100644 --- a/scripts/hf_cards/whisper-base.yaml +++ b/scripts/hf_cards/whisper-base.yaml @@ -7,8 +7,8 @@ pin_date: 2026-04-25 validation: reference: transformers - commit: 5.6.1 - date: 2026-04-26 + commit: 0a26478 + date: 2026-09-13 pipeline_tag: automatic-speech-recognition tags: @@ -25,4 +25,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.009%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + OpenAI's self-reported number on the same split is 5.009%. Both are + short-form WER decoded without timestamps; OpenAI does not publish its exact + evaluation configuration, so small differences are expected. Single-run + figures: GPU reductions can shift corpus WER by about 0.1pp between runs, + mostly on short-clip hallucination outcomes at the noise floor. diff --git a/scripts/hf_cards/whisper-large-v2.yaml b/scripts/hf_cards/whisper-large-v2.yaml index 81d672c4..d04a4717 100644 --- a/scripts/hf_cards/whisper-large-v2.yaml +++ b/scripts/hf_cards/whisper-large-v2.yaml @@ -7,8 +7,8 @@ pin_date: 2026-04-25 validation: reference: transformers - commit: 5.6.1 - date: 2026-04-26 + commit: 0a26478 + date: 2026-09-13 pipeline_tag: automatic-speech-recognition tags: @@ -25,4 +25,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.83%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + OpenAI's self-reported number on the same split is 2.83%. Both are + short-form WER decoded without timestamps; OpenAI does not publish its exact + evaluation configuration, so small differences are expected. Single-run + figures: GPU reductions can shift corpus WER by about 0.1pp between runs, + mostly on short-clip hallucination outcomes at the noise floor. diff --git a/scripts/hf_cards/whisper-large-v3-turbo.yaml b/scripts/hf_cards/whisper-large-v3-turbo.yaml index bb44f736..a0f856f9 100644 --- a/scripts/hf_cards/whisper-large-v3-turbo.yaml +++ b/scripts/hf_cards/whisper-large-v3-turbo.yaml @@ -25,4 +25,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.10%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + OpenAI's self-reported number on the same split is 2.10%. Both are + short-form WER decoded without timestamps; OpenAI does not publish its exact + evaluation configuration, so small differences are expected. Single-run + figures: GPU reductions can shift corpus WER by about 0.1pp between runs, + mostly on short-clip hallucination outcomes at the noise floor. diff --git a/scripts/hf_cards/whisper-large-v3.yaml b/scripts/hf_cards/whisper-large-v3.yaml index 36ea8a0a..55d3ba5c 100644 --- a/scripts/hf_cards/whisper-large-v3.yaml +++ b/scripts/hf_cards/whisper-large-v3.yaml @@ -25,4 +25,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.01%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + OpenAI's self-reported number on the same split is 2.01%. Both are + short-form WER decoded without timestamps; OpenAI does not publish its exact + evaluation configuration, so small differences are expected. Single-run + figures: GPU reductions can shift corpus WER by about 0.1pp between runs, + mostly on short-clip hallucination outcomes at the noise floor. diff --git a/scripts/hf_cards/whisper-large.yaml b/scripts/hf_cards/whisper-large.yaml index 9598884c..ab2dae9f 100644 --- a/scripts/hf_cards/whisper-large.yaml +++ b/scripts/hf_cards/whisper-large.yaml @@ -7,8 +7,8 @@ pin_date: 2026-04-25 validation: reference: transformers - commit: 5.6.1 - date: 2026-04-26 + commit: 0a26478 + date: 2026-09-13 pipeline_tag: automatic-speech-recognition tags: @@ -25,4 +25,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.73%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + OpenAI's self-reported number on the same split is 2.73%. Both are + short-form WER decoded without timestamps; OpenAI does not publish its exact + evaluation configuration, so small differences are expected. Single-run + figures: GPU reductions can shift corpus WER by about 0.1pp between runs, + mostly on short-clip hallucination outcomes at the noise floor. diff --git a/scripts/hf_cards/whisper-medium.en.yaml b/scripts/hf_cards/whisper-medium.en.yaml index 7b957b73..3aa870b6 100644 --- a/scripts/hf_cards/whisper-medium.en.yaml +++ b/scripts/hf_cards/whisper-medium.en.yaml @@ -7,8 +7,8 @@ pin_date: 2026-04-25 validation: reference: transformers - commit: 5.6.1 - date: 2026-04-26 + commit: 0a26478 + date: 2026-09-13 pipeline_tag: automatic-speech-recognition tags: @@ -26,4 +26,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.02%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + OpenAI's self-reported number on the same split is 3.02%. Both are + short-form WER decoded without timestamps; OpenAI does not publish its exact + evaluation configuration, so small differences are expected. Single-run + figures: GPU reductions can shift corpus WER by about 0.1pp between runs, + mostly on short-clip hallucination outcomes at the noise floor. diff --git a/scripts/hf_cards/whisper-medium.yaml b/scripts/hf_cards/whisper-medium.yaml index 43d88ed7..a310649e 100644 --- a/scripts/hf_cards/whisper-medium.yaml +++ b/scripts/hf_cards/whisper-medium.yaml @@ -7,8 +7,8 @@ pin_date: 2026-04-25 validation: reference: transformers - commit: 5.6.1 - date: 2026-04-26 + commit: 0a26478 + date: 2026-09-13 pipeline_tag: automatic-speech-recognition tags: @@ -25,4 +25,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 2.90%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + OpenAI's self-reported number on the same split is 2.90%. Both are + short-form WER decoded without timestamps; OpenAI does not publish its exact + evaluation configuration, so small differences are expected. Single-run + figures: GPU reductions can shift corpus WER by about 0.1pp between runs, + mostly on short-clip hallucination outcomes at the noise floor. diff --git a/scripts/hf_cards/whisper-small.en.yaml b/scripts/hf_cards/whisper-small.en.yaml index f8899d79..339816b9 100644 --- a/scripts/hf_cards/whisper-small.en.yaml +++ b/scripts/hf_cards/whisper-small.en.yaml @@ -7,8 +7,8 @@ pin_date: 2026-04-25 validation: reference: transformers - commit: 5.6.1 - date: 2026-04-26 + commit: 0a26478 + date: 2026-09-13 pipeline_tag: automatic-speech-recognition tags: @@ -26,4 +26,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.05%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + OpenAI's self-reported number on the same split is 3.05%. Both are + short-form WER decoded without timestamps; OpenAI does not publish its exact + evaluation configuration, so small differences are expected. Single-run + figures: GPU reductions can shift corpus WER by about 0.1pp between runs, + mostly on short-clip hallucination outcomes at the noise floor. diff --git a/scripts/hf_cards/whisper-small.yaml b/scripts/hf_cards/whisper-small.yaml index b8cca55f..61a5f29b 100644 --- a/scripts/hf_cards/whisper-small.yaml +++ b/scripts/hf_cards/whisper-small.yaml @@ -25,4 +25,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 3.432%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + OpenAI's self-reported number on the same split is 3.432%. Both are + short-form WER decoded without timestamps; OpenAI does not publish its exact + evaluation configuration, so small differences are expected. Single-run + figures: GPU reductions can shift corpus WER by about 0.1pp between runs, + mostly on short-clip hallucination outcomes at the noise floor. diff --git a/scripts/hf_cards/whisper-tiny.en.yaml b/scripts/hf_cards/whisper-tiny.en.yaml index 7f3af33f..3d8b4063 100644 --- a/scripts/hf_cards/whisper-tiny.en.yaml +++ b/scripts/hf_cards/whisper-tiny.en.yaml @@ -7,8 +7,8 @@ pin_date: 2026-04-25 validation: reference: transformers - commit: 5.6.1 - date: 2026-04-26 + commit: 0a26478 + date: 2026-09-13 pipeline_tag: automatic-speech-recognition tags: @@ -26,4 +26,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 5.66%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + OpenAI's self-reported number on the same split is 5.66%. Both are + short-form WER decoded without timestamps; OpenAI does not publish its exact + evaluation configuration, so small differences are expected. Single-run + figures: GPU reductions can shift corpus WER by about 0.1pp between runs, + mostly on short-clip hallucination outcomes at the noise floor. diff --git a/scripts/hf_cards/whisper-tiny.yaml b/scripts/hf_cards/whisper-tiny.yaml index 8d1eed3b..dec2ad12 100644 --- a/scripts/hf_cards/whisper-tiny.yaml +++ b/scripts/hf_cards/whisper-tiny.yaml @@ -7,8 +7,8 @@ pin_date: 2026-04-25 validation: reference: transformers - commit: 5.6.1 - date: 2026-04-26 + commit: 0a26478 + date: 2026-09-13 pipeline_tag: automatic-speech-recognition tags: @@ -25,4 +25,8 @@ summary: | wer: source: LibriSpeech test-clean notes: | - WER measured on the full LibriSpeech test-clean split (2620 utterances) with the transcribe.cpp default decode (greedy, suppress_tokens, temperature fallback, segment timestamps enabled). OpenAI's self-reported number on the same split is 7.54%. We don't know upstream's exact eval config, but the most likely cause of any divergence is that OpenAI's `model.generate()` defaults to `<|notimestamps|>` while transcribe.cpp's pipeline runs with timestamps enabled. Numbers come from a single Metal-backed run; Metal's non-deterministic parallel reductions can shift corpus WER by ~0.1pp between runs, mostly driven by short-clip hallucination outcomes on the noise floor. + OpenAI's self-reported number on the same split is 7.54%. Both are + short-form WER decoded without timestamps; OpenAI does not publish its exact + evaluation configuration, so small differences are expected. Single-run + figures: GPU reductions can shift corpus WER by about 0.1pp between runs, + mostly on short-clip hallucination outcomes at the noise floor. diff --git a/scripts/wer/languages.py b/scripts/wer/languages.py index d7816058..064c0bd5 100644 --- a/scripts/wer/languages.py +++ b/scripts/wer/languages.py @@ -55,3 +55,8 @@ # words in FLEURS. Khmer/Lao/Burmese spaces are phrase separators rather than # dependable word boundaries, so WER would mostly measure orthography policy. CER_LANGUAGES = {"zh", "yue", "ja", "ko", "th", "km", "lo", "my"} + +# Model-side spellings that name the same language as a dataset code. A +# language hint is checked against the manifest through this map, so a model +# that prompts with Whisper's legacy `jw` can be scored on FLEURS `jv`. +LANGUAGE_ALIASES = {"jw": "jv", "tl": "fil", "no": "nb", "zh-cn": "zh"} diff --git a/scripts/wer/remote/modal_sweep.py b/scripts/wer/remote/modal_sweep.py index 7dd50949..34cb4025 100644 --- a/scripts/wer/remote/modal_sweep.py +++ b/scripts/wer/remote/modal_sweep.py @@ -860,6 +860,93 @@ def runner( # Local entrypoints. # --------------------------------------------------------------------------- +def _dispatch(cells: list[dict], gpu: str, *, clean: bool = False, n_utts: int = -1, + sort_by_length: bool = True, stream_chunk_ms: int = 0, + stream_att_right: int = -1) -> tuple[list[tuple], list[tuple]]: + """Run every cell at once on one GPU class and collect the results. + + A cell is {repo, file, dataset, bs, language, timestamps, + publication_profile, backend}. The binary is built once, every distinct + dataset is prefetched in parallel, then one container per cell is + spawned up front, so wall time is the slowest cell rather than the sum of + per-dataset rounds. Each hypothesis file is written the moment its cell + finishes. + """ + runner = _GPU_FNS.get(gpu) + if runner is None: + raise SystemExit(f"--gpu {gpu!r} not registered; choose one of: {sorted(_GPU_FNS)}") + repo_root = pathlib.Path(REPO) + arch = GPU_TO_ARCH[gpu] + build_dir = _build_dir(gpu) + print(f">>> build (arch sm_{arch} -> {build_dir})") + build.remote(arch=arch, build_dir=build_dir, clean=clean) + + datasets = sorted({c["dataset"] for c in cells}) + print(f">>> prefetch {len(datasets)} dataset(s) in parallel") + status_futs = {d: prefetch_dataset.spawn(d) for d in datasets} + statuses = {} + for d, fut in status_futs.items(): + statuses[d] = fut.get() + print(f">>> dataset ready: {statuses[d]['dataset_id']} " + f"n={statuses[d]['utterances']} sha={statuses[d]['manifest_sha256'][:12]}") + + print(f">>> launching {len(cells)} {gpu} containers in parallel...") + n = None if n_utts < 0 else n_utts + engine_sha = _local_engine_sha() + futs = [(c, runner.spawn(c["repo"], c["file"], c["dataset"], n, + c["bs"], sort_by_length, build_dir, c["timestamps"], + c.get("language", ""), stream_chunk_ms, stream_att_right, + statuses[c["dataset"]], engine_sha, + c.get("publication_profile", ""), c.get("backend", ""))) + for c in cells] + + rows, failures = [], [] + for c, fut in futs: + bs = c["bs"] + slug = c["file"].replace(".gguf", "") + (f" b{bs}" if bs != 1 else "") + try: + res = fut.get() + # b1 stays untagged (matches the published-run filenames); b>1 is + # tagged .b{bs} so batched hyps score independently for comparison. + path = write_hyp(repo_root, res["hyp_jsonl"], c["file"], c["dataset"], + batch_size=(bs if bs != 1 else None), + timestamps=c["timestamps"], + stream_chunk_ms=stream_chunk_ms, + stream_att_right=stream_att_right) + s = res["summary"] + rows.append((slug, c["dataset"], s["n_utts"], s["audio_s"], + s["wall_s"], s["rtf_wall"], str(path))) + tag = "CACHED" if res.get("cached") else "OK" + print(f" [{tag}] {slug} {c['dataset']}: {s['wall_s']:.1f}s, " + f"RTF {s['rtf_wall']:.1f}x -> {path}") + except Exception as e: # noqa: BLE001 - one cell's failure must not hide the rest + failures.append((slug, c["dataset"], repr(e))) + print(f" [FAIL] {slug} {c['dataset']}: {e} (check Modal dashboard for stderr)") + + for ds in datasets: + ds_rows = [r for r in rows if r[1] == ds] + if not ds_rows: + continue + summary_path = repo_root / "reports" / "wer" / f"remote_sweep.{dataset_id(ds)}.summary.tsv" + with open(summary_path, "w") as f: + f.write("slug\tdataset\tn_utts\taudio_s\twall_s\trtf\tpath\n") + for r in ds_rows: + f.write("\t".join(str(x) for x in r) + "\n") + + print("\n========== sweep summary ==========") + print(f"{'slug':<48} {'dataset':<24} {'n':>5} {'audio':>9} {'wall':>8} {'rtf':>6}") + for slug, ds, n_, audio, wall, rtf, _ in rows: + print(f"{slug:<48} {ds:<24} {n_:>5} {audio:>9.1f} {wall:>8.1f} {rtf:>6.1f}") + if failures: + print("\nfailures:") + for slug, ds, err in failures: + print(f" {slug} {ds}: {err}") + ids = sorted({dataset_id(d) for d in datasets}) + print("\nscore locally: for f in reports/wer/*.{" + ",".join(ids) + "}.jsonl; " + "do uv run scripts/wer/score.py \"$f\"; done") + return rows, failures + + @app.local_entrypoint() def sweep( models: str, @@ -877,12 +964,12 @@ def sweep( publication_profile: str = "", backend: str = "", ) -> None: - """Fan WER across one or more models on one GPU class. + """Fan WER across one or more models on one dataset and GPU class. - --models Comma-separated. Each entry is either an hf_card slug - (e.g. "moonshine-base" → scripts/hf_cards/moonshine-base.yaml) + --models Comma-separated. Each entry is either a catalog variant + (e.g. "moonshine-base" -> catalog/moonshine-base.json) or a HF repo path (e.g. "handy-computer/foo-gguf"). - Slugs pin the quant set; repo paths discover via HF API. + Variants pin the quant set; repo paths discover via HF API. --dataset "librispeech:test-clean" (default), "librispeech:", or "fleurs:". --quants Optional substring filter, e.g. "Q8_0,F16". @@ -908,10 +995,8 @@ def sweep( repo_root = pathlib.Path(REPO) resolved = [(s, *resolve_model(repo_root, s)) for s in specs] - needs_listing = sorted({repo for _, repo, fns in resolved if fns is None}) listings = dict(list_ggufs.remote(needs_listing)) if needs_listing else {} - sizes = [int(x) for x in batch_sizes.split(",") if x.strip()] or [1] cells: list[dict] = [] @@ -929,8 +1014,10 @@ def sweep( continue for f in fns: for bs in sizes: - cells.append({"repo": repo, "file": f, "dataset": dataset, "bs": bs}) - + cells.append({"repo": repo, "file": f, "dataset": dataset, "bs": bs, + "language": language, "timestamps": timestamps, + "publication_profile": publication_profile, + "backend": backend}) if skipped: print(">>> skipped (no cells generated):") for s, r in skipped: @@ -938,76 +1025,8 @@ def sweep( print(f">>> {len(cells)} cells to run") if not cells: raise SystemExit("nothing to do") - - runner = _GPU_FNS.get(gpu) - if runner is None: - raise SystemExit( - f"--gpu {gpu!r} not registered; choose one of: {sorted(_GPU_FNS)}" - ) - - arch = GPU_TO_ARCH[gpu] - build_dir = _build_dir(gpu) - print(f">>> build (arch sm_{arch} -> {build_dir})") - build.remote(arch=arch, build_dir=build_dir, clean=clean) - print(f">>> prefetch dataset ({dataset})") - dataset_status = prefetch_dataset.remote(dataset) - print(f">>> dataset ready: {dataset_status['dataset_id']} " - f"n={dataset_status['utterances']} " - f"sha={dataset_status['manifest_sha256'][:12]}") - - print(f">>> launching {len(cells)} {gpu} containers in parallel...") - n = None if n_utts < 0 else n_utts - futs = [(c, runner.spawn(c["repo"], c["file"], c["dataset"], n, - c["bs"], sort_by_length, build_dir, timestamps, - language, stream_chunk_ms, stream_att_right, - dataset_status, _local_engine_sha(), - publication_profile, backend)) - for c in cells] - - rows, failures = [], [] - for c, fut in futs: - bs = c["bs"] - slug = c["file"].replace(".gguf", "") + (f" b{bs}" if bs != 1 else "") - try: - res = fut.get() - # b1 stays untagged (matches the published-run filenames); b>1 is - # tagged .b{bs} so batched hyps score independently for comparison. - p = write_hyp(repo_root, res["hyp_jsonl"], c["file"], c["dataset"], - batch_size=(bs if bs != 1 else None), - timestamps=timestamps, - stream_chunk_ms=stream_chunk_ms, - stream_att_right=stream_att_right) - s = res["summary"] - rows.append((slug, c["dataset"], s["n_utts"], s["audio_s"], - s["wall_s"], s["rtf_wall"], str(p))) - tag = "CACHED" if res.get("cached") else "OK" - print(f" [{tag}] {slug}: {s['wall_s']:.1f}s, RTF {s['rtf_wall']:.1f}x -> {p}") - except Exception as e: - failures.append((slug, repr(e))) - print(f" [FAIL] {slug}: {e} (check Modal dashboard for stderr)") - - if rows: - ds_id = dataset_id(dataset) - summary_path = pathlib.Path(REPO) / "reports" / "wer" / \ - f"remote_sweep.{ds_id}.summary.tsv" - with open(summary_path, "w") as f: - f.write("slug\tdataset\tn_utts\taudio_s\twall_s\trtf\tpath\n") - for r in rows: - f.write("\t".join(str(x) for x in r) + "\n") - print(f"\nsummary: {summary_path}") - - print("\n========== sweep summary ==========") - print(f"{'slug':<48} {'dataset':<24} {'n':>5} {'audio':>9} {'wall':>8} {'rtf':>6}") - for slug, ds, n_, audio, wall, rtf, _ in rows: - print(f"{slug:<48} {ds:<24} {n_:>5} {audio:>9.1f} {wall:>8.1f} {rtf:>6.1f}") - if failures: - print("\nfailures:") - for slug, err in failures: - print(f" {slug}: {err}") - if skipped: - print(f"\nskipped: {len(skipped)} entries (listed at config time above)") - print(f"\nscore locally: for f in reports/wer/*.{dataset_id(dataset)}.jsonl; " - f"do uv run scripts/wer/score.py \"$f\"; done") + _dispatch(cells, gpu, clean=clean, n_utts=n_utts, sort_by_length=sort_by_length, + stream_chunk_ms=stream_chunk_ms, stream_att_right=stream_att_right) @app.local_entrypoint() @@ -1018,12 +1037,11 @@ def publication_sweep( clean: bool = False, plan_only: bool = False, ) -> None: - """Run the accuracy matrix selected by a catalog publication profile. + """Run every accuracy cell a catalog publication profile still needs. - Unlike the low-level sweep entrypoint, datasets, quants, batch sizes, - timestamps, language prompts, and GPU are derived from one checked-in - policy. Cells are grouped where possible and delegated to sweep(), which - remains the sole remote execution implementation. + Datasets, quants, batch size, timestamps, language prompts, and GPU come + from the checked-in profile. Every cell across every dataset is planned + up front and dispatched at once, one container each. """ profile_id, profile_data = benchmark_profiles.load_profile(profile or None) records = catalog_common.load_records() @@ -1034,73 +1052,47 @@ def publication_sweep( if not selected: raise SystemExit("--models is required (comma-separated catalog variants)") - # First collect all required quants for one model/dataset invocation. - invocations: dict[tuple, set[str]] = {} + by_gpu: dict[str, list[dict]] = {} for variant in selected: record = records[variant] + repo = record.get("published_repo") + if not repo: + raise SystemExit(f"{variant}: catalog has no published_repo") + files = {d["quant"]: d["filename"] for d in record.get("downloads", [])} expected = benchmark_profiles.apply_exceptions( record, "accuracy", benchmark_profiles.expected_accuracy(record, profile_data)) - valid = { - benchmark_profiles.cell_key(row, "accuracy") - for row in record.get("accuracy_benchmarks", []) - if row.get("engine_sha") - } - legacy = { - benchmark_profiles.accuracy_core_key(row) - for row in record.get("accuracy_benchmarks", []) - if row.get("measurement_provenance") == "legacy-published" - } + valid = {benchmark_profiles.profile_key(row) + for row in record.get("accuracy_benchmarks", []) if row.get("engine_sha")} + legacy = {benchmark_profiles.accuracy_core_key(row) + for row in record.get("accuracy_benchmarks", []) + if row.get("measurement_provenance") == "legacy-published"} for cell in expected: - if missing_only and ( - benchmark_profiles.cell_key(cell, "accuracy") in valid - or benchmark_profiles.accuracy_core_key(cell) in legacy): + if missing_only and (benchmark_profiles.profile_key(cell) in valid + or benchmark_profiles.accuracy_core_key(cell) in legacy): continue - key = ( - variant, - benchmark_profiles.dataset_spec(cell), - cell["runtime_language"], - cell["batch_size"], - cell["sort_by_length"], - cell["timestamps"], - cell["gpu"], - cell["backend"], - ) - invocations.setdefault(key, set()).add(cell["quant"]) - - # Then combine models whose complete invocation recipe and missing quant - # set are identical. FLEURS commonly collapses dozens of model cells into - # one Modal sweep per language. - grouped: dict[tuple, list[str]] = {} - for key, quants in invocations.items(): - variant, dataset, language, batch_size, sort, timestamps, gpu, backend = key - group_key = (dataset, language, batch_size, sort, timestamps, gpu, backend, - tuple(sorted(quants))) - grouped.setdefault(group_key, []).append(variant) - - print(f"publication profile {profile_id}: {len(invocations)} model/dataset " - f"invocation(s), grouped into {len(grouped)} Modal sweep(s)") - for index, (key, variants) in enumerate(sorted(grouped.items()), 1): - dataset, language, batch_size, sort, timestamps, gpu, backend, quants = key - print(f" [{index}/{len(grouped)}] {dataset} language={language} " - f"batch={batch_size} gpu={gpu}/{backend} quants={','.join(quants)} " - f"models={','.join(sorted(variants))}") - if plan_only: - continue - sweep( - models=",".join(sorted(variants)), - dataset=dataset, - quants=",".join(quants), - gpu=gpu, - n_utts=-1, - clean=clean and index == 1, - batch_sizes=str(batch_size), - sort_by_length=sort, - timestamps=timestamps, - language=language, - publication_profile=profile_id, - backend=backend, - ) + by_gpu.setdefault(cell["gpu"], []).append({ + "repo": repo, "file": files[cell["quant"]], + "dataset": benchmark_profiles.dataset_spec(cell), + "bs": cell["batch_size"], "language": cell["runtime_language"], + "timestamps": cell["timestamps"], "publication_profile": profile_id, + "backend": cell["backend"], "_variant": variant, + "_sort": cell["sort_by_length"], + }) + + total = sum(len(cells) for cells in by_gpu.values()) + print(f"publication profile {profile_id}: {total} cell(s) across " + f"{len({c['dataset'] for cells in by_gpu.values() for c in cells})} dataset(s), " + f"{len(by_gpu)} GPU class(es)") + for gpu, cells in sorted(by_gpu.items()): + for c in cells: + print(f" {gpu}: {c['_variant']:40s} {c['dataset']:22s} {c['file']} " + f"lang={c['language']} bs={c['bs']} ts={c['timestamps']}") + if plan_only or not total: + return + for gpu, cells in sorted(by_gpu.items()): + sorts = {c["_sort"] for c in cells} + _dispatch(cells, gpu, clean=clean, sort_by_length=all(sorts)) @app.local_entrypoint() diff --git a/scripts/wer/run.py b/scripts/wer/run.py index da8a2ba0..d39399d2 100644 --- a/scripts/wer/run.py +++ b/scripts/wer/run.py @@ -81,11 +81,13 @@ sys.path.insert(0, str(REMOTE_HELPERS)) from dataset_specs import ( # noqa: E402 + default_language_for, ingest_args_for, local_manifest_path_for, parse_dataset_spec, ) +from languages import LANGUAGE_ALIASES # noqa: E402 def read_stderr_tail(path: str, max_lines: int = 50, max_bytes: int = 65536) -> str: @@ -317,7 +319,10 @@ def main() -> int: # models like nemotron-3.5-asr-streaming-0.6b require because their # caps.languages list carries only the BCP-47 long forms. def _primary(tag: str) -> str: - return tag.split("-", 1)[0].lower() if tag else tag + if not tag: + return tag + primary = tag.split("-", 1)[0].lower() + return LANGUAGE_ALIASES.get(tag.lower(), LANGUAGE_ALIASES.get(primary, primary)) manifest_langs = { e["language"] for e in manifest if e.get("language") } From 3d7b4e2a9eff058c008c2292c05de373097c68b8 Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sun, 13 Sep 2026 22:07:40 -0700 Subject: [PATCH 14/24] Ingest Ryzen publication bench, waive moonshine dots cells Fold the 4750U publication sweep into the catalog: 245 profile-stamped cells, 137 of them replacing legacy rows that carried a rounded xRT and no stage timings. Ryzen legacy rows drop from 176 to 39. Rows last measured in April and May move 50-90% faster, which is the optimization work since landing rather than a measurement change, so they go in with --force. The moonshine language fine-tunes waive their dots cell. Fed 35 s of out-of-language audio they degenerate into a repetition loop, never emit end-of-stream, and decode hits the 194-token position cap, so the cell times a loop and the bench binary exits non-zero. Their published dots rows were hand-written round numbers; drop them with the requirement, since a waived cell with a row present is an extra. scripts/bench/run.py built its candidate matrix from the profile's top-level samples only, so a family that overrides them (gigaam benches a Russian clip) matched nothing and every variant was silently skipped with exit 0. Union the override samples in before the per-variant filter. Document scripts/catalog/new_record.py as Step 0 of porting-6, the first stage that writes to the catalog, and correct the stale instruction there to transcribe bench numbers into the doc and the card by hand. --- .claude/skills/porting-5-quants/SKILL.md | 3 ++ .claude/skills/porting-6-bench/SKILL.md | 36 ++++++++++++++-- catalog/_schema.json | 3 +- catalog/breeze-asr-25.json | 18 ++++---- catalog/canary-qwen-2.5b.json | 2 +- catalog/cohere-transcribe-03-2026.json | 16 +++---- catalog/cohere-transcribe-arabic-07-2026.json | 16 +++---- catalog/fun-asr-mlt-nano-2512.json | 6 ++- catalog/fun-asr-nano-2512.json | 22 +++++----- catalog/medasr.json | 4 +- catalog/moonshine-base-ar.json | 9 ++-- catalog/moonshine-base-ja.json | 11 +++-- catalog/moonshine-base-ko.json | 11 +++-- catalog/moonshine-base-uk.json | 11 +++-- catalog/moonshine-base-vi.json | 11 +++-- catalog/moonshine-base-zh.json | 11 +++-- catalog/moonshine-base.json | 8 ++-- catalog/moonshine-streaming-medium.json | 8 ++-- catalog/moonshine-tiny-ar.json | 11 +++-- catalog/moonshine-tiny-ja.json | 9 ++-- catalog/moonshine-tiny-ko.json | 11 +++-- catalog/moonshine-tiny-uk.json | 11 +++-- catalog/moonshine-tiny-vi.json | 11 +++-- catalog/moonshine-tiny-zh.json | 11 +++-- catalog/moonshine-tiny.json | 8 ++-- catalog/moss-transcribe-diarize.json | 16 +++---- catalog/nemotron-3.5-asr-streaming-0.6b.json | 16 +++---- .../nemotron-speech-streaming-en-0.6b.json | 16 +++---- catalog/parakeet-primeline.json | 16 +++---- catalog/parakeet-rnnt-0.6b.json | 16 +++---- catalog/parakeet-tdt-0.6b-v2.json | 16 +++---- catalog/parakeet-tdt-0.6b-v3.json | 16 +++---- catalog/parakeet-tdt-1.1b.json | 16 +++---- catalog/parakeet-tdt_ctc-1.1b.json | 16 +++---- catalog/qwen3-asr-0.6b.json | 2 +- catalog/qwen3-asr-1.7b.json | 2 +- catalog/sensevoice-small.json | 6 ++- catalog/voxtral-mini-3b-2507.json | 16 +++---- catalog/voxtral-mini-4b-realtime-2602.json | 16 +++---- catalog/whisper-base.en.json | 16 +++---- catalog/whisper-base.json | 16 +++---- catalog/whisper-large-v2.json | 16 +++---- catalog/whisper-large-v3.json | 16 +++---- catalog/whisper-large.json | 16 +++---- catalog/whisper-medium.en.json | 16 +++---- catalog/whisper-medium.json | 16 +++---- catalog/whisper-small.en.json | 16 +++---- catalog/whisper-small.json | 16 +++---- catalog/whisper-tiny.en.json | 16 +++---- catalog/whisper-tiny.json | 16 +++---- docs/models/canary-180m-flash.md | 13 +++--- docs/models/canary-1b-flash.md | 6 +-- docs/models/canary-1b-v2.md | 6 +-- docs/models/canary-1b.md | 6 +-- docs/models/canary-qwen-2.5b.md | 27 +++++------- docs/models/cohere-transcribe-03-2026.md | 25 ++++++----- .../cohere-transcribe-arabic-07-2026.md | 22 +++++----- .../diar_streaming_sortformer_4spk-v2.1.md | 9 ++-- docs/models/fun-asr-mlt-nano-2512.md | 17 +++----- docs/models/fun-asr-nano-2512.md | 29 ++++++------- docs/models/gigaam-v3-ctc.md | 6 +-- docs/models/gigaam-v3-e2e-ctc.md | 6 +-- docs/models/gigaam-v3-e2e-rnnt.md | 6 +-- docs/models/gigaam-v3-rnnt.md | 6 +-- docs/models/granite-4.0-1b-speech.md | 6 +-- docs/models/granite-speech-4.1-2b-nar.md | 10 +++-- docs/models/granite-speech-4.1-2b-plus.md | 6 +-- docs/models/granite-speech-4.1-2b.md | 6 +-- .../granite-speech-5.0-470m-turboctc-nc.md | 3 +- .../granite-speech-5.0-470m-turboctc.md | 3 +- docs/models/medasr.md | 6 ++- docs/models/moonshine-base.md | 12 +++--- docs/models/moonshine-streaming-medium.md | 21 +++++---- docs/models/moonshine-streaming-small.md | 9 ++-- docs/models/moonshine-streaming-tiny.md | 11 +++-- docs/models/moonshine-tiny.md | 12 +++--- docs/models/moss-transcribe-diarize.md | 35 ++++++++------- .../multitalker-parakeet-streaming-0.6b-v1.md | 7 ++- .../models/nemotron-3.5-asr-streaming-0.6b.md | 19 ++++---- .../nemotron-speech-streaming-en-0.6b.md | 19 ++++---- docs/models/parakeet-ctc-0.6b.md | 6 +-- docs/models/parakeet-ctc-1.1b.md | 6 +-- docs/models/parakeet-primeline.md | 6 +-- docs/models/parakeet-rnnt-0.6b.md | 18 ++++---- docs/models/parakeet-rnnt-1.1b.md | 6 +-- docs/models/parakeet-tdt-0.6b-v2.md | 21 +++++---- docs/models/parakeet-tdt-0.6b-v3.md | 21 +++++---- docs/models/parakeet-tdt-1.1b.md | 18 ++++---- docs/models/parakeet-tdt_ctc-1.1b.md | 18 ++++---- docs/models/parakeet-tdt_ctc-110m.md | 6 +-- docs/models/parakeet-unified-en-0.6b.md | 6 +-- docs/models/qwen3-asr-0.6b.md | 20 ++++----- docs/models/qwen3-asr-1.7b.md | 10 +++-- docs/models/sensevoice-small.md | 20 ++++----- docs/models/voxtral-mini-3b-2507.md | 18 ++++---- docs/models/voxtral-realtime.md | 24 ++++++----- docs/models/voxtral-small-24b-2507.md | 6 +-- docs/models/whisper-base.en.md | 12 +++--- docs/models/whisper-base.md | 12 +++--- docs/models/whisper-large-v2.md | 12 +++--- docs/models/whisper-large-v3.md | 12 +++--- docs/models/whisper-large.md | 12 +++--- docs/models/whisper-medium.en.md | 12 +++--- docs/models/whisper-medium.md | 12 +++--- docs/models/whisper-small.en.md | 12 +++--- docs/models/whisper-small.md | 12 +++--- docs/models/whisper-tiny.en.md | 12 +++--- docs/models/whisper-tiny.md | 12 +++--- scripts/bench/run.py | 13 +++++- scripts/catalog/common.py | 43 +++++++++++++++++++ scripts/catalog/db.py | 20 ++++++--- scripts/catalog/ingest_accuracy.py | 3 +- scripts/catalog/profiles.py | 8 ++-- scripts/catalog/render.py | 8 +++- scripts/hf_cards/generate.py | 3 +- 115 files changed, 774 insertions(+), 695 deletions(-) diff --git a/.claude/skills/porting-5-quants/SKILL.md b/.claude/skills/porting-5-quants/SKILL.md index 560e90e6..f99d2521 100644 --- a/.claude/skills/porting-5-quants/SKILL.md +++ b/.claude/skills/porting-5-quants/SKILL.md @@ -125,6 +125,9 @@ Report: - Quant matrix pushed to a private HF repo (`/-gguf`). - Tentative per-quant WER produced and reviewed; authoritative WER is Stage 7. +- The GGUFs are now the input Stage 6 seeds `catalog/.json` from + (`scripts/catalog/new_record.py`), so a wrong capability KV or licence + read propagates into the catalog. Fix it here, not in the record. ## Pointers (read, not execute) diff --git a/.claude/skills/porting-6-bench/SKILL.md b/.claude/skills/porting-6-bench/SKILL.md index 23358b70..4092f216 100644 --- a/.claude/skills/porting-6-bench/SKILL.md +++ b/.claude/skills/porting-6-bench/SKILL.md @@ -17,6 +17,8 @@ requirement. - `models//-.gguf` exists for every shipped preset (F16, Q8_0, Q6_K, Q5_K_M, Q4_K_M) — i.e. Stage 5 complete. +- `catalog/.json` exists, or Step 0 creates it. Nothing this stage + measures can be published without a record to hold it. - `build/bin/transcribe-bench` and `build/bin/transcribe-cli` are built under `build/`. - `scripts/bench/run.py` is runnable. @@ -47,9 +49,9 @@ Rules: rig's own `reports/perf//`. Vulkan cells only exist on the Ryzen box; Metal cells only exist on the Mac. - `reports/` is gitignored (`.gitignore:66`), so the per-rig JSON never - travels with the repo. The durable artifact is the **rendered table in - `docs/models/.md`** plus the `perf:` block in - `scripts/hf_cards/.yaml`. Transcribe the numbers into both. + travels with the repo. The durable artifact is the speed rows in + **`catalog/.json`**, ingested from those reports; the doc table + and the HF card are rendered from them. Never transcribe a number by hand. - A dev box that is neither rig (for example a base `apple-m4`) is iteration data. It may be added as an extra card section, but it does **not** substitute for either required rig. @@ -70,6 +72,7 @@ regression and halts Stage 6. ``` Bench progress: +- [ ] Step 0: Catalog record exists (create it on a first port) - [ ] Step 1: Confirm full quant matrix present - [ ] Step 2: Rebuild transcribe-bench - [ ] Step 3: Confirm bench scope (publication default, optional widening) @@ -79,6 +82,30 @@ Bench progress: - [ ] Step 6: Sign-off review ``` +### Step 0: Catalog record (execute, first port only) + +Stage 6 is the first stage that writes to the catalog, so the record has to +exist before a report can be ingested. A model that was ported before the +catalog existed already has one; a new port does not. + +```bash +ls catalog/.json || uv run scripts/catalog/new_record.py \ + --long-form --docs-page .md +``` + +Everything mechanical is read from artifacts Stage 5 already produced: the +intake supplies family, upstream repo and revision, and languages; the GGUFs +under `models//` supply the download table, byte sizes, parameter +count, capability KVs, licence and display name. The two required flags are +the facts no artifact carries: which `docs/input-limits.md` bucket the family +falls into, and which page under `docs/models/` documents it. Benchmark rows +are left empty for this stage and Stage 7 to fill. + +Check the seeded record before benching. `--published-repo`, +`--display-name`, `--license`, `--license-display` and `--language-tag-form` +override a wrong guess; a capability KV that the GGUF states wrongly is a +Stage 5 export bug, so fix it there and re-run rather than editing the record. + ### Step 1: Matrix presence (execute) ```bash @@ -235,6 +262,7 @@ produced it. The stage is not finished until the numbers are in the catalog. ## Postconditions +- `catalog/.json` exists and is schema-valid. - A sourced speed measurement for Q8_0 and Q4_K_M when downloaded, on both `jfk` and `dots`, for every profile machine/backend target. Legacy xRT-only rows may satisfy a cell but are explicitly marked and should be replaced @@ -254,6 +282,8 @@ produced it. The stage is not finished until the numbers are in the catalog. ## Pointers (read, not execute) - `docs/porting/5-benchmarks.md` — bench procedure context +- `scripts/catalog/new_record.py` — seeds the record from intake + GGUFs +- `catalog/_schema.json` — what a record is allowed to hold - `scripts/bench/run.py` — driver, already discovers `build/bin/` first - `scripts/bench/compare.py` — baseline-vs-candidate delta table - `tools/transcribe-bench/main.cpp` — bench binary source if the schema diff --git a/catalog/_schema.json b/catalog/_schema.json index 6f25ad25..afc5692b 100644 --- a/catalog/_schema.json +++ b/catalog/_schema.json @@ -58,7 +58,8 @@ }, "upstream_commit": { "type": "string", - "description": "The upstream revision used to produce the published GGUFs." + "pattern": "^[0-9a-f]{7}$", + "description": "The upstream revision used to produce the published GGUFs, as the 7-character short SHA. One spelling so a doc link, an HF card and a database row never differ on the same commit; the Hub resolves the prefix." }, "docs_page": { "type": "string", diff --git a/catalog/breeze-asr-25.json b/catalog/breeze-asr-25.json index f485aafc..0fb390cb 100644 --- a/catalog/breeze-asr-25.json +++ b/catalog/breeze-asr-25.json @@ -9,7 +9,7 @@ "display": "Apache-2.0" }, "upstream_repo": "MediaTek-Research/Breeze-ASR-25", - "upstream_commit": "cffe7ccb404d025296a00758d0a33468bec3a9d0", + "upstream_commit": "cffe7cc", "published_repo": "handy-computer/Breeze-ASR-25-gguf", "docs_page": "whisper.md", "languages": ["zh","en"], @@ -64,13 +64,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":29374.8,"xrt_compute":1.2,"load_ms":709.5,"mel_ms":36.5,"encode_ms":9564.5,"decode_ms":19773.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":29382.6,"xrt_wall":1.2,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":13603.0,"xrt_compute":0.81,"load_ms":1125.8,"mel_ms":29.4,"encode_ms":9548.1,"decode_ms":4025.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13610.8,"xrt_wall":0.81,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":30922.9,"xrt_compute":1.14,"load_ms":1167.6,"mel_ms":33.1,"encode_ms":9831.3,"decode_ms":21058.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":30931.0,"xrt_wall":1.14,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":14074.1,"xrt_compute":0.78,"load_ms":1931.4,"mel_ms":32.7,"encode_ms":9840.0,"decode_ms":4201.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":14082.3,"xrt_wall":0.78,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":14873.8,"xrt_compute":2.38,"load_ms":490.9,"mel_ms":41.7,"encode_ms":4513.2,"decode_ms":10318.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":14874.6,"xrt_wall":2.38,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6560.5,"xrt_compute":1.68,"load_ms":990.1,"mel_ms":45.5,"encode_ms":4494.8,"decode_ms":2020.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6561.3,"xrt_wall":1.68,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15017.0,"xrt_compute":2.35,"load_ms":645.4,"mel_ms":43.7,"encode_ms":4427.2,"decode_ms":10546.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":15018.1,"xrt_wall":2.35,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6504.2,"xrt_compute":1.69,"load_ms":1422.2,"mel_ms":41.8,"encode_ms":4408.3,"decode_ms":2054.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6504.9,"xrt_wall":1.69,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/canary-qwen-2.5b.json b/catalog/canary-qwen-2.5b.json index fe16d0b2..fa87735c 100644 --- a/catalog/canary-qwen-2.5b.json +++ b/catalog/canary-qwen-2.5b.json @@ -9,7 +9,7 @@ "display": "CC-BY-4.0" }, "upstream_repo": "nvidia/canary-qwen-2.5b", - "upstream_commit": "b1469e1bba1cfe140205529c79c434ca47180960", + "upstream_commit": "b1469e1", "published_repo": "handy-computer/canary-qwen-2.5b-gguf", "docs_page": "canary-qwen-2.5b.md", "languages": ["en"], diff --git a/catalog/cohere-transcribe-03-2026.json b/catalog/cohere-transcribe-03-2026.json index 3cc27a75..56edda69 100644 --- a/catalog/cohere-transcribe-03-2026.json +++ b/catalog/cohere-transcribe-03-2026.json @@ -70,13 +70,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":154.0,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":491.0,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":150.0,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":10080.0,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2892.4,"xrt_compute":3.8,"load_ms":2346.6,"mel_ms":13.3,"encode_ms":2747.5,"decode_ms":131.6,"engine_sha":"8345d95","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":2897.2,"xrt_wall":3.8}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":12391.7,"xrt_compute":2.85,"load_ms":2398.8,"mel_ms":38.2,"encode_ms":11445.5,"decode_ms":908.1,"engine_sha":"8345d95","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":12398.6,"xrt_wall":2.85}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3568.4,"xrt_compute":3.08,"load_ms":3299.3,"mel_ms":12.9,"encode_ms":3368.8,"decode_ms":186.7,"engine_sha":"8345d95","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":3573.0,"xrt_wall":3.08}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4250.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1330.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4250.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1430.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8929.8,"xrt_compute":3.96,"load_ms":2104.3,"mel_ms":57.8,"encode_ms":8104.2,"decode_ms":767.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8979.2,"xrt_wall":3.93,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2465.2,"xrt_compute":4.46,"load_ms":2645.3,"mel_ms":18.7,"encode_ms":2299.8,"decode_ms":146.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2491.1,"xrt_wall":4.42,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8762.2,"xrt_compute":4.03,"load_ms":2430.5,"mel_ms":58.8,"encode_ms":7737.3,"decode_ms":966.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8811.3,"xrt_wall":4.01,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2398.6,"xrt_compute":4.59,"load_ms":2439.5,"mel_ms":18.6,"encode_ms":2195.6,"decode_ms":184.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2426.2,"xrt_wall":4.53,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4003.0,"xrt_compute":8.83,"load_ms":541.7,"mel_ms":71.5,"encode_ms":3364.9,"decode_ms":566.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4030.8,"xrt_wall":8.77,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1409.0,"xrt_compute":7.81,"load_ms":1399.3,"mel_ms":31.6,"encode_ms":1246.9,"decode_ms":130.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1427.2,"xrt_wall":7.71,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4146.4,"xrt_compute":8.52,"load_ms":1087.1,"mel_ms":67.8,"encode_ms":3333.1,"decode_ms":745.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4178.5,"xrt_wall":8.46,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1433.5,"xrt_compute":7.67,"load_ms":1285.2,"mel_ms":34.4,"encode_ms":1244.2,"decode_ms":154.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1452.0,"xrt_wall":7.58,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/cohere-transcribe-arabic-07-2026.json b/catalog/cohere-transcribe-arabic-07-2026.json index f72ce5e4..8ed550e9 100644 --- a/catalog/cohere-transcribe-arabic-07-2026.json +++ b/catalog/cohere-transcribe-arabic-07-2026.json @@ -64,13 +64,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":154.0,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":491.0,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":150.0,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":10080.0,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2900.0,"xrt_compute":4.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":12400.0,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3570.0,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4250.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1330.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4250.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1430.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8942.2,"xrt_compute":3.95,"load_ms":2512.3,"mel_ms":59.5,"encode_ms":8109.3,"decode_ms":773.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8990.3,"xrt_wall":3.93,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2455.3,"xrt_compute":4.48,"load_ms":2597.1,"mel_ms":18.7,"encode_ms":2292.5,"decode_ms":144.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2481.5,"xrt_wall":4.43,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8754.0,"xrt_compute":4.04,"load_ms":3913.5,"mel_ms":59.6,"encode_ms":7725.2,"decode_ms":969.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8803.8,"xrt_wall":4.01,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2401.2,"xrt_compute":4.58,"load_ms":3556.9,"mel_ms":19.7,"encode_ms":2195.3,"decode_ms":186.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2428.5,"xrt_wall":4.53,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4002.7,"xrt_compute":8.83,"load_ms":572.7,"mel_ms":65.3,"encode_ms":3355.6,"decode_ms":581.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4029.7,"xrt_wall":8.77,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1310.3,"xrt_compute":8.4,"load_ms":1431.3,"mel_ms":20.8,"encode_ms":1163.4,"decode_ms":126.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1330.7,"xrt_wall":8.27,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4188.4,"xrt_compute":8.44,"load_ms":1238.1,"mel_ms":65.6,"encode_ms":3383.5,"decode_ms":739.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4220.8,"xrt_wall":8.37,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1346.6,"xrt_compute":8.17,"load_ms":2129.9,"mel_ms":27.9,"encode_ms":1160.9,"decode_ms":157.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1364.7,"xrt_wall":8.06,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/fun-asr-mlt-nano-2512.json b/catalog/fun-asr-mlt-nano-2512.json index c676ef27..684ff011 100644 --- a/catalog/fun-asr-mlt-nano-2512.json +++ b/catalog/fun-asr-mlt-nano-2512.json @@ -6,10 +6,12 @@ "params": 829791840, "license": { "spdx": "other", - "display": "FunASR Model Open Source License Agreement v1.1" + "display": "FunASR Model Open Source License Agreement v1.1", + "name": "funasr-model-license-v1.1", + "link": "https://github.com/modelscope/FunASR/blob/main/MODEL_LICENSE" }, "upstream_repo": "FunAudioLLM/Fun-ASR-MLT-Nano-2512", - "upstream_commit": "cf67a938bf2829959d08fdfb84e186eff02a67ff", + "upstream_commit": "cf67a93", "published_repo": "handy-computer/Fun-ASR-MLT-Nano-2512-gguf", "docs_page": "fun-asr-nano.md", "languages": [ diff --git a/catalog/fun-asr-nano-2512.json b/catalog/fun-asr-nano-2512.json index dd0f22a0..bfad0317 100644 --- a/catalog/fun-asr-nano-2512.json +++ b/catalog/fun-asr-nano-2512.json @@ -6,10 +6,12 @@ "params": 829791840, "license": { "spdx": "other", - "display": "FunASR Model Open Source License Agreement v1.1" + "display": "FunASR Model Open Source License Agreement v1.1", + "name": "funasr-model-license-v1.1", + "link": "https://github.com/modelscope/FunASR/blob/main/MODEL_LICENSE" }, "upstream_repo": "FunAudioLLM/Fun-ASR-Nano-2512", - "upstream_commit": "a7088d620f755dcdca575b63db184c3ad55b2865", + "upstream_commit": "a7088d6", "published_repo": "handy-computer/Fun-ASR-Nano-2512-gguf", "docs_page": "fun-asr-nano.md", "languages": ["zh","en","ja"], @@ -59,13 +61,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":129.0,"xrt_compute":86.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":486.0,"xrt_compute":73.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":134.0,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4424.0,"xrt_compute":7.99,"load_ms":562.9,"mel_ms":85.1,"encode_ms":1904.4,"decode_ms":2434.5,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":4515.7,"xrt_wall":7.82}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1118.6,"xrt_compute":9.83,"load_ms":554.4,"mel_ms":24.7,"encode_ms":524.9,"decode_ms":568.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1150.2,"xrt_wall":9.56}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":5540.0,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1480.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2896.5,"xrt_compute":12.2,"load_ms":520.2,"mel_ms":95.9,"encode_ms":971.8,"decode_ms":1828.8,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2949.1,"xrt_wall":11.98}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":801.2,"xrt_compute":13.73,"load_ms":641.6,"mel_ms":35.4,"encode_ms":275.3,"decode_ms":490.5,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":825.2,"xrt_wall":13.33}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3690.1,"xrt_compute":9.57,"load_ms":746.7,"mel_ms":100.8,"encode_ms":947.3,"decode_ms":2642.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":3741.9,"xrt_wall":9.44}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":864.3,"xrt_compute":12.73,"load_ms":862.5,"mel_ms":37.7,"encode_ms":267.7,"decode_ms":559.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":887.0,"xrt_wall":12.4} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4657.8,"xrt_compute":7.59,"load_ms":574.8,"mel_ms":78.6,"encode_ms":2047.4,"decode_ms":2531.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4753.1,"xrt_wall":7.43,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1145.3,"xrt_compute":9.6,"load_ms":832.1,"mel_ms":23.4,"encode_ms":557.9,"decode_ms":564.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1180.3,"xrt_wall":9.32,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5082.5,"xrt_compute":6.95,"load_ms":945.5,"mel_ms":78.7,"encode_ms":1808.2,"decode_ms":3195.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5169.3,"xrt_wall":6.83,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1230.0,"xrt_compute":8.94,"load_ms":1176.6,"mel_ms":23.2,"encode_ms":481.5,"decode_ms":725.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1260.9,"xrt_wall":8.72,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3061.2,"xrt_compute":11.54,"load_ms":755.5,"mel_ms":85.5,"encode_ms":1247.5,"decode_ms":1728.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3137.2,"xrt_wall":11.26,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":838.3,"xrt_compute":13.12,"load_ms":1197.4,"mel_ms":26.1,"encode_ms":354.4,"decode_ms":457.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":869.9,"xrt_wall":12.64,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3800.8,"xrt_compute":9.3,"load_ms":1280.7,"mel_ms":89.4,"encode_ms":1249.0,"decode_ms":2462.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3875.4,"xrt_wall":9.12,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":904.8,"xrt_compute":12.16,"load_ms":1917.3,"mel_ms":30.4,"encode_ms":353.5,"decode_ms":520.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":937.3,"xrt_wall":11.74,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/medasr.json b/catalog/medasr.json index b28fd3a9..9c92b6d4 100644 --- a/catalog/medasr.json +++ b/catalog/medasr.json @@ -6,7 +6,9 @@ "params": 105316112, "license": { "spdx": "other", - "display": "Health AI Developer Foundations" + "display": "Health AI Developer Foundations", + "name": "health-ai-developer-foundations", + "link": "https://developers.google.com/health-ai-developer-foundations/terms" }, "upstream_repo": "google/medasr", "upstream_commit": "ae1e484", diff --git a/catalog/moonshine-base-ar.json b/catalog/moonshine-base-ar.json index c84346d0..fa646d51 100644 --- a/catalog/moonshine-base-ar.json +++ b/catalog/moonshine-base-ar.json @@ -43,13 +43,12 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":819.1,"xrt_compute":13.43,"load_ms":145.7,"mel_ms":0.0,"encode_ms":149.8,"decode_ms":669.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":819.1,"xrt_wall":13.43,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + ], + "benchmark_exceptions": [ + {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} ] } diff --git a/catalog/moonshine-base-ja.json b/catalog/moonshine-base-ja.json index 8fa5dea8..d1343d0b 100644 --- a/catalog/moonshine-base-ja.json +++ b/catalog/moonshine-base-ja.json @@ -43,13 +43,12 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":206.0,"xrt_compute":53.4,"load_ms":151.1,"mel_ms":0.0,"encode_ms":146.3,"decode_ms":59.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":206.0,"xrt_wall":53.39,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":143.0,"xrt_compute":76.9,"load_ms":128.4,"mel_ms":0.0,"encode_ms":85.3,"decode_ms":57.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":143.3,"xrt_wall":76.74,"publication_profile":"asr-publication-v2"} + ], + "benchmark_exceptions": [ + {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} ] } diff --git a/catalog/moonshine-base-ko.json b/catalog/moonshine-base-ko.json index 13d57539..6e4ac565 100644 --- a/catalog/moonshine-base-ko.json +++ b/catalog/moonshine-base-ko.json @@ -43,13 +43,12 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":776.7,"xrt_compute":14.16,"load_ms":142.7,"mel_ms":0.0,"encode_ms":146.9,"decode_ms":629.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":776.7,"xrt_wall":14.16,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":552.7,"xrt_compute":19.9,"load_ms":133.6,"mel_ms":0.0,"encode_ms":88.0,"decode_ms":464.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":553.1,"xrt_wall":19.89,"publication_profile":"asr-publication-v2"} + ], + "benchmark_exceptions": [ + {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} ] } diff --git a/catalog/moonshine-base-uk.json b/catalog/moonshine-base-uk.json index 819b882c..d132249e 100644 --- a/catalog/moonshine-base-uk.json +++ b/catalog/moonshine-base-uk.json @@ -43,13 +43,12 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":597.1,"xrt_compute":18.42,"load_ms":147.7,"mel_ms":0.0,"encode_ms":146.3,"decode_ms":450.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":597.1,"xrt_wall":18.42,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":430.6,"xrt_compute":25.54,"load_ms":129.5,"mel_ms":0.0,"encode_ms":84.3,"decode_ms":346.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":431.0,"xrt_wall":25.52,"publication_profile":"asr-publication-v2"} + ], + "benchmark_exceptions": [ + {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} ] } diff --git a/catalog/moonshine-base-vi.json b/catalog/moonshine-base-vi.json index 1a361994..fa7f390a 100644 --- a/catalog/moonshine-base-vi.json +++ b/catalog/moonshine-base-vi.json @@ -43,13 +43,12 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":858.6,"xrt_compute":12.81,"load_ms":145.7,"mel_ms":0.0,"encode_ms":148.8,"decode_ms":709.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":858.7,"xrt_wall":12.81,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":619.4,"xrt_compute":17.76,"load_ms":127.8,"mel_ms":0.0,"encode_ms":84.6,"decode_ms":534.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":619.7,"xrt_wall":17.75,"publication_profile":"asr-publication-v2"} + ], + "benchmark_exceptions": [ + {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} ] } diff --git a/catalog/moonshine-base-zh.json b/catalog/moonshine-base-zh.json index 39b2a35e..9962cd17 100644 --- a/catalog/moonshine-base-zh.json +++ b/catalog/moonshine-base-zh.json @@ -43,13 +43,12 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":335.6,"xrt_compute":32.77,"load_ms":143.4,"mel_ms":0.0,"encode_ms":145.3,"decode_ms":190.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":335.7,"xrt_wall":32.77,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":236.9,"xrt_compute":46.44,"load_ms":127.7,"mel_ms":0.0,"encode_ms":83.1,"decode_ms":153.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":237.1,"xrt_wall":46.4,"publication_profile":"asr-publication-v2"} + ], + "benchmark_exceptions": [ + {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} ] } diff --git a/catalog/moonshine-base.json b/catalog/moonshine-base.json index f678ef35..07ab0b21 100644 --- a/catalog/moonshine-base.json +++ b/catalog/moonshine-base.json @@ -47,9 +47,9 @@ {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":96.4,"xrt_compute":114.16,"load_ms":56.4,"mel_ms":0.0,"encode_ms":61.1,"decode_ms":35.2,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":96.4,"xrt_wall":114.15}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":811.0,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":96.0,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3168.7,"xrt_compute":11.15,"load_ms":115.2,"mel_ms":0.0,"encode_ms":671.0,"decode_ms":2497.7,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":3168.7,"xrt_wall":11.15}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":331.1,"xrt_compute":33.22,"load_ms":113.4,"mel_ms":0.0,"encode_ms":178.0,"decode_ms":153.1,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":331.1,"xrt_wall":33.22}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1850.0,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":218.0,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3204.5,"xrt_compute":11.03,"load_ms":112.2,"mel_ms":0.0,"encode_ms":607.3,"decode_ms":2597.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3213.3,"xrt_wall":11.0,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":306.0,"xrt_compute":35.95,"load_ms":151.9,"mel_ms":0.0,"encode_ms":145.3,"decode_ms":160.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":306.0,"xrt_wall":35.95,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1742.4,"xrt_compute":20.28,"load_ms":98.4,"mel_ms":0.0,"encode_ms":299.9,"decode_ms":1442.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1743.1,"xrt_wall":20.27,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":216.1,"xrt_compute":50.9,"load_ms":127.8,"mel_ms":0.0,"encode_ms":82.8,"decode_ms":133.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":216.3,"xrt_wall":50.86,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/moonshine-streaming-medium.json b/catalog/moonshine-streaming-medium.json index 59a6ca19..20f345c8 100644 --- a/catalog/moonshine-streaming-medium.json +++ b/catalog/moonshine-streaming-medium.json @@ -47,9 +47,9 @@ {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":281.3,"xrt_compute":39.11,"load_ms":88.6,"mel_ms":0.0,"encode_ms":231.4,"decode_ms":49.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":281.3,"xrt_wall":39.11}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":952.1,"xrt_compute":37.11,"load_ms":100.0,"mel_ms":0.0,"encode_ms":93.3,"decode_ms":858.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":952.1,"xrt_wall":37.11}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":124.0,"xrt_compute":88.69,"load_ms":98.2,"mel_ms":0.0,"encode_ms":26.9,"decode_ms":97.1,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":124.0,"xrt_wall":88.69}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":6500.0,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1065.6,"xrt_compute":10.32,"load_ms":267.4,"mel_ms":0.0,"encode_ms":820.8,"decode_ms":244.8,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":1065.7,"xrt_wall":10.32}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4013.5,"xrt_compute":8.8,"load_ms":226.4,"mel_ms":0.0,"encode_ms":822.3,"decode_ms":3191.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":4013.5,"xrt_wall":8.8}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":569.7,"xrt_compute":19.31,"load_ms":226.8,"mel_ms":0.0,"encode_ms":229.2,"decode_ms":340.5,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":569.7,"xrt_wall":19.31} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6032.8,"xrt_compute":5.86,"load_ms":260.9,"mel_ms":0.0,"encode_ms":2284.3,"decode_ms":3748.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6043.4,"xrt_wall":5.85,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":816.9,"xrt_compute":13.47,"load_ms":412.0,"mel_ms":0.0,"encode_ms":498.2,"decode_ms":318.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":817.0,"xrt_wall":13.46,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3968.6,"xrt_compute":8.9,"load_ms":155.1,"mel_ms":0.0,"encode_ms":735.8,"decode_ms":3232.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3970.3,"xrt_wall":8.9,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":559.6,"xrt_compute":19.66,"load_ms":303.8,"mel_ms":0.0,"encode_ms":228.4,"decode_ms":331.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":560.0,"xrt_wall":19.64,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/moonshine-tiny-ar.json b/catalog/moonshine-tiny-ar.json index 6a3cae6c..9480612f 100644 --- a/catalog/moonshine-tiny-ar.json +++ b/catalog/moonshine-tiny-ar.json @@ -43,13 +43,12 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":449.1,"xrt_compute":24.49,"load_ms":100.0,"mel_ms":0.0,"encode_ms":76.1,"decode_ms":373.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":449.1,"xrt_wall":24.49,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":333.5,"xrt_compute":32.99,"load_ms":93.2,"mel_ms":0.0,"encode_ms":43.6,"decode_ms":289.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":333.7,"xrt_wall":32.97,"publication_profile":"asr-publication-v2"} + ], + "benchmark_exceptions": [ + {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} ] } diff --git a/catalog/moonshine-tiny-ja.json b/catalog/moonshine-tiny-ja.json index a385cc7c..bd51e61d 100644 --- a/catalog/moonshine-tiny-ja.json +++ b/catalog/moonshine-tiny-ja.json @@ -43,13 +43,12 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":300.8,"xrt_compute":36.57,"load_ms":100.5,"mel_ms":0.0,"encode_ms":74.3,"decode_ms":226.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":300.8,"xrt_wall":36.57,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + ], + "benchmark_exceptions": [ + {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} ] } diff --git a/catalog/moonshine-tiny-ko.json b/catalog/moonshine-tiny-ko.json index e0ac0c8c..2df3feaf 100644 --- a/catalog/moonshine-tiny-ko.json +++ b/catalog/moonshine-tiny-ko.json @@ -43,13 +43,12 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":529.1,"xrt_compute":20.79,"load_ms":102.4,"mel_ms":0.0,"encode_ms":76.0,"decode_ms":453.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":529.2,"xrt_wall":20.79,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":377.5,"xrt_compute":29.14,"load_ms":92.2,"mel_ms":0.0,"encode_ms":47.7,"decode_ms":329.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":377.8,"xrt_wall":29.12,"publication_profile":"asr-publication-v2"} + ], + "benchmark_exceptions": [ + {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} ] } diff --git a/catalog/moonshine-tiny-uk.json b/catalog/moonshine-tiny-uk.json index 0abdf5a1..d60d1cd2 100644 --- a/catalog/moonshine-tiny-uk.json +++ b/catalog/moonshine-tiny-uk.json @@ -43,13 +43,12 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":239.2,"xrt_compute":45.98,"load_ms":99.6,"mel_ms":0.0,"encode_ms":72.8,"decode_ms":166.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":239.3,"xrt_wall":45.98,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":182.7,"xrt_compute":60.21,"load_ms":91.6,"mel_ms":0.0,"encode_ms":44.2,"decode_ms":138.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":182.8,"xrt_wall":60.16,"publication_profile":"asr-publication-v2"} + ], + "benchmark_exceptions": [ + {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} ] } diff --git a/catalog/moonshine-tiny-vi.json b/catalog/moonshine-tiny-vi.json index f2714319..cc7d9845 100644 --- a/catalog/moonshine-tiny-vi.json +++ b/catalog/moonshine-tiny-vi.json @@ -43,13 +43,12 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":375.7,"xrt_compute":29.28,"load_ms":98.5,"mel_ms":0.0,"encode_ms":74.7,"decode_ms":300.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":375.7,"xrt_wall":29.28,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":282.7,"xrt_compute":38.9,"load_ms":92.9,"mel_ms":0.0,"encode_ms":44.1,"decode_ms":238.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":283.0,"xrt_wall":38.87,"publication_profile":"asr-publication-v2"} + ], + "benchmark_exceptions": [ + {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} ] } diff --git a/catalog/moonshine-tiny-zh.json b/catalog/moonshine-tiny-zh.json index a9fcc6ce..b2ac6ba1 100644 --- a/catalog/moonshine-tiny-zh.json +++ b/catalog/moonshine-tiny-zh.json @@ -43,13 +43,12 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":97.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":23.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":183.9,"xrt_compute":59.82,"load_ms":104.2,"mel_ms":0.0,"encode_ms":72.2,"decode_ms":111.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":183.9,"xrt_wall":59.81,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":135.8,"xrt_compute":81.03,"load_ms":92.5,"mel_ms":0.0,"encode_ms":43.4,"decode_ms":92.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":136.0,"xrt_wall":80.9,"publication_profile":"asr-publication-v2"} + ], + "benchmark_exceptions": [ + {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} ] } diff --git a/catalog/moonshine-tiny.json b/catalog/moonshine-tiny.json index aec729a4..1c1d26a9 100644 --- a/catalog/moonshine-tiny.json +++ b/catalog/moonshine-tiny.json @@ -47,9 +47,9 @@ {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":51.5,"xrt_compute":213.74,"load_ms":34.8,"mel_ms":0.0,"encode_ms":29.1,"decode_ms":22.4,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":51.5,"xrt_wall":213.72}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":478.0,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":58.6,"xrt_compute":187.76,"load_ms":33.7,"mel_ms":0.0,"encode_ms":14.4,"decode_ms":44.2,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":58.6,"xrt_wall":187.75}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1528.0,"xrt_compute":23.12,"load_ms":81.6,"mel_ms":0.0,"encode_ms":319.1,"decode_ms":1208.8,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":1528.0,"xrt_wall":23.12}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":162.8,"xrt_compute":67.58,"load_ms":84.3,"mel_ms":0.0,"encode_ms":76.6,"decode_ms":86.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":162.8,"xrt_wall":67.58}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1020.0,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":147.0,"xrt_compute":74.82,"load_ms":97.2,"mel_ms":0.0,"encode_ms":38.4,"decode_ms":108.7,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":147.0,"xrt_wall":74.81} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1792.2,"xrt_compute":19.71,"load_ms":86.3,"mel_ms":0.0,"encode_ms":292.9,"decode_ms":1499.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1797.3,"xrt_wall":19.66,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":174.8,"xrt_compute":62.93,"load_ms":110.0,"mel_ms":0.0,"encode_ms":73.7,"decode_ms":101.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":174.8,"xrt_wall":62.92,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":938.4,"xrt_compute":37.65,"load_ms":79.7,"mel_ms":0.0,"encode_ms":147.9,"decode_ms":790.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":938.8,"xrt_wall":37.64,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":132.2,"xrt_compute":83.21,"load_ms":138.0,"mel_ms":0.0,"encode_ms":46.3,"decode_ms":85.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":132.4,"xrt_wall":83.11,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/moss-transcribe-diarize.json b/catalog/moss-transcribe-diarize.json index 9506ead9..93cf9e3b 100644 --- a/catalog/moss-transcribe-diarize.json +++ b/catalog/moss-transcribe-diarize.json @@ -58,13 +58,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":369.0,"xrt_compute":29.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1270.0,"xrt_compute":27.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":388.0,"xrt_compute":28.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":19220.0,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7060.0,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":21200.0,"xrt_compute":1.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7490.0,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":10680.0,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3680.0,"xrt_compute":3.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":11380.0,"xrt_compute":3.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3880.0,"xrt_compute":2.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":19242.5,"xrt_compute":1.84,"load_ms":619.1,"mel_ms":63.8,"encode_ms":9246.0,"decode_ms":9932.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":19272.7,"xrt_wall":1.83,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6899.5,"xrt_compute":1.59,"load_ms":904.8,"mel_ms":29.5,"encode_ms":4614.5,"decode_ms":2255.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6911.6,"xrt_wall":1.59,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":21084.5,"xrt_compute":1.68,"load_ms":915.3,"mel_ms":56.4,"encode_ms":9587.5,"decode_ms":11440.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":21115.8,"xrt_wall":1.67,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7542.8,"xrt_compute":1.46,"load_ms":1409.4,"mel_ms":34.1,"encode_ms":4835.1,"decode_ms":2673.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":7554.7,"xrt_wall":1.46,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":9948.6,"xrt_compute":3.55,"load_ms":768.0,"mel_ms":68.9,"encode_ms":4300.4,"decode_ms":5579.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":10022.6,"xrt_wall":3.53,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3483.8,"xrt_compute":3.16,"load_ms":1228.4,"mel_ms":37.4,"encode_ms":2040.4,"decode_ms":1406.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3518.3,"xrt_wall":3.13,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":11093.6,"xrt_compute":3.18,"load_ms":1323.6,"mel_ms":72.3,"encode_ms":4357.6,"decode_ms":6663.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":11167.7,"xrt_wall":3.16,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3733.6,"xrt_compute":2.95,"load_ms":2142.8,"mel_ms":37.9,"encode_ms":2005.4,"decode_ms":1690.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3768.5,"xrt_wall":2.92,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/nemotron-3.5-asr-streaming-0.6b.json b/catalog/nemotron-3.5-asr-streaming-0.6b.json index 7e184ebe..13f01c24 100644 --- a/catalog/nemotron-3.5-asr-streaming-0.6b.json +++ b/catalog/nemotron-3.5-asr-streaming-0.6b.json @@ -97,13 +97,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":111.5,"xrt_compute":98.69,"load_ms":132.1,"mel_ms":0.6,"encode_ms":63.0,"decode_ms":47.9,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":112.7,"xrt_wall":97.6}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":359.1,"xrt_compute":98.39,"load_ms":191.4,"mel_ms":1.4,"encode_ms":167.1,"decode_ms":190.6,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":361.3,"xrt_wall":97.79}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":111.5,"xrt_compute":98.65,"load_ms":201.5,"mel_ms":0.6,"encode_ms":61.9,"decode_ms":49.1,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":112.7,"xrt_wall":97.6}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4170.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1088.5,"xrt_compute":10.11,"load_ms":679.2,"mel_ms":17.9,"encode_ms":831.6,"decode_ms":239.0,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1090.2,"xrt_wall":10.09}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4760.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1364.9,"xrt_compute":8.06,"load_ms":848.4,"mel_ms":20.0,"encode_ms":1089.6,"decode_ms":255.4,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1366.7,"xrt_wall":8.05}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2367.7,"xrt_compute":14.92,"load_ms":372.8,"mel_ms":60.7,"encode_ms":1313.5,"decode_ms":993.5,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":2373.8,"xrt_wall":14.88}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":779.6,"xrt_compute":14.11,"load_ms":367.0,"mel_ms":20.2,"encode_ms":489.0,"decode_ms":270.4,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":783.3,"xrt_wall":14.04}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2366.4,"xrt_compute":14.93,"load_ms":467.2,"mel_ms":61.3,"encode_ms":1301.9,"decode_ms":1003.2,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":2373.0,"xrt_wall":14.89}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":768.9,"xrt_compute":14.31,"load_ms":471.7,"mel_ms":20.5,"encode_ms":483.4,"decode_ms":265.0,"engine_sha":"ef35659","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":773.5,"xrt_wall":14.22} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3739.4,"xrt_compute":9.45,"load_ms":693.7,"mel_ms":57.3,"encode_ms":2664.9,"decode_ms":1017.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3774.5,"xrt_wall":9.36,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":993.3,"xrt_compute":11.07,"load_ms":932.3,"mel_ms":18.2,"encode_ms":727.8,"decode_ms":247.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1004.9,"xrt_wall":10.95,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3671.3,"xrt_compute":9.62,"load_ms":897.7,"mel_ms":58.4,"encode_ms":2604.2,"decode_ms":1008.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3706.0,"xrt_wall":9.53,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":951.4,"xrt_compute":11.56,"load_ms":1217.2,"mel_ms":18.2,"encode_ms":685.8,"decode_ms":247.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":963.7,"xrt_wall":11.41,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2093.3,"xrt_compute":16.88,"load_ms":420.9,"mel_ms":58.0,"encode_ms":1031.2,"decode_ms":1004.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2109.5,"xrt_wall":16.75,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":643.8,"xrt_compute":17.09,"load_ms":669.2,"mel_ms":17.5,"encode_ms":376.0,"decode_ms":250.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":654.0,"xrt_wall":16.82,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2067.0,"xrt_compute":17.09,"load_ms":522.0,"mel_ms":58.3,"encode_ms":1009.2,"decode_ms":999.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2086.5,"xrt_wall":16.93,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":640.3,"xrt_compute":17.18,"load_ms":884.5,"mel_ms":17.8,"encode_ms":372.2,"decode_ms":250.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":649.2,"xrt_wall":16.94,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/nemotron-speech-streaming-en-0.6b.json b/catalog/nemotron-speech-streaming-en-0.6b.json index 7b453a9d..f0b44116 100644 --- a/catalog/nemotron-speech-streaming-en-0.6b.json +++ b/catalog/nemotron-speech-streaming-en-0.6b.json @@ -59,13 +59,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":73.0,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":224.0,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":73.0,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4760.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1223.0,"xrt_compute":8.99,"load_ms":594.0,"mel_ms":19.5,"encode_ms":818.7,"decode_ms":384.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1224.7,"xrt_wall":8.98}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5209.0,"xrt_compute":6.78,"load_ms":768.0,"mel_ms":60.6,"encode_ms":3366.0,"decode_ms":1782.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":5212.8,"xrt_wall":6.78}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1385.4,"xrt_compute":7.94,"load_ms":762.5,"mel_ms":20.9,"encode_ms":973.4,"decode_ms":391.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1387.1,"xrt_wall":7.93}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2976.1,"xrt_compute":11.87,"load_ms":328.6,"mel_ms":63.7,"encode_ms":1144.1,"decode_ms":1768.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2983.1,"xrt_wall":11.84}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":809.6,"xrt_compute":13.59,"load_ms":318.6,"mel_ms":19.3,"encode_ms":417.3,"decode_ms":372.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":813.2,"xrt_wall":13.53}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2924.5,"xrt_compute":12.08,"load_ms":438.7,"mel_ms":63.8,"encode_ms":1109.1,"decode_ms":1751.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2930.4,"xrt_wall":12.06}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":808.3,"xrt_compute":13.61,"load_ms":421.3,"mel_ms":19.0,"encode_ms":402.9,"decode_ms":386.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":811.8,"xrt_wall":13.55} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2928.5,"xrt_compute":12.06,"load_ms":622.1,"mel_ms":56.6,"encode_ms":2624.7,"decode_ms":247.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2961.7,"xrt_wall":11.93,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":788.2,"xrt_compute":13.96,"load_ms":862.9,"mel_ms":17.7,"encode_ms":724.8,"decode_ms":45.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":800.5,"xrt_wall":13.74,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2864.8,"xrt_compute":12.33,"load_ms":838.1,"mel_ms":55.6,"encode_ms":2564.3,"decode_ms":244.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2897.5,"xrt_wall":12.19,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":743.0,"xrt_compute":14.81,"load_ms":1138.7,"mel_ms":18.2,"encode_ms":680.4,"decode_ms":44.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":755.8,"xrt_wall":14.55,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1261.2,"xrt_compute":28.01,"load_ms":289.0,"mel_ms":57.5,"encode_ms":967.2,"decode_ms":236.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1277.3,"xrt_wall":27.66,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":425.8,"xrt_compute":25.83,"load_ms":551.7,"mel_ms":17.8,"encode_ms":362.3,"decode_ms":45.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":435.5,"xrt_wall":25.26,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1247.5,"xrt_compute":28.32,"load_ms":381.4,"mel_ms":56.9,"encode_ms":954.3,"decode_ms":236.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1267.0,"xrt_wall":27.89,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":423.5,"xrt_compute":25.97,"load_ms":728.8,"mel_ms":17.6,"encode_ms":361.0,"decode_ms":45.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":432.8,"xrt_wall":25.41,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/parakeet-primeline.json b/catalog/parakeet-primeline.json index 251a7db7..aad0eef9 100644 --- a/catalog/parakeet-primeline.json +++ b/catalog/parakeet-primeline.json @@ -91,13 +91,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":153.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":149.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":13.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2962.2,"xrt_compute":11.93,"load_ms":662.9,"mel_ms":56.0,"encode_ms":2565.7,"decode_ms":340.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2988.3,"xrt_wall":11.82,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":788.7,"xrt_compute":13.95,"load_ms":891.1,"mel_ms":18.6,"encode_ms":698.4,"decode_ms":71.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":798.0,"xrt_wall":13.78,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2900.0,"xrt_compute":12.18,"load_ms":869.5,"mel_ms":56.8,"encode_ms":2514.1,"decode_ms":329.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2926.1,"xrt_wall":12.07,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":728.8,"xrt_compute":15.09,"load_ms":1178.6,"mel_ms":17.5,"encode_ms":639.2,"decode_ms":72.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":738.5,"xrt_wall":14.9,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1392.0,"xrt_compute":25.38,"load_ms":364.7,"mel_ms":59.6,"encode_ms":1005.2,"decode_ms":327.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1411.8,"xrt_wall":25.03,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":454.0,"xrt_compute":24.23,"load_ms":612.1,"mel_ms":17.9,"encode_ms":364.2,"decode_ms":71.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":464.0,"xrt_wall":23.71,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1375.1,"xrt_compute":25.69,"load_ms":460.9,"mel_ms":59.2,"encode_ms":985.9,"decode_ms":330.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1395.2,"xrt_wall":25.32,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":453.5,"xrt_compute":24.25,"load_ms":825.5,"mel_ms":17.9,"encode_ms":360.6,"decode_ms":75.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":464.6,"xrt_wall":23.68,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/parakeet-rnnt-0.6b.json b/catalog/parakeet-rnnt-0.6b.json index b0a236a8..af4b9935 100644 --- a/catalog/parakeet-rnnt-0.6b.json +++ b/catalog/parakeet-rnnt-0.6b.json @@ -57,13 +57,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":65.0,"xrt_compute":170.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":178.0,"xrt_compute":198.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":64.0,"xrt_compute":173.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4140.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1065.5,"xrt_compute":10.32,"load_ms":837.6,"mel_ms":14.1,"encode_ms":731.6,"decode_ms":319.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1067.1,"xrt_wall":10.31}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4710.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1241.5,"xrt_compute":8.86,"load_ms":1097.5,"mel_ms":14.5,"encode_ms":901.7,"decode_ms":325.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1243.2,"xrt_wall":8.85}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2585.2,"xrt_compute":13.67,"load_ms":359.0,"mel_ms":45.1,"encode_ms":1105.4,"decode_ms":1434.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2592.0,"xrt_wall":13.63}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":750.7,"xrt_compute":14.65,"load_ms":335.9,"mel_ms":14.3,"encode_ms":418.4,"decode_ms":318.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":754.2,"xrt_wall":14.58}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2544.8,"xrt_compute":13.88,"load_ms":403.3,"mel_ms":44.2,"encode_ms":1073.9,"decode_ms":1426.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2551.6,"xrt_wall":13.85}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":738.1,"xrt_compute":14.9,"load_ms":446.2,"mel_ms":14.8,"encode_ms":406.2,"decode_ms":317.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":741.6,"xrt_wall":14.83} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2708.4,"xrt_compute":13.05,"load_ms":620.1,"mel_ms":38.1,"encode_ms":2494.2,"decode_ms":176.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2728.6,"xrt_wall":12.95,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":719.6,"xrt_compute":15.29,"load_ms":824.1,"mel_ms":12.2,"encode_ms":675.0,"decode_ms":32.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":724.2,"xrt_wall":15.19,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2637.8,"xrt_compute":13.39,"load_ms":810.4,"mel_ms":38.1,"encode_ms":2425.6,"decode_ms":174.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2658.4,"xrt_wall":13.29,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":674.7,"xrt_compute":16.3,"load_ms":1158.2,"mel_ms":13.2,"encode_ms":628.9,"decode_ms":32.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":679.2,"xrt_wall":16.2,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1268.4,"xrt_compute":27.86,"load_ms":280.3,"mel_ms":40.1,"encode_ms":1057.3,"decode_ms":171.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1288.4,"xrt_wall":27.42,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":431.2,"xrt_compute":25.51,"load_ms":521.2,"mel_ms":12.7,"encode_ms":385.4,"decode_ms":33.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":441.6,"xrt_wall":24.91,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1247.4,"xrt_compute":28.33,"load_ms":384.6,"mel_ms":39.2,"encode_ms":1036.4,"decode_ms":171.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1267.6,"xrt_wall":27.87,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":425.2,"xrt_compute":25.87,"load_ms":780.1,"mel_ms":12.9,"encode_ms":379.1,"decode_ms":33.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":435.6,"xrt_wall":25.25,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/parakeet-tdt-0.6b-v2.json b/catalog/parakeet-tdt-0.6b-v2.json index fb96e8e5..d57a1ad0 100644 --- a/catalog/parakeet-tdt-0.6b-v2.json +++ b/catalog/parakeet-tdt-0.6b-v2.json @@ -57,13 +57,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":67.0,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":189.0,"xrt_compute":187.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":68.0,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4140.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1046.2,"xrt_compute":10.51,"load_ms":2618.0,"mel_ms":20.4,"encode_ms":766.0,"decode_ms":259.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1047.8,"xrt_wall":10.5}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4750.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1226.9,"xrt_compute":8.97,"load_ms":1139.7,"mel_ms":20.5,"encode_ms":934.7,"decode_ms":271.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1228.6,"xrt_wall":8.95}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2435.6,"xrt_compute":14.51,"load_ms":315.9,"mel_ms":64.5,"encode_ms":1092.4,"decode_ms":1278.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2442.0,"xrt_wall":14.47}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":682.1,"xrt_compute":16.13,"load_ms":326.7,"mel_ms":19.7,"encode_ms":402.8,"decode_ms":259.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":685.3,"xrt_wall":16.05}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2446.3,"xrt_compute":14.44,"load_ms":410.3,"mel_ms":66.2,"encode_ms":1076.3,"decode_ms":1303.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":2452.0,"xrt_wall":14.41}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":669.9,"xrt_compute":16.42,"load_ms":402.3,"mel_ms":19.8,"encode_ms":388.0,"decode_ms":262.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":673.4,"xrt_wall":16.34} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2831.1,"xrt_compute":12.48,"load_ms":621.4,"mel_ms":57.0,"encode_ms":2563.9,"decode_ms":210.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2857.2,"xrt_wall":12.37,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":748.7,"xrt_compute":14.69,"load_ms":845.0,"mel_ms":17.8,"encode_ms":694.9,"decode_ms":36.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":758.7,"xrt_wall":14.5,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2774.6,"xrt_compute":12.73,"load_ms":803.3,"mel_ms":57.0,"encode_ms":2510.7,"decode_ms":206.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2801.3,"xrt_wall":12.61,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":695.8,"xrt_compute":15.81,"load_ms":1122.5,"mel_ms":17.9,"encode_ms":641.7,"decode_ms":36.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":706.0,"xrt_wall":15.58,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1257.9,"xrt_compute":28.09,"load_ms":283.3,"mel_ms":57.4,"encode_ms":1003.8,"decode_ms":196.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1277.6,"xrt_wall":27.66,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":417.6,"xrt_compute":26.34,"load_ms":509.3,"mel_ms":17.1,"encode_ms":363.8,"decode_ms":36.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":429.1,"xrt_wall":25.63,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1243.3,"xrt_compute":28.42,"load_ms":371.8,"mel_ms":57.9,"encode_ms":986.2,"decode_ms":199.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1259.3,"xrt_wall":28.06,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":415.9,"xrt_compute":26.45,"load_ms":716.2,"mel_ms":17.4,"encode_ms":361.2,"decode_ms":37.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":426.2,"xrt_wall":25.81,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/parakeet-tdt-0.6b-v3.json b/catalog/parakeet-tdt-0.6b-v3.json index bf0263b1..a8407eaa 100644 --- a/catalog/parakeet-tdt-0.6b-v3.json +++ b/catalog/parakeet-tdt-0.6b-v3.json @@ -85,13 +85,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":75.2,"xrt_compute":146.35,"load_ms":151.5,"mel_ms":1.2,"encode_ms":56.9,"decode_ms":17.1,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":76.5,"xrt_wall":143.75}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":223.9,"xrt_compute":157.78,"load_ms":183.9,"mel_ms":3.3,"encode_ms":155.4,"decode_ms":65.2,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":225.8,"xrt_wall":156.45}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":73.5,"xrt_compute":149.59,"load_ms":197.2,"mel_ms":1.2,"encode_ms":55.9,"decode_ms":16.4,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":74.9,"xrt_wall":146.9}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4780.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1221.2,"xrt_compute":9.01,"load_ms":883.7,"mel_ms":19.6,"encode_ms":761.8,"decode_ms":439.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1222.8,"xrt_wall":9.0}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":5340.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1410.4,"xrt_compute":7.8,"load_ms":1164.2,"mel_ms":21.2,"encode_ms":931.7,"decode_ms":457.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1412.1,"xrt_wall":7.79}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3095.0,"xrt_compute":11.42,"load_ms":370.6,"mel_ms":64.6,"encode_ms":1096.8,"decode_ms":1933.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3100.5,"xrt_wall":11.39}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":864.5,"xrt_compute":12.72,"load_ms":380.5,"mel_ms":19.8,"encode_ms":406.6,"decode_ms":438.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":867.7,"xrt_wall":12.68}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3061.3,"xrt_compute":11.54,"load_ms":420.6,"mel_ms":63.5,"encode_ms":1075.7,"decode_ms":1922.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3066.8,"xrt_wall":11.52}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":854.1,"xrt_compute":12.88,"load_ms":426.8,"mel_ms":20.1,"encode_ms":388.1,"decode_ms":445.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":857.5,"xrt_wall":12.83} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2972.3,"xrt_compute":11.89,"load_ms":658.8,"mel_ms":57.8,"encode_ms":2584.2,"decode_ms":330.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2998.3,"xrt_wall":11.78,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":793.7,"xrt_compute":13.86,"load_ms":886.9,"mel_ms":18.1,"encode_ms":702.1,"decode_ms":73.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":802.9,"xrt_wall":13.7,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2891.7,"xrt_compute":12.22,"load_ms":907.0,"mel_ms":55.8,"encode_ms":2509.9,"decode_ms":326.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2917.8,"xrt_wall":12.11,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":729.1,"xrt_compute":15.09,"load_ms":1184.1,"mel_ms":18.1,"encode_ms":639.3,"decode_ms":71.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":738.6,"xrt_wall":14.89,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1385.4,"xrt_compute":25.5,"load_ms":374.0,"mel_ms":56.7,"encode_ms":1006.7,"decode_ms":322.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1405.7,"xrt_wall":25.14,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":458.2,"xrt_compute":24.01,"load_ms":595.2,"mel_ms":19.5,"encode_ms":366.5,"decode_ms":72.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":469.2,"xrt_wall":23.44,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1367.5,"xrt_compute":25.84,"load_ms":447.9,"mel_ms":57.2,"encode_ms":983.3,"decode_ms":327.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1387.8,"xrt_wall":25.46,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":452.9,"xrt_compute":24.29,"load_ms":892.4,"mel_ms":18.4,"encode_ms":362.2,"decode_ms":72.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":463.1,"xrt_wall":23.75,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/parakeet-tdt-1.1b.json b/catalog/parakeet-tdt-1.1b.json index 73519147..29f4ec07 100644 --- a/catalog/parakeet-tdt-1.1b.json +++ b/catalog/parakeet-tdt-1.1b.json @@ -57,13 +57,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":97.0,"xrt_compute":113.42,"load_ms":221.0,"mel_ms":0.7,"encode_ms":88.0,"decode_ms":8.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":99.7,"xrt_wall":110.34}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":255.1,"xrt_compute":138.52,"load_ms":300.2,"mel_ms":1.8,"encode_ms":220.0,"decode_ms":33.3,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":258.6,"xrt_wall":136.64}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":94.5,"xrt_compute":116.36,"load_ms":334.9,"mel_ms":0.7,"encode_ms":85.5,"decode_ms":8.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":97.3,"xrt_wall":113.11}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5933.1,"xrt_compute":5.96,"load_ms":986.9,"mel_ms":45.6,"encode_ms":4746.2,"decode_ms":1141.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":5937.6,"xrt_wall":5.95}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1490.0,"xrt_compute":7.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6813.5,"xrt_compute":5.19,"load_ms":1325.7,"mel_ms":47.6,"encode_ms":5579.2,"decode_ms":1186.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":6818.2,"xrt_wall":5.18}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1916.9,"xrt_compute":5.74,"load_ms":1370.9,"mel_ms":15.0,"encode_ms":1655.3,"decode_ms":246.6,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1919.4,"xrt_wall":5.73}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2994.1,"xrt_compute":11.8,"load_ms":522.5,"mel_ms":46.1,"encode_ms":1835.1,"decode_ms":1112.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3002.6,"xrt_wall":11.77}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":936.3,"xrt_compute":11.75,"load_ms":484.3,"mel_ms":14.2,"encode_ms":695.6,"decode_ms":226.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":941.7,"xrt_wall":11.68}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3020.2,"xrt_compute":11.7,"load_ms":655.3,"mel_ms":46.9,"encode_ms":1833.8,"decode_ms":1139.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3029.5,"xrt_wall":11.66}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":960.7,"xrt_compute":11.45,"load_ms":676.0,"mel_ms":15.0,"encode_ms":710.7,"decode_ms":235.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":966.4,"xrt_wall":11.38} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4664.5,"xrt_compute":7.57,"load_ms":1270.3,"mel_ms":39.3,"encode_ms":4458.4,"decode_ms":166.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4688.5,"xrt_wall":7.54,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1211.7,"xrt_compute":9.08,"load_ms":1433.3,"mel_ms":11.7,"encode_ms":1169.8,"decode_ms":30.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1218.5,"xrt_wall":9.03,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4537.2,"xrt_compute":7.79,"load_ms":1921.7,"mel_ms":38.7,"encode_ms":4332.9,"decode_ms":165.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4560.1,"xrt_wall":7.75,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1120.1,"xrt_compute":9.82,"load_ms":1894.2,"mel_ms":12.1,"encode_ms":1077.2,"decode_ms":30.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1126.4,"xrt_wall":9.77,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2121.5,"xrt_compute":16.65,"load_ms":414.5,"mel_ms":41.5,"encode_ms":1913.9,"decode_ms":166.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2171.3,"xrt_wall":16.27,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":706.0,"xrt_compute":15.58,"load_ms":833.3,"mel_ms":14.1,"encode_ms":661.5,"decode_ms":30.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":738.4,"xrt_wall":14.9,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2074.9,"xrt_compute":17.03,"load_ms":553.8,"mel_ms":41.4,"encode_ms":1869.4,"decode_ms":164.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2120.0,"xrt_wall":16.67,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":693.6,"xrt_compute":15.86,"load_ms":1180.2,"mel_ms":12.4,"encode_ms":650.8,"decode_ms":30.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":724.2,"xrt_wall":15.19,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/parakeet-tdt_ctc-1.1b.json b/catalog/parakeet-tdt_ctc-1.1b.json index 55b6168e..4e457782 100644 --- a/catalog/parakeet-tdt_ctc-1.1b.json +++ b/catalog/parakeet-tdt_ctc-1.1b.json @@ -57,13 +57,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":103.0,"xrt_compute":106.82,"load_ms":238.1,"mel_ms":0.7,"encode_ms":88.8,"decode_ms":13.5,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":105.7,"xrt_wall":104.08}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":256.0,"xrt_compute":138.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":100.2,"xrt_compute":109.76,"load_ms":346.8,"mel_ms":0.7,"encode_ms":86.4,"decode_ms":13.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":103.0,"xrt_wall":106.83}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5624.8,"xrt_compute":6.28,"load_ms":978.5,"mel_ms":43.7,"encode_ms":4284.3,"decode_ms":1296.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":5627.4,"xrt_wall":6.28}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1531.2,"xrt_compute":7.18,"load_ms":1387.8,"mel_ms":14.4,"encode_ms":1242.6,"decode_ms":274.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1533.5,"xrt_wall":7.17}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":6540.0,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1879.4,"xrt_compute":5.85,"load_ms":1870.8,"mel_ms":14.4,"encode_ms":1582.8,"decode_ms":282.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1881.8,"xrt_wall":5.84}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3129.8,"xrt_compute":11.29,"load_ms":498.3,"mel_ms":45.1,"encode_ms":1813.0,"decode_ms":1271.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3137.0,"xrt_wall":11.26}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":987.5,"xrt_compute":11.14,"load_ms":491.9,"mel_ms":15.4,"encode_ms":703.7,"decode_ms":268.4,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":992.8,"xrt_wall":11.08}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3130.9,"xrt_compute":11.29,"load_ms":640.8,"mel_ms":47.6,"encode_ms":1772.0,"decode_ms":1311.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3138.6,"xrt_wall":11.26}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":973.1,"xrt_compute":11.3,"load_ms":648.8,"mel_ms":14.8,"encode_ms":684.2,"decode_ms":274.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":979.0,"xrt_wall":11.24} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4230.9,"xrt_compute":8.35,"load_ms":1190.8,"mel_ms":41.1,"encode_ms":4001.0,"decode_ms":188.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4288.7,"xrt_wall":8.24,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1197.6,"xrt_compute":9.18,"load_ms":1408.5,"mel_ms":12.4,"encode_ms":1149.8,"decode_ms":35.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1202.6,"xrt_wall":9.15,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4107.3,"xrt_compute":8.6,"load_ms":1895.9,"mel_ms":41.7,"encode_ms":3876.3,"decode_ms":189.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4163.7,"xrt_wall":8.49,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1096.4,"xrt_compute":10.03,"load_ms":1919.6,"mel_ms":12.4,"encode_ms":1048.8,"decode_ms":35.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1101.5,"xrt_wall":9.99,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1956.7,"xrt_compute":18.06,"load_ms":377.9,"mel_ms":39.2,"encode_ms":1727.3,"decode_ms":190.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1978.2,"xrt_wall":17.86,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":705.7,"xrt_compute":15.59,"load_ms":796.3,"mel_ms":12.3,"encode_ms":656.5,"decode_ms":36.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":718.3,"xrt_wall":15.31,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1929.1,"xrt_compute":18.32,"load_ms":589.8,"mel_ms":40.4,"encode_ms":1699.8,"decode_ms":188.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1950.2,"xrt_wall":18.12,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":697.8,"xrt_compute":15.76,"load_ms":1198.4,"mel_ms":12.1,"encode_ms":650.3,"decode_ms":35.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":711.0,"xrt_wall":15.47,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/qwen3-asr-0.6b.json b/catalog/qwen3-asr-0.6b.json index fda8c674..c54f84a1 100644 --- a/catalog/qwen3-asr-0.6b.json +++ b/catalog/qwen3-asr-0.6b.json @@ -9,7 +9,7 @@ "display": "Apache-2.0" }, "upstream_repo": "Qwen/Qwen3-ASR-0.6B", - "upstream_commit": "5eb144179a02acc5e5ba31e748d22b0cf3e303b0", + "upstream_commit": "5eb1441", "published_repo": "handy-computer/Qwen3-ASR-0.6B-gguf", "docs_page": "qwen3-asr.md", "languages": [ diff --git a/catalog/qwen3-asr-1.7b.json b/catalog/qwen3-asr-1.7b.json index 4ffb11a7..61ed2dbc 100644 --- a/catalog/qwen3-asr-1.7b.json +++ b/catalog/qwen3-asr-1.7b.json @@ -9,7 +9,7 @@ "display": "Apache-2.0" }, "upstream_repo": "Qwen/Qwen3-ASR-1.7B", - "upstream_commit": "7278e1e70fe206f11671096ffdd38061171dd6e5", + "upstream_commit": "7278e1e", "published_repo": "handy-computer/Qwen3-ASR-1.7B-gguf", "docs_page": "qwen3-asr.md", "languages": [ diff --git a/catalog/sensevoice-small.json b/catalog/sensevoice-small.json index c65addd6..4b5fbe03 100644 --- a/catalog/sensevoice-small.json +++ b/catalog/sensevoice-small.json @@ -6,10 +6,12 @@ "params": 234000287, "license": { "spdx": "other", - "display": "model-license (FunASR MODEL_LICENSE)" + "display": "model-license (FunASR MODEL_LICENSE)", + "name": "model-license", + "link": "https://github.com/modelscope/FunASR/blob/main/MODEL_LICENSE" }, "upstream_repo": "FunAudioLLM/SenseVoiceSmall", - "upstream_commit": "3eb3b4eeffc2f2dde6051b853983753db33e35c3", + "upstream_commit": "3eb3b4e", "published_repo": "handy-computer/SenseVoiceSmall-gguf", "docs_page": "sensevoice-small.md", "languages": ["zh","yue","en","ja","ko"], diff --git a/catalog/voxtral-mini-3b-2507.json b/catalog/voxtral-mini-3b-2507.json index 8aed8fb0..8577ea8f 100644 --- a/catalog/voxtral-mini-3b-2507.json +++ b/catalog/voxtral-mini-3b-2507.json @@ -64,13 +64,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":656.8,"xrt_compute":16.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2400.0,"xrt_compute":14.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":727.3,"xrt_compute":15.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":45921.8,"xrt_compute":0.77,"load_ms":4290.4,"mel_ms":80.8,"encode_ms":17776.3,"decode_ms":28064.7,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":45923.1,"xrt_wall":0.77}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":19390.0,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":63960.0,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":26150.0,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":23819.2,"xrt_compute":1.48,"load_ms":2417.4,"mel_ms":70.2,"encode_ms":7818.5,"decode_ms":15930.5,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":23820.7,"xrt_wall":1.48}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":9373.1,"xrt_compute":1.17,"load_ms":3937.3,"mel_ms":45.2,"encode_ms":4004.0,"decode_ms":5323.8,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":9373.8,"xrt_wall":1.17}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":26485.4,"xrt_compute":1.33,"load_ms":5949.2,"mel_ms":69.2,"encode_ms":7579.1,"decode_ms":18837.1,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":26486.9,"xrt_wall":1.33}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9567.6,"xrt_compute":1.15,"load_ms":6338.3,"mel_ms":46.1,"encode_ms":3788.8,"decode_ms":5732.7,"engine_sha":"91af262","measured_on":"2026-06-05","thermal_gated":null,"wall_ms":9568.3,"xrt_wall":1.15} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":49489.9,"xrt_compute":0.71,"load_ms":4317.4,"mel_ms":57.5,"encode_ms":19202.3,"decode_ms":30230.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":49509.5,"xrt_wall":0.71,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":20878.8,"xrt_compute":0.53,"load_ms":4367.0,"mel_ms":33.8,"encode_ms":9595.2,"decode_ms":11249.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":20889.0,"xrt_wall":0.53,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":55993.4,"xrt_compute":0.63,"load_ms":7735.1,"mel_ms":58.1,"encode_ms":19719.7,"decode_ms":36215.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":56012.8,"xrt_wall":0.63,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":22372.2,"xrt_compute":0.49,"load_ms":8286.0,"mel_ms":29.9,"encode_ms":9867.1,"decode_ms":12475.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":22382.7,"xrt_wall":0.49,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":27463.8,"xrt_compute":1.29,"load_ms":4330.3,"mel_ms":71.4,"encode_ms":9116.5,"decode_ms":18275.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":27469.2,"xrt_wall":1.29,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":10583.1,"xrt_compute":1.04,"load_ms":5062.7,"mel_ms":48.1,"encode_ms":4536.8,"decode_ms":5998.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":10585.0,"xrt_wall":1.04,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":30044.3,"xrt_compute":1.18,"load_ms":6869.2,"mel_ms":78.4,"encode_ms":8950.2,"decode_ms":21015.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":30049.7,"xrt_wall":1.18,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":11111.9,"xrt_compute":0.99,"load_ms":6923.9,"mel_ms":52.0,"encode_ms":4440.6,"decode_ms":6619.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":11113.9,"xrt_wall":0.99,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/voxtral-mini-4b-realtime-2602.json b/catalog/voxtral-mini-4b-realtime-2602.json index 45088ef5..43545d1c 100644 --- a/catalog/voxtral-mini-4b-realtime-2602.json +++ b/catalog/voxtral-mini-4b-realtime-2602.json @@ -69,13 +69,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1140.0,"xrt_compute":9.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4340.0,"xrt_compute":8.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1220.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":41540.0,"xrt_compute":0.85,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":13800.0,"xrt_compute":0.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":58000.0,"xrt_compute":0.61,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":19540.0,"xrt_compute":0.56,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":33510.0,"xrt_compute":1.05,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":10970.0,"xrt_compute":1.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":39290.0,"xrt_compute":0.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":12620.0,"xrt_compute":0.87,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":46119.5,"xrt_compute":0.77,"load_ms":2777.3,"mel_ms":51.8,"encode_ms":19170.5,"decode_ms":26897.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":46139.2,"xrt_wall":0.77,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":16390.6,"xrt_compute":0.67,"load_ms":4170.6,"mel_ms":20.7,"encode_ms":7306.5,"decode_ms":9063.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":16399.7,"xrt_wall":0.67,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":57916.3,"xrt_compute":0.61,"load_ms":7061.6,"mel_ms":43.6,"encode_ms":19739.9,"decode_ms":38132.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":57934.8,"xrt_wall":0.61,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":19763.4,"xrt_compute":0.56,"load_ms":7214.9,"mel_ms":23.1,"encode_ms":7202.2,"decode_ms":12538.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":19771.6,"xrt_wall":0.56,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":39160.0,"xrt_compute":0.9,"load_ms":3558.6,"mel_ms":61.2,"encode_ms":8840.2,"decode_ms":30258.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":39162.2,"xrt_wall":0.9,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":13171.6,"xrt_compute":0.84,"load_ms":5569.3,"mel_ms":37.2,"encode_ms":3376.6,"decode_ms":9757.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13173.1,"xrt_wall":0.84,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":45034.6,"xrt_compute":0.78,"load_ms":6929.3,"mel_ms":54.3,"encode_ms":9089.3,"decode_ms":35891.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":45037.7,"xrt_wall":0.78,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":14951.4,"xrt_compute":0.74,"load_ms":6986.9,"mel_ms":32.2,"encode_ms":3424.5,"decode_ms":11494.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":14952.9,"xrt_wall":0.74,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/whisper-base.en.json b/catalog/whisper-base.en.json index 230f626d..d353826f 100644 --- a/catalog/whisper-base.en.json +++ b/catalog/whisper-base.en.json @@ -57,13 +57,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":49.5,"xrt_compute":222.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":172.4,"xrt_compute":204.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":50.3,"xrt_compute":218.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2187.9,"xrt_compute":16.15,"load_ms":104.2,"mel_ms":51.0,"encode_ms":658.5,"decode_ms":1478.4,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2188.0,"xrt_wall":16.15}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":836.0,"xrt_compute":13.16,"load_ms":103.0,"mel_ms":39.9,"encode_ms":594.9,"decode_ms":201.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":836.1,"xrt_wall":13.16}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2407.1,"xrt_compute":14.68,"load_ms":124.9,"mel_ms":50.8,"encode_ms":734.7,"decode_ms":1621.6,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2407.2,"xrt_wall":14.68}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1013.8,"xrt_compute":10.85,"load_ms":123.4,"mel_ms":46.0,"encode_ms":737.2,"decode_ms":230.6,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1014.0,"xrt_wall":10.85}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":912.0,"xrt_compute":38.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":337.0,"xrt_compute":32.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":909.0,"xrt_compute":38.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":327.0,"xrt_compute":33.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1497.4,"xrt_compute":23.6,"load_ms":110.7,"mel_ms":35.6,"encode_ms":378.2,"decode_ms":1083.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1497.6,"xrt_wall":23.59,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":574.8,"xrt_compute":19.14,"load_ms":134.4,"mel_ms":30.0,"encode_ms":375.9,"decode_ms":169.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":575.0,"xrt_wall":19.13,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1568.9,"xrt_compute":22.52,"load_ms":128.8,"mel_ms":32.3,"encode_ms":385.8,"decode_ms":1150.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1569.0,"xrt_wall":22.52,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":588.7,"xrt_compute":18.68,"load_ms":164.9,"mel_ms":31.8,"encode_ms":383.9,"decode_ms":173.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":588.9,"xrt_wall":18.68,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1058.3,"xrt_compute":33.38,"load_ms":90.1,"mel_ms":37.3,"encode_ms":181.0,"decode_ms":840.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1058.7,"xrt_wall":33.37,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":385.1,"xrt_compute":28.56,"load_ms":111.8,"mel_ms":31.8,"encode_ms":180.4,"decode_ms":172.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":385.4,"xrt_wall":28.54,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1015.0,"xrt_compute":34.81,"load_ms":104.8,"mel_ms":36.5,"encode_ms":176.6,"decode_ms":801.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1015.3,"xrt_wall":34.8,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":376.5,"xrt_compute":29.22,"load_ms":144.0,"mel_ms":32.2,"encode_ms":176.9,"decode_ms":167.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":376.8,"xrt_wall":29.2,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/whisper-base.json b/catalog/whisper-base.json index e0ebf625..4ab400c4 100644 --- a/catalog/whisper-base.json +++ b/catalog/whisper-base.json @@ -147,13 +147,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":53.6,"xrt_compute":205.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":170.0,"xrt_compute":207.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":52.1,"xrt_compute":211.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2274.5,"xrt_compute":15.53,"load_ms":103.1,"mel_ms":46.4,"encode_ms":663.9,"decode_ms":1564.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2274.7,"xrt_wall":15.53}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":912.6,"xrt_compute":12.05,"load_ms":106.5,"mel_ms":39.7,"encode_ms":596.7,"decode_ms":276.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":912.7,"xrt_wall":12.05}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2537.8,"xrt_compute":13.92,"load_ms":123.7,"mel_ms":44.8,"encode_ms":741.0,"decode_ms":1752.0,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2537.9,"xrt_wall":13.92}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1105.7,"xrt_compute":9.95,"load_ms":122.5,"mel_ms":43.2,"encode_ms":740.4,"decode_ms":322.1,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1105.9,"xrt_wall":9.95}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":946.0,"xrt_compute":37.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":356.0,"xrt_compute":30.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":922.0,"xrt_compute":38.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":351.0,"xrt_compute":31.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1561.3,"xrt_compute":22.63,"load_ms":109.6,"mel_ms":38.4,"encode_ms":378.5,"decode_ms":1144.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1561.5,"xrt_wall":22.63,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":635.3,"xrt_compute":17.32,"load_ms":132.0,"mel_ms":33.9,"encode_ms":376.1,"decode_ms":225.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":635.5,"xrt_wall":17.31,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1633.2,"xrt_compute":21.63,"load_ms":125.8,"mel_ms":39.6,"encode_ms":386.6,"decode_ms":1207.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1633.3,"xrt_wall":21.63,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":645.8,"xrt_compute":17.03,"load_ms":161.9,"mel_ms":28.9,"encode_ms":385.6,"decode_ms":231.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":645.9,"xrt_wall":17.03,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1212.6,"xrt_compute":29.14,"load_ms":91.5,"mel_ms":37.4,"encode_ms":179.4,"decode_ms":995.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1213.0,"xrt_wall":29.13,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":407.5,"xrt_compute":27.0,"load_ms":115.1,"mel_ms":33.7,"encode_ms":179.8,"decode_ms":193.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":407.7,"xrt_wall":26.98,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1208.9,"xrt_compute":29.23,"load_ms":103.8,"mel_ms":36.4,"encode_ms":177.6,"decode_ms":994.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1209.3,"xrt_wall":29.22,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":381.9,"xrt_compute":28.8,"load_ms":137.0,"mel_ms":33.5,"encode_ms":177.1,"decode_ms":171.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":382.2,"xrt_wall":28.78,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/whisper-large-v2.json b/catalog/whisper-large-v2.json index a775eed1..691d12be 100644 --- a/catalog/whisper-large-v2.json +++ b/catalog/whisper-large-v2.json @@ -147,13 +147,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":499.6,"xrt_compute":22.02,"load_ms":223.7,"mel_ms":6.2,"encode_ms":239.6,"decode_ms":253.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":499.6,"xrt_wall":22.02}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1370.0,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":493.1,"xrt_compute":22.31,"load_ms":364.6,"mel_ms":5.1,"encode_ms":233.0,"decode_ms":255.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":493.2,"xrt_wall":22.3}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":43105.3,"xrt_compute":0.82,"load_ms":695.8,"mel_ms":52.4,"encode_ms":14562.8,"decode_ms":28490.1,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":43105.4,"xrt_wall":0.82}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":19460.0,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":53750.0,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":25730.0,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":13680.0,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6352.5,"xrt_compute":1.73,"load_ms":574.3,"mel_ms":36.7,"encode_ms":4351.1,"decode_ms":1964.7,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6352.6,"xrt_wall":1.73}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":14290.0,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6271.0,"xrt_compute":1.75,"load_ms":997.6,"mel_ms":39.2,"encode_ms":4207.7,"decode_ms":2024.1,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6271.1,"xrt_wall":1.75} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":29473.7,"xrt_compute":1.2,"load_ms":705.8,"mel_ms":33.8,"encode_ms":9565.7,"decode_ms":19874.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":29481.6,"xrt_wall":1.2,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":13692.2,"xrt_compute":0.8,"load_ms":1135.4,"mel_ms":29.6,"encode_ms":9619.4,"decode_ms":4043.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13699.8,"xrt_wall":0.8,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":31185.9,"xrt_compute":1.13,"load_ms":1154.5,"mel_ms":37.7,"encode_ms":9825.2,"decode_ms":21323.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":31193.9,"xrt_wall":1.13,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":13956.1,"xrt_compute":0.79,"load_ms":1944.3,"mel_ms":32.2,"encode_ms":9802.2,"decode_ms":4121.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13964.4,"xrt_wall":0.79,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15047.8,"xrt_compute":2.35,"load_ms":496.0,"mel_ms":47.7,"encode_ms":4511.1,"decode_ms":10489.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":15048.8,"xrt_wall":2.35,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6514.8,"xrt_compute":1.69,"load_ms":964.4,"mel_ms":40.5,"encode_ms":4501.7,"decode_ms":1972.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6515.4,"xrt_wall":1.69,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15244.5,"xrt_compute":2.32,"load_ms":638.9,"mel_ms":46.5,"encode_ms":4436.3,"decode_ms":10761.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":15245.3,"xrt_wall":2.32,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6480.0,"xrt_compute":1.7,"load_ms":1428.1,"mel_ms":45.0,"encode_ms":4417.4,"decode_ms":2017.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6480.7,"xrt_wall":1.7,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/whisper-large-v3.json b/catalog/whisper-large-v3.json index 2642819d..784efb71 100644 --- a/catalog/whisper-large-v3.json +++ b/catalog/whisper-large-v3.json @@ -146,13 +146,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":511.9,"xrt_compute":21.49,"load_ms":228.4,"mel_ms":5.9,"encode_ms":239.5,"decode_ms":266.5,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":511.9,"xrt_wall":21.49}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1380.0,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":516.9,"xrt_compute":21.28,"load_ms":364.2,"mel_ms":5.9,"encode_ms":233.1,"decode_ms":277.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":516.9,"xrt_wall":21.28}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":43175.4,"xrt_compute":0.82,"load_ms":684.6,"mel_ms":52.0,"encode_ms":14572.9,"decode_ms":28550.5,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":43175.8,"xrt_wall":0.82}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":19960.0,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":53800.0,"xrt_compute":0.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":25590.0,"xrt_compute":0.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":13750.0,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6070.0,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":14420.0,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6398.7,"xrt_compute":1.72,"load_ms":994.0,"mel_ms":42.2,"encode_ms":4198.3,"decode_ms":2158.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6398.9,"xrt_wall":1.72} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":28104.0,"xrt_compute":1.26,"load_ms":700.7,"mel_ms":33.9,"encode_ms":8933.8,"decode_ms":19136.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":28111.6,"xrt_wall":1.26,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":12952.0,"xrt_compute":0.85,"load_ms":1135.3,"mel_ms":28.0,"encode_ms":8943.7,"decode_ms":3980.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":12959.5,"xrt_wall":0.85,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":31241.4,"xrt_compute":1.13,"load_ms":1132.0,"mel_ms":36.0,"encode_ms":9778.0,"decode_ms":21427.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":31249.6,"xrt_wall":1.13,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":13597.0,"xrt_compute":0.81,"load_ms":1903.8,"mel_ms":29.5,"encode_ms":9345.9,"decode_ms":4221.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13604.9,"xrt_wall":0.81,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15047.9,"xrt_compute":2.35,"load_ms":417.5,"mel_ms":46.7,"encode_ms":4504.4,"decode_ms":10496.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":15049.0,"xrt_wall":2.35,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6633.0,"xrt_compute":1.66,"load_ms":895.5,"mel_ms":40.8,"encode_ms":4492.1,"decode_ms":2100.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6633.8,"xrt_wall":1.66,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15202.0,"xrt_compute":2.32,"load_ms":716.4,"mel_ms":47.7,"encode_ms":4431.1,"decode_ms":10723.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":15203.3,"xrt_wall":2.32,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6602.0,"xrt_compute":1.67,"load_ms":1495.8,"mel_ms":42.3,"encode_ms":4410.5,"decode_ms":2149.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6603.0,"xrt_wall":1.67,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/whisper-large.json b/catalog/whisper-large.json index 3202b75a..ba2dfee0 100644 --- a/catalog/whisper-large.json +++ b/catalog/whisper-large.json @@ -147,13 +147,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":465.1,"xrt_compute":23.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1330.0,"xrt_compute":26.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":476.5,"xrt_compute":23.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":43981.0,"xrt_compute":0.8,"load_ms":730.3,"mel_ms":55.6,"encode_ms":14707.6,"decode_ms":29217.8,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":43981.1,"xrt_wall":0.8}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":19830.0,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":55640.0,"xrt_compute":0.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":26183.9,"xrt_compute":0.42,"load_ms":1218.4,"mel_ms":46.8,"encode_ms":18835.4,"decode_ms":7301.7,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":26184.1,"xrt_wall":0.42}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":13720.0,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6130.0,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":14410.0,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6271.9,"xrt_compute":1.75,"load_ms":981.5,"mel_ms":43.2,"encode_ms":4212.5,"decode_ms":2016.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":6272.0,"xrt_wall":1.75} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":29554.5,"xrt_compute":1.2,"load_ms":696.8,"mel_ms":36.9,"encode_ms":9537.7,"decode_ms":19979.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":29562.2,"xrt_wall":1.2,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":13568.6,"xrt_compute":0.81,"load_ms":1119.3,"mel_ms":26.4,"encode_ms":9549.7,"decode_ms":3992.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13576.5,"xrt_wall":0.81,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":31331.9,"xrt_compute":1.13,"load_ms":1143.1,"mel_ms":31.3,"encode_ms":9839.8,"decode_ms":21460.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":31340.0,"xrt_wall":1.13,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":13998.7,"xrt_compute":0.79,"load_ms":1912.5,"mel_ms":34.6,"encode_ms":9845.5,"decode_ms":4118.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":14006.5,"xrt_wall":0.79,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15105.2,"xrt_compute":2.34,"load_ms":476.1,"mel_ms":42.7,"encode_ms":4507.4,"decode_ms":10555.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":15106.1,"xrt_wall":2.34,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6513.2,"xrt_compute":1.69,"load_ms":966.8,"mel_ms":40.0,"encode_ms":4499.7,"decode_ms":1973.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6514.0,"xrt_wall":1.69,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15306.3,"xrt_compute":2.31,"load_ms":650.0,"mel_ms":44.1,"encode_ms":4425.3,"decode_ms":10836.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":15307.3,"xrt_wall":2.31,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6476.3,"xrt_compute":1.7,"load_ms":1426.4,"mel_ms":44.0,"encode_ms":4414.2,"decode_ms":2018.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6477.0,"xrt_wall":1.7,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/whisper-medium.en.json b/catalog/whisper-medium.en.json index 976c0afd..e744de0c 100644 --- a/catalog/whisper-medium.en.json +++ b/catalog/whisper-medium.en.json @@ -57,13 +57,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":243.3,"xrt_compute":45.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":762.9,"xrt_compute":46.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":249.7,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":21069.1,"xrt_compute":1.68,"load_ms":382.4,"mel_ms":51.8,"encode_ms":7364.8,"decode_ms":13652.6,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":21069.2,"xrt_wall":1.68}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":9357.7,"xrt_compute":1.18,"load_ms":379.1,"mel_ms":44.4,"encode_ms":7436.0,"decode_ms":1877.3,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9357.9,"xrt_wall":1.18}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":26625.9,"xrt_compute":1.33,"load_ms":598.8,"mel_ms":52.1,"encode_ms":9385.6,"decode_ms":17188.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":26626.1,"xrt_wall":1.33}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":11529.7,"xrt_compute":0.95,"load_ms":597.5,"mel_ms":43.1,"encode_ms":9204.4,"decode_ms":2282.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":11529.9,"xrt_wall":0.95}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":6440.0,"xrt_compute":5.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2550.0,"xrt_compute":4.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":6760.0,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2882.6,"xrt_compute":3.82,"load_ms":503.1,"mel_ms":41.0,"encode_ms":2047.3,"decode_ms":794.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2882.7,"xrt_wall":3.82} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":14006.0,"xrt_compute":2.52,"load_ms":379.8,"mel_ms":29.5,"encode_ms":4652.3,"decode_ms":9324.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":14011.9,"xrt_wall":2.52,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5936.1,"xrt_compute":1.85,"load_ms":602.6,"mel_ms":24.4,"encode_ms":4586.6,"decode_ms":1325.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5942.0,"xrt_wall":1.85,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":14993.8,"xrt_compute":2.36,"load_ms":597.4,"mel_ms":35.5,"encode_ms":4815.1,"decode_ms":10143.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":14999.9,"xrt_wall":2.36,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6204.4,"xrt_compute":1.77,"load_ms":962.0,"mel_ms":24.7,"encode_ms":4750.4,"decode_ms":1429.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6210.7,"xrt_wall":1.77,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7058.2,"xrt_compute":5.01,"load_ms":261.4,"mel_ms":41.5,"encode_ms":2096.7,"decode_ms":4920.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":7058.8,"xrt_wall":5.01,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2647.3,"xrt_compute":4.16,"load_ms":458.5,"mel_ms":35.0,"encode_ms":1949.5,"decode_ms":662.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2647.6,"xrt_wall":4.15,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7461.7,"xrt_compute":4.74,"load_ms":378.5,"mel_ms":42.7,"encode_ms":2088.5,"decode_ms":5330.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":7462.2,"xrt_wall":4.73,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2705.7,"xrt_compute":4.07,"load_ms":772.5,"mel_ms":36.3,"encode_ms":1923.9,"decode_ms":745.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2706.1,"xrt_wall":4.06,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/whisper-medium.json b/catalog/whisper-medium.json index 22bf3d04..06b81f0d 100644 --- a/catalog/whisper-medium.json +++ b/catalog/whisper-medium.json @@ -147,13 +147,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":270.9,"xrt_compute":40.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":802.5,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":280.0,"xrt_compute":39.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":22572.1,"xrt_compute":1.56,"load_ms":387.2,"mel_ms":51.0,"encode_ms":7456.6,"decode_ms":15064.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":22572.2,"xrt_wall":1.56}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":10474.5,"xrt_compute":1.05,"load_ms":384.6,"mel_ms":45.6,"encode_ms":7439.6,"decode_ms":2989.4,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":10474.7,"xrt_wall":1.05}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":27874.3,"xrt_compute":1.27,"load_ms":608.1,"mel_ms":54.0,"encode_ms":9436.2,"decode_ms":18384.1,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":27874.4,"xrt_wall":1.27}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":13137.6,"xrt_compute":0.84,"load_ms":608.4,"mel_ms":45.4,"encode_ms":9381.5,"decode_ms":3710.6,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":13137.8,"xrt_wall":0.84}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":6770.0,"xrt_compute":5.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2830.0,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":7030.0,"xrt_compute":5.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3000.0,"xrt_compute":3.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":14669.3,"xrt_compute":2.41,"load_ms":383.2,"mel_ms":29.9,"encode_ms":4652.3,"decode_ms":9987.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":14675.4,"xrt_wall":2.41,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6648.9,"xrt_compute":1.65,"load_ms":599.9,"mel_ms":27.1,"encode_ms":4571.1,"decode_ms":2050.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6654.7,"xrt_wall":1.65,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15600.5,"xrt_compute":2.26,"load_ms":603.3,"mel_ms":37.1,"encode_ms":4817.8,"decode_ms":10745.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":15606.6,"xrt_wall":2.26,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6934.1,"xrt_compute":1.59,"load_ms":968.9,"mel_ms":25.3,"encode_ms":4773.7,"decode_ms":2135.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6940.4,"xrt_wall":1.58,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7403.3,"xrt_compute":4.77,"load_ms":228.3,"mel_ms":36.5,"encode_ms":2135.7,"decode_ms":5231.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":7404.0,"xrt_wall":4.77,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3011.1,"xrt_compute":3.65,"load_ms":458.9,"mel_ms":37.2,"encode_ms":1973.8,"decode_ms":1000.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3011.8,"xrt_wall":3.65,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7767.5,"xrt_compute":4.55,"load_ms":345.3,"mel_ms":37.4,"encode_ms":2099.6,"decode_ms":5630.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":7768.3,"xrt_wall":4.55,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3041.6,"xrt_compute":3.62,"load_ms":740.4,"mel_ms":39.2,"encode_ms":1944.9,"decode_ms":1057.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3042.2,"xrt_wall":3.62,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/whisper-small.en.json b/catalog/whisper-small.en.json index da9b4bea..e76f1e25 100644 --- a/catalog/whisper-small.en.json +++ b/catalog/whisper-small.en.json @@ -57,13 +57,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":102.6,"xrt_compute":107.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":333.0,"xrt_compute":106.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":107.1,"xrt_compute":102.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7163.0,"xrt_compute":4.93,"load_ms":178.6,"mel_ms":47.7,"encode_ms":2376.3,"decode_ms":4739.0,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7163.1,"xrt_wall":4.93}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2948.9,"xrt_compute":3.73,"load_ms":175.9,"mel_ms":42.4,"encode_ms":2274.9,"decode_ms":631.5,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2949.0,"xrt_wall":3.73}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8382.5,"xrt_compute":4.21,"load_ms":247.0,"mel_ms":49.5,"encode_ms":2821.8,"decode_ms":5511.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":8382.7,"xrt_wall":4.21}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3678.8,"xrt_compute":2.99,"load_ms":251.6,"mel_ms":45.8,"encode_ms":2834.7,"decode_ms":798.3,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3678.9,"xrt_wall":2.99}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":2360.0,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":883.0,"xrt_compute":12.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2480.0,"xrt_compute":14.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":970.0,"xrt_compute":11.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4964.0,"xrt_compute":7.12,"load_ms":186.7,"mel_ms":38.1,"encode_ms":1477.1,"decode_ms":3448.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4964.1,"xrt_wall":7.12,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1900.8,"xrt_compute":5.79,"load_ms":264.0,"mel_ms":37.6,"encode_ms":1389.6,"decode_ms":473.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1901.0,"xrt_wall":5.79,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5085.7,"xrt_compute":6.95,"load_ms":248.1,"mel_ms":36.8,"encode_ms":1475.7,"decode_ms":3573.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5085.9,"xrt_wall":6.95,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1976.0,"xrt_compute":5.57,"load_ms":372.7,"mel_ms":31.4,"encode_ms":1414.5,"decode_ms":530.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1976.1,"xrt_wall":5.57,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2556.3,"xrt_compute":13.82,"load_ms":135.0,"mel_ms":36.0,"encode_ms":634.1,"decode_ms":1886.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2556.9,"xrt_wall":13.82,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":925.5,"xrt_compute":11.89,"load_ms":1648.8,"mel_ms":31.4,"encode_ms":603.1,"decode_ms":291.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":925.8,"xrt_wall":11.88,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2616.0,"xrt_compute":13.51,"load_ms":166.1,"mel_ms":36.9,"encode_ms":622.9,"decode_ms":1956.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2616.5,"xrt_wall":13.5,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":961.3,"xrt_compute":11.44,"load_ms":293.3,"mel_ms":32.5,"encode_ms":588.6,"decode_ms":340.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":961.6,"xrt_wall":11.44,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/whisper-small.json b/catalog/whisper-small.json index c0829ddd..518b55e6 100644 --- a/catalog/whisper-small.json +++ b/catalog/whisper-small.json @@ -147,13 +147,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":113.5,"xrt_compute":96.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":349.3,"xrt_compute":101.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":113.1,"xrt_compute":97.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7467.3,"xrt_compute":4.73,"load_ms":179.5,"mel_ms":50.9,"encode_ms":2377.2,"decode_ms":5039.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7467.4,"xrt_wall":4.73}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3266.7,"xrt_compute":3.37,"load_ms":178.0,"mel_ms":41.2,"encode_ms":2266.7,"decode_ms":958.8,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3266.8,"xrt_wall":3.37}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8906.3,"xrt_compute":3.97,"load_ms":244.0,"mel_ms":53.4,"encode_ms":2840.7,"decode_ms":6012.2,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":8906.5,"xrt_wall":3.97}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3948.1,"xrt_compute":2.79,"load_ms":243.9,"mel_ms":40.9,"encode_ms":2776.2,"decode_ms":1130.9,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3948.1,"xrt_wall":2.79}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":2470.0,"xrt_compute":14.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":960.0,"xrt_compute":11.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2570.0,"xrt_compute":13.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1030.0,"xrt_compute":10.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5163.7,"xrt_compute":6.84,"load_ms":181.3,"mel_ms":39.0,"encode_ms":1459.5,"decode_ms":3665.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5163.8,"xrt_wall":6.84,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2106.5,"xrt_compute":5.22,"load_ms":255.6,"mel_ms":30.7,"encode_ms":1388.6,"decode_ms":687.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2106.7,"xrt_wall":5.22,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5311.9,"xrt_compute":6.65,"load_ms":242.1,"mel_ms":36.6,"encode_ms":1468.7,"decode_ms":3806.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5312.2,"xrt_wall":6.65,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2169.3,"xrt_compute":5.07,"load_ms":375.3,"mel_ms":34.7,"encode_ms":1415.4,"decode_ms":719.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2169.4,"xrt_wall":5.07,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2736.8,"xrt_compute":12.91,"load_ms":134.5,"mel_ms":37.4,"encode_ms":634.1,"decode_ms":2065.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2737.3,"xrt_wall":12.91,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1022.3,"xrt_compute":10.76,"load_ms":214.7,"mel_ms":32.8,"encode_ms":604.0,"decode_ms":385.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1022.6,"xrt_wall":10.76,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2811.3,"xrt_compute":12.57,"load_ms":164.8,"mel_ms":37.3,"encode_ms":619.4,"decode_ms":2154.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2811.8,"xrt_wall":12.57,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1017.0,"xrt_compute":10.82,"load_ms":292.5,"mel_ms":33.4,"encode_ms":588.2,"decode_ms":395.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1017.3,"xrt_wall":10.81,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/whisper-tiny.en.json b/catalog/whisper-tiny.en.json index 84ec7b27..14567f53 100644 --- a/catalog/whisper-tiny.en.json +++ b/catalog/whisper-tiny.en.json @@ -57,13 +57,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":34.0,"xrt_compute":323.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":127.0,"xrt_compute":278.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":39.1,"xrt_compute":281.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1087.9,"xrt_compute":32.48,"load_ms":95.7,"mel_ms":41.0,"encode_ms":285.9,"decode_ms":761.0,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1088.0,"xrt_wall":32.47}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":435.6,"xrt_compute":25.25,"load_ms":93.4,"mel_ms":41.7,"encode_ms":283.0,"decode_ms":110.9,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":435.8,"xrt_wall":25.24}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1187.0,"xrt_compute":29.77,"load_ms":95.3,"mel_ms":44.4,"encode_ms":326.1,"decode_ms":816.5,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1187.1,"xrt_wall":29.76}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":492.8,"xrt_compute":22.32,"load_ms":96.5,"mel_ms":47.4,"encode_ms":323.5,"decode_ms":121.9,"engine_sha":"01127e6","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":493.0,"xrt_wall":22.31}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":541.0,"xrt_compute":65.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":193.0,"xrt_compute":56.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":540.0,"xrt_compute":65.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":197.0,"xrt_compute":56.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":790.4,"xrt_compute":44.7,"load_ms":95.0,"mel_ms":28.7,"encode_ms":169.2,"decode_ms":592.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":790.5,"xrt_wall":44.7,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":282.9,"xrt_compute":38.88,"load_ms":112.8,"mel_ms":29.8,"encode_ms":161.3,"decode_ms":91.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":283.1,"xrt_wall":38.85,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":799.3,"xrt_compute":44.2,"load_ms":98.6,"mel_ms":39.4,"encode_ms":163.0,"decode_ms":596.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":799.4,"xrt_wall":44.2,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":287.7,"xrt_compute":38.24,"load_ms":115.5,"mel_ms":30.1,"encode_ms":161.5,"decode_ms":96.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":287.9,"xrt_wall":38.21,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":665.6,"xrt_compute":53.09,"load_ms":84.5,"mel_ms":36.6,"encode_ms":89.0,"decode_ms":539.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":665.9,"xrt_wall":53.06,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":251.0,"xrt_compute":43.82,"load_ms":99.3,"mel_ms":32.7,"encode_ms":90.0,"decode_ms":128.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":251.2,"xrt_wall":43.79,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":686.2,"xrt_compute":51.49,"load_ms":85.1,"mel_ms":38.0,"encode_ms":89.5,"decode_ms":558.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":686.5,"xrt_wall":51.46,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":253.0,"xrt_compute":43.47,"load_ms":106.2,"mel_ms":33.0,"encode_ms":88.2,"decode_ms":131.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":253.2,"xrt_wall":43.44,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/whisper-tiny.json b/catalog/whisper-tiny.json index 24a7c299..d5c5d8fd 100644 --- a/catalog/whisper-tiny.json +++ b/catalog/whisper-tiny.json @@ -147,13 +147,13 @@ {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":37.9,"xrt_compute":290.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":117.1,"xrt_compute":301.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":36.4,"xrt_compute":302.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1139.2,"xrt_compute":31.01,"load_ms":95.6,"mel_ms":43.5,"encode_ms":291.6,"decode_ms":804.1,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1139.3,"xrt_wall":31.01}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":466.3,"xrt_compute":23.59,"load_ms":136.9,"mel_ms":38.8,"encode_ms":281.9,"decode_ms":145.6,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":466.5,"xrt_wall":23.58}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1228.3,"xrt_compute":28.76,"load_ms":100.3,"mel_ms":50.9,"encode_ms":328.2,"decode_ms":849.3,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1228.4,"xrt_wall":28.76}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":530.6,"xrt_compute":20.73,"load_ms":119.7,"mel_ms":45.7,"encode_ms":325.3,"decode_ms":159.6,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":530.8,"xrt_wall":20.72}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":529.0,"xrt_compute":66.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":209.0,"xrt_compute":52.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":528.0,"xrt_compute":66.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":200.0,"xrt_compute":55.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":820.1,"xrt_compute":43.08,"load_ms":97.1,"mel_ms":32.7,"encode_ms":162.8,"decode_ms":624.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":820.3,"xrt_wall":43.07,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":310.8,"xrt_compute":35.39,"load_ms":113.1,"mel_ms":34.2,"encode_ms":161.5,"decode_ms":115.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":311.1,"xrt_wall":35.36,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":811.3,"xrt_compute":43.55,"load_ms":96.5,"mel_ms":41.3,"encode_ms":161.4,"decode_ms":608.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":811.5,"xrt_wall":43.54,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":305.9,"xrt_compute":35.96,"load_ms":114.3,"mel_ms":31.3,"encode_ms":161.5,"decode_ms":113.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":306.1,"xrt_wall":35.94,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":825.1,"xrt_compute":42.82,"load_ms":85.1,"mel_ms":35.7,"encode_ms":88.4,"decode_ms":700.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":825.4,"xrt_wall":42.81,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":252.6,"xrt_compute":43.55,"load_ms":100.2,"mel_ms":37.1,"encode_ms":87.9,"decode_ms":127.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":253.0,"xrt_wall":43.48,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":822.4,"xrt_compute":42.96,"load_ms":86.1,"mel_ms":36.6,"encode_ms":90.3,"decode_ms":695.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":822.7,"xrt_wall":42.95,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":254.5,"xrt_compute":43.22,"load_ms":103.4,"mel_ms":33.8,"encode_ms":90.7,"decode_ms":130.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":254.7,"xrt_wall":43.18,"publication_profile":"asr-publication-v2"} ] } diff --git a/docs/models/canary-180m-flash.md b/docs/models/canary-180m-flash.md index 5201280d..4410786e 100644 --- a/docs/models/canary-180m-flash.md +++ b/docs/models/canary-180m-flash.md @@ -30,9 +30,9 @@ and not exposed in the v1 port (deferred — would require porting the See NVIDIA's [model card](https://huggingface.co/nvidia/canary-180m-flash) for training data, intended use, and upstream evaluation methodology. -Licensed CC-BY-4.0. Ported from upstream commit -[`b12ab41`](https://huggingface.co/nvidia/canary-180m-flash/commit/b12ab418510d093e83890178fd0e8b0d0f7918a6), -pinned 2026-05-08. + +Licensed CC-BY-4.0. Ported from upstream commit [`b12ab41`](https://huggingface.co/nvidia/canary-180m-flash/commit/b12ab41), pinned 2026-05-08. Validated against the NeMo reference at transcribe.cpp commit [`db53eda`](https://github.com/handy-computer/transcribe.cpp/tree/db53eda) on 2026-05-08. + ## Download @@ -144,10 +144,9 @@ uv run scripts/bench/run.py --profile --models canary-180m-flash transcribe.cpp is validated tensor-by-tensor against NeMo on `samples/jfk.wav`. All 17 checkpointed tensors fall within family -tolerance, and the F32 transcript matches the NeMo reference at the -noise floor (one substitution out of ~27k reference words across full -test-clean). Last validated at commit -[`db53eda`](https://github.com/handy-computer/transcribe.cpp/tree/db53eda). +tolerance, and the F32 transcript matches the NeMo reference at the noise +floor (one substitution out of ~27k reference words across full +test-clean). | Field | Value | | --- | --- | diff --git a/docs/models/canary-1b-flash.md b/docs/models/canary-1b-flash.md index 1fbc1965..6a1f8f31 100644 --- a/docs/models/canary-1b-flash.md +++ b/docs/models/canary-1b-flash.md @@ -26,9 +26,9 @@ Offline multilingual speech-to-text and translation. The model takes a See NVIDIA's [model card](https://huggingface.co/nvidia/canary-1b-flash) for training data, intended use, and upstream evaluation methodology. -Licensed CC-BY-4.0. Ported from upstream commit -[`a9a55e0`](https://huggingface.co/nvidia/canary-1b-flash/commit/a9a55e0295e7dd50d0c8c2a19491900a0daf24f3), -pinned 2026-05-08. + +Licensed CC-BY-4.0. Ported from upstream commit [`a9a55e0`](https://huggingface.co/nvidia/canary-1b-flash/commit/a9a55e0), pinned 2026-05-08. Validated against the NeMo reference at transcribe.cpp commit [`db53eda`](https://github.com/handy-computer/transcribe.cpp/tree/db53eda) on 2026-05-08. + ## Download diff --git a/docs/models/canary-1b-v2.md b/docs/models/canary-1b-v2.md index cd5115dd..db674a23 100644 --- a/docs/models/canary-1b-v2.md +++ b/docs/models/canary-1b-v2.md @@ -37,9 +37,9 @@ model are not exposed in the v1 port. See NVIDIA's [model card](https://huggingface.co/nvidia/canary-1b-v2) for training data, intended use, and upstream evaluation methodology. -Licensed CC-BY-4.0. Ported from upstream commit -[`87bc526`](https://huggingface.co/nvidia/canary-1b-v2/commit/87bc52657add533cd0156b3fc1aef027280754bf), -pinned 2026-05-08. + +Licensed CC-BY-4.0. Ported from upstream commit [`87bc526`](https://huggingface.co/nvidia/canary-1b-v2/commit/87bc526), pinned 2026-05-08. Validated against the NeMo reference at transcribe.cpp commit [`db53eda`](https://github.com/handy-computer/transcribe.cpp/tree/db53eda) on 2026-05-08. + ## Download diff --git a/docs/models/canary-1b.md b/docs/models/canary-1b.md index 002e77c9..ba9d81c7 100644 --- a/docs/models/canary-1b.md +++ b/docs/models/canary-1b.md @@ -24,9 +24,9 @@ Offline multilingual speech-to-text and translation. The model takes a See NVIDIA's [model card](https://huggingface.co/nvidia/canary-1b) for training data, intended use, and upstream evaluation methodology. -Ported from upstream commit -[`1698acf`](https://huggingface.co/nvidia/canary-1b/commit/1698acf1700ed316ffce1cb42d79437c7e360cfa), -pinned 2026-05-08. + +Licensed CC-BY-NC-4.0. Ported from upstream commit [`1698acf`](https://huggingface.co/nvidia/canary-1b/commit/1698acf), pinned 2026-05-08. Validated against the NeMo reference at transcribe.cpp commit [`db53eda`](https://github.com/handy-computer/transcribe.cpp/tree/db53eda) on 2026-05-08. + ## Download diff --git a/docs/models/canary-qwen-2.5b.md b/docs/models/canary-qwen-2.5b.md index a0bb9404..76023c4b 100644 --- a/docs/models/canary-qwen-2.5b.md +++ b/docs/models/canary-qwen-2.5b.md @@ -1,7 +1,7 @@ # Canary-Qwen 2.5B -Upstream: [`nvidia/canary-qwen-2.5b`](https://huggingface.co/nvidia/canary-qwen-2.5b) at [`b1469e1bba1cfe140205529c79c434ca47180960`](https://huggingface.co/nvidia/canary-qwen-2.5b/commit/b1469e1bba1cfe140205529c79c434ca47180960). +Upstream: [`nvidia/canary-qwen-2.5b`](https://huggingface.co/nvidia/canary-qwen-2.5b) at [`b1469e1`](https://huggingface.co/nvidia/canary-qwen-2.5b/commit/b1469e1). Offline English speech-to-text. NeMo SALM (Speech-Augmented Language Model): a FastConformer audio encoder (32 layers, `d_model=1024`) feeds @@ -21,9 +21,9 @@ implicitly when the audio supports it). See NVIDIA's [model card](https://huggingface.co/nvidia/canary-qwen-2.5b) for training data, intended use, and upstream evaluation. -Licensed CC-BY-4.0. Ported from upstream commit -[`b1469e1`](https://huggingface.co/nvidia/canary-qwen-2.5b/commit/b1469e1bba1cfe140205529c79c434ca47180960), -pinned 2026-05-15. + +Licensed CC-BY-4.0. Ported from upstream commit [`b1469e1`](https://huggingface.co/nvidia/canary-qwen-2.5b/commit/b1469e1), pinned 2026-05-15. Validated against the NeMo SALM 2.7.3 reference at transcribe.cpp commit [`6f6c699`](https://github.com/handy-computer/transcribe.cpp/tree/6f6c699) on 2026-05-16. + ## Input limits @@ -135,18 +135,13 @@ uv run scripts/bench/run.py --profile --models canary-qwen-2.5b ## Numerical Validation -transcribe.cpp is validated tensor-by-tensor against NeMo SALM -(`nemo.collections.speechlm2.SALM` 2.7.3) on `samples/jfk.wav` with the -strict CPU backend, BF16 weights promoted to F32 at load time. All 16 -checkpointed tensors fall within family tolerance, and the BF16 -transcript matches the reference verbatim -(`And so my fellow Americans ask not what your country can do for you ask what you can do for your country`). -Tolerances are pinned in `tests/tolerances/canary_qwen.json` with a -detailed `_comment` block naming the precision regime, the two -implementation gotchas (BF16 mel filterbank in NeMo's preprocessor, -forced F32 promotion of F16 depthwise conv kernels on CPU), and the -mechanism behind every widened entry. Last validated at commit -[`6f6c699`](https://github.com/handy-computer/transcribe.cpp/tree/6f6c699). +transcribe.cpp is validated tensor-by-tensor against NeMo SALM (`nemo.collections.speechlm2.SALM` 2.7.3) on +`samples/jfk.wav` with the strict CPU backend, BF16 weights promoted to F32 at load time. All 16 checkpointed +tensors fall within family tolerance, and the BF16 transcript matches the reference verbatim (`And so my +fellow Americans ask not what your country can do for you ask what you can do for your country`). Tolerances +are pinned in `tests/tolerances/canary_qwen.json` with a detailed `_comment` block naming the precision +regime, the two implementation gotchas (BF16 mel filterbank in NeMo's preprocessor, forced F32 promotion of +F16 depthwise conv kernels on CPU), and the mechanism behind every widened entry. | Field | Value | | --- | --- | diff --git a/docs/models/cohere-transcribe-03-2026.md b/docs/models/cohere-transcribe-03-2026.md index 512cee6d..7eb19f0b 100644 --- a/docs/models/cohere-transcribe-03-2026.md +++ b/docs/models/cohere-transcribe-03-2026.md @@ -21,9 +21,9 @@ autoregressive. See Cohere's [model card](https://huggingface.co/CohereLabs/cohere-transcribe-03-2026) for training data, intended use, and upstream evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`76b8b23`](https://huggingface.co/CohereLabs/cohere-transcribe-03-2026/commit/76b8b23e8607f35f0265a23d481b338fb0e26aea), -pinned 2026-04-16. + +Licensed Apache-2.0. Ported from upstream commit [`76b8b23`](https://huggingface.co/CohereLabs/cohere-transcribe-03-2026/commit/76b8b23), pinned 2026-04-16. Validated against the Transformers reference at transcribe.cpp commit [`bf0d0b7`](https://github.com/handy-computer/transcribe.cpp/tree/bf0d0b7) on 2026-04-18. + ## Input limits @@ -115,16 +115,16 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | --------------: | -------------: | -| Vulkan | jfk (11.0s) | 1.43 s (8×)† | 1.33 s (8×)† | -| Vulkan | dots (35.3s) | 4.25 s (8×)† | 4.25 s (8×)† | -| CPU | jfk (11.0s) | 3.57 s (3.08×) | 2.89 s (3.80×) | -| CPU | dots (35.3s) | 12.39 s (2.85×) | 10.08 s (4×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | -------------: | +| Vulkan | jfk (11.0s) | 1.43 s (7.67×) | 1.41 s (7.81×) | +| Vulkan | dots (35.3s) | 4.15 s (8.52×) | 4.00 s (8.83×) | +| CPU | jfk (11.0s) | 2.40 s (4.59×) | 2.47 s (4.46×) | +| CPU | dots (35.3s) | 8.76 s (4.03×) | 8.93 s (3.96×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `8345d95` on 2026-04-16. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: @@ -138,8 +138,7 @@ uv run scripts/bench/run.py --profile --models cohere-transcribe-03-2026 transcribe.cpp is validated tensor-by-tensor against the Transformers reference implementation on `samples/jfk.wav`. All 22 checkpointed tensors fall within family tolerance, and the final transcript matches the reference -verbatim. Last validated at commit -[`bf0d0b7`](https://github.com/handy-computer/transcribe.cpp/tree/bf0d0b7). +verbatim. | Field | Value | | --- | --- | diff --git a/docs/models/cohere-transcribe-arabic-07-2026.md b/docs/models/cohere-transcribe-arabic-07-2026.md index 68d0c113..872a1240 100644 --- a/docs/models/cohere-transcribe-arabic-07-2026.md +++ b/docs/models/cohere-transcribe-arabic-07-2026.md @@ -22,9 +22,9 @@ model takes a 16 kHz mono WAV and produces a transcript; pass the language See Cohere's [model card](https://huggingface.co/CohereLabs/cohere-transcribe-arabic-07-2026) for training data, intended use, and upstream evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`0a8193c`](https://huggingface.co/CohereLabs/cohere-transcribe-arabic-07-2026/commit/0a8193caa4f3f92131471ab08824e488141cb392), -pinned 2026-07-07. + +Licensed Apache-2.0. Ported from upstream commit [`0a8193c`](https://huggingface.co/CohereLabs/cohere-transcribe-arabic-07-2026/commit/0a8193c), pinned 2026-07-07. Validated against the Transformers reference at transcribe.cpp commit [`d89ecb7`](https://github.com/handy-computer/transcribe.cpp/tree/d89ecb7) on 2026-07-07. + ## Input limits @@ -116,16 +116,16 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Vulkan | jfk (11.0s) | 1.43 s (8×)† | 1.33 s (8×)† | -| Vulkan | dots (35.3s) | 4.25 s (8×)† | 4.25 s (8×)† | -| CPU | jfk (11.0s) | 3.57 s (3×)† | 2.90 s (4×)† | -| CPU | dots (35.3s) | 12.40 s (3×)† | 10.08 s (4×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -------------: | -------------: | +| Vulkan | jfk (11.0s) | 1.35 s (8.17×) | 1.31 s (8.40×) | +| Vulkan | dots (35.3s) | 4.19 s (8.44×) | 4.00 s (8.83×) | +| CPU | jfk (11.0s) | 2.40 s (4.58×) | 2.46 s (4.48×) | +| CPU | dots (35.3s) | 8.75 s (4.04×) | 8.94 s (3.95×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction (substitute this variant's slug): diff --git a/docs/models/diar_streaming_sortformer_4spk-v2.1.md b/docs/models/diar_streaming_sortformer_4spk-v2.1.md index c8b8b787..bbf78505 100644 --- a/docs/models/diar_streaming_sortformer_4spk-v2.1.md +++ b/docs/models/diar_streaming_sortformer_4spk-v2.1.md @@ -23,9 +23,9 @@ speaker-attributed ASR path (future work). See NVIDIA's [model card](https://huggingface.co/nvidia/diar_streaming_sortformer_4spk-v2.1) for training data, intended use, and upstream evaluation methodology. -Licensed under the NVIDIA Open Model License. Ported from upstream commit -[`fafaab5`](https://huggingface.co/nvidia/diar_streaming_sortformer_4spk-v2.1/commit/fafaab5faa1617a0ca52d38dd3dc4bd636800d3d), -pinned 2026-07-19. + +Licensed NVIDIA Open Model License. Ported from upstream commit [`fafaab5`](https://huggingface.co/nvidia/diar_streaming_sortformer_4spk-v2.1/commit/fafaab5), pinned 2026-07-19. Validated against the NeMo reference at transcribe.cpp commit [`d42c3bb`](https://github.com/handy-computer/transcribe.cpp/tree/d42c3bb) on 2026-07-22. + ## Download @@ -124,8 +124,7 @@ transcribe.cpp is validated tensor-by-tensor against NeMo on mix with a 1.5 s overlap). All 6 checkpointed tensors fall within family tolerance, and the streaming AOSC cache-compression internals were additionally verified bit-exact against NeMo at the index level on a -full 39-minute AMI meeting (87 compression calls). Last validated at -commit `d42c3bb`. +full 39-minute AMI meeting (87 compression calls). | Field | Value | | --- | --- | diff --git a/docs/models/fun-asr-mlt-nano-2512.md b/docs/models/fun-asr-mlt-nano-2512.md index b5fe7ffd..15e7094c 100644 --- a/docs/models/fun-asr-mlt-nano-2512.md +++ b/docs/models/fun-asr-mlt-nano-2512.md @@ -1,7 +1,7 @@ # Fun-ASR-MLT-Nano -Upstream: [`FunAudioLLM/Fun-ASR-MLT-Nano-2512`](https://huggingface.co/FunAudioLLM/Fun-ASR-MLT-Nano-2512) at [`cf67a938bf2829959d08fdfb84e186eff02a67ff`](https://huggingface.co/FunAudioLLM/Fun-ASR-MLT-Nano-2512/commit/cf67a938bf2829959d08fdfb84e186eff02a67ff). +Upstream: [`FunAudioLLM/Fun-ASR-MLT-Nano-2512`](https://huggingface.co/FunAudioLLM/Fun-ASR-MLT-Nano-2512) at [`cf67a93`](https://huggingface.co/FunAudioLLM/Fun-ASR-MLT-Nano-2512/commit/cf67a93). Offline speech-to-text covering 31 languages, with focused optimization on East and Southeast Asian languages: Chinese, English, Cantonese, @@ -47,11 +47,9 @@ zh/en/ja corpus and may give better Chinese accuracy. See FunAudioLLM's [model card](https://huggingface.co/FunAudioLLM/Fun-ASR-MLT-Nano-2512) for training data, intended use, and upstream evaluation methodology. -Licensed under the **FunASR Model Open Source License Agreement v1.1** -([MODEL_LICENSE](https://github.com/modelscope/FunASR/blob/main/MODEL_LICENSE)). -Ported from upstream commit -[`cf67a93`](https://huggingface.co/FunAudioLLM/Fun-ASR-MLT-Nano-2512/commit/cf67a938bf2829959d08fdfb84e186eff02a67ff), -pinned 2026-05-06. + +Licensed [FunASR Model Open Source License Agreement v1.1](https://github.com/modelscope/FunASR/blob/main/MODEL_LICENSE). Ported from upstream commit [`cf67a93`](https://huggingface.co/FunAudioLLM/Fun-ASR-MLT-Nano-2512/commit/cf67a93), pinned 2026-05-06. Validated against the FunASR reference at transcribe.cpp commit [`f094d28`](https://github.com/handy-computer/transcribe.cpp/tree/f094d28) on 2026-05-06. + ## Download @@ -188,12 +186,11 @@ uv run scripts/bench/run.py --profile --models fun-asr-mlt-nano-2512 ## Numerical Validation -transcribe.cpp is validated tensor-by-tensor against FunASR 1.3.1 -on `samples/jfk.wav`. All 22 checkpointed tensors fall within family +transcribe.cpp is validated tensor-by-tensor against FunASR 1.3.1 on +`samples/jfk.wav`. All 22 checkpointed tensors fall within family tolerance, and the final transcript matches the FunASR reference verbatim ("and so my fellow americans ask not what your country can do for you ask -what you can do for your country"). Last validated at commit -[`f094d28`](https://github.com/handy-computer/transcribe.cpp/tree/f094d28). +what you can do for your country"). | Field | Value | | --- | --- | diff --git a/docs/models/fun-asr-nano-2512.md b/docs/models/fun-asr-nano-2512.md index ea8fa83c..c53b2455 100644 --- a/docs/models/fun-asr-nano-2512.md +++ b/docs/models/fun-asr-nano-2512.md @@ -1,7 +1,7 @@ # Fun-ASR-Nano -Upstream: [`FunAudioLLM/Fun-ASR-Nano-2512`](https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512) at [`a7088d620f755dcdca575b63db184c3ad55b2865`](https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512/commit/a7088d620f755dcdca575b63db184c3ad55b2865). +Upstream: [`FunAudioLLM/Fun-ASR-Nano-2512`](https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512) at [`a7088d6`](https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512/commit/a7088d6). Offline speech-to-text in Chinese, English, and Japanese, plus 7 Chinese dialects (Wu, Cantonese, Min, Hakka, Gan, Xiang, Jin) and 26 regional @@ -34,11 +34,9 @@ For multilingual coverage beyond zh/en/ja, see the sibling See FunAudioLLM's [model card](https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512) for training data, intended use, and upstream evaluation methodology. -Licensed under the **FunASR Model Open Source License Agreement v1.1** -([MODEL_LICENSE](https://github.com/modelscope/FunASR/blob/main/MODEL_LICENSE)). -Ported from upstream commit -[`a7088d6`](https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512/commit/a7088d620f755dcdca575b63db184c3ad55b2865), -pinned 2026-05-06. + +Licensed [FunASR Model Open Source License Agreement v1.1](https://github.com/modelscope/FunASR/blob/main/MODEL_LICENSE). Ported from upstream commit [`a7088d6`](https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512/commit/a7088d6), pinned 2026-05-06. Validated against the FunASR reference at transcribe.cpp commit [`f094d28`](https://github.com/handy-computer/transcribe.cpp/tree/f094d28) on 2026-05-06. + ## Download @@ -129,16 +127,16 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 864 ms (12.73×) | 801 ms (13.73×) | -| Vulkan | dots (35.3s) | 3.69 s (9.57×) | 2.90 s (12.20×) | -| CPU | jfk (11.0s) | 1.48 s (7×)† | 1.12 s (9.83×) | -| CPU | dots (35.3s) | 5.54 s (6×)† | 4.42 s (7.99×) | +| Vulkan | jfk (11.0s) | 905 ms (12.16×) | 838 ms (13.12×) | +| Vulkan | dots (35.3s) | 3.80 s (9.30×) | 3.06 s (11.54×) | +| CPU | jfk (11.0s) | 1.23 s (8.94×) | 1.15 s (9.60×) | +| CPU | dots (35.3s) | 5.08 s (6.95×) | 4.66 s (7.59×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `8635bd1` on 2026-05-07. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: @@ -149,12 +147,11 @@ uv run scripts/bench/run.py --profile --models fun-asr-nano-2512 ## Numerical Validation -transcribe.cpp is validated tensor-by-tensor against FunASR 1.3.1 -on `samples/jfk.wav`. All 22 checkpointed tensors fall within family +transcribe.cpp is validated tensor-by-tensor against FunASR 1.3.1 on +`samples/jfk.wav`. All 22 checkpointed tensors fall within family tolerance, and the final transcript matches the FunASR reference verbatim ("And so my fellow Americans ask not what your country can do for you ask -what you can do for your country."). Last validated at commit -[`f094d28`](https://github.com/handy-computer/transcribe.cpp/tree/f094d28). +what you can do for your country."). | Field | Value | | --- | --- | diff --git a/docs/models/gigaam-v3-ctc.md b/docs/models/gigaam-v3-ctc.md index 58967ae1..45b9c29e 100644 --- a/docs/models/gigaam-v3-ctc.md +++ b/docs/models/gigaam-v3-ctc.md @@ -28,9 +28,9 @@ across heads). Variants in this family: See ai-sage's [model card](https://huggingface.co/ai-sage/GigaAM-v3) for training data, intended use, and upstream evaluation methodology. -Licensed MIT. Ported from upstream commit -[`15ef3b5`](https://huggingface.co/ai-sage/GigaAM-v3/commit/15ef3b5a88da78f93134b3cb7f015c70aefa8946), -pinned 2026-05-12. + +Licensed MIT. Ported from upstream commit [`15ef3b5`](https://huggingface.co/ai-sage/GigaAM-v3/commit/15ef3b5), pinned 2026-05-12. Validated against the gigaam author package reference at transcribe.cpp commit [`42b96d9`](https://github.com/handy-computer/transcribe.cpp/tree/42b96d9) on 2026-05-12. + ## Download diff --git a/docs/models/gigaam-v3-e2e-ctc.md b/docs/models/gigaam-v3-e2e-ctc.md index f7365413..3f8376f8 100644 --- a/docs/models/gigaam-v3-e2e-ctc.md +++ b/docs/models/gigaam-v3-e2e-ctc.md @@ -28,9 +28,9 @@ across heads). Variants in this family: See ai-sage's [model card](https://huggingface.co/ai-sage/GigaAM-v3) for training data, intended use, and upstream evaluation methodology. -Licensed MIT. Ported from upstream commit -[`cec030b`](https://huggingface.co/ai-sage/GigaAM-v3/commit/cec030b4c4f35d928e4a9044a3bdb29ebd499fac), -pinned 2026-05-12. + +Licensed MIT. Ported from upstream commit [`cec030b`](https://huggingface.co/ai-sage/GigaAM-v3/commit/cec030b), pinned 2026-05-12. Validated against the gigaam author package reference at transcribe.cpp commit [`42b96d9`](https://github.com/handy-computer/transcribe.cpp/tree/42b96d9) on 2026-05-12. + ## Download diff --git a/docs/models/gigaam-v3-e2e-rnnt.md b/docs/models/gigaam-v3-e2e-rnnt.md index 4b6c26f5..e0b917b3 100644 --- a/docs/models/gigaam-v3-e2e-rnnt.md +++ b/docs/models/gigaam-v3-e2e-rnnt.md @@ -28,9 +28,9 @@ across heads). Variants in this family: See ai-sage's [model card](https://huggingface.co/ai-sage/GigaAM-v3) for training data, intended use, and upstream evaluation methodology. -Licensed MIT. Ported from upstream commit -[`ec1dc1f`](https://huggingface.co/ai-sage/GigaAM-v3/commit/ec1dc1f01d0d627ab2c0d3acc1e235702300d95e), -pinned 2026-05-12. + +Licensed MIT. Ported from upstream commit [`ec1dc1f`](https://huggingface.co/ai-sage/GigaAM-v3/commit/ec1dc1f), pinned 2026-05-12. Validated against the gigaam author package reference at transcribe.cpp commit [`42b96d9`](https://github.com/handy-computer/transcribe.cpp/tree/42b96d9) on 2026-05-12. + ## Download diff --git a/docs/models/gigaam-v3-rnnt.md b/docs/models/gigaam-v3-rnnt.md index f2292192..ebc10911 100644 --- a/docs/models/gigaam-v3-rnnt.md +++ b/docs/models/gigaam-v3-rnnt.md @@ -28,9 +28,9 @@ across heads). Variants in this family: See ai-sage's [model card](https://huggingface.co/ai-sage/GigaAM-v3) for training data, intended use, and upstream evaluation methodology. -Licensed MIT. Ported from upstream commit -[`c7f128b`](https://huggingface.co/ai-sage/GigaAM-v3/commit/c7f128b8accdd9624df905e5c2d7b7a48c27c0d8), -pinned 2026-05-12. + +Licensed MIT. Ported from upstream commit [`c7f128b`](https://huggingface.co/ai-sage/GigaAM-v3/commit/c7f128b), pinned 2026-05-12. Validated against the gigaam author package reference at transcribe.cpp commit [`42b96d9`](https://github.com/handy-computer/transcribe.cpp/tree/42b96d9) on 2026-05-12. + ## Download diff --git a/docs/models/granite-4.0-1b-speech.md b/docs/models/granite-4.0-1b-speech.md index a8a05adb..08109dc6 100644 --- a/docs/models/granite-4.0-1b-speech.md +++ b/docs/models/granite-4.0-1b-speech.md @@ -28,9 +28,9 @@ etc. Pass the target language as a BCP-47 code via `--translate See IBM's [model card](https://huggingface.co/ibm-granite/granite-4.0-1b-speech) for training data, intended use, and upstream evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`bd87ab8`](https://huggingface.co/ibm-granite/granite-4.0-1b-speech/commit/bd87ab862416353633ea431fe49b1614003623c5), -pinned 2026-05-17. + +Licensed Apache-2.0. Ported from upstream commit [`bd87ab8`](https://huggingface.co/ibm-granite/granite-4.0-1b-speech/commit/bd87ab8), pinned 2026-05-17. Validated against the Transformers reference at transcribe.cpp commit [`275332d`](https://github.com/handy-computer/transcribe.cpp/tree/275332d) on 2026-05-17. + ## Download diff --git a/docs/models/granite-speech-4.1-2b-nar.md b/docs/models/granite-speech-4.1-2b-nar.md index 58a078f5..107523a6 100644 --- a/docs/models/granite-speech-4.1-2b-nar.md +++ b/docs/models/granite-speech-4.1-2b-nar.md @@ -23,10 +23,12 @@ only — no translation, no timestamps, no diarization. See IBM's [model card](https://huggingface.co/ibm-granite/granite-speech-4.1-2b-nar) for training data, intended use, and upstream evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`99a4df9`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b-nar/commit/99a4df9007ac5682f9daa093fb7008ff606e9a5d), -pinned 2026-05-24 (single-file `modeling_granite_speech_nar.py` snapshot — -the README's canonical inference target). + +Licensed Apache-2.0. Ported from upstream commit [`99a4df9`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b-nar/commit/99a4df9), pinned 2026-05-24. Validated against the Transformers reference at transcribe.cpp commit [`c53af2c`](https://github.com/handy-computer/transcribe.cpp/tree/c53af2c) on 2026-05-24. + + +The pinned revision is the single-file `modeling_granite_speech_nar.py` +snapshot, the README's canonical inference target. ## Download diff --git a/docs/models/granite-speech-4.1-2b-plus.md b/docs/models/granite-speech-4.1-2b-plus.md index 9c223484..95fdafd7 100644 --- a/docs/models/granite-speech-4.1-2b-plus.md +++ b/docs/models/granite-speech-4.1-2b-plus.md @@ -36,9 +36,9 @@ speech translation. See IBM's [model card](https://huggingface.co/ibm-granite/granite-speech-4.1-2b-plus) for training data, intended use, and upstream evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`edd3bf5`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b-plus/commit/edd3bf54fbb06d8e263aa0c1939321d67b073f86), -pinned 2026-05-17. + +Licensed Apache-2.0. Ported from upstream commit [`edd3bf5`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b-plus/commit/edd3bf5), pinned 2026-05-17. Validated against the Transformers reference at transcribe.cpp commit [`275332d`](https://github.com/handy-computer/transcribe.cpp/tree/275332d) on 2026-05-17. + ## Download diff --git a/docs/models/granite-speech-4.1-2b.md b/docs/models/granite-speech-4.1-2b.md index 56c6033d..b8f271b1 100644 --- a/docs/models/granite-speech-4.1-2b.md +++ b/docs/models/granite-speech-4.1-2b.md @@ -29,9 +29,9 @@ etc. Pass the target language as a BCP-47 code via `--translate See IBM's [model card](https://huggingface.co/ibm-granite/granite-speech-4.1-2b) for training data, intended use, and upstream evaluation methodology. -Licensed Apache-2.0. Ported from upstream commit -[`8f4bb5f`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b/commit/8f4bb5f31ae98971bd218169f00065a041d20058), -pinned 2026-05-17. + +Licensed Apache-2.0. Ported from upstream commit [`8f4bb5f`](https://huggingface.co/ibm-granite/granite-speech-4.1-2b/commit/8f4bb5f), pinned 2026-05-17. Validated against the Transformers reference at transcribe.cpp commit [`275332d`](https://github.com/handy-computer/transcribe.cpp/tree/275332d) on 2026-05-17. + ## Download diff --git a/docs/models/granite-speech-5.0-470m-turboctc-nc.md b/docs/models/granite-speech-5.0-470m-turboctc-nc.md index 3a863b4a..89a104a3 100644 --- a/docs/models/granite-speech-5.0-470m-turboctc-nc.md +++ b/docs/models/granite-speech-5.0-470m-turboctc-nc.md @@ -101,8 +101,7 @@ identical output, but buys almost nothing here. transcribe.cpp is validated tensor-by-tensor against Hugging Face transformers on `samples/jfk.wav` and `samples/dots.wav`. All 35 checkpointed tensors fall within variant tolerance, and the final transcript matches the reference -verbatim. Last validated at commit -[`f1d0e10`](https://github.com/handy-computer/transcribe.cpp/tree/f1d0e10). +verbatim. | Field | Value | | --- | --- | diff --git a/docs/models/granite-speech-5.0-470m-turboctc.md b/docs/models/granite-speech-5.0-470m-turboctc.md index 2457885d..c92f01c1 100644 --- a/docs/models/granite-speech-5.0-470m-turboctc.md +++ b/docs/models/granite-speech-5.0-470m-turboctc.md @@ -103,8 +103,7 @@ supported and gives identical output, but buys almost nothing here. transcribe.cpp is validated tensor-by-tensor against Hugging Face transformers on `samples/jfk.wav` and `samples/dots.wav`. All 35 checkpointed tensors fall within family tolerance, and the final transcript matches the reference -verbatim. Last validated at commit -[`b9427cf`](https://github.com/handy-computer/transcribe.cpp/tree/b9427cf). +verbatim. | Field | Value | | --- | --- | diff --git a/docs/models/medasr.md b/docs/models/medasr.md index 607221d3..4d0eafe2 100644 --- a/docs/models/medasr.md +++ b/docs/models/medasr.md @@ -12,9 +12,11 @@ Offline English speech-to-text optimized for medical dictation (radiology, inter Trained on ~5,000 hours of de-identified physician dictations on top of a LibriHeavy 50k-hour pretrain. The upstream model card flags lower accuracy on non-native accents and a male-skewed speaker distribution. -Licensed under the [Health AI Developer Foundations terms](https://developers.google.com/health-ai-developer-foundations/terms). The upstream repo is gated; you must accept the HF terms before download. +The upstream repo is gated; you must accept the HF terms before download. -Ported from upstream commit [`ae1e484`](https://huggingface.co/google/medasr/commit/ae1e4845b4b07479735d93e1e591e566435b7104), pinned 2026-06-04. + +Licensed [Health AI Developer Foundations](https://developers.google.com/health-ai-developer-foundations/terms). Ported from upstream commit [`ae1e484`](https://huggingface.co/google/medasr/commit/ae1e484), pinned 2026-06-04. Validated against the transformers @ 65dc2615 (dev; v5.0.0 unreleased) reference at transcribe.cpp commit [`782abfd`](https://github.com/handy-computer/transcribe.cpp/tree/782abfd) on 2026-06-04. + ## Input limits diff --git a/docs/models/moonshine-base.md b/docs/models/moonshine-base.md index 7f3eab25..ab96538e 100644 --- a/docs/models/moonshine-base.md +++ b/docs/models/moonshine-base.md @@ -95,16 +95,16 @@ Apple M4 Max: transcribe.cpp `9824fdb` on 2026-05-06. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | -| Vulkan | jfk (11.0s) | 218 ms (50×)† | -| Vulkan | dots (35.3s) | 1.85 s (19×)† | -| CPU | jfk (11.0s) | 331 ms (33.22×) | -| CPU | dots (35.3s) | 3.17 s (11.15×) | +| Vulkan | jfk (11.0s) | 216 ms (50.90×) | +| Vulkan | dots (35.3s) | 1.74 s (20.28×) | +| CPU | jfk (11.0s) | 306 ms (35.95×) | +| CPU | dots (35.3s) | 3.20 s (11.03×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `f243f34` on 2026-05-06. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/moonshine-streaming-medium.md b/docs/models/moonshine-streaming-medium.md index ac1b18ce..7b1cf37b 100644 --- a/docs/models/moonshine-streaming-medium.md +++ b/docs/models/moonshine-streaming-medium.md @@ -21,9 +21,9 @@ multilingual capability, and does not emit timestamps. See Useful Sensors' [model card](https://huggingface.co/UsefulSensors/moonshine-streaming-medium) for training data, intended use, and upstream evaluation methodology. -Licensed MIT. Ported from upstream commit -[`57b8436`](https://huggingface.co/UsefulSensors/moonshine-streaming-medium/commit/57b843633a8c183cadf6699ffa761377a933a866), -pinned 2026-05-06. + +Licensed MIT. Ported from upstream commit [`57b8436`](https://huggingface.co/UsefulSensors/moonshine-streaming-medium/commit/57b8436), pinned 2026-05-06. Validated against the HF Transformers v5.7.0 reference at transcribe.cpp commit [`0d312ce`](https://github.com/handy-computer/transcribe.cpp/tree/0d312ce) on 2026-05-06. + ## Download @@ -113,16 +113,16 @@ Apple M4 Max: transcribe.cpp `0d312ce` on 2026-05-06. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | -| Vulkan | jfk (11.0s) | 570 ms (19.31×) | -| Vulkan | dots (35.3s) | 4.01 s (8.80×) | -| CPU | jfk (11.0s) | 1.07 s (10.32×) | -| CPU | dots (35.3s) | 6.50 s (5×)† | +| Vulkan | jfk (11.0s) | 560 ms (19.66×) | +| Vulkan | dots (35.3s) | 3.97 s (8.90×) | +| CPU | jfk (11.0s) | 817 ms (13.47×) | +| CPU | dots (35.3s) | 6.03 s (5.86×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `f243f34` on 2026-05-06. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: @@ -137,8 +137,7 @@ transcribe.cpp is validated tensor-by-tensor against the HF Transformers reference (`MoonshineStreamingForConditionalGeneration`, fp32 inference, `attn_implementation="eager"`) on `samples/jfk.wav`. All contract tensors fall within family tolerance, and the final transcript matches the -reference. Last validated at commit -[`0d312ce`](https://github.com/handy-computer/transcribe.cpp/tree/0d312ce). +reference. | Field | Value | | --- | --- | diff --git a/docs/models/moonshine-streaming-small.md b/docs/models/moonshine-streaming-small.md index a3b98a77..9cad6fb7 100644 --- a/docs/models/moonshine-streaming-small.md +++ b/docs/models/moonshine-streaming-small.md @@ -20,9 +20,9 @@ multilingual capability, and does not emit timestamps. See Useful Sensors' [model card](https://huggingface.co/UsefulSensors/moonshine-streaming-small) for training data, intended use, and upstream evaluation methodology. -Licensed MIT. Ported from upstream commit -[`2c03650`](https://huggingface.co/UsefulSensors/moonshine-streaming-small/commit/2c036506f23a09c18df5a50057599ba6d9280999), -pinned 2026-05-06. + +Licensed MIT. Ported from upstream commit [`2c03650`](https://huggingface.co/UsefulSensors/moonshine-streaming-small/commit/2c03650), pinned 2026-05-06. Validated against the HF Transformers v5.7.0 reference at transcribe.cpp commit [`0d312ce`](https://github.com/handy-computer/transcribe.cpp/tree/0d312ce) on 2026-05-06. + ## Download @@ -119,8 +119,7 @@ transcribe.cpp is validated tensor-by-tensor against the HF Transformers reference (`MoonshineStreamingForConditionalGeneration`, fp32 inference, `attn_implementation="eager"`) on `samples/jfk.wav`. All contract tensors fall within family tolerance, and the final transcript matches the -reference. Last validated at commit -[`0d312ce`](https://github.com/handy-computer/transcribe.cpp/tree/0d312ce). +reference. | Field | Value | | --- | --- | diff --git a/docs/models/moonshine-streaming-tiny.md b/docs/models/moonshine-streaming-tiny.md index a26e6a28..4ae23089 100644 --- a/docs/models/moonshine-streaming-tiny.md +++ b/docs/models/moonshine-streaming-tiny.md @@ -19,9 +19,9 @@ multilingual capability, and does not emit timestamps. See Useful Sensors' [model card](https://huggingface.co/UsefulSensors/moonshine-streaming-tiny) for training data, intended use, and upstream evaluation methodology. -Licensed MIT. Ported from upstream commit -[`f8e9dfd`](https://huggingface.co/UsefulSensors/moonshine-streaming-tiny/commit/f8e9dfd8c562c257c151a907b7b7f2fe8ff8511a), -pinned 2026-05-06. + +Licensed MIT. Ported from upstream commit [`f8e9dfd`](https://huggingface.co/UsefulSensors/moonshine-streaming-tiny/commit/f8e9dfd), pinned 2026-05-06. Validated against the HF Transformers v5.7.0 reference at transcribe.cpp commit [`0d312ce`](https://github.com/handy-computer/transcribe.cpp/tree/0d312ce) on 2026-05-06. + ## Download @@ -137,9 +137,8 @@ uv run scripts/bench/run.py --profile --models moonshine-streaming-tiny transcribe.cpp is validated tensor-by-tensor against the HF Transformers reference (`MoonshineStreamingForConditionalGeneration`, fp32 inference, `attn_implementation="eager"`) on `samples/jfk.wav`. All 37 contract -tensors fall within family tolerance, and the final transcript matches -the reference. Last validated at commit -[`0d312ce`](https://github.com/handy-computer/transcribe.cpp/tree/0d312ce). +tensors fall within family tolerance, and the final transcript matches the +reference. | Field | Value | | --- | --- | diff --git a/docs/models/moonshine-tiny.md b/docs/models/moonshine-tiny.md index aaff1894..5e62aa94 100644 --- a/docs/models/moonshine-tiny.md +++ b/docs/models/moonshine-tiny.md @@ -92,16 +92,16 @@ Apple M4 Max: transcribe.cpp `9824fdb` on 2026-05-06. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | -| Vulkan | jfk (11.0s) | 147 ms (74.82×) | -| Vulkan | dots (35.3s) | 1.02 s (35×)† | -| CPU | jfk (11.0s) | 163 ms (67.58×) | -| CPU | dots (35.3s) | 1.53 s (23.12×) | +| Vulkan | jfk (11.0s) | 132 ms (83.21×) | +| Vulkan | dots (35.3s) | 938 ms (37.65×) | +| CPU | jfk (11.0s) | 175 ms (62.93×) | +| CPU | dots (35.3s) | 1.79 s (19.71×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `f243f34` on 2026-05-06. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/moss-transcribe-diarize.md b/docs/models/moss-transcribe-diarize.md index 721f488f..2a56ce6d 100644 --- a/docs/models/moss-transcribe-diarize.md +++ b/docs/models/moss-transcribe-diarize.md @@ -26,9 +26,9 @@ for training data, intended use, and upstream evaluation. All of OpenMOSS's published metrics are Chinese multi-speaker diarization CER/cpCER; LibriSpeech test-clean is used here only as an English acceptance set. -Licensed Apache-2.0. Ported from upstream commit -[`d7231bb`](https://huggingface.co/OpenMOSS-Team/MOSS-Transcribe-Diarize/commit/d7231bbae2587a4af278735eb765b318c4f64edd), -pinned 2026-07-12. + +Licensed Apache-2.0. Ported from upstream commit [`d7231bb`](https://huggingface.co/OpenMOSS-Team/MOSS-Transcribe-Diarize/commit/d7231bb), pinned 2026-07-12. Validated against the MOSS author repo (OpenMOSS/MOSS-Transcribe-Diarize) reference at transcribe.cpp commit [`3f5e15c`](https://github.com/handy-computer/transcribe.cpp/tree/3f5e15c) on 2026-07-12. + ## Memory and length @@ -132,16 +132,16 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 3.88 s (2.8×)† | 3.68 s (3×)† | -| Vulkan | dots (35.3s) | 11.38 s (3.1×)† | 10.68 s (3.3×)† | -| CPU | jfk (11.0s) | 7.49 s (1.5×)† | 7.06 s (1.6×)† | -| CPU | dots (35.3s) | 21.20 s (1.7×)† | 19.22 s (1.8×)† | +| Vulkan | jfk (11.0s) | 3.73 s (2.95×) | 3.48 s (3.16×) | +| Vulkan | dots (35.3s) | 11.09 s (3.18×) | 9.95 s (3.55×) | +| CPU | jfk (11.0s) | 7.54 s (1.46×) | 6.90 s (1.59×) | +| CPU | dots (35.3s) | 21.08 s (1.68×) | 19.24 s (1.84×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: @@ -156,15 +156,14 @@ transcribe.cpp is validated tensor-by-tensor against the MOSS author repo (`scripts/dump_reference_moss_author.py`, `trust_remote_code`) on `samples/jfk.wav` with the strict CPU backend. The reference runs BF16 (torch, eager attention); the C++ path dequantizes BF16 weights to F32 and computes in -F32, so C++ is the *more* precise side and the residual gap is a constant -~1-3% relative bf16-vs-f32 drift, not a bug. The transcript compare is -`dediarized` (bracket metadata stripped to a space). Confirmed WER-neutral: on -the first 100 test-clean utterances the C++ ref-dtype WER (1.40%) is -bit-identical to the Oracle reference on the same subset (1.40%). Tolerances -are pinned in `tests/tolerances/moss.json` with a `_comment` block naming the -precision regime, the large-pre-normalization-activation maxes, and the encoder -padding-trim contract. Last validated at commit -[`3f5e15c`](https://github.com/handy-computer/transcribe.cpp/tree/3f5e15c). +F32, so C++ is the *more* precise side and the residual gap is a constant ~1-3% +relative bf16-vs-f32 drift, not a bug. The transcript compare is `dediarized` +(bracket metadata stripped to a space). Confirmed WER-neutral: on the first 100 +test-clean utterances the C++ ref-dtype WER (1.40%) is bit-identical to the +Oracle reference on the same subset (1.40%). Tolerances are pinned in +`tests/tolerances/moss.json` with a `_comment` block naming the precision +regime, the large-pre-normalization-activation maxes, and the encoder +padding-trim contract. | Field | Value | | --- | --- | diff --git a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md index 742d891a..105e12f7 100644 --- a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md +++ b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md @@ -31,10 +31,9 @@ See NVIDIA's [model card](https://huggingface.co/nvidia/multitalker-parakeet-str for training data, intended use, the multitalker methodology, and the full latency-vs-accuracy table. -Licensed under the [NVIDIA Open Model License](https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/). -Ported from upstream commit -[`8749fc7`](https://huggingface.co/nvidia/multitalker-parakeet-streaming-0.6b-v1/commit/8749fc71fd6e2d88ef230159bbf2aea69b524ee1), -pinned 2026-07-12. + +Licensed [NVIDIA Open Model License](https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/). Ported from upstream commit [`8749fc7`](https://huggingface.co/nvidia/multitalker-parakeet-streaming-0.6b-v1/commit/8749fc7), pinned 2026-07-12. Validated against the NeMo reference at transcribe.cpp commit [`3083021`](https://github.com/handy-computer/transcribe.cpp/tree/3083021) on 2026-08-03. + ## Download diff --git a/docs/models/nemotron-3.5-asr-streaming-0.6b.md b/docs/models/nemotron-3.5-asr-streaming-0.6b.md index 2acb1348..057517b8 100644 --- a/docs/models/nemotron-3.5-asr-streaming-0.6b.md +++ b/docs/models/nemotron-3.5-asr-streaming-0.6b.md @@ -35,10 +35,9 @@ See NVIDIA's [model card](https://huggingface.co/nvidia/nemotron-3.5-asr-streami for training data, the full language list, intended use, and the latency-vs-accuracy table. -Licensed under [OpenMDW-1.1](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b). -Ported from upstream commit -[`24b151a`](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b/commit/24b151a851dd15909e1fc611b11bb2da52b9fc81), -pinned 2026-06-08. + +Licensed [OpenMDW-1.1](https://openmdw.ai/license/1-1/). Ported from upstream commit [`24b151a`](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b/commit/24b151a), pinned 2026-06-08. Validated against the NeMo reference at transcribe.cpp commit [`909e94e`](https://github.com/handy-computer/transcribe.cpp/tree/909e94e) on 2026-06-08. + ## Input limits @@ -159,16 +158,16 @@ Apple M4 Max: transcribe.cpp `d9708f1` on 2026-06-08. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 769 ms (14.31×) | 780 ms (14.11×) | -| Vulkan | dots (35.3s) | 2.37 s (14.93×) | 2.37 s (14.92×) | -| CPU | jfk (11.0s) | 1.36 s (8.06×) | 1.09 s (10.11×) | -| CPU | dots (35.3s) | 4.76 s (7×)† | 4.17 s (8×)† | +| Vulkan | jfk (11.0s) | 640 ms (17.18×) | 644 ms (17.09×) | +| Vulkan | dots (35.3s) | 2.07 s (17.09×) | 2.09 s (16.88×) | +| CPU | jfk (11.0s) | 951 ms (11.56×) | 993 ms (11.07×) | +| CPU | dots (35.3s) | 3.67 s (9.62×) | 3.74 s (9.45×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `ef35659` on 2026-06-08. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/nemotron-speech-streaming-en-0.6b.md b/docs/models/nemotron-speech-streaming-en-0.6b.md index 8c58f27e..89505089 100644 --- a/docs/models/nemotron-speech-streaming-en-0.6b.md +++ b/docs/models/nemotron-speech-streaming-en-0.6b.md @@ -30,10 +30,9 @@ See NVIDIA's [model card](https://huggingface.co/nvidia/nemotron-speech-streamin for training data, intended use, streaming methodology, and the full latency-vs-accuracy table. -Licensed under the [NVIDIA Open Model License](https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/). -Ported from upstream commit -[`ef3bf40`](https://huggingface.co/nvidia/nemotron-speech-streaming-en-0.6b/commit/ef3bf40c90df5cd2de55cc07e06681e03d8e6ee4), -pinned 2026-05-11. + +Licensed [NVIDIA Open Model License](https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/). Ported from upstream commit [`ef3bf40`](https://huggingface.co/nvidia/nemotron-speech-streaming-en-0.6b/commit/ef3bf40), pinned 2026-05-11. Validated against the NeMo reference at transcribe.cpp commit [`12f1076`](https://github.com/handy-computer/transcribe.cpp/tree/12f1076) on 2026-05-11. + ## Download @@ -128,16 +127,16 @@ Apple M4 Max: transcribe.cpp `c2e7bf9` on 2026-05-11. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 808 ms (13.61×) | 810 ms (13.59×) | -| Vulkan | dots (35.3s) | 2.92 s (12.08×) | 2.98 s (11.87×) | -| CPU | jfk (11.0s) | 1.39 s (7.94×) | 1.22 s (8.99×) | -| CPU | dots (35.3s) | 5.21 s (6.78×) | 4.76 s (7×)† | +| Vulkan | jfk (11.0s) | 424 ms (25.97×) | 426 ms (25.83×) | +| Vulkan | dots (35.3s) | 1.25 s (28.32×) | 1.26 s (28.01×) | +| CPU | jfk (11.0s) | 743 ms (14.81×) | 788 ms (13.96×) | +| CPU | dots (35.3s) | 2.86 s (12.33×) | 2.93 s (12.06×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/parakeet-ctc-0.6b.md b/docs/models/parakeet-ctc-0.6b.md index 651e59df..ce73ed10 100644 --- a/docs/models/parakeet-ctc-0.6b.md +++ b/docs/models/parakeet-ctc-0.6b.md @@ -20,9 +20,9 @@ on this codebase. See NVIDIA's [model card](https://huggingface.co/nvidia/parakeet-ctc-0.6b) for training data, intended use, and upstream evaluation methodology. -Licensed CC-BY-4.0. Ported from upstream commit -[`ad09ba1`](https://huggingface.co/nvidia/parakeet-ctc-0.6b/commit/ad09ba1cc62743fbc9814de5d2016fca9096485a), -pinned 2026-05-10. + +Licensed CC-BY-4.0. Ported from upstream commit [`ad09ba1`](https://huggingface.co/nvidia/parakeet-ctc-0.6b/commit/ad09ba1), pinned 2026-05-10. Validated against the NeMo reference at transcribe.cpp commit [`42528dd`](https://github.com/handy-computer/transcribe.cpp/tree/42528dd) on 2026-05-10. + ## Download diff --git a/docs/models/parakeet-ctc-1.1b.md b/docs/models/parakeet-ctc-1.1b.md index 5c494d8f..b06dfebb 100644 --- a/docs/models/parakeet-ctc-1.1b.md +++ b/docs/models/parakeet-ctc-1.1b.md @@ -20,9 +20,9 @@ LibriSpeech test-clean over the 0.6B sibling. See NVIDIA's [model card](https://huggingface.co/nvidia/parakeet-ctc-1.1b) for training data, intended use, and upstream evaluation methodology. -Licensed CC-BY-4.0. Ported from upstream commit -[`a707e81`](https://huggingface.co/nvidia/parakeet-ctc-1.1b/commit/a707e818195cb97c8f7da2fc36b221a29f69a5db), -pinned 2026-05-10. + +Licensed CC-BY-4.0. Ported from upstream commit [`a707e81`](https://huggingface.co/nvidia/parakeet-ctc-1.1b/commit/a707e81), pinned 2026-05-10. Validated against the NeMo reference at transcribe.cpp commit [`42528dd`](https://github.com/handy-computer/transcribe.cpp/tree/42528dd) on 2026-05-10. + ## Download diff --git a/docs/models/parakeet-primeline.md b/docs/models/parakeet-primeline.md index b1c990ae..3dc6430c 100644 --- a/docs/models/parakeet-primeline.md +++ b/docs/models/parakeet-primeline.md @@ -25,9 +25,9 @@ correct per-language casing and punctuation, so all 25 v3 languages remain usable. Pick this variant when German is your primary workload and `parakeet-tdt-0.6b-v3` when it is not. -Licensed CC-BY-4.0. Ported from upstream commit -[`3f1a9bc`](https://huggingface.co/primeline/parakeet-primeline/commit/3f1a9bcb611dfeda53fe74fe5f1a3d5701e8023e), -pinned 2026-08-16. + +Licensed CC-BY-4.0. Ported from upstream commit [`3f1a9bc`](https://huggingface.co/primeline/parakeet-primeline/commit/3f1a9bc), pinned 2026-08-16. Validated against the NeMo reference at transcribe.cpp commit [`856d7c1`](https://github.com/handy-computer/transcribe.cpp/tree/856d7c1) on 2026-08-16. + ## Download diff --git a/docs/models/parakeet-rnnt-0.6b.md b/docs/models/parakeet-rnnt-0.6b.md index 3e78ca4b..2feeecaf 100644 --- a/docs/models/parakeet-rnnt-0.6b.md +++ b/docs/models/parakeet-rnnt-0.6b.md @@ -22,9 +22,9 @@ than the CTC variant at the same encoder size. See NVIDIA's [model card](https://huggingface.co/nvidia/parakeet-rnnt-0.6b) for training data, intended use, and upstream evaluation methodology. -Licensed CC-BY-4.0. Ported from upstream commit -[`c0c1f09`](https://huggingface.co/nvidia/parakeet-rnnt-0.6b/commit/c0c1f09fdc3f18b0b2ddbeafd5d6684f1b38078f), -pinned 2026-05-10. + +Licensed CC-BY-4.0. Ported from upstream commit [`c0c1f09`](https://huggingface.co/nvidia/parakeet-rnnt-0.6b/commit/c0c1f09), pinned 2026-05-10. Validated against the NeMo reference at transcribe.cpp commit [`42528dd`](https://github.com/handy-computer/transcribe.cpp/tree/42528dd) on 2026-05-10. + ## Download @@ -93,16 +93,16 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 738 ms (14.90×) | 751 ms (14.65×) | -| Vulkan | dots (35.3s) | 2.54 s (13.88×) | 2.59 s (13.67×) | -| CPU | jfk (11.0s) | 1.24 s (8.86×) | 1.07 s (10.32×) | -| CPU | dots (35.3s) | 4.71 s (7×)† | 4.14 s (9×)† | +| Vulkan | jfk (11.0s) | 425 ms (25.87×) | 431 ms (25.51×) | +| Vulkan | dots (35.3s) | 1.25 s (28.33×) | 1.27 s (27.86×) | +| CPU | jfk (11.0s) | 675 ms (16.30×) | 720 ms (15.29×) | +| CPU | dots (35.3s) | 2.64 s (13.39×) | 2.71 s (13.05×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/parakeet-rnnt-1.1b.md b/docs/models/parakeet-rnnt-1.1b.md index c455e495..0684c141 100644 --- a/docs/models/parakeet-rnnt-1.1b.md +++ b/docs/models/parakeet-rnnt-1.1b.md @@ -20,9 +20,9 @@ On our LibriSpeech test-clean runs `parakeet-tdt-1.1b` edges it out (1.38% vs See NVIDIA's [model card](https://huggingface.co/nvidia/parakeet-rnnt-1.1b) for training data, intended use, and upstream evaluation methodology. -Licensed CC-BY-4.0. Ported from upstream commit -[`a07b19e`](https://huggingface.co/nvidia/parakeet-rnnt-1.1b/commit/a07b19e9), -pinned 2026-05-10. + +Licensed CC-BY-4.0. Ported from upstream commit [`a07b19e`](https://huggingface.co/nvidia/parakeet-rnnt-1.1b/commit/a07b19e), pinned 2026-05-10. Validated against the NeMo reference at transcribe.cpp commit [`42528dd`](https://github.com/handy-computer/transcribe.cpp/tree/42528dd) on 2026-05-10. + ## Download diff --git a/docs/models/parakeet-tdt-0.6b-v2.md b/docs/models/parakeet-tdt-0.6b-v2.md index c4ac1686..6d2cc4b3 100644 --- a/docs/models/parakeet-tdt-0.6b-v2.md +++ b/docs/models/parakeet-tdt-0.6b-v2.md @@ -19,9 +19,9 @@ see v3. See NVIDIA's [model card](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2) for training data, intended use, and upstream evaluation methodology. -Licensed CC-BY-4.0. Ported from upstream commit -[`1b149a3`](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2/commit/1b149a3589351c96ddb101709fe7dd9c7069572f), -pinned 2026-04-15. + +Licensed CC-BY-4.0. Ported from upstream commit [`1b149a3`](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2/commit/1b149a3), pinned 2026-04-15. Validated against the NeMo reference at transcribe.cpp commit [`bf0d0b7`](https://github.com/handy-computer/transcribe.cpp/tree/bf0d0b7) on 2026-04-18. + ## Download @@ -91,16 +91,16 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 670 ms (16.42×) | 682 ms (16.13×) | -| Vulkan | dots (35.3s) | 2.45 s (14.44×) | 2.44 s (14.51×) | -| CPU | jfk (11.0s) | 1.23 s (8.97×) | 1.05 s (10.51×) | -| CPU | dots (35.3s) | 4.75 s (7×)† | 4.14 s (9×)† | +| Vulkan | jfk (11.0s) | 416 ms (26.45×) | 418 ms (26.34×) | +| Vulkan | dots (35.3s) | 1.24 s (28.42×) | 1.26 s (28.09×) | +| CPU | jfk (11.0s) | 696 ms (15.81×) | 749 ms (14.69×) | +| CPU | dots (35.3s) | 2.77 s (12.73×) | 2.83 s (12.48×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: @@ -113,8 +113,7 @@ uv run scripts/bench/run.py --profile --models parakeet-tdt-0.6b-v2 transcribe.cpp is validated tensor-by-tensor against NeMo on `samples/jfk.wav`. All 18 checkpointed tensors fall within family tolerance, and the final -transcript matches the NeMo reference verbatim. Last validated at commit -[`bf0d0b7`](https://github.com/handy-computer/transcribe.cpp/tree/bf0d0b7). +transcript matches the NeMo reference verbatim. | Field | Value | | --- | --- | diff --git a/docs/models/parakeet-tdt-0.6b-v3.md b/docs/models/parakeet-tdt-0.6b-v3.md index b02cb505..303dbae6 100644 --- a/docs/models/parakeet-tdt-0.6b-v3.md +++ b/docs/models/parakeet-tdt-0.6b-v3.md @@ -22,9 +22,9 @@ Spanish, Swedish, Ukrainian. See NVIDIA's [model card](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3) for training data, intended use, and upstream evaluation methodology. -Licensed CC-BY-4.0. Ported from upstream commit -[`6d590f7`](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3/commit/6d590f77001d318fb17a0b5bf7ee329a91b52598), -pinned 2026-04-16. + +Licensed CC-BY-4.0. Ported from upstream commit [`6d590f7`](https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3/commit/6d590f7), pinned 2026-04-16. Validated against the NeMo reference at transcribe.cpp commit [`bf0d0b7`](https://github.com/handy-computer/transcribe.cpp/tree/bf0d0b7) on 2026-04-18. + ## Download @@ -117,16 +117,16 @@ Apple M4 Max: transcribe.cpp `140ed3a` on 2026-04-16. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 854 ms (12.88×) | 864 ms (12.72×) | -| Vulkan | dots (35.3s) | 3.06 s (11.54×) | 3.10 s (11.42×) | -| CPU | jfk (11.0s) | 1.41 s (7.80×) | 1.22 s (9.01×) | -| CPU | dots (35.3s) | 5.34 s (7×)† | 4.78 s (7×)† | +| Vulkan | jfk (11.0s) | 453 ms (24.29×) | 458 ms (24.01×) | +| Vulkan | dots (35.3s) | 1.37 s (25.84×) | 1.39 s (25.50×) | +| CPU | jfk (11.0s) | 729 ms (15.09×) | 794 ms (13.86×) | +| CPU | dots (35.3s) | 2.89 s (12.22×) | 2.97 s (11.89×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: @@ -139,8 +139,7 @@ uv run scripts/bench/run.py --profile --models parakeet-tdt-0.6b-v3 transcribe.cpp is validated tensor-by-tensor against NeMo on `samples/jfk.wav`. All 18 checkpointed tensors fall within family tolerance, and the final -transcript matches the NeMo reference verbatim. Last validated at commit -[`bf0d0b7`](https://github.com/handy-computer/transcribe.cpp/tree/bf0d0b7). +transcript matches the NeMo reference verbatim. | Field | Value | | --- | --- | diff --git a/docs/models/parakeet-tdt-1.1b.md b/docs/models/parakeet-tdt-1.1b.md index de41935a..bff9c1bf 100644 --- a/docs/models/parakeet-tdt-1.1b.md +++ b/docs/models/parakeet-tdt-1.1b.md @@ -21,9 +21,9 @@ each step can advance more than one frame. See NVIDIA's [model card](https://huggingface.co/nvidia/parakeet-tdt-1.1b) for training data, intended use, and upstream evaluation methodology. -Licensed CC-BY-4.0. Ported from upstream commit -[`53276c6`](https://huggingface.co/nvidia/parakeet-tdt-1.1b/commit/53276c64), -pinned 2026-05-10. + +Licensed CC-BY-4.0. Ported from upstream commit [`53276c6`](https://huggingface.co/nvidia/parakeet-tdt-1.1b/commit/53276c6), pinned 2026-05-10. Validated against the NeMo reference at transcribe.cpp commit [`42528dd`](https://github.com/handy-computer/transcribe.cpp/tree/42528dd) on 2026-05-10. + ## Download @@ -92,16 +92,16 @@ Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 961 ms (11.45×) | 936 ms (11.75×) | -| Vulkan | dots (35.3s) | 3.02 s (11.70×) | 2.99 s (11.80×) | -| CPU | jfk (11.0s) | 1.92 s (5.74×) | 1.49 s (7×)† | -| CPU | dots (35.3s) | 6.81 s (5.19×) | 5.93 s (5.96×) | +| Vulkan | jfk (11.0s) | 694 ms (15.86×) | 706 ms (15.58×) | +| Vulkan | dots (35.3s) | 2.07 s (17.03×) | 2.12 s (16.65×) | +| CPU | jfk (11.0s) | 1.12 s (9.82×) | 1.21 s (9.08×) | +| CPU | dots (35.3s) | 4.54 s (7.79×) | 4.66 s (7.57×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/parakeet-tdt_ctc-1.1b.md b/docs/models/parakeet-tdt_ctc-1.1b.md index db887139..12e14ab8 100644 --- a/docs/models/parakeet-tdt_ctc-1.1b.md +++ b/docs/models/parakeet-tdt_ctc-1.1b.md @@ -19,9 +19,9 @@ to duration-aware frame skipping. See NVIDIA's [model card](https://huggingface.co/nvidia/parakeet-tdt_ctc-1.1b) for training data, intended use, and upstream evaluation methodology. -Licensed CC-BY-4.0. Ported from upstream commit -[`675e786`](https://huggingface.co/nvidia/parakeet-tdt_ctc-1.1b/commit/675e786), -pinned 2026-05-10. + +Licensed CC-BY-4.0. Ported from upstream commit [`675e786`](https://huggingface.co/nvidia/parakeet-tdt_ctc-1.1b/commit/675e786), pinned 2026-05-10. Validated against the NeMo reference at transcribe.cpp commit [`42528dd`](https://github.com/handy-computer/transcribe.cpp/tree/42528dd) on 2026-05-10. + ## Download @@ -90,16 +90,16 @@ Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before prove ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 973 ms (11.30×) | 988 ms (11.14×) | -| Vulkan | dots (35.3s) | 3.13 s (11.29×) | 3.13 s (11.29×) | -| CPU | jfk (11.0s) | 1.88 s (5.85×) | 1.53 s (7.18×) | -| CPU | dots (35.3s) | 6.54 s (5×)† | 5.62 s (6.28×) | +| Vulkan | jfk (11.0s) | 698 ms (15.76×) | 706 ms (15.59×) | +| Vulkan | dots (35.3s) | 1.93 s (18.32×) | 1.96 s (18.06×) | +| CPU | jfk (11.0s) | 1.10 s (10.03×) | 1.20 s (9.18×) | +| CPU | dots (35.3s) | 4.11 s (8.60×) | 4.23 s (8.35×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/parakeet-tdt_ctc-110m.md b/docs/models/parakeet-tdt_ctc-110m.md index cd82d7cd..239f69c7 100644 --- a/docs/models/parakeet-tdt_ctc-110m.md +++ b/docs/models/parakeet-tdt_ctc-110m.md @@ -17,9 +17,9 @@ It is not a streaming model and does not translate. See NVIDIA's [model card](https://huggingface.co/nvidia/parakeet-tdt_ctc-110m) for training data, intended use, and upstream evaluation methodology. -Licensed CC-BY-4.0. Ported from upstream commit -[`431a349`](https://huggingface.co/nvidia/parakeet-tdt_ctc-110m/commit/431a349f3051ab85c22b9b7a2741b5fe77065665), -pinned 2026-05-10. + +Licensed CC-BY-4.0. Ported from upstream commit [`431a349`](https://huggingface.co/nvidia/parakeet-tdt_ctc-110m/commit/431a349), pinned 2026-05-10. Validated against the NeMo reference at transcribe.cpp commit [`42528dd`](https://github.com/handy-computer/transcribe.cpp/tree/42528dd) on 2026-05-10. + ## Download diff --git a/docs/models/parakeet-unified-en-0.6b.md b/docs/models/parakeet-unified-en-0.6b.md index 684af2b0..e1ca81c9 100644 --- a/docs/models/parakeet-unified-en-0.6b.md +++ b/docs/models/parakeet-unified-en-0.6b.md @@ -34,9 +34,9 @@ See NVIDIA's [model card](https://huggingface.co/nvidia/parakeet-unified-en-0.6b for training data, intended use, streaming methodology, and upstream evaluation results. -Licensed CC-BY-4.0. Ported from upstream commit -[`d4ac992`](https://huggingface.co/nvidia/parakeet-unified-en-0.6b/commit/d4ac9928), -pinned 2026-05-10. + +Licensed CC-BY-4.0. Ported from upstream commit [`d4ac992`](https://huggingface.co/nvidia/parakeet-unified-en-0.6b/commit/d4ac992), pinned 2026-05-10. Validated against the NeMo reference at transcribe.cpp commit [`42528dd`](https://github.com/handy-computer/transcribe.cpp/tree/42528dd) on 2026-05-10. + ## Download diff --git a/docs/models/qwen3-asr-0.6b.md b/docs/models/qwen3-asr-0.6b.md index 09f8995a..4100f80d 100644 --- a/docs/models/qwen3-asr-0.6b.md +++ b/docs/models/qwen3-asr-0.6b.md @@ -1,7 +1,7 @@ # Qwen3-ASR 0.6B -Upstream: [`Qwen/Qwen3-ASR-0.6B`](https://huggingface.co/Qwen/Qwen3-ASR-0.6B) at [`5eb144179a02acc5e5ba31e748d22b0cf3e303b0`](https://huggingface.co/Qwen/Qwen3-ASR-0.6B/commit/5eb144179a02acc5e5ba31e748d22b0cf3e303b0). +Upstream: [`Qwen/Qwen3-ASR-0.6B`](https://huggingface.co/Qwen/Qwen3-ASR-0.6B) at [`5eb1441`](https://huggingface.co/Qwen/Qwen3-ASR-0.6B/commit/5eb1441). Offline multilingual speech-to-text. An 18-layer bidirectional audio encoder feeds a 28-layer Qwen3 causal LM with audio-token injection (fused @@ -22,9 +22,11 @@ See the [Qwen3-ASR model card](https://huggingface.co/Qwen/Qwen3-ASR-0.6B) for training data, intended use, and upstream evaluation methodology. -Licensed Apache-2.0 (weights) / Apache-2.0 (author `qwen_asr` package). -Ported from upstream commit -[`5eb1441`](https://huggingface.co/Qwen/Qwen3-ASR-0.6B/commit/5eb144179a02acc5e5ba31e748d22b0cf3e303b0). + +Licensed Apache-2.0. Ported from upstream commit [`5eb1441`](https://huggingface.co/Qwen/Qwen3-ASR-0.6B/commit/5eb1441), pinned 2026-04-19. Validated against the qwen_asr 0.0.6 reference at transcribe.cpp commit [`3f61df7`](https://github.com/handy-computer/transcribe.cpp/tree/3f61df7) on 2026-04-20. + + +The author's `qwen_asr` package is likewise Apache-2.0. ## Download @@ -161,12 +163,10 @@ uv run scripts/bench/run.py --profile --models qwen3-asr-0.6b ## Numerical Validation -transcribe.cpp is validated tensor-by-tensor against the author -reference implementation (`qwen_asr` 0.0.6 / transformers 4.57.6) on -`samples/jfk.wav`. All 13 checkpointed tensors fall within family -tolerance on CPU / Metal / Vulkan, and the transcript matches the -reference verbatim. Last validated at commit -[`3f61df7`](https://github.com/handy-computer/transcribe.cpp/tree/3f61df7). +transcribe.cpp is validated tensor-by-tensor against the author reference +implementation (`qwen_asr` 0.0.6 / transformers 4.57.6) on +`samples/jfk.wav`. All 13 checkpointed tensors fall within family tolerance +on CPU / Metal / Vulkan, and the transcript matches the reference verbatim. | Field | Value | | --- | --- | diff --git a/docs/models/qwen3-asr-1.7b.md b/docs/models/qwen3-asr-1.7b.md index 47d8ccf9..7f788cba 100644 --- a/docs/models/qwen3-asr-1.7b.md +++ b/docs/models/qwen3-asr-1.7b.md @@ -1,7 +1,7 @@ # Qwen3-ASR 1.7B -Upstream: [`Qwen/Qwen3-ASR-1.7B`](https://huggingface.co/Qwen/Qwen3-ASR-1.7B) at [`7278e1e70fe206f11671096ffdd38061171dd6e5`](https://huggingface.co/Qwen/Qwen3-ASR-1.7B/commit/7278e1e70fe206f11671096ffdd38061171dd6e5). +Upstream: [`Qwen/Qwen3-ASR-1.7B`](https://huggingface.co/Qwen/Qwen3-ASR-1.7B) at [`7278e1e`](https://huggingface.co/Qwen/Qwen3-ASR-1.7B/commit/7278e1e). Offline multilingual speech-to-text. Same audio-LLM architecture as the 0.6B variant (bidirectional audio encoder feeding a Qwen3 causal LM with @@ -22,9 +22,11 @@ See the [Qwen3-ASR-1.7B model card](https://huggingface.co/Qwen/Qwen3-ASR-1.7B) for training data and upstream evaluation. -Licensed Apache-2.0 (weights) / Apache-2.0 (author `qwen_asr` package). -Ported from upstream commit -[`7278e1e`](https://huggingface.co/Qwen/Qwen3-ASR-1.7B/commit/7278e1e70fe206f11671096ffdd38061171dd6e5). + +Licensed Apache-2.0. Ported from upstream commit [`7278e1e`](https://huggingface.co/Qwen/Qwen3-ASR-1.7B/commit/7278e1e), pinned 2026-04-19. Validated against the qwen_asr 0.0.6 reference at transcribe.cpp commit [`3f61df7`](https://github.com/handy-computer/transcribe.cpp/tree/3f61df7) on 2026-04-20. + + +The author's `qwen_asr` package is likewise Apache-2.0. ## Download diff --git a/docs/models/sensevoice-small.md b/docs/models/sensevoice-small.md index 343b4b91..92c545b7 100644 --- a/docs/models/sensevoice-small.md +++ b/docs/models/sensevoice-small.md @@ -1,7 +1,7 @@ # SenseVoice Small -Upstream: [`FunAudioLLM/SenseVoiceSmall`](https://huggingface.co/FunAudioLLM/SenseVoiceSmall) at [`3eb3b4eeffc2f2dde6051b853983753db33e35c3`](https://huggingface.co/FunAudioLLM/SenseVoiceSmall/commit/3eb3b4eeffc2f2dde6051b853983753db33e35c3). +Upstream: [`FunAudioLLM/SenseVoiceSmall`](https://huggingface.co/FunAudioLLM/SenseVoiceSmall) at [`3eb3b4e`](https://huggingface.co/FunAudioLLM/SenseVoiceSmall/commit/3eb3b4e). Offline multilingual speech-to-text in Chinese, Cantonese, English, Japanese, and Korean. A 234M-parameter SAN-M encoder with a single CTC head over a @@ -56,12 +56,11 @@ numbers below are measured with ITN **off**, matching the reference runs; see See FunAudioLLM's [model card](https://huggingface.co/FunAudioLLM/SenseVoiceSmall) for training data, intended use, and upstream evaluation methodology. -Licensed under the **FunASR Model Open Source License Agreement** — -the legacy "model-license" form -([MODEL_LICENSE](https://github.com/modelscope/FunASR/blob/main/MODEL_LICENSE)). -Ported from upstream commit -[`3eb3b4e`](https://huggingface.co/FunAudioLLM/SenseVoiceSmall/commit/3eb3b4eeffc2f2dde6051b853983753db33e35c3), -pinned 2026-05-06. + +Licensed [model-license (FunASR MODEL_LICENSE)](https://github.com/modelscope/FunASR/blob/main/MODEL_LICENSE). Ported from upstream commit [`3eb3b4e`](https://huggingface.co/FunAudioLLM/SenseVoiceSmall/commit/3eb3b4e), pinned 2026-05-06. Validated against the FunASR reference at transcribe.cpp commit [`f094d28`](https://github.com/handy-computer/transcribe.cpp/tree/f094d28) on 2026-05-06. + + +This is the legacy `model-license` form of the agreement. ## Input limits @@ -194,12 +193,11 @@ uv run scripts/bench/run.py --profile --models sensevoice-small ## Numerical Validation -transcribe.cpp is validated tensor-by-tensor against FunASR 1.3.1 -on `samples/jfk.wav`. All 16 checkpointed tensors fall within family +transcribe.cpp is validated tensor-by-tensor against FunASR 1.3.1 on +`samples/jfk.wav`. All 16 checkpointed tensors fall within family tolerance, and the final transcript matches the FunASR reference verbatim (both spelled `… laled out …` on token `1089-134686-0000` — a quirk of -SenseVoice, not a port defect). Last validated at commit -[`f094d28`](https://github.com/handy-computer/transcribe.cpp/tree/f094d28). +SenseVoice, not a port defect). | Field | Value | | --- | --- | diff --git a/docs/models/voxtral-mini-3b-2507.md b/docs/models/voxtral-mini-3b-2507.md index 8238a5a6..0d3eeac5 100644 --- a/docs/models/voxtral-mini-3b-2507.md +++ b/docs/models/voxtral-mini-3b-2507.md @@ -28,9 +28,9 @@ mono WAV and produces a transcript via greedy decoding. See Mistral's [model card](https://huggingface.co/mistralai/Voxtral-Mini-3B-2507) for training data, intended use, and upstream evaluation. -Licensed Apache-2.0. Ported from upstream commit -[`3060fe3`](https://huggingface.co/mistralai/Voxtral-Mini-3B-2507/commit/3060fe34b35ba5d44202ce9ff3c097642914f8f3), -pinned 2026-06-06. + +Licensed Apache-2.0. Ported from upstream commit [`3060fe3`](https://huggingface.co/mistralai/Voxtral-Mini-3B-2507/commit/3060fe3), pinned 2026-06-06. Validated against the Transformers reference at transcribe.cpp commit [`483c122`](https://github.com/handy-computer/transcribe.cpp/tree/483c122) on 2026-06-06. + ## Download @@ -126,16 +126,16 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 9.57 s (1.15×) | 9.37 s (1.17×) | -| Vulkan | dots (35.3s) | 26.49 s (1.33×) | 23.82 s (1.48×) | -| CPU | jfk (11.0s) | 26.15 s (0.4×)† | 19.39 s (0.6×)† | -| CPU | dots (35.3s) | 63.96 s (0.6×)† | 45.92 s (0.77×) | +| Vulkan | jfk (11.0s) | 11.11 s (0.99×) | 10.58 s (1.04×) | +| Vulkan | dots (35.3s) | 30.04 s (1.18×) | 27.46 s (1.29×) | +| CPU | jfk (11.0s) | 22.37 s (0.49×) | 20.88 s (0.53×) | +| CPU | dots (35.3s) | 55.99 s (0.63×) | 49.49 s (0.71×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `91af262` on 2026-06-05. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/voxtral-realtime.md b/docs/models/voxtral-realtime.md index 1758fc5a..862434f5 100644 --- a/docs/models/voxtral-realtime.md +++ b/docs/models/voxtral-realtime.md @@ -12,9 +12,11 @@ delay-token latency conditioning emits one text token per 80 ms audio slot Architecturally distinct from the offline [Voxtral 2507](voxtral.md) family (own arch, streaming frontend with a fixed global log-mel max, causal encoder, additive fusion, ada-norm FFN scaling) — it shares only the projector shape -and the tekken tokenizer. Licensed Apache-2.0. Ported from upstream commit -[`2769294`](https://huggingface.co/mistralai/Voxtral-Mini-4B-Realtime-2602/commit/2769294), -pinned 2026-06-06. +and the tekken tokenizer. + + +Licensed Apache-2.0. Ported from upstream commit [`2769294`](https://huggingface.co/mistralai/Voxtral-Mini-4B-Realtime-2602/commit/2769294), pinned 2026-06-06. Validated against the Transformers reference at transcribe.cpp commit [`483c122`](https://github.com/handy-computer/transcribe.cpp/tree/483c122) on 2026-06-06. + ## What it's for @@ -108,16 +110,16 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Vulkan | jfk (11.0s) | 12.62 s (0.87×)† | 10.97 s (1×)† | -| Vulkan | dots (35.3s) | 39.29 s (0.9×)† | 33.51 s (1.05×)† | -| CPU | jfk (11.0s) | 19.54 s (0.56×)† | 13.80 s (0.8×)† | -| CPU | dots (35.3s) | 58.00 s (0.61×)† | 41.54 s (0.85×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 14.95 s (0.74×) | 13.17 s (0.84×) | +| Vulkan | dots (35.3s) | 45.03 s (0.78×) | 39.16 s (0.90×) | +| CPU | jfk (11.0s) | 19.76 s (0.56×) | 16.39 s (0.67×) | +| CPU | dots (35.3s) | 57.92 s (0.61×) | 46.12 s (0.77×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/voxtral-small-24b-2507.md b/docs/models/voxtral-small-24b-2507.md index cbe5beea..18b938dc 100644 --- a/docs/models/voxtral-small-24b-2507.md +++ b/docs/models/voxtral-small-24b-2507.md @@ -26,9 +26,9 @@ mono WAV and produces a transcript via greedy decoding. See Mistral's [model card](https://huggingface.co/mistralai/Voxtral-Small-24B-2507) for training data, intended use, and upstream evaluation. -Licensed Apache-2.0. Ported from upstream commit -[`da5b424`](https://huggingface.co/mistralai/Voxtral-Small-24B-2507/commit/da5b42409f279fdd92febee0511a6c32828569c1), -pinned 2026-06-05. + +Licensed Apache-2.0. Ported from upstream commit [`da5b424`](https://huggingface.co/mistralai/Voxtral-Small-24B-2507/commit/da5b424), pinned 2026-06-05. Validated against the Transformers reference at transcribe.cpp commit [`dac22fa`](https://github.com/handy-computer/transcribe.cpp/tree/dac22fa) on 2026-06-05. + ## Download diff --git a/docs/models/whisper-base.en.md b/docs/models/whisper-base.en.md index e97d6d65..4f065f15 100644 --- a/docs/models/whisper-base.en.md +++ b/docs/models/whisper-base.en.md @@ -93,16 +93,16 @@ uv run scripts/bench/run.py --profile --models whisper-base.en ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 327 ms (33.6×)† | 337 ms (32.7×)† | -| Vulkan | dots (35.3s) | 909 ms (38.9×)† | 912 ms (38.7×)† | -| CPU | jfk (11.0s) | 1.01 s (10.85×) | 836 ms (13.16×) | -| CPU | dots (35.3s) | 2.41 s (14.68×) | 2.19 s (16.15×) | +| Vulkan | jfk (11.0s) | 376 ms (29.22×) | 385 ms (28.56×) | +| Vulkan | dots (35.3s) | 1.01 s (34.81×) | 1.06 s (33.38×) | +| CPU | jfk (11.0s) | 589 ms (18.68×) | 575 ms (19.14×) | +| CPU | dots (35.3s) | 1.57 s (22.52×) | 1.50 s (23.60×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-base.md b/docs/models/whisper-base.md index ac6a217a..34333dea 100644 --- a/docs/models/whisper-base.md +++ b/docs/models/whisper-base.md @@ -173,16 +173,16 @@ uv run scripts/bench/run.py --profile --models whisper-base ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 351 ms (31.3×)† | 356 ms (30.9×)† | -| Vulkan | dots (35.3s) | 922 ms (38.3×)† | 946 ms (37.4×)† | -| CPU | jfk (11.0s) | 1.11 s (9.95×) | 913 ms (12.05×) | -| CPU | dots (35.3s) | 2.54 s (13.92×) | 2.27 s (15.53×) | +| Vulkan | jfk (11.0s) | 382 ms (28.80×) | 408 ms (27.00×) | +| Vulkan | dots (35.3s) | 1.21 s (29.23×) | 1.21 s (29.14×) | +| CPU | jfk (11.0s) | 646 ms (17.03×) | 635 ms (17.32×) | +| CPU | dots (35.3s) | 1.63 s (21.63×) | 1.56 s (22.63×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-large-v2.md b/docs/models/whisper-large-v2.md index bfd65869..c601a026 100644 --- a/docs/models/whisper-large-v2.md +++ b/docs/models/whisper-large-v2.md @@ -173,16 +173,16 @@ uv run scripts/bench/run.py --profile --models whisper-large-v2 ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 6.27 s (1.75×) | 6.35 s (1.73×) | -| Vulkan | dots (35.3s) | 14.29 s (2.5×)† | 13.68 s (2.6×)† | -| CPU | jfk (11.0s) | 25.73 s (0.4×)† | 19.46 s (0.6×)† | -| CPU | dots (35.3s) | 53.75 s (0.7×)† | 43.11 s (0.82×) | +| Vulkan | jfk (11.0s) | 6.48 s (1.70×) | 6.51 s (1.69×) | +| Vulkan | dots (35.3s) | 15.24 s (2.32×) | 15.05 s (2.35×) | +| CPU | jfk (11.0s) | 13.96 s (0.79×) | 13.69 s (0.80×) | +| CPU | dots (35.3s) | 31.19 s (1.13×) | 29.47 s (1.20×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-large-v3.md b/docs/models/whisper-large-v3.md index 9b0fb1a9..e1234bad 100644 --- a/docs/models/whisper-large-v3.md +++ b/docs/models/whisper-large-v3.md @@ -173,16 +173,16 @@ uv run scripts/bench/run.py --profile --models whisper-large-v3 ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 6.40 s (1.72×) | 6.07 s (1.8×)† | -| Vulkan | dots (35.3s) | 14.42 s (2.5×)† | 13.75 s (2.6×)† | -| CPU | jfk (11.0s) | 25.59 s (0.4×)† | 19.96 s (0.6×)† | -| CPU | dots (35.3s) | 53.80 s (0.7×)† | 43.18 s (0.82×) | +| Vulkan | jfk (11.0s) | 6.60 s (1.67×) | 6.63 s (1.66×) | +| Vulkan | dots (35.3s) | 15.20 s (2.32×) | 15.05 s (2.35×) | +| CPU | jfk (11.0s) | 13.60 s (0.81×) | 12.95 s (0.85×) | +| CPU | dots (35.3s) | 31.24 s (1.13×) | 28.10 s (1.26×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-large.md b/docs/models/whisper-large.md index fa334655..35a5f0ab 100644 --- a/docs/models/whisper-large.md +++ b/docs/models/whisper-large.md @@ -173,16 +173,16 @@ uv run scripts/bench/run.py --profile --models whisper-large ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 6.27 s (1.75×) | 6.13 s (1.8×)† | -| Vulkan | dots (35.3s) | 14.41 s (2.5×)† | 13.72 s (2.6×)† | -| CPU | jfk (11.0s) | 26.18 s (0.42×) | 19.83 s (0.6×)† | -| CPU | dots (35.3s) | 55.64 s (0.6×)† | 43.98 s (0.80×) | +| Vulkan | jfk (11.0s) | 6.48 s (1.70×) | 6.51 s (1.69×) | +| Vulkan | dots (35.3s) | 15.31 s (2.31×) | 15.11 s (2.34×) | +| CPU | jfk (11.0s) | 14.00 s (0.79×) | 13.57 s (0.81×) | +| CPU | dots (35.3s) | 31.33 s (1.13×) | 29.55 s (1.20×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-medium.en.md b/docs/models/whisper-medium.en.md index 4cc97f28..d000b808 100644 --- a/docs/models/whisper-medium.en.md +++ b/docs/models/whisper-medium.en.md @@ -93,16 +93,16 @@ uv run scripts/bench/run.py --profile --models whisper-medium.en ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 2.88 s (3.82×) | 2.55 s (4.3×)† | -| Vulkan | dots (35.3s) | 6.76 s (5.2×)† | 6.44 s (5.5×)† | -| CPU | jfk (11.0s) | 11.53 s (0.95×) | 9.36 s (1.18×) | -| CPU | dots (35.3s) | 26.63 s (1.33×) | 21.07 s (1.68×) | +| Vulkan | jfk (11.0s) | 2.71 s (4.07×) | 2.65 s (4.16×) | +| Vulkan | dots (35.3s) | 7.46 s (4.74×) | 7.06 s (5.01×) | +| CPU | jfk (11.0s) | 6.20 s (1.77×) | 5.94 s (1.85×) | +| CPU | dots (35.3s) | 14.99 s (2.36×) | 14.01 s (2.52×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-medium.md b/docs/models/whisper-medium.md index aa552626..9819ae57 100644 --- a/docs/models/whisper-medium.md +++ b/docs/models/whisper-medium.md @@ -173,16 +173,16 @@ uv run scripts/bench/run.py --profile --models whisper-medium ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 3.00 s (3.7×)† | 2.83 s (3.9×)† | -| Vulkan | dots (35.3s) | 7.03 s (5×)† | 6.77 s (5.2×)† | -| CPU | jfk (11.0s) | 13.14 s (0.84×) | 10.47 s (1.05×) | -| CPU | dots (35.3s) | 27.87 s (1.27×) | 22.57 s (1.56×) | +| Vulkan | jfk (11.0s) | 3.04 s (3.62×) | 3.01 s (3.65×) | +| Vulkan | dots (35.3s) | 7.77 s (4.55×) | 7.40 s (4.77×) | +| CPU | jfk (11.0s) | 6.93 s (1.59×) | 6.65 s (1.65×) | +| CPU | dots (35.3s) | 15.60 s (2.26×) | 14.67 s (2.41×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `5fccd5d` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-small.en.md b/docs/models/whisper-small.en.md index 6e19ca79..a57d29c2 100644 --- a/docs/models/whisper-small.en.md +++ b/docs/models/whisper-small.en.md @@ -93,16 +93,16 @@ uv run scripts/bench/run.py --profile --models whisper-small.en ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 970 ms (11.3×)† | 883 ms (12.5×)† | -| Vulkan | dots (35.3s) | 2.48 s (14.3×)† | 2.36 s (15×)† | -| CPU | jfk (11.0s) | 3.68 s (2.99×) | 2.95 s (3.73×) | -| CPU | dots (35.3s) | 8.38 s (4.21×) | 7.16 s (4.93×) | +| Vulkan | jfk (11.0s) | 961 ms (11.44×) | 926 ms (11.89×) | +| Vulkan | dots (35.3s) | 2.62 s (13.51×) | 2.56 s (13.82×) | +| CPU | jfk (11.0s) | 1.98 s (5.57×) | 1.90 s (5.79×) | +| CPU | dots (35.3s) | 5.09 s (6.95×) | 4.96 s (7.12×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-small.md b/docs/models/whisper-small.md index 8f34a44f..e892d400 100644 --- a/docs/models/whisper-small.md +++ b/docs/models/whisper-small.md @@ -173,16 +173,16 @@ uv run scripts/bench/run.py --profile --models whisper-small ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 1.03 s (10.6×)† | 960 ms (11.4×)† | -| Vulkan | dots (35.3s) | 2.57 s (13.7×)† | 2.47 s (14.3×)† | -| CPU | jfk (11.0s) | 3.95 s (2.79×) | 3.27 s (3.37×) | -| CPU | dots (35.3s) | 8.91 s (3.97×) | 7.47 s (4.73×) | +| Vulkan | jfk (11.0s) | 1.02 s (10.82×) | 1.02 s (10.76×) | +| Vulkan | dots (35.3s) | 2.81 s (12.57×) | 2.74 s (12.91×) | +| CPU | jfk (11.0s) | 2.17 s (5.07×) | 2.11 s (5.22×) | +| CPU | dots (35.3s) | 5.31 s (6.65×) | 5.16 s (6.84×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-tiny.en.md b/docs/models/whisper-tiny.en.md index 37c0f46e..37cca15c 100644 --- a/docs/models/whisper-tiny.en.md +++ b/docs/models/whisper-tiny.en.md @@ -93,16 +93,16 @@ uv run scripts/bench/run.py --profile --models whisper-tiny.en ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 197 ms (56×)† | 193 ms (56.9×)† | -| Vulkan | dots (35.3s) | 540 ms (65.4×)† | 541 ms (65.3×)† | -| CPU | jfk (11.0s) | 493 ms (22.32×) | 436 ms (25.25×) | -| CPU | dots (35.3s) | 1.19 s (29.77×) | 1.09 s (32.48×) | +| Vulkan | jfk (11.0s) | 253 ms (43.47×) | 251 ms (43.82×) | +| Vulkan | dots (35.3s) | 686 ms (51.49×) | 666 ms (53.09×) | +| CPU | jfk (11.0s) | 288 ms (38.24×) | 283 ms (38.88×) | +| CPU | dots (35.3s) | 799 ms (44.20×) | 790 ms (44.70×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `01127e6` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-tiny.md b/docs/models/whisper-tiny.md index fb559959..26d836b9 100644 --- a/docs/models/whisper-tiny.md +++ b/docs/models/whisper-tiny.md @@ -173,16 +173,16 @@ uv run scripts/bench/run.py --profile --models whisper-tiny ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 200 ms (55.1×)† | 209 ms (52.6×)† | -| Vulkan | dots (35.3s) | 528 ms (66.9×)† | 529 ms (66.8×)† | -| CPU | jfk (11.0s) | 531 ms (20.73×) | 466 ms (23.59×) | -| CPU | dots (35.3s) | 1.23 s (28.76×) | 1.14 s (31.01×) | +| Vulkan | jfk (11.0s) | 254 ms (43.22×) | 253 ms (43.55×) | +| Vulkan | dots (35.3s) | 822 ms (42.96×) | 825 ms (42.82×) | +| CPU | jfk (11.0s) | 306 ms (35.96×) | 311 ms (35.39×) | +| CPU | dots (35.3s) | 811 ms (43.55×) | 820 ms (43.08×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `5fccd5d` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `218aeae3` on 2026-09-14. Benchmark reproduction: diff --git a/scripts/bench/run.py b/scripts/bench/run.py index dfa21488..4fe14433 100755 --- a/scripts/bench/run.py +++ b/scripts/bench/run.py @@ -862,7 +862,18 @@ def main() -> int: speed = args._profile_data["speed"] quants = sorted({item["quant"] for record in args._catalog_records.values() for item in record.get("downloads", [])}) - sample_stems = list(speed["samples"]) + # Family and model overrides can name a sample the top-level set does + # not: gigaam benches a Russian clip rather than jfk/dots. The + # candidate matrix has to contain every such sample before the + # per-variant expected-cell filter in _run_one_backend can select it, + # or the override's variants match nothing and are silently skipped. + sample_stems = sorted({ + sample + for spec in (speed, + *(speed.get("family_overrides") or {}).values(), + *(speed.get("model_overrides") or {}).values()) + for sample in spec.get("samples", []) + }) args.backends = ",".join(target["backends"]) args.iters = int(speed["iterations"]) args.warmup = int(speed["warmup"]) diff --git a/scripts/catalog/common.py b/scripts/catalog/common.py index fae70b79..d452898f 100644 --- a/scripts/catalog/common.py +++ b/scripts/catalog/common.py @@ -54,6 +54,49 @@ def fmt_size(size_bytes: int) -> str: return f"{size_bytes / 10**9:.2f} GB" +# -------------------------------------------------------------------------- +# dataset identity +# +# A benchmark row names its dataset with three fields (dataset, split, +# language), but every consumer wants a single string: a `:` +# spec for the WER harness, a slug for a report filename, a key for the +# database. They differ in punctuation, not in meaning, so the rule that +# picks the value lives here once. scripts/wer/remote/dataset_specs.py owns +# the other direction (spec string -> manifest and volume paths) and +# `dataset_spec` below emits exactly what its parse_dataset_spec accepts. + +# FLEURS publishes one split across many languages, so its language is what +# identifies a result; every other dataset varies by split instead. The WER +# harness agrees: `fleurs:zh` names a language and carries the split as a +# separate --split flag, while `librispeech:test-clean` names a split. +LANGUAGE_KEYED_DATASETS = ("fleurs", "eka-medical-asr") +# The split a language-keyed dataset is published at, which its spec leaves +# implicit. +PUBLISHED_SPLIT = {"fleurs": "test", "eka-medical-asr": "test"} +# Datasets that publish a single language, so a slug need not name one. +SINGLE_LANGUAGE_DATASETS = ("librispeech",) + + +def dataset_tail(row: dict) -> str: + """The value half of a dataset spec: which FLEURS language, which + LibriSpeech split.""" + if row["dataset"] in LANGUAGE_KEYED_DATASETS: + return str(row["language"]) + return str(row["split"]) + + +def dataset_slug(row: dict) -> str: + """`fleurs-es`, `librispeech-test-clean`. The dataset half of a WER report + filename, and the stem the catalog looks for when ingesting a score.""" + return f"{row['dataset']}-{dataset_tail(row)}" + + +def dataset_spec(row: dict) -> str: + """`fleurs:es`, `librispeech:test-clean`. What run.py and the Modal sweep + take as `--dataset`.""" + return f"{row['dataset']}:{dataset_tail(row)}" + + # -------------------------------------------------------------------------- # accuracy diff --git a/scripts/catalog/db.py b/scripts/catalog/db.py index 5f39ac27..daa6f45c 100755 --- a/scripts/catalog/db.py +++ b/scripts/catalog/db.py @@ -165,12 +165,20 @@ def dataset_id(row: dict) -> str: - dataset, split, lang = row["dataset"], row["split"], row["language"] - if dataset == "fleurs" and split == "test": - return f"fleurs-{lang}" - if dataset == "librispeech": - return f"librispeech-{split}" - return f"{dataset}-{split}-{lang}" + """Primary key of the `datasets` table. + + The report slug drops whichever dimension its dataset holds constant, so + it is not always a full identity: `fleurs-es` names its language and + `librispeech-test-clean` has only one, but a dataset that varies by both + keeps the language segment so two languages cannot collide on one key. + """ + dataset, split, language = row["dataset"], row["split"], row["language"] + if (dataset in common.LANGUAGE_KEYED_DATASETS + and split == common.PUBLISHED_SPLIT.get(dataset)): + return common.dataset_slug(row) # fleurs-es + if dataset in common.SINGLE_LANGUAGE_DATASETS: + return common.dataset_slug(row) # librispeech-test-clean + return f"{dataset}-{split}-{language}" # ami-ihm-test-en def build(records: dict[str, dict], out: pathlib.Path) -> dict[str, int]: diff --git a/scripts/catalog/ingest_accuracy.py b/scripts/catalog/ingest_accuracy.py index ac2f330d..85a85691 100755 --- a/scripts/catalog/ingest_accuracy.py +++ b/scripts/catalog/ingest_accuracy.py @@ -29,8 +29,7 @@ def score_path(record: dict, cell: dict, reports: pathlib.Path) -> pathlib.Path: filename = next(item["filename"] for item in record["downloads"] if item["quant"] == cell["quant"]) model = pathlib.Path(filename).stem - dataset = (f"fleurs-{cell['language']}" if cell["dataset"] == "fleurs" - else f"{cell['dataset']}-{cell['split']}") + dataset = common.dataset_slug(cell) batch = "" if cell["batch_size"] <= 1 else f".b{cell['batch_size']}" timestamps = "" if cell["timestamps"] == "none" else f".ts-{cell['timestamps']}" return reports / f"{model}.{dataset}{batch}{timestamps}.score.json" diff --git a/scripts/catalog/profiles.py b/scripts/catalog/profiles.py index 036993c2..a69e99d7 100644 --- a/scripts/catalog/profiles.py +++ b/scripts/catalog/profiles.py @@ -24,6 +24,9 @@ FLEURS_LANGS, ) +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +import common # noqa: E402 + MACHINE_ALIASES = { "apple-m4": "m4", "apple-m4-max": "m4-max", @@ -211,9 +214,8 @@ def target_for_machine(profile: dict, machine_slug: str) -> dict | None: def dataset_spec(cell: dict) -> str: - if cell["dataset"] == "fleurs": - return f"fleurs:{cell['language']}" - return f"{cell['dataset']}:{cell['split']}" + """The `--dataset` string for one profile cell. See common.dataset_spec.""" + return common.dataset_spec(cell) def machine_display(profile: dict, machine_slug: str) -> str: diff --git a/scripts/catalog/render.py b/scripts/catalog/render.py index d635851f..ff49df07 100755 --- a/scripts/catalog/render.py +++ b/scripts/catalog/render.py @@ -239,7 +239,13 @@ def block_pin(record: dict, attrs: dict[str, str]) -> list[str]: validation = spec.get("validation") or {} if not (spec.get("pin_date") and validation.get("commit") and validation.get("date")): raise RenderError("spec needs pin_date and validation.{commit,date}") - return [f"Licensed {record['license']['display']}. Ported from upstream commit " + # A licence with no SPDX id carries its own URL; link the display name to + # it rather than leaving the reader to find the terms. Same field the HF + # card emits as license_link. + licence = record["license"] + display = (f"[{licence['display']}]({licence['link']})" + if licence.get("link") else licence["display"]) + return [f"Licensed {display}. Ported from upstream commit " f"[`{commit}`](https://huggingface.co/{repo}/commit/{commit}), pinned " f"{spec['pin_date']}. Validated against the {validation.get('reference', 'reference')} " f"reference at transcribe.cpp commit [`{validation['commit']}`]" diff --git a/scripts/hf_cards/generate.py b/scripts/hf_cards/generate.py index cc720a4b..45502dd6 100755 --- a/scripts/hf_cards/generate.py +++ b/scripts/hf_cards/generate.py @@ -107,8 +107,7 @@ def derive_perf(record: dict, default_quant: str | None) -> dict: def metric_key(row: dict) -> str: """`__[_][_]`, the name of the per-quant map this row belongs to in the metadata block.""" - tail = row["language"] if row["dataset"] == "fleurs" else row["split"] - key = f"{row['metric']}_{row['dataset']}_{tail}" + key = f"{row['metric']}_{row['dataset']}_{common.dataset_tail(row)}" for extra in ("scoring", "mode"): if row.get(extra): key += f"_{row[extra]}" From 8f5b9b948de1bc5518130301f2a922fd259eede7 Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sun, 13 Sep 2026 22:16:35 -0700 Subject: [PATCH 15/24] Ingest GigaAM Ryzen bench All 16 cells, replacing round hand-written placeholders with measured figures. Q8_0 on CPU read 9.00 for all four variants and now reads 12.77 to 14.38; e2e-rnnt on Vulkan read 22.00 and now reads 15.7. Ryzen legacy rows drop from 39 to 2. --- catalog/gigaam-v3-ctc.json | 8 ++++---- catalog/gigaam-v3-e2e-ctc.json | 8 ++++---- catalog/gigaam-v3-e2e-rnnt.json | 8 ++++---- catalog/gigaam-v3-rnnt.json | 8 ++++---- docs/models/gigaam-v3-ctc.md | 12 ++++++------ docs/models/gigaam-v3-e2e-ctc.md | 12 ++++++------ docs/models/gigaam-v3-e2e-rnnt.md | 12 ++++++------ docs/models/gigaam-v3-rnnt.md | 12 ++++++------ 8 files changed, 40 insertions(+), 40 deletions(-) diff --git a/catalog/gigaam-v3-ctc.json b/catalog/gigaam-v3-ctc.json index 10174e61..a629dfab 100644 --- a/catalog/gigaam-v3-ctc.json +++ b/catalog/gigaam-v3-ctc.json @@ -53,9 +53,9 @@ {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":157.0,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":32.0,"xrt_compute":142.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":31.0,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":383.0,"xrt_compute":12.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":488.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":141.0,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":137.0,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":352.5,"xrt_compute":12.77,"load_ms":236.6,"mel_ms":10.9,"encode_ms":339.2,"decode_ms":2.3,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":355.0,"xrt_wall":12.67,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":312.9,"xrt_compute":14.38,"load_ms":326.7,"mel_ms":10.5,"encode_ms":300.1,"decode_ms":2.4,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":315.4,"xrt_wall":14.27,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":133.8,"xrt_compute":33.63,"load_ms":94.1,"mel_ms":15.6,"encode_ms":114.0,"decode_ms":4.2,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":143.6,"xrt_wall":31.33,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":129.1,"xrt_compute":34.86,"load_ms":121.6,"mel_ms":13.6,"encode_ms":112.5,"decode_ms":3.0,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":137.4,"xrt_wall":32.75,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/gigaam-v3-e2e-ctc.json b/catalog/gigaam-v3-e2e-ctc.json index 4e6eb5cb..34069612 100644 --- a/catalog/gigaam-v3-e2e-ctc.json +++ b/catalog/gigaam-v3-e2e-ctc.json @@ -53,9 +53,9 @@ {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":164.0,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":40.0,"xrt_compute":111.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":40.0,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":397.0,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":494.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":155.0,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":152.0,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":371.3,"xrt_compute":12.12,"load_ms":237.7,"mel_ms":10.8,"encode_ms":344.5,"decode_ms":15.9,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":373.9,"xrt_wall":12.03,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":325.2,"xrt_compute":13.84,"load_ms":340.7,"mel_ms":11.6,"encode_ms":297.7,"decode_ms":15.9,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":327.7,"xrt_wall":13.73,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":141.7,"xrt_compute":31.76,"load_ms":103.9,"mel_ms":11.7,"encode_ms":113.6,"decode_ms":16.4,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":148.3,"xrt_wall":30.34,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":138.6,"xrt_compute":32.47,"load_ms":124.0,"mel_ms":11.4,"encode_ms":110.9,"decode_ms":16.3,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":145.3,"xrt_wall":30.96,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/gigaam-v3-e2e-rnnt.json b/catalog/gigaam-v3-e2e-rnnt.json index 3c682c19..d7e5fa0b 100644 --- a/catalog/gigaam-v3-e2e-rnnt.json +++ b/catalog/gigaam-v3-e2e-rnnt.json @@ -53,9 +53,9 @@ {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":177.0,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":51.0,"xrt_compute":89.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":51.0,"xrt_compute":88.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":444.0,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":552.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":205.0,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":202.0,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":510.1,"xrt_compute":8.82,"load_ms":243.2,"mel_ms":10.7,"encode_ms":343.5,"decode_ms":155.8,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":512.8,"xrt_wall":8.77,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":465.1,"xrt_compute":9.68,"load_ms":294.8,"mel_ms":11.3,"encode_ms":298.0,"decode_ms":155.8,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":468.0,"xrt_wall":9.62,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":286.2,"xrt_compute":15.72,"load_ms":119.3,"mel_ms":10.3,"encode_ms":120.4,"decode_ms":155.6,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":293.2,"xrt_wall":15.35,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":284.6,"xrt_compute":15.81,"load_ms":138.8,"mel_ms":10.6,"encode_ms":118.2,"decode_ms":155.8,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":291.9,"xrt_wall":15.42,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/gigaam-v3-rnnt.json b/catalog/gigaam-v3-rnnt.json index 1ca7b5d6..07189ae7 100644 --- a/catalog/gigaam-v3-rnnt.json +++ b/catalog/gigaam-v3-rnnt.json @@ -53,9 +53,9 @@ {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":167.0,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":43.0,"xrt_compute":105.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":41.0,"xrt_compute":110.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":420.0,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":511.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":184.0,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":179.0,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":401.6,"xrt_compute":11.2,"load_ms":192.6,"mel_ms":10.6,"encode_ms":347.0,"decode_ms":44.0,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":404.4,"xrt_wall":11.13,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":352.4,"xrt_compute":12.77,"load_ms":351.9,"mel_ms":10.0,"encode_ms":298.3,"decode_ms":44.0,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":355.2,"xrt_wall":12.67,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":169.8,"xrt_compute":26.49,"load_ms":111.8,"mel_ms":12.2,"encode_ms":114.2,"decode_ms":43.5,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":177.1,"xrt_wall":25.41,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":166.0,"xrt_compute":27.11,"load_ms":133.1,"mel_ms":11.4,"encode_ms":110.8,"decode_ms":43.8,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":172.6,"xrt_wall":26.07,"publication_profile":"asr-publication-v2"} ] } diff --git a/docs/models/gigaam-v3-ctc.md b/docs/models/gigaam-v3-ctc.md index 45b9c29e..4e9e43e7 100644 --- a/docs/models/gigaam-v3-ctc.md +++ b/docs/models/gigaam-v3-ctc.md @@ -104,14 +104,14 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | ------------: | ------------: | -| Vulkan | ru (4.5s) | 137 ms (33×)† | 141 ms (32×)† | -| CPU | ru (4.5s) | 488 ms (9×)† | 383 ms (12×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | --------------: | --------------: | +| Vulkan | ru (4.5s) | 129 ms (34.86×) | 134 ms (33.63×) | +| CPU | ru (4.5s) | 313 ms (14.38×) | 352 ms (12.77×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `3d7b4e2a` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/gigaam-v3-e2e-ctc.md b/docs/models/gigaam-v3-e2e-ctc.md index 3f8376f8..c261bbbe 100644 --- a/docs/models/gigaam-v3-e2e-ctc.md +++ b/docs/models/gigaam-v3-e2e-ctc.md @@ -104,14 +104,14 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | ------------: | ------------: | -| Vulkan | ru (4.5s) | 152 ms (30×)† | 155 ms (29×)† | -| CPU | ru (4.5s) | 494 ms (9×)† | 397 ms (11×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | --------------: | --------------: | +| Vulkan | ru (4.5s) | 139 ms (32.47×) | 142 ms (31.76×) | +| CPU | ru (4.5s) | 325 ms (13.84×) | 371 ms (12.12×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `3d7b4e2a` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/gigaam-v3-e2e-rnnt.md b/docs/models/gigaam-v3-e2e-rnnt.md index e0b917b3..5570a2d6 100644 --- a/docs/models/gigaam-v3-e2e-rnnt.md +++ b/docs/models/gigaam-v3-e2e-rnnt.md @@ -104,14 +104,14 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | ------------: | ------------: | -| Vulkan | ru (4.5s) | 202 ms (22×)† | 205 ms (22×)† | -| CPU | ru (4.5s) | 552 ms (8×)† | 444 ms (10×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | --------------: | --------------: | +| Vulkan | ru (4.5s) | 285 ms (15.81×) | 286 ms (15.72×) | +| CPU | ru (4.5s) | 465 ms (9.68×) | 510 ms (8.82×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `3d7b4e2a` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/gigaam-v3-rnnt.md b/docs/models/gigaam-v3-rnnt.md index ebc10911..004d92c5 100644 --- a/docs/models/gigaam-v3-rnnt.md +++ b/docs/models/gigaam-v3-rnnt.md @@ -104,14 +104,14 @@ Apple M4 Max. † published before provenance was recorded; not yet re-measured. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | ------------: | ------------: | -| Vulkan | ru (4.5s) | 179 ms (25×)† | 184 ms (25×)† | -| CPU | ru (4.5s) | 511 ms (9×)† | 420 ms (11×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | --------------: | --------------: | +| Vulkan | ru (4.5s) | 166 ms (27.11×) | 170 ms (26.49×) | +| CPU | ru (4.5s) | 352 ms (12.77×) | 402 ms (11.20×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR). † published before provenance was recorded; not yet re-measured. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `3d7b4e2a` on 2026-09-14. Benchmark reproduction: From cd0ea56858a757cde7614964b69df738c5f28fae Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Sun, 13 Sep 2026 22:29:29 -0700 Subject: [PATCH 16/24] Bench the moonshine ja/ko/zh fine-tunes in their own language English jfk and dots decode out of distribution on a single-language fine-tune: the next-token distribution is nearly flat, so an argmax flip starts a repetition loop that never emits end-of-stream and runs to the 194-token position cap. Whether that happens depends on the backend, since GPU logits are not bit-identical to CPU. moonshine-tiny-ja terminates on CPU and loops on Metal from the same file; moonshine-base-ar did the reverse on Vulkan. A cell whose success is decided by whether nonsense happens to stop is not measuring anything. Point those six variants at their own language clip, the way gigaam already points at a Russian one. Output is then a real transcript and identical across backends. The dots waiver goes with them, and the English rows they held are dropped, so 24 cells read as missing until both rigs bench them. ar, uk and vi keep the waiver; no fixture exists in those languages yet. Underneath the profile, check.py's integrity pass now refuses a record with no speed rows at all. The profile decides which cells are required; this is the floor that stops a model shipping a page and a card with no performance on them. It fires on those six and nothing else. --- catalog/_benchmark_profiles.json | 39 +++++++++++++++++++++++++++++++- catalog/moonshine-base-ja.json | 10 +------- catalog/moonshine-base-ko.json | 10 +------- catalog/moonshine-base-zh.json | 10 +------- catalog/moonshine-tiny-ja.json | 10 +------- catalog/moonshine-tiny-ko.json | 10 +------- catalog/moonshine-tiny-zh.json | 10 +------- scripts/catalog/check.py | 8 +++++++ 8 files changed, 52 insertions(+), 55 deletions(-) diff --git a/catalog/_benchmark_profiles.json b/catalog/_benchmark_profiles.json index 3ca1737d..2c386682 100644 --- a/catalog/_benchmark_profiles.json +++ b/catalog/_benchmark_profiles.json @@ -48,7 +48,44 @@ "reason": "Russian-only family; use the currently published supported-language clip until a long Russian fixture is added." } }, - "model_overrides": {}, + "model_overrides": { + "moonshine-tiny-ja": { + "samples": [ + "ja" + ], + "reason": "Single-language fine-tune; English jfk/dots decode out of distribution and loop until the position cap, and whether that happens differs between CPU and GPU, so replace them with the model's own language. Short clip: the figure is load and encode dominated until a longer fixture is recorded." + }, + "moonshine-base-ja": { + "samples": [ + "ja" + ], + "reason": "Single-language fine-tune; English jfk/dots decode out of distribution and loop until the position cap, and whether that happens differs between CPU and GPU, so replace them with the model's own language. Short clip: the figure is load and encode dominated until a longer fixture is recorded." + }, + "moonshine-tiny-ko": { + "samples": [ + "ko" + ], + "reason": "Single-language fine-tune; English jfk/dots decode out of distribution and loop until the position cap, and whether that happens differs between CPU and GPU, so replace them with the model's own language. Short clip: the figure is load and encode dominated until a longer fixture is recorded." + }, + "moonshine-base-ko": { + "samples": [ + "ko" + ], + "reason": "Single-language fine-tune; English jfk/dots decode out of distribution and loop until the position cap, and whether that happens differs between CPU and GPU, so replace them with the model's own language. Short clip: the figure is load and encode dominated until a longer fixture is recorded." + }, + "moonshine-tiny-zh": { + "samples": [ + "zh" + ], + "reason": "Single-language fine-tune; English jfk/dots decode out of distribution and loop until the position cap, and whether that happens differs between CPU and GPU, so replace them with the model's own language. Short clip: the figure is load and encode dominated until a longer fixture is recorded." + }, + "moonshine-base-zh": { + "samples": [ + "zh" + ], + "reason": "Single-language fine-tune; English jfk/dots decode out of distribution and loop until the position cap, and whether that happens differs between CPU and GPU, so replace them with the model's own language. Short clip: the figure is load and encode dominated until a longer fixture is recorded." + } + }, "targets": [ { "machine": "m4-max", diff --git a/catalog/moonshine-base-ja.json b/catalog/moonshine-base-ja.json index d1343d0b..f0e2c0f4 100644 --- a/catalog/moonshine-base-ja.json +++ b/catalog/moonshine-base-ja.json @@ -42,13 +42,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":206.0,"xrt_compute":53.4,"load_ms":151.1,"mel_ms":0.0,"encode_ms":146.3,"decode_ms":59.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":206.0,"xrt_wall":53.39,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":143.0,"xrt_compute":76.9,"load_ms":128.4,"mel_ms":0.0,"encode_ms":85.3,"decode_ms":57.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":143.3,"xrt_wall":76.74,"publication_profile":"asr-publication-v2"} - ], - "benchmark_exceptions": [ - {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} - ] + "speed_benchmarks": [] } diff --git a/catalog/moonshine-base-ko.json b/catalog/moonshine-base-ko.json index 6e4ac565..096dfe68 100644 --- a/catalog/moonshine-base-ko.json +++ b/catalog/moonshine-base-ko.json @@ -42,13 +42,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":776.7,"xrt_compute":14.16,"load_ms":142.7,"mel_ms":0.0,"encode_ms":146.9,"decode_ms":629.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":776.7,"xrt_wall":14.16,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":552.7,"xrt_compute":19.9,"load_ms":133.6,"mel_ms":0.0,"encode_ms":88.0,"decode_ms":464.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":553.1,"xrt_wall":19.89,"publication_profile":"asr-publication-v2"} - ], - "benchmark_exceptions": [ - {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} - ] + "speed_benchmarks": [] } diff --git a/catalog/moonshine-base-zh.json b/catalog/moonshine-base-zh.json index 9962cd17..57c356a4 100644 --- a/catalog/moonshine-base-zh.json +++ b/catalog/moonshine-base-zh.json @@ -42,13 +42,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":335.6,"xrt_compute":32.77,"load_ms":143.4,"mel_ms":0.0,"encode_ms":145.3,"decode_ms":190.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":335.7,"xrt_wall":32.77,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":236.9,"xrt_compute":46.44,"load_ms":127.7,"mel_ms":0.0,"encode_ms":83.1,"decode_ms":153.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":237.1,"xrt_wall":46.4,"publication_profile":"asr-publication-v2"} - ], - "benchmark_exceptions": [ - {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} - ] + "speed_benchmarks": [] } diff --git a/catalog/moonshine-tiny-ja.json b/catalog/moonshine-tiny-ja.json index bd51e61d..b7487ba2 100644 --- a/catalog/moonshine-tiny-ja.json +++ b/catalog/moonshine-tiny-ja.json @@ -42,13 +42,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":300.8,"xrt_compute":36.57,"load_ms":100.5,"mel_ms":0.0,"encode_ms":74.3,"decode_ms":226.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":300.8,"xrt_wall":36.57,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} - ], - "benchmark_exceptions": [ - {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} - ] + "speed_benchmarks": [] } diff --git a/catalog/moonshine-tiny-ko.json b/catalog/moonshine-tiny-ko.json index 2df3feaf..d4858228 100644 --- a/catalog/moonshine-tiny-ko.json +++ b/catalog/moonshine-tiny-ko.json @@ -42,13 +42,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":529.1,"xrt_compute":20.79,"load_ms":102.4,"mel_ms":0.0,"encode_ms":76.0,"decode_ms":453.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":529.2,"xrt_wall":20.79,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":377.5,"xrt_compute":29.14,"load_ms":92.2,"mel_ms":0.0,"encode_ms":47.7,"decode_ms":329.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":377.8,"xrt_wall":29.12,"publication_profile":"asr-publication-v2"} - ], - "benchmark_exceptions": [ - {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} - ] + "speed_benchmarks": [] } diff --git a/catalog/moonshine-tiny-zh.json b/catalog/moonshine-tiny-zh.json index b2ac6ba1..0722ea25 100644 --- a/catalog/moonshine-tiny-zh.json +++ b/catalog/moonshine-tiny-zh.json @@ -42,13 +42,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":183.9,"xrt_compute":59.82,"load_ms":104.2,"mel_ms":0.0,"encode_ms":72.2,"decode_ms":111.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":183.9,"xrt_wall":59.81,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":135.8,"xrt_compute":81.03,"load_ms":92.5,"mel_ms":0.0,"encode_ms":43.4,"decode_ms":92.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":136.0,"xrt_wall":80.9,"publication_profile":"asr-publication-v2"} - ], - "benchmark_exceptions": [ - {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} - ] + "speed_benchmarks": [] } diff --git a/scripts/catalog/check.py b/scripts/catalog/check.py index 226a2d35..2f4f6878 100755 --- a/scripts/catalog/check.py +++ b/scripts/catalog/check.py @@ -53,6 +53,14 @@ def integrity_pass(records: dict) -> int: if missing: bad += 1 print(f" FAIL {name}: {sect} references unpublished quant(s) {sorted(missing)}") + # A shipped model always says how fast it runs somewhere. The + # publication profile decides which cells are required; this is the + # weaker floor underneath it, so a record can never render a page or + # a card with no performance at all. + if not rec.get("speed_benchmarks"): + bad += 1 + print(f" FAIL {name}: no speed_benchmarks; every shipped model " + f"carries at least one measured cell") for r in rec.get("speed_benchmarks", []): if r.get("machine"): machines[r["machine"]].add(name) From 77b0c939736e110cabfcd2aea08041d78f63be4e Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Mon, 14 Sep 2026 13:44:16 +0800 Subject: [PATCH 17/24] case mapping fixes --- scripts/bench/run.py | 21 ++++++++++++++++++--- scripts/catalog/ingest_perf.py | 19 +++++++++++++++++-- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/scripts/bench/run.py b/scripts/bench/run.py index 4fe14433..f984ee87 100755 --- a/scripts/bench/run.py +++ b/scripts/bench/run.py @@ -341,6 +341,18 @@ def discover_matrix(repo: Path, model_tokens: list[str] | None, return cells +def catalog_key(records: dict, variant: str) -> str | None: + """Catalog variant for an on-disk dir name. Model dirs keep the upstream + repo casing (models/Qwen3-ASR-0.6B) while catalog keys are lowercase + (qwen3-asr-0.6b); the two must be reconciled for profile lookups.""" + if variant in records: + return variant + lower = variant.lower() + if lower in records: + return lower + return next((key for key in records if key.lower() == lower), None) + + def group_by_variant(cells: list[Cell]) -> dict[str, list[Cell]]: groups: dict[str, list[Cell]] = {} for cell in cells: @@ -744,7 +756,10 @@ def _run_one_backend(backend: BackendSpec, # Profile runs contain only cells assigned to this machine/backend, # including model-specific reviewed exceptions. if args.profile is not None: - record = args._catalog_records[variant] + key = catalog_key(args._catalog_records, variant) + if key is None: + continue + record = args._catalog_records[key] expected = benchmark_profiles.apply_exceptions( record, "speed", benchmark_profiles.expected_speed(record, args._profile_data)) @@ -894,12 +909,12 @@ def main() -> int: # A local models directory may contain unpublished experiments. A # profile runs only files named by catalog downloads. allowed = { - (variant, item["quant"].lower()) + (variant.lower(), item["quant"].lower()) for variant, record in args._catalog_records.items() for item in record.get("downloads", []) } cells = [cell for cell in cells - if (cell.variant, cell.quant.lower()) in allowed] + if (cell.variant.lower(), cell.quant.lower()) in allowed] by_variant = group_by_variant(cells) if args.dry_run: diff --git a/scripts/catalog/ingest_perf.py b/scripts/catalog/ingest_perf.py index 034fefbf..431f2555 100755 --- a/scripts/catalog/ingest_perf.py +++ b/scripts/catalog/ingest_perf.py @@ -45,14 +45,29 @@ def quant_of(model_path: str) -> str | None: return match.group(1) if match else None +_CATALOG_KEYS: dict[str, str] | None = None + + +def _canonical_variant(name: str | None) -> str | None: + """Catalog variant for a report/path name. Model dirs keep the upstream + repo casing (models/Qwen3-ASR-0.6B) while catalog keys are lowercase + (qwen3-asr-0.6b), so match case-insensitively before falling back.""" + global _CATALOG_KEYS + if not name: + return name + if _CATALOG_KEYS is None: + _CATALOG_KEYS = {key.lower(): key for key in common.load_records()} + return _CATALOG_KEYS.get(name.lower(), name) + + def variant_of(report: dict, model_path: str) -> str | None: """Reports carry `variant` or the older `family`; the path is definitive.""" parts = pathlib.PurePosixPath(model_path.replace("\\", "/")).parts if "models" in parts: index = len(parts) - 1 - parts[::-1].index("models") if index + 1 < len(parts): - return parts[index + 1] - return report.get("variant") + return _canonical_variant(parts[index + 1]) + return _canonical_variant(report.get("variant")) def publishable(report: dict) -> bool: From f66af17bc1745650af52abffca17333a92a0547e Mon Sep 17 00:00:00 2001 From: CJ Pais Date: Mon, 14 Sep 2026 22:25:48 -0700 Subject: [PATCH 18/24] new samples --- catalog/_benchmark_profiles.json | 77 ++++++++++++++---- catalog/breeze-asr-25.json | 16 ++-- catalog/canary-180m-flash.json | 32 ++++---- catalog/canary-1b-flash.json | 32 ++++---- catalog/canary-1b-v2.json | 32 ++++---- catalog/canary-1b.json | 32 ++++---- catalog/canary-qwen-2.5b.json | 32 ++++---- catalog/cohere-transcribe-03-2026.json | 16 ++-- catalog/cohere-transcribe-arabic-07-2026.json | 16 ++-- catalog/fun-asr-mlt-nano-2512.json | 32 ++++---- catalog/fun-asr-nano-2512.json | 16 ++-- catalog/gigaam-v3-ctc.json | 11 +-- catalog/gigaam-v3-e2e-ctc.json | 11 +-- catalog/gigaam-v3-e2e-rnnt.json | 11 +-- catalog/gigaam-v3-rnnt.json | 11 +-- catalog/granite-4.0-1b-speech.json | 34 ++++---- catalog/granite-speech-4.1-2b-nar.json | 32 ++++---- catalog/granite-speech-4.1-2b-plus.json | 32 ++++---- catalog/granite-speech-4.1-2b.json | 34 ++++---- .../granite-speech-5.0-470m-turboctc-nc.json | 32 ++++---- catalog/granite-speech-5.0-470m-turboctc.json | 32 ++++---- catalog/medasr.json | 32 ++++---- catalog/moonshine-base-ar.json | 10 +-- catalog/moonshine-base-uk.json | 10 +-- catalog/moonshine-base-vi.json | 10 +-- catalog/moonshine-base.json | 8 +- catalog/moonshine-streaming-medium.json | 8 +- catalog/moonshine-streaming-small.json | 16 ++-- catalog/moonshine-streaming-tiny.json | 16 ++-- catalog/moonshine-tiny-ar.json | 10 +-- catalog/moonshine-tiny-uk.json | 10 +-- catalog/moonshine-tiny-vi.json | 10 +-- catalog/moonshine-tiny.json | 8 +- catalog/moss-transcribe-diarize.json | 16 ++-- ...ultitalker-parakeet-streaming-0.6b-v1.json | 32 ++++---- catalog/nemotron-3.5-asr-streaming-0.6b.json | 16 ++-- .../nemotron-speech-streaming-en-0.6b.json | 16 ++-- catalog/parakeet-ctc-0.6b.json | 32 ++++---- catalog/parakeet-ctc-1.1b.json | 32 ++++---- catalog/parakeet-primeline.json | 16 ++-- catalog/parakeet-rnnt-0.6b.json | 16 ++-- catalog/parakeet-rnnt-1.1b.json | 32 ++++---- catalog/parakeet-tdt-0.6b-v2.json | 16 ++-- catalog/parakeet-tdt-0.6b-v3.json | 16 ++-- catalog/parakeet-tdt-1.1b.json | 16 ++-- catalog/parakeet-tdt_ctc-1.1b.json | 16 ++-- catalog/parakeet-tdt_ctc-110m.json | 32 ++++---- catalog/parakeet-unified-en-0.6b.json | 32 ++++---- catalog/qwen3-asr-0.6b.json | 32 ++++---- catalog/qwen3-asr-1.7b.json | 32 ++++---- catalog/sensevoice-small.json | 32 ++++---- catalog/voxtral-mini-3b-2507.json | 16 ++-- catalog/voxtral-mini-4b-realtime-2602.json | 16 ++-- catalog/voxtral-small-24b-2507.json | 8 +- catalog/whisper-base.en.json | 16 ++-- catalog/whisper-base.json | 18 ++-- catalog/whisper-large-v2.json | 16 ++-- catalog/whisper-large-v3-turbo.json | 32 ++++---- catalog/whisper-large-v3.json | 16 ++-- catalog/whisper-large.json | 16 ++-- catalog/whisper-medium.en.json | 16 ++-- catalog/whisper-medium.json | 16 ++-- catalog/whisper-small.en.json | 16 ++-- catalog/whisper-small.json | 16 ++-- catalog/whisper-tiny.en.json | 16 ++-- catalog/whisper-tiny.json | 16 ++-- docs/models/canary-180m-flash.md | 24 +++--- docs/models/canary-1b-flash.md | 24 +++--- docs/models/canary-1b-v2.md | 28 +++---- docs/models/canary-1b.md | 28 +++---- docs/models/canary-qwen-2.5b.md | 24 +++--- docs/models/cohere-transcribe-03-2026.md | 16 ++-- .../cohere-transcribe-arabic-07-2026.md | 16 ++-- docs/models/fun-asr-mlt-nano-2512.md | 28 +++---- docs/models/fun-asr-nano-2512.md | 16 ++-- docs/models/gigaam-v3-ctc.md | 12 +-- docs/models/gigaam-v3-e2e-ctc.md | 12 +-- docs/models/gigaam-v3-e2e-rnnt.md | 12 +-- docs/models/gigaam-v3-rnnt.md | 12 +-- docs/models/granite-4.0-1b-speech.md | 28 +++---- docs/models/granite-speech-4.1-2b-nar.md | 24 +++--- docs/models/granite-speech-4.1-2b-plus.md | 24 +++--- docs/models/granite-speech-4.1-2b.md | 28 +++---- .../granite-speech-5.0-470m-turboctc-nc.md | 24 +++--- .../granite-speech-5.0-470m-turboctc.md | 24 +++--- docs/models/medasr.md | 28 +++---- docs/models/moonshine-base.md | 16 ++-- docs/models/moonshine-streaming-medium.md | 12 +-- docs/models/moonshine-streaming-small.md | 24 +++--- docs/models/moonshine-streaming-tiny.md | 24 +++--- docs/models/moonshine-tiny.md | 12 +-- docs/models/moss-transcribe-diarize.md | 12 +-- .../multitalker-parakeet-streaming-0.6b-v1.md | 24 +++--- .../models/nemotron-3.5-asr-streaming-0.6b.md | 16 ++-- .../nemotron-speech-streaming-en-0.6b.md | 16 ++-- docs/models/parakeet-ctc-0.6b.md | 24 +++--- docs/models/parakeet-ctc-1.1b.md | 24 +++--- docs/models/parakeet-rnnt-0.6b.md | 16 ++-- docs/models/parakeet-rnnt-1.1b.md | 28 +++---- docs/models/parakeet-tdt-0.6b-v2.md | 16 ++-- docs/models/parakeet-tdt-0.6b-v3.md | 12 +-- docs/models/parakeet-tdt-1.1b.md | 12 +-- docs/models/parakeet-tdt_ctc-1.1b.md | 12 +-- docs/models/parakeet-tdt_ctc-110m.md | 24 +++--- docs/models/parakeet-unified-en-0.6b.md | 24 +++--- docs/models/qwen3-asr-0.6b.md | 32 ++++---- docs/models/qwen3-asr-1.7b.md | 28 +++---- docs/models/sensevoice-small.md | 28 +++---- docs/models/voxtral-mini-3b-2507.md | 12 +-- docs/models/voxtral-realtime.md | 12 +-- docs/models/voxtral-small-24b-2507.md | 12 +-- docs/models/whisper-base.en.md | 12 +-- docs/models/whisper-base.md | 12 +-- docs/models/whisper-large-v2.md | 12 +-- docs/models/whisper-large-v3-turbo.md | 24 +++--- docs/models/whisper-large-v3.md | 12 +-- docs/models/whisper-large.md | 12 +-- docs/models/whisper-medium.en.md | 12 +-- docs/models/whisper-medium.md | 12 +-- docs/models/whisper-small.en.md | 16 ++-- docs/models/whisper-small.md | 16 ++-- docs/models/whisper-tiny.en.md | 12 +-- docs/models/whisper-tiny.md | 12 +-- samples/README.md | 67 +++++++++++++++ samples/ar-long.wav | Bin 0 -> 823724 bytes samples/ar-short.wav | Bin 0 -> 352044 bytes samples/ja-long.wav | Bin 0 -> 902444 bytes samples/ja-short.wav | Bin 0 -> 351404 bytes samples/ko-long.wav | Bin 0 -> 825644 bytes samples/ko-short.wav | Bin 0 -> 351404 bytes samples/ru-long.wav | Bin 0 -> 1082924 bytes samples/ru-short.wav | Bin 0 -> 351404 bytes samples/uk-long.wav | Bin 0 -> 925484 bytes samples/uk-short.wav | Bin 0 -> 351404 bytes samples/vi-long.wav | Bin 0 -> 1219244 bytes samples/vi-short.wav | Bin 0 -> 351404 bytes samples/zh-long.wav | Bin 0 -> 995884 bytes samples/zh-short.wav | Bin 0 -> 352044 bytes scripts/catalog/ingest_perf.py | 38 ++++++++- 139 files changed, 1320 insertions(+), 1256 deletions(-) create mode 100644 samples/README.md create mode 100644 samples/ar-long.wav create mode 100644 samples/ar-short.wav create mode 100644 samples/ja-long.wav create mode 100644 samples/ja-short.wav create mode 100644 samples/ko-long.wav create mode 100644 samples/ko-short.wav create mode 100644 samples/ru-long.wav create mode 100644 samples/ru-short.wav create mode 100644 samples/uk-long.wav create mode 100644 samples/uk-short.wav create mode 100644 samples/vi-long.wav create mode 100644 samples/vi-short.wav create mode 100644 samples/zh-long.wav create mode 100644 samples/zh-short.wav diff --git a/catalog/_benchmark_profiles.json b/catalog/_benchmark_profiles.json index 2c386682..3f1ba2d6 100644 --- a/catalog/_benchmark_profiles.json +++ b/catalog/_benchmark_profiles.json @@ -43,47 +43,96 @@ "family_overrides": { "gigaam": { "samples": [ - "ru" + "ru-short", + "ru-long" ], - "reason": "Russian-only family; use the currently published supported-language clip until a long Russian fixture is added." + "reason": "Russian-only family; benched on a Russian pair at the same two lengths as jfk/dots. Replaces the 2.2 s ru.wav clip, which was short enough that the figure was load and encode dominated." } }, "model_overrides": { + "moonshine-tiny-ar": { + "samples": [ + "ar-short", + "ar-long" + ], + "reason": "Single-language fine-tune. English jfk/dots decode out of distribution and can loop until the 194-token position cap, and whether that happens differs between CPU and GPU, so the pair is replaced with this model's own language at the same two lengths." + }, + "moonshine-base-ar": { + "samples": [ + "ar-short", + "ar-long" + ], + "reason": "Single-language fine-tune. English jfk/dots decode out of distribution and can loop until the 194-token position cap, and whether that happens differs between CPU and GPU, so the pair is replaced with this model's own language at the same two lengths." + }, "moonshine-tiny-ja": { "samples": [ - "ja" + "ja-short", + "ja-long" ], - "reason": "Single-language fine-tune; English jfk/dots decode out of distribution and loop until the position cap, and whether that happens differs between CPU and GPU, so replace them with the model's own language. Short clip: the figure is load and encode dominated until a longer fixture is recorded." + "reason": "Single-language fine-tune. English jfk/dots decode out of distribution and can loop until the 194-token position cap, and whether that happens differs between CPU and GPU, so the pair is replaced with this model's own language at the same two lengths." }, "moonshine-base-ja": { "samples": [ - "ja" + "ja-short", + "ja-long" ], - "reason": "Single-language fine-tune; English jfk/dots decode out of distribution and loop until the position cap, and whether that happens differs between CPU and GPU, so replace them with the model's own language. Short clip: the figure is load and encode dominated until a longer fixture is recorded." + "reason": "Single-language fine-tune. English jfk/dots decode out of distribution and can loop until the 194-token position cap, and whether that happens differs between CPU and GPU, so the pair is replaced with this model's own language at the same two lengths." }, "moonshine-tiny-ko": { "samples": [ - "ko" + "ko-short", + "ko-long" ], - "reason": "Single-language fine-tune; English jfk/dots decode out of distribution and loop until the position cap, and whether that happens differs between CPU and GPU, so replace them with the model's own language. Short clip: the figure is load and encode dominated until a longer fixture is recorded." + "reason": "Single-language fine-tune. English jfk/dots decode out of distribution and can loop until the 194-token position cap, and whether that happens differs between CPU and GPU, so the pair is replaced with this model's own language at the same two lengths." }, "moonshine-base-ko": { "samples": [ - "ko" + "ko-short", + "ko-long" + ], + "reason": "Single-language fine-tune. English jfk/dots decode out of distribution and can loop until the 194-token position cap, and whether that happens differs between CPU and GPU, so the pair is replaced with this model's own language at the same two lengths." + }, + "moonshine-tiny-uk": { + "samples": [ + "uk-short", + "uk-long" + ], + "reason": "Single-language fine-tune. English jfk/dots decode out of distribution and can loop until the 194-token position cap, and whether that happens differs between CPU and GPU, so the pair is replaced with this model's own language at the same two lengths." + }, + "moonshine-base-uk": { + "samples": [ + "uk-short", + "uk-long" + ], + "reason": "Single-language fine-tune. English jfk/dots decode out of distribution and can loop until the 194-token position cap, and whether that happens differs between CPU and GPU, so the pair is replaced with this model's own language at the same two lengths." + }, + "moonshine-tiny-vi": { + "samples": [ + "vi-short", + "vi-long" + ], + "reason": "Single-language fine-tune. English jfk/dots decode out of distribution and can loop until the 194-token position cap, and whether that happens differs between CPU and GPU, so the pair is replaced with this model's own language at the same two lengths." + }, + "moonshine-base-vi": { + "samples": [ + "vi-short", + "vi-long" ], - "reason": "Single-language fine-tune; English jfk/dots decode out of distribution and loop until the position cap, and whether that happens differs between CPU and GPU, so replace them with the model's own language. Short clip: the figure is load and encode dominated until a longer fixture is recorded." + "reason": "Single-language fine-tune. English jfk/dots decode out of distribution and can loop until the 194-token position cap, and whether that happens differs between CPU and GPU, so the pair is replaced with this model's own language at the same two lengths." }, "moonshine-tiny-zh": { "samples": [ - "zh" + "zh-short", + "zh-long" ], - "reason": "Single-language fine-tune; English jfk/dots decode out of distribution and loop until the position cap, and whether that happens differs between CPU and GPU, so replace them with the model's own language. Short clip: the figure is load and encode dominated until a longer fixture is recorded." + "reason": "Single-language fine-tune. English jfk/dots decode out of distribution and can loop until the 194-token position cap, and whether that happens differs between CPU and GPU, so the pair is replaced with this model's own language at the same two lengths." }, "moonshine-base-zh": { "samples": [ - "zh" + "zh-short", + "zh-long" ], - "reason": "Single-language fine-tune; English jfk/dots decode out of distribution and loop until the position cap, and whether that happens differs between CPU and GPU, so replace them with the model's own language. Short clip: the figure is load and encode dominated until a longer fixture is recorded." + "reason": "Single-language fine-tune. English jfk/dots decode out of distribution and can loop until the 194-token position cap, and whether that happens differs between CPU and GPU, so the pair is replaced with this model's own language at the same two lengths." } }, "targets": [ diff --git a/catalog/breeze-asr-25.json b/catalog/breeze-asr-25.json index 0fb390cb..01975dfa 100644 --- a/catalog/breeze-asr-25.json +++ b/catalog/breeze-asr-25.json @@ -56,14 +56,14 @@ "timestamps": "segment" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":1.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":26.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":22.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":21.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8061.8,"xrt_compute":4.38,"load_ms":257.2,"mel_ms":4.8,"encode_ms":2823.8,"decode_ms":5233.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8062.3,"xrt_wall":4.38,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3894.9,"xrt_compute":2.82,"load_ms":232.8,"mel_ms":4.2,"encode_ms":2871.2,"decode_ms":1019.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3895.4,"xrt_wall":2.82,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7830.2,"xrt_compute":4.51,"load_ms":422.6,"mel_ms":4.8,"encode_ms":2684.0,"decode_ms":5141.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":7830.7,"xrt_wall":4.51,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3676.6,"xrt_compute":2.99,"load_ms":361.8,"mel_ms":4.2,"encode_ms":2712.1,"decode_ms":960.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3677.1,"xrt_wall":2.99,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1412.7,"xrt_compute":25.01,"load_ms":279.7,"mel_ms":5.7,"encode_ms":271.1,"decode_ms":1135.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1412.9,"xrt_wall":25.01,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":538.5,"xrt_compute":20.43,"load_ms":248.8,"mel_ms":5.0,"encode_ms":269.9,"decode_ms":263.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":538.7,"xrt_wall":20.42,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1481.2,"xrt_compute":23.85,"load_ms":449.1,"mel_ms":5.2,"encode_ms":272.9,"decode_ms":1203.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1481.4,"xrt_wall":23.85,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":530.7,"xrt_compute":20.73,"load_ms":381.1,"mel_ms":4.1,"encode_ms":260.2,"decode_ms":266.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":530.9,"xrt_wall":20.72,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":29374.8,"xrt_compute":1.2,"load_ms":709.5,"mel_ms":36.5,"encode_ms":9564.5,"decode_ms":19773.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":29382.6,"xrt_wall":1.2,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":13603.0,"xrt_compute":0.81,"load_ms":1125.8,"mel_ms":29.4,"encode_ms":9548.1,"decode_ms":4025.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13610.8,"xrt_wall":0.81,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":30922.9,"xrt_compute":1.14,"load_ms":1167.6,"mel_ms":33.1,"encode_ms":9831.3,"decode_ms":21058.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":30931.0,"xrt_wall":1.14,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/canary-180m-flash.json b/catalog/canary-180m-flash.json index 894975ef..a77f6bde 100644 --- a/catalog/canary-180m-flash.json +++ b/catalog/canary-180m-flash.json @@ -52,21 +52,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":481.0,"xrt_compute":73.46,"load_ms":76.0,"mel_ms":2.2,"encode_ms":339.8,"decode_ms":139.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":482.1,"xrt_wall":73.29}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":123.4,"xrt_compute":89.14,"load_ms":72.5,"mel_ms":0.8,"encode_ms":96.6,"decode_ms":26.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":124.0,"xrt_wall":88.7}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":520.5,"xrt_compute":67.88,"load_ms":87.1,"mel_ms":2.2,"encode_ms":352.8,"decode_ms":165.5,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":521.6,"xrt_wall":67.73}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":136.5,"xrt_compute":80.57,"load_ms":68.6,"mel_ms":0.8,"encode_ms":104.2,"decode_ms":31.6,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":137.1,"xrt_wall":80.22}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":253.3,"xrt_compute":139.48,"load_ms":58.5,"mel_ms":2.2,"encode_ms":84.7,"decode_ms":166.5,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":255.0,"xrt_wall":138.56}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":66.6,"xrt_compute":165.21,"load_ms":52.8,"mel_ms":0.9,"encode_ms":32.7,"decode_ms":33.0,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":68.0,"xrt_wall":161.77}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":276.6,"xrt_compute":127.73,"load_ms":84.2,"mel_ms":2.2,"encode_ms":84.6,"decode_ms":189.8,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":278.3,"xrt_wall":126.98}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":71.1,"xrt_compute":154.72,"load_ms":87.1,"mel_ms":0.8,"encode_ms":32.1,"decode_ms":38.2,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":72.3,"xrt_wall":152.12}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1624.4,"xrt_compute":21.75,"load_ms":167.0,"mel_ms":70.4,"encode_ms":1012.9,"decode_ms":541.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1629.1,"xrt_wall":21.69}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":369.0,"xrt_compute":29.81,"load_ms":188.7,"mel_ms":19.1,"encode_ms":260.2,"decode_ms":89.7,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":370.5,"xrt_wall":29.69}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1911.9,"xrt_compute":18.48,"load_ms":214.0,"mel_ms":65.7,"encode_ms":1108.9,"decode_ms":737.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1915.1,"xrt_wall":18.45}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":452.7,"xrt_compute":24.3,"load_ms":271.6,"mel_ms":21.9,"encode_ms":296.6,"decode_ms":134.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":454.3,"xrt_wall":24.21}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1093.3,"xrt_compute":32.32,"load_ms":136.8,"mel_ms":70.0,"encode_ms":478.5,"decode_ms":544.7,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1099.7,"xrt_wall":32.13}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":292.8,"xrt_compute":37.57,"load_ms":144.9,"mel_ms":20.8,"encode_ms":159.4,"decode_ms":112.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":296.0,"xrt_wall":37.16}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1217.4,"xrt_compute":29.02,"load_ms":170.7,"mel_ms":62.9,"encode_ms":474.8,"decode_ms":679.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1221.7,"xrt_wall":28.92}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":312.6,"xrt_compute":35.19,"load_ms":307.9,"mel_ms":21.5,"encode_ms":155.9,"decode_ms":135.2,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":315.6,"xrt_wall":34.85} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":490.1,"xrt_compute":72.09,"load_ms":73.2,"mel_ms":2.1,"encode_ms":355.6,"decode_ms":132.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":494.7,"xrt_wall":71.43,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":129.5,"xrt_compute":84.94,"load_ms":69.6,"mel_ms":0.7,"encode_ms":103.5,"decode_ms":25.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":131.6,"xrt_wall":83.6,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":492.7,"xrt_compute":71.72,"load_ms":77.2,"mel_ms":2.1,"encode_ms":331.9,"decode_ms":158.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":497.7,"xrt_wall":70.99,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":127.8,"xrt_compute":86.1,"load_ms":81.2,"mel_ms":0.8,"encode_ms":97.1,"decode_ms":29.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":130.0,"xrt_wall":84.64,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":240.4,"xrt_compute":146.98,"load_ms":59.7,"mel_ms":2.3,"encode_ms":67.3,"decode_ms":170.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":252.9,"xrt_wall":139.69,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":59.2,"xrt_compute":185.69,"load_ms":59.2,"mel_ms":0.9,"encode_ms":25.1,"decode_ms":33.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":64.2,"xrt_wall":171.21,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":261.8,"xrt_compute":134.95,"load_ms":73.4,"mel_ms":2.3,"encode_ms":66.9,"decode_ms":192.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":274.1,"xrt_wall":128.88,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":64.0,"xrt_compute":171.97,"load_ms":73.3,"mel_ms":0.9,"encode_ms":25.0,"decode_ms":38.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":69.1,"xrt_wall":159.11,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1794.0,"xrt_compute":19.69,"load_ms":225.5,"mel_ms":58.4,"encode_ms":1049.5,"decode_ms":686.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1854.4,"xrt_wall":19.05,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":420.9,"xrt_compute":26.13,"load_ms":176.9,"mel_ms":18.6,"encode_ms":291.8,"decode_ms":110.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":441.4,"xrt_wall":24.92,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1928.0,"xrt_compute":18.33,"load_ms":306.4,"mel_ms":57.8,"encode_ms":1003.1,"decode_ms":867.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1987.7,"xrt_wall":17.78,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":437.8,"xrt_compute":25.13,"load_ms":221.9,"mel_ms":19.3,"encode_ms":270.0,"decode_ms":148.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":456.5,"xrt_wall":24.09,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1066.1,"xrt_compute":33.14,"load_ms":153.6,"mel_ms":63.5,"encode_ms":498.8,"decode_ms":503.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1087.8,"xrt_wall":32.48,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":283.6,"xrt_compute":38.78,"load_ms":86.8,"mel_ms":20.4,"encode_ms":164.7,"decode_ms":98.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":293.4,"xrt_wall":37.49,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1164.0,"xrt_compute":30.35,"load_ms":213.1,"mel_ms":61.9,"encode_ms":490.9,"decode_ms":611.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1185.5,"xrt_wall":29.8,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":307.1,"xrt_compute":35.82,"load_ms":113.2,"mel_ms":22.1,"encode_ms":163.2,"decode_ms":121.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":316.6,"xrt_wall":34.75,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/canary-1b-flash.json b/catalog/canary-1b-flash.json index e6fde46f..3a83eb85 100644 --- a/catalog/canary-1b-flash.json +++ b/catalog/canary-1b-flash.json @@ -52,21 +52,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1508.0,"xrt_compute":23.43,"load_ms":206.4,"mel_ms":2.2,"encode_ms":1363.7,"decode_ms":142.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1509.9,"xrt_wall":23.4}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":429.0,"xrt_compute":25.64,"load_ms":213.2,"mel_ms":0.8,"encode_ms":401.8,"decode_ms":26.5,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":430.1,"xrt_wall":25.58}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1792.0,"xrt_compute":19.72,"load_ms":282.9,"mel_ms":2.2,"encode_ms":1619.8,"decode_ms":170.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1793.9,"xrt_wall":19.7}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":517.2,"xrt_compute":21.27,"load_ms":282.2,"mel_ms":0.8,"encode_ms":484.9,"decode_ms":31.6,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":518.3,"xrt_wall":21.22}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":346.2,"xrt_compute":102.06,"load_ms":173.4,"mel_ms":2.3,"encode_ms":179.8,"decode_ms":164.0,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":349.2,"xrt_wall":101.17}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":108.9,"xrt_compute":100.97,"load_ms":171.1,"mel_ms":0.9,"encode_ms":74.3,"decode_ms":33.8,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":111.3,"xrt_wall":98.84}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":365.6,"xrt_compute":96.65,"load_ms":237.7,"mel_ms":2.1,"encode_ms":179.8,"decode_ms":183.6,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":368.6,"xrt_wall":95.85}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":104.2,"xrt_compute":105.6,"load_ms":274.5,"mel_ms":0.9,"encode_ms":69.6,"decode_ms":33.7,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":106.6,"xrt_wall":103.16}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4503.0,"xrt_compute":7.85,"load_ms":815.9,"mel_ms":61.8,"encode_ms":3881.9,"decode_ms":559.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":4507.5,"xrt_wall":7.84}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1130.4,"xrt_compute":9.73,"load_ms":813.4,"mel_ms":18.5,"encode_ms":1019.6,"decode_ms":92.3,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1133.2,"xrt_wall":9.71}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5478.9,"xrt_compute":6.45,"load_ms":1201.9,"mel_ms":63.2,"encode_ms":4656.3,"decode_ms":759.4,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":5483.7,"xrt_wall":6.44}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1487.3,"xrt_compute":7.4,"load_ms":1220.6,"mel_ms":21.7,"encode_ms":1332.5,"decode_ms":133.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1490.4,"xrt_wall":7.38}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2304.3,"xrt_compute":15.33,"load_ms":424.2,"mel_ms":69.1,"encode_ms":1666.3,"decode_ms":568.9,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2313.6,"xrt_wall":15.27}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":698.9,"xrt_compute":15.74,"load_ms":406.6,"mel_ms":22.2,"encode_ms":562.6,"decode_ms":114.1,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":704.2,"xrt_wall":15.62}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2454.4,"xrt_compute":14.39,"load_ms":1152.0,"mel_ms":63.1,"encode_ms":1615.6,"decode_ms":775.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2461.9,"xrt_wall":14.35}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":758.1,"xrt_compute":14.51,"load_ms":1411.7,"mel_ms":28.1,"encode_ms":580.5,"decode_ms":149.5,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":763.5,"xrt_wall":14.41} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1486.0,"xrt_compute":23.78,"load_ms":233.8,"mel_ms":2.1,"encode_ms":1346.7,"decode_ms":137.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1492.4,"xrt_wall":23.67,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":429.5,"xrt_compute":25.61,"load_ms":222.5,"mel_ms":0.8,"encode_ms":402.4,"decode_ms":26.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":432.5,"xrt_wall":25.43,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1443.6,"xrt_compute":24.47,"load_ms":293.1,"mel_ms":2.2,"encode_ms":1274.2,"decode_ms":167.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1450.3,"xrt_wall":24.36,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":416.7,"xrt_compute":26.4,"load_ms":290.7,"mel_ms":0.8,"encode_ms":383.8,"decode_ms":32.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":419.8,"xrt_wall":26.2,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":315.5,"xrt_compute":112.0,"load_ms":175.4,"mel_ms":2.3,"encode_ms":142.7,"decode_ms":170.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":328.8,"xrt_wall":107.47,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":91.8,"xrt_compute":119.77,"load_ms":169.8,"mel_ms":0.9,"encode_ms":57.9,"decode_ms":33.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":98.0,"xrt_wall":112.27,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":333.9,"xrt_compute":105.82,"load_ms":239.4,"mel_ms":2.3,"encode_ms":139.8,"decode_ms":191.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":347.4,"xrt_wall":101.7,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":93.5,"xrt_compute":117.69,"load_ms":239.9,"mel_ms":0.9,"encode_ms":56.2,"decode_ms":36.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":99.7,"xrt_wall":110.29,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4538.1,"xrt_compute":7.79,"load_ms":1080.3,"mel_ms":58.9,"encode_ms":3772.2,"decode_ms":707.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4607.2,"xrt_wall":7.67,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1104.2,"xrt_compute":9.96,"load_ms":804.4,"mel_ms":17.9,"encode_ms":975.2,"decode_ms":111.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1125.6,"xrt_wall":9.77,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4630.0,"xrt_compute":7.63,"load_ms":1508.8,"mel_ms":58.4,"encode_ms":3687.8,"decode_ms":883.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4700.3,"xrt_wall":7.52,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1092.8,"xrt_compute":10.07,"load_ms":1063.5,"mel_ms":18.2,"encode_ms":926.9,"decode_ms":147.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1113.9,"xrt_wall":9.88,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2239.4,"xrt_compute":15.78,"load_ms":556.5,"mel_ms":66.3,"encode_ms":1653.9,"decode_ms":519.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2262.4,"xrt_wall":15.62,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":693.5,"xrt_compute":15.86,"load_ms":241.6,"mel_ms":20.1,"encode_ms":569.2,"decode_ms":104.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":709.0,"xrt_wall":15.51,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2345.9,"xrt_compute":15.06,"load_ms":871.4,"mel_ms":64.8,"encode_ms":1648.4,"decode_ms":632.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2367.6,"xrt_wall":14.92,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":691.8,"xrt_compute":15.9,"load_ms":376.8,"mel_ms":20.8,"encode_ms":550.8,"decode_ms":120.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":707.2,"xrt_wall":15.55,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/canary-1b-v2.json b/catalog/canary-1b-v2.json index 2167bdec..cd46d6b7 100644 --- a/catalog/canary-1b-v2.json +++ b/catalog/canary-1b-v2.json @@ -77,21 +77,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1655.1,"xrt_compute":21.35,"load_ms":219.6,"mel_ms":2.3,"encode_ms":1462.8,"decode_ms":190.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1657.1,"xrt_wall":21.32}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":452.5,"xrt_compute":24.31,"load_ms":222.5,"mel_ms":0.8,"encode_ms":413.6,"decode_ms":38.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":453.5,"xrt_wall":24.26}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1961.8,"xrt_compute":18.01,"load_ms":304.5,"mel_ms":2.3,"encode_ms":1727.5,"decode_ms":232.0,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1963.9,"xrt_wall":17.99}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":553.9,"xrt_compute":19.86,"load_ms":298.9,"mel_ms":0.8,"encode_ms":505.0,"decode_ms":48.1,"engine_sha":"0f42b37","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":555.0,"xrt_wall":19.82}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":403.1,"xrt_compute":87.65,"load_ms":174.7,"mel_ms":2.3,"encode_ms":181.1,"decode_ms":219.7,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":406.1,"xrt_wall":87.01}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":119.1,"xrt_compute":92.34,"load_ms":176.4,"mel_ms":1.0,"encode_ms":73.1,"decode_ms":45.1,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":121.6,"xrt_wall":90.47}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":427.9,"xrt_compute":82.57,"load_ms":255.4,"mel_ms":2.2,"encode_ms":179.4,"decode_ms":246.3,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":430.7,"xrt_wall":82.03}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":121.9,"xrt_compute":90.22,"load_ms":254.5,"mel_ms":0.9,"encode_ms":71.2,"decode_ms":49.8,"engine_sha":"abb6506","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":124.3,"xrt_wall":88.48}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4699.7,"xrt_compute":7.52,"load_ms":1182.9,"mel_ms":61.5,"encode_ms":3867.9,"decode_ms":770.3,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":4704.1,"xrt_wall":7.51}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1158.5,"xrt_compute":9.49,"load_ms":1159.2,"mel_ms":17.8,"encode_ms":1002.4,"decode_ms":138.4,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1161.3,"xrt_wall":9.47}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5739.1,"xrt_compute":6.16,"load_ms":1736.3,"mel_ms":62.3,"encode_ms":4611.1,"decode_ms":1065.7,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":5743.9,"xrt_wall":6.15}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1551.6,"xrt_compute":7.09,"load_ms":1756.3,"mel_ms":20.9,"encode_ms":1325.3,"decode_ms":205.5,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1554.4,"xrt_wall":7.08}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2454.3,"xrt_compute":14.4,"load_ms":456.4,"mel_ms":65.4,"encode_ms":1651.1,"decode_ms":737.8,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2461.7,"xrt_wall":14.35}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":743.7,"xrt_compute":14.79,"load_ms":866.8,"mel_ms":23.1,"encode_ms":561.7,"decode_ms":159.0,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":748.8,"xrt_wall":14.69}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2690.8,"xrt_compute":13.13,"load_ms":1009.3,"mel_ms":67.2,"encode_ms":1612.3,"decode_ms":1011.4,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2698.3,"xrt_wall":13.09}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":824.7,"xrt_compute":13.34,"load_ms":1408.0,"mel_ms":30.4,"encode_ms":582.8,"decode_ms":211.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":829.9,"xrt_wall":13.26} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1555.9,"xrt_compute":22.71,"load_ms":263.1,"mel_ms":2.1,"encode_ms":1367.4,"decode_ms":186.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1562.0,"xrt_wall":22.62,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":442.4,"xrt_compute":24.86,"load_ms":232.6,"mel_ms":0.8,"encode_ms":404.2,"decode_ms":37.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":445.2,"xrt_wall":24.71,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1493.6,"xrt_compute":23.66,"load_ms":297.9,"mel_ms":2.2,"encode_ms":1278.7,"decode_ms":212.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1499.5,"xrt_wall":23.56,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":415.1,"xrt_compute":26.5,"load_ms":300.3,"mel_ms":0.8,"encode_ms":372.1,"decode_ms":42.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":417.9,"xrt_wall":26.32,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":362.1,"xrt_compute":97.57,"load_ms":185.3,"mel_ms":2.3,"encode_ms":142.5,"decode_ms":217.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":376.1,"xrt_wall":93.95,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":104.1,"xrt_compute":105.66,"load_ms":184.6,"mel_ms":0.9,"encode_ms":58.1,"decode_ms":45.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":110.1,"xrt_wall":99.92,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":384.7,"xrt_compute":91.84,"load_ms":260.1,"mel_ms":2.3,"encode_ms":139.5,"decode_ms":243.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":398.4,"xrt_wall":88.69,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":105.1,"xrt_compute":104.66,"load_ms":264.5,"mel_ms":0.8,"encode_ms":56.2,"decode_ms":48.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":111.3,"xrt_wall":98.85,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4773.3,"xrt_compute":7.4,"load_ms":1135.5,"mel_ms":60.1,"encode_ms":3784.4,"decode_ms":928.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4840.3,"xrt_wall":7.3,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1153.4,"xrt_compute":9.54,"load_ms":838.1,"mel_ms":18.7,"encode_ms":978.5,"decode_ms":156.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1175.4,"xrt_wall":9.36,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4969.0,"xrt_compute":7.11,"load_ms":1638.7,"mel_ms":58.3,"encode_ms":3731.8,"decode_ms":1178.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5036.4,"xrt_wall":7.02,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1153.6,"xrt_compute":9.54,"load_ms":1121.2,"mel_ms":18.1,"encode_ms":925.8,"decode_ms":209.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1174.4,"xrt_wall":9.37,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2413.1,"xrt_compute":14.64,"load_ms":612.2,"mel_ms":62.4,"encode_ms":1674.4,"decode_ms":676.3,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2439.3,"xrt_wall":14.48,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":732.3,"xrt_compute":15.02,"load_ms":261.1,"mel_ms":22.8,"encode_ms":566.8,"decode_ms":142.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":747.3,"xrt_wall":14.72,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2566.7,"xrt_compute":13.77,"load_ms":973.3,"mel_ms":64.9,"encode_ms":1656.5,"decode_ms":845.3,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2588.8,"xrt_wall":13.65,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":758.9,"xrt_compute":14.49,"load_ms":423.9,"mel_ms":22.5,"encode_ms":553.8,"decode_ms":182.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":774.7,"xrt_wall":14.2,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/canary-1b.json b/catalog/canary-1b.json index b72754e1..816aa3dc 100644 --- a/catalog/canary-1b.json +++ b/catalog/canary-1b.json @@ -52,21 +52,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1714.2,"xrt_compute":20.61,"load_ms":209.6,"mel_ms":2.3,"encode_ms":1046.6,"decode_ms":665.3,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1716.0,"xrt_wall":20.59}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":425.3,"xrt_compute":25.87,"load_ms":216.4,"mel_ms":0.8,"encode_ms":310.2,"decode_ms":114.3,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":426.2,"xrt_wall":25.81}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2045.9,"xrt_compute":17.27,"load_ms":306.5,"mel_ms":2.2,"encode_ms":1247.8,"decode_ms":795.9,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":2047.8,"xrt_wall":17.25}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":510.2,"xrt_compute":21.56,"load_ms":302.3,"mel_ms":0.8,"encode_ms":369.0,"decode_ms":140.4,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":511.1,"xrt_wall":21.52}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":931.4,"xrt_compute":37.94,"load_ms":187.6,"mel_ms":6.0,"encode_ms":152.9,"decode_ms":772.4,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":937.2,"xrt_wall":37.7}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":195.9,"xrt_compute":56.14,"load_ms":196.3,"mel_ms":1.0,"encode_ms":58.2,"decode_ms":136.7,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":198.1,"xrt_wall":55.52}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1026.4,"xrt_compute":34.42,"load_ms":274.7,"mel_ms":6.4,"encode_ms":152.4,"decode_ms":867.6,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1033.3,"xrt_wall":34.19}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":212.3,"xrt_compute":51.81,"load_ms":293.1,"mel_ms":1.8,"encode_ms":61.4,"decode_ms":149.1,"engine_sha":"19b3b87","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":216.0,"xrt_wall":50.93}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5964.8,"xrt_compute":5.92,"load_ms":761.3,"mel_ms":61.8,"encode_ms":2984.9,"decode_ms":2918.1,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":5969.2,"xrt_wall":5.92}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1233.2,"xrt_compute":8.92,"load_ms":784.1,"mel_ms":19.9,"encode_ms":779.9,"decode_ms":433.4,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1235.8,"xrt_wall":8.9}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7590.0,"xrt_compute":4.66,"load_ms":1038.0,"mel_ms":65.7,"encode_ms":3568.2,"decode_ms":3956.1,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":7594.6,"xrt_wall":4.65}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1703.1,"xrt_compute":6.46,"load_ms":1055.8,"mel_ms":21.8,"encode_ms":1035.5,"decode_ms":645.7,"engine_sha":"23c2ee6","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1705.8,"xrt_wall":6.45}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3867.8,"xrt_compute":9.13,"load_ms":469.9,"mel_ms":79.1,"encode_ms":1296.4,"decode_ms":2492.3,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":3874.1,"xrt_wall":9.12}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":918.6,"xrt_compute":11.97,"load_ms":478.3,"mel_ms":24.8,"encode_ms":438.2,"decode_ms":455.6,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":923.4,"xrt_wall":11.91}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4620.7,"xrt_compute":7.65,"load_ms":941.3,"mel_ms":75.4,"encode_ms":1256.4,"decode_ms":3289.0,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":4627.2,"xrt_wall":7.64}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1070.3,"xrt_compute":10.28,"load_ms":1144.7,"mel_ms":38.1,"encode_ms":445.8,"decode_ms":586.5,"engine_sha":"4d44530","measured_on":"2026-05-08","thermal_gated":null,"wall_ms":1074.6,"xrt_wall":10.24} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1731.1,"xrt_compute":20.41,"load_ms":232.4,"mel_ms":2.1,"encode_ms":1043.0,"decode_ms":686.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1737.0,"xrt_wall":20.34,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":430.2,"xrt_compute":25.57,"load_ms":217.8,"mel_ms":0.8,"encode_ms":312.2,"decode_ms":117.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":432.9,"xrt_wall":25.41,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1789.8,"xrt_compute":19.74,"load_ms":305.8,"mel_ms":2.2,"encode_ms":987.8,"decode_ms":799.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1796.6,"xrt_wall":19.67,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":425.7,"xrt_compute":25.84,"load_ms":295.9,"mel_ms":0.7,"encode_ms":290.2,"decode_ms":134.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":428.4,"xrt_wall":25.68,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":930.9,"xrt_compute":37.95,"load_ms":181.9,"mel_ms":2.3,"encode_ms":118.1,"decode_ms":810.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":944.8,"xrt_wall":37.4,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":187.5,"xrt_compute":58.67,"load_ms":184.2,"mel_ms":0.9,"encode_ms":46.7,"decode_ms":140.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":193.2,"xrt_wall":56.94,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1010.8,"xrt_compute":34.96,"load_ms":262.7,"mel_ms":2.3,"encode_ms":115.7,"decode_ms":892.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1025.0,"xrt_wall":34.47,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":207.3,"xrt_compute":53.07,"load_ms":264.9,"mel_ms":0.8,"encode_ms":45.7,"decode_ms":160.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":213.0,"xrt_wall":51.65,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6256.2,"xrt_compute":5.65,"load_ms":1039.7,"mel_ms":58.2,"encode_ms":2999.2,"decode_ms":3198.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6322.4,"xrt_wall":5.59,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1259.9,"xrt_compute":8.73,"load_ms":736.1,"mel_ms":18.3,"encode_ms":769.9,"decode_ms":471.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1280.5,"xrt_wall":8.59,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6957.1,"xrt_compute":5.08,"load_ms":1550.0,"mel_ms":57.1,"encode_ms":2950.6,"decode_ms":3949.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":7024.8,"xrt_wall":5.03,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1395.3,"xrt_compute":7.88,"load_ms":1039.8,"mel_ms":18.2,"encode_ms":731.5,"decode_ms":645.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1417.7,"xrt_wall":7.76,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3807.2,"xrt_compute":9.28,"load_ms":585.9,"mel_ms":74.9,"encode_ms":1359.1,"decode_ms":2373.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3831.7,"xrt_wall":9.22,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":879.4,"xrt_compute":12.51,"load_ms":250.7,"mel_ms":26.9,"encode_ms":446.2,"decode_ms":406.3,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":891.2,"xrt_wall":12.34,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4364.3,"xrt_compute":8.1,"load_ms":958.2,"mel_ms":73.3,"encode_ms":1335.9,"decode_ms":2955.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4388.1,"xrt_wall":8.05,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":962.2,"xrt_compute":11.43,"load_ms":408.7,"mel_ms":31.1,"encode_ms":433.6,"decode_ms":497.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":974.3,"xrt_wall":11.29,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/canary-qwen-2.5b.json b/catalog/canary-qwen-2.5b.json index fa87735c..a7383c76 100644 --- a/catalog/canary-qwen-2.5b.json +++ b/catalog/canary-qwen-2.5b.json @@ -49,21 +49,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3998.3,"xrt_compute":8.84,"load_ms":468.1,"mel_ms":2.3,"encode_ms":1460.1,"decode_ms":2535.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":4001.7,"xrt_wall":8.83}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1057.9,"xrt_compute":10.4,"load_ms":466.5,"mel_ms":0.8,"encode_ms":396.2,"decode_ms":660.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":1060.2,"xrt_wall":10.38}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5135.2,"xrt_compute":6.88,"load_ms":691.4,"mel_ms":2.4,"encode_ms":1741.0,"decode_ms":3391.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":5138.7,"xrt_wall":6.88}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1417.8,"xrt_compute":7.76,"load_ms":688.8,"mel_ms":0.9,"encode_ms":490.3,"decode_ms":926.6,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":1421.0,"xrt_wall":7.74}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":903.3,"xrt_compute":39.11,"load_ms":458.1,"mel_ms":5.8,"encode_ms":195.4,"decode_ms":702.2,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":911.7,"xrt_wall":38.75}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":225.7,"xrt_compute":48.73,"load_ms":472.9,"mel_ms":1.7,"encode_ms":79.7,"decode_ms":144.3,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":232.4,"xrt_wall":47.34}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1015.8,"xrt_compute":34.78,"load_ms":696.7,"mel_ms":6.0,"encode_ms":180.9,"decode_ms":828.9,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":1023.8,"xrt_wall":34.51}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":240.7,"xrt_compute":45.71,"load_ms":706.6,"mel_ms":0.9,"encode_ms":71.6,"decode_ms":168.2,"engine_sha":"1b19945","measured_on":"2026-05-17","thermal_gated":null,"wall_ms":243.8,"xrt_wall":45.11}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":13492.1,"xrt_compute":2.62,"load_ms":2359.0,"mel_ms":62.7,"encode_ms":3884.3,"decode_ms":9545.1,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":13506.0,"xrt_wall":2.62}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3420.7,"xrt_compute":3.22,"load_ms":2016.8,"mel_ms":21.1,"encode_ms":1053.1,"decode_ms":2346.5,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":3432.0,"xrt_wall":3.21}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":18405.1,"xrt_compute":1.92,"load_ms":3872.0,"mel_ms":70.5,"encode_ms":4634.8,"decode_ms":13699.8,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":18419.3,"xrt_wall":1.92}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4720.5,"xrt_compute":2.33,"load_ms":3833.1,"mel_ms":22.3,"encode_ms":1305.0,"decode_ms":3393.2,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":4731.7,"xrt_wall":2.33}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8460.8,"xrt_compute":4.18,"load_ms":2220.4,"mel_ms":81.4,"encode_ms":1676.5,"decode_ms":6703.0,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":8477.0,"xrt_wall":4.17}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2100.4,"xrt_compute":5.24,"load_ms":2605.5,"mel_ms":29.8,"encode_ms":585.9,"decode_ms":1484.8,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":2113.8,"xrt_wall":5.2}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9704.3,"xrt_compute":3.64,"load_ms":3137.0,"mel_ms":81.3,"encode_ms":1674.0,"decode_ms":7949.0,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":9721.3,"xrt_wall":3.63}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2391.3,"xrt_compute":4.6,"load_ms":3508.2,"mel_ms":35.1,"encode_ms":581.4,"decode_ms":1774.8,"engine_sha":"51db32d","measured_on":"2026-05-16","thermal_gated":null,"wall_ms":2405.2,"xrt_wall":4.57} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3813.3,"xrt_compute":9.27,"load_ms":526.7,"mel_ms":2.1,"encode_ms":1403.8,"decode_ms":2407.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3820.4,"xrt_wall":9.25,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1043.1,"xrt_compute":10.55,"load_ms":478.3,"mel_ms":0.8,"encode_ms":404.3,"decode_ms":638.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1046.8,"xrt_wall":10.51,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3831.4,"xrt_compute":9.22,"load_ms":697.5,"mel_ms":2.2,"encode_ms":1336.1,"decode_ms":2493.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3838.1,"xrt_wall":9.21,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1015.4,"xrt_compute":10.83,"load_ms":700.3,"mel_ms":0.8,"encode_ms":377.2,"decode_ms":637.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1019.0,"xrt_wall":10.8,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":830.8,"xrt_compute":42.53,"load_ms":495.7,"mel_ms":2.3,"encode_ms":143.2,"decode_ms":685.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":845.2,"xrt_wall":41.8,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":204.7,"xrt_compute":53.73,"load_ms":494.0,"mel_ms":0.9,"encode_ms":58.6,"decode_ms":145.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":211.8,"xrt_wall":51.92,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":961.4,"xrt_compute":36.75,"load_ms":719.0,"mel_ms":2.2,"encode_ms":140.9,"decode_ms":818.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":976.6,"xrt_wall":36.18,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":228.6,"xrt_compute":48.11,"load_ms":728.9,"mel_ms":0.9,"encode_ms":56.8,"decode_ms":171.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":235.7,"xrt_wall":46.68,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":13865.1,"xrt_compute":2.55,"load_ms":2841.8,"mel_ms":60.9,"encode_ms":3882.7,"decode_ms":9921.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13939.2,"xrt_wall":2.53,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3460.7,"xrt_compute":3.18,"load_ms":2540.2,"mel_ms":20.0,"encode_ms":1045.7,"decode_ms":2394.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3494.1,"xrt_wall":3.15,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":16243.0,"xrt_compute":2.18,"load_ms":4389.6,"mel_ms":60.3,"encode_ms":3824.6,"decode_ms":12358.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":16316.6,"xrt_wall":2.17,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3871.0,"xrt_compute":2.84,"load_ms":4429.2,"mel_ms":19.2,"encode_ms":1016.5,"decode_ms":2835.3,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3904.5,"xrt_wall":2.82,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8712.7,"xrt_compute":4.06,"load_ms":4646.6,"mel_ms":71.5,"encode_ms":1834.9,"decode_ms":6806.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8794.6,"xrt_wall":4.02,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2150.4,"xrt_compute":5.12,"load_ms":4759.8,"mel_ms":33.1,"encode_ms":606.8,"decode_ms":1510.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2184.3,"xrt_wall":5.04,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":10093.7,"xrt_compute":3.5,"load_ms":6344.4,"mel_ms":68.1,"encode_ms":1807.5,"decode_ms":8218.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":10179.3,"xrt_wall":3.47,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2470.9,"xrt_compute":4.45,"load_ms":6743.8,"mel_ms":38.1,"encode_ms":610.2,"decode_ms":1822.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2505.4,"xrt_wall":4.39,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/cohere-transcribe-03-2026.json b/catalog/cohere-transcribe-03-2026.json index 56edda69..04270d95 100644 --- a/catalog/cohere-transcribe-03-2026.json +++ b/catalog/cohere-transcribe-03-2026.json @@ -62,14 +62,14 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":3490.0,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1050.0,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4130.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1210.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":465.0,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":154.0,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":491.0,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":150.0,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3535.3,"xrt_compute":9.99,"load_ms":506.4,"mel_ms":2.5,"encode_ms":3342.4,"decode_ms":190.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3542.8,"xrt_wall":9.97,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1004.4,"xrt_compute":10.95,"load_ms":459.3,"mel_ms":0.9,"encode_ms":966.5,"decode_ms":37.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1007.8,"xrt_wall":10.91,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3254.0,"xrt_compute":10.86,"load_ms":686.3,"mel_ms":2.4,"encode_ms":3062.8,"decode_ms":188.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3260.7,"xrt_wall":10.84,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":926.4,"xrt_compute":11.87,"load_ms":613.9,"mel_ms":0.9,"encode_ms":884.3,"decode_ms":41.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":930.1,"xrt_wall":11.83,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":492.4,"xrt_compute":71.76,"load_ms":404.5,"mel_ms":2.2,"encode_ms":304.2,"decode_ms":185.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":507.3,"xrt_wall":69.64,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":144.1,"xrt_compute":76.32,"load_ms":364.4,"mel_ms":0.8,"encode_ms":105.1,"decode_ms":38.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":151.5,"xrt_wall":72.61,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":470.2,"xrt_compute":75.14,"load_ms":598.1,"mel_ms":2.2,"encode_ms":272.8,"decode_ms":195.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":484.8,"xrt_wall":72.88,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":143.8,"xrt_compute":76.51,"load_ms":525.7,"mel_ms":0.8,"encode_ms":101.5,"decode_ms":41.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":151.3,"xrt_wall":72.7,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8929.8,"xrt_compute":3.96,"load_ms":2104.3,"mel_ms":57.8,"encode_ms":8104.2,"decode_ms":767.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8979.2,"xrt_wall":3.93,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2465.2,"xrt_compute":4.46,"load_ms":2645.3,"mel_ms":18.7,"encode_ms":2299.8,"decode_ms":146.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2491.1,"xrt_wall":4.42,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8762.2,"xrt_compute":4.03,"load_ms":2430.5,"mel_ms":58.8,"encode_ms":7737.3,"decode_ms":966.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8811.3,"xrt_wall":4.01,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/cohere-transcribe-arabic-07-2026.json b/catalog/cohere-transcribe-arabic-07-2026.json index 8ed550e9..99b08fa1 100644 --- a/catalog/cohere-transcribe-arabic-07-2026.json +++ b/catalog/cohere-transcribe-arabic-07-2026.json @@ -56,14 +56,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":3490.0,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1050.0,"xrt_compute":11.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4130.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1210.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":465.0,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":154.0,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":491.0,"xrt_compute":72.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":150.0,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3432.7,"xrt_compute":10.29,"load_ms":497.4,"mel_ms":2.4,"encode_ms":3253.4,"decode_ms":177.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3439.9,"xrt_wall":10.27,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1313.8,"xrt_compute":8.37,"load_ms":478.4,"mel_ms":1.0,"encode_ms":1268.7,"decode_ms":44.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1318.1,"xrt_wall":8.35,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3356.4,"xrt_compute":10.53,"load_ms":696.5,"mel_ms":2.5,"encode_ms":3146.5,"decode_ms":207.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3363.8,"xrt_wall":10.5,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":911.6,"xrt_compute":12.07,"load_ms":629.2,"mel_ms":0.8,"encode_ms":872.5,"decode_ms":38.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":915.1,"xrt_wall":12.02,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":459.5,"xrt_compute":76.89,"load_ms":405.7,"mel_ms":2.2,"encode_ms":278.8,"decode_ms":178.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":474.7,"xrt_wall":74.44,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":142.6,"xrt_compute":77.15,"load_ms":364.6,"mel_ms":0.8,"encode_ms":103.9,"decode_ms":37.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":149.9,"xrt_wall":73.38,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":468.8,"xrt_compute":75.36,"load_ms":596.9,"mel_ms":2.2,"encode_ms":271.5,"decode_ms":195.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":483.9,"xrt_wall":73.02,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":141.9,"xrt_compute":77.53,"load_ms":548.9,"mel_ms":0.8,"encode_ms":100.3,"decode_ms":40.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":149.9,"xrt_wall":73.4,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8942.2,"xrt_compute":3.95,"load_ms":2512.3,"mel_ms":59.5,"encode_ms":8109.3,"decode_ms":773.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8990.3,"xrt_wall":3.93,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2455.3,"xrt_compute":4.48,"load_ms":2597.1,"mel_ms":18.7,"encode_ms":2292.5,"decode_ms":144.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2481.5,"xrt_wall":4.43,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8754.0,"xrt_compute":4.04,"load_ms":3913.5,"mel_ms":59.6,"encode_ms":7725.2,"decode_ms":969.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8803.8,"xrt_wall":4.01,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/fun-asr-mlt-nano-2512.json b/catalog/fun-asr-mlt-nano-2512.json index 684ff011..908c4a41 100644 --- a/catalog/fun-asr-mlt-nano-2512.json +++ b/catalog/fun-asr-mlt-nano-2512.json @@ -85,21 +85,21 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":2120.0,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":575.0,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2360.0,"xrt_compute":15.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":661.0,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":499.0,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":144.0,"xrt_compute":76.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":539.0,"xrt_compute":66.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":156.0,"xrt_compute":70.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6873.6,"xrt_compute":5.14,"load_ms":589.3,"mel_ms":104.1,"encode_ms":2031.5,"decode_ms":4737.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":6968.8,"xrt_wall":5.07}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1809.7,"xrt_compute":6.08,"load_ms":569.8,"mel_ms":31.6,"encode_ms":549.3,"decode_ms":1228.8,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1842.1,"xrt_wall":5.97}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8484.1,"xrt_compute":4.17,"load_ms":921.1,"mel_ms":105.8,"encode_ms":2275.3,"decode_ms":6103.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":8595.6,"xrt_wall":4.11}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2313.3,"xrt_compute":4.75,"load_ms":932.2,"mel_ms":33.4,"encode_ms":648.3,"decode_ms":1631.5,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2352.0,"xrt_wall":4.68}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3862.4,"xrt_compute":9.15,"load_ms":559.1,"mel_ms":104.2,"encode_ms":966.0,"decode_ms":2792.2,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":3915.3,"xrt_wall":9.02}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1001.7,"xrt_compute":10.98,"load_ms":558.7,"mel_ms":30.4,"encode_ms":274.4,"decode_ms":696.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1025.4,"xrt_wall":10.73}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4425.7,"xrt_compute":7.98,"load_ms":801.7,"mel_ms":107.2,"encode_ms":959.6,"decode_ms":3358.9,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":4478.8,"xrt_wall":7.89}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1118.3,"xrt_compute":9.84,"load_ms":790.3,"mel_ms":40.0,"encode_ms":270.7,"decode_ms":807.6,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1142.1,"xrt_wall":9.63} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1932.9,"xrt_compute":18.28,"load_ms":199.2,"mel_ms":36.8,"encode_ms":691.1,"decode_ms":1205.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1964.5,"xrt_wall":17.99,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":536.6,"xrt_compute":20.5,"load_ms":183.2,"mel_ms":11.5,"encode_ms":193.5,"decode_ms":331.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":546.7,"xrt_wall":20.12,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1917.0,"xrt_compute":18.43,"load_ms":275.4,"mel_ms":36.7,"encode_ms":668.5,"decode_ms":1211.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1947.5,"xrt_wall":18.14,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":532.7,"xrt_compute":20.65,"load_ms":260.3,"mel_ms":11.5,"encode_ms":190.0,"decode_ms":331.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":542.3,"xrt_wall":20.29,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":489.2,"xrt_compute":72.22,"load_ms":206.6,"mel_ms":38.7,"encode_ms":66.5,"decode_ms":384.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":496.5,"xrt_wall":71.17,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":136.4,"xrt_compute":80.64,"load_ms":193.5,"mel_ms":11.6,"encode_ms":28.5,"decode_ms":96.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":141.2,"xrt_wall":77.9,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":546.2,"xrt_compute":64.69,"load_ms":290.9,"mel_ms":46.2,"encode_ms":65.5,"decode_ms":434.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":553.5,"xrt_wall":63.83,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":145.9,"xrt_compute":75.38,"load_ms":272.6,"mel_ms":13.1,"encode_ms":28.0,"decode_ms":104.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":151.0,"xrt_wall":72.86,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6940.2,"xrt_compute":5.09,"load_ms":816.4,"mel_ms":80.0,"encode_ms":2093.6,"decode_ms":4766.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":7040.9,"xrt_wall":5.02,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1773.5,"xrt_compute":6.2,"load_ms":576.9,"mel_ms":23.5,"encode_ms":564.9,"decode_ms":1185.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1808.3,"xrt_wall":6.08,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7395.1,"xrt_compute":4.78,"load_ms":1290.5,"mel_ms":79.1,"encode_ms":1845.5,"decode_ms":5470.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":7491.3,"xrt_wall":4.72,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1786.4,"xrt_compute":6.16,"load_ms":862.2,"mel_ms":23.4,"encode_ms":478.0,"decode_ms":1285.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1818.4,"xrt_wall":6.05,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4026.4,"xrt_compute":8.78,"load_ms":1195.8,"mel_ms":87.5,"encode_ms":1261.5,"decode_ms":2677.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4102.2,"xrt_wall":8.61,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1036.8,"xrt_compute":10.61,"load_ms":757.6,"mel_ms":24.5,"encode_ms":354.4,"decode_ms":657.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1069.2,"xrt_wall":10.29,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4454.3,"xrt_compute":7.93,"load_ms":2039.4,"mel_ms":89.8,"encode_ms":1254.1,"decode_ms":3110.3,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4531.5,"xrt_wall":7.8,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1129.0,"xrt_compute":9.74,"load_ms":1279.3,"mel_ms":25.7,"encode_ms":350.6,"decode_ms":752.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1162.0,"xrt_wall":9.47,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/fun-asr-nano-2512.json b/catalog/fun-asr-nano-2512.json index bfad0317..a2c81d68 100644 --- a/catalog/fun-asr-nano-2512.json +++ b/catalog/fun-asr-nano-2512.json @@ -53,14 +53,14 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1310.0,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":358.0,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1400.0,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":379.0,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":433.0,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":129.0,"xrt_compute":86.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":486.0,"xrt_compute":73.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":134.0,"xrt_compute":82.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1315.4,"xrt_compute":26.86,"load_ms":210.0,"mel_ms":37.2,"encode_ms":689.2,"decode_ms":589.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1347.0,"xrt_wall":26.23,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":361.8,"xrt_compute":30.4,"load_ms":192.7,"mel_ms":11.6,"encode_ms":196.6,"decode_ms":153.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":371.8,"xrt_wall":29.58,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1358.9,"xrt_compute":26.0,"load_ms":291.4,"mel_ms":37.0,"encode_ms":661.9,"decode_ms":660.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1388.9,"xrt_wall":25.44,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":365.2,"xrt_compute":30.12,"load_ms":258.3,"mel_ms":11.6,"encode_ms":187.3,"decode_ms":166.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":374.7,"xrt_wall":29.35,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":449.2,"xrt_compute":78.65,"load_ms":214.2,"mel_ms":47.2,"encode_ms":67.9,"decode_ms":334.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":456.8,"xrt_wall":77.35,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":123.8,"xrt_compute":88.83,"load_ms":192.7,"mel_ms":13.7,"encode_ms":28.1,"decode_ms":82.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":129.1,"xrt_wall":85.19,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":483.2,"xrt_compute":73.13,"load_ms":293.8,"mel_ms":43.9,"encode_ms":64.4,"decode_ms":374.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":490.4,"xrt_wall":72.05,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":132.3,"xrt_compute":83.13,"load_ms":275.6,"mel_ms":13.7,"encode_ms":27.1,"decode_ms":91.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":137.5,"xrt_wall":79.98,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4657.8,"xrt_compute":7.59,"load_ms":574.8,"mel_ms":78.6,"encode_ms":2047.4,"decode_ms":2531.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4753.1,"xrt_wall":7.43,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1145.3,"xrt_compute":9.6,"load_ms":832.1,"mel_ms":23.4,"encode_ms":557.9,"decode_ms":564.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1180.3,"xrt_wall":9.32,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5082.5,"xrt_compute":6.95,"load_ms":945.5,"mel_ms":78.7,"encode_ms":1808.2,"decode_ms":3195.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5169.3,"xrt_wall":6.83,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/gigaam-v3-ctc.json b/catalog/gigaam-v3-ctc.json index a629dfab..15f7be4f 100644 --- a/catalog/gigaam-v3-ctc.json +++ b/catalog/gigaam-v3-ctc.json @@ -48,14 +48,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":152.0,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":157.0,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":32.0,"xrt_compute":142.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":31.0,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":352.5,"xrt_compute":12.77,"load_ms":236.6,"mel_ms":10.9,"encode_ms":339.2,"decode_ms":2.3,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":355.0,"xrt_wall":12.67,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":312.9,"xrt_compute":14.38,"load_ms":326.7,"mel_ms":10.5,"encode_ms":300.1,"decode_ms":2.4,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":315.4,"xrt_wall":14.27,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":133.8,"xrt_compute":33.63,"load_ms":94.1,"mel_ms":15.6,"encode_ms":114.0,"decode_ms":4.2,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":143.6,"xrt_wall":31.33,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":129.1,"xrt_compute":34.86,"load_ms":121.6,"mel_ms":13.6,"encode_ms":112.5,"decode_ms":3.0,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":137.4,"xrt_wall":32.75,"publication_profile":"asr-publication-v2"} - ] + "speed_benchmarks": [] } diff --git a/catalog/gigaam-v3-e2e-ctc.json b/catalog/gigaam-v3-e2e-ctc.json index 34069612..afd6bbbe 100644 --- a/catalog/gigaam-v3-e2e-ctc.json +++ b/catalog/gigaam-v3-e2e-ctc.json @@ -48,14 +48,5 @@ "batch_size": null, "timestamps": null }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":161.0,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":164.0,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":40.0,"xrt_compute":111.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":40.0,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":371.3,"xrt_compute":12.12,"load_ms":237.7,"mel_ms":10.8,"encode_ms":344.5,"decode_ms":15.9,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":373.9,"xrt_wall":12.03,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":325.2,"xrt_compute":13.84,"load_ms":340.7,"mel_ms":11.6,"encode_ms":297.7,"decode_ms":15.9,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":327.7,"xrt_wall":13.73,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":141.7,"xrt_compute":31.76,"load_ms":103.9,"mel_ms":11.7,"encode_ms":113.6,"decode_ms":16.4,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":148.3,"xrt_wall":30.34,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":138.6,"xrt_compute":32.47,"load_ms":124.0,"mel_ms":11.4,"encode_ms":110.9,"decode_ms":16.3,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":145.3,"xrt_wall":30.96,"publication_profile":"asr-publication-v2"} - ] + "speed_benchmarks": [] } diff --git a/catalog/gigaam-v3-e2e-rnnt.json b/catalog/gigaam-v3-e2e-rnnt.json index d7e5fa0b..edf16649 100644 --- a/catalog/gigaam-v3-e2e-rnnt.json +++ b/catalog/gigaam-v3-e2e-rnnt.json @@ -48,14 +48,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":172.0,"xrt_compute":26.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":177.0,"xrt_compute":25.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":51.0,"xrt_compute":89.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":51.0,"xrt_compute":88.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":510.1,"xrt_compute":8.82,"load_ms":243.2,"mel_ms":10.7,"encode_ms":343.5,"decode_ms":155.8,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":512.8,"xrt_wall":8.77,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":465.1,"xrt_compute":9.68,"load_ms":294.8,"mel_ms":11.3,"encode_ms":298.0,"decode_ms":155.8,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":468.0,"xrt_wall":9.62,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":286.2,"xrt_compute":15.72,"load_ms":119.3,"mel_ms":10.3,"encode_ms":120.4,"decode_ms":155.6,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":293.2,"xrt_wall":15.35,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":284.6,"xrt_compute":15.81,"load_ms":138.8,"mel_ms":10.6,"encode_ms":118.2,"decode_ms":155.8,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":291.9,"xrt_wall":15.42,"publication_profile":"asr-publication-v2"} - ] + "speed_benchmarks": [] } diff --git a/catalog/gigaam-v3-rnnt.json b/catalog/gigaam-v3-rnnt.json index 07189ae7..5db952c1 100644 --- a/catalog/gigaam-v3-rnnt.json +++ b/catalog/gigaam-v3-rnnt.json @@ -48,14 +48,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":166.0,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":167.0,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":43.0,"xrt_compute":105.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":41.0,"xrt_compute":110.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":401.6,"xrt_compute":11.2,"load_ms":192.6,"mel_ms":10.6,"encode_ms":347.0,"decode_ms":44.0,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":404.4,"xrt_wall":11.13,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":352.4,"xrt_compute":12.77,"load_ms":351.9,"mel_ms":10.0,"encode_ms":298.3,"decode_ms":44.0,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":355.2,"xrt_wall":12.67,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"ru","sample_duration_s":4.5,"total_ms":169.8,"xrt_compute":26.49,"load_ms":111.8,"mel_ms":12.2,"encode_ms":114.2,"decode_ms":43.5,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":177.1,"xrt_wall":25.41,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"ru","sample_duration_s":4.5,"total_ms":166.0,"xrt_compute":27.11,"load_ms":133.1,"mel_ms":11.4,"encode_ms":110.8,"decode_ms":43.8,"engine_sha":"3d7b4e2a","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":172.6,"xrt_wall":26.07,"publication_profile":"asr-publication-v2"} - ] + "speed_benchmarks": [] } diff --git a/catalog/granite-4.0-1b-speech.json b/catalog/granite-4.0-1b-speech.json index bdf01059..32dae58b 100644 --- a/catalog/granite-4.0-1b-speech.json +++ b/catalog/granite-4.0-1b-speech.json @@ -16,7 +16,7 @@ "long_form_strategy": "hard-cap", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"verified":false,"targets":["en","fr","de","es","pt","ja","it","zh"],"pairs":null,"note":"translation is reached via a separate chat-template prompt; scripts/convert-granite.py is authoritative for the target set"}, + "translate": {"supported":true,"verified":false,"targets":["en","fr","de","es","pt","ja","it","zh"],"pairs":["en>fr","fr>en","en>de","de>en","en>es","es>en","en>pt","pt>en","en>ja","ja>en","en>it","en>zh"],"note":"translation is reached via a separate chat-template prompt; scripts/convert-granite.py is authoritative for the target set"}, "lang_detect": {"supported":false}, "timestamps": {"supported":false}, "streaming": {"supported":false}, @@ -54,21 +54,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4250.7,"xrt_compute":8.31,"load_ms":385.1,"mel_ms":1.9,"encode_ms":2796.9,"decode_ms":1452.0,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5147.8,"xrt_wall":6.86}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1299.2,"xrt_compute":8.47,"load_ms":381.2,"mel_ms":0.7,"encode_ms":827.8,"decode_ms":470.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1484.2,"xrt_wall":7.41}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4811.9,"xrt_compute":7.34,"load_ms":580.8,"mel_ms":2.0,"encode_ms":3316.3,"decode_ms":1493.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5964.5,"xrt_wall":5.92}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1554.6,"xrt_compute":7.08,"load_ms":576.4,"mel_ms":0.7,"encode_ms":1020.3,"decode_ms":533.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1796.5,"xrt_wall":6.12}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":347.2,"xrt_compute":101.77,"load_ms":384.8,"mel_ms":1.7,"encode_ms":238.2,"decode_ms":107.2,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":927.8,"xrt_wall":38.08}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":128.8,"xrt_compute":85.41,"load_ms":384.7,"mel_ms":0.8,"encode_ms":80.2,"decode_ms":47.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":254.3,"xrt_wall":43.25}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":340.7,"xrt_compute":103.69,"load_ms":603.2,"mel_ms":1.8,"encode_ms":235.0,"decode_ms":104.0,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1049.8,"xrt_wall":33.66}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":126.5,"xrt_compute":86.92,"load_ms":601.0,"mel_ms":0.7,"encode_ms":79.1,"decode_ms":46.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":284.0,"xrt_wall":38.73}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":13721.2,"xrt_compute":2.58,"load_ms":1532.9,"mel_ms":47.2,"encode_ms":9682.7,"decode_ms":3991.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":18084.8,"xrt_wall":1.95}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4298.6,"xrt_compute":2.56,"load_ms":2224.6,"mel_ms":15.2,"encode_ms":2884.1,"decode_ms":1399.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":5209.5,"xrt_wall":2.11}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":17385.3,"xrt_compute":2.03,"load_ms":3740.1,"mel_ms":52.6,"encode_ms":11702.5,"decode_ms":5630.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":24212.9,"xrt_wall":1.46}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5269.0,"xrt_compute":2.09,"load_ms":3692.4,"mel_ms":16.2,"encode_ms":3379.3,"decode_ms":1873.5,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":6719.5,"xrt_wall":1.64}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6607.5,"xrt_compute":5.35,"load_ms":1635.7,"mel_ms":60.9,"encode_ms":4776.8,"decode_ms":1769.8,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":11370.3,"xrt_wall":3.11}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2448.3,"xrt_compute":4.49,"load_ms":2150.1,"mel_ms":31.3,"encode_ms":1601.1,"decode_ms":815.9,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3471.9,"xrt_wall":3.17}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6501.4,"xrt_compute":5.43,"load_ms":3466.0,"mel_ms":62.0,"encode_ms":4702.1,"decode_ms":1737.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":12299.6,"xrt_wall":2.87}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2434.5,"xrt_compute":4.52,"load_ms":3339.5,"mel_ms":32.7,"encode_ms":1598.7,"decode_ms":803.0,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3710.9,"xrt_wall":2.96} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4227.2,"xrt_compute":8.36,"load_ms":378.1,"mel_ms":2.0,"encode_ms":2822.6,"decode_ms":1402.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5133.6,"xrt_wall":6.88,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1386.1,"xrt_compute":7.94,"load_ms":386.2,"mel_ms":0.8,"encode_ms":889.3,"decode_ms":495.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1576.1,"xrt_wall":6.98,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4200.5,"xrt_compute":8.41,"load_ms":580.6,"mel_ms":2.1,"encode_ms":2732.6,"decode_ms":1465.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5350.0,"xrt_wall":6.6,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1323.7,"xrt_compute":8.31,"load_ms":577.9,"mel_ms":0.8,"encode_ms":823.8,"decode_ms":499.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1567.3,"xrt_wall":7.02,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":472.3,"xrt_compute":74.81,"load_ms":473.5,"mel_ms":2.1,"encode_ms":302.9,"decode_ms":167.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1186.6,"xrt_wall":29.78,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":168.9,"xrt_compute":65.11,"load_ms":416.7,"mel_ms":0.8,"encode_ms":104.0,"decode_ms":64.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":311.0,"xrt_wall":35.37,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":502.5,"xrt_compute":70.32,"load_ms":705.5,"mel_ms":2.3,"encode_ms":335.1,"decode_ms":165.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1314.1,"xrt_wall":26.89,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":136.4,"xrt_compute":80.65,"load_ms":639.5,"mel_ms":0.8,"encode_ms":83.9,"decode_ms":51.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":293.9,"xrt_wall":37.42,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":12720.7,"xrt_compute":2.78,"load_ms":2198.2,"mel_ms":42.8,"encode_ms":8738.1,"decode_ms":3939.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":17191.9,"xrt_wall":2.06,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3903.2,"xrt_compute":2.82,"load_ms":1446.8,"mel_ms":15.8,"encode_ms":2509.3,"decode_ms":1378.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4842.4,"xrt_wall":2.27,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":12928.2,"xrt_compute":2.73,"load_ms":3728.2,"mel_ms":44.1,"encode_ms":8907.2,"decode_ms":3976.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":19603.2,"xrt_wall":1.8,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3958.6,"xrt_compute":2.78,"load_ms":3735.2,"mel_ms":15.7,"encode_ms":2518.4,"decode_ms":1424.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5379.1,"xrt_wall":2.04,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6844.4,"xrt_compute":5.16,"load_ms":3084.1,"mel_ms":47.7,"encode_ms":5082.4,"decode_ms":1714.3,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":10961.6,"xrt_wall":3.22,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2543.9,"xrt_compute":4.32,"load_ms":3020.8,"mel_ms":26.7,"encode_ms":1779.3,"decode_ms":737.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3422.8,"xrt_wall":3.21,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7148.2,"xrt_compute":4.94,"load_ms":3988.1,"mel_ms":57.3,"encode_ms":5409.0,"decode_ms":1681.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":12590.9,"xrt_wall":2.81,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2539.8,"xrt_compute":4.33,"load_ms":4431.0,"mel_ms":27.9,"encode_ms":1765.4,"decode_ms":746.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3759.7,"xrt_wall":2.93,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/granite-speech-4.1-2b-nar.json b/catalog/granite-speech-4.1-2b-nar.json index e77c2387..15aff752 100644 --- a/catalog/granite-speech-4.1-2b-nar.json +++ b/catalog/granite-speech-4.1-2b-nar.json @@ -53,21 +53,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6214.3,"xrt_compute":5.69,"load_ms":357.5,"mel_ms":2.0,"encode_ms":3488.4,"decode_ms":2723.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":6501.8,"xrt_wall":5.43}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1783.1,"xrt_compute":6.17,"load_ms":351.6,"mel_ms":0.7,"encode_ms":1072.6,"decode_ms":709.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1871.4,"xrt_wall":5.88}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7380.5,"xrt_compute":4.79,"load_ms":535.6,"mel_ms":2.2,"encode_ms":3980.7,"decode_ms":3397.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":7709.2,"xrt_wall":4.58}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1893.2,"xrt_compute":5.81,"load_ms":525.1,"mel_ms":0.8,"encode_ms":1214.8,"decode_ms":677.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1986.4,"xrt_wall":5.54}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":518.0,"xrt_compute":68.21,"load_ms":365.1,"mel_ms":2.0,"encode_ms":302.4,"decode_ms":213.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":664.2,"xrt_wall":53.2}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":163.1,"xrt_compute":67.43,"load_ms":364.2,"mel_ms":0.8,"encode_ms":99.7,"decode_ms":62.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":208.8,"xrt_wall":52.68}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":491.3,"xrt_compute":71.91,"load_ms":551.6,"mel_ms":1.9,"encode_ms":285.8,"decode_ms":203.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":635.2,"xrt_wall":55.62}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":151.3,"xrt_compute":72.7,"load_ms":549.7,"mel_ms":0.8,"encode_ms":93.7,"decode_ms":56.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":196.0,"xrt_wall":56.12}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":19551.7,"xrt_compute":1.81,"load_ms":1182.7,"mel_ms":49.8,"encode_ms":11774.3,"decode_ms":7727.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":20388.3,"xrt_wall":1.73}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5461.8,"xrt_compute":2.01,"load_ms":1988.4,"mel_ms":15.4,"encode_ms":3535.7,"decode_ms":1910.7,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":5708.1,"xrt_wall":1.93}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":23770.5,"xrt_compute":1.49,"load_ms":3180.0,"mel_ms":56.9,"encode_ms":13813.3,"decode_ms":9900.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":24806.2,"xrt_wall":1.42}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6754.9,"xrt_compute":1.63,"load_ms":3191.0,"mel_ms":15.9,"encode_ms":4207.4,"decode_ms":2531.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":7053.1,"xrt_wall":1.56}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8525.3,"xrt_compute":4.14,"load_ms":1083.1,"mel_ms":46.9,"encode_ms":5414.3,"decode_ms":3064.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":9846.0,"xrt_wall":3.59}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2753.2,"xrt_compute":4.0,"load_ms":1781.8,"mel_ms":15.3,"encode_ms":1831.2,"decode_ms":906.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3163.3,"xrt_wall":3.48}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8322.8,"xrt_compute":4.25,"load_ms":1868.9,"mel_ms":49.2,"encode_ms":5318.6,"decode_ms":2955.0,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":9569.1,"xrt_wall":3.69}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2682.8,"xrt_compute":4.1,"load_ms":2896.8,"mel_ms":15.5,"encode_ms":1779.5,"decode_ms":887.8,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3061.4,"xrt_wall":3.59} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5748.6,"xrt_compute":6.15,"load_ms":355.1,"mel_ms":2.0,"encode_ms":3191.7,"decode_ms":2554.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6015.4,"xrt_wall":5.87,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1666.0,"xrt_compute":6.6,"load_ms":353.8,"mel_ms":0.7,"encode_ms":990.2,"decode_ms":675.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1749.3,"xrt_wall":6.29,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5271.3,"xrt_compute":6.7,"load_ms":598.3,"mel_ms":2.0,"encode_ms":3004.2,"decode_ms":2265.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5536.5,"xrt_wall":6.38,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1589.0,"xrt_compute":6.92,"load_ms":536.8,"mel_ms":0.8,"encode_ms":933.8,"decode_ms":654.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1670.6,"xrt_wall":6.58,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":465.7,"xrt_compute":75.88,"load_ms":365.1,"mel_ms":2.0,"encode_ms":267.1,"decode_ms":196.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":670.8,"xrt_wall":52.67,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":153.0,"xrt_compute":71.92,"load_ms":363.0,"mel_ms":0.8,"encode_ms":89.1,"decode_ms":63.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":213.5,"xrt_wall":51.52,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":466.5,"xrt_compute":75.73,"load_ms":553.2,"mel_ms":2.0,"encode_ms":274.3,"decode_ms":190.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":671.7,"xrt_wall":52.6,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":149.0,"xrt_compute":73.82,"load_ms":552.3,"mel_ms":0.8,"encode_ms":87.4,"decode_ms":60.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":209.6,"xrt_wall":52.47,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":17837.8,"xrt_compute":1.98,"load_ms":1947.0,"mel_ms":49.1,"encode_ms":10554.2,"decode_ms":7234.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":18762.3,"xrt_wall":1.88,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4977.4,"xrt_compute":2.21,"load_ms":1654.4,"mel_ms":14.9,"encode_ms":3100.1,"decode_ms":1862.3,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5264.0,"xrt_wall":2.09,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":17880.0,"xrt_compute":1.98,"load_ms":3246.3,"mel_ms":47.1,"encode_ms":10515.9,"decode_ms":7317.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":18915.9,"xrt_wall":1.87,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4764.6,"xrt_compute":2.31,"load_ms":3264.9,"mel_ms":15.3,"encode_ms":2948.7,"decode_ms":1800.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5056.7,"xrt_wall":2.18,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":9024.1,"xrt_compute":3.92,"load_ms":1555.4,"mel_ms":47.0,"encode_ms":5688.7,"decode_ms":3288.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":10445.7,"xrt_wall":3.38,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2774.3,"xrt_compute":3.96,"load_ms":947.4,"mel_ms":15.2,"encode_ms":1998.8,"decode_ms":760.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4556.9,"xrt_wall":2.41,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9092.7,"xrt_compute":3.89,"load_ms":2654.0,"mel_ms":44.7,"encode_ms":5669.4,"decode_ms":3378.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":10475.0,"xrt_wall":3.37,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2684.8,"xrt_compute":4.1,"load_ms":2642.8,"mel_ms":14.6,"encode_ms":1927.2,"decode_ms":743.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4439.8,"xrt_wall":2.48,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/granite-speech-4.1-2b-plus.json b/catalog/granite-speech-4.1-2b-plus.json index c95737ba..b377e89c 100644 --- a/catalog/granite-speech-4.1-2b-plus.json +++ b/catalog/granite-speech-4.1-2b-plus.json @@ -53,21 +53,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4543.7,"xrt_compute":7.78,"load_ms":358.2,"mel_ms":2.3,"encode_ms":2935.7,"decode_ms":1605.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5708.4,"xrt_wall":6.19}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1644.3,"xrt_compute":6.69,"load_ms":359.8,"mel_ms":0.8,"encode_ms":917.6,"decode_ms":725.9,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1873.6,"xrt_wall":5.87}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5489.8,"xrt_compute":6.44,"load_ms":550.5,"mel_ms":2.0,"encode_ms":3406.3,"decode_ms":2081.5,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":6905.7,"xrt_wall":5.12}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1770.1,"xrt_compute":6.21,"load_ms":538.8,"mel_ms":0.7,"encode_ms":1052.6,"decode_ms":716.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":2044.8,"xrt_wall":5.38}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":358.7,"xrt_compute":98.49,"load_ms":390.8,"mel_ms":1.9,"encode_ms":240.4,"decode_ms":116.4,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1024.4,"xrt_wall":34.49}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":139.5,"xrt_compute":78.83,"load_ms":372.1,"mel_ms":0.8,"encode_ms":81.1,"decode_ms":57.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":280.4,"xrt_wall":39.23}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":351.2,"xrt_compute":100.61,"load_ms":560.6,"mel_ms":1.9,"encode_ms":236.4,"decode_ms":112.9,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1179.5,"xrt_wall":29.96}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":136.0,"xrt_compute":80.88,"load_ms":567.3,"mel_ms":0.8,"encode_ms":79.6,"decode_ms":55.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":308.2,"xrt_wall":35.69}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15056.3,"xrt_compute":2.35,"load_ms":1325.1,"mel_ms":48.2,"encode_ms":10235.5,"decode_ms":4772.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":20451.6,"xrt_wall":1.73}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5022.2,"xrt_compute":2.19,"load_ms":2045.7,"mel_ms":16.6,"encode_ms":3033.5,"decode_ms":1972.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":6077.7,"xrt_wall":1.81}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":18193.0,"xrt_compute":1.94,"load_ms":2813.3,"mel_ms":50.4,"encode_ms":11756.7,"decode_ms":6385.9,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":26230.4,"xrt_wall":1.35}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6204.1,"xrt_compute":1.77,"load_ms":3457.8,"mel_ms":16.8,"encode_ms":3552.8,"decode_ms":2634.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":7799.6,"xrt_wall":1.41}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6833.1,"xrt_compute":5.17,"load_ms":1193.0,"mel_ms":59.9,"encode_ms":4749.7,"decode_ms":2023.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":12294.1,"xrt_wall":2.87}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2499.1,"xrt_compute":4.4,"load_ms":1946.9,"mel_ms":31.4,"encode_ms":1608.1,"decode_ms":859.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3631.1,"xrt_wall":3.03}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6726.0,"xrt_compute":5.25,"load_ms":2593.8,"mel_ms":63.3,"encode_ms":4688.4,"decode_ms":1974.3,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":13420.0,"xrt_wall":2.63}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2456.2,"xrt_compute":4.48,"load_ms":3370.4,"mel_ms":31.4,"encode_ms":1580.3,"decode_ms":844.5,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3846.2,"xrt_wall":2.86} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4139.4,"xrt_compute":8.54,"load_ms":403.7,"mel_ms":2.0,"encode_ms":2743.6,"decode_ms":1393.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5227.0,"xrt_wall":6.76,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1500.9,"xrt_compute":7.33,"load_ms":364.5,"mel_ms":0.8,"encode_ms":852.4,"decode_ms":647.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1714.1,"xrt_wall":6.42,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3850.5,"xrt_compute":9.18,"load_ms":544.5,"mel_ms":2.0,"encode_ms":2592.9,"decode_ms":1255.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5153.3,"xrt_wall":6.86,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1474.0,"xrt_compute":7.46,"load_ms":548.6,"mel_ms":0.7,"encode_ms":811.3,"decode_ms":661.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1733.0,"xrt_wall":6.35,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":353.4,"xrt_compute":99.98,"load_ms":383.1,"mel_ms":2.3,"encode_ms":235.1,"decode_ms":116.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1032.9,"xrt_wall":34.21,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":136.9,"xrt_compute":80.36,"load_ms":375.6,"mel_ms":0.7,"encode_ms":79.0,"decode_ms":57.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":271.4,"xrt_wall":40.53,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":350.1,"xrt_compute":100.92,"load_ms":581.4,"mel_ms":2.1,"encode_ms":233.3,"decode_ms":114.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1179.5,"xrt_wall":29.96,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":133.6,"xrt_compute":82.33,"load_ms":557.0,"mel_ms":0.8,"encode_ms":77.6,"decode_ms":55.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":305.2,"xrt_wall":36.04,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":13100.5,"xrt_compute":2.7,"load_ms":2076.7,"mel_ms":43.6,"encode_ms":8628.5,"decode_ms":4428.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":18536.6,"xrt_wall":1.91,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4342.5,"xrt_compute":2.53,"load_ms":1355.8,"mel_ms":15.3,"encode_ms":2508.4,"decode_ms":1818.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5405.7,"xrt_wall":2.03,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":13353.4,"xrt_compute":2.65,"load_ms":3376.6,"mel_ms":44.5,"encode_ms":8831.7,"decode_ms":4477.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":21212.1,"xrt_wall":1.67,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4320.9,"xrt_compute":2.55,"load_ms":2918.9,"mel_ms":15.3,"encode_ms":2528.8,"decode_ms":1776.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5879.4,"xrt_wall":1.87,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7528.1,"xrt_compute":4.69,"load_ms":3697.0,"mel_ms":50.9,"encode_ms":5543.4,"decode_ms":1933.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":12451.5,"xrt_wall":2.84,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2583.9,"xrt_compute":4.26,"load_ms":2276.6,"mel_ms":25.7,"encode_ms":1770.4,"decode_ms":787.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3575.9,"xrt_wall":3.08,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7035.7,"xrt_compute":5.02,"load_ms":3613.0,"mel_ms":51.0,"encode_ms":5014.6,"decode_ms":1970.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13363.6,"xrt_wall":2.64,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2577.1,"xrt_compute":4.27,"load_ms":2851.2,"mel_ms":31.8,"encode_ms":1755.0,"decode_ms":790.3,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3885.5,"xrt_wall":2.83,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/granite-speech-4.1-2b.json b/catalog/granite-speech-4.1-2b.json index 53ecfa7b..c0354ed2 100644 --- a/catalog/granite-speech-4.1-2b.json +++ b/catalog/granite-speech-4.1-2b.json @@ -16,7 +16,7 @@ "long_form_strategy": "hard-cap", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"verified":false,"targets":["en","fr","de","es","pt","ja","it","zh"],"pairs":null,"note":"translation is reached via a separate chat-template prompt; scripts/convert-granite.py is authoritative for the target set"}, + "translate": {"supported":true,"verified":false,"targets":["en","fr","de","es","pt","ja","it","zh"],"pairs":["en>fr","fr>en","en>de","de>en","en>es","es>en","en>pt","pt>en","en>ja","ja>en","en>it","en>zh"],"note":"translation is reached via a separate chat-template prompt; scripts/convert-granite.py is authoritative for the target set"}, "lang_detect": {"supported":false}, "timestamps": {"supported":false}, "streaming": {"supported":false}, @@ -54,21 +54,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4442.9,"xrt_compute":7.95,"load_ms":375.5,"mel_ms":1.9,"encode_ms":2918.7,"decode_ms":1522.3,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":5488.2,"xrt_wall":6.44}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1450.2,"xrt_compute":7.58,"load_ms":380.7,"mel_ms":0.8,"encode_ms":908.3,"decode_ms":541.1,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1668.3,"xrt_wall":6.59}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4890.5,"xrt_compute":7.22,"load_ms":578.5,"mel_ms":2.0,"encode_ms":3332.0,"decode_ms":1556.5,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":6221.2,"xrt_wall":5.68}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1578.9,"xrt_compute":6.97,"load_ms":580.8,"mel_ms":0.7,"encode_ms":1042.5,"decode_ms":535.7,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1852.8,"xrt_wall":5.94}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":349.4,"xrt_compute":101.11,"load_ms":412.3,"mel_ms":1.9,"encode_ms":239.7,"decode_ms":107.9,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1004.0,"xrt_wall":35.19}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":129.6,"xrt_compute":84.9,"load_ms":397.2,"mel_ms":0.7,"encode_ms":80.7,"decode_ms":48.1,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":272.2,"xrt_wall":40.41}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":342.7,"xrt_compute":103.09,"load_ms":604.8,"mel_ms":1.9,"encode_ms":236.2,"decode_ms":104.6,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":1164.7,"xrt_wall":30.34}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":127.0,"xrt_compute":86.64,"load_ms":609.0,"mel_ms":0.8,"encode_ms":79.4,"decode_ms":46.8,"engine_sha":"de05c43","measured_on":"2026-05-21","thermal_gated":null,"wall_ms":303.1,"xrt_wall":36.29}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":14513.3,"xrt_compute":2.43,"load_ms":1427.1,"mel_ms":47.1,"encode_ms":10234.4,"decode_ms":4231.9,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":19494.1,"xrt_wall":1.81}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4551.2,"xrt_compute":2.42,"load_ms":2255.7,"mel_ms":17.0,"encode_ms":3047.6,"decode_ms":1486.6,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":5581.1,"xrt_wall":1.97}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":17560.8,"xrt_compute":2.01,"load_ms":3118.8,"mel_ms":49.6,"encode_ms":11804.1,"decode_ms":5707.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":25503.1,"xrt_wall":1.39}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5548.0,"xrt_compute":1.98,"load_ms":3722.9,"mel_ms":17.0,"encode_ms":3539.9,"decode_ms":1991.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":7187.5,"xrt_wall":1.53}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6612.4,"xrt_compute":5.34,"load_ms":1564.7,"mel_ms":59.7,"encode_ms":4795.7,"decode_ms":1757.0,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":11791.3,"xrt_wall":3.0}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2440.7,"xrt_compute":4.51,"load_ms":2048.2,"mel_ms":31.9,"encode_ms":1591.9,"decode_ms":816.8,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3578.2,"xrt_wall":3.07}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6518.1,"xrt_compute":5.42,"load_ms":2702.8,"mel_ms":62.0,"encode_ms":4722.0,"decode_ms":1734.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":13082.4,"xrt_wall":2.7}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2410.2,"xrt_compute":4.56,"load_ms":3442.8,"mel_ms":32.5,"encode_ms":1576.6,"decode_ms":801.1,"engine_sha":"dbe5814","measured_on":"2026-05-18","thermal_gated":null,"wall_ms":3837.8,"xrt_wall":2.87} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4255.1,"xrt_compute":8.3,"load_ms":384.8,"mel_ms":2.1,"encode_ms":2860.2,"decode_ms":1392.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5283.6,"xrt_wall":6.69,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1365.8,"xrt_compute":8.05,"load_ms":385.4,"mel_ms":0.8,"encode_ms":885.5,"decode_ms":479.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1578.8,"xrt_wall":6.97,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4126.2,"xrt_compute":8.56,"load_ms":578.6,"mel_ms":2.1,"encode_ms":2675.6,"decode_ms":1448.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5421.1,"xrt_wall":6.52,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1325.1,"xrt_compute":8.3,"load_ms":578.2,"mel_ms":0.7,"encode_ms":826.1,"decode_ms":498.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1594.6,"xrt_wall":6.9,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":457.6,"xrt_compute":77.22,"load_ms":470.8,"mel_ms":2.6,"encode_ms":303.3,"decode_ms":151.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1192.8,"xrt_wall":29.62,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":139.0,"xrt_compute":79.11,"load_ms":402.3,"mel_ms":0.8,"encode_ms":84.9,"decode_ms":53.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":284.0,"xrt_wall":38.74,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":445.4,"xrt_compute":79.32,"load_ms":679.8,"mel_ms":2.1,"encode_ms":296.9,"decode_ms":146.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1333.2,"xrt_wall":26.5,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":144.9,"xrt_compute":75.92,"load_ms":621.3,"mel_ms":0.7,"encode_ms":89.5,"decode_ms":54.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":325.9,"xrt_wall":33.76,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":12590.3,"xrt_compute":2.81,"load_ms":2189.6,"mel_ms":41.9,"encode_ms":8622.5,"decode_ms":3926.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":17623.1,"xrt_wall":2.0,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3893.3,"xrt_compute":2.83,"load_ms":1427.4,"mel_ms":15.3,"encode_ms":2497.5,"decode_ms":1380.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4943.9,"xrt_wall":2.22,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":13063.3,"xrt_compute":2.7,"load_ms":3581.1,"mel_ms":43.0,"encode_ms":8815.4,"decode_ms":4204.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":20728.5,"xrt_wall":1.7,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3856.3,"xrt_compute":2.85,"load_ms":3586.2,"mel_ms":16.0,"encode_ms":2525.8,"decode_ms":1314.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5443.3,"xrt_wall":2.02,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6796.7,"xrt_compute":5.2,"load_ms":3097.3,"mel_ms":50.1,"encode_ms":5030.2,"decode_ms":1716.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":11257.8,"xrt_wall":3.14,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2552.8,"xrt_compute":4.31,"load_ms":2990.9,"mel_ms":27.4,"encode_ms":1782.1,"decode_ms":743.3,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3523.6,"xrt_wall":3.12,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7152.9,"xrt_compute":4.94,"load_ms":3912.4,"mel_ms":53.3,"encode_ms":5406.0,"decode_ms":1693.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13443.5,"xrt_wall":2.63,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2561.2,"xrt_compute":4.29,"load_ms":4282.1,"mel_ms":30.1,"encode_ms":1777.5,"decode_ms":753.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3925.7,"xrt_wall":2.8,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/granite-speech-5.0-470m-turboctc-nc.json b/catalog/granite-speech-5.0-470m-turboctc-nc.json index 9d323c7f..ce79a3c8 100644 --- a/catalog/granite-speech-5.0-470m-turboctc-nc.json +++ b/catalog/granite-speech-5.0-470m-turboctc-nc.json @@ -50,21 +50,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":684.8,"xrt_compute":51.59,"wall_ms":686.7,"xrt_wall":51.45,"load_ms":89.0,"mel_ms":2.0,"encode_ms":670.6,"decode_ms":12.2,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":231.8,"xrt_compute":47.46,"wall_ms":233.0,"xrt_wall":47.21,"load_ms":83.3,"mel_ms":0.8,"encode_ms":227.8,"decode_ms":3.2,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":694.0,"xrt_compute":50.91,"wall_ms":696.4,"xrt_wall":50.73,"load_ms":127.3,"mel_ms":2.2,"encode_ms":679.5,"decode_ms":12.3,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":231.4,"xrt_compute":47.54,"wall_ms":232.6,"xrt_wall":47.29,"load_ms":138.2,"mel_ms":0.7,"encode_ms":227.4,"decode_ms":3.3,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":83.0,"xrt_compute":425.61,"wall_ms":87.2,"xrt_wall":405.09,"load_ms":87.7,"mel_ms":1.9,"encode_ms":70.2,"decode_ms":10.9,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":36.3,"xrt_compute":303.27,"wall_ms":38.1,"xrt_wall":288.74,"load_ms":94.7,"mel_ms":0.7,"encode_ms":32.6,"decode_ms":3.0,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":81.1,"xrt_compute":435.64,"wall_ms":85.3,"xrt_wall":414.44,"load_ms":123.5,"mel_ms":1.9,"encode_ms":67.8,"decode_ms":11.4,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":35.2,"xrt_compute":312.62,"wall_ms":37.0,"xrt_wall":297.32,"load_ms":124.4,"mel_ms":0.7,"encode_ms":31.6,"decode_ms":2.9,"engine_sha":"144ccad","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2244.6,"xrt_compute":15.74,"wall_ms":2263.2,"xrt_wall":15.61,"load_ms":211.8,"mel_ms":43.8,"encode_ms":2179.8,"decode_ms":21.1,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":647.7,"xrt_compute":16.98,"wall_ms":653.9,"xrt_wall":16.82,"load_ms":339.9,"mel_ms":13.8,"encode_ms":630.5,"decode_ms":3.4,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2247.4,"xrt_compute":15.72,"wall_ms":2266.9,"xrt_wall":15.59,"load_ms":370.0,"mel_ms":43.7,"encode_ms":2182.6,"decode_ms":21.1,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":694.5,"xrt_compute":15.84,"wall_ms":701.5,"xrt_wall":15.68,"load_ms":537.9,"mel_ms":16.9,"encode_ms":671.8,"decode_ms":5.9,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1339.8,"xrt_compute":26.37,"wall_ms":1515.3,"xrt_wall":23.32,"load_ms":131.0,"mel_ms":47.5,"encode_ms":1277.3,"decode_ms":15.0,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":597.8,"xrt_compute":18.4,"wall_ms":646.6,"xrt_wall":17.01,"load_ms":132.1,"mel_ms":15.1,"encode_ms":579.2,"decode_ms":3.5,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1315.4,"xrt_compute":26.86,"wall_ms":1494.8,"xrt_wall":23.64,"load_ms":221.7,"mel_ms":47.0,"encode_ms":1253.0,"decode_ms":15.4,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":585.3,"xrt_compute":18.79,"wall_ms":630.5,"xrt_wall":17.45,"load_ms":222.8,"mel_ms":15.0,"encode_ms":566.8,"decode_ms":3.5,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":763.8,"xrt_compute":46.26,"wall_ms":766.0,"xrt_wall":46.12,"load_ms":96.4,"mel_ms":2.1,"encode_ms":748.6,"decode_ms":13.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":254.8,"xrt_compute":43.17,"wall_ms":256.1,"xrt_wall":42.95,"load_ms":88.3,"mel_ms":0.8,"encode_ms":250.3,"decode_ms":3.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":745.5,"xrt_compute":47.39,"wall_ms":747.7,"xrt_wall":47.26,"load_ms":144.7,"mel_ms":2.3,"encode_ms":729.5,"decode_ms":13.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":243.5,"xrt_compute":45.18,"wall_ms":244.8,"xrt_wall":44.93,"load_ms":134.2,"mel_ms":0.7,"encode_ms":239.2,"decode_ms":3.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":86.8,"xrt_compute":407.09,"wall_ms":91.7,"xrt_wall":385.4,"load_ms":100.5,"mel_ms":2.1,"encode_ms":72.3,"decode_ms":12.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":37.3,"xrt_compute":295.13,"wall_ms":39.5,"xrt_wall":278.41,"load_ms":95.7,"mel_ms":0.7,"encode_ms":33.2,"decode_ms":3.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":83.3,"xrt_compute":424.15,"wall_ms":88.0,"xrt_wall":401.64,"load_ms":154.0,"mel_ms":2.1,"encode_ms":68.8,"decode_ms":12.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":35.2,"xrt_compute":312.54,"wall_ms":37.3,"xrt_wall":294.64,"load_ms":139.8,"mel_ms":0.7,"encode_ms":31.2,"decode_ms":3.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2124.0,"xrt_compute":16.63,"wall_ms":2142.3,"xrt_wall":16.49,"load_ms":350.8,"mel_ms":44.1,"encode_ms":2061.1,"decode_ms":18.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":653.1,"xrt_compute":16.84,"wall_ms":659.1,"xrt_wall":16.69,"load_ms":208.4,"mel_ms":12.9,"encode_ms":636.6,"decode_ms":3.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2129.3,"xrt_compute":16.59,"wall_ms":2148.6,"xrt_wall":16.44,"load_ms":616.1,"mel_ms":43.7,"encode_ms":2066.5,"decode_ms":19.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":614.3,"xrt_compute":17.91,"wall_ms":620.7,"xrt_wall":17.72,"load_ms":366.5,"mel_ms":14.5,"encode_ms":596.3,"decode_ms":3.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1336.0,"xrt_compute":26.45,"wall_ms":1512.3,"xrt_wall":23.36,"load_ms":130.3,"mel_ms":47.1,"encode_ms":1273.9,"decode_ms":15.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":605.0,"xrt_compute":18.18,"wall_ms":668.1,"xrt_wall":16.47,"load_ms":131.7,"mel_ms":14.5,"encode_ms":587.1,"decode_ms":3.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1319.9,"xrt_compute":26.77,"wall_ms":1498.2,"xrt_wall":23.58,"load_ms":219.8,"mel_ms":46.4,"encode_ms":1258.4,"decode_ms":15.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":582.6,"xrt_compute":18.88,"wall_ms":628.5,"xrt_wall":17.5,"load_ms":219.4,"mel_ms":14.1,"encode_ms":565.1,"decode_ms":3.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/granite-speech-5.0-470m-turboctc.json b/catalog/granite-speech-5.0-470m-turboctc.json index c4dab559..9d6ca32a 100644 --- a/catalog/granite-speech-5.0-470m-turboctc.json +++ b/catalog/granite-speech-5.0-470m-turboctc.json @@ -50,21 +50,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":686.7,"xrt_compute":51.45,"wall_ms":689.2,"xrt_wall":51.27,"load_ms":84.2,"mel_ms":2.2,"encode_ms":672.1,"decode_ms":12.4,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":231.4,"xrt_compute":47.53,"wall_ms":232.6,"xrt_wall":47.28,"load_ms":81.9,"mel_ms":0.8,"encode_ms":227.4,"decode_ms":3.3,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":700.2,"xrt_compute":50.46,"wall_ms":702.7,"xrt_wall":50.28,"load_ms":127.5,"mel_ms":2.2,"encode_ms":685.4,"decode_ms":12.6,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":230.2,"xrt_compute":47.79,"wall_ms":231.6,"xrt_wall":47.5,"load_ms":127.5,"mel_ms":0.8,"encode_ms":226.1,"decode_ms":3.3,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":83.8,"xrt_compute":421.77,"wall_ms":87.9,"xrt_wall":402.01,"load_ms":83.6,"mel_ms":1.9,"encode_ms":70.8,"decode_ms":11.0,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":37.0,"xrt_compute":297.06,"wall_ms":38.9,"xrt_wall":282.86,"load_ms":118.7,"mel_ms":0.7,"encode_ms":33.4,"decode_ms":2.9,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":81.4,"xrt_compute":433.84,"wall_ms":85.6,"xrt_wall":412.8,"load_ms":129.7,"mel_ms":1.9,"encode_ms":68.4,"decode_ms":11.1,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":35.7,"xrt_compute":308.18,"wall_ms":37.5,"xrt_wall":293.12,"load_ms":129.8,"mel_ms":0.7,"encode_ms":32.0,"decode_ms":2.9,"engine_sha":"54b241e","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2233.7,"xrt_compute":15.82,"wall_ms":2252.6,"xrt_wall":15.69,"load_ms":214.7,"mel_ms":44.6,"encode_ms":2168.3,"decode_ms":20.8,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":654.7,"xrt_compute":16.8,"wall_ms":663.3,"xrt_wall":16.58,"load_ms":305.7,"mel_ms":14.3,"encode_ms":635.5,"decode_ms":5.0,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2257.8,"xrt_compute":15.65,"wall_ms":2277.6,"xrt_wall":15.51,"load_ms":373.4,"mel_ms":43.7,"encode_ms":2193.0,"decode_ms":21.0,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":689.0,"xrt_compute":15.97,"wall_ms":695.9,"xrt_wall":15.81,"load_ms":541.7,"mel_ms":17.5,"encode_ms":665.7,"decode_ms":5.8,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1336.4,"xrt_compute":26.44,"wall_ms":1513.3,"xrt_wall":23.35,"load_ms":132.9,"mel_ms":45.7,"encode_ms":1275.8,"decode_ms":14.9,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":600.3,"xrt_compute":18.33,"wall_ms":647.3,"xrt_wall":16.99,"load_ms":138.1,"mel_ms":15.9,"encode_ms":580.9,"decode_ms":3.5,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1298.0,"xrt_compute":27.22,"wall_ms":1475.0,"xrt_wall":23.95,"load_ms":229.1,"mel_ms":47.8,"encode_ms":1235.4,"decode_ms":14.8,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":590.8,"xrt_compute":18.62,"wall_ms":652.1,"xrt_wall":16.87,"load_ms":226.0,"mel_ms":15.5,"encode_ms":571.9,"decode_ms":3.5,"engine_sha":"3a5ed01","measured_on":"2026-09-12","thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":769.2,"xrt_compute":45.93,"wall_ms":771.4,"xrt_wall":45.8,"load_ms":100.3,"mel_ms":2.3,"encode_ms":753.1,"decode_ms":13.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":254.1,"xrt_compute":43.29,"wall_ms":255.5,"xrt_wall":43.06,"load_ms":88.0,"mel_ms":0.7,"encode_ms":249.2,"decode_ms":4.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":752.5,"xrt_compute":46.95,"wall_ms":754.7,"xrt_wall":46.82,"load_ms":148.4,"mel_ms":2.2,"encode_ms":736.4,"decode_ms":13.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":243.4,"xrt_compute":45.19,"wall_ms":244.7,"xrt_wall":44.95,"load_ms":136.4,"mel_ms":0.8,"encode_ms":239.0,"decode_ms":3.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":95.2,"xrt_compute":371.09,"wall_ms":100.0,"xrt_wall":353.45,"load_ms":105.0,"mel_ms":2.1,"encode_ms":80.6,"decode_ms":12.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":38.7,"xrt_compute":284.51,"wall_ms":40.9,"xrt_wall":268.73,"load_ms":91.1,"mel_ms":0.8,"encode_ms":34.5,"decode_ms":3.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":86.1,"xrt_compute":410.2,"wall_ms":90.9,"xrt_wall":388.76,"load_ms":151.2,"mel_ms":2.1,"encode_ms":71.6,"decode_ms":12.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":36.5,"xrt_compute":301.3,"wall_ms":38.6,"xrt_wall":284.88,"load_ms":138.9,"mel_ms":0.7,"encode_ms":32.5,"decode_ms":3.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2139.7,"xrt_compute":16.51,"wall_ms":2158.6,"xrt_wall":16.37,"load_ms":354.8,"mel_ms":43.4,"encode_ms":2077.4,"decode_ms":18.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":651.9,"xrt_compute":16.87,"wall_ms":657.9,"xrt_wall":16.72,"load_ms":211.1,"mel_ms":13.3,"encode_ms":635.1,"decode_ms":3.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2131.2,"xrt_compute":16.58,"wall_ms":2150.7,"xrt_wall":16.43,"load_ms":643.3,"mel_ms":43.4,"encode_ms":2068.7,"decode_ms":19.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":614.7,"xrt_compute":17.9,"wall_ms":621.0,"xrt_wall":17.71,"load_ms":365.4,"mel_ms":13.5,"encode_ms":597.5,"decode_ms":3.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1313.9,"xrt_compute":26.89,"wall_ms":1487.8,"xrt_wall":23.75,"load_ms":132.6,"mel_ms":45.0,"encode_ms":1254.0,"decode_ms":15.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":587.5,"xrt_compute":18.72,"wall_ms":648.6,"xrt_wall":16.96,"load_ms":131.1,"mel_ms":14.8,"encode_ms":569.2,"decode_ms":3.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1306.7,"xrt_compute":27.04,"wall_ms":1484.3,"xrt_wall":23.8,"load_ms":219.5,"mel_ms":44.9,"encode_ms":1247.1,"decode_ms":14.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":588.5,"xrt_compute":18.69,"wall_ms":649.3,"xrt_wall":16.94,"load_ms":217.4,"mel_ms":14.1,"encode_ms":571.0,"decode_ms":3.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/medasr.json b/catalog/medasr.json index 9c92b6d4..66822b71 100644 --- a/catalog/medasr.json +++ b/catalog/medasr.json @@ -51,21 +51,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":623.0,"xrt_compute":57.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":180.0,"xrt_compute":61.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":558.0,"xrt_compute":63.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":161.0,"xrt_compute":68.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":90.0,"xrt_compute":394.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":44.0,"xrt_compute":248.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":84.0,"xrt_compute":419.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":38.0,"xrt_compute":290.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1626.2,"xrt_compute":21.73,"load_ms":86.9,"mel_ms":61.9,"encode_ms":1563.6,"decode_ms":0.6,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":1626.8,"xrt_wall":21.72}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":487.7,"xrt_compute":22.56,"load_ms":88.3,"mel_ms":20.3,"encode_ms":467.2,"decode_ms":0.2,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":488.2,"xrt_wall":22.53}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1838.7,"xrt_compute":19.21,"load_ms":108.3,"mel_ms":63.3,"encode_ms":1774.8,"decode_ms":0.6,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":1839.4,"xrt_wall":19.21}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":542.0,"xrt_compute":20.3,"load_ms":105.1,"mel_ms":21.1,"encode_ms":520.8,"decode_ms":0.2,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":542.5,"xrt_wall":20.28}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":493.4,"xrt_compute":71.61,"load_ms":93.6,"mel_ms":71.7,"encode_ms":420.4,"decode_ms":1.3,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":494.9,"xrt_wall":71.39}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":172.9,"xrt_compute":63.63,"load_ms":86.9,"mel_ms":36.8,"encode_ms":135.3,"decode_ms":0.7,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":174.2,"xrt_wall":63.14}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":479.0,"xrt_compute":73.76,"load_ms":101.4,"mel_ms":63.9,"encode_ms":413.3,"decode_ms":1.8,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":480.5,"xrt_wall":73.53}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":161.4,"xrt_compute":68.17,"load_ms":103.8,"mel_ms":31.2,"encode_ms":129.6,"decode_ms":0.5,"engine_sha":"79d139a","measured_on":"2026-06-04","thermal_gated":null,"wall_ms":162.7,"xrt_wall":67.61} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":632.3,"xrt_compute":55.88,"load_ms":47.4,"mel_ms":2.2,"encode_ms":629.6,"decode_ms":0.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":633.0,"xrt_wall":55.81,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":179.3,"xrt_compute":61.33,"load_ms":44.5,"mel_ms":0.9,"encode_ms":178.3,"decode_ms":0.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":179.8,"xrt_wall":61.16,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":564.4,"xrt_compute":62.6,"load_ms":58.5,"mel_ms":2.2,"encode_ms":561.6,"decode_ms":0.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":565.1,"xrt_wall":62.52,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":161.6,"xrt_compute":68.09,"load_ms":52.5,"mel_ms":0.8,"encode_ms":160.6,"decode_ms":0.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":162.1,"xrt_wall":67.87,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":39.5,"xrt_compute":893.98,"load_ms":54.6,"mel_ms":2.1,"encode_ms":36.9,"decode_ms":0.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":41.1,"xrt_wall":859.99,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":16.5,"xrt_compute":667.76,"load_ms":44.9,"mel_ms":0.9,"encode_ms":15.4,"decode_ms":0.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":17.5,"xrt_wall":627.42,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":38.6,"xrt_compute":915.05,"load_ms":61.0,"mel_ms":2.1,"encode_ms":36.0,"decode_ms":0.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":40.1,"xrt_wall":881.47,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":16.7,"xrt_compute":658.45,"load_ms":55.3,"mel_ms":0.9,"encode_ms":15.7,"decode_ms":0.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":17.8,"xrt_wall":619.58,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1498.5,"xrt_compute":23.58,"load_ms":128.3,"mel_ms":59.1,"encode_ms":1438.7,"decode_ms":0.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1501.0,"xrt_wall":23.54,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":466.4,"xrt_compute":23.58,"load_ms":92.4,"mel_ms":18.3,"encode_ms":448.0,"decode_ms":0.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":468.9,"xrt_wall":23.46,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1456.8,"xrt_compute":24.25,"load_ms":184.9,"mel_ms":59.2,"encode_ms":1397.0,"decode_ms":0.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1459.4,"xrt_wall":24.21,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":400.2,"xrt_compute":27.48,"load_ms":115.8,"mel_ms":18.5,"encode_ms":381.6,"decode_ms":0.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":402.7,"xrt_wall":27.32,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":484.3,"xrt_compute":72.95,"load_ms":121.1,"mel_ms":62.6,"encode_ms":409.8,"decode_ms":11.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":488.0,"xrt_wall":72.4,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":157.0,"xrt_compute":70.04,"load_ms":71.7,"mel_ms":24.3,"encode_ms":127.5,"decode_ms":5.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":160.9,"xrt_wall":68.35,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":480.1,"xrt_compute":73.59,"load_ms":173.7,"mel_ms":60.9,"encode_ms":407.1,"decode_ms":12.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":483.9,"xrt_wall":73.01,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":159.6,"xrt_compute":68.93,"load_ms":88.0,"mel_ms":26.4,"encode_ms":127.6,"decode_ms":5.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":163.0,"xrt_wall":67.48,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/moonshine-base-ar.json b/catalog/moonshine-base-ar.json index fa646d51..979fce00 100644 --- a/catalog/moonshine-base-ar.json +++ b/catalog/moonshine-base-ar.json @@ -42,13 +42,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":819.1,"xrt_compute":13.43,"load_ms":145.7,"mel_ms":0.0,"encode_ms":149.8,"decode_ms":669.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":819.1,"xrt_wall":13.43,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} - ], - "benchmark_exceptions": [ - {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} - ] + "speed_benchmarks": [] } diff --git a/catalog/moonshine-base-uk.json b/catalog/moonshine-base-uk.json index d132249e..4b8964a6 100644 --- a/catalog/moonshine-base-uk.json +++ b/catalog/moonshine-base-uk.json @@ -42,13 +42,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":597.1,"xrt_compute":18.42,"load_ms":147.7,"mel_ms":0.0,"encode_ms":146.3,"decode_ms":450.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":597.1,"xrt_wall":18.42,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":430.6,"xrt_compute":25.54,"load_ms":129.5,"mel_ms":0.0,"encode_ms":84.3,"decode_ms":346.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":431.0,"xrt_wall":25.52,"publication_profile":"asr-publication-v2"} - ], - "benchmark_exceptions": [ - {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} - ] + "speed_benchmarks": [] } diff --git a/catalog/moonshine-base-vi.json b/catalog/moonshine-base-vi.json index fa7f390a..d8ae2948 100644 --- a/catalog/moonshine-base-vi.json +++ b/catalog/moonshine-base-vi.json @@ -42,13 +42,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":112.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":858.6,"xrt_compute":12.81,"load_ms":145.7,"mel_ms":0.0,"encode_ms":148.8,"decode_ms":709.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":858.7,"xrt_wall":12.81,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":619.4,"xrt_compute":17.76,"load_ms":127.8,"mel_ms":0.0,"encode_ms":84.6,"decode_ms":534.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":619.7,"xrt_wall":17.75,"publication_profile":"asr-publication-v2"} - ], - "benchmark_exceptions": [ - {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} - ] + "speed_benchmarks": [] } diff --git a/catalog/moonshine-base.json b/catalog/moonshine-base.json index 07ab0b21..1ab8b7ad 100644 --- a/catalog/moonshine-base.json +++ b/catalog/moonshine-base.json @@ -43,10 +43,10 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":718.7,"xrt_compute":49.16,"load_ms":53.2,"mel_ms":0.0,"encode_ms":237.2,"decode_ms":481.5,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":718.7,"xrt_wall":49.16}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":96.4,"xrt_compute":114.16,"load_ms":56.4,"mel_ms":0.0,"encode_ms":61.1,"decode_ms":35.2,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":96.4,"xrt_wall":114.15}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":811.0,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":96.0,"xrt_compute":115.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":690.5,"xrt_compute":51.17,"load_ms":56.7,"mel_ms":0.0,"encode_ms":224.9,"decode_ms":465.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":691.0,"xrt_wall":51.13,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":100.2,"xrt_compute":109.83,"load_ms":52.4,"mel_ms":0.0,"encode_ms":65.1,"decode_ms":35.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":100.4,"xrt_wall":109.61,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":739.8,"xrt_compute":47.76,"load_ms":60.6,"mel_ms":0.0,"encode_ms":200.7,"decode_ms":539.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":740.1,"xrt_wall":47.74,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":89.2,"xrt_compute":123.33,"load_ms":58.2,"mel_ms":0.0,"encode_ms":37.8,"decode_ms":51.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":89.3,"xrt_wall":123.17,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3204.5,"xrt_compute":11.03,"load_ms":112.2,"mel_ms":0.0,"encode_ms":607.3,"decode_ms":2597.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3213.3,"xrt_wall":11.0,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":306.0,"xrt_compute":35.95,"load_ms":151.9,"mel_ms":0.0,"encode_ms":145.3,"decode_ms":160.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":306.0,"xrt_wall":35.95,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1742.4,"xrt_compute":20.28,"load_ms":98.4,"mel_ms":0.0,"encode_ms":299.9,"decode_ms":1442.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1743.1,"xrt_wall":20.27,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/moonshine-streaming-medium.json b/catalog/moonshine-streaming-medium.json index 20f345c8..4832ac36 100644 --- a/catalog/moonshine-streaming-medium.json +++ b/catalog/moonshine-streaming-medium.json @@ -43,10 +43,10 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1106.7,"xrt_compute":31.93,"load_ms":95.9,"mel_ms":0.0,"encode_ms":710.8,"decode_ms":395.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":1106.6,"xrt_wall":31.93}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":281.3,"xrt_compute":39.11,"load_ms":88.6,"mel_ms":0.0,"encode_ms":231.4,"decode_ms":49.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":281.3,"xrt_wall":39.11}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":952.1,"xrt_compute":37.11,"load_ms":100.0,"mel_ms":0.0,"encode_ms":93.3,"decode_ms":858.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":952.1,"xrt_wall":37.11}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":124.0,"xrt_compute":88.69,"load_ms":98.2,"mel_ms":0.0,"encode_ms":26.9,"decode_ms":97.1,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":124.0,"xrt_wall":88.69}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1120.8,"xrt_compute":31.52,"load_ms":104.8,"mel_ms":0.0,"encode_ms":653.9,"decode_ms":466.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1122.5,"xrt_wall":31.48,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":235.2,"xrt_compute":46.77,"load_ms":101.4,"mel_ms":0.0,"encode_ms":167.6,"decode_ms":67.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":235.5,"xrt_wall":46.7,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":978.3,"xrt_compute":36.12,"load_ms":113.6,"mel_ms":0.0,"encode_ms":114.3,"decode_ms":864.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":981.1,"xrt_wall":36.01,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":127.0,"xrt_compute":86.61,"load_ms":102.4,"mel_ms":0.0,"encode_ms":27.9,"decode_ms":99.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":127.4,"xrt_wall":86.36,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6032.8,"xrt_compute":5.86,"load_ms":260.9,"mel_ms":0.0,"encode_ms":2284.3,"decode_ms":3748.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6043.4,"xrt_wall":5.85,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":816.9,"xrt_compute":13.47,"load_ms":412.0,"mel_ms":0.0,"encode_ms":498.2,"decode_ms":318.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":817.0,"xrt_wall":13.46,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3968.6,"xrt_compute":8.9,"load_ms":155.1,"mel_ms":0.0,"encode_ms":735.8,"decode_ms":3232.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3970.3,"xrt_wall":8.9,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/moonshine-streaming-small.json b/catalog/moonshine-streaming-small.json index 1ddea8a2..a8580849 100644 --- a/catalog/moonshine-streaming-small.json +++ b/catalog/moonshine-streaming-small.json @@ -43,13 +43,13 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":699.0,"xrt_compute":50.55,"load_ms":81.0,"mel_ms":0.0,"encode_ms":466.1,"decode_ms":232.9,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":699.0,"xrt_wall":50.55}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":173.7,"xrt_compute":63.31,"load_ms":66.6,"mel_ms":0.0,"encode_ms":143.8,"decode_ms":30.0,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":173.7,"xrt_wall":63.31}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":612.4,"xrt_compute":57.69,"load_ms":80.5,"mel_ms":0.0,"encode_ms":66.4,"decode_ms":546.0,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":612.4,"xrt_wall":57.69}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":82.3,"xrt_compute":133.58,"load_ms":80.4,"mel_ms":0.0,"encode_ms":19.7,"decode_ms":62.7,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":82.4,"xrt_wall":133.57}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4002.9,"xrt_compute":8.83,"load_ms":195.1,"mel_ms":0.0,"encode_ms":2073.0,"decode_ms":1929.9,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":4002.9,"xrt_wall":8.83}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":734.9,"xrt_compute":14.97,"load_ms":191.9,"mel_ms":0.0,"encode_ms":611.7,"decode_ms":123.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":734.9,"xrt_wall":14.97}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2381.2,"xrt_compute":14.84,"load_ms":187.0,"mel_ms":0.0,"encode_ms":497.3,"decode_ms":1884.0,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":2381.2,"xrt_wall":14.84}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":348.9,"xrt_compute":31.53,"load_ms":186.0,"mel_ms":0.0,"encode_ms":152.6,"decode_ms":196.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":348.9,"xrt_wall":31.53} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":722.4,"xrt_compute":48.91,"load_ms":79.2,"mel_ms":0.0,"encode_ms":457.3,"decode_ms":265.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":723.7,"xrt_wall":48.82,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":172.5,"xrt_compute":63.75,"load_ms":82.9,"mel_ms":0.0,"encode_ms":135.8,"decode_ms":36.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":172.8,"xrt_wall":63.64,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":603.0,"xrt_compute":58.59,"load_ms":89.0,"mel_ms":0.0,"encode_ms":77.8,"decode_ms":525.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":604.6,"xrt_wall":58.44,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":85.0,"xrt_compute":129.36,"load_ms":80.9,"mel_ms":0.0,"encode_ms":21.0,"decode_ms":64.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":85.4,"xrt_wall":128.84,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3791.5,"xrt_compute":9.32,"load_ms":279.7,"mel_ms":0.0,"encode_ms":1742.0,"decode_ms":2049.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3812.4,"xrt_wall":9.27,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":619.7,"xrt_compute":17.75,"load_ms":192.4,"mel_ms":0.0,"encode_ms":461.3,"decode_ms":158.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":619.8,"xrt_wall":17.75,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2495.8,"xrt_compute":14.16,"load_ms":234.7,"mel_ms":0.0,"encode_ms":629.1,"decode_ms":1866.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2522.7,"xrt_wall":14.01,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":374.4,"xrt_compute":29.38,"load_ms":134.6,"mel_ms":0.0,"encode_ms":172.7,"decode_ms":201.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":375.2,"xrt_wall":29.32,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/moonshine-streaming-tiny.json b/catalog/moonshine-streaming-tiny.json index 59dbd948..0c7bfdfa 100644 --- a/catalog/moonshine-streaming-tiny.json +++ b/catalog/moonshine-streaming-tiny.json @@ -43,13 +43,13 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":205.5,"xrt_compute":171.94,"load_ms":57.0,"mel_ms":0.0,"encode_ms":90.4,"decode_ms":115.1,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":205.5,"xrt_wall":171.93}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":44.1,"xrt_compute":249.57,"load_ms":57.8,"mel_ms":0.0,"encode_ms":26.9,"decode_ms":17.2,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":44.1,"xrt_wall":249.55}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":355.0,"xrt_compute":99.53,"load_ms":60.0,"mel_ms":0.0,"encode_ms":26.9,"decode_ms":328.1,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":355.0,"xrt_wall":99.53}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":50.4,"xrt_compute":218.46,"load_ms":60.4,"mel_ms":0.0,"encode_ms":8.0,"decode_ms":42.3,"engine_sha":"0d312ce","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":50.4,"xrt_wall":218.44}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":881.5,"xrt_compute":40.08,"load_ms":91.0,"mel_ms":0.0,"encode_ms":384.2,"decode_ms":497.2,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":881.5,"xrt_wall":40.08}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":160.2,"xrt_compute":68.67,"load_ms":92.4,"mel_ms":0.0,"encode_ms":104.9,"decode_ms":55.3,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":160.2,"xrt_wall":68.67}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":891.9,"xrt_compute":39.61,"load_ms":97.0,"mel_ms":0.0,"encode_ms":141.5,"decode_ms":750.4,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":891.9,"xrt_wall":39.61}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":139.4,"xrt_compute":78.88,"load_ms":103.5,"mel_ms":0.0,"encode_ms":41.3,"decode_ms":98.1,"engine_sha":"f243f34","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":139.5,"xrt_wall":78.88} + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":209.6,"xrt_compute":168.59,"load_ms":47.9,"mel_ms":0.0,"encode_ms":89.6,"decode_ms":120.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":210.4,"xrt_wall":167.9,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":40.6,"xrt_compute":270.63,"load_ms":47.8,"mel_ms":0.0,"encode_ms":22.5,"decode_ms":18.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":40.8,"xrt_wall":269.37,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":315.8,"xrt_compute":111.87,"load_ms":51.7,"mel_ms":0.0,"encode_ms":33.4,"decode_ms":282.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":316.8,"xrt_wall":111.51,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":45.9,"xrt_compute":239.48,"load_ms":48.7,"mel_ms":0.0,"encode_ms":8.4,"decode_ms":37.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":46.1,"xrt_wall":238.43,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":948.5,"xrt_compute":37.25,"load_ms":126.2,"mel_ms":0.0,"encode_ms":341.1,"decode_ms":607.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":958.1,"xrt_wall":36.88,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":146.1,"xrt_compute":75.29,"load_ms":96.1,"mel_ms":0.0,"encode_ms":78.1,"decode_ms":68.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":148.0,"xrt_wall":74.31,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":922.5,"xrt_compute":38.3,"load_ms":106.9,"mel_ms":0.0,"encode_ms":199.7,"decode_ms":722.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":932.7,"xrt_wall":37.88,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":137.5,"xrt_compute":80.0,"load_ms":80.7,"mel_ms":0.0,"encode_ms":46.1,"decode_ms":91.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":138.0,"xrt_wall":79.72,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/moonshine-tiny-ar.json b/catalog/moonshine-tiny-ar.json index 9480612f..88ec5674 100644 --- a/catalog/moonshine-tiny-ar.json +++ b/catalog/moonshine-tiny-ar.json @@ -42,13 +42,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":449.1,"xrt_compute":24.49,"load_ms":100.0,"mel_ms":0.0,"encode_ms":76.1,"decode_ms":373.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":449.1,"xrt_wall":24.49,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":333.5,"xrt_compute":32.99,"load_ms":93.2,"mel_ms":0.0,"encode_ms":43.6,"decode_ms":289.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":333.7,"xrt_wall":32.97,"publication_profile":"asr-publication-v2"} - ], - "benchmark_exceptions": [ - {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} - ] + "speed_benchmarks": [] } diff --git a/catalog/moonshine-tiny-uk.json b/catalog/moonshine-tiny-uk.json index d60d1cd2..fb0c471c 100644 --- a/catalog/moonshine-tiny-uk.json +++ b/catalog/moonshine-tiny-uk.json @@ -42,13 +42,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":239.2,"xrt_compute":45.98,"load_ms":99.6,"mel_ms":0.0,"encode_ms":72.8,"decode_ms":166.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":239.3,"xrt_wall":45.98,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":182.7,"xrt_compute":60.21,"load_ms":91.6,"mel_ms":0.0,"encode_ms":44.2,"decode_ms":138.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":182.8,"xrt_wall":60.16,"publication_profile":"asr-publication-v2"} - ], - "benchmark_exceptions": [ - {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} - ] + "speed_benchmarks": [] } diff --git a/catalog/moonshine-tiny-vi.json b/catalog/moonshine-tiny-vi.json index cc7d9845..86f3ed14 100644 --- a/catalog/moonshine-tiny-vi.json +++ b/catalog/moonshine-tiny-vi.json @@ -42,13 +42,5 @@ "batch_size": 1, "timestamps": "none" }, - "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":210.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":180.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":375.7,"xrt_compute":29.28,"load_ms":98.5,"mel_ms":0.0,"encode_ms":74.7,"decode_ms":300.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":375.7,"xrt_wall":29.28,"publication_profile":"asr-publication-v2"}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":282.7,"xrt_compute":38.9,"load_ms":92.9,"mel_ms":0.0,"encode_ms":44.1,"decode_ms":238.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":283.0,"xrt_wall":38.87,"publication_profile":"asr-publication-v2"} - ], - "benchmark_exceptions": [ - {"kind":"speed","match":{"sample":"dots"},"reason":"Speed is benched on the English `jfk` clip only. On 35 s of out-of-language audio this fine-tune degenerates into a repetition loop, never emits end-of-stream, and decode hits its 194-token position cap, so the `dots` cell times a loop rather than a transcript and the bench binary exits non-zero. Restore the cell when a long in-language fixture exists."} - ] + "speed_benchmarks": [] } diff --git a/catalog/moonshine-tiny.json b/catalog/moonshine-tiny.json index 1c1d26a9..8e89b1a6 100644 --- a/catalog/moonshine-tiny.json +++ b/catalog/moonshine-tiny.json @@ -43,10 +43,10 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":377.9,"xrt_compute":93.5,"load_ms":42.0,"mel_ms":0.0,"encode_ms":112.9,"decode_ms":265.0,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":377.9,"xrt_wall":93.5}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":51.5,"xrt_compute":213.74,"load_ms":34.8,"mel_ms":0.0,"encode_ms":29.1,"decode_ms":22.4,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":51.5,"xrt_wall":213.72}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":478.0,"xrt_compute":74.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":58.6,"xrt_compute":187.76,"load_ms":33.7,"mel_ms":0.0,"encode_ms":14.4,"decode_ms":44.2,"engine_sha":"9824fdb","measured_on":"2026-05-06","thermal_gated":null,"wall_ms":58.6,"xrt_wall":187.75}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":372.8,"xrt_compute":94.78,"load_ms":48.4,"mel_ms":0.0,"encode_ms":115.5,"decode_ms":257.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":373.2,"xrt_wall":94.68,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":54.5,"xrt_compute":201.68,"load_ms":45.1,"mel_ms":0.0,"encode_ms":31.5,"decode_ms":23.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":54.7,"xrt_wall":201.12,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":421.6,"xrt_compute":83.81,"load_ms":56.7,"mel_ms":0.0,"encode_ms":90.2,"decode_ms":331.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":421.7,"xrt_wall":83.78,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":55.8,"xrt_compute":197.19,"load_ms":48.6,"mel_ms":0.0,"encode_ms":16.0,"decode_ms":39.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":55.9,"xrt_wall":196.88,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1792.2,"xrt_compute":19.71,"load_ms":86.3,"mel_ms":0.0,"encode_ms":292.9,"decode_ms":1499.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1797.3,"xrt_wall":19.66,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":174.8,"xrt_compute":62.93,"load_ms":110.0,"mel_ms":0.0,"encode_ms":73.7,"decode_ms":101.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":174.8,"xrt_wall":62.92,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":938.4,"xrt_compute":37.65,"load_ms":79.7,"mel_ms":0.0,"encode_ms":147.9,"decode_ms":790.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":938.8,"xrt_wall":37.64,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/moss-transcribe-diarize.json b/catalog/moss-transcribe-diarize.json index 93cf9e3b..48fd9641 100644 --- a/catalog/moss-transcribe-diarize.json +++ b/catalog/moss-transcribe-diarize.json @@ -50,14 +50,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":5840.0,"xrt_compute":6.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2370.0,"xrt_compute":4.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":5710.0,"xrt_compute":6.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2060.0,"xrt_compute":5.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1170.0,"xrt_compute":30.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":369.0,"xrt_compute":29.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1270.0,"xrt_compute":27.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":388.0,"xrt_compute":28.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5467.1,"xrt_compute":6.46,"load_ms":215.8,"mel_ms":8.4,"encode_ms":3088.1,"decode_ms":2370.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5468.9,"xrt_wall":6.46,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2201.5,"xrt_compute":5.0,"load_ms":192.3,"mel_ms":4.1,"encode_ms":1577.3,"decode_ms":620.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2202.7,"xrt_wall":4.99,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5432.4,"xrt_compute":6.5,"load_ms":293.4,"mel_ms":8.5,"encode_ms":2867.5,"decode_ms":2556.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5434.2,"xrt_wall":6.5,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2084.6,"xrt_compute":5.28,"load_ms":271.5,"mel_ms":4.0,"encode_ms":1432.8,"decode_ms":647.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2085.7,"xrt_wall":5.27,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1217.8,"xrt_compute":29.01,"load_ms":219.0,"mel_ms":10.8,"encode_ms":252.1,"decode_ms":954.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1222.1,"xrt_wall":28.91,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":381.7,"xrt_compute":28.82,"load_ms":200.6,"mel_ms":6.0,"encode_ms":127.9,"decode_ms":247.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":384.4,"xrt_wall":28.62,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1403.8,"xrt_compute":25.17,"load_ms":310.3,"mel_ms":15.7,"encode_ms":249.8,"decode_ms":1138.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1409.0,"xrt_wall":25.08,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":393.2,"xrt_compute":27.98,"load_ms":278.4,"mel_ms":5.5,"encode_ms":123.4,"decode_ms":264.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":395.8,"xrt_wall":27.79,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":19242.5,"xrt_compute":1.84,"load_ms":619.1,"mel_ms":63.8,"encode_ms":9246.0,"decode_ms":9932.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":19272.7,"xrt_wall":1.83,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6899.5,"xrt_compute":1.59,"load_ms":904.8,"mel_ms":29.5,"encode_ms":4614.5,"decode_ms":2255.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6911.6,"xrt_wall":1.59,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":21084.5,"xrt_compute":1.68,"load_ms":915.3,"mel_ms":56.4,"encode_ms":9587.5,"decode_ms":11440.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":21115.8,"xrt_wall":1.67,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/multitalker-parakeet-streaming-0.6b-v1.json b/catalog/multitalker-parakeet-streaming-0.6b-v1.json index 83cd2fde..34f145f6 100644 --- a/catalog/multitalker-parakeet-streaming-0.6b-v1.json +++ b/catalog/multitalker-parakeet-streaming-0.6b-v1.json @@ -53,21 +53,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1026.8,"xrt_compute":34.41,"load_ms":162.3,"mel_ms":1.6,"encode_ms":989.6,"decode_ms":35.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1028.5,"xrt_wall":34.35}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":306.0,"xrt_compute":35.95,"load_ms":151.4,"mel_ms":0.6,"encode_ms":297.4,"decode_ms":8.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":306.8,"xrt_wall":35.85}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1049.0,"xrt_compute":33.68,"load_ms":203.5,"mel_ms":1.6,"encode_ms":1011.7,"decode_ms":35.7,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1050.7,"xrt_wall":33.63}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":309.0,"xrt_compute":35.6,"load_ms":203.5,"mel_ms":0.6,"encode_ms":300.5,"decode_ms":7.8,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":309.7,"xrt_wall":35.52}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":183.2,"xrt_compute":192.82,"load_ms":121.3,"mel_ms":1.5,"encode_ms":146.4,"decode_ms":35.4,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":185.4,"xrt_wall":190.57}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":67.7,"xrt_compute":162.41,"load_ms":155.3,"mel_ms":0.7,"encode_ms":59.1,"decode_ms":8.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":69.1,"xrt_wall":159.24}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":181.5,"xrt_compute":194.69,"load_ms":166.8,"mel_ms":1.5,"encode_ms":144.5,"decode_ms":35.5,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":183.7,"xrt_wall":192.39}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":65.8,"xrt_compute":167.17,"load_ms":169.4,"mel_ms":0.6,"encode_ms":57.6,"decode_ms":7.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":67.0,"xrt_wall":164.13}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3116.5,"xrt_compute":11.34,"load_ms":620.1,"mel_ms":60.8,"encode_ms":2805.1,"decode_ms":250.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":3120.7,"xrt_wall":11.32}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":814.3,"xrt_compute":13.51,"load_ms":619.0,"mel_ms":19.4,"encode_ms":748.8,"decode_ms":46.1,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":816.0,"xrt_wall":13.48}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2991.0,"xrt_compute":11.81,"load_ms":784.1,"mel_ms":61.5,"encode_ms":2681.5,"decode_ms":248.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":2995.0,"xrt_wall":11.8}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":749.5,"xrt_compute":14.68,"load_ms":796.2,"mel_ms":18.8,"encode_ms":685.8,"decode_ms":45.0,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":751.2,"xrt_wall":14.64}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1378.6,"xrt_compute":25.63,"load_ms":301.0,"mel_ms":57.9,"encode_ms":1082.4,"decode_ms":238.2,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1385.5,"xrt_wall":25.5}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":466.5,"xrt_compute":23.58,"load_ms":299.1,"mel_ms":18.0,"encode_ms":401.6,"decode_ms":46.8,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":474.6,"xrt_wall":23.18}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1342.2,"xrt_compute":26.32,"load_ms":431.5,"mel_ms":57.6,"encode_ms":1046.0,"decode_ms":238.6,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":1360.2,"xrt_wall":25.98}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":458.5,"xrt_compute":23.99,"load_ms":423.9,"mel_ms":18.3,"encode_ms":393.9,"decode_ms":46.4,"engine_sha":"c55a09d","measured_on":"2026-07-13","thermal_gated":null,"wall_ms":466.2,"xrt_wall":23.59} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1108.8,"xrt_compute":31.87,"load_ms":211.4,"mel_ms":1.6,"encode_ms":1071.0,"decode_ms":36.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1113.3,"xrt_wall":31.74,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":337.6,"xrt_compute":32.58,"load_ms":193.2,"mel_ms":0.6,"encode_ms":328.8,"decode_ms":8.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":339.4,"xrt_wall":32.41,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1098.1,"xrt_compute":32.18,"load_ms":202.1,"mel_ms":1.6,"encode_ms":1059.8,"decode_ms":36.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1102.6,"xrt_wall":32.04,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":330.8,"xrt_compute":33.25,"load_ms":204.7,"mel_ms":0.7,"encode_ms":321.7,"decode_ms":8.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":332.7,"xrt_wall":33.07,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":156.0,"xrt_compute":226.47,"load_ms":164.5,"mel_ms":1.7,"encode_ms":117.6,"decode_ms":36.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":166.5,"xrt_wall":212.19,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":54.5,"xrt_compute":201.85,"load_ms":170.6,"mel_ms":0.6,"encode_ms":45.7,"decode_ms":8.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":58.9,"xrt_wall":186.9,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":155.1,"xrt_compute":227.85,"load_ms":178.8,"mel_ms":1.6,"encode_ms":116.1,"decode_ms":37.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":165.8,"xrt_wall":213.05,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":53.1,"xrt_compute":207.08,"load_ms":177.9,"mel_ms":0.6,"encode_ms":44.2,"decode_ms":8.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":57.7,"xrt_wall":190.77,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2956.1,"xrt_compute":11.95,"load_ms":986.2,"mel_ms":55.9,"encode_ms":2653.2,"decode_ms":247.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3007.2,"xrt_wall":11.75,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":790.3,"xrt_compute":13.92,"load_ms":708.6,"mel_ms":17.5,"encode_ms":728.0,"decode_ms":44.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":806.0,"xrt_wall":13.65,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2911.6,"xrt_compute":12.13,"load_ms":1261.3,"mel_ms":57.2,"encode_ms":2609.5,"decode_ms":244.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2962.0,"xrt_wall":11.93,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":748.3,"xrt_compute":14.7,"load_ms":879.9,"mel_ms":19.5,"encode_ms":683.4,"decode_ms":45.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":763.9,"xrt_wall":14.4,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1303.0,"xrt_compute":27.12,"load_ms":341.6,"mel_ms":57.2,"encode_ms":1007.4,"decode_ms":238.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1322.3,"xrt_wall":26.72,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":438.1,"xrt_compute":25.11,"load_ms":326.5,"mel_ms":17.6,"encode_ms":374.7,"decode_ms":45.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":447.6,"xrt_wall":24.57,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1279.5,"xrt_compute":27.61,"load_ms":421.5,"mel_ms":57.4,"encode_ms":985.7,"decode_ms":236.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1298.5,"xrt_wall":27.21,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":438.6,"xrt_compute":25.08,"load_ms":415.0,"mel_ms":17.8,"encode_ms":375.3,"decode_ms":45.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":448.1,"xrt_wall":24.55,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/nemotron-3.5-asr-streaming-0.6b.json b/catalog/nemotron-3.5-asr-streaming-0.6b.json index 13f01c24..82343469 100644 --- a/catalog/nemotron-3.5-asr-streaming-0.6b.json +++ b/catalog/nemotron-3.5-asr-streaming-0.6b.json @@ -89,14 +89,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1247.9,"xrt_compute":28.31,"load_ms":190.4,"mel_ms":1.5,"encode_ms":1050.6,"decode_ms":195.8,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1249.5,"xrt_wall":28.28}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":361.6,"xrt_compute":30.42,"load_ms":183.0,"mel_ms":0.6,"encode_ms":314.3,"decode_ms":46.8,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":362.4,"xrt_wall":30.35}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1274.5,"xrt_compute":27.72,"load_ms":224.0,"mel_ms":1.5,"encode_ms":1081.7,"decode_ms":191.2,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":1276.2,"xrt_wall":27.68}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":365.9,"xrt_compute":30.07,"load_ms":227.7,"mel_ms":0.6,"encode_ms":318.3,"decode_ms":47.0,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":366.6,"xrt_wall":30.0}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":366.0,"xrt_compute":96.54,"load_ms":156.9,"mel_ms":1.5,"encode_ms":166.6,"decode_ms":197.9,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":368.2,"xrt_wall":95.96}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":111.5,"xrt_compute":98.69,"load_ms":132.1,"mel_ms":0.6,"encode_ms":63.0,"decode_ms":47.9,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":112.7,"xrt_wall":97.6}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":359.1,"xrt_compute":98.39,"load_ms":191.4,"mel_ms":1.4,"encode_ms":167.1,"decode_ms":190.6,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":361.3,"xrt_wall":97.79}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":111.5,"xrt_compute":98.65,"load_ms":201.5,"mel_ms":0.6,"encode_ms":61.9,"decode_ms":49.1,"engine_sha":"d9708f1","measured_on":"2026-06-08","thermal_gated":null,"wall_ms":112.7,"xrt_wall":97.6}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1208.6,"xrt_compute":29.23,"load_ms":182.5,"mel_ms":1.6,"encode_ms":1078.8,"decode_ms":128.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1213.1,"xrt_wall":29.13,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":354.7,"xrt_compute":31.01,"load_ms":170.4,"mel_ms":0.6,"encode_ms":322.6,"decode_ms":31.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":356.6,"xrt_wall":30.85,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1188.4,"xrt_compute":29.73,"load_ms":213.6,"mel_ms":1.6,"encode_ms":1059.8,"decode_ms":127.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1192.8,"xrt_wall":29.62,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":357.6,"xrt_compute":30.76,"load_ms":219.4,"mel_ms":0.6,"encode_ms":325.3,"decode_ms":31.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":359.5,"xrt_wall":30.6,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":256.3,"xrt_compute":137.88,"load_ms":143.5,"mel_ms":1.6,"encode_ms":127.3,"decode_ms":127.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":266.8,"xrt_wall":132.43,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":76.8,"xrt_compute":143.14,"load_ms":137.4,"mel_ms":0.6,"encode_ms":45.3,"decode_ms":30.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":81.5,"xrt_wall":135.05,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":255.5,"xrt_compute":138.26,"load_ms":186.4,"mel_ms":1.6,"encode_ms":127.7,"decode_ms":126.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":266.1,"xrt_wall":132.77,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":76.4,"xrt_compute":143.94,"load_ms":185.7,"mel_ms":0.6,"encode_ms":44.7,"decode_ms":31.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":80.6,"xrt_wall":136.41,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3739.4,"xrt_compute":9.45,"load_ms":693.7,"mel_ms":57.3,"encode_ms":2664.9,"decode_ms":1017.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3774.5,"xrt_wall":9.36,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":993.3,"xrt_compute":11.07,"load_ms":932.3,"mel_ms":18.2,"encode_ms":727.8,"decode_ms":247.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1004.9,"xrt_wall":10.95,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3671.3,"xrt_compute":9.62,"load_ms":897.7,"mel_ms":58.4,"encode_ms":2604.2,"decode_ms":1008.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3706.0,"xrt_wall":9.53,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/nemotron-speech-streaming-en-0.6b.json b/catalog/nemotron-speech-streaming-en-0.6b.json index f0b44116..7081e5e2 100644 --- a/catalog/nemotron-speech-streaming-en-0.6b.json +++ b/catalog/nemotron-speech-streaming-en-0.6b.json @@ -51,14 +51,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1157.7,"xrt_compute":30.52,"load_ms":159.4,"mel_ms":1.6,"encode_ms":1039.9,"decode_ms":116.2,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1159.3,"xrt_wall":30.48}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":345.0,"xrt_compute":31.89,"load_ms":157.9,"mel_ms":0.6,"encode_ms":313.9,"decode_ms":30.4,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":345.7,"xrt_wall":31.82}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1177.1,"xrt_compute":30.02,"load_ms":208.2,"mel_ms":1.6,"encode_ms":1060.6,"decode_ms":114.9,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1178.7,"xrt_wall":29.97}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":346.2,"xrt_compute":31.77,"load_ms":209.3,"mel_ms":0.6,"encode_ms":315.3,"decode_ms":30.3,"engine_sha":"c2e7bf9","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":347.0,"xrt_wall":31.7}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":221.0,"xrt_compute":160.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":73.0,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":224.0,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":73.0,"xrt_compute":151.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1108.0,"xrt_compute":31.89,"load_ms":168.9,"mel_ms":1.6,"encode_ms":1069.5,"decode_ms":36.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1112.2,"xrt_wall":31.77,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":335.3,"xrt_compute":32.81,"load_ms":159.5,"mel_ms":0.6,"encode_ms":326.2,"decode_ms":8.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":337.0,"xrt_wall":32.64,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1103.2,"xrt_compute":32.03,"load_ms":222.4,"mel_ms":1.6,"encode_ms":1064.8,"decode_ms":36.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1107.4,"xrt_wall":31.91,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":327.0,"xrt_compute":33.64,"load_ms":206.5,"mel_ms":0.7,"encode_ms":318.2,"decode_ms":8.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":328.8,"xrt_wall":33.45,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":158.2,"xrt_compute":223.33,"load_ms":147.5,"mel_ms":1.6,"encode_ms":118.6,"decode_ms":38.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":168.5,"xrt_wall":209.64,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":54.8,"xrt_compute":200.58,"load_ms":131.6,"mel_ms":0.6,"encode_ms":46.0,"decode_ms":8.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":59.3,"xrt_wall":185.48,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":156.9,"xrt_compute":225.2,"load_ms":212.2,"mel_ms":1.6,"encode_ms":117.5,"decode_ms":37.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":167.3,"xrt_wall":211.22,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":53.2,"xrt_compute":206.74,"load_ms":182.5,"mel_ms":0.6,"encode_ms":44.4,"decode_ms":8.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":57.7,"xrt_wall":190.66,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2928.5,"xrt_compute":12.06,"load_ms":622.1,"mel_ms":56.6,"encode_ms":2624.7,"decode_ms":247.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2961.7,"xrt_wall":11.93,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":788.2,"xrt_compute":13.96,"load_ms":862.9,"mel_ms":17.7,"encode_ms":724.8,"decode_ms":45.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":800.5,"xrt_wall":13.74,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2864.8,"xrt_compute":12.33,"load_ms":838.1,"mel_ms":55.6,"encode_ms":2564.3,"decode_ms":244.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2897.5,"xrt_wall":12.19,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/parakeet-ctc-0.6b.json b/catalog/parakeet-ctc-0.6b.json index cab83772..84c5448e 100644 --- a/catalog/parakeet-ctc-0.6b.json +++ b/catalog/parakeet-ctc-0.6b.json @@ -49,21 +49,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":999.3,"xrt_compute":35.35,"load_ms":155.7,"mel_ms":1.8,"encode_ms":995.5,"decode_ms":2.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1001.1,"xrt_wall":35.3}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":296.8,"xrt_compute":37.07,"load_ms":159.6,"mel_ms":0.7,"encode_ms":295.4,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":297.6,"xrt_wall":36.97}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1192.2,"xrt_compute":29.64,"load_ms":209.1,"mel_ms":1.7,"encode_ms":1188.5,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1194.0,"xrt_wall":29.59}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":355.1,"xrt_compute":30.98,"load_ms":217.5,"mel_ms":0.7,"encode_ms":353.7,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":355.9,"xrt_wall":30.91}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":142.4,"xrt_compute":248.04,"load_ms":136.8,"mel_ms":1.7,"encode_ms":138.8,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":144.8,"xrt_wall":244.04}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":57.4,"xrt_compute":191.56,"load_ms":156.0,"mel_ms":0.7,"encode_ms":55.8,"decode_ms":0.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":59.3,"xrt_wall":185.44}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":140.7,"xrt_compute":251.18,"load_ms":185.3,"mel_ms":1.8,"encode_ms":136.8,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":143.3,"xrt_wall":246.48}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":55.5,"xrt_compute":198.18,"load_ms":212.7,"mel_ms":0.7,"encode_ms":53.9,"decode_ms":0.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":57.6,"xrt_wall":191.0}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3140.9,"xrt_compute":11.25,"load_ms":567.4,"mel_ms":42.5,"encode_ms":2755.6,"decode_ms":342.9,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":3144.4,"xrt_wall":11.24}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":863.4,"xrt_compute":12.74,"load_ms":836.6,"mel_ms":13.8,"encode_ms":743.2,"decode_ms":106.4,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":865.1,"xrt_wall":12.71}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3666.7,"xrt_compute":9.64,"load_ms":721.2,"mel_ms":42.7,"encode_ms":3275.9,"decode_ms":348.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":3670.3,"xrt_wall":9.63}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1068.6,"xrt_compute":10.29,"load_ms":1016.2,"mel_ms":14.9,"encode_ms":939.2,"decode_ms":114.4,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1070.3,"xrt_wall":10.28}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1498.1,"xrt_compute":23.58,"load_ms":312.2,"mel_ms":44.9,"encode_ms":1114.4,"decode_ms":338.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1504.6,"xrt_wall":23.48}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":537.4,"xrt_compute":20.47,"load_ms":310.6,"mel_ms":14.2,"encode_ms":418.1,"decode_ms":105.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":540.9,"xrt_wall":20.34}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1496.8,"xrt_compute":23.61,"load_ms":399.6,"mel_ms":45.2,"encode_ms":1092.4,"decode_ms":359.3,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1503.4,"xrt_wall":23.5}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":520.3,"xrt_compute":21.14,"load_ms":381.9,"mel_ms":14.1,"encode_ms":400.0,"decode_ms":106.2,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":523.9,"xrt_wall":21.0} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":986.8,"xrt_compute":35.8,"load_ms":170.1,"mel_ms":1.7,"encode_ms":982.9,"decode_ms":2.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":989.8,"xrt_wall":35.7,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":293.5,"xrt_compute":37.48,"load_ms":154.1,"mel_ms":0.7,"encode_ms":292.0,"decode_ms":0.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":295.1,"xrt_wall":37.28,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":921.4,"xrt_compute":38.35,"load_ms":201.5,"mel_ms":1.8,"encode_ms":917.4,"decode_ms":2.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":924.5,"xrt_wall":38.22,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":270.5,"xrt_compute":40.66,"load_ms":200.2,"mel_ms":0.7,"encode_ms":269.1,"decode_ms":0.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":272.1,"xrt_wall":40.43,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":113.4,"xrt_compute":311.61,"load_ms":126.5,"mel_ms":1.8,"encode_ms":109.4,"decode_ms":2.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":119.4,"xrt_wall":296.0,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":48.5,"xrt_compute":226.86,"load_ms":124.1,"mel_ms":0.7,"encode_ms":46.9,"decode_ms":0.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":52.0,"xrt_wall":211.37,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":111.4,"xrt_compute":317.21,"load_ms":171.3,"mel_ms":1.8,"encode_ms":107.4,"decode_ms":2.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":117.3,"xrt_wall":301.19,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":48.3,"xrt_compute":227.64,"load_ms":172.7,"mel_ms":0.7,"encode_ms":46.8,"decode_ms":0.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":51.7,"xrt_wall":212.63,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2644.1,"xrt_compute":13.36,"load_ms":821.1,"mel_ms":40.9,"encode_ms":2536.9,"decode_ms":66.3,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2663.9,"xrt_wall":13.26,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":723.3,"xrt_compute":15.21,"load_ms":607.6,"mel_ms":12.6,"encode_ms":691.2,"decode_ms":19.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":727.9,"xrt_wall":15.11,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2571.5,"xrt_compute":13.74,"load_ms":1129.3,"mel_ms":38.9,"encode_ms":2465.9,"decode_ms":66.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2591.5,"xrt_wall":13.63,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":663.5,"xrt_compute":16.58,"load_ms":783.6,"mel_ms":13.1,"encode_ms":629.1,"decode_ms":21.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":668.1,"xrt_wall":16.47,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1155.6,"xrt_compute":30.57,"load_ms":439.3,"mel_ms":40.4,"encode_ms":1054.0,"decode_ms":61.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1172.8,"xrt_wall":30.13,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":426.8,"xrt_compute":25.77,"load_ms":202.5,"mel_ms":13.6,"encode_ms":385.3,"decode_ms":27.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":438.6,"xrt_wall":25.08,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1142.9,"xrt_compute":30.91,"load_ms":642.1,"mel_ms":40.8,"encode_ms":1039.5,"decode_ms":62.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1162.9,"xrt_wall":30.38,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":418.4,"xrt_compute":26.29,"load_ms":295.7,"mel_ms":14.0,"encode_ms":378.2,"decode_ms":26.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":430.0,"xrt_wall":25.58,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/parakeet-ctc-1.1b.json b/catalog/parakeet-ctc-1.1b.json index 91f57f44..69846813 100644 --- a/catalog/parakeet-ctc-1.1b.json +++ b/catalog/parakeet-ctc-1.1b.json @@ -49,21 +49,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1696.6,"xrt_compute":20.83,"load_ms":250.6,"mel_ms":1.6,"encode_ms":1692.9,"decode_ms":2.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1698.5,"xrt_wall":20.8}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":499.8,"xrt_compute":22.01,"load_ms":254.3,"mel_ms":0.7,"encode_ms":498.4,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":500.9,"xrt_wall":21.96}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2042.4,"xrt_compute":17.3,"load_ms":345.3,"mel_ms":1.7,"encode_ms":2038.7,"decode_ms":2.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":2044.4,"xrt_wall":17.28}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":601.1,"xrt_compute":18.3,"load_ms":329.8,"mel_ms":0.7,"encode_ms":599.7,"decode_ms":0.7,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":602.2,"xrt_wall":18.27}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":220.3,"xrt_compute":160.38,"load_ms":200.6,"mel_ms":1.6,"encode_ms":216.8,"decode_ms":1.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":223.5,"xrt_wall":158.08}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":90.3,"xrt_compute":121.85,"load_ms":219.7,"mel_ms":0.7,"encode_ms":88.8,"decode_ms":0.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":93.1,"xrt_wall":118.14}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":220.8,"xrt_compute":160.02,"load_ms":294.1,"mel_ms":1.6,"encode_ms":217.3,"decode_ms":1.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":224.1,"xrt_wall":157.69}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":87.7,"xrt_compute":125.48,"load_ms":328.4,"mel_ms":0.7,"encode_ms":86.2,"decode_ms":0.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":90.7,"xrt_wall":121.32}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5121.0,"xrt_compute":6.9,"load_ms":962.8,"mel_ms":44.5,"encode_ms":4723.0,"decode_ms":353.5,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":5125.4,"xrt_wall":6.89}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1376.7,"xrt_compute":7.99,"load_ms":1384.1,"mel_ms":14.1,"encode_ms":1254.5,"decode_ms":108.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1379.0,"xrt_wall":7.98}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":6083.5,"xrt_compute":5.81,"load_ms":1286.4,"mel_ms":46.6,"encode_ms":5675.1,"decode_ms":361.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":6088.1,"xrt_wall":5.8}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1753.4,"xrt_compute":6.27,"load_ms":1864.5,"mel_ms":14.8,"encode_ms":1624.1,"decode_ms":114.6,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1755.8,"xrt_wall":6.26}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2326.0,"xrt_compute":15.19,"load_ms":538.6,"mel_ms":47.2,"encode_ms":1928.7,"decode_ms":350.1,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":2334.6,"xrt_wall":15.13}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":822.6,"xrt_compute":13.37,"load_ms":497.2,"mel_ms":13.3,"encode_ms":699.5,"decode_ms":109.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":827.9,"xrt_wall":13.29}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2335.1,"xrt_compute":15.13,"load_ms":721.7,"mel_ms":46.3,"encode_ms":1929.0,"decode_ms":359.8,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":2343.9,"xrt_wall":15.07}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":826.0,"xrt_compute":13.32,"load_ms":723.8,"mel_ms":13.9,"encode_ms":686.7,"decode_ms":125.3,"engine_sha":"57997dc","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":831.6,"xrt_wall":13.23} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1698.3,"xrt_compute":20.8,"load_ms":276.7,"mel_ms":1.8,"encode_ms":1694.3,"decode_ms":2.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1701.9,"xrt_wall":20.76,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":501.8,"xrt_compute":21.92,"load_ms":256.3,"mel_ms":0.7,"encode_ms":500.4,"decode_ms":0.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":504.1,"xrt_wall":21.82,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1583.3,"xrt_compute":22.32,"load_ms":334.7,"mel_ms":1.7,"encode_ms":1579.2,"decode_ms":2.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1587.4,"xrt_wall":22.26,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":458.4,"xrt_compute":24.0,"load_ms":341.0,"mel_ms":0.7,"encode_ms":456.9,"decode_ms":0.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":460.9,"xrt_wall":23.87,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":180.3,"xrt_compute":195.92,"load_ms":201.9,"mel_ms":1.8,"encode_ms":176.2,"decode_ms":2.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":188.1,"xrt_wall":187.83,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":80.4,"xrt_compute":136.77,"load_ms":203.6,"mel_ms":0.8,"encode_ms":78.9,"decode_ms":0.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":85.7,"xrt_wall":128.34,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":176.6,"xrt_compute":200.12,"load_ms":284.5,"mel_ms":1.8,"encode_ms":172.5,"decode_ms":2.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":184.5,"xrt_wall":191.54,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":78.6,"xrt_compute":140.04,"load_ms":288.0,"mel_ms":0.8,"encode_ms":77.0,"decode_ms":0.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":83.7,"xrt_wall":131.38,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4627.7,"xrt_compute":7.63,"load_ms":1364.2,"mel_ms":38.2,"encode_ms":4520.6,"decode_ms":68.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4650.1,"xrt_wall":7.6,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1213.9,"xrt_compute":9.06,"load_ms":1002.2,"mel_ms":14.4,"encode_ms":1179.8,"decode_ms":19.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1221.3,"xrt_wall":9.01,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4484.5,"xrt_compute":7.88,"load_ms":1842.1,"mel_ms":41.8,"encode_ms":4372.0,"decode_ms":70.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4507.3,"xrt_wall":7.84,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1103.5,"xrt_compute":9.97,"load_ms":1303.9,"mel_ms":13.8,"encode_ms":1068.9,"decode_ms":20.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1110.5,"xrt_wall":9.91,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2019.8,"xrt_compute":17.49,"load_ms":692.9,"mel_ms":41.7,"encode_ms":1914.5,"decode_ms":63.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2065.6,"xrt_wall":17.11,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":711.0,"xrt_compute":15.47,"load_ms":300.4,"mel_ms":13.7,"encode_ms":670.4,"decode_ms":26.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":736.1,"xrt_wall":14.94,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2002.0,"xrt_compute":17.65,"load_ms":1049.1,"mel_ms":41.3,"encode_ms":1897.2,"decode_ms":63.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2047.6,"xrt_wall":17.26,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":691.0,"xrt_compute":15.92,"load_ms":468.5,"mel_ms":14.1,"encode_ms":649.7,"decode_ms":27.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":712.7,"xrt_wall":15.43,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/parakeet-primeline.json b/catalog/parakeet-primeline.json index aad0eef9..be5869ed 100644 --- a/catalog/parakeet-primeline.json +++ b/catalog/parakeet-primeline.json @@ -83,14 +83,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":27.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":153.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":146.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":null,"xrt_compute":153.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":null,"xrt_compute":149.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1072.9,"xrt_compute":32.93,"load_ms":176.5,"mel_ms":2.3,"encode_ms":1019.9,"decode_ms":50.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1076.2,"xrt_wall":32.83,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":308.6,"xrt_compute":35.65,"load_ms":167.2,"mel_ms":0.9,"encode_ms":296.3,"decode_ms":11.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":310.2,"xrt_wall":35.46,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1006.2,"xrt_compute":35.11,"load_ms":231.5,"mel_ms":2.3,"encode_ms":955.6,"decode_ms":48.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1009.5,"xrt_wall":35.0,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":286.7,"xrt_compute":38.36,"load_ms":209.9,"mel_ms":0.8,"encode_ms":274.6,"decode_ms":11.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":288.3,"xrt_wall":38.15,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":165.1,"xrt_compute":214.02,"load_ms":160.9,"mel_ms":2.2,"encode_ms":114.6,"decode_ms":48.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":171.5,"xrt_wall":206.06,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":61.6,"xrt_compute":178.53,"load_ms":138.4,"mel_ms":0.8,"encode_ms":49.4,"decode_ms":11.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":64.8,"xrt_wall":169.63,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":164.4,"xrt_compute":214.98,"load_ms":213.9,"mel_ms":2.3,"encode_ms":114.0,"decode_ms":48.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":170.8,"xrt_wall":206.89,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":59.9,"xrt_compute":183.77,"load_ms":185.2,"mel_ms":0.8,"encode_ms":47.7,"decode_ms":11.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":63.1,"xrt_wall":174.41,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2962.2,"xrt_compute":11.93,"load_ms":662.9,"mel_ms":56.0,"encode_ms":2565.7,"decode_ms":340.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2988.3,"xrt_wall":11.82,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":788.7,"xrt_compute":13.95,"load_ms":891.1,"mel_ms":18.6,"encode_ms":698.4,"decode_ms":71.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":798.0,"xrt_wall":13.78,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2900.0,"xrt_compute":12.18,"load_ms":869.5,"mel_ms":56.8,"encode_ms":2514.1,"decode_ms":329.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2926.1,"xrt_wall":12.07,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/parakeet-rnnt-0.6b.json b/catalog/parakeet-rnnt-0.6b.json index af4b9935..3e54e03b 100644 --- a/catalog/parakeet-rnnt-0.6b.json +++ b/catalog/parakeet-rnnt-0.6b.json @@ -49,14 +49,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1030.0,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":302.0,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1220.0,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":360.0,"xrt_compute":31.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":181.0,"xrt_compute":196.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":65.0,"xrt_compute":170.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":178.0,"xrt_compute":198.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":64.0,"xrt_compute":173.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1038.5,"xrt_compute":34.02,"load_ms":171.9,"mel_ms":1.8,"encode_ms":1005.6,"decode_ms":31.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1041.6,"xrt_wall":33.92,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":301.2,"xrt_compute":36.52,"load_ms":167.7,"mel_ms":0.7,"encode_ms":293.6,"decode_ms":6.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":302.8,"xrt_wall":36.32,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":977.0,"xrt_compute":36.16,"load_ms":232.8,"mel_ms":1.8,"encode_ms":944.0,"decode_ms":31.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":980.1,"xrt_wall":36.05,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":280.6,"xrt_compute":39.19,"load_ms":219.7,"mel_ms":0.7,"encode_ms":272.7,"decode_ms":7.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":282.3,"xrt_wall":38.96,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":142.2,"xrt_compute":248.43,"load_ms":146.7,"mel_ms":1.7,"encode_ms":109.8,"decode_ms":30.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":148.2,"xrt_wall":238.33,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":55.5,"xrt_compute":198.17,"load_ms":132.3,"mel_ms":0.6,"encode_ms":48.0,"decode_ms":6.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":59.1,"xrt_wall":186.24,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":138.4,"xrt_compute":255.29,"load_ms":201.3,"mel_ms":1.7,"encode_ms":107.5,"decode_ms":29.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":144.2,"xrt_wall":245.01,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":54.7,"xrt_compute":201.01,"load_ms":187.0,"mel_ms":0.7,"encode_ms":46.8,"decode_ms":7.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":58.4,"xrt_wall":188.44,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2708.4,"xrt_compute":13.05,"load_ms":620.1,"mel_ms":38.1,"encode_ms":2494.2,"decode_ms":176.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2728.6,"xrt_wall":12.95,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":719.6,"xrt_compute":15.29,"load_ms":824.1,"mel_ms":12.2,"encode_ms":675.0,"decode_ms":32.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":724.2,"xrt_wall":15.19,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2637.8,"xrt_compute":13.39,"load_ms":810.4,"mel_ms":38.1,"encode_ms":2425.6,"decode_ms":174.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2658.4,"xrt_wall":13.29,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/parakeet-rnnt-1.1b.json b/catalog/parakeet-rnnt-1.1b.json index 1cbc6e6c..ef0e2efb 100644 --- a/catalog/parakeet-rnnt-1.1b.json +++ b/catalog/parakeet-rnnt-1.1b.json @@ -49,21 +49,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1858.9,"xrt_compute":19.01,"load_ms":263.9,"mel_ms":1.8,"encode_ms":1750.1,"decode_ms":107.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1860.9,"xrt_wall":18.99}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":506.0,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2050.0,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":606.0,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":265.0,"xrt_compute":133.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":97.0,"xrt_compute":114.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":258.0,"xrt_compute":137.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":96.0,"xrt_compute":114.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6178.9,"xrt_compute":5.72,"load_ms":980.2,"mel_ms":44.5,"encode_ms":4678.4,"decode_ms":1456.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":6183.2,"xrt_wall":5.71}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1576.0,"xrt_compute":6.98,"load_ms":1392.1,"mel_ms":13.8,"encode_ms":1239.6,"decode_ms":322.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1578.4,"xrt_wall":6.97}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7117.1,"xrt_compute":4.96,"load_ms":1458.6,"mel_ms":45.7,"encode_ms":5569.5,"decode_ms":1501.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":7121.7,"xrt_wall":4.96}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1929.3,"xrt_compute":5.7,"load_ms":1963.2,"mel_ms":14.2,"encode_ms":1579.8,"decode_ms":335.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1931.8,"xrt_wall":5.69}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3302.2,"xrt_compute":10.7,"load_ms":513.2,"mel_ms":44.5,"encode_ms":1832.9,"decode_ms":1424.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3310.5,"xrt_wall":10.67}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1038.0,"xrt_compute":10.6,"load_ms":982.6,"mel_ms":13.4,"encode_ms":700.8,"decode_ms":323.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1043.2,"xrt_wall":10.54}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3340.3,"xrt_compute":10.58,"load_ms":730.1,"mel_ms":46.2,"encode_ms":1836.1,"decode_ms":1458.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":3349.1,"xrt_wall":10.55}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1013.7,"xrt_compute":10.85,"load_ms":1012.7,"mel_ms":14.8,"encode_ms":675.1,"decode_ms":323.9,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1019.1,"xrt_wall":10.79} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1855.7,"xrt_compute":19.04,"load_ms":297.5,"mel_ms":1.9,"encode_ms":1822.0,"decode_ms":31.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1860.1,"xrt_wall":18.99,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":515.6,"xrt_compute":21.34,"load_ms":273.2,"mel_ms":0.7,"encode_ms":508.0,"decode_ms":6.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":518.4,"xrt_wall":21.22,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1640.7,"xrt_compute":21.53,"load_ms":377.6,"mel_ms":1.8,"encode_ms":1608.1,"decode_ms":30.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1645.1,"xrt_wall":21.48,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":491.8,"xrt_compute":22.37,"load_ms":347.4,"mel_ms":0.7,"encode_ms":483.7,"decode_ms":7.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":494.1,"xrt_wall":22.26,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":207.1,"xrt_compute":170.62,"load_ms":238.2,"mel_ms":1.7,"encode_ms":175.7,"decode_ms":29.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":215.0,"xrt_wall":164.35,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":85.8,"xrt_compute":128.14,"load_ms":218.4,"mel_ms":0.7,"encode_ms":78.3,"decode_ms":6.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":91.3,"xrt_wall":120.51,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":201.3,"xrt_compute":175.51,"load_ms":338.5,"mel_ms":1.7,"encode_ms":170.0,"decode_ms":29.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":209.4,"xrt_wall":168.69,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":83.6,"xrt_compute":131.63,"load_ms":322.1,"mel_ms":0.7,"encode_ms":76.2,"decode_ms":6.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":88.8,"xrt_wall":123.88,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4725.3,"xrt_compute":7.48,"load_ms":1388.7,"mel_ms":40.8,"encode_ms":4505.6,"decode_ms":179.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4748.2,"xrt_wall":7.44,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1212.0,"xrt_compute":9.08,"load_ms":1029.8,"mel_ms":13.8,"encode_ms":1165.6,"decode_ms":32.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1218.9,"xrt_wall":9.02,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4789.2,"xrt_compute":7.38,"load_ms":1943.4,"mel_ms":39.2,"encode_ms":4576.1,"decode_ms":173.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4813.0,"xrt_wall":7.34,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1121.9,"xrt_compute":9.8,"load_ms":1353.4,"mel_ms":12.1,"encode_ms":1075.7,"decode_ms":34.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1128.7,"xrt_wall":9.75,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2181.1,"xrt_compute":16.2,"load_ms":813.9,"mel_ms":41.7,"encode_ms":1966.2,"decode_ms":173.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2223.3,"xrt_wall":15.89,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":709.5,"xrt_compute":15.5,"load_ms":386.8,"mel_ms":12.1,"encode_ms":664.5,"decode_ms":32.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":733.7,"xrt_wall":14.99,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2145.2,"xrt_compute":16.47,"load_ms":1178.5,"mel_ms":40.4,"encode_ms":1924.8,"decode_ms":180.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2187.1,"xrt_wall":16.15,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":700.8,"xrt_compute":15.7,"load_ms":556.3,"mel_ms":12.1,"encode_ms":654.3,"decode_ms":34.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":730.4,"xrt_wall":15.06,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/parakeet-tdt-0.6b-v2.json b/catalog/parakeet-tdt-0.6b-v2.json index d57a1ad0..7ae1c465 100644 --- a/catalog/parakeet-tdt-0.6b-v2.json +++ b/catalog/parakeet-tdt-0.6b-v2.json @@ -49,14 +49,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1070.0,"xrt_compute":33.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":312.0,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1260.0,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":371.0,"xrt_compute":30.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":193.0,"xrt_compute":183.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":67.0,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":189.0,"xrt_compute":187.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":68.0,"xrt_compute":163.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1086.3,"xrt_compute":32.53,"load_ms":189.6,"mel_ms":2.5,"encode_ms":1055.6,"decode_ms":28.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1090.0,"xrt_wall":32.42,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":317.5,"xrt_compute":34.64,"load_ms":171.8,"mel_ms":0.9,"encode_ms":310.2,"decode_ms":6.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":319.2,"xrt_wall":34.46,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":987.0,"xrt_compute":35.8,"load_ms":245.9,"mel_ms":2.4,"encode_ms":957.2,"decode_ms":27.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":990.5,"xrt_wall":35.67,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":277.5,"xrt_compute":39.64,"load_ms":205.3,"mel_ms":0.8,"encode_ms":271.1,"decode_ms":5.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":279.0,"xrt_wall":39.42,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":145.2,"xrt_compute":243.28,"load_ms":144.8,"mel_ms":2.3,"encode_ms":116.4,"decode_ms":26.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":152.2,"xrt_wall":232.14,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":56.1,"xrt_compute":196.11,"load_ms":133.9,"mel_ms":0.8,"encode_ms":49.7,"decode_ms":5.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":59.4,"xrt_wall":185.1,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":142.3,"xrt_compute":248.28,"load_ms":204.6,"mel_ms":2.3,"encode_ms":112.9,"decode_ms":27.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":149.6,"xrt_wall":236.17,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":55.0,"xrt_compute":199.95,"load_ms":184.8,"mel_ms":0.8,"encode_ms":48.7,"decode_ms":5.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":58.3,"xrt_wall":188.74,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2831.1,"xrt_compute":12.48,"load_ms":621.4,"mel_ms":57.0,"encode_ms":2563.9,"decode_ms":210.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2857.2,"xrt_wall":12.37,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":748.7,"xrt_compute":14.69,"load_ms":845.0,"mel_ms":17.8,"encode_ms":694.9,"decode_ms":36.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":758.7,"xrt_wall":14.5,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2774.6,"xrt_compute":12.73,"load_ms":803.3,"mel_ms":57.0,"encode_ms":2510.7,"decode_ms":206.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2801.3,"xrt_wall":12.61,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/parakeet-tdt-0.6b-v3.json b/catalog/parakeet-tdt-0.6b-v3.json index a8407eaa..53b67bcf 100644 --- a/catalog/parakeet-tdt-0.6b-v3.json +++ b/catalog/parakeet-tdt-0.6b-v3.json @@ -77,14 +77,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1110.0,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":323.0,"xrt_compute":34.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1309.3,"xrt_compute":26.98,"load_ms":225.5,"mel_ms":3.5,"encode_ms":1247.1,"decode_ms":58.7,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":1311.0,"xrt_wall":26.95}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":385.6,"xrt_compute":28.53,"load_ms":222.2,"mel_ms":1.1,"encode_ms":368.0,"decode_ms":16.5,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":386.3,"xrt_wall":28.47}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":224.1,"xrt_compute":157.68,"load_ms":146.7,"mel_ms":3.3,"encode_ms":150.3,"decode_ms":70.4,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":226.1,"xrt_wall":156.28}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":75.2,"xrt_compute":146.35,"load_ms":151.5,"mel_ms":1.2,"encode_ms":56.9,"decode_ms":17.1,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":76.5,"xrt_wall":143.75}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":223.9,"xrt_compute":157.78,"load_ms":183.9,"mel_ms":3.3,"encode_ms":155.4,"decode_ms":65.2,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":225.8,"xrt_wall":156.45}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":73.5,"xrt_compute":149.59,"load_ms":197.2,"mel_ms":1.2,"encode_ms":55.9,"decode_ms":16.4,"engine_sha":"140ed3a","measured_on":"2026-04-16","thermal_gated":null,"wall_ms":74.9,"xrt_wall":146.9}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1080.2,"xrt_compute":32.71,"load_ms":177.1,"mel_ms":2.2,"encode_ms":1028.8,"decode_ms":49.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1083.6,"xrt_wall":32.61,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":309.6,"xrt_compute":35.53,"load_ms":166.9,"mel_ms":0.8,"encode_ms":297.4,"decode_ms":11.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":311.2,"xrt_wall":35.35,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1004.9,"xrt_compute":35.16,"load_ms":236.0,"mel_ms":2.3,"encode_ms":954.0,"decode_ms":48.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1008.3,"xrt_wall":35.04,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":285.9,"xrt_compute":38.48,"load_ms":216.9,"mel_ms":0.9,"encode_ms":273.6,"decode_ms":11.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":287.5,"xrt_wall":38.27,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":166.6,"xrt_compute":212.12,"load_ms":157.2,"mel_ms":2.2,"encode_ms":116.1,"decode_ms":48.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":173.8,"xrt_wall":203.31,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":61.6,"xrt_compute":178.45,"load_ms":139.4,"mel_ms":0.8,"encode_ms":49.5,"decode_ms":11.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":65.0,"xrt_wall":169.32,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":164.0,"xrt_compute":215.45,"load_ms":217.9,"mel_ms":2.2,"encode_ms":113.1,"decode_ms":48.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":170.9,"xrt_wall":206.75,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":60.5,"xrt_compute":181.74,"load_ms":196.6,"mel_ms":0.8,"encode_ms":48.6,"decode_ms":11.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":64.0,"xrt_wall":171.84,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2972.3,"xrt_compute":11.89,"load_ms":658.8,"mel_ms":57.8,"encode_ms":2584.2,"decode_ms":330.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2998.3,"xrt_wall":11.78,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":793.7,"xrt_compute":13.86,"load_ms":886.9,"mel_ms":18.1,"encode_ms":702.1,"decode_ms":73.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":802.9,"xrt_wall":13.7,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2891.7,"xrt_compute":12.22,"load_ms":907.0,"mel_ms":55.8,"encode_ms":2509.9,"decode_ms":326.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2917.8,"xrt_wall":12.11,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/parakeet-tdt-1.1b.json b/catalog/parakeet-tdt-1.1b.json index 29f4ec07..2ddab8a9 100644 --- a/catalog/parakeet-tdt-1.1b.json +++ b/catalog/parakeet-tdt-1.1b.json @@ -49,14 +49,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1730.0,"xrt_compute":20.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":505.0,"xrt_compute":22.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2040.0,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":608.0,"xrt_compute":18.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":254.0,"xrt_compute":139.09,"load_ms":209.9,"mel_ms":1.8,"encode_ms":219.2,"decode_ms":33.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":257.5,"xrt_wall":137.22}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":97.0,"xrt_compute":113.42,"load_ms":221.0,"mel_ms":0.7,"encode_ms":88.0,"decode_ms":8.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":99.7,"xrt_wall":110.34}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":255.1,"xrt_compute":138.52,"load_ms":300.2,"mel_ms":1.8,"encode_ms":220.0,"decode_ms":33.3,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":258.6,"xrt_wall":136.64}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":94.5,"xrt_compute":116.36,"load_ms":334.9,"mel_ms":0.7,"encode_ms":85.5,"decode_ms":8.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":97.3,"xrt_wall":113.11}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1761.1,"xrt_compute":20.06,"load_ms":290.5,"mel_ms":1.9,"encode_ms":1735.5,"decode_ms":23.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1765.2,"xrt_wall":20.02,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":517.7,"xrt_compute":21.25,"load_ms":260.5,"mel_ms":0.6,"encode_ms":512.2,"decode_ms":4.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":519.9,"xrt_wall":21.16,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1761.1,"xrt_compute":20.06,"load_ms":393.5,"mel_ms":1.9,"encode_ms":1732.0,"decode_ms":27.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1765.9,"xrt_wall":20.01,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":674.6,"xrt_compute":16.31,"load_ms":365.7,"mel_ms":0.7,"encode_ms":668.4,"decode_ms":5.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":677.0,"xrt_wall":16.25,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":201.2,"xrt_compute":175.57,"load_ms":253.9,"mel_ms":1.7,"encode_ms":176.2,"decode_ms":23.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":209.7,"xrt_wall":168.46,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":84.0,"xrt_compute":130.98,"load_ms":216.2,"mel_ms":0.6,"encode_ms":78.5,"decode_ms":4.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":89.5,"xrt_wall":122.86,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":195.8,"xrt_compute":180.48,"load_ms":342.6,"mel_ms":1.7,"encode_ms":171.4,"decode_ms":22.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":203.9,"xrt_wall":173.28,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":81.3,"xrt_compute":135.38,"load_ms":319.2,"mel_ms":0.7,"encode_ms":75.7,"decode_ms":4.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":86.9,"xrt_wall":126.53,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4664.5,"xrt_compute":7.57,"load_ms":1270.3,"mel_ms":39.3,"encode_ms":4458.4,"decode_ms":166.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4688.5,"xrt_wall":7.54,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1211.7,"xrt_compute":9.08,"load_ms":1433.3,"mel_ms":11.7,"encode_ms":1169.8,"decode_ms":30.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1218.5,"xrt_wall":9.03,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4537.2,"xrt_compute":7.79,"load_ms":1921.7,"mel_ms":38.7,"encode_ms":4332.9,"decode_ms":165.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4560.1,"xrt_wall":7.75,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/parakeet-tdt_ctc-1.1b.json b/catalog/parakeet-tdt_ctc-1.1b.json index 4e457782..05353067 100644 --- a/catalog/parakeet-tdt_ctc-1.1b.json +++ b/catalog/parakeet-tdt_ctc-1.1b.json @@ -49,14 +49,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1614.1,"xrt_compute":21.89,"load_ms":263.0,"mel_ms":1.7,"encode_ms":1564.2,"decode_ms":48.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":1615.3,"xrt_wall":21.87}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":513.8,"xrt_compute":21.41,"load_ms":261.5,"mel_ms":0.7,"encode_ms":499.8,"decode_ms":13.4,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":515.0,"xrt_wall":21.36}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1870.0,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":625.0,"xrt_compute":17.6,"load_ms":347.9,"mel_ms":0.7,"encode_ms":611.6,"decode_ms":12.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":626.2,"xrt_wall":17.57}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":269.1,"xrt_compute":131.31,"load_ms":216.8,"mel_ms":1.7,"encode_ms":219.2,"decode_ms":48.2,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":271.8,"xrt_wall":129.97}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":103.0,"xrt_compute":106.82,"load_ms":238.1,"mel_ms":0.7,"encode_ms":88.8,"decode_ms":13.5,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":105.7,"xrt_wall":104.08}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":256.0,"xrt_compute":138.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":100.2,"xrt_compute":109.76,"load_ms":346.8,"mel_ms":0.7,"encode_ms":86.4,"decode_ms":13.0,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":103.0,"xrt_wall":106.83}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1566.1,"xrt_compute":22.56,"load_ms":284.7,"mel_ms":1.8,"encode_ms":1537.3,"decode_ms":27.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1570.5,"xrt_wall":22.5,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":508.8,"xrt_compute":21.62,"load_ms":265.3,"mel_ms":0.7,"encode_ms":502.2,"decode_ms":5.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":510.5,"xrt_wall":21.55,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1439.5,"xrt_compute":24.54,"load_ms":378.2,"mel_ms":1.7,"encode_ms":1410.3,"decode_ms":27.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1443.7,"xrt_wall":24.47,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":458.1,"xrt_compute":24.01,"load_ms":349.9,"mel_ms":0.7,"encode_ms":451.6,"decode_ms":5.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":459.8,"xrt_wall":23.92,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":187.7,"xrt_compute":188.19,"load_ms":243.3,"mel_ms":1.8,"encode_ms":158.8,"decode_ms":27.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":200.8,"xrt_wall":175.96,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":73.0,"xrt_compute":150.6,"load_ms":219.5,"mel_ms":0.6,"encode_ms":66.4,"decode_ms":6.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":77.0,"xrt_wall":142.87,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":184.2,"xrt_compute":191.86,"load_ms":343.0,"mel_ms":1.8,"encode_ms":156.2,"decode_ms":26.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":196.7,"xrt_wall":179.63,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":71.6,"xrt_compute":153.68,"load_ms":304.1,"mel_ms":0.7,"encode_ms":65.1,"decode_ms":5.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":75.4,"xrt_wall":145.88,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4230.9,"xrt_compute":8.35,"load_ms":1190.8,"mel_ms":41.1,"encode_ms":4001.0,"decode_ms":188.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4288.7,"xrt_wall":8.24,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1197.6,"xrt_compute":9.18,"load_ms":1408.5,"mel_ms":12.4,"encode_ms":1149.8,"decode_ms":35.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1202.6,"xrt_wall":9.15,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4107.3,"xrt_compute":8.6,"load_ms":1895.9,"mel_ms":41.7,"encode_ms":3876.3,"decode_ms":189.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4163.7,"xrt_wall":8.49,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/parakeet-tdt_ctc-110m.json b/catalog/parakeet-tdt_ctc-110m.json index 4bab5ee5..249bd651 100644 --- a/catalog/parakeet-tdt_ctc-110m.json +++ b/catalog/parakeet-tdt_ctc-110m.json @@ -49,21 +49,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":311.3,"xrt_compute":113.49,"load_ms":50.4,"mel_ms":1.7,"encode_ms":287.5,"decode_ms":22.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":312.3,"xrt_wall":113.13}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":88.5,"xrt_compute":124.33,"load_ms":48.9,"mel_ms":0.7,"encode_ms":81.9,"decode_ms":5.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":89.0,"xrt_wall":123.61}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":325.3,"xrt_compute":108.62,"load_ms":57.5,"mel_ms":1.6,"encode_ms":302.2,"decode_ms":21.4,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":326.3,"xrt_wall":108.29}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":93.7,"xrt_compute":117.37,"load_ms":69.7,"mel_ms":0.7,"encode_ms":87.3,"decode_ms":5.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":94.2,"xrt_wall":116.72}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":98.1,"xrt_compute":360.02,"load_ms":58.5,"mel_ms":1.7,"encode_ms":73.4,"decode_ms":23.1,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":99.8,"xrt_wall":353.88}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":35.0,"xrt_compute":315.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":98.6,"xrt_compute":358.29,"load_ms":61.4,"mel_ms":1.7,"encode_ms":75.0,"decode_ms":21.9,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":100.2,"xrt_wall":352.56}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":34.4,"xrt_compute":320.03,"load_ms":59.3,"mel_ms":0.7,"encode_ms":27.8,"decode_ms":5.8,"engine_sha":"a6c097e","measured_on":"2026-05-10","thermal_gated":null,"wall_ms":35.5,"xrt_wall":309.57}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1640.8,"xrt_compute":21.53,"load_ms":143.5,"mel_ms":46.6,"encode_ms":847.1,"decode_ms":747.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1643.1,"xrt_wall":21.5}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":394.4,"xrt_compute":27.89,"load_ms":143.7,"mel_ms":14.4,"encode_ms":215.8,"decode_ms":164.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":395.5,"xrt_wall":27.82}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1701.9,"xrt_compute":20.76,"load_ms":167.2,"mel_ms":47.6,"encode_ms":908.3,"decode_ms":746.0,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1704.3,"xrt_wall":20.73}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":420.5,"xrt_compute":26.16,"load_ms":168.5,"mel_ms":15.6,"encode_ms":238.6,"decode_ms":166.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":421.6,"xrt_wall":26.09}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1194.1,"xrt_compute":29.59,"load_ms":122.3,"mel_ms":47.2,"encode_ms":408.1,"decode_ms":738.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1198.0,"xrt_wall":29.49}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":321.5,"xrt_compute":34.22,"load_ms":125.7,"mel_ms":16.5,"encode_ms":143.5,"decode_ms":161.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":323.9,"xrt_wall":33.96}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1177.7,"xrt_compute":30.0,"load_ms":138.1,"mel_ms":46.1,"encode_ms":400.2,"decode_ms":731.3,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":1181.5,"xrt_wall":29.91}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":314.9,"xrt_compute":34.94,"load_ms":137.6,"mel_ms":14.4,"encode_ms":137.0,"decode_ms":163.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":null,"wall_ms":317.4,"xrt_wall":34.66} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":279.3,"xrt_compute":126.5,"load_ms":60.4,"mel_ms":1.7,"encode_ms":263.3,"decode_ms":14.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":281.4,"xrt_wall":125.56,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":78.2,"xrt_compute":140.61,"load_ms":55.4,"mel_ms":0.6,"encode_ms":74.3,"decode_ms":3.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":79.4,"xrt_wall":138.62,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":252.0,"xrt_compute":140.19,"load_ms":67.7,"mel_ms":1.8,"encode_ms":236.5,"decode_ms":13.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":254.1,"xrt_wall":139.02,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":70.1,"xrt_compute":156.94,"load_ms":64.1,"mel_ms":0.7,"encode_ms":65.8,"decode_ms":3.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":71.2,"xrt_wall":154.55,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":69.3,"xrt_compute":510.03,"load_ms":57.1,"mel_ms":1.7,"encode_ms":53.1,"decode_ms":14.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":74.1,"xrt_wall":476.69,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":27.4,"xrt_compute":401.4,"load_ms":52.6,"mel_ms":0.7,"encode_ms":23.4,"decode_ms":3.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":30.1,"xrt_wall":365.67,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":69.3,"xrt_compute":509.69,"load_ms":65.2,"mel_ms":1.7,"encode_ms":53.2,"decode_ms":14.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":74.4,"xrt_wall":474.96,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":27.1,"xrt_compute":405.32,"load_ms":61.1,"mel_ms":0.6,"encode_ms":23.2,"decode_ms":3.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":29.8,"xrt_wall":369.55,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":869.9,"xrt_compute":40.62,"load_ms":199.5,"mel_ms":38.5,"encode_ms":727.8,"decode_ms":103.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":884.7,"xrt_wall":39.94,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":231.4,"xrt_compute":47.53,"load_ms":163.9,"mel_ms":12.0,"encode_ms":197.9,"decode_ms":21.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":234.8,"xrt_wall":46.85,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":790.4,"xrt_compute":44.7,"load_ms":238.6,"mel_ms":37.4,"encode_ms":640.9,"decode_ms":112.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":805.7,"xrt_wall":43.85,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":198.7,"xrt_compute":55.36,"load_ms":178.0,"mel_ms":13.3,"encode_ms":163.6,"decode_ms":21.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":202.1,"xrt_wall":54.44,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":468.1,"xrt_compute":75.48,"load_ms":167.1,"mel_ms":39.3,"encode_ms":317.4,"decode_ms":111.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":480.3,"xrt_wall":73.56,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":144.1,"xrt_compute":76.32,"load_ms":125.8,"mel_ms":14.1,"encode_ms":108.3,"decode_ms":21.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":151.7,"xrt_wall":72.5,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":467.2,"xrt_compute":75.62,"load_ms":201.5,"mel_ms":39.1,"encode_ms":313.4,"decode_ms":114.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":480.7,"xrt_wall":73.5,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":142.3,"xrt_compute":77.29,"load_ms":140.9,"mel_ms":11.8,"encode_ms":106.8,"decode_ms":23.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":149.6,"xrt_wall":73.51,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/parakeet-unified-en-0.6b.json b/catalog/parakeet-unified-en-0.6b.json index 734e5f7e..5bbc230e 100644 --- a/catalog/parakeet-unified-en-0.6b.json +++ b/catalog/parakeet-unified-en-0.6b.json @@ -64,21 +64,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1090.0,"xrt_compute":32.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":318.0,"xrt_compute":35.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1270.0,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":375.0,"xrt_compute":29.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":209.0,"xrt_compute":169.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":71.0,"xrt_compute":155.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":210.0,"xrt_compute":168.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":69.0,"xrt_compute":158.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"12f1076","measured_on":null,"thermal_gated":null}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4660.2,"xrt_compute":7.58,"load_ms":817.6,"mel_ms":63.7,"encode_ms":2784.3,"decode_ms":1812.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":4663.9,"xrt_wall":7.58}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1179.3,"xrt_compute":9.33,"load_ms":834.4,"mel_ms":19.0,"encode_ms":767.2,"decode_ms":393.1,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":1181.1,"xrt_wall":9.31}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5214.8,"xrt_compute":6.78,"load_ms":1022.9,"mel_ms":67.0,"encode_ms":3273.0,"decode_ms":1874.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":5218.8,"xrt_wall":6.77}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1346.4,"xrt_compute":8.17,"load_ms":1147.8,"mel_ms":20.4,"encode_ms":925.3,"decode_ms":400.8,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":1348.3,"xrt_wall":8.16}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3039.8,"xrt_compute":11.62,"load_ms":324.4,"mel_ms":65.0,"encode_ms":1168.0,"decode_ms":1806.7,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":3046.4,"xrt_wall":11.6}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":844.0,"xrt_compute":13.03,"load_ms":599.8,"mel_ms":20.0,"encode_ms":435.6,"decode_ms":388.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":847.6,"xrt_wall":12.98}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3026.6,"xrt_compute":11.67,"load_ms":393.1,"mel_ms":67.0,"encode_ms":1141.2,"decode_ms":1818.5,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":3032.5,"xrt_wall":11.65}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":834.9,"xrt_compute":13.18,"load_ms":677.6,"mel_ms":22.5,"encode_ms":419.3,"decode_ms":393.2,"engine_sha":"12f1076","measured_on":"2026-05-11","thermal_gated":true,"wall_ms":838.8,"xrt_wall":13.11} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1046.2,"xrt_compute":33.77,"load_ms":171.7,"mel_ms":2.2,"encode_ms":1007.3,"decode_ms":36.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1050.0,"xrt_wall":33.65,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":306.8,"xrt_compute":35.86,"load_ms":158.8,"mel_ms":0.8,"encode_ms":297.7,"decode_ms":8.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":308.6,"xrt_wall":35.64,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":979.0,"xrt_compute":36.09,"load_ms":206.7,"mel_ms":2.2,"encode_ms":940.5,"decode_ms":36.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":982.7,"xrt_wall":35.96,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":285.3,"xrt_compute":38.55,"load_ms":203.6,"mel_ms":0.8,"encode_ms":276.4,"decode_ms":8.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":287.1,"xrt_wall":38.31,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":161.1,"xrt_compute":219.3,"load_ms":128.3,"mel_ms":2.2,"encode_ms":122.8,"decode_ms":36.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":168.0,"xrt_wall":210.31,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":60.0,"xrt_compute":183.34,"load_ms":130.0,"mel_ms":0.8,"encode_ms":50.5,"decode_ms":8.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":63.8,"xrt_wall":172.45,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":154.7,"xrt_compute":228.39,"load_ms":177.2,"mel_ms":2.2,"encode_ms":115.9,"decode_ms":36.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":161.5,"xrt_wall":218.76,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":58.6,"xrt_compute":187.72,"load_ms":182.3,"mel_ms":0.8,"encode_ms":49.7,"decode_ms":8.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":62.5,"xrt_wall":176.1,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2951.7,"xrt_compute":11.97,"load_ms":829.4,"mel_ms":55.2,"encode_ms":2647.6,"decode_ms":248.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":true,"wall_ms":2978.1,"xrt_wall":11.86,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":787.9,"xrt_compute":13.96,"load_ms":621.8,"mel_ms":17.9,"encode_ms":723.6,"decode_ms":46.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":true,"wall_ms":798.0,"xrt_wall":13.78,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2836.3,"xrt_compute":12.46,"load_ms":1111.0,"mel_ms":57.5,"encode_ms":2539.9,"decode_ms":238.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":true,"wall_ms":2864.1,"xrt_wall":12.34,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":711.8,"xrt_compute":15.45,"load_ms":807.7,"mel_ms":18.3,"encode_ms":646.9,"decode_ms":46.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":true,"wall_ms":722.6,"xrt_wall":15.22,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1372.9,"xrt_compute":25.74,"load_ms":506.0,"mel_ms":58.0,"encode_ms":1077.8,"decode_ms":237.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":true,"wall_ms":1392.7,"xrt_wall":25.37,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":455.4,"xrt_compute":24.15,"load_ms":284.1,"mel_ms":17.3,"encode_ms":391.1,"decode_ms":47.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":true,"wall_ms":467.2,"xrt_wall":23.54,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1358.3,"xrt_compute":26.01,"load_ms":729.5,"mel_ms":57.2,"encode_ms":1060.5,"decode_ms":240.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":true,"wall_ms":1378.1,"xrt_wall":25.64,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":448.1,"xrt_compute":24.55,"load_ms":371.5,"mel_ms":16.7,"encode_ms":385.2,"decode_ms":46.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":true,"wall_ms":459.0,"xrt_wall":23.96,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/qwen3-asr-0.6b.json b/catalog/qwen3-asr-0.6b.json index c54f84a1..72767f1e 100644 --- a/catalog/qwen3-asr-0.6b.json +++ b/catalog/qwen3-asr-0.6b.json @@ -82,21 +82,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":2100.0,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":588.0,"xrt_compute":19.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2260.0,"xrt_compute":16.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":660.0,"xrt_compute":17.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":527.0,"xrt_compute":67.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":142.0,"xrt_compute":77.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":597.0,"xrt_compute":59.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":155.0,"xrt_compute":71.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7336.5,"xrt_compute":4.82,"load_ms":536.1,"mel_ms":137.8,"encode_ms":2857.4,"decode_ms":4341.2,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":7338.2,"xrt_wall":4.82}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1921.0,"xrt_compute":5.73,"load_ms":589.0,"mel_ms":45.9,"encode_ms":777.3,"decode_ms":1097.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":1921.8,"xrt_wall":5.72}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8604.4,"xrt_compute":4.11,"load_ms":765.1,"mel_ms":149.2,"encode_ms":2568.0,"decode_ms":5887.2,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":8606.0,"xrt_wall":4.11}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2367.8,"xrt_compute":4.65,"load_ms":795.4,"mel_ms":51.4,"encode_ms":759.1,"decode_ms":1557.3,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":2368.7,"xrt_wall":4.64}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3989.2,"xrt_compute":8.86,"load_ms":445.4,"mel_ms":148.0,"encode_ms":1095.3,"decode_ms":2745.9,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":3991.7,"xrt_wall":8.85}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1083.2,"xrt_compute":10.16,"load_ms":444.1,"mel_ms":53.5,"encode_ms":340.5,"decode_ms":689.2,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":1084.5,"xrt_wall":10.14}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4865.0,"xrt_compute":7.26,"load_ms":636.5,"mel_ms":150.7,"encode_ms":1062.5,"decode_ms":3651.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":4867.6,"xrt_wall":7.26}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1269.8,"xrt_compute":8.66,"load_ms":667.7,"mel_ms":51.6,"encode_ms":329.4,"decode_ms":888.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":1271.3,"xrt_wall":8.65} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1968.7,"xrt_compute":17.95,"load_ms":202.3,"mel_ms":5.9,"encode_ms":757.3,"decode_ms":1205.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1972.8,"xrt_wall":17.91,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":547.3,"xrt_compute":20.1,"load_ms":184.7,"mel_ms":1.9,"encode_ms":237.3,"decode_ms":308.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":549.0,"xrt_wall":20.03,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2062.9,"xrt_compute":17.13,"load_ms":239.6,"mel_ms":5.9,"encode_ms":753.7,"decode_ms":1303.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2066.9,"xrt_wall":17.09,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":544.6,"xrt_compute":20.2,"load_ms":254.9,"mel_ms":1.9,"encode_ms":234.5,"decode_ms":308.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":546.3,"xrt_wall":20.13,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":510.6,"xrt_compute":69.19,"load_ms":210.8,"mel_ms":7.6,"encode_ms":59.7,"decode_ms":443.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":527.0,"xrt_wall":67.04,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":134.5,"xrt_compute":81.78,"load_ms":197.1,"mel_ms":3.1,"encode_ms":22.8,"decode_ms":108.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":139.9,"xrt_wall":78.62,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":556.4,"xrt_compute":63.5,"load_ms":280.9,"mel_ms":10.5,"encode_ms":59.7,"decode_ms":486.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":574.2,"xrt_wall":61.54,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":146.6,"xrt_compute":75.02,"load_ms":251.9,"mel_ms":3.1,"encode_ms":22.3,"decode_ms":121.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":151.8,"xrt_wall":72.46,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6749.8,"xrt_compute":5.23,"load_ms":850.6,"mel_ms":37.3,"encode_ms":2102.7,"decode_ms":4609.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6834.7,"xrt_wall":5.17,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1671.2,"xrt_compute":6.58,"load_ms":601.1,"mel_ms":18.6,"encode_ms":546.7,"decode_ms":1105.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1695.6,"xrt_wall":6.49,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":7549.2,"xrt_compute":4.68,"load_ms":1275.7,"mel_ms":38.1,"encode_ms":2106.5,"decode_ms":5404.7,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":7632.9,"xrt_wall":4.63,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1860.4,"xrt_compute":5.91,"load_ms":859.8,"mel_ms":18.4,"encode_ms":563.2,"decode_ms":1278.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1885.1,"xrt_wall":5.84,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3547.6,"xrt_compute":9.96,"load_ms":1140.6,"mel_ms":44.4,"encode_ms":782.9,"decode_ms":2720.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3567.1,"xrt_wall":9.91,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":907.6,"xrt_compute":12.12,"load_ms":1041.3,"mel_ms":20.5,"encode_ms":228.8,"decode_ms":658.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":913.7,"xrt_wall":12.04,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4071.9,"xrt_compute":8.68,"load_ms":1794.5,"mel_ms":47.9,"encode_ms":785.4,"decode_ms":3238.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4090.7,"xrt_wall":8.64,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1025.4,"xrt_compute":10.73,"load_ms":1652.6,"mel_ms":20.6,"encode_ms":230.0,"decode_ms":774.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1033.5,"xrt_wall":10.64,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/qwen3-asr-1.7b.json b/catalog/qwen3-asr-1.7b.json index 61ed2dbc..0ccd9c19 100644 --- a/catalog/qwen3-asr-1.7b.json +++ b/catalog/qwen3-asr-1.7b.json @@ -82,21 +82,21 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":4040.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1100.0,"xrt_compute":10.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4460.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1400.0,"xrt_compute":8.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":803.0,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":213.0,"xrt_compute":52.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":978.0,"xrt_compute":36.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":256.0,"xrt_compute":43.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":12926.4,"xrt_compute":2.73,"load_ms":1111.3,"mel_ms":154.5,"encode_ms":2918.4,"decode_ms":9853.5,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":12928.3,"xrt_wall":2.73}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3574.4,"xrt_compute":3.08,"load_ms":1631.8,"mel_ms":49.6,"encode_ms":831.1,"decode_ms":2693.7,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":3575.3,"xrt_wall":3.08}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":18525.0,"xrt_compute":1.91,"load_ms":2136.2,"mel_ms":157.9,"encode_ms":3319.3,"decode_ms":15047.8,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":18526.9,"xrt_wall":1.91}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5186.5,"xrt_compute":2.12,"load_ms":2171.6,"mel_ms":53.1,"encode_ms":988.4,"decode_ms":4144.9,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":5187.5,"xrt_wall":2.12}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8363.9,"xrt_compute":4.22,"load_ms":1090.5,"mel_ms":135.7,"encode_ms":1298.3,"decode_ms":6929.9,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":8367.1,"xrt_wall":4.22}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2286.2,"xrt_compute":4.81,"load_ms":1291.8,"mel_ms":54.2,"encode_ms":420.4,"decode_ms":1811.6,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":2288.1,"xrt_wall":4.81}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9867.3,"xrt_compute":3.58,"load_ms":1771.3,"mel_ms":134.0,"encode_ms":1293.8,"decode_ms":8439.5,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":9870.5,"xrt_wall":3.58}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2661.4,"xrt_compute":4.13,"load_ms":1750.0,"mel_ms":53.7,"encode_ms":401.1,"decode_ms":2206.5,"engine_sha":"3d16f74","measured_on":"2026-04-20","thermal_gated":null,"wall_ms":2663.2,"xrt_wall":4.13} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":3796.9,"xrt_compute":9.31,"load_ms":389.8,"mel_ms":6.2,"encode_ms":963.4,"decode_ms":2827.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3801.5,"xrt_wall":9.29,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1227.6,"xrt_compute":8.96,"load_ms":354.0,"mel_ms":2.0,"encode_ms":385.9,"decode_ms":839.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1229.5,"xrt_wall":8.95,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4003.6,"xrt_compute":8.83,"load_ms":589.9,"mel_ms":7.0,"encode_ms":929.2,"decode_ms":3067.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4007.8,"xrt_wall":8.82,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1063.0,"xrt_compute":10.35,"load_ms":523.1,"mel_ms":1.9,"encode_ms":292.4,"decode_ms":768.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1064.8,"xrt_wall":10.33,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":804.0,"xrt_compute":43.95,"load_ms":396.9,"mel_ms":13.8,"encode_ms":75.3,"decode_ms":714.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":824.7,"xrt_wall":42.84,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":208.9,"xrt_compute":52.65,"load_ms":362.7,"mel_ms":3.1,"encode_ms":27.7,"decode_ms":178.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":214.3,"xrt_wall":51.34,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":959.4,"xrt_compute":36.83,"load_ms":619.1,"mel_ms":8.2,"encode_ms":73.9,"decode_ms":877.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":977.1,"xrt_wall":36.16,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":242.6,"xrt_compute":45.33,"load_ms":566.4,"mel_ms":3.1,"encode_ms":27.4,"decode_ms":212.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":248.3,"xrt_wall":44.31,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":13071.6,"xrt_compute":2.7,"load_ms":1994.5,"mel_ms":37.2,"encode_ms":2714.5,"decode_ms":10319.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13152.5,"xrt_wall":2.69,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3508.3,"xrt_compute":3.14,"load_ms":1350.8,"mel_ms":15.7,"encode_ms":761.3,"decode_ms":2731.3,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3537.6,"xrt_wall":3.11,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15628.0,"xrt_compute":2.26,"load_ms":3294.1,"mel_ms":38.2,"encode_ms":2680.9,"decode_ms":12908.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":15709.9,"xrt_wall":2.25,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4102.3,"xrt_compute":2.68,"load_ms":3317.5,"mel_ms":15.2,"encode_ms":741.0,"decode_ms":3346.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4132.1,"xrt_wall":2.66,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7891.9,"xrt_compute":4.48,"load_ms":3039.6,"mel_ms":43.0,"encode_ms":1170.7,"decode_ms":6678.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":7977.0,"xrt_wall":4.43,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2019.2,"xrt_compute":5.45,"load_ms":3090.8,"mel_ms":25.3,"encode_ms":334.5,"decode_ms":1659.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2043.7,"xrt_wall":5.38,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9490.0,"xrt_compute":3.72,"load_ms":3366.4,"mel_ms":43.1,"encode_ms":1154.9,"decode_ms":8292.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":9588.9,"xrt_wall":3.68,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2473.2,"xrt_compute":4.45,"load_ms":3370.3,"mel_ms":25.0,"encode_ms":336.8,"decode_ms":2111.3,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2501.4,"xrt_wall":4.4,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/sensevoice-small.json b/catalog/sensevoice-small.json index 4b5fbe03..6fac8436 100644 --- a/catalog/sensevoice-small.json +++ b/catalog/sensevoice-small.json @@ -55,21 +55,21 @@ "timestamps": null }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":727.0,"xrt_compute":49.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":213.0,"xrt_compute":52.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":700.0,"xrt_compute":50.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":208.0,"xrt_compute":53.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":137.0,"xrt_compute":258.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":44.0,"xrt_compute":250.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":111.0,"xrt_compute":319.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":42.0,"xrt_compute":260.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2005.8,"xrt_compute":17.61,"load_ms":133.2,"mel_ms":76.9,"encode_ms":1928.8,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2030.0,"xrt_wall":17.41}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":581.7,"xrt_compute":18.91,"load_ms":142.9,"mel_ms":23.9,"encode_ms":557.8,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":589.6,"xrt_wall":18.66}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2281.3,"xrt_compute":15.49,"load_ms":190.9,"mel_ms":77.2,"encode_ms":2204.1,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":2305.4,"xrt_wall":15.33}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":678.0,"xrt_compute":16.22,"load_ms":305.8,"mel_ms":27.0,"encode_ms":651.0,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":687.0,"xrt_wall":16.01}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1095.7,"xrt_compute":32.25,"load_ms":157.7,"mel_ms":76.1,"encode_ms":1019.5,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1122.3,"xrt_wall":31.48}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":316.6,"xrt_compute":34.74,"load_ms":213.2,"mel_ms":26.3,"encode_ms":290.3,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":331.9,"xrt_wall":33.15}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1080.5,"xrt_compute":32.7,"load_ms":177.9,"mel_ms":76.1,"encode_ms":1004.4,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":1107.2,"xrt_wall":31.91}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":312.7,"xrt_compute":35.18,"load_ms":179.2,"mel_ms":29.1,"encode_ms":283.6,"decode_ms":0.0,"engine_sha":"8635bd1","measured_on":"2026-05-07","thermal_gated":null,"wall_ms":329.1,"xrt_wall":33.43} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":756.7,"xrt_compute":46.69,"load_ms":70.0,"mel_ms":38.6,"encode_ms":702.5,"decode_ms":15.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":759.6,"xrt_wall":46.51,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":220.4,"xrt_compute":49.92,"load_ms":65.1,"mel_ms":12.1,"encode_ms":203.1,"decode_ms":5.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":221.8,"xrt_wall":49.59,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":737.3,"xrt_compute":47.92,"load_ms":97.8,"mel_ms":38.9,"encode_ms":682.4,"decode_ms":15.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":740.3,"xrt_wall":47.73,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":215.1,"xrt_compute":51.15,"load_ms":86.3,"mel_ms":12.0,"encode_ms":198.0,"decode_ms":5.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":216.5,"xrt_wall":50.82,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":123.2,"xrt_compute":286.71,"load_ms":70.9,"mel_ms":37.7,"encode_ms":70.4,"decode_ms":15.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":130.7,"xrt_wall":270.36,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":46.1,"xrt_compute":238.72,"load_ms":68.0,"mel_ms":11.6,"encode_ms":29.8,"decode_ms":4.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":49.3,"xrt_wall":223.07,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":122.4,"xrt_compute":288.69,"load_ms":96.2,"mel_ms":37.2,"encode_ms":70.1,"decode_ms":15.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":129.8,"xrt_wall":272.14,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":44.8,"xrt_compute":245.28,"load_ms":89.3,"mel_ms":11.5,"encode_ms":28.5,"decode_ms":4.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":48.0,"xrt_wall":229.32,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2154.6,"xrt_compute":16.4,"load_ms":200.8,"mel_ms":75.4,"encode_ms":2065.8,"decode_ms":13.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2173.9,"xrt_wall":16.25,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":626.6,"xrt_compute":17.55,"load_ms":133.7,"mel_ms":23.3,"encode_ms":599.8,"decode_ms":3.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":632.8,"xrt_wall":17.38,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1883.6,"xrt_compute":18.76,"load_ms":313.5,"mel_ms":74.9,"encode_ms":1796.3,"decode_ms":12.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1903.3,"xrt_wall":18.56,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":531.1,"xrt_compute":20.71,"load_ms":196.5,"mel_ms":23.4,"encode_ms":504.2,"decode_ms":3.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":537.3,"xrt_wall":20.47,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1295.7,"xrt_compute":27.27,"load_ms":151.2,"mel_ms":74.1,"encode_ms":1211.1,"decode_ms":10.5,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1641.1,"xrt_wall":21.53,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":398.2,"xrt_compute":27.63,"load_ms":92.5,"mel_ms":23.0,"encode_ms":371.8,"decode_ms":3.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":515.2,"xrt_wall":21.35,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1283.5,"xrt_compute":27.53,"load_ms":246.5,"mel_ms":74.3,"encode_ms":1198.3,"decode_ms":10.8,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1629.9,"xrt_wall":21.68,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":395.0,"xrt_compute":27.85,"load_ms":121.5,"mel_ms":22.9,"encode_ms":368.7,"decode_ms":3.4,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":512.3,"xrt_wall":21.47,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/voxtral-mini-3b-2507.json b/catalog/voxtral-mini-3b-2507.json index 8577ea8f..80547a78 100644 --- a/catalog/voxtral-mini-3b-2507.json +++ b/catalog/voxtral-mini-3b-2507.json @@ -56,14 +56,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":15310.0,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6760.0,"xrt_compute":1.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":16600.0,"xrt_compute":2.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":6060.0,"xrt_compute":1.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1900.0,"xrt_compute":18.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":656.8,"xrt_compute":16.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":2400.0,"xrt_compute":14.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":727.3,"xrt_compute":15.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":14183.7,"xrt_compute":2.49,"load_ms":773.9,"mel_ms":10.7,"encode_ms":6035.5,"decode_ms":8137.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":14184.9,"xrt_wall":2.49,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6118.8,"xrt_compute":1.8,"load_ms":703.0,"mel_ms":5.4,"encode_ms":3018.1,"decode_ms":3095.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6119.6,"xrt_wall":1.8,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":14941.4,"xrt_compute":2.36,"load_ms":1256.8,"mel_ms":11.0,"encode_ms":5637.6,"decode_ms":9292.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":14942.6,"xrt_wall":2.36,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":5834.8,"xrt_compute":1.89,"load_ms":1150.0,"mel_ms":5.3,"encode_ms":2830.1,"decode_ms":2999.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5835.5,"xrt_wall":1.89,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2091.0,"xrt_compute":16.9,"load_ms":825.7,"mel_ms":12.6,"encode_ms":584.7,"decode_ms":1493.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2091.6,"xrt_wall":16.89,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":769.4,"xrt_compute":14.3,"load_ms":720.7,"mel_ms":6.3,"encode_ms":290.4,"decode_ms":472.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":769.9,"xrt_wall":14.29,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2509.5,"xrt_compute":14.08,"load_ms":1323.5,"mel_ms":12.1,"encode_ms":629.7,"decode_ms":1867.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2510.1,"xrt_wall":14.08,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":862.3,"xrt_compute":12.76,"load_ms":1187.7,"mel_ms":9.2,"encode_ms":295.3,"decode_ms":557.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":862.9,"xrt_wall":12.75,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":49489.9,"xrt_compute":0.71,"load_ms":4317.4,"mel_ms":57.5,"encode_ms":19202.3,"decode_ms":30230.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":49509.5,"xrt_wall":0.71,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":20878.8,"xrt_compute":0.53,"load_ms":4367.0,"mel_ms":33.8,"encode_ms":9595.2,"decode_ms":11249.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":20889.0,"xrt_wall":0.53,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":55993.4,"xrt_compute":0.63,"load_ms":7735.1,"mel_ms":58.1,"encode_ms":19719.7,"decode_ms":36215.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":56012.8,"xrt_wall":0.63,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/voxtral-mini-4b-realtime-2602.json b/catalog/voxtral-mini-4b-realtime-2602.json index 43545d1c..d5cde426 100644 --- a/catalog/voxtral-mini-4b-realtime-2602.json +++ b/catalog/voxtral-mini-4b-realtime-2602.json @@ -61,14 +61,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":13120.0,"xrt_compute":2.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4690.0,"xrt_compute":2.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":13650.0,"xrt_compute":2.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4430.0,"xrt_compute":2.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":3910.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1140.0,"xrt_compute":9.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":4340.0,"xrt_compute":8.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1220.0,"xrt_compute":9.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":13204.9,"xrt_compute":2.68,"load_ms":747.6,"mel_ms":7.7,"encode_ms":5642.3,"decode_ms":7554.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13202.3,"xrt_wall":2.68,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5040.9,"xrt_compute":2.18,"load_ms":715.4,"mel_ms":3.2,"encode_ms":2349.7,"decode_ms":2688.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5041.4,"xrt_wall":2.18,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":13796.7,"xrt_compute":2.56,"load_ms":1280.9,"mel_ms":8.1,"encode_ms":5326.8,"decode_ms":8461.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13798.0,"xrt_wall":2.56,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4878.1,"xrt_compute":2.25,"load_ms":1149.8,"mel_ms":3.3,"encode_ms":2100.8,"decode_ms":2774.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4878.8,"xrt_wall":2.25,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4435.8,"xrt_compute":7.97,"load_ms":781.9,"mel_ms":10.6,"encode_ms":654.6,"decode_ms":3770.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4436.9,"xrt_wall":7.96,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1494.8,"xrt_compute":7.36,"load_ms":697.4,"mel_ms":4.5,"encode_ms":255.7,"decode_ms":1234.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1495.5,"xrt_wall":7.36,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5025.4,"xrt_compute":7.03,"load_ms":1268.7,"mel_ms":13.1,"encode_ms":765.6,"decode_ms":4246.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5026.8,"xrt_wall":7.03,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1763.2,"xrt_compute":6.24,"load_ms":1116.5,"mel_ms":4.5,"encode_ms":293.4,"decode_ms":1465.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1763.7,"xrt_wall":6.24,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":46119.5,"xrt_compute":0.77,"load_ms":2777.3,"mel_ms":51.8,"encode_ms":19170.5,"decode_ms":26897.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":46139.2,"xrt_wall":0.77,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":16390.6,"xrt_compute":0.67,"load_ms":4170.6,"mel_ms":20.7,"encode_ms":7306.5,"decode_ms":9063.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":16399.7,"xrt_wall":0.67,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":57916.3,"xrt_compute":0.61,"load_ms":7061.6,"mel_ms":43.6,"encode_ms":19739.9,"decode_ms":38132.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":57934.8,"xrt_wall":0.61,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/voxtral-small-24b-2507.json b/catalog/voxtral-small-24b-2507.json index 6ff9746b..56fc0b4d 100644 --- a/catalog/voxtral-small-24b-2507.json +++ b/catalog/voxtral-small-24b-2507.json @@ -61,9 +61,9 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":8950.0,"xrt_compute":3.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2620.0,"xrt_compute":4.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":11200.0,"xrt_compute":3.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3360.0,"xrt_compute":3.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"} + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":12934.7,"xrt_compute":2.73,"load_ms":4433.2,"mel_ms":11.3,"encode_ms":1045.2,"decode_ms":11878.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":12935.5,"xrt_wall":2.73,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3964.6,"xrt_compute":2.77,"load_ms":3598.9,"mel_ms":5.0,"encode_ms":401.1,"decode_ms":3558.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3965.1,"xrt_wall":2.77,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":14680.8,"xrt_compute":2.41,"load_ms":7038.4,"mel_ms":12.4,"encode_ms":1068.0,"decode_ms":13600.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":14681.8,"xrt_wall":2.41,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4445.6,"xrt_compute":2.47,"load_ms":7405.4,"mel_ms":5.0,"encode_ms":491.5,"decode_ms":3949.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4446.1,"xrt_wall":2.47,"publication_profile":"asr-publication-v2"} ] } diff --git a/catalog/whisper-base.en.json b/catalog/whisper-base.en.json index d353826f..40b47256 100644 --- a/catalog/whisper-base.en.json +++ b/catalog/whisper-base.en.json @@ -49,14 +49,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":733.6,"xrt_compute":48.16,"load_ms":50.0,"mel_ms":5.0,"encode_ms":262.4,"decode_ms":466.2,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":733.6,"xrt_wall":48.16}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":325.6,"xrt_compute":33.78,"load_ms":53.9,"mel_ms":4.0,"encode_ms":265.2,"decode_ms":56.4,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":325.6,"xrt_wall":33.78}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":780.9,"xrt_compute":45.25,"load_ms":53.1,"mel_ms":5.4,"encode_ms":288.2,"decode_ms":487.3,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":780.9,"xrt_wall":45.24}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":352.4,"xrt_compute":31.21,"load_ms":62.6,"mel_ms":4.3,"encode_ms":290.5,"decode_ms":57.6,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":352.5,"xrt_wall":31.21}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":161.4,"xrt_compute":218.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":49.5,"xrt_compute":222.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":172.4,"xrt_compute":204.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":50.3,"xrt_compute":218.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":463.9,"xrt_compute":76.16,"load_ms":56.8,"mel_ms":4.8,"encode_ms":145.6,"decode_ms":313.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":464.2,"xrt_wall":76.12,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":195.3,"xrt_compute":56.31,"load_ms":53.7,"mel_ms":4.1,"encode_ms":146.3,"decode_ms":44.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":195.6,"xrt_wall":56.24,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":423.6,"xrt_compute":83.4,"load_ms":62.8,"mel_ms":4.8,"encode_ms":130.1,"decode_ms":288.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":423.9,"xrt_wall":83.36,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":173.6,"xrt_compute":63.35,"load_ms":58.5,"mel_ms":4.2,"encode_ms":129.9,"decode_ms":39.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":173.9,"xrt_wall":63.26,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":181.2,"xrt_compute":194.94,"load_ms":64.8,"mel_ms":4.8,"encode_ms":15.3,"decode_ms":161.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":181.4,"xrt_wall":194.81,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":51.8,"xrt_compute":212.42,"load_ms":52.3,"mel_ms":4.1,"encode_ms":15.3,"decode_ms":32.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":51.9,"xrt_wall":212.01,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":185.2,"xrt_compute":190.73,"load_ms":69.6,"mel_ms":4.8,"encode_ms":14.5,"decode_ms":165.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":185.4,"xrt_wall":190.59,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":51.8,"xrt_compute":212.45,"load_ms":62.5,"mel_ms":4.2,"encode_ms":14.9,"decode_ms":32.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":51.9,"xrt_wall":212.04,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1497.4,"xrt_compute":23.6,"load_ms":110.7,"mel_ms":35.6,"encode_ms":378.2,"decode_ms":1083.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1497.6,"xrt_wall":23.59,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":574.8,"xrt_compute":19.14,"load_ms":134.4,"mel_ms":30.0,"encode_ms":375.9,"decode_ms":169.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":575.0,"xrt_wall":19.13,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1568.9,"xrt_compute":22.52,"load_ms":128.8,"mel_ms":32.3,"encode_ms":385.8,"decode_ms":1150.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1569.0,"xrt_wall":22.52,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/whisper-base.json b/catalog/whisper-base.json index 4ab400c4..b54e65de 100644 --- a/catalog/whisper-base.json +++ b/catalog/whisper-base.json @@ -26,7 +26,7 @@ "long_form_strategy": "chunked-unbounded", "capabilities": { "transcribe": {"supported":true,"verified":false}, - "translate": {"supported":true,"verified":false,"targets":null,"pairs":null}, + "translate": {"supported":true,"verified":false,"targets":["en"],"pairs":null}, "lang_detect": {"supported":true,"verified":false}, "timestamps": {"supported":true,"verified":false,"granularities":["segment"]}, "streaming": {"supported":false}, @@ -139,14 +139,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":750.3,"xrt_compute":47.09,"load_ms":44.6,"mel_ms":6.0,"encode_ms":261.3,"decode_ms":482.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":750.3,"xrt_wall":47.09}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":347.6,"xrt_compute":31.65,"load_ms":43.7,"mel_ms":4.3,"encode_ms":261.3,"decode_ms":81.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":347.6,"xrt_wall":31.64}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":806.1,"xrt_compute":43.83,"load_ms":62.4,"mel_ms":5.8,"encode_ms":288.4,"decode_ms":511.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":806.1,"xrt_wall":43.83}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":373.9,"xrt_compute":29.42,"load_ms":68.1,"mel_ms":5.1,"encode_ms":286.5,"decode_ms":82.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":374.0,"xrt_wall":29.41}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":168.3,"xrt_compute":209.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":53.6,"xrt_compute":205.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":170.0,"xrt_compute":207.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":52.1,"xrt_compute":211.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":482.5,"xrt_compute":73.23,"load_ms":56.5,"mel_ms":4.8,"encode_ms":146.9,"decode_ms":330.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":482.7,"xrt_wall":73.19,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":210.8,"xrt_compute":52.18,"load_ms":53.4,"mel_ms":4.1,"encode_ms":144.5,"decode_ms":62.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":211.0,"xrt_wall":52.12,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":436.6,"xrt_compute":80.93,"load_ms":62.9,"mel_ms":4.9,"encode_ms":129.2,"decode_ms":302.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":436.9,"xrt_wall":80.88,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":185.3,"xrt_compute":59.35,"load_ms":58.1,"mel_ms":4.1,"encode_ms":130.0,"decode_ms":51.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":185.6,"xrt_wall":59.27,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":187.2,"xrt_compute":188.77,"load_ms":56.2,"mel_ms":4.9,"encode_ms":15.2,"decode_ms":167.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":187.3,"xrt_wall":188.62,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":54.6,"xrt_compute":201.42,"load_ms":52.7,"mel_ms":4.1,"encode_ms":15.3,"decode_ms":35.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":54.7,"xrt_wall":201.05,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":191.6,"xrt_compute":184.36,"load_ms":62.4,"mel_ms":4.9,"encode_ms":15.0,"decode_ms":171.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":191.8,"xrt_wall":184.21,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":54.5,"xrt_compute":201.79,"load_ms":59.3,"mel_ms":4.1,"encode_ms":15.1,"decode_ms":35.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":54.6,"xrt_wall":201.33,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1561.3,"xrt_compute":22.63,"load_ms":109.6,"mel_ms":38.4,"encode_ms":378.5,"decode_ms":1144.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1561.5,"xrt_wall":22.63,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":635.3,"xrt_compute":17.32,"load_ms":132.0,"mel_ms":33.9,"encode_ms":376.1,"decode_ms":225.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":635.5,"xrt_wall":17.31,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1633.2,"xrt_compute":21.63,"load_ms":125.8,"mel_ms":39.6,"encode_ms":386.6,"decode_ms":1207.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1633.3,"xrt_wall":21.63,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/whisper-large-v2.json b/catalog/whisper-large-v2.json index 691d12be..76d4dc81 100644 --- a/catalog/whisper-large-v2.json +++ b/catalog/whisper-large-v2.json @@ -139,14 +139,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15430.7,"xrt_compute":2.29,"load_ms":235.7,"mel_ms":4.6,"encode_ms":5625.7,"decode_ms":9800.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15431.0,"xrt_wall":2.29}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7456.5,"xrt_compute":1.48,"load_ms":229.7,"mel_ms":4.4,"encode_ms":5621.4,"decode_ms":1830.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7456.6,"xrt_wall":1.48}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":19721.8,"xrt_compute":1.79,"load_ms":355.1,"mel_ms":4.9,"encode_ms":7297.6,"decode_ms":12419.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19722.1,"xrt_wall":1.79}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9663.0,"xrt_compute":1.14,"load_ms":349.2,"mel_ms":4.4,"encode_ms":7294.0,"decode_ms":2364.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9663.2,"xrt_wall":1.14}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1400.8,"xrt_compute":25.22,"load_ms":235.5,"mel_ms":5.3,"encode_ms":239.2,"decode_ms":1156.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1400.8,"xrt_wall":25.22}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":499.6,"xrt_compute":22.02,"load_ms":223.7,"mel_ms":6.2,"encode_ms":239.6,"decode_ms":253.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":499.6,"xrt_wall":22.02}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1370.0,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":493.1,"xrt_compute":22.31,"load_ms":364.6,"mel_ms":5.1,"encode_ms":233.0,"decode_ms":255.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":493.2,"xrt_wall":22.3}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8642.4,"xrt_compute":4.09,"load_ms":267.8,"mel_ms":4.9,"encode_ms":3036.0,"decode_ms":5601.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8642.9,"xrt_wall":4.09,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4152.3,"xrt_compute":2.65,"load_ms":242.5,"mel_ms":4.3,"encode_ms":3084.4,"decode_ms":1063.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4152.8,"xrt_wall":2.65,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8094.9,"xrt_compute":4.36,"load_ms":412.9,"mel_ms":4.9,"encode_ms":2756.9,"decode_ms":5333.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8095.4,"xrt_wall":4.36,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3729.5,"xrt_compute":2.95,"load_ms":360.2,"mel_ms":4.1,"encode_ms":2735.0,"decode_ms":990.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3730.0,"xrt_wall":2.95,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1543.4,"xrt_compute":22.89,"load_ms":279.2,"mel_ms":5.9,"encode_ms":306.5,"decode_ms":1231.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1543.6,"xrt_wall":22.89,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":590.0,"xrt_compute":18.65,"load_ms":260.6,"mel_ms":4.2,"encode_ms":307.8,"decode_ms":278.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":590.2,"xrt_wall":18.64,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1600.4,"xrt_compute":22.08,"load_ms":430.0,"mel_ms":6.6,"encode_ms":307.6,"decode_ms":1286.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1600.6,"xrt_wall":22.07,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":597.7,"xrt_compute":18.4,"load_ms":389.0,"mel_ms":4.2,"encode_ms":304.8,"decode_ms":288.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":597.9,"xrt_wall":18.4,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":29473.7,"xrt_compute":1.2,"load_ms":705.8,"mel_ms":33.8,"encode_ms":9565.7,"decode_ms":19874.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":29481.6,"xrt_wall":1.2,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":13692.2,"xrt_compute":0.8,"load_ms":1135.4,"mel_ms":29.6,"encode_ms":9619.4,"decode_ms":4043.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13699.8,"xrt_wall":0.8,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":31185.9,"xrt_compute":1.13,"load_ms":1154.5,"mel_ms":37.7,"encode_ms":9825.2,"decode_ms":21323.0,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":31193.9,"xrt_wall":1.13,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/whisper-large-v3-turbo.json b/catalog/whisper-large-v3-turbo.json index 42d2418d..04991fe5 100644 --- a/catalog/whisper-large-v3-turbo.json +++ b/catalog/whisper-large-v3-turbo.json @@ -140,22 +140,22 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":11870.6,"xrt_compute":2.98,"load_ms":147.4,"mel_ms":6.4,"encode_ms":5615.0,"decode_ms":6249.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":11870.9,"xrt_wall":2.98}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5887.0,"xrt_compute":1.87,"load_ms":146.3,"mel_ms":5.7,"encode_ms":5630.3,"decode_ms":251.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":5887.1,"xrt_wall":1.87}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15342.6,"xrt_compute":2.3,"load_ms":206.3,"mel_ms":6.2,"encode_ms":7301.2,"decode_ms":8035.2,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15342.8,"xrt_wall":2.3}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":7596.9,"xrt_compute":1.45,"load_ms":212.2,"mel_ms":5.6,"encode_ms":7279.3,"decode_ms":312.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7597.1,"xrt_wall":1.45}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":666.0,"xrt_compute":53.05,"load_ms":145.6,"mel_ms":7.1,"encode_ms":238.3,"decode_ms":420.6,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":666.0,"xrt_wall":53.05}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":288.9,"xrt_compute":38.07,"load_ms":135.9,"mel_ms":5.8,"encode_ms":237.6,"decode_ms":45.5,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":289.0,"xrt_wall":38.07}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":649.5,"xrt_compute":54.4,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":"e0fa0f6","measured_on":null,"thermal_gated":null}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":288.3,"xrt_compute":38.16,"load_ms":221.6,"mel_ms":6.0,"encode_ms":233.9,"decode_ms":48.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":288.3,"xrt_wall":38.16}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":32216.9,"xrt_compute":1.1,"load_ms":423.1,"mel_ms":54.5,"encode_ms":15063.5,"decode_ms":17098.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":32217.3,"xrt_wall":1.1}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":15744.4,"xrt_compute":0.7,"load_ms":419.9,"mel_ms":46.4,"encode_ms":14898.3,"decode_ms":799.7,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15744.7,"xrt_wall":0.7}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":40179.2,"xrt_compute":0.88,"load_ms":661.3,"mel_ms":62.1,"encode_ms":18767.6,"decode_ms":21349.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":40179.5,"xrt_wall":0.88}, - {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":19850.7,"xrt_compute":0.55,"load_ms":666.1,"mel_ms":49.1,"encode_ms":18807.3,"decode_ms":994.3,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19851.0,"xrt_wall":0.55}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":10262.0,"xrt_compute":3.44,"load_ms":361.5,"mel_ms":42.6,"encode_ms":4503.0,"decode_ms":5716.4,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":10262.4,"xrt_wall":3.44}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4915.7,"xrt_compute":2.24,"load_ms":348.9,"mel_ms":42.0,"encode_ms":4507.6,"decode_ms":366.2,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4915.9,"xrt_wall":2.24}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":10160.7,"xrt_compute":3.48,"load_ms":555.3,"mel_ms":44.3,"encode_ms":4395.9,"decode_ms":5720.5,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":10161.1,"xrt_wall":3.48}, - {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4773.2,"xrt_compute":2.31,"load_ms":547.3,"mel_ms":39.4,"encode_ms":4365.9,"decode_ms":367.9,"engine_sha":"5fccd5d","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4773.4,"xrt_wall":2.3} + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":6302.9,"xrt_compute":5.61,"load_ms":160.7,"mel_ms":6.1,"encode_ms":2969.6,"decode_ms":3327.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6304.0,"xrt_wall":5.6,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3111.7,"xrt_compute":3.54,"load_ms":148.9,"mel_ms":5.2,"encode_ms":2961.9,"decode_ms":144.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3112.4,"xrt_wall":3.53,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5803.3,"xrt_compute":6.09,"load_ms":210.3,"mel_ms":6.0,"encode_ms":2682.8,"decode_ms":3114.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5803.9,"xrt_wall":6.09,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":2854.9,"xrt_compute":3.85,"load_ms":210.9,"mel_ms":5.2,"encode_ms":2713.4,"decode_ms":136.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2855.4,"xrt_wall":3.85,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":666.7,"xrt_compute":53.0,"load_ms":178.6,"mel_ms":7.1,"encode_ms":240.0,"decode_ms":419.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":666.9,"xrt_wall":52.98,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":291.1,"xrt_compute":37.79,"load_ms":152.3,"mel_ms":5.8,"encode_ms":239.3,"decode_ms":46.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":291.3,"xrt_wall":37.77,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":691.2,"xrt_compute":51.12,"load_ms":233.9,"mel_ms":7.0,"encode_ms":244.9,"decode_ms":439.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":691.4,"xrt_wall":51.1,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":303.8,"xrt_compute":36.21,"load_ms":216.3,"mel_ms":6.4,"encode_ms":248.0,"decode_ms":49.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":304.0,"xrt_wall":36.19,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":19717.3,"xrt_compute":1.79,"load_ms":683.3,"mel_ms":40.9,"encode_ms":8996.5,"decode_ms":10680.0,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":19724.4,"xrt_wall":1.79,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":9578.0,"xrt_compute":1.15,"load_ms":426.4,"mel_ms":36.7,"encode_ms":8968.1,"decode_ms":573.2,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":9585.0,"xrt_wall":1.15,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":20355.1,"xrt_compute":1.74,"load_ms":1121.0,"mel_ms":44.7,"encode_ms":9226.6,"decode_ms":11083.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":20362.7,"xrt_wall":1.74,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9849.8,"xrt_compute":1.12,"load_ms":662.0,"mel_ms":36.0,"encode_ms":9201.2,"decode_ms":612.6,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":9857.2,"xrt_wall":1.12,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":9669.2,"xrt_compute":3.65,"load_ms":575.3,"mel_ms":40.5,"encode_ms":4162.7,"decode_ms":5465.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":9670.1,"xrt_wall":3.65,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4447.5,"xrt_compute":2.47,"load_ms":290.4,"mel_ms":34.3,"encode_ms":3999.3,"decode_ms":413.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4448.1,"xrt_wall":2.47,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9587.4,"xrt_compute":3.69,"load_ms":906.1,"mel_ms":41.4,"encode_ms":4065.9,"decode_ms":5480.1,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":9588.1,"xrt_wall":3.69,"publication_profile":"asr-publication-v2"}, + {"machine":"ryzen-4750u","backend":"vulkan","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4401.2,"xrt_compute":2.5,"load_ms":473.9,"mel_ms":35.6,"encode_ms":3945.7,"decode_ms":419.9,"engine_sha":"cd0ea568","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4401.8,"xrt_wall":2.5,"publication_profile":"asr-publication-v2"} ], "language_aliases": { "tl": "fil", diff --git a/catalog/whisper-large-v3.json b/catalog/whisper-large-v3.json index 784efb71..6738cf3e 100644 --- a/catalog/whisper-large-v3.json +++ b/catalog/whisper-large-v3.json @@ -138,14 +138,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15452.3,"xrt_compute":2.29,"load_ms":223.3,"mel_ms":6.5,"encode_ms":5614.1,"decode_ms":9831.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15452.5,"xrt_wall":2.29}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7484.3,"xrt_compute":1.47,"load_ms":233.2,"mel_ms":5.4,"encode_ms":5610.1,"decode_ms":1868.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7484.4,"xrt_wall":1.47}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":19861.9,"xrt_compute":1.78,"load_ms":342.4,"mel_ms":5.7,"encode_ms":7273.3,"decode_ms":12582.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19862.2,"xrt_wall":1.78}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9679.5,"xrt_compute":1.14,"load_ms":341.5,"mel_ms":5.6,"encode_ms":7265.5,"decode_ms":2408.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9679.6,"xrt_wall":1.14}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1350.0,"xrt_compute":26.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":511.9,"xrt_compute":21.49,"load_ms":228.4,"mel_ms":5.9,"encode_ms":239.5,"decode_ms":266.5,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":511.9,"xrt_wall":21.49}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1380.0,"xrt_compute":25.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":516.9,"xrt_compute":21.28,"load_ms":364.2,"mel_ms":5.9,"encode_ms":233.1,"decode_ms":277.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":516.9,"xrt_wall":21.28}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8715.1,"xrt_compute":4.05,"load_ms":268.5,"mel_ms":6.2,"encode_ms":3035.9,"decode_ms":5673.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8715.7,"xrt_wall":4.05,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4139.1,"xrt_compute":2.66,"load_ms":245.6,"mel_ms":5.2,"encode_ms":3032.3,"decode_ms":1101.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4139.6,"xrt_wall":2.66,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8073.9,"xrt_compute":4.38,"load_ms":410.7,"mel_ms":6.2,"encode_ms":2751.6,"decode_ms":5316.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8074.5,"xrt_wall":4.38,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3729.2,"xrt_compute":2.95,"load_ms":360.5,"mel_ms":5.2,"encode_ms":2723.8,"decode_ms":1000.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3729.9,"xrt_wall":2.95,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1576.6,"xrt_compute":22.41,"load_ms":289.0,"mel_ms":7.2,"encode_ms":303.5,"decode_ms":1266.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1576.9,"xrt_wall":22.41,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":616.5,"xrt_compute":17.84,"load_ms":248.8,"mel_ms":5.2,"encode_ms":308.9,"decode_ms":302.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":616.7,"xrt_wall":17.84,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1789.7,"xrt_compute":19.74,"load_ms":433.9,"mel_ms":7.5,"encode_ms":351.0,"decode_ms":1431.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1790.0,"xrt_wall":19.74,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":744.8,"xrt_compute":14.77,"load_ms":554.6,"mel_ms":34.3,"encode_ms":299.7,"decode_ms":410.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":745.2,"xrt_wall":14.76,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":28104.0,"xrt_compute":1.26,"load_ms":700.7,"mel_ms":33.9,"encode_ms":8933.8,"decode_ms":19136.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":28111.6,"xrt_wall":1.26,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":12952.0,"xrt_compute":0.85,"load_ms":1135.3,"mel_ms":28.0,"encode_ms":8943.7,"decode_ms":3980.3,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":12959.5,"xrt_wall":0.85,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":31241.4,"xrt_compute":1.13,"load_ms":1132.0,"mel_ms":36.0,"encode_ms":9778.0,"decode_ms":21427.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":31249.6,"xrt_wall":1.13,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/whisper-large.json b/catalog/whisper-large.json index ba2dfee0..12ad0b74 100644 --- a/catalog/whisper-large.json +++ b/catalog/whisper-large.json @@ -139,14 +139,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":15493.6,"xrt_compute":2.28,"load_ms":223.9,"mel_ms":5.5,"encode_ms":5603.2,"decode_ms":9884.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":15493.8,"xrt_wall":2.28}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":7434.2,"xrt_compute":1.48,"load_ms":245.7,"mel_ms":4.9,"encode_ms":5610.0,"decode_ms":1819.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7434.4,"xrt_wall":1.48}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":19876.9,"xrt_compute":1.78,"load_ms":359.9,"mel_ms":4.9,"encode_ms":7284.5,"decode_ms":12587.4,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":19877.1,"xrt_wall":1.78}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":9632.9,"xrt_compute":1.14,"load_ms":367.4,"mel_ms":4.1,"encode_ms":7296.6,"decode_ms":2332.2,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9632.6,"xrt_wall":1.14}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":1260.0,"xrt_compute":28.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":465.1,"xrt_compute":23.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":1330.0,"xrt_compute":26.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":476.5,"xrt_compute":23.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":8896.8,"xrt_compute":3.97,"load_ms":280.2,"mel_ms":4.9,"encode_ms":3079.9,"decode_ms":5812.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8897.4,"xrt_wall":3.97,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":4065.1,"xrt_compute":2.71,"load_ms":246.7,"mel_ms":4.3,"encode_ms":3003.4,"decode_ms":1057.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4065.6,"xrt_wall":2.71,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":8050.8,"xrt_compute":4.39,"load_ms":416.3,"mel_ms":4.8,"encode_ms":2730.9,"decode_ms":5315.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":8051.4,"xrt_wall":4.39,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":3700.4,"xrt_compute":2.97,"load_ms":373.0,"mel_ms":4.2,"encode_ms":2739.6,"decode_ms":956.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3700.9,"xrt_wall":2.97,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1418.6,"xrt_compute":24.91,"load_ms":294.2,"mel_ms":4.8,"encode_ms":256.4,"decode_ms":1157.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1418.8,"xrt_wall":24.9,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":562.3,"xrt_compute":19.56,"load_ms":254.3,"mel_ms":4.1,"encode_ms":292.4,"decode_ms":265.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":562.5,"xrt_wall":19.55,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1633.4,"xrt_compute":21.63,"load_ms":438.3,"mel_ms":5.6,"encode_ms":300.6,"decode_ms":1327.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1633.7,"xrt_wall":21.63,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":596.0,"xrt_compute":18.46,"load_ms":386.5,"mel_ms":4.3,"encode_ms":304.8,"decode_ms":286.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":596.1,"xrt_wall":18.45,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":29554.5,"xrt_compute":1.2,"load_ms":696.8,"mel_ms":36.9,"encode_ms":9537.7,"decode_ms":19979.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":29562.2,"xrt_wall":1.2,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":13568.6,"xrt_compute":0.81,"load_ms":1119.3,"mel_ms":26.4,"encode_ms":9549.7,"decode_ms":3992.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":13576.5,"xrt_wall":0.81,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":31331.9,"xrt_compute":1.13,"load_ms":1143.1,"mel_ms":31.3,"encode_ms":9839.8,"decode_ms":21460.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":31340.0,"xrt_wall":1.13,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/whisper-medium.en.json b/catalog/whisper-medium.en.json index e744de0c..f4665d03 100644 --- a/catalog/whisper-medium.en.json +++ b/catalog/whisper-medium.en.json @@ -49,14 +49,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7231.8,"xrt_compute":4.89,"load_ms":126.8,"mel_ms":5.0,"encode_ms":2866.7,"decode_ms":4360.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7231.7,"xrt_wall":4.89}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3373.9,"xrt_compute":3.26,"load_ms":136.9,"mel_ms":5.6,"encode_ms":2866.1,"decode_ms":502.2,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3374.0,"xrt_wall":3.26}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9073.0,"xrt_compute":3.89,"load_ms":190.8,"mel_ms":4.8,"encode_ms":3632.3,"decode_ms":5435.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9073.1,"xrt_wall":3.89}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4293.5,"xrt_compute":2.56,"load_ms":198.3,"mel_ms":4.4,"encode_ms":3656.0,"decode_ms":633.1,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4293.6,"xrt_wall":2.56}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":725.9,"xrt_compute":48.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":243.3,"xrt_compute":45.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":762.9,"xrt_compute":46.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":249.7,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4152.5,"xrt_compute":8.51,"load_ms":160.4,"mel_ms":5.2,"encode_ms":1561.3,"decode_ms":2586.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4152.9,"xrt_wall":8.51,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1886.6,"xrt_compute":5.83,"load_ms":145.2,"mel_ms":4.5,"encode_ms":1554.3,"decode_ms":327.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1887.0,"xrt_wall":5.83,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3885.7,"xrt_compute":9.09,"load_ms":228.8,"mel_ms":5.2,"encode_ms":1406.1,"decode_ms":2474.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":3886.2,"xrt_wall":9.09,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1748.5,"xrt_compute":6.29,"load_ms":207.1,"mel_ms":4.4,"encode_ms":1430.8,"decode_ms":313.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1749.0,"xrt_wall":6.29,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1266.5,"xrt_compute":27.9,"load_ms":288.7,"mel_ms":22.7,"encode_ms":157.2,"decode_ms":1086.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1266.8,"xrt_wall":27.89,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":270.2,"xrt_compute":40.72,"load_ms":173.3,"mel_ms":4.3,"encode_ms":141.2,"decode_ms":124.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":270.3,"xrt_wall":40.7,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":912.8,"xrt_compute":38.71,"load_ms":244.2,"mel_ms":4.8,"encode_ms":150.6,"decode_ms":757.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":913.0,"xrt_wall":38.7,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":291.6,"xrt_compute":37.73,"load_ms":216.8,"mel_ms":4.1,"encode_ms":150.1,"decode_ms":137.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":291.7,"xrt_wall":37.71,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":14006.0,"xrt_compute":2.52,"load_ms":379.8,"mel_ms":29.5,"encode_ms":4652.3,"decode_ms":9324.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":14011.9,"xrt_wall":2.52,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":5936.1,"xrt_compute":1.85,"load_ms":602.6,"mel_ms":24.4,"encode_ms":4586.6,"decode_ms":1325.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5942.0,"xrt_wall":1.85,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":14993.8,"xrt_compute":2.36,"load_ms":597.4,"mel_ms":35.5,"encode_ms":4815.1,"decode_ms":10143.1,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":14999.9,"xrt_wall":2.36,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/whisper-medium.json b/catalog/whisper-medium.json index 06b81f0d..51a57fdc 100644 --- a/catalog/whisper-medium.json +++ b/catalog/whisper-medium.json @@ -139,14 +139,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":7929.8,"xrt_compute":4.46,"load_ms":140.8,"mel_ms":4.7,"encode_ms":2999.1,"decode_ms":4925.9,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":7929.8,"xrt_wall":4.46}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":3897.1,"xrt_compute":2.82,"load_ms":138.5,"mel_ms":4.0,"encode_ms":3004.2,"decode_ms":888.9,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3897.2,"xrt_wall":2.82}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":9621.8,"xrt_compute":3.67,"load_ms":200.8,"mel_ms":4.6,"encode_ms":3664.9,"decode_ms":5952.3,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":9621.9,"xrt_wall":3.67}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":4749.7,"xrt_compute":2.32,"load_ms":189.6,"mel_ms":4.0,"encode_ms":3667.9,"decode_ms":1077.8,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":4749.8,"xrt_wall":2.32}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":759.2,"xrt_compute":46.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":270.9,"xrt_compute":40.6,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":802.5,"xrt_compute":44.0,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":280.0,"xrt_compute":39.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4404.3,"xrt_compute":8.02,"load_ms":162.6,"mel_ms":5.2,"encode_ms":1571.2,"decode_ms":2828.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4404.9,"xrt_wall":8.02,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2083.2,"xrt_compute":5.28,"load_ms":144.5,"mel_ms":4.4,"encode_ms":1545.7,"decode_ms":533.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2083.7,"xrt_wall":5.28,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":4081.9,"xrt_compute":8.66,"load_ms":232.2,"mel_ms":5.1,"encode_ms":1420.8,"decode_ms":2656.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4082.4,"xrt_wall":8.65,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1883.5,"xrt_compute":5.84,"load_ms":204.1,"mel_ms":4.2,"encode_ms":1402.4,"decode_ms":476.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1884.0,"xrt_wall":5.84,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":891.0,"xrt_compute":39.65,"load_ms":163.2,"mel_ms":4.9,"encode_ms":148.6,"decode_ms":737.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":891.2,"xrt_wall":39.64,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":325.9,"xrt_compute":33.76,"load_ms":146.2,"mel_ms":4.2,"encode_ms":155.0,"decode_ms":166.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":326.0,"xrt_wall":33.74,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1020.7,"xrt_compute":34.62,"load_ms":235.9,"mel_ms":6.0,"encode_ms":161.5,"decode_ms":853.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1020.9,"xrt_wall":34.61,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":343.4,"xrt_compute":32.03,"load_ms":403.4,"mel_ms":7.4,"encode_ms":146.2,"decode_ms":189.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":343.7,"xrt_wall":32.01,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":14669.3,"xrt_compute":2.41,"load_ms":383.2,"mel_ms":29.9,"encode_ms":4652.3,"decode_ms":9987.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":14675.4,"xrt_wall":2.41,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":6648.9,"xrt_compute":1.65,"load_ms":599.9,"mel_ms":27.1,"encode_ms":4571.1,"decode_ms":2050.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":6654.7,"xrt_wall":1.65,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":15600.5,"xrt_compute":2.26,"load_ms":603.3,"mel_ms":37.1,"encode_ms":4817.8,"decode_ms":10745.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":15606.6,"xrt_wall":2.26,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/whisper-small.en.json b/catalog/whisper-small.en.json index e76f1e25..79094e41 100644 --- a/catalog/whisper-small.en.json +++ b/catalog/whisper-small.en.json @@ -49,14 +49,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2520.9,"xrt_compute":14.02,"load_ms":77.8,"mel_ms":5.8,"encode_ms":933.8,"decode_ms":1581.3,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2521.0,"xrt_wall":14.02}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1127.6,"xrt_compute":9.76,"load_ms":82.4,"mel_ms":4.8,"encode_ms":937.0,"decode_ms":185.8,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1127.7,"xrt_wall":9.76}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":2889.1,"xrt_compute":12.23,"load_ms":95.9,"mel_ms":5.5,"encode_ms":1100.6,"decode_ms":1783.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2889.2,"xrt_wall":12.23}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1310.6,"xrt_compute":8.39,"load_ms":83.6,"mel_ms":5.1,"encode_ms":1094.6,"decode_ms":210.9,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1310.6,"xrt_wall":8.39}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":329.3,"xrt_compute":107.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":102.6,"xrt_compute":107.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":333.0,"xrt_compute":106.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":107.1,"xrt_compute":102.7,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1598.8,"xrt_compute":22.1,"load_ms":81.5,"mel_ms":5.5,"encode_ms":554.4,"decode_ms":1038.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1599.2,"xrt_wall":22.09,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":953.9,"xrt_compute":11.53,"load_ms":86.3,"mel_ms":5.1,"encode_ms":573.1,"decode_ms":375.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":954.3,"xrt_wall":11.53,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1391.4,"xrt_compute":25.39,"load_ms":113.7,"mel_ms":5.2,"encode_ms":480.9,"decode_ms":905.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1391.7,"xrt_wall":25.39,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":597.0,"xrt_compute":18.42,"load_ms":96.9,"mel_ms":4.3,"encode_ms":476.5,"decode_ms":116.2,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":597.4,"xrt_wall":18.41,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":387.5,"xrt_compute":91.18,"load_ms":90.4,"mel_ms":5.2,"encode_ms":47.5,"decode_ms":334.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":387.6,"xrt_wall":91.15,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":114.0,"xrt_compute":96.47,"load_ms":76.8,"mel_ms":4.1,"encode_ms":47.8,"decode_ms":62.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":114.1,"xrt_wall":96.38,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":384.3,"xrt_compute":91.93,"load_ms":108.2,"mel_ms":4.8,"encode_ms":46.2,"decode_ms":333.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":384.5,"xrt_wall":91.9,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":119.2,"xrt_compute":92.31,"load_ms":102.1,"mel_ms":4.1,"encode_ms":46.4,"decode_ms":68.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":119.3,"xrt_wall":92.22,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":4964.0,"xrt_compute":7.12,"load_ms":186.7,"mel_ms":38.1,"encode_ms":1477.1,"decode_ms":3448.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":4964.1,"xrt_wall":7.12,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1900.8,"xrt_compute":5.79,"load_ms":264.0,"mel_ms":37.6,"encode_ms":1389.6,"decode_ms":473.5,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1901.0,"xrt_wall":5.79,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5085.7,"xrt_compute":6.95,"load_ms":248.1,"mel_ms":36.8,"encode_ms":1475.7,"decode_ms":3573.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5085.9,"xrt_wall":6.95,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/whisper-small.json b/catalog/whisper-small.json index 518b55e6..bde2f36a 100644 --- a/catalog/whisper-small.json +++ b/catalog/whisper-small.json @@ -139,14 +139,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":2737.6,"xrt_compute":12.91,"load_ms":77.5,"mel_ms":5.9,"encode_ms":989.8,"decode_ms":1742.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":2737.7,"xrt_wall":12.91}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":1303.4,"xrt_compute":8.44,"load_ms":73.7,"mel_ms":5.2,"encode_ms":995.6,"decode_ms":302.6,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1303.4,"xrt_wall":8.44}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":3006.7,"xrt_compute":11.75,"load_ms":99.6,"mel_ms":5.2,"encode_ms":1091.9,"decode_ms":1909.7,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":3006.8,"xrt_wall":11.75}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":1426.9,"xrt_compute":7.71,"load_ms":98.0,"mel_ms":5.2,"encode_ms":1090.7,"decode_ms":331.0,"engine_sha":"4d2270e","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":1426.9,"xrt_wall":7.71}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":340.0,"xrt_compute":103.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":113.5,"xrt_compute":96.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":349.3,"xrt_compute":101.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":113.1,"xrt_compute":97.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":1605.5,"xrt_compute":22.01,"load_ms":83.5,"mel_ms":5.6,"encode_ms":543.6,"decode_ms":1056.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1605.9,"xrt_wall":22.0,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":718.6,"xrt_compute":15.31,"load_ms":81.0,"mel_ms":4.8,"encode_ms":525.8,"decode_ms":188.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":718.9,"xrt_wall":15.3,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":1455.0,"xrt_compute":24.28,"load_ms":104.4,"mel_ms":5.2,"encode_ms":479.2,"decode_ms":970.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":1455.3,"xrt_wall":24.28,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":647.9,"xrt_compute":16.98,"load_ms":98.9,"mel_ms":4.3,"encode_ms":479.2,"decode_ms":164.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":648.2,"xrt_wall":16.97,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":394.0,"xrt_compute":89.68,"load_ms":93.4,"mel_ms":4.8,"encode_ms":47.8,"decode_ms":341.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":394.2,"xrt_wall":89.63,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":122.8,"xrt_compute":89.56,"load_ms":89.5,"mel_ms":4.1,"encode_ms":46.8,"decode_ms":71.9,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":123.0,"xrt_wall":89.44,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":400.8,"xrt_compute":88.15,"load_ms":113.5,"mel_ms":4.8,"encode_ms":45.8,"decode_ms":350.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":401.0,"xrt_wall":88.11,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":123.1,"xrt_compute":89.39,"load_ms":97.3,"mel_ms":4.2,"encode_ms":45.5,"decode_ms":73.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":123.2,"xrt_wall":89.29,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":5163.7,"xrt_compute":6.84,"load_ms":181.3,"mel_ms":39.0,"encode_ms":1459.5,"decode_ms":3665.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5163.8,"xrt_wall":6.84,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":2106.5,"xrt_compute":5.22,"load_ms":255.6,"mel_ms":30.7,"encode_ms":1388.6,"decode_ms":687.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":2106.7,"xrt_wall":5.22,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":5311.9,"xrt_compute":6.65,"load_ms":242.1,"mel_ms":36.6,"encode_ms":1468.7,"decode_ms":3806.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":5312.2,"xrt_wall":6.65,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/whisper-tiny.en.json b/catalog/whisper-tiny.en.json index 14567f53..1754775d 100644 --- a/catalog/whisper-tiny.en.json +++ b/catalog/whisper-tiny.en.json @@ -49,14 +49,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":381.7,"xrt_compute":92.55,"load_ms":41.8,"mel_ms":5.0,"encode_ms":125.2,"decode_ms":251.6,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":381.8,"xrt_wall":92.54}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":161.4,"xrt_compute":68.15,"load_ms":50.9,"mel_ms":5.0,"encode_ms":124.6,"decode_ms":31.7,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":161.4,"xrt_wall":68.14}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":389.4,"xrt_compute":90.74,"load_ms":52.4,"mel_ms":5.3,"encode_ms":129.5,"decode_ms":254.6,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":389.4,"xrt_wall":90.73}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":165.0,"xrt_compute":66.67,"load_ms":55.3,"mel_ms":4.2,"encode_ms":128.7,"decode_ms":32.0,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":165.0,"xrt_wall":66.66}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":125.8,"xrt_compute":280.9,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":34.0,"xrt_compute":323.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":127.0,"xrt_compute":278.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":39.1,"xrt_compute":281.2,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":249.8,"xrt_compute":141.46,"load_ms":52.2,"mel_ms":4.8,"encode_ms":66.1,"decode_ms":178.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":250.0,"xrt_wall":141.35,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":97.5,"xrt_compute":112.83,"load_ms":49.7,"mel_ms":4.1,"encode_ms":67.8,"decode_ms":25.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":97.7,"xrt_wall":112.62,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":246.8,"xrt_compute":143.18,"load_ms":51.2,"mel_ms":4.8,"encode_ms":65.5,"decode_ms":176.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":247.0,"xrt_wall":143.06,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":93.2,"xrt_compute":118.02,"load_ms":49.2,"mel_ms":4.1,"encode_ms":63.4,"decode_ms":25.7,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":93.4,"xrt_wall":117.78,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":136.1,"xrt_compute":259.57,"load_ms":55.7,"mel_ms":4.8,"encode_ms":8.7,"decode_ms":122.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":136.2,"xrt_wall":259.33,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":37.8,"xrt_compute":291.22,"load_ms":50.5,"mel_ms":4.1,"encode_ms":8.6,"decode_ms":25.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":37.8,"xrt_wall":290.63,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":142.8,"xrt_compute":247.49,"load_ms":55.7,"mel_ms":4.8,"encode_ms":8.6,"decode_ms":129.3,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":142.9,"xrt_wall":247.25,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":38.1,"xrt_compute":288.65,"load_ms":51.1,"mel_ms":4.1,"encode_ms":8.5,"decode_ms":25.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":38.2,"xrt_wall":287.92,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":790.4,"xrt_compute":44.7,"load_ms":95.0,"mel_ms":28.7,"encode_ms":169.2,"decode_ms":592.4,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":790.5,"xrt_wall":44.7,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":282.9,"xrt_compute":38.88,"load_ms":112.8,"mel_ms":29.8,"encode_ms":161.3,"decode_ms":91.8,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":283.1,"xrt_wall":38.85,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":799.3,"xrt_compute":44.2,"load_ms":98.6,"mel_ms":39.4,"encode_ms":163.0,"decode_ms":596.9,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":799.4,"xrt_wall":44.2,"publication_profile":"asr-publication-v2"}, diff --git a/catalog/whisper-tiny.json b/catalog/whisper-tiny.json index d5c5d8fd..3bbc7cc2 100644 --- a/catalog/whisper-tiny.json +++ b/catalog/whisper-tiny.json @@ -139,14 +139,14 @@ "timestamps": "none" }, "speed_benchmarks": [ - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":390.3,"xrt_compute":90.52,"load_ms":52.2,"mel_ms":5.6,"encode_ms":125.3,"decode_ms":259.5,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":390.4,"xrt_wall":90.51}, - {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":169.7,"xrt_compute":64.81,"load_ms":51.2,"mel_ms":3.9,"encode_ms":124.5,"decode_ms":41.4,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":169.8,"xrt_wall":64.8}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":396.2,"xrt_compute":89.17,"load_ms":55.7,"mel_ms":5.1,"encode_ms":128.9,"decode_ms":262.2,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":396.3,"xrt_wall":89.16}, - {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":174.7,"xrt_compute":62.97,"load_ms":52.6,"mel_ms":4.0,"encode_ms":128.4,"decode_ms":42.2,"engine_sha":"e6a8a27","measured_on":"2026-04-28","thermal_gated":null,"wall_ms":174.7,"xrt_wall":62.96}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.3,"total_ms":117.3,"xrt_compute":301.3,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":37.9,"xrt_compute":290.1,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.3,"total_ms":117.1,"xrt_compute":301.8,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, - {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":36.4,"xrt_compute":302.5,"load_ms":null,"mel_ms":null,"encode_ms":null,"decode_ms":null,"engine_sha":null,"measured_on":null,"thermal_gated":null,"measurement_provenance":"legacy-published"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":253.0,"xrt_compute":139.65,"load_ms":54.1,"mel_ms":4.8,"encode_ms":66.4,"decode_ms":181.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":253.2,"xrt_wall":139.54,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":99.7,"xrt_compute":110.34,"load_ms":53.2,"mel_ms":4.1,"encode_ms":65.5,"decode_ms":30.1,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":99.9,"xrt_wall":110.12,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":250.5,"xrt_compute":141.07,"load_ms":54.8,"mel_ms":4.8,"encode_ms":64.3,"decode_ms":181.4,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":250.7,"xrt_wall":140.94,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"cpu","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":99.9,"xrt_compute":110.09,"load_ms":50.6,"mel_ms":4.1,"encode_ms":65.2,"decode_ms":30.6,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":100.1,"xrt_wall":109.89,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":141.4,"xrt_compute":249.8,"load_ms":54.3,"mel_ms":4.9,"encode_ms":8.6,"decode_ms":128.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":141.6,"xrt_wall":249.58,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":39.5,"xrt_compute":278.34,"load_ms":50.9,"mel_ms":4.1,"encode_ms":8.6,"decode_ms":26.8,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":39.6,"xrt_wall":277.53,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":139.4,"xrt_compute":253.55,"load_ms":56.4,"mel_ms":4.9,"encode_ms":8.4,"decode_ms":126.0,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":139.5,"xrt_wall":253.28,"publication_profile":"asr-publication-v2"}, + {"machine":"m4-max","backend":"metal","quant":"Q8_0","sample":"jfk","sample_duration_s":11.0,"total_ms":39.0,"xrt_compute":282.04,"load_ms":51.0,"mel_ms":4.1,"encode_ms":8.4,"decode_ms":26.5,"engine_sha":"77b0c93","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":39.1,"xrt_wall":281.4,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"dots","sample_duration_s":35.332,"total_ms":820.1,"xrt_compute":43.08,"load_ms":97.1,"mel_ms":32.7,"encode_ms":162.8,"decode_ms":624.6,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":820.3,"xrt_wall":43.07,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q4_K_M","sample":"jfk","sample_duration_s":11.0,"total_ms":310.8,"xrt_compute":35.39,"load_ms":113.1,"mel_ms":34.2,"encode_ms":161.5,"decode_ms":115.2,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":311.1,"xrt_wall":35.36,"publication_profile":"asr-publication-v2"}, {"machine":"ryzen-4750u","backend":"cpu","quant":"Q8_0","sample":"dots","sample_duration_s":35.332,"total_ms":811.3,"xrt_compute":43.55,"load_ms":96.5,"mel_ms":41.3,"encode_ms":161.4,"decode_ms":608.7,"engine_sha":"218aeae3","measured_on":"2026-09-14","thermal_gated":null,"wall_ms":811.5,"xrt_wall":43.54,"publication_profile":"asr-publication-v2"}, diff --git a/docs/models/canary-180m-flash.md b/docs/models/canary-180m-flash.md index 4410786e..37fbc243 100644 --- a/docs/models/canary-180m-flash.md +++ b/docs/models/canary-180m-flash.md @@ -107,31 +107,31 @@ CLI flags specific to canary: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | -| Metal | jfk (11.0s) | 71.1 ms (154.72×) | 66.6 ms (165.21×) | -| Metal | dots (35.3s) | 276.6 ms (127.73×) | 253.3 ms (139.48×) | -| CPU | jfk (11.0s) | 136.5 ms (80.57×) | 123.4 ms (89.14×) | -| CPU | dots (35.3s) | 520.5 ms (67.88×) | 481.0 ms (73.46×) | +| Metal | jfk (11.0s) | 64.0 ms (171.97×) | 59.2 ms (185.69×) | +| Metal | dots (35.3s) | 261.8 ms (134.95×) | 240.4 ms (146.98×) | +| CPU | jfk (11.0s) | 127.8 ms (86.10×) | 129.5 ms (84.94×) | +| CPU | dots (35.3s) | 492.7 ms (71.72×) | 490.1 ms (72.09×) | -Apple M4 Max: transcribe.cpp `0f42b37` on 2026-05-08; transcribe.cpp `19b3b87` on 2026-05-08. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | -| Vulkan | jfk (11.0s) | 312.6 ms (35.19×) | 292.8 ms (37.57×) | -| Vulkan | dots (35.3s) | 1.22 s (29.02×) | 1.09 s (32.32×) | -| CPU | jfk (11.0s) | 452.7 ms (24.30×) | 369.0 ms (29.81×) | -| CPU | dots (35.3s) | 1.91 s (18.48×) | 1.62 s (21.75×) | +| Vulkan | jfk (11.0s) | 307.1 ms (35.82×) | 283.6 ms (38.78×) | +| Vulkan | dots (35.3s) | 1.16 s (30.35×) | 1.07 s (33.14×) | +| CPU | jfk (11.0s) | 437.8 ms (25.13×) | 420.9 ms (26.13×) | +| CPU | dots (35.3s) | 1.93 s (18.33×) | 1.79 s (19.69×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `0f42b37` on 2026-05-08; transcribe.cpp `4d44530` on 2026-05-08. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/canary-1b-flash.md b/docs/models/canary-1b-flash.md index 6a1f8f31..fad1af1e 100644 --- a/docs/models/canary-1b-flash.md +++ b/docs/models/canary-1b-flash.md @@ -101,31 +101,31 @@ CLI flags specific to canary: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | -| Metal | jfk (11.0s) | 104.2 ms (105.60×) | 108.9 ms (100.97×) | -| Metal | dots (35.3s) | 365.6 ms (96.65×) | 346.2 ms (102.06×) | -| CPU | jfk (11.0s) | 517.2 ms (21.27×) | 429.0 ms (25.64×) | -| CPU | dots (35.3s) | 1.79 s (19.72×) | 1.51 s (23.43×) | +| Metal | jfk (11.0s) | 93.5 ms (117.69×) | 91.8 ms (119.77×) | +| Metal | dots (35.3s) | 333.9 ms (105.82×) | 315.5 ms (112.00×) | +| CPU | jfk (11.0s) | 416.7 ms (26.40×) | 429.5 ms (25.61×) | +| CPU | dots (35.3s) | 1.44 s (24.47×) | 1.49 s (23.78×) | -Apple M4 Max: transcribe.cpp `0f42b37` on 2026-05-08; transcribe.cpp `19b3b87` on 2026-05-08. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | -| Vulkan | jfk (11.0s) | 758.1 ms (14.51×) | 698.9 ms (15.74×) | -| Vulkan | dots (35.3s) | 2.45 s (14.39×) | 2.30 s (15.33×) | -| CPU | jfk (11.0s) | 1.49 s (7.40×) | 1.13 s (9.73×) | -| CPU | dots (35.3s) | 5.48 s (6.45×) | 4.50 s (7.85×) | +| Vulkan | jfk (11.0s) | 691.8 ms (15.90×) | 693.5 ms (15.86×) | +| Vulkan | dots (35.3s) | 2.35 s (15.06×) | 2.24 s (15.78×) | +| CPU | jfk (11.0s) | 1.09 s (10.07×) | 1.10 s (9.96×) | +| CPU | dots (35.3s) | 4.63 s (7.63×) | 4.54 s (7.79×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `0f42b37` on 2026-05-08; transcribe.cpp `4d44530` on 2026-05-08. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/canary-1b-v2.md b/docs/models/canary-1b-v2.md index db674a23..e3bdcacd 100644 --- a/docs/models/canary-1b-v2.md +++ b/docs/models/canary-1b-v2.md @@ -144,31 +144,31 @@ CLI flags specific to canary: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 121.9 ms (90.22×) | 119.1 ms (92.34×) | -| Metal | dots (35.3s) | 427.9 ms (82.57×) | 403.1 ms (87.65×) | -| CPU | jfk (11.0s) | 553.9 ms (19.86×) | 452.5 ms (24.31×) | -| CPU | dots (35.3s) | 1.96 s (18.01×) | 1.66 s (21.35×) | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | -----------------: | -----------------: | +| Metal | jfk (11.0s) | 105.1 ms (104.66×) | 104.1 ms (105.66×) | +| Metal | dots (35.3s) | 384.7 ms (91.84×) | 362.1 ms (97.57×) | +| CPU | jfk (11.0s) | 415.1 ms (26.50×) | 442.4 ms (24.86×) | +| CPU | dots (35.3s) | 1.49 s (23.66×) | 1.56 s (22.71×) | -Apple M4 Max: transcribe.cpp `0f42b37` on 2026-05-08; transcribe.cpp `abb6506` on 2026-05-08. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | -| Vulkan | jfk (11.0s) | 824.7 ms (13.34×) | 743.7 ms (14.79×) | -| Vulkan | dots (35.3s) | 2.69 s (13.13×) | 2.45 s (14.40×) | -| CPU | jfk (11.0s) | 1.55 s (7.09×) | 1.16 s (9.49×) | -| CPU | dots (35.3s) | 5.74 s (6.16×) | 4.70 s (7.52×) | +| Vulkan | jfk (11.0s) | 758.9 ms (14.49×) | 732.3 ms (15.02×) | +| Vulkan | dots (35.3s) | 2.57 s (13.77×) | 2.41 s (14.64×) | +| CPU | jfk (11.0s) | 1.15 s (9.54×) | 1.15 s (9.54×) | +| CPU | dots (35.3s) | 4.97 s (7.11×) | 4.77 s (7.40×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `23c2ee6` on 2026-05-08; transcribe.cpp `4d44530` on 2026-05-08. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/canary-1b.md b/docs/models/canary-1b.md index ba9d81c7..9186d1cf 100644 --- a/docs/models/canary-1b.md +++ b/docs/models/canary-1b.md @@ -109,31 +109,31 @@ overhead. ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 212.3 ms (51.81×) | 195.9 ms (56.14×) | -| Metal | dots (35.3s) | 1.03 s (34.42×) | 931.4 ms (37.94×) | -| CPU | jfk (11.0s) | 510.2 ms (21.56×) | 425.3 ms (25.87×) | -| CPU | dots (35.3s) | 2.05 s (17.27×) | 1.71 s (20.61×) | +| Metal | jfk (11.0s) | 207.3 ms (53.07×) | 187.5 ms (58.67×) | +| Metal | dots (35.3s) | 1.01 s (34.96×) | 930.9 ms (37.95×) | +| CPU | jfk (11.0s) | 425.7 ms (25.84×) | 430.2 ms (25.57×) | +| CPU | dots (35.3s) | 1.79 s (19.74×) | 1.73 s (20.41×) | -Apple M4 Max: transcribe.cpp `23c2ee6` on 2026-05-08; transcribe.cpp `19b3b87` on 2026-05-08. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | --------------: | ----------------: | -| Vulkan | jfk (11.0s) | 1.07 s (10.28×) | 918.6 ms (11.97×) | -| Vulkan | dots (35.3s) | 4.62 s (7.65×) | 3.87 s (9.13×) | -| CPU | jfk (11.0s) | 1.70 s (6.46×) | 1.23 s (8.92×) | -| CPU | dots (35.3s) | 7.59 s (4.66×) | 5.96 s (5.92×) | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Vulkan | jfk (11.0s) | 962.2 ms (11.43×) | 879.4 ms (12.51×) | +| Vulkan | dots (35.3s) | 4.36 s (8.10×) | 3.81 s (9.28×) | +| CPU | jfk (11.0s) | 1.40 s (7.88×) | 1.26 s (8.73×) | +| CPU | dots (35.3s) | 6.96 s (5.08×) | 6.26 s (5.65×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `23c2ee6` on 2026-05-08; transcribe.cpp `4d44530` on 2026-05-08. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/canary-qwen-2.5b.md b/docs/models/canary-qwen-2.5b.md index 76023c4b..cd5e70c1 100644 --- a/docs/models/canary-qwen-2.5b.md +++ b/docs/models/canary-qwen-2.5b.md @@ -100,31 +100,31 @@ CLI flags: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 240.7 ms (45.71×) | 225.7 ms (48.73×) | -| Metal | dots (35.3s) | 1.02 s (34.78×) | 903.3 ms (39.11×) | -| CPU | jfk (11.0s) | 1.42 s (7.76×) | 1.06 s (10.40×) | -| CPU | dots (35.3s) | 5.14 s (6.88×) | 4.00 s (8.84×) | +| Metal | jfk (11.0s) | 228.6 ms (48.11×) | 204.7 ms (53.73×) | +| Metal | dots (35.3s) | 961.4 ms (36.75×) | 830.8 ms (42.53×) | +| CPU | jfk (11.0s) | 1.02 s (10.83×) | 1.04 s (10.55×) | +| CPU | dots (35.3s) | 3.83 s (9.22×) | 3.81 s (9.27×) | -Apple M4 Max: transcribe.cpp `1b19945` on 2026-05-17. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 2.39 s (4.60×) | 2.10 s (5.24×) | -| Vulkan | dots (35.3s) | 9.70 s (3.64×) | 8.46 s (4.18×) | -| CPU | jfk (11.0s) | 4.72 s (2.33×) | 3.42 s (3.22×) | -| CPU | dots (35.3s) | 18.41 s (1.92×) | 13.49 s (2.62×) | +| Vulkan | jfk (11.0s) | 2.47 s (4.45×) | 2.15 s (5.12×) | +| Vulkan | dots (35.3s) | 10.09 s (3.50×) | 8.71 s (4.06×) | +| CPU | jfk (11.0s) | 3.87 s (2.84×) | 3.46 s (3.18×) | +| CPU | dots (35.3s) | 16.24 s (2.18×) | 13.87 s (2.55×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `51db32d` on 2026-05-16. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/cohere-transcribe-03-2026.md b/docs/models/cohere-transcribe-03-2026.md index 7eb19f0b..aaab8dd8 100644 --- a/docs/models/cohere-transcribe-03-2026.md +++ b/docs/models/cohere-transcribe-03-2026.md @@ -100,16 +100,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 150 ms (74×)† | 154 ms (71×)† | -| Metal | dots (35.3s) | 491 ms (72×)† | 465 ms (76×)† | -| CPU | jfk (11.0s) | 1.21 s (9×)† | 1.05 s (11×)† | -| CPU | dots (35.3s) | 4.13 s (9×)† | 3.49 s (10×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 144 ms (76.51×) | 144 ms (76.32×) | +| Metal | dots (35.3s) | 470 ms (75.14×) | 492 ms (71.76×) | +| CPU | jfk (11.0s) | 926 ms (11.87×) | 1.00 s (10.95×) | +| CPU | dots (35.3s) | 3.25 s (10.86×) | 3.54 s (9.99×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro diff --git a/docs/models/cohere-transcribe-arabic-07-2026.md b/docs/models/cohere-transcribe-arabic-07-2026.md index 872a1240..034f6ff2 100644 --- a/docs/models/cohere-transcribe-arabic-07-2026.md +++ b/docs/models/cohere-transcribe-arabic-07-2026.md @@ -101,16 +101,16 @@ the same architecture with identical tensor shapes and quantization layout ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 150 ms (74×)† | 154 ms (71×)† | -| Metal | dots (35.3s) | 491 ms (72×)† | 465 ms (76×)† | -| CPU | jfk (11.0s) | 1.21 s (9×)† | 1.05 s (11×)† | -| CPU | dots (35.3s) | 4.13 s (9×)† | 3.49 s (10×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 142 ms (77.53×) | 143 ms (77.15×) | +| Metal | dots (35.3s) | 469 ms (75.36×) | 460 ms (76.89×) | +| CPU | jfk (11.0s) | 912 ms (12.07×) | 1.31 s (8.37×) | +| CPU | dots (35.3s) | 3.36 s (10.53×) | 3.43 s (10.29×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro diff --git a/docs/models/fun-asr-mlt-nano-2512.md b/docs/models/fun-asr-mlt-nano-2512.md index 15e7094c..b90b594a 100644 --- a/docs/models/fun-asr-mlt-nano-2512.md +++ b/docs/models/fun-asr-mlt-nano-2512.md @@ -151,31 +151,31 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 156 ms (70×)† | 144 ms (76×)† | -| Metal | dots (35.3s) | 539 ms (66×)† | 499 ms (71×)† | -| CPU | jfk (11.0s) | 661 ms (17×)† | 575 ms (19×)† | -| CPU | dots (35.3s) | 2.36 s (15×)† | 2.12 s (17×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 146 ms (75.38×) | 136 ms (80.64×) | +| Metal | dots (35.3s) | 546 ms (64.69×) | 489 ms (72.22×) | +| CPU | jfk (11.0s) | 533 ms (20.65×) | 537 ms (20.50×) | +| CPU | dots (35.3s) | 1.92 s (18.43×) | 1.93 s (18.28×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -------------: | --------------: | -| Vulkan | jfk (11.0s) | 1.12 s (9.84×) | 1.00 s (10.98×) | -| Vulkan | dots (35.3s) | 4.43 s (7.98×) | 3.86 s (9.15×) | -| CPU | jfk (11.0s) | 2.31 s (4.75×) | 1.81 s (6.08×) | -| CPU | dots (35.3s) | 8.48 s (4.17×) | 6.87 s (5.14×) | +| Vulkan | jfk (11.0s) | 1.13 s (9.74×) | 1.04 s (10.61×) | +| Vulkan | dots (35.3s) | 4.45 s (7.93×) | 4.03 s (8.78×) | +| CPU | jfk (11.0s) | 1.79 s (6.16×) | 1.77 s (6.20×) | +| CPU | dots (35.3s) | 7.40 s (4.78×) | 6.94 s (5.09×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `8635bd1` on 2026-05-07. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/fun-asr-nano-2512.md b/docs/models/fun-asr-nano-2512.md index c53b2455..43d335dd 100644 --- a/docs/models/fun-asr-nano-2512.md +++ b/docs/models/fun-asr-nano-2512.md @@ -112,16 +112,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 134 ms (82×)† | 129 ms (86×)† | -| Metal | dots (35.3s) | 486 ms (73×)† | 433 ms (82×)† | -| CPU | jfk (11.0s) | 379 ms (29×)† | 358 ms (31×)† | -| CPU | dots (35.3s) | 1.40 s (25×)† | 1.31 s (27×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 132 ms (83.13×) | 124 ms (88.83×) | +| Metal | dots (35.3s) | 483 ms (73.13×) | 449 ms (78.65×) | +| CPU | jfk (11.0s) | 365 ms (30.12×) | 362 ms (30.40×) | +| CPU | dots (35.3s) | 1.36 s (26.00×) | 1.32 s (26.86×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U diff --git a/docs/models/gigaam-v3-ctc.md b/docs/models/gigaam-v3-ctc.md index 4e9e43e7..39bc303a 100644 --- a/docs/models/gigaam-v3-ctc.md +++ b/docs/models/gigaam-v3-ctc.md @@ -91,14 +91,14 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | ------------: | ------------: | -| Metal | ru (4.5s) | 31 ms (146×)† | 32 ms (142×)† | -| CPU | ru (4.5s) | 157 ms (29×)† | 152 ms (30×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | --------------: | --------------: | +| Metal | ru (4.5s) | 14 ms (311.94×) | 14 ms (309.87×) | +| CPU | ru (4.5s) | 148 ms (30.46×) | 148 ms (30.51×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U diff --git a/docs/models/gigaam-v3-e2e-ctc.md b/docs/models/gigaam-v3-e2e-ctc.md index c261bbbe..f9690809 100644 --- a/docs/models/gigaam-v3-e2e-ctc.md +++ b/docs/models/gigaam-v3-e2e-ctc.md @@ -91,14 +91,14 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | ------------: | ------------: | -| Metal | ru (4.5s) | 40 ms (112×)† | 40 ms (111×)† | -| CPU | ru (4.5s) | 164 ms (27×)† | 161 ms (28×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | --------------: | --------------: | +| Metal | ru (4.5s) | 14 ms (322.42×) | 15 ms (308.75×) | +| CPU | ru (4.5s) | 151 ms (29.74×) | 147 ms (30.61×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U diff --git a/docs/models/gigaam-v3-e2e-rnnt.md b/docs/models/gigaam-v3-e2e-rnnt.md index 5570a2d6..e55ad241 100644 --- a/docs/models/gigaam-v3-e2e-rnnt.md +++ b/docs/models/gigaam-v3-e2e-rnnt.md @@ -91,14 +91,14 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | ------------: | ------------: | -| Metal | ru (4.5s) | 51 ms (88×)† | 51 ms (89×)† | -| CPU | ru (4.5s) | 177 ms (25×)† | 172 ms (26×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | --------------: | --------------: | +| Metal | ru (4.5s) | 16 ms (287.54×) | 16 ms (280.90×) | +| CPU | ru (4.5s) | 148 ms (30.45×) | 150 ms (30.07×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U diff --git a/docs/models/gigaam-v3-rnnt.md b/docs/models/gigaam-v3-rnnt.md index 004d92c5..0372f72b 100644 --- a/docs/models/gigaam-v3-rnnt.md +++ b/docs/models/gigaam-v3-rnnt.md @@ -91,14 +91,14 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | --------- | ------------: | ------------: | -| Metal | ru (4.5s) | 41 ms (110×)† | 43 ms (105×)† | -| CPU | ru (4.5s) | 167 ms (27×)† | 166 ms (27×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | --------- | --------------: | --------------: | +| Metal | ru (4.5s) | 16 ms (284.76×) | 16 ms (285.73×) | +| CPU | ru (4.5s) | 146 ms (30.74×) | 146 ms (30.83×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U diff --git a/docs/models/granite-4.0-1b-speech.md b/docs/models/granite-4.0-1b-speech.md index 08109dc6..a4f267b7 100644 --- a/docs/models/granite-4.0-1b-speech.md +++ b/docs/models/granite-4.0-1b-speech.md @@ -100,31 +100,31 @@ build/bin/transcribe-cli \ ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 126 ms (86.92×) | 129 ms (85.41×) | -| Metal | dots (35.3s) | 341 ms (103.69×) | 347 ms (101.77×) | -| CPU | jfk (11.0s) | 1.55 s (7.08×) | 1.30 s (8.47×) | -| CPU | dots (35.3s) | 4.81 s (7.34×) | 4.25 s (8.31×) | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 136 ms (80.65×) | 169 ms (65.11×) | +| Metal | dots (35.3s) | 502 ms (70.32×) | 472 ms (74.81×) | +| CPU | jfk (11.0s) | 1.32 s (8.31×) | 1.39 s (7.94×) | +| CPU | dots (35.3s) | 4.20 s (8.41×) | 4.23 s (8.36×) | -Apple M4 Max: transcribe.cpp `de05c43` on 2026-05-21. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 2.43 s (4.52×) | 2.45 s (4.49×) | -| Vulkan | dots (35.3s) | 6.50 s (5.43×) | 6.61 s (5.35×) | -| CPU | jfk (11.0s) | 5.27 s (2.09×) | 4.30 s (2.56×) | -| CPU | dots (35.3s) | 17.39 s (2.03×) | 13.72 s (2.58×) | +| Vulkan | jfk (11.0s) | 2.54 s (4.33×) | 2.54 s (4.32×) | +| Vulkan | dots (35.3s) | 7.15 s (4.94×) | 6.84 s (5.16×) | +| CPU | jfk (11.0s) | 3.96 s (2.78×) | 3.90 s (2.82×) | +| CPU | dots (35.3s) | 12.93 s (2.73×) | 12.72 s (2.78×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `dbe5814` on 2026-05-18. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. ## Capabilities diff --git a/docs/models/granite-speech-4.1-2b-nar.md b/docs/models/granite-speech-4.1-2b-nar.md index 107523a6..3d529aba 100644 --- a/docs/models/granite-speech-4.1-2b-nar.md +++ b/docs/models/granite-speech-4.1-2b-nar.md @@ -97,31 +97,31 @@ editor handles language detection implicitly. ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Metal | jfk (11.0s) | 151 ms (72.70×) | 163 ms (67.43×) | -| Metal | dots (35.3s) | 491 ms (71.91×) | 518 ms (68.21×) | -| CPU | jfk (11.0s) | 1.89 s (5.81×) | 1.78 s (6.17×) | -| CPU | dots (35.3s) | 7.38 s (4.79×) | 6.21 s (5.69×) | +| Metal | jfk (11.0s) | 149 ms (73.82×) | 153 ms (71.92×) | +| Metal | dots (35.3s) | 466 ms (75.73×) | 466 ms (75.88×) | +| CPU | jfk (11.0s) | 1.59 s (6.92×) | 1.67 s (6.60×) | +| CPU | dots (35.3s) | 5.27 s (6.70×) | 5.75 s (6.15×) | -Apple M4 Max: transcribe.cpp `de05c43` on 2026-05-21. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 2.68 s (4.10×) | 2.75 s (4.00×) | -| Vulkan | dots (35.3s) | 8.32 s (4.25×) | 8.53 s (4.14×) | -| CPU | jfk (11.0s) | 6.75 s (1.63×) | 5.46 s (2.01×) | -| CPU | dots (35.3s) | 23.77 s (1.49×) | 19.55 s (1.81×) | +| Vulkan | jfk (11.0s) | 2.68 s (4.10×) | 2.77 s (3.96×) | +| Vulkan | dots (35.3s) | 9.09 s (3.89×) | 9.02 s (3.92×) | +| CPU | jfk (11.0s) | 4.76 s (2.31×) | 4.98 s (2.21×) | +| CPU | dots (35.3s) | 17.88 s (1.98×) | 17.84 s (1.98×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `dbe5814` on 2026-05-18. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. ## Capabilities diff --git a/docs/models/granite-speech-4.1-2b-plus.md b/docs/models/granite-speech-4.1-2b-plus.md index 95fdafd7..0e51855d 100644 --- a/docs/models/granite-speech-4.1-2b-plus.md +++ b/docs/models/granite-speech-4.1-2b-plus.md @@ -128,31 +128,31 @@ words: 22 ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | --------------: | -| Metal | jfk (11.0s) | 136 ms (80.88×) | 140 ms (78.83×) | -| Metal | dots (35.3s) | 351 ms (100.61×) | 359 ms (98.49×) | -| CPU | jfk (11.0s) | 1.77 s (6.21×) | 1.64 s (6.69×) | -| CPU | dots (35.3s) | 5.49 s (6.44×) | 4.54 s (7.78×) | +| Metal | jfk (11.0s) | 134 ms (82.33×) | 137 ms (80.36×) | +| Metal | dots (35.3s) | 350 ms (100.92×) | 353 ms (99.98×) | +| CPU | jfk (11.0s) | 1.47 s (7.46×) | 1.50 s (7.33×) | +| CPU | dots (35.3s) | 3.85 s (9.18×) | 4.14 s (8.54×) | -Apple M4 Max: transcribe.cpp `de05c43` on 2026-05-21. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 2.46 s (4.48×) | 2.50 s (4.40×) | -| Vulkan | dots (35.3s) | 6.73 s (5.25×) | 6.83 s (5.17×) | -| CPU | jfk (11.0s) | 6.20 s (1.77×) | 5.02 s (2.19×) | -| CPU | dots (35.3s) | 18.19 s (1.94×) | 15.06 s (2.35×) | +| Vulkan | jfk (11.0s) | 2.58 s (4.27×) | 2.58 s (4.26×) | +| Vulkan | dots (35.3s) | 7.04 s (5.02×) | 7.53 s (4.69×) | +| CPU | jfk (11.0s) | 4.32 s (2.55×) | 4.34 s (2.53×) | +| CPU | dots (35.3s) | 13.35 s (2.65×) | 13.10 s (2.70×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `dbe5814` on 2026-05-18. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. ## Capabilities diff --git a/docs/models/granite-speech-4.1-2b.md b/docs/models/granite-speech-4.1-2b.md index b8f271b1..556b6269 100644 --- a/docs/models/granite-speech-4.1-2b.md +++ b/docs/models/granite-speech-4.1-2b.md @@ -102,31 +102,31 @@ build/bin/transcribe-cli \ ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 127 ms (86.64×) | 130 ms (84.90×) | -| Metal | dots (35.3s) | 343 ms (103.09×) | 349 ms (101.11×) | -| CPU | jfk (11.0s) | 1.58 s (6.97×) | 1.45 s (7.58×) | -| CPU | dots (35.3s) | 4.89 s (7.22×) | 4.44 s (7.95×) | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 145 ms (75.92×) | 139 ms (79.11×) | +| Metal | dots (35.3s) | 445 ms (79.32×) | 458 ms (77.22×) | +| CPU | jfk (11.0s) | 1.33 s (8.30×) | 1.37 s (8.05×) | +| CPU | dots (35.3s) | 4.13 s (8.56×) | 4.26 s (8.30×) | -Apple M4 Max: transcribe.cpp `de05c43` on 2026-05-21. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U (Vega 8 iGPU) -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 2.41 s (4.56×) | 2.44 s (4.51×) | -| Vulkan | dots (35.3s) | 6.52 s (5.42×) | 6.61 s (5.34×) | -| CPU | jfk (11.0s) | 5.55 s (1.98×) | 4.55 s (2.42×) | -| CPU | dots (35.3s) | 17.56 s (2.01×) | 14.51 s (2.43×) | +| Vulkan | jfk (11.0s) | 2.56 s (4.29×) | 2.55 s (4.31×) | +| Vulkan | dots (35.3s) | 7.15 s (4.94×) | 6.80 s (5.20×) | +| CPU | jfk (11.0s) | 3.86 s (2.85×) | 3.89 s (2.83×) | +| CPU | dots (35.3s) | 13.06 s (2.70×) | 12.59 s (2.81×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `dbe5814` on 2026-05-18. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. ## Capabilities diff --git a/docs/models/granite-speech-5.0-470m-turboctc-nc.md b/docs/models/granite-speech-5.0-470m-turboctc-nc.md index 89a104a3..088195d9 100644 --- a/docs/models/granite-speech-5.0-470m-turboctc-nc.md +++ b/docs/models/granite-speech-5.0-470m-turboctc-nc.md @@ -64,31 +64,31 @@ build/bin/transcribe-cli \ ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Metal | jfk (11.0s) | 35 ms (312.62×) | 36 ms (303.27×) | -| Metal | dots (35.3s) | 81 ms (435.64×) | 83 ms (425.61×) | -| CPU | jfk (11.0s) | 231 ms (47.54×) | 232 ms (47.46×) | -| CPU | dots (35.3s) | 694 ms (50.91×) | 685 ms (51.59×) | +| Metal | jfk (11.0s) | 35 ms (312.54×) | 37 ms (295.13×) | +| Metal | dots (35.3s) | 83 ms (424.15×) | 87 ms (407.09×) | +| CPU | jfk (11.0s) | 244 ms (45.18×) | 255 ms (43.17×) | +| CPU | dots (35.3s) | 746 ms (47.39×) | 764 ms (46.26×) | -Apple M4 Max: transcribe.cpp `144ccad` on 2026-09-12. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 585 ms (18.79×) | 598 ms (18.40×) | -| Vulkan | dots (35.3s) | 1.32 s (26.86×) | 1.34 s (26.37×) | -| CPU | jfk (11.0s) | 694 ms (15.84×) | 648 ms (16.98×) | -| CPU | dots (35.3s) | 2.25 s (15.72×) | 2.24 s (15.74×) | +| Vulkan | jfk (11.0s) | 583 ms (18.88×) | 605 ms (18.18×) | +| Vulkan | dots (35.3s) | 1.32 s (26.77×) | 1.34 s (26.45×) | +| CPU | jfk (11.0s) | 614 ms (17.91×) | 653 ms (16.84×) | +| CPU | dots (35.3s) | 2.13 s (16.59×) | 2.12 s (16.63×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `3a5ed01` on 2026-09-12. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Q8_0 is usually a little faster than Q4_K_M despite being 1.8× the size, so diff --git a/docs/models/granite-speech-5.0-470m-turboctc.md b/docs/models/granite-speech-5.0-470m-turboctc.md index c92f01c1..a655be22 100644 --- a/docs/models/granite-speech-5.0-470m-turboctc.md +++ b/docs/models/granite-speech-5.0-470m-turboctc.md @@ -65,31 +65,31 @@ build/bin/transcribe-cli \ ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Metal | jfk (11.0s) | 36 ms (308.18×) | 37 ms (297.06×) | -| Metal | dots (35.3s) | 81 ms (433.84×) | 84 ms (421.77×) | -| CPU | jfk (11.0s) | 230 ms (47.79×) | 231 ms (47.53×) | -| CPU | dots (35.3s) | 700 ms (50.46×) | 687 ms (51.45×) | +| Metal | jfk (11.0s) | 36 ms (301.30×) | 39 ms (284.51×) | +| Metal | dots (35.3s) | 86 ms (410.20×) | 95 ms (371.09×) | +| CPU | jfk (11.0s) | 243 ms (45.19×) | 254 ms (43.29×) | +| CPU | dots (35.3s) | 752 ms (46.95×) | 769 ms (45.93×) | -Apple M4 Max: transcribe.cpp `54b241e` on 2026-09-12. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 591 ms (18.62×) | 600 ms (18.33×) | -| Vulkan | dots (35.3s) | 1.30 s (27.22×) | 1.34 s (26.44×) | -| CPU | jfk (11.0s) | 689 ms (15.97×) | 655 ms (16.80×) | -| CPU | dots (35.3s) | 2.26 s (15.65×) | 2.23 s (15.82×) | +| Vulkan | jfk (11.0s) | 588 ms (18.69×) | 588 ms (18.72×) | +| Vulkan | dots (35.3s) | 1.31 s (27.04×) | 1.31 s (26.89×) | +| CPU | jfk (11.0s) | 615 ms (17.90×) | 652 ms (16.87×) | +| CPU | dots (35.3s) | 2.13 s (16.58×) | 2.14 s (16.51×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `3a5ed01` on 2026-09-12. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Q8_0 is usually a little faster than Q4_K_M despite being 1.8× the size, so diff --git a/docs/models/medasr.md b/docs/models/medasr.md index 4d0eafe2..cc7fb0cf 100644 --- a/docs/models/medasr.md +++ b/docs/models/medasr.md @@ -86,31 +86,31 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 38 ms (290×)† | 44 ms (248×)† | -| Metal | dots (35.3s) | 84 ms (419×)† | 90 ms (394×)† | -| CPU | jfk (11.0s) | 161 ms (68×)† | 180 ms (61×)† | -| CPU | dots (35.3s) | 558 ms (63×)† | 623 ms (57×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 17 ms (658.45×) | 16 ms (667.76×) | +| Metal | dots (35.3s) | 39 ms (915.05×) | 40 ms (893.98×) | +| CPU | jfk (11.0s) | 162 ms (68.09×) | 179 ms (61.33×) | +| CPU | dots (35.3s) | 564 ms (62.60×) | 632 ms (55.88×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 161 ms (68.17×) | 173 ms (63.63×) | -| Vulkan | dots (35.3s) | 479 ms (73.76×) | 493 ms (71.61×) | -| CPU | jfk (11.0s) | 542 ms (20.30×) | 488 ms (22.56×) | -| CPU | dots (35.3s) | 1.84 s (19.21×) | 1.63 s (21.73×) | +| Vulkan | jfk (11.0s) | 160 ms (68.93×) | 157 ms (70.04×) | +| Vulkan | dots (35.3s) | 480 ms (73.59×) | 484 ms (72.95×) | +| CPU | jfk (11.0s) | 400 ms (27.48×) | 466 ms (23.58×) | +| CPU | dots (35.3s) | 1.46 s (24.25×) | 1.50 s (23.58×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `79d139a` on 2026-06-04. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/moonshine-base.md b/docs/models/moonshine-base.md index ab96538e..63bd3d37 100644 --- a/docs/models/moonshine-base.md +++ b/docs/models/moonshine-base.md @@ -80,16 +80,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | -| ------- | ------------ | --------------: | -| Metal | jfk (11.0s) | 96 ms (115×)† | -| Metal | dots (35.3s) | 811 ms (44×)† | -| CPU | jfk (11.0s) | 96 ms (114.16×) | -| CPU | dots (35.3s) | 719 ms (49.16×) | +| Backend | Sample | Q8_0 | +| ------- | ------------ | ---------------: | +| Metal | jfk (11.0s) | 89 ms (123.33×) | +| Metal | dots (35.3s) | 740 ms (47.76×) | +| CPU | jfk (11.0s) | 100 ms (109.83×) | +| CPU | dots (35.3s) | 690 ms (51.17×) | -Apple M4 Max: transcribe.cpp `9824fdb` on 2026-05-06. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro diff --git a/docs/models/moonshine-streaming-medium.md b/docs/models/moonshine-streaming-medium.md index 7b1cf37b..321e34ec 100644 --- a/docs/models/moonshine-streaming-medium.md +++ b/docs/models/moonshine-streaming-medium.md @@ -98,16 +98,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | -| Metal | jfk (11.0s) | 124 ms (88.69×) | -| Metal | dots (35.3s) | 952 ms (37.11×) | -| CPU | jfk (11.0s) | 281 ms (39.11×) | -| CPU | dots (35.3s) | 1.11 s (31.93×) | +| Metal | jfk (11.0s) | 127 ms (86.61×) | +| Metal | dots (35.3s) | 978 ms (36.12×) | +| CPU | jfk (11.0s) | 235 ms (46.77×) | +| CPU | dots (35.3s) | 1.12 s (31.52×) | -Apple M4 Max: transcribe.cpp `0d312ce` on 2026-05-06. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro diff --git a/docs/models/moonshine-streaming-small.md b/docs/models/moonshine-streaming-small.md index 9cad6fb7..fa9b2b18 100644 --- a/docs/models/moonshine-streaming-small.md +++ b/docs/models/moonshine-streaming-small.md @@ -80,31 +80,31 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | -| Metal | jfk (11.0s) | 82 ms (133.58×) | -| Metal | dots (35.3s) | 612 ms (57.69×) | -| CPU | jfk (11.0s) | 174 ms (63.31×) | -| CPU | dots (35.3s) | 699 ms (50.55×) | +| Metal | jfk (11.0s) | 85 ms (129.36×) | +| Metal | dots (35.3s) | 603 ms (58.59×) | +| CPU | jfk (11.0s) | 172 ms (63.75×) | +| CPU | dots (35.3s) | 722 ms (48.91×) | -Apple M4 Max: transcribe.cpp `0d312ce` on 2026-05-06. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | -| Vulkan | jfk (11.0s) | 349 ms (31.53×) | -| Vulkan | dots (35.3s) | 2.38 s (14.84×) | -| CPU | jfk (11.0s) | 735 ms (14.97×) | -| CPU | dots (35.3s) | 4.00 s (8.83×) | +| Vulkan | jfk (11.0s) | 374 ms (29.38×) | +| Vulkan | dots (35.3s) | 2.50 s (14.16×) | +| CPU | jfk (11.0s) | 620 ms (17.75×) | +| CPU | dots (35.3s) | 3.79 s (9.32×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `f243f34` on 2026-05-06. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/moonshine-streaming-tiny.md b/docs/models/moonshine-streaming-tiny.md index 4ae23089..33138af8 100644 --- a/docs/models/moonshine-streaming-tiny.md +++ b/docs/models/moonshine-streaming-tiny.md @@ -99,31 +99,31 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | | ------- | ------------ | ---------------: | -| Metal | jfk (11.0s) | 50 ms (218.46×) | -| Metal | dots (35.3s) | 355 ms (99.53×) | -| CPU | jfk (11.0s) | 44 ms (249.57×) | -| CPU | dots (35.3s) | 206 ms (171.94×) | +| Metal | jfk (11.0s) | 46 ms (239.48×) | +| Metal | dots (35.3s) | 316 ms (111.87×) | +| CPU | jfk (11.0s) | 41 ms (270.63×) | +| CPU | dots (35.3s) | 210 ms (168.59×) | -Apple M4 Max: transcribe.cpp `0d312ce` on 2026-05-06. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | -| Vulkan | jfk (11.0s) | 139 ms (78.88×) | -| Vulkan | dots (35.3s) | 892 ms (39.61×) | -| CPU | jfk (11.0s) | 160 ms (68.67×) | -| CPU | dots (35.3s) | 882 ms (40.08×) | +| Vulkan | jfk (11.0s) | 138 ms (80.00×) | +| Vulkan | dots (35.3s) | 922 ms (38.30×) | +| CPU | jfk (11.0s) | 146 ms (75.29×) | +| CPU | dots (35.3s) | 948 ms (37.25×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `f243f34` on 2026-05-06. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/moonshine-tiny.md b/docs/models/moonshine-tiny.md index 5e62aa94..4733511d 100644 --- a/docs/models/moonshine-tiny.md +++ b/docs/models/moonshine-tiny.md @@ -77,16 +77,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | | ------- | ------------ | --------------: | -| Metal | jfk (11.0s) | 59 ms (187.76×) | -| Metal | dots (35.3s) | 478 ms (74×)† | -| CPU | jfk (11.0s) | 52 ms (213.74×) | -| CPU | dots (35.3s) | 378 ms (93.50×) | +| Metal | jfk (11.0s) | 56 ms (197.19×) | +| Metal | dots (35.3s) | 422 ms (83.81×) | +| CPU | jfk (11.0s) | 54 ms (201.68×) | +| CPU | dots (35.3s) | 373 ms (94.78×) | -Apple M4 Max: transcribe.cpp `9824fdb` on 2026-05-06. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro diff --git a/docs/models/moss-transcribe-diarize.md b/docs/models/moss-transcribe-diarize.md index 2a56ce6d..58e343f6 100644 --- a/docs/models/moss-transcribe-diarize.md +++ b/docs/models/moss-transcribe-diarize.md @@ -117,16 +117,16 @@ CLI flags: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Metal | jfk (11.0s) | 388 ms (28.3×)† | 369 ms (29.8×)† | -| Metal | dots (35.3s) | 1.27 s (27.8×)† | 1.17 s (30.1×)† | -| CPU | jfk (11.0s) | 2.06 s (5.3×)† | 2.37 s (4.6×)† | -| CPU | dots (35.3s) | 5.71 s (6.2×)† | 5.84 s (6×)† | +| Metal | jfk (11.0s) | 393 ms (27.98×) | 382 ms (28.82×) | +| Metal | dots (35.3s) | 1.40 s (25.17×) | 1.22 s (29.01×) | +| CPU | jfk (11.0s) | 2.08 s (5.28×) | 2.20 s (5.00×) | +| CPU | dots (35.3s) | 5.43 s (6.50×) | 5.47 s (6.46×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U diff --git a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md index 105e12f7..0959a4cc 100644 --- a/docs/models/multitalker-parakeet-streaming-0.6b-v1.md +++ b/docs/models/multitalker-parakeet-streaming-0.6b-v1.md @@ -159,31 +159,31 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 66 ms (167.17×) | 68 ms (162.41×) | -| Metal | dots (35.3s) | 182 ms (194.69×) | 183 ms (192.82×) | -| CPU | jfk (11.0s) | 309 ms (35.60×) | 306 ms (35.95×) | -| CPU | dots (35.3s) | 1.05 s (33.68×) | 1.03 s (34.41×) | +| Metal | jfk (11.0s) | 53 ms (207.08×) | 54 ms (201.85×) | +| Metal | dots (35.3s) | 155 ms (227.85×) | 156 ms (226.47×) | +| CPU | jfk (11.0s) | 331 ms (33.25×) | 338 ms (32.58×) | +| CPU | dots (35.3s) | 1.10 s (32.18×) | 1.11 s (31.87×) | -Apple M4 Max: transcribe.cpp `c55a09d` on 2026-07-13. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 458 ms (23.99×) | 466 ms (23.58×) | -| Vulkan | dots (35.3s) | 1.34 s (26.32×) | 1.38 s (25.63×) | -| CPU | jfk (11.0s) | 750 ms (14.68×) | 814 ms (13.51×) | -| CPU | dots (35.3s) | 2.99 s (11.81×) | 3.12 s (11.34×) | +| Vulkan | jfk (11.0s) | 439 ms (25.08×) | 438 ms (25.11×) | +| Vulkan | dots (35.3s) | 1.28 s (27.61×) | 1.30 s (27.12×) | +| CPU | jfk (11.0s) | 748 ms (14.70×) | 790 ms (13.92×) | +| CPU | dots (35.3s) | 2.91 s (12.13×) | 2.96 s (11.95×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `c55a09d` on 2026-07-13. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/nemotron-3.5-asr-streaming-0.6b.md b/docs/models/nemotron-3.5-asr-streaming-0.6b.md index 057517b8..36f610e7 100644 --- a/docs/models/nemotron-3.5-asr-streaming-0.6b.md +++ b/docs/models/nemotron-3.5-asr-streaming-0.6b.md @@ -143,16 +143,16 @@ are out-of-the-box numbers with no tuning. ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | --------------: | --------------: | -| Metal | jfk (11.0s) | 112 ms (98.65×) | 112 ms (98.69×) | -| Metal | dots (35.3s) | 359 ms (98.39×) | 366 ms (96.54×) | -| CPU | jfk (11.0s) | 366 ms (30.07×) | 362 ms (30.42×) | -| CPU | dots (35.3s) | 1.27 s (27.72×) | 1.25 s (28.31×) | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 76 ms (143.94×) | 77 ms (143.14×) | +| Metal | dots (35.3s) | 256 ms (138.26×) | 256 ms (137.88×) | +| CPU | jfk (11.0s) | 358 ms (30.76×) | 355 ms (31.01×) | +| CPU | dots (35.3s) | 1.19 s (29.73×) | 1.21 s (29.23×) | -Apple M4 Max: transcribe.cpp `d9708f1` on 2026-06-08. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro diff --git a/docs/models/nemotron-speech-streaming-en-0.6b.md b/docs/models/nemotron-speech-streaming-en-0.6b.md index 89505089..21642097 100644 --- a/docs/models/nemotron-speech-streaming-en-0.6b.md +++ b/docs/models/nemotron-speech-streaming-en-0.6b.md @@ -112,16 +112,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | --------------: | --------------: | -| Metal | jfk (11.0s) | 73 ms (151×)† | 73 ms (151×)† | -| Metal | dots (35.3s) | 224 ms (158×)† | 221 ms (160×)† | -| CPU | jfk (11.0s) | 346 ms (31.77×) | 345 ms (31.89×) | -| CPU | dots (35.3s) | 1.18 s (30.02×) | 1.16 s (30.52×) | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 53 ms (206.74×) | 55 ms (200.58×) | +| Metal | dots (35.3s) | 157 ms (225.20×) | 158 ms (223.33×) | +| CPU | jfk (11.0s) | 327 ms (33.64×) | 335 ms (32.81×) | +| CPU | dots (35.3s) | 1.10 s (32.03×) | 1.11 s (31.89×) | -Apple M4 Max: transcribe.cpp `c2e7bf9` on 2026-05-11. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro diff --git a/docs/models/parakeet-ctc-0.6b.md b/docs/models/parakeet-ctc-0.6b.md index ce73ed10..139bc67d 100644 --- a/docs/models/parakeet-ctc-0.6b.md +++ b/docs/models/parakeet-ctc-0.6b.md @@ -76,31 +76,31 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 56 ms (198.18×) | 57 ms (191.56×) | -| Metal | dots (35.3s) | 141 ms (251.18×) | 142 ms (248.04×) | -| CPU | jfk (11.0s) | 355 ms (30.98×) | 297 ms (37.07×) | -| CPU | dots (35.3s) | 1.19 s (29.64×) | 999 ms (35.35×) | +| Metal | jfk (11.0s) | 48 ms (227.64×) | 48 ms (226.86×) | +| Metal | dots (35.3s) | 111 ms (317.21×) | 113 ms (311.61×) | +| CPU | jfk (11.0s) | 270 ms (40.66×) | 294 ms (37.48×) | +| CPU | dots (35.3s) | 921 ms (38.35×) | 987 ms (35.80×) | -Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 520 ms (21.14×) | 537 ms (20.47×) | -| Vulkan | dots (35.3s) | 1.50 s (23.61×) | 1.50 s (23.58×) | -| CPU | jfk (11.0s) | 1.07 s (10.29×) | 863 ms (12.74×) | -| CPU | dots (35.3s) | 3.67 s (9.64×) | 3.14 s (11.25×) | +| Vulkan | jfk (11.0s) | 418 ms (26.29×) | 427 ms (25.77×) | +| Vulkan | dots (35.3s) | 1.14 s (30.91×) | 1.16 s (30.57×) | +| CPU | jfk (11.0s) | 664 ms (16.58×) | 723 ms (15.21×) | +| CPU | dots (35.3s) | 2.57 s (13.74×) | 2.64 s (13.36×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `57997dc` on 2026-05-10. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/parakeet-ctc-1.1b.md b/docs/models/parakeet-ctc-1.1b.md index b06dfebb..e29c9d70 100644 --- a/docs/models/parakeet-ctc-1.1b.md +++ b/docs/models/parakeet-ctc-1.1b.md @@ -76,31 +76,31 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 88 ms (125.48×) | 90 ms (121.85×) | -| Metal | dots (35.3s) | 221 ms (160.02×) | 220 ms (160.38×) | -| CPU | jfk (11.0s) | 601 ms (18.30×) | 500 ms (22.01×) | -| CPU | dots (35.3s) | 2.04 s (17.30×) | 1.70 s (20.83×) | +| Metal | jfk (11.0s) | 79 ms (140.04×) | 80 ms (136.77×) | +| Metal | dots (35.3s) | 177 ms (200.12×) | 180 ms (195.92×) | +| CPU | jfk (11.0s) | 458 ms (24.00×) | 502 ms (21.92×) | +| CPU | dots (35.3s) | 1.58 s (22.32×) | 1.70 s (20.80×) | -Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 826 ms (13.32×) | 823 ms (13.37×) | -| Vulkan | dots (35.3s) | 2.34 s (15.13×) | 2.33 s (15.19×) | -| CPU | jfk (11.0s) | 1.75 s (6.27×) | 1.38 s (7.99×) | -| CPU | dots (35.3s) | 6.08 s (5.81×) | 5.12 s (6.90×) | +| Vulkan | jfk (11.0s) | 691 ms (15.92×) | 711 ms (15.47×) | +| Vulkan | dots (35.3s) | 2.00 s (17.65×) | 2.02 s (17.49×) | +| CPU | jfk (11.0s) | 1.10 s (9.97×) | 1.21 s (9.06×) | +| CPU | dots (35.3s) | 4.48 s (7.88×) | 4.63 s (7.63×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `57997dc` on 2026-05-10. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/parakeet-rnnt-0.6b.md b/docs/models/parakeet-rnnt-0.6b.md index 2feeecaf..24864014 100644 --- a/docs/models/parakeet-rnnt-0.6b.md +++ b/docs/models/parakeet-rnnt-0.6b.md @@ -78,16 +78,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | -------------: | -| Metal | jfk (11.0s) | 64 ms (173×)† | 65 ms (170×)† | -| Metal | dots (35.3s) | 178 ms (198×)† | 181 ms (196×)† | -| CPU | jfk (11.0s) | 360 ms (31×)† | 302 ms (36×)† | -| CPU | dots (35.3s) | 1.22 s (29×)† | 1.03 s (34×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 55 ms (201.01×) | 56 ms (198.17×) | +| Metal | dots (35.3s) | 138 ms (255.29×) | 142 ms (248.43×) | +| CPU | jfk (11.0s) | 281 ms (39.19×) | 301 ms (36.52×) | +| CPU | dots (35.3s) | 977 ms (36.16×) | 1.04 s (34.02×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro diff --git a/docs/models/parakeet-rnnt-1.1b.md b/docs/models/parakeet-rnnt-1.1b.md index 0684c141..849a9ccf 100644 --- a/docs/models/parakeet-rnnt-1.1b.md +++ b/docs/models/parakeet-rnnt-1.1b.md @@ -76,31 +76,31 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | --------------: | -| Metal | jfk (11.0s) | 96 ms (114×)† | 97 ms (114×)† | -| Metal | dots (35.3s) | 258 ms (137×)† | 265 ms (133×)† | -| CPU | jfk (11.0s) | 606 ms (18×)† | 506 ms (22×)† | -| CPU | dots (35.3s) | 2.05 s (17×)† | 1.86 s (19.01×) | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 84 ms (131.63×) | 86 ms (128.14×) | +| Metal | dots (35.3s) | 201 ms (175.51×) | 207 ms (170.62×) | +| CPU | jfk (11.0s) | 492 ms (22.37×) | 516 ms (21.34×) | +| CPU | dots (35.3s) | 1.64 s (21.53×) | 1.86 s (19.04×) | -Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 1.01 s (10.85×) | 1.04 s (10.60×) | -| Vulkan | dots (35.3s) | 3.34 s (10.58×) | 3.30 s (10.70×) | -| CPU | jfk (11.0s) | 1.93 s (5.70×) | 1.58 s (6.98×) | -| CPU | dots (35.3s) | 7.12 s (4.96×) | 6.18 s (5.72×) | +| Vulkan | jfk (11.0s) | 701 ms (15.70×) | 710 ms (15.50×) | +| Vulkan | dots (35.3s) | 2.15 s (16.47×) | 2.18 s (16.20×) | +| CPU | jfk (11.0s) | 1.12 s (9.80×) | 1.21 s (9.08×) | +| CPU | dots (35.3s) | 4.79 s (7.38×) | 4.73 s (7.48×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/parakeet-tdt-0.6b-v2.md b/docs/models/parakeet-tdt-0.6b-v2.md index 6d2cc4b3..12647008 100644 --- a/docs/models/parakeet-tdt-0.6b-v2.md +++ b/docs/models/parakeet-tdt-0.6b-v2.md @@ -76,16 +76,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | -------------: | -| Metal | jfk (11.0s) | 68 ms (163×)† | 67 ms (163×)† | -| Metal | dots (35.3s) | 189 ms (187×)† | 193 ms (183×)† | -| CPU | jfk (11.0s) | 371 ms (30×)† | 312 ms (35×)† | -| CPU | dots (35.3s) | 1.26 s (28×)† | 1.07 s (33×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 55 ms (199.95×) | 56 ms (196.11×) | +| Metal | dots (35.3s) | 142 ms (248.28×) | 145 ms (243.28×) | +| CPU | jfk (11.0s) | 278 ms (39.64×) | 318 ms (34.64×) | +| CPU | dots (35.3s) | 987 ms (35.80×) | 1.09 s (32.53×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro diff --git a/docs/models/parakeet-tdt-0.6b-v3.md b/docs/models/parakeet-tdt-0.6b-v3.md index 303dbae6..7763a0ac 100644 --- a/docs/models/parakeet-tdt-0.6b-v3.md +++ b/docs/models/parakeet-tdt-0.6b-v3.md @@ -102,16 +102,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 74 ms (149.59×) | 75 ms (146.35×) | -| Metal | dots (35.3s) | 224 ms (157.78×) | 224 ms (157.68×) | -| CPU | jfk (11.0s) | 386 ms (28.53×) | 323 ms (34×)† | -| CPU | dots (35.3s) | 1.31 s (26.98×) | 1.11 s (32×)† | +| Metal | jfk (11.0s) | 60 ms (181.74×) | 62 ms (178.45×) | +| Metal | dots (35.3s) | 164 ms (215.45×) | 167 ms (212.12×) | +| CPU | jfk (11.0s) | 286 ms (38.48×) | 310 ms (35.53×) | +| CPU | dots (35.3s) | 1.00 s (35.16×) | 1.08 s (32.71×) | -Apple M4 Max: transcribe.cpp `140ed3a` on 2026-04-16. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro diff --git a/docs/models/parakeet-tdt-1.1b.md b/docs/models/parakeet-tdt-1.1b.md index bff9c1bf..420da44e 100644 --- a/docs/models/parakeet-tdt-1.1b.md +++ b/docs/models/parakeet-tdt-1.1b.md @@ -77,16 +77,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 94 ms (116.36×) | 97 ms (113.42×) | -| Metal | dots (35.3s) | 255 ms (138.52×) | 254 ms (139.09×) | -| CPU | jfk (11.0s) | 608 ms (18×)† | 505 ms (22×)† | -| CPU | dots (35.3s) | 2.04 s (17×)† | 1.73 s (20×)† | +| Metal | jfk (11.0s) | 81 ms (135.38×) | 84 ms (130.98×) | +| Metal | dots (35.3s) | 196 ms (180.48×) | 201 ms (175.57×) | +| CPU | jfk (11.0s) | 675 ms (16.31×) | 518 ms (21.25×) | +| CPU | dots (35.3s) | 1.76 s (20.06×) | 1.76 s (20.06×) | -Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro diff --git a/docs/models/parakeet-tdt_ctc-1.1b.md b/docs/models/parakeet-tdt_ctc-1.1b.md index 12e14ab8..b7ef0562 100644 --- a/docs/models/parakeet-tdt_ctc-1.1b.md +++ b/docs/models/parakeet-tdt_ctc-1.1b.md @@ -75,16 +75,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 100 ms (109.76×) | 103 ms (106.82×) | -| Metal | dots (35.3s) | 256 ms (138×)† | 269 ms (131.31×) | -| CPU | jfk (11.0s) | 625 ms (17.60×) | 514 ms (21.41×) | -| CPU | dots (35.3s) | 1.87 s (19×)† | 1.61 s (21.89×) | +| Metal | jfk (11.0s) | 72 ms (153.68×) | 73 ms (150.60×) | +| Metal | dots (35.3s) | 184 ms (191.86×) | 188 ms (188.19×) | +| CPU | jfk (11.0s) | 458 ms (24.01×) | 509 ms (21.62×) | +| CPU | dots (35.3s) | 1.44 s (24.54×) | 1.57 s (22.56×) | -Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro diff --git a/docs/models/parakeet-tdt_ctc-110m.md b/docs/models/parakeet-tdt_ctc-110m.md index 239f69c7..93bf0b4a 100644 --- a/docs/models/parakeet-tdt_ctc-110m.md +++ b/docs/models/parakeet-tdt_ctc-110m.md @@ -73,31 +73,31 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 34 ms (320.03×) | 35 ms (315×)† | -| Metal | dots (35.3s) | 99 ms (358.29×) | 98 ms (360.02×) | -| CPU | jfk (11.0s) | 94 ms (117.37×) | 88 ms (124.33×) | -| CPU | dots (35.3s) | 325 ms (108.62×) | 311 ms (113.49×) | +| Metal | jfk (11.0s) | 27 ms (405.32×) | 27 ms (401.40×) | +| Metal | dots (35.3s) | 69 ms (509.69×) | 69 ms (510.03×) | +| CPU | jfk (11.0s) | 70 ms (156.94×) | 78 ms (140.61×) | +| CPU | dots (35.3s) | 252 ms (140.19×) | 279 ms (126.50×) | -Apple M4 Max: transcribe.cpp `a6c097e` on 2026-05-10. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 315 ms (34.94×) | 322 ms (34.22×) | -| Vulkan | dots (35.3s) | 1.18 s (30.00×) | 1.19 s (29.59×) | -| CPU | jfk (11.0s) | 420 ms (26.16×) | 394 ms (27.89×) | -| CPU | dots (35.3s) | 1.70 s (20.76×) | 1.64 s (21.53×) | +| Vulkan | jfk (11.0s) | 142 ms (77.29×) | 144 ms (76.32×) | +| Vulkan | dots (35.3s) | 467 ms (75.62×) | 468 ms (75.48×) | +| CPU | jfk (11.0s) | 199 ms (55.36×) | 231 ms (47.53×) | +| CPU | dots (35.3s) | 790 ms (44.70×) | 870 ms (40.62×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/parakeet-unified-en-0.6b.md b/docs/models/parakeet-unified-en-0.6b.md index e1ca81c9..78227196 100644 --- a/docs/models/parakeet-unified-en-0.6b.md +++ b/docs/models/parakeet-unified-en-0.6b.md @@ -90,31 +90,31 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ---------------: | ---------------: | -| Metal | jfk (11.0s) | 69 ms (158.00×) | 71 ms (155.00×) | -| Metal | dots (35.3s) | 210 ms (168.00×) | 209 ms (169.00×) | -| CPU | jfk (11.0s) | 375 ms (29.00×) | 318 ms (35.00×) | -| CPU | dots (35.3s) | 1.27 s (28.00×) | 1.09 s (32.00×) | +| Metal | jfk (11.0s) | 59 ms (187.72×) | 60 ms (183.34×) | +| Metal | dots (35.3s) | 155 ms (228.39×) | 161 ms (219.30×) | +| CPU | jfk (11.0s) | 285 ms (38.55×) | 307 ms (35.86×) | +| CPU | dots (35.3s) | 979 ms (36.09×) | 1.05 s (33.77×) | -Apple M4 Max: transcribe.cpp `12f1076`. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 835 ms (13.18×) | 844 ms (13.03×) | -| Vulkan | dots (35.3s) | 3.03 s (11.67×) | 3.04 s (11.62×) | -| CPU | jfk (11.0s) | 1.35 s (8.17×) | 1.18 s (9.33×) | -| CPU | dots (35.3s) | 5.21 s (6.78×) | 4.66 s (7.58×) | +| Vulkan | jfk (11.0s) | 448 ms (24.55×) | 455 ms (24.15×) | +| Vulkan | dots (35.3s) | 1.36 s (26.01×) | 1.37 s (25.74×) | +| CPU | jfk (11.0s) | 712 ms (15.45×) | 788 ms (13.96×) | +| CPU | dots (35.3s) | 2.84 s (12.46×) | 2.95 s (11.97×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `12f1076` on 2026-05-11. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/qwen3-asr-0.6b.md b/docs/models/qwen3-asr-0.6b.md index 4100f80d..f5eac091 100644 --- a/docs/models/qwen3-asr-0.6b.md +++ b/docs/models/qwen3-asr-0.6b.md @@ -128,31 +128,31 @@ chat template is tracked as follow-up work; see the family note at ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 155 ms (71×)† | 142 ms (77×)† | -| Metal | dots (35.3s) | 597 ms (59×)† | 527 ms (67×)† | -| CPU | jfk (11.0s) | 660 ms (17×)† | 588 ms (19×)† | -| CPU | dots (35.3s) | 2.26 s (16×)† | 2.10 s (17×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 147 ms (75.02×) | 134 ms (81.78×) | +| Metal | dots (35.3s) | 556 ms (63.50×) | 511 ms (69.19×) | +| CPU | jfk (11.0s) | 545 ms (20.20×) | 547 ms (20.10×) | +| CPU | dots (35.3s) | 2.06 s (17.13×) | 1.97 s (17.95×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | --------------: | -| Vulkan | jfk (11.0s) | 1.27 s (8.66×) | 1.08 s (10.16×) | -| Vulkan | dots (35.3s) | 4.87 s (7.26×) | 3.99 s (8.86×) | -| CPU | jfk (11.0s) | 2.37 s (4.65×) | 1.92 s (5.73×) | -| CPU | dots (35.3s) | 8.60 s (4.11×) | 7.34 s (4.82×) | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Vulkan | jfk (11.0s) | 1.03 s (10.73×) | 908 ms (12.12×) | +| Vulkan | dots (35.3s) | 4.07 s (8.68×) | 3.55 s (9.96×) | +| CPU | jfk (11.0s) | 1.86 s (5.91×) | 1.67 s (6.58×) | +| CPU | dots (35.3s) | 7.55 s (4.68×) | 6.75 s (5.23×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `3d16f74` on 2026-04-20. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/qwen3-asr-1.7b.md b/docs/models/qwen3-asr-1.7b.md index 7f788cba..21a1e705 100644 --- a/docs/models/qwen3-asr-1.7b.md +++ b/docs/models/qwen3-asr-1.7b.md @@ -119,31 +119,31 @@ the rationale and the planned follow-up. ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | ------------: | ------------: | -| Metal | jfk (11.0s) | 256 ms (43×)† | 213 ms (52×)† | -| Metal | dots (35.3s) | 978 ms (36×)† | 803 ms (44×)† | -| CPU | jfk (11.0s) | 1.40 s (8×)† | 1.10 s (10×)† | -| CPU | dots (35.3s) | 4.46 s (8×)† | 4.04 s (9×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 243 ms (45.33×) | 209 ms (52.65×) | +| Metal | dots (35.3s) | 959 ms (36.83×) | 804 ms (43.95×) | +| CPU | jfk (11.0s) | 1.06 s (10.35×) | 1.23 s (8.96×) | +| CPU | dots (35.3s) | 4.00 s (8.83×) | 3.80 s (9.31×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 2.66 s (4.13×) | 2.29 s (4.81×) | -| Vulkan | dots (35.3s) | 9.87 s (3.58×) | 8.36 s (4.22×) | -| CPU | jfk (11.0s) | 5.19 s (2.12×) | 3.57 s (3.08×) | -| CPU | dots (35.3s) | 18.52 s (1.91×) | 12.93 s (2.73×) | +| Vulkan | jfk (11.0s) | 2.47 s (4.45×) | 2.02 s (5.45×) | +| Vulkan | dots (35.3s) | 9.49 s (3.72×) | 7.89 s (4.48×) | +| CPU | jfk (11.0s) | 4.10 s (2.68×) | 3.51 s (3.14×) | +| CPU | dots (35.3s) | 15.63 s (2.26×) | 13.07 s (2.70×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `3d16f74` on 2026-04-20. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/sensevoice-small.md b/docs/models/sensevoice-small.md index 92c545b7..9e34badc 100644 --- a/docs/models/sensevoice-small.md +++ b/docs/models/sensevoice-small.md @@ -158,31 +158,31 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -------------: | -------------: | -| Metal | jfk (11.0s) | 42 ms (260×)† | 44 ms (250×)† | -| Metal | dots (35.3s) | 111 ms (319×)† | 137 ms (258×)† | -| CPU | jfk (11.0s) | 208 ms (53×)† | 213 ms (52×)† | -| CPU | dots (35.3s) | 700 ms (50×)† | 727 ms (49×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ---------------: | ---------------: | +| Metal | jfk (11.0s) | 45 ms (245.28×) | 46 ms (238.72×) | +| Metal | dots (35.3s) | 122 ms (288.69×) | 123 ms (286.71×) | +| CPU | jfk (11.0s) | 215 ms (51.15×) | 220 ms (49.92×) | +| CPU | dots (35.3s) | 737 ms (47.92×) | 757 ms (46.69×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 313 ms (35.18×) | 317 ms (34.74×) | -| Vulkan | dots (35.3s) | 1.08 s (32.70×) | 1.10 s (32.25×) | -| CPU | jfk (11.0s) | 678 ms (16.22×) | 582 ms (18.91×) | -| CPU | dots (35.3s) | 2.28 s (15.49×) | 2.01 s (17.61×) | +| Vulkan | jfk (11.0s) | 395 ms (27.85×) | 398 ms (27.63×) | +| Vulkan | dots (35.3s) | 1.28 s (27.53×) | 1.30 s (27.27×) | +| CPU | jfk (11.0s) | 531 ms (20.71×) | 627 ms (17.55×) | +| CPU | dots (35.3s) | 1.88 s (18.76×) | 2.15 s (16.40×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `8635bd1` on 2026-05-07. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/voxtral-mini-3b-2507.md b/docs/models/voxtral-mini-3b-2507.md index 0d3eeac5..8c87b0d3 100644 --- a/docs/models/voxtral-mini-3b-2507.md +++ b/docs/models/voxtral-mini-3b-2507.md @@ -111,16 +111,16 @@ CLI flags: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 727.3 ms (15.1×)† | 656.8 ms (16.7×)† | -| Metal | dots (35.3s) | 2.40 s (14.7×)† | 1.90 s (18.6×)† | -| CPU | jfk (11.0s) | 6.06 s (1.8×)† | 6.76 s (1.6×)† | -| CPU | dots (35.3s) | 16.60 s (2.1×)† | 15.31 s (2.3×)† | +| Metal | jfk (11.0s) | 862.3 ms (12.76×) | 769.4 ms (14.30×) | +| Metal | dots (35.3s) | 2.51 s (14.08×) | 2.09 s (16.90×) | +| CPU | jfk (11.0s) | 5.83 s (1.89×) | 6.12 s (1.80×) | +| CPU | dots (35.3s) | 14.94 s (2.36×) | 14.18 s (2.49×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 PRO 4750U diff --git a/docs/models/voxtral-realtime.md b/docs/models/voxtral-realtime.md index 862434f5..a8b4a88f 100644 --- a/docs/models/voxtral-realtime.md +++ b/docs/models/voxtral-realtime.md @@ -95,16 +95,16 @@ CLI flags: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Metal | jfk (11.0s) | 1.22 s (9×)† | 1.14 s (9.7×)† | -| Metal | dots (35.3s) | 4.34 s (8.1×)† | 3.91 s (9×)† | -| CPU | jfk (11.0s) | 4.43 s (2.5×)† | 4.69 s (2.3×)† | -| CPU | dots (35.3s) | 13.65 s (2.6×)† | 13.12 s (2.7×)† | +| Metal | jfk (11.0s) | 1.76 s (6.24×) | 1.49 s (7.36×) | +| Metal | dots (35.3s) | 5.03 s (7.03×) | 4.44 s (7.97×) | +| CPU | jfk (11.0s) | 4.88 s (2.25×) | 5.04 s (2.18×) | +| CPU | dots (35.3s) | 13.80 s (2.56×) | 13.20 s (2.68×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. ### AMD Ryzen 7 4750U Pro diff --git a/docs/models/voxtral-small-24b-2507.md b/docs/models/voxtral-small-24b-2507.md index 18b938dc..63c5e8b0 100644 --- a/docs/models/voxtral-small-24b-2507.md +++ b/docs/models/voxtral-small-24b-2507.md @@ -112,14 +112,14 @@ CLI flags: ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | --------------: | -------------: | -| Metal | jfk (11.0s) | 3.36 s (3.3×)† | 2.62 s (4.2×)† | -| Metal | dots (35.3s) | 11.20 s (3.2×)† | 8.95 s (3.9×)† | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | --------------: | --------------: | +| Metal | jfk (11.0s) | 4.45 s (2.47×) | 3.96 s (2.77×) | +| Metal | dots (35.3s) | 14.68 s (2.41×) | 12.93 s (2.73×) | -Apple M4 Max. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. A 24B is a GPU-class model; on Apple Silicon it runs at **~3–4× realtime** diff --git a/docs/models/whisper-base.en.md b/docs/models/whisper-base.en.md index 4f065f15..21f4dd78 100644 --- a/docs/models/whisper-base.en.md +++ b/docs/models/whisper-base.en.md @@ -72,16 +72,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | -| Metal | jfk (11.0s) | 50.3 ms (218.9×)† | 49.5 ms (222.3×)† | -| Metal | dots (35.3s) | 172.4 ms (204.9×)† | 161.4 ms (218.9×)† | -| CPU | jfk (11.0s) | 352.4 ms (31.21×) | 325.6 ms (33.78×) | -| CPU | dots (35.3s) | 780.9 ms (45.25×) | 733.6 ms (48.16×) | +| Metal | jfk (11.0s) | 51.8 ms (212.45×) | 51.8 ms (212.42×) | +| Metal | dots (35.3s) | 185.2 ms (190.73×) | 181.2 ms (194.94×) | +| CPU | jfk (11.0s) | 173.6 ms (63.35×) | 195.3 ms (56.31×) | +| CPU | dots (35.3s) | 423.6 ms (83.40×) | 463.9 ms (76.16×) | -Apple M4 Max: transcribe.cpp `e6a8a27` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-base.md b/docs/models/whisper-base.md index 34333dea..114cce2d 100644 --- a/docs/models/whisper-base.md +++ b/docs/models/whisper-base.md @@ -152,16 +152,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | -| Metal | jfk (11.0s) | 52.1 ms (211×)† | 53.6 ms (205.2×)† | -| Metal | dots (35.3s) | 170.0 ms (207.8×)† | 168.3 ms (209.9×)† | -| CPU | jfk (11.0s) | 373.9 ms (29.42×) | 347.6 ms (31.65×) | -| CPU | dots (35.3s) | 806.1 ms (43.83×) | 750.3 ms (47.09×) | +| Metal | jfk (11.0s) | 54.5 ms (201.79×) | 54.6 ms (201.42×) | +| Metal | dots (35.3s) | 191.6 ms (184.36×) | 187.2 ms (188.77×) | +| CPU | jfk (11.0s) | 185.3 ms (59.35×) | 210.8 ms (52.18×) | +| CPU | dots (35.3s) | 436.6 ms (80.93×) | 482.5 ms (73.23×) | -Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-large-v2.md b/docs/models/whisper-large-v2.md index c601a026..4275eaf8 100644 --- a/docs/models/whisper-large-v2.md +++ b/docs/models/whisper-large-v2.md @@ -152,16 +152,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 493.1 ms (22.31×) | 499.6 ms (22.02×) | -| Metal | dots (35.3s) | 1.37 s (25.7×)† | 1.40 s (25.22×) | -| CPU | jfk (11.0s) | 9.66 s (1.14×) | 7.46 s (1.48×) | -| CPU | dots (35.3s) | 19.72 s (1.79×) | 15.43 s (2.29×) | +| Metal | jfk (11.0s) | 597.7 ms (18.40×) | 590.0 ms (18.65×) | +| Metal | dots (35.3s) | 1.60 s (22.08×) | 1.54 s (22.89×) | +| CPU | jfk (11.0s) | 3.73 s (2.95×) | 4.15 s (2.65×) | +| CPU | dots (35.3s) | 8.09 s (4.36×) | 8.64 s (4.09×) | -Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-large-v3-turbo.md b/docs/models/whisper-large-v3-turbo.md index ce889003..ca4890da 100644 --- a/docs/models/whisper-large-v3-turbo.md +++ b/docs/models/whisper-large-v3-turbo.md @@ -153,16 +153,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 288.3 ms (38.16×) | 288.9 ms (38.07×) | -| Metal | dots (35.3s) | 649.5 ms (54.40×) | 666.0 ms (53.05×) | -| CPU | jfk (11.0s) | 7.60 s (1.45×) | 5.89 s (1.87×) | -| CPU | dots (35.3s) | 15.34 s (2.30×) | 11.87 s (2.98×) | +| Metal | jfk (11.0s) | 303.8 ms (36.21×) | 291.1 ms (37.79×) | +| Metal | dots (35.3s) | 691.2 ms (51.12×) | 666.7 ms (53.00×) | +| CPU | jfk (11.0s) | 2.85 s (3.85×) | 3.11 s (3.54×) | +| CPU | dots (35.3s) | 5.80 s (6.09×) | 6.30 s (5.61×) | -Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28; transcribe.cpp `e0fa0f6`. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. Benchmark reproduction: @@ -174,16 +174,16 @@ uv run scripts/bench/run.py --profile --models whisper-large-v3-turbo ### AMD Ryzen 7 PRO 4750U -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | --------------: | --------------: | -| Vulkan | jfk (11.0s) | 4.77 s (2.31×) | 4.92 s (2.24×) | -| Vulkan | dots (35.3s) | 10.16 s (3.48×) | 10.26 s (3.44×) | -| CPU | jfk (11.0s) | 19.85 s (0.55×) | 15.74 s (0.70×) | -| CPU | dots (35.3s) | 40.18 s (0.88×) | 32.22 s (1.10×) | +| Vulkan | jfk (11.0s) | 4.40 s (2.50×) | 4.45 s (2.47×) | +| Vulkan | dots (35.3s) | 9.59 s (3.69×) | 9.67 s (3.65×) | +| CPU | jfk (11.0s) | 9.85 s (1.12×) | 9.58 s (1.15×) | +| CPU | dots (35.3s) | 20.36 s (1.74×) | 19.72 s (1.79×) | -AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `5fccd5d` on 2026-04-28. +AMD Ryzen 7 PRO 4750U (Radeon RADV RENOIR): transcribe.cpp `cd0ea568` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-large-v3.md b/docs/models/whisper-large-v3.md index e1234bad..ab4d75e7 100644 --- a/docs/models/whisper-large-v3.md +++ b/docs/models/whisper-large-v3.md @@ -152,16 +152,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 516.9 ms (21.28×) | 511.9 ms (21.49×) | -| Metal | dots (35.3s) | 1.38 s (25.7×)† | 1.35 s (26.1×)† | -| CPU | jfk (11.0s) | 9.68 s (1.14×) | 7.48 s (1.47×) | -| CPU | dots (35.3s) | 19.86 s (1.78×) | 15.45 s (2.29×) | +| Metal | jfk (11.0s) | 744.8 ms (14.77×) | 616.5 ms (17.84×) | +| Metal | dots (35.3s) | 1.79 s (19.74×) | 1.58 s (22.41×) | +| CPU | jfk (11.0s) | 3.73 s (2.95×) | 4.14 s (2.66×) | +| CPU | dots (35.3s) | 8.07 s (4.38×) | 8.72 s (4.05×) | -Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-large.md b/docs/models/whisper-large.md index 35a5f0ab..aab7582c 100644 --- a/docs/models/whisper-large.md +++ b/docs/models/whisper-large.md @@ -152,16 +152,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 476.5 ms (23.1×)† | 465.1 ms (23.6×)† | -| Metal | dots (35.3s) | 1.33 s (26.6×)† | 1.26 s (28×)† | -| CPU | jfk (11.0s) | 9.63 s (1.14×) | 7.43 s (1.48×) | -| CPU | dots (35.3s) | 19.88 s (1.78×) | 15.49 s (2.28×) | +| Metal | jfk (11.0s) | 596.0 ms (18.46×) | 562.3 ms (19.56×) | +| Metal | dots (35.3s) | 1.63 s (21.63×) | 1.42 s (24.91×) | +| CPU | jfk (11.0s) | 3.70 s (2.97×) | 4.07 s (2.71×) | +| CPU | dots (35.3s) | 8.05 s (4.39×) | 8.90 s (3.97×) | -Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-medium.en.md b/docs/models/whisper-medium.en.md index d000b808..203e5a84 100644 --- a/docs/models/whisper-medium.en.md +++ b/docs/models/whisper-medium.en.md @@ -72,16 +72,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 249.7 ms (44×)† | 243.3 ms (45.2×)† | -| Metal | dots (35.3s) | 762.9 ms (46.3×)† | 725.9 ms (48.7×)† | -| CPU | jfk (11.0s) | 4.29 s (2.56×) | 3.37 s (3.26×) | -| CPU | dots (35.3s) | 9.07 s (3.89×) | 7.23 s (4.89×) | +| Metal | jfk (11.0s) | 291.6 ms (37.73×) | 270.2 ms (40.72×) | +| Metal | dots (35.3s) | 912.8 ms (38.71×) | 1.27 s (27.90×) | +| CPU | jfk (11.0s) | 1.75 s (6.29×) | 1.89 s (5.83×) | +| CPU | dots (35.3s) | 3.89 s (9.09×) | 4.15 s (8.51×) | -Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-medium.md b/docs/models/whisper-medium.md index 9819ae57..369d748b 100644 --- a/docs/models/whisper-medium.md +++ b/docs/models/whisper-medium.md @@ -152,16 +152,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | ----------------: | ----------------: | -| Metal | jfk (11.0s) | 280.0 ms (39.3×)† | 270.9 ms (40.6×)† | -| Metal | dots (35.3s) | 802.5 ms (44×)† | 759.2 ms (46.5×)† | -| CPU | jfk (11.0s) | 4.75 s (2.32×) | 3.90 s (2.82×) | -| CPU | dots (35.3s) | 9.62 s (3.67×) | 7.93 s (4.46×) | +| Metal | jfk (11.0s) | 343.4 ms (32.03×) | 325.9 ms (33.76×) | +| Metal | dots (35.3s) | 1.02 s (34.62×) | 891.0 ms (39.65×) | +| CPU | jfk (11.0s) | 1.88 s (5.84×) | 2.08 s (5.28×) | +| CPU | dots (35.3s) | 4.08 s (8.66×) | 4.40 s (8.02×) | -Apple M4 Max: transcribe.cpp `e6a8a27` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-small.en.md b/docs/models/whisper-small.en.md index a57d29c2..8f9cae57 100644 --- a/docs/models/whisper-small.en.md +++ b/docs/models/whisper-small.en.md @@ -72,16 +72,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -----------------: | -----------------: | -| Metal | jfk (11.0s) | 107.1 ms (102.7×)† | 102.6 ms (107.2×)† | -| Metal | dots (35.3s) | 333.0 ms (106.1×)† | 329.3 ms (107.3×)† | -| CPU | jfk (11.0s) | 1.31 s (8.39×) | 1.13 s (9.76×) | -| CPU | dots (35.3s) | 2.89 s (12.23×) | 2.52 s (14.02×) | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Metal | jfk (11.0s) | 119.2 ms (92.31×) | 114.0 ms (96.47×) | +| Metal | dots (35.3s) | 384.3 ms (91.93×) | 387.5 ms (91.18×) | +| CPU | jfk (11.0s) | 597.0 ms (18.42×) | 953.9 ms (11.53×) | +| CPU | dots (35.3s) | 1.39 s (25.39×) | 1.60 s (22.10×) | -Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-small.md b/docs/models/whisper-small.md index e892d400..e20617f3 100644 --- a/docs/models/whisper-small.md +++ b/docs/models/whisper-small.md @@ -152,16 +152,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. -| Backend | Sample | Q8_0 | Q4_K_M | -| ------- | ------------ | -----------------: | -----------------: | -| Metal | jfk (11.0s) | 113.1 ms (97.2×)† | 113.5 ms (96.9×)† | -| Metal | dots (35.3s) | 349.3 ms (101.2×)† | 340.0 ms (103.9×)† | -| CPU | jfk (11.0s) | 1.43 s (7.71×) | 1.30 s (8.44×) | -| CPU | dots (35.3s) | 3.01 s (11.75×) | 2.74 s (12.91×) | +| Backend | Sample | Q8_0 | Q4_K_M | +| ------- | ------------ | ----------------: | ----------------: | +| Metal | jfk (11.0s) | 123.1 ms (89.39×) | 122.8 ms (89.56×) | +| Metal | dots (35.3s) | 400.8 ms (88.15×) | 394.0 ms (89.68×) | +| CPU | jfk (11.0s) | 647.9 ms (16.98×) | 718.6 ms (15.31×) | +| CPU | dots (35.3s) | 1.46 s (24.28×) | 1.61 s (22.01×) | -Apple M4 Max: transcribe.cpp `4d2270e` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-tiny.en.md b/docs/models/whisper-tiny.en.md index 37cca15c..598f7ed4 100644 --- a/docs/models/whisper-tiny.en.md +++ b/docs/models/whisper-tiny.en.md @@ -72,16 +72,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | -| Metal | jfk (11.0s) | 39.1 ms (281.2×)† | 34.0 ms (323.8×)† | -| Metal | dots (35.3s) | 127.0 ms (278.3×)† | 125.8 ms (280.9×)† | -| CPU | jfk (11.0s) | 165.0 ms (66.67×) | 161.4 ms (68.15×) | -| CPU | dots (35.3s) | 389.4 ms (90.74×) | 381.7 ms (92.55×) | +| Metal | jfk (11.0s) | 38.1 ms (288.65×) | 37.8 ms (291.22×) | +| Metal | dots (35.3s) | 142.8 ms (247.49×) | 136.1 ms (259.57×) | +| CPU | jfk (11.0s) | 93.2 ms (118.02×) | 97.5 ms (112.83×) | +| CPU | dots (35.3s) | 246.8 ms (143.18×) | 249.8 ms (141.46×) | -Apple M4 Max: transcribe.cpp `e6a8a27` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. Benchmark reproduction: diff --git a/docs/models/whisper-tiny.md b/docs/models/whisper-tiny.md index 26d836b9..3fcc008a 100644 --- a/docs/models/whisper-tiny.md +++ b/docs/models/whisper-tiny.md @@ -152,16 +152,16 @@ ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav ### Apple M4 Max -Compute latency (mel + encode + decode), speedup over realtime in parentheses. +Compute latency (mel + encode + decode), speedup over realtime in parentheses; profile `asr-publication-v2`: mean over 3 iterations after 1 warmup. | Backend | Sample | Q8_0 | Q4_K_M | | ------- | ------------ | -----------------: | -----------------: | -| Metal | jfk (11.0s) | 36.4 ms (302.5×)† | 37.9 ms (290.1×)† | -| Metal | dots (35.3s) | 117.1 ms (301.8×)† | 117.3 ms (301.3×)† | -| CPU | jfk (11.0s) | 174.7 ms (62.97×) | 169.7 ms (64.81×) | -| CPU | dots (35.3s) | 396.2 ms (89.17×) | 390.3 ms (90.52×) | +| Metal | jfk (11.0s) | 39.0 ms (282.04×) | 39.5 ms (278.34×) | +| Metal | dots (35.3s) | 139.4 ms (253.55×) | 141.4 ms (249.80×) | +| CPU | jfk (11.0s) | 99.9 ms (110.09×) | 99.7 ms (110.34×) | +| CPU | dots (35.3s) | 250.5 ms (141.07×) | 253.0 ms (139.65×) | -Apple M4 Max: transcribe.cpp `e6a8a27` on 2026-04-28. † published before provenance was recorded; not yet re-measured. +Apple M4 Max: transcribe.cpp `77b0c93` on 2026-09-14. Benchmark reproduction: diff --git a/samples/README.md b/samples/README.md new file mode 100644 index 00000000..6db26f7d --- /dev/null +++ b/samples/README.md @@ -0,0 +1,67 @@ +# Bench and smoke-test samples + +Audio here is fixture, not test data: a published xRT figure is tied to the +exact file that produced it, so a clip named in `catalog/_benchmark_profiles.json` +must never be regenerated, re-encoded, or swapped for a different take. Add a +new file under a new name instead. + +All files are 16 kHz mono 16-bit PCM WAV, the only format the CLI accepts. + +## Per-language bench clips (FLEURS) + +Pulled from the FLEURS test split already on disk under `samples/wer/`, two per +language: a short clip at the same 11 s as `jfk.wav`, and the longest available +utterance, to stand in for `dots.wav`. A single-language fine-tune decodes +English out of distribution and can loop until its position cap, so these exist +to give those variants a benchmark that measures transcription rather than a +repetition loop. + +Source: [google/fleurs](https://huggingface.co/datasets/google/fleurs), test +split, licensed **CC-BY-4.0**. The FLEURS utterance id is the original filename +and is recorded here so each clip can be traced back. + +| file | duration | config | FLEURS utterance id | +| --- | ---: | --- | --- | +| `ar-short.wav` | 11.00 s | `ar_eg` | 13811922940508003061 | +| `ar-long.wav` | 25.74 s | `ar_eg` | 12943222207631713208 | +| `ja-short.wav` | 10.98 s | `ja_jp` | 8296538110626558656 | +| `ja-long.wav` | 28.20 s | `ja_jp` | 9518252661993015549 | +| `ko-short.wav` | 10.98 s | `ko_kr` | 11859537746411417197 | +| `ko-long.wav` | 25.80 s | `ko_kr` | 15152963524414515048 | +| `ru-short.wav` | 10.98 s | `ru_ru` | 2668014690611039917 | +| `ru-long.wav` | 33.84 s | `ru_ru` | 10388523902227354213 | +| `uk-short.wav` | 10.98 s | `uk_ua` | 7177130321767122387 | +| `uk-long.wav` | 28.92 s | `uk_ua` | 12340201221281017924 | +| `vi-short.wav` | 10.98 s | `vi_vn` | 9897090359729012443 | +| `vi-long.wav` | 38.10 s | `vi_vn` | 11806133943011932690 | +| `zh-short.wav` | 11.00 s | `cmn_hans_cn` | 17639585860488007329 | +| `zh-long.wav` | 31.12 s | `cmn_hans_cn` | 5655534691025010514 | + +Regenerate the source pool, not the clips themselves, with +`uv run scripts/wer/ingest.py fleurs `. + +## Everything else + +These predate this file and arrived inside unrelated commits, so their source +and licence were never recorded. Treat the provenance column as a known gap to +resolve, not as a statement that the files are unencumbered. + +| file | duration | first appeared in | source | +| --- | ---: | --- | --- | +| `jfk.wav` | 11.0 s | `785fe3e3` working parakeet impl | unrecorded | +| `dots.wav` | 35.3 s | `785fe3e3` working parakeet impl | unrecorded | +| `dots-full.wav` | 305.9 s | `f3d68a6b` add more reference audio | unrecorded | +| `german.wav` | 29.3 s | `d46b961d` init cohere support | unrecorded | +| `ja.wav` | 7.2 s | `3a8aa207` basic working sensevoice | unrecorded | +| `ko.wav` | 4.6 s | `3a8aa207` basic working sensevoice | unrecorded | +| `zh.wav` | 5.6 s | `3a8aa207` basic working sensevoice | unrecorded | +| `yue.wav` | 5.2 s | `3a8aa207` basic working sensevoice | unrecorded | +| `ru.wav` | 2.2 s | `c6a93377` working gigaam | unrecorded | +| `death.wav`, `love-loss.wav`, `whole-earth.wav`, `jobs-silence.wav`, `noise.wav` | 15 s - 233 s | `f3d68a6b` add more reference audio | unrecorded | +| `product-names.wav` | 56.1 s | `060e7afa` finish up parity with whisper | unrecorded | +| `cj-swimming-drop.wav` | 70.1 s | `98715301` add iOS example (#36) | unrecorded | +| `multitalker-2spk-mix.wav`, `sortformer-2spk-mix.wav`, `diar/` | various | diarization fixtures | unrecorded | + +The bare `ja.wav`, `ko.wav`, `zh.wav`, `yue.wav` and `ru.wav` clips are +referenced by family-doc smoke tests and by gigaam's profile override; they stay +where they are. The `-short` / `-long` pairs above are the bench fixtures. diff --git a/samples/ar-long.wav b/samples/ar-long.wav new file mode 100644 index 0000000000000000000000000000000000000000..cffb4c1311aeca205f394c1446bd16e90d3be25f GIT binary patch literal 823724 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 z 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

)h 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∈$o=R3c_ru`yuWwKoA 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%0Doj|jjs~+XL$*U;;Ba5RhTlKamx>aUG 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ΞKYxg{n$VUzvprzwGq@?NEA$Sr z)dZDlEB*W!yH(iSjJdLDuUXrpGAAwIbp;*qEln|&&k}uf8|<%aqsLaDc1kXw8Ost+@f;Q@4unwkkD`vh9*5&54F<$fotGQ3NF@^N#e7RWiogxA-|PY>|L{?7v5 z{zUp>lCMYYm8EHyefA~GT2*WBdmgrf+gHHg&!C^euYH>}yC(5JzDV%Z0#)ObtZuky z6dwIN(c{49sH(!FD<&9fvtI(a_=fAl$(#I={x5cc$vnI$ok{Uwsx z*x�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

q5!#9fx5N*Z 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�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 LWk&To{dDm^ir4CB literal 0 HcmV?d00001 diff --git a/samples/ar-short.wav b/samples/ar-short.wav new file mode 100644 index 0000000000000000000000000000000000000000..e2c885181e9ee49e29745d337a875ca3ac52a66b GIT binary patch literal 352044 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

VTgx4!O1u>9eRm$#eudtuviH5=6e?c_b8NNn5 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

Hwec;!TP0ea}^+50U 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

KoHrD5HT5?ddB;I< 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

;YO>KpSRvWn=08R8N!* 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

3Rp9CpAfSJt%=U`p=7=7+cFrptkVYK62M?PBt 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%0D49eNJ&xUQ5$Xa%`_Ip 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�!-~3n&X99t<++GAHs`VXcyY?u$gn?Jr+r$o z2Hl--=`3^$qk+o+_A&i8nABj^21>gCgMEOEvb8!G ztLZ8`TBTR0MRp)z6ZM9o-l^DRFC#i%IUq6tgcptb->6QUb)mV!P-w17cIUy!R*5i; zmg-34sSzAUKyzwgPC+&}A3fhKT=g`1`FG%K-@rp7JC+j2?(lN=A3Zk0B{L-S2gj6W z%-bCijS*R`G!ru!dC!HCGZ}Ss)K-23TpM%rqqOHPUJejg?K%>%#QJb*WwcJg5=O2rL(8om6Ojib zqmH2Vfqz)5FmWDk~GbiZ$iF0BQ@+{h1-$T*t!BsCJ`(XCQ;>sW%lEYBjYU z*xSH$4r}Rr?ox8rSJFLe8G5P>$_z&4>rwvFBH`h_!j(sfCh}+)hpz5jT2KabmK}j( z@Ca#1OmR$pFXmnGH?^tiQ;q11v4+ebzU2tV&^ZgkkSzmy{h#qTzZ+Q-e86=@j%fs_ zJV0+kv-g>=>r*hxDv;JF7c%CVnhJ%!%>Svt$vmht;8}BkVN}~Qo1^}qdca1G1}$`I ztz2cao(K~qV|5<#Q(-1Al~=j;6{#S`ANl^=pNbXg>*QnQfP@x9^+)wRdHlssLT zK|N?_l|v%)zo-|~E1d?ldack3-F&RJwwYlT^sMw58oj_;?GxgdtFK-HYDLAii0BoL zxtgN-IpdjfASFE7+$9~zrs45syz($D2Xye@+POc)}r4=ox zIyCti7mekNk@!^MY=4T_D4%myivOLd_!bzRF*@c*cnFcOZw6#+GkA6$S?1b->Gn&x z+)--la}Het^AWj4JQw!od_JVo_-_lr^=&Es0(Q<;jM<)t4MWWG$n=;;;<)TvT$eE` z_s@2t55@jPuauEvcI=_{aL*L4%Ii_aQd{ z)I+S#ujozKPjgQKQnuhod}Rpvp8FKN%02Ua<0JPwR*?9=aVx?q|3#1ETkgHzVt$Ih zdjF<JU?foYxd1dao?;FpS*c5mb@0

cm4a5GHmjDU|e8L{vW@^oqyD)=-0ou{{Qwp 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μ{*s+`&ciEmuHFnkOK2eJX6CzG5O`hjrf+u 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 ( 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

x{ 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¨rE0=2vZNH}hFF;;W6Mf0uO%6g{4^!$cxSD$k;d)TFl*-$|d$1Dusr-4A~$&6-YGa!*q8X?)R}ul$4kD~G%sWLJ9*b}{W~GjFh^#jAJSIO4${9x z=$Y#@SFp-i=Al&AN$ThsLpmteB%PPv{~NGz4w#o(WgLogav=Jua~{_-pFY@>+}keo zIK>ia`+~g94P?Y@xeGlO$_=f1kiF-kk!#T0_K@$9^By|f;5mUFMmmMD#M z7s_-}Z2QWcW$CDS%Sn``tv#TOPP!FMNcS4;GtUKZ^tm%>+x)8bsFDPINeYELNA4xO zgP~DaIVnR zWc9qJ*qG%UF?C(lboEUuM^8OdOV{(Y^?|9h)-%^~>W8@RE~k57hPa#OKAy51cS`kT z=`OSFS9YR>ptu)#g1TKwoU~!Q9*U$NV|BXxDNoU^^<1PWe?}4&>uN2nFW{#=?d7yr zFK^mb+PkjcZJpe^`~CWAO+DT9R)S-_ebT;C8@uT6+Dox>b6umvU(m+^JE>*Q&3m?_sHk+I|}KG`^tL%`4cgf zIZOeT>c~2`&QIOk8C5>-35}jhmh%APf4NT5Q}ULR-8?-~9qH2O$d0c2;bNM)9kC|1 zchocW-_V@I=#ITw5X!sN1C--;S6ca#KWA?L>*wx!zKdJNcl|FvBB$vXcXT)&lw*4G z>F<#6>+edRUq3;nyD$Iyv9I9?=X!whj3GVjDx;CQ=^0Z`KuVWAg-q>ebq+S<=aZ*x zWvAWKnVybZz_FsY$^3F!igR&%iF%I*%IGIVMlDlj#KqV^TB{7{TWDOvc5z+mp83bM zL+TY@tFcaYOv^1PrOs}*XF<8!?Jo4>ZuF`>sy@0NeNSdD;biX0PS5JbxRwN0kwy(g z*W%)&XR4?{8**NrIu5bIR^vt)vC?hjbneRQXFfK~vD?c0kZ1A8cH0BOLwyA0 zuI?hZe_U5}E@LrY*7DLwe>rcT*1yhCN$q$oYURk4W*RHj3`IF()m)?2k(lqX zA`UK^Uofr4b+jpiSz=VIGR1ZII&oY4m$GKg_bLw%Y9NjECq4!jT@}WUMKDjQsHa&^ zP0A@rS9ZAPNn}@aICwd9PwlSD*z>pmY8fpOJxrd;Tl1-K9r&zWy&hTJr&nhnS{LrG zcp{8vLaa+4sBu$gDTx!V?G=5}-$r_Rx|4aODQ#mnHhV>y~kp`NiH(Rx1`srF$!5roH+ zla;;+TcNAwjo6-XT$Ehs7UqYVNIj|#o%Kh&aFr_dDWe!EK5Nh5UV!|XyqP$uKA}En zE?}NM3#y<7>9IiZ5XS%iFhBhWJ>k9hWe4(ieA7Gb=}?8syO~-Z-4l?W-cdtOaNPhr z+@jkz+?e@kJ$}&)^9076Bsr4Mp`&O+j>=Saj;ucvYx$Nuim!O(9*XTOfN%}=1Zzef8*eeDB*^eON@7cly- zA)S1_a+D<*+j@U=ENcO^3UB(piDq5Sp2%t9&JH>2RLUvNg!c_61*ahE=acNK?IPN=bSyZxP+Tpn{W)Y7x+&je%Do;`xGzdw2>d!wTvMfe%o z8qu{okr-zK-|IS_O8K$-a4UcT>e9Rjn(5i*(In5QvN@ex%~|^cX<7O!wP`l^oj`0o(1o*Q^W_p9}h^uU##7%OF!2FN+Nwvl$O#4o1_H(f?o zM?%`wldGOst+|eql8cw|BVvCEX(4J4<|jr|krhJ+_z$fbG)k9x5=r`z*YJ;^txzK1vPd{fVRT9tTObcuoWAKx!h zJNXsiCur&lh3p%qzw^Z~NrTYdf8<6|Bx#*DZLceSu5A` z`){DVKiGOCltNFa>KdH~Z{R6K&R?$O^$qvT4qG>2p7%7{_=ENYWMQl~EV)l-H!YUL zR@X2YaapH?7ZO7q_pV{0#}lgCX0ChSnl$lkE%85}zRz66qk1v_5d27xTYvoo8 zvMbQ{;%VqXJjkRh%c%K2=Vsc6b&6tE83oz!W%h6LHj|Tw)c!jc*qsbD_$?GxD|&ciJ) zT5{aZrph_&>F5B9srqYjL_{~%ePbmzfwR}(Ydi_XACfXDZC0hWH-Wp_Kx%7xcDFt{ z0&4I}Xu*N3VZRUdo&aB_?(=y-_A=o}RHc54r>ZG-qFO*Cumr(i| zD_rG$QbX+orP~XDk8%Z`3*|g3&MIwi97R{W<}Z0VDUMQ*K&bSe)P?H*=ft+0_ax1A z4y%#ldLpY;``td*)<*s4tV^X5%1tf;p8BE8DU`nh+6RNxN)Qf)pU~I%Rm7W2U8H=| z*fUb|Ob_zwfyrw_2{u6A>7~#Fy`?{&wkUI&1okRBlqXg@!83w9@x${pf*0CR$nSWn zMP`<8@8X^FOt=TFsXU`Yh$|Vi7XI6NatO6gQk<7FnJZf9t^KVfg!7m)tm|aw*qX(% z0u1eP9t(XB$LIc&D|v15T}^2N?WotXLmuGQ(9<8HA@&{Cu?M0tw;yYS9|6T%SmU1n zOdV6#(Zc7U>o|$pKOHU2x58IF1N?k9|Jv}s3~XJQ);)t*%d?x{sgmkkINv#%)ckR0 z&^@_(kV~t@rN)td>C}kwJbU>DEh9YhDEwK?BpHv&C&U?XGiRrH_LF5PS5s2z`b*x| zxlkWxt_8&WNDf^WJ9BE);VL)#yHt|;Io9nF?cXA)jemjg19BHqA|=4eMROX5+=D!v z8d!3XjtBL+ocW~x{@>SOtKQ-qOWwsid)>XNtRLkkt&c17@a=7-;w-J4^?I=OLi*%* z^kMdgMt_&y`T;AA|Ka)j+>fQN^bLI-<5VtlNvMXWajgwTZ%u!B+S_Z;Oy7d=wV)>J zg4g~jrS}}FXgq4Iu1>gKcP9gBB|+{LMtbv1`qq_+`g-xk=NTN*C-u=*q0jUxsl`mr z@=%7SorgaygtYR#fgJ5ECBD)pc{MflR)^;4%V1r8mSC>h63hRH>-zgs+Ackb#-sFK zT2iNCo3FINIjT71%+{`ir0(+W;Yu7G_JcItv7uG1w862V|25A=Rqs>ktY^^Up&`Fv zWc)WY{7BY%r!Xg;!tWANIUhRulq{?X#9xm7=Z3&%Q$~xvCOr+_6Dn5&uUDfLYNR;U z@9N4`w^b>I@ON}hr9IMcX^Cquy?9ECJSQfyTr~h=6D7386nAD^r7DH@4B^Qg)IGOd z>52JjBkT@J@L1hpd0RGx;a!S=Q7I^$d6Wp4dt<^@8ZE6ZIZ*NRVzrtL zdTP}&Q~W!JQGG19w?AvSz2JrqW`;bP_u$|eaKcvrG2u8jrRt5>6Cu}RHgu2WU!boW zb~BoO6P`wIF3^>%=9lB=Z(#fNJh|(s{)j6AIrW_O=jmOOq!vpXq0llu(U=9)zKh)cmIt!VtY>I*K3MRJ9%WTYFBi%Oxx!AL(`3naw5 ztAXsUxdv0}71>N=Q;w>v>N6*6nJpEvePXThzO2Q>=B&fqZE|HV)Z{2Vz40>Wj~=`a zLK53KU=2A;C5pQO9cnb3NEedg00(S(0Lwmo`&-WDA2r#I4C4os^c} zKyBq3+;v|9>{uRrR}$y!EBB-wzx&pXNqf>cMwz8j6VH7!wJD#$%&MiS>o&dWI_p}h z^iHbk{(0nra@d~Rd1FT>oa=t4$pRVpU`>Mb3WC;xV1}j4t;8Qp6GQR{V@%F9#0#6VQ1f>7y6e_W911e zQNCVdq~~fn2r<_Nt_PH(D|>L2w{|z*YO}C1r8_#albU&5j92SX&Q#1Dre`8Q$V%Fo zO&aWpuW}Ebb$2j(rTYSpFLbAGd&YSoMwksRc zTDfbr;m;zD9;*&S{^}`Bmm{fuChPj`vCrEbIO>ahJNn@HP^J<3bSm&W1w22rmf6EMiG^x*r`o`~=X`RufpZbqph7s(^ zl2ba);2df*g?f6*p8BWSL~MXX(VMB!TlwFbQr4o+<^q4!xz}b$FY$6%*Mk4rk1kDr zt=I8nTGDtH^fdB!yj}$d?K$~9Hy~Iy_ zyByOw#8yT=g_b-2$TPX#QZ^nB;I>LWMjvMG?s}rUV_l9;37)vRGuC*XYVBkd%V@_H{G8MDY_$gQwW@qEc)bRYR^v9Ok6*}$IfHS3O$Sp~M#^i|4U)on z2Ky0k*I&ca_%3)ydK>?qmGv3Cj{hgrL9gR#ufK-z{}F7qzJu4Pj{%{l&?h$oM=cyL z1Dc-c@K-S0G2z)d8$(y$MnAm0vtWBRV^Xgl7eL7mgrENdX|AH~_n@n_25TbWsLzjW zxxNm%>>6o0E!0Bq3^@K1spaLoc{ZVX%=+3|mG-U!&dHTaebsN9OdKuNq}NIrMwpKm zr7yLfcs9`SjK1~2?x%wf@n`S&mJe{omcx{LmfulhN6+NSr(CFDF#P~l-N#|e zdl;>M6_~WxkY_s{NqbKM{`-SZw|6*lC9~g)!G)dhM)P@Qz4tM?*P~rSXm20K3dz01 zlR8+P!wA$%{OZ7UTk`)9mYtquuq9*L5qbwB?9^_4JPABiBgolpKB%B_ajmCvrlaSz z8(Z1G`$KBG+zu4vnU)}bPrQ0Ay{DC&9u)MGwgR+4opb%#OVvD?T#2h(fqMhlb8(kK zt0G5%TGQ@8DOZwHmSd1F@=Ra%+T=MrL(zI%N-h2XM*arKdZyven16o448J$f{W9?V zF1xH>U?$rO$Sp+O-U5aC6jr}SFo(ScXnP*X@5teF@;V9ncMOzDK2XinRcOIh#L^;n zC+4gdgC*+LUPQb@DD8hqaXJ)1?b>CTpVnZG+Zw8&{oxLj^kU$#C^&RC^un_Y&VZ8X zspAS-r^cUhTcPV7nc6Ro<`GJkM|Wm+eWiYqx@OcXwaavo#NAj?*IZWT2sL)F06nT^m@fMcsDCC)Jy&mt5{` zq&^u~-9w3&f@A9IEy2v7rt134)GzI9QMF-Qm3n#_;sxOOX^iq~IxHBWB|^*gKMTli z1Wvjyy8$iI4p#pbIrru-j5*gc+OFxhBs{zJE%MopWI54j(kXdRHk&o&)5u$Ttc=_} zmgr|h)6CsJC0L$i>W+atfh#cOP;v!o(`#KKPv$;l_FS@)B|XS0-F292N2&Eiz(Gi8 zANptDt6#c9k^kjf&HaJ$ub_;c+u|7|CxGJ%($?3~_SbY2;$6Ua$*vBbNqQRjdbYVE zT@NCz;Ff{^QG)s^uCF4Uv(gBdr8W2ol&EgdwLoefprofty`L#F@tgF`8NB4^^r@AM4ej);3ro&h2M<66F?9PS0{MQmB}a+N60rB0Fjl@uV>*shGk zIO(l-Ti~ihELBpH@vqIc`!_g;#Q&sgDO~sdD+%yZq&=+?`n&oRXjM3{>}mwF38y@adga zcO-7=1m>KW_`p%J=4|6SGqOAT!F87q7T1e&6$7(tSUWkN z>4U6ABRN%07b%NAW}`DJT$FeDujR8l+wNtlho+XP5=Ui@?s1(?Kb+8UZbx=&`Xj-v zVQR00F{klv#<+G(b0__$mF86F+9kk6IH?IgFRjhllAE#0e>H1_b?GJTGp164r;Vul zI<*@M&fbeKrdNi>uFaTH*K1AY{}sVmB~jw4>uLX$u*wbTcgI~7_x|)wqnCy39Eg2N zorI3-VkK-+59J`Pf71)<)+Z^l%~X7e7c{t^o2^burx^S(rAsKd>&eU=yId zd^cjXIk=J0BIhCR7Z)RD{5u1wktXb zmS-<2Rk5EPbB;Xc3S+8mEJt%4C5mV29YkWQ1i^hjX`W-v{Mmrb4c(nM7T z`3bQu>SZR{KQvSv3(C}d<^4Odg?xjry1?YDtA|? zuxp)dpslM=zZ=1I{qvjxb@9CA`{Cv%fqzQjm6W^dqb-B7MEkh*rfwrm~8Y0|snvYlI;f@t;Rpsd9;*?VR zb3G@HxN1>$CXPgoq-4G@Sk5G}yNt^0o<#dyYn*5)J0A4p7wsgmDEnv53nk&RH05pP ztUO50J7aDEN=}*6sG)05|8J$wr0VXeD&bZ(D)(ajU7I^%968z;7*n5E{)^e#A!IDL z#&x#1nV)!nbvH9OJ524c-xZcSFG>KNyQ2f=&WN^S`n{Fgi@u}0aXh!W1pp=-j$Xqm-dv=eOX<66Hmfl2aA6O$0n6^CudW}!`tC$^?~6Gt(Ddk+NNyFoqJ`2 z`qfyCR>7)p~sicfCc(ap}v!lU20~pAJW|JmcA2JzE|d0oPj2P3p?nlacQ|Ky2G$ zKdW(QtK^fUU|O)1Z%Ef_{v0=seKio&UXY@RDM}Z$;TKoro8{G9n>n)L<3#$U^fnkP zKKm!%mVfm}9Z|;C%atC~)mvA0SZ+a#k^Y8fbFBLBT|5T{8AF~Z8s)L4@v7~L+OBFxI;W^Vp(H+D9fgG&Uh#0Keb-#H$#LbF zbH2}b(T-9(d@(q?PfBPVHEQL%%jcZxK7hMBjw;8DzT?!QQsU|Ct%Z@hu-A8OlAkj_ zA*MaF@_wP?IJ4DShH6ovJ#_4H)R%ExB5iWF#?^?p7QIyQUH(PQyXY&KmE6N z-II}bagR~&H;d8EV2*Unz6`J9zJ>ZG(Z;vGo&TJjN@C)kmbA|C6#D7RCl#mt0n8MqPvp%iO@f6>3~IZF{?m1INKVVF=@U#E7rlinfz?AzD&b!xF=(O z+pDhK!6G`<17D&9fkxdj+3;|86d3?cdeH-l5g=Y9@#=+W()iYA9wr0H3h@uHl&2Y#Qv8T z&R(F@K9oQE(dL+v95Mc7ua82yImXc|x07*fZH0eQ$oYi(asNB?Kz?4>q_wu&+B+AC zd-b1k3{NeTOomd0a!9F!n7L-Y2n7oqk|yhjtSL+tS(){;%|bJ?f;d-vzdc}Cw#YV_ z%CtV&?!a1Z#}@j}2XeI4{tHJr%aoN-ZAwD|)vU+8+8+OGvn>yAN0$60W!j$>8*1E? zn3VQZJtemavHZ&480P2(XWGp}lCa&4_hu63CJktdxK0; z_jAp+2Qzvwecr5J>RUZsvAnn1x2N{K$_bQHuhh*r{io{Py0^Mj?fbElI$x>>`}w5? zqibaRz_rq}Jd+~%7A#sF+ShujyfVJbFEy|FS2-Dn39Yn)_f|@)O~HIH=A3v7Ozh9# zcYg#|{`s0d_nQ9qYeBSy`eYt`JU6VB)1LY{q^!{~D{e|`xwd%qB_S1Vx;z)3nNn>f3{X-0FJ^8GNcaEqJLLSO} zMq|1Et@W*?_*SJ2erexkweMS-8+Ky4nobhgjB5l z-JGh_+-o&b9Blab$Ya{IR&v?x_L>l5WL;CdQ{|pg3!=rLJ7%-;id4bXsOwQz%E}k~ zkJdpn&7)cFHTw|R^-=;+zY6zDdmemJ1~d3mE@25NB~P)|^IE@1%A(Qks@`8)Jx9Ld z8ak`Xthl_^EYoOAAG;b%#(%0F%)Rwq#?nN%(Bk!<3PTDbEHTd$mp%GRKmOpeZ-b=` z<~|rZ`BwZ&ITj-eg9;T_NiKxdtJTv zVWeEG+U;}VwcPTxz5CS4t#l*7&Gh}BG5lGJx>r3CR&+D+ ztVV4b#VIam^!ydLwE1l;oJNOaWY-uSg!1Uwe>6p^yxQn5Ix$EcTD%rBG4fuamhNA@ zSGtFC4`k{pyau_&g5cmiunw*S+Q}iQTMmP%iuwE)!NfA5#72nWvmljO0}L zc~5_tCU3dVD35=}Z!@BUejEM0VNIJKi^<8=i(6)K7K7{B{aEZZB*q9rW*{c(yKNV*KlJF#x|^C)LnSj z^ThXluZ-=j%)F*fZWX)591QWzzwtwZKl#>0d+^e*s2@7}&!fll#5vSxZ&W%IprvSE z>S@;QZNBW!rj<5xY0bOd^UG6vPcE5FP1|OdN-_4Hc>VCP`BgqG$2_He{j?R+u<`!# zeQdf4sWg@6U|lND!QA_K7DYCn{`275;FrO;W4~3M`uB>}dfum&Q$2eh{L;@Q&uQ!6 zb8BJ0gu>K**gxCz*iqf6LQ#THih3KQ9r-qv@+73?uJ2) z#)f5vue5%z^!=xNpV61VB2XB8&AX}V&-`ZgmpE0k@$Xfm-0Q8yO_}vxu@XA7@}Kzr zkAOhtX-n?UlbJ>PAwCbr8U3~YUVKA8te)FU+m}N4HS=;^OD-2_i=idO$aAgp^S#Lc zd}?tA!z+gh9Y1Yq(65i_9`3K7U%v#y^KI~{mDj#jOuyA%_1(nSGu{j{Uf9Gr{G-0i zoNE1}YBp=-TK}U=TmiN9Hgz@tHXGdrYCDbH(#*4&YMn@d_uQ&v3(W4AQ@ zbP25zT8av(d#gpuC-Yl>PHXAgQ!A~W+6v zjO7dZoP}{KMr+6Drv{n!Wo(!sgBUjPdwr>U!-9nL!~4&bzx7CY?a6N~ZocPhrJ6JM z@hM7$7A5jt&!I!oqVaytJqfRP^*&zg%xHcwR$^BC7E<4nLw#@gjSgvbNE~aT_P1|U zt31yc81{1sl=>m{Ty?4Ux=);!%f~sn z{#vLZ$th2xzvR7L2ftT-Esuh@Etl8OLNCwS59%RU-%&n=zt93we+}B^s`oHj+rsxg zXAy435UtztrDPd{T!*c#|5ncmse837J=wqZ$9|(UjlvbB%p5nk(wpe5_D0+HS~VKd zzWU@oaQ*V7-g0*)9sG?AY2U4PYFzcMkQT=;zO^>yN!nRYMMr(_|MlMozYNA|Z(W7&&2Md;UpL02n9(h$l-RD$EEkBn(9AWnZ?^q%Mh@n0?tx|GDLpI{2R4`gyjn(Yd9x3LQ+@-tttfY$dhQ(-K>0So`Zg zx6nEJH0R0?3qv`AfAwDXhOK=(t+*{LxwQ9*o*Gvk9=%;B;>a81D$j(}_({p_T3^$G zyp6v0znN>L8H|_k`s%mTpkn!@|Fs`p&x7~zVkgGLUj}n{^xnqDvGGG6POYj}TR+Th zZZm^j<=ii+|2+Q8TfLpsRYv8NIvQGE49W9goC?joUv59=elD}y{_*15PyN2ibEsG1 z55{P3Md4cNqHpcXjGoNBeQ(e0DYEs%X`xkvmUi&Tn2DYGkG=M5Jof8&>01ipTVAg9 zlr$}`gy%hJ`ynmf*mV7G{q*%bSQA5A9TKO7_@(_SyyZ0bE#D1mPc6oH;p5GaNip6$ zJeb$mx2o4*J*!QR%zbu7)6C+I|GkB_r|Y1oblK3)3nf8DWS!lGf%C??I}6?-on~bm7DMBf%-c7t>x5k zBkAhh7?o3n4fbl~UFD9xw=!oIb9Bnb=KEu*6=Ui8Ak0R8AN@WU`|fB z;^p41meJz-T&4EYRGj3L7^7oWp2=}APU0rV{+E6kqw{OuQolKIZSAP1y0_fNhO}?> zWSo9G(&k5|#Pp!7rvDLGl>U+IcofA8K(5|87iCfpYo3dioQ%W2i z>igI)RdU@Er>@B(`5L22t(;m|Jtc;3{#6|+ex)D$((+BJ!E4giwSVu&YppXh<+M`j zsh?u@pDWkdPx)|CJYHvn$5*{;PS3sO?z-E5^~HO$7E?zcf8L|x`(QwK%h!riUm89X zl-k`mDQ|477LupLt@xG4U|lPY_x4v@Q0|p)%fS%e>c3)CczYjAQ{jW5mOFl46~BKU zOxyo5^XH7wP=mytXw(*MGghM>GkfaSz?|#9QJBi1%1t?g*W}W|l22Xho*Y`N{!`)% zmSL_fO}$krzqMaKeL_>Gq%xPvDdEOxe}iu=eB!5m>WO1Lyf3Ns=(>$=UB8SO)vEHD zQJj8WkIeI&Exp=gU1ufd#HpBde`H$v&y;IHs_uhr8$Yzg$@dnkdaW?IzEpTdb{o+N zH&#;Qsr7iJA577YUpXXwYF2r*Z-(bBF$S+y>R{-ce9N4Yxn*!38(m6&{+X5dqtpMh zyg!_ob;d9loAcO^8Rzg&zBWwmryd>J$Kn=mbgcGeqNj%Im9~Y9PE#>PhtJyk!%ICo zWuygFp7$1#x1th;Kb+sJ)#}lU^~mGr!zrPt)U3hd;gmFMCH!M!6@EUnTFeS`W+hHa zpE%~kUmjY$ANf?)IR91mdTTSLG3x7JjVeyN4}PD$xADuEy*%bj?1zVKb+|5kGa>}Gq&{f*R1r~ti&<@l+|XwniWTv zJ*)YRPWOM|eP$Rxv+oZDMq~4AAvH?Ox1POc1XSqgZx5vwkFPWhLJblVwV)q2u@h2P z@A%lzo=4@7TTFs*EKJk|pXYeWQNtn+*)n7f;y~6vY zREorDseKf4WBp<|&~UnaiKZkmbX z*O%5qRjOa|Kl)pxshE$Q`#+{; zt4Tf8y=qeRj(=L)*J9K+@A+%cF}-2^dkd-DE2QGJ@JiS682pyE`dV*Em0FA!f4s2K zd03bH*VA~Z2FpnOE8bv^75c>e2?+EdFo-k#FJqr)C+^tP4<|%i?w3CLef+%pDF#Q% z`0<|zoe=~A%|V#9_!EV<7*9MsJ|Hlq24F@ zYm%|PKl{Ph#u=-dm~yHXrZ6Ob^*p++iB(@iXDX~heQ(c+Q~9=g#b_ZuCA7W`zV%~P zjDFb6o+skp$A*s$89(pw;*A$Je(HZ*=p$dp>Ys)Qg=f|3>f6Nd&8G@Yth`rVmGb}g zy+NZr36VbJ2EPo#tKt=Gz4!l;mm$fseXD%(rNUdkCM2=yYuzia%46_8qxufU9Q{_U zF}(lW-YV3ZRA_R^d%KR#`=Pw2w0_D8seAw1qw)NYDtA`eR@l+%*h1>5`pkEqb2ax$ zRreOsFS~v1hxVVxi!pIIiS0H2#%xciVdAv<)cedz?SFqPKBt|nX5+Q1eSQ2rr9Jj% zxGGyvVbz*?f3(~FXqQ**ee~~-Ja_Www`s7%!M+@P8;tqS_||W4Xs4}gPp!@UmZPSewrEG9Y5c}ei@x-dr#_#VjJFKb$RoC$lh%9%5@eYm;I zY*aqn{2!V0kAAHSD;hl*-Li@?Iy~>=ryHAQY)GZAd^)gt zE3-XK6gqpkKh)U$dbB+Hq3zkHyfv7lfAXcCz1O~ic~%aUHsu(rmH5Qd#1N1gPDBwW z3ZFQ)N9W69v0jhGI#qAXd@Rg7M&;GNPn^mx`8qm|Bhx>>*R?%W=y;_hmS6gL_MiKy z>Un102Xm`bkG*@^;Z->JmpazHYCNO&q#7OLk%7S2QmTf7_pT}3rG=-S?Y;jrtNHfR zJn=kp2+SO=i7}(TnRzLXOpKY={gEm6q38PetMNl`>tiwH#IyCpUuM4@KDD~6njSBW}Np!|2kfoRnu@2=50vk zs)V&`|63mxm2cf2dJX4f%JFJ5Uf7&0vk#S)Zve5{B3U%{za z>4(uat`p1hW+k^d6KDMX85?TI*wBYwhe67ooF~eEFs@||#%yms8N2`259!ypQVqtf zyz6WKy>d@jVzhYuyhlIJPTbLHs|I7kp9pzuLtqeJ#;fbBVb6Fep9q@~1jdJJ3w6w! zzK#9RY}%D-X_a+eiqtoGcVD)r;{KDI3tQuo%j z|JUBNu(@#*LE%6En}q-WC;4o00TN=wmg*|iJ&)blhfb1D+V6I{tE(T=Gdt4h9LT*f zo+bFTd^4-1jm2+yUIWt{I7&mNC})i`&^$8FHTG~bt|{>u!+rnL=2)m$G0SINv!NZ< z)(if4X@snIe2vamGNJS3I+T}4yn|`0q>QyVnIXS=6t5MdW*?6z|1psnP4{v{4q?oP zS>qM|e_6~TC*J8Dkyqi~etVQ!h z7UhavFiM7Pu5nD_ZtR~sFRcs#4DZZ5+b?p&O2%Z9G3?F{)kGmh=YHJ_bhD_xG3 z`WD`4h;rl^S?(eH z@p5g^yY!bW^6mMQ>JISi)u)Qu9ucy1TJuwe{Dp!aE%x`PlE}6Fk)%i5UyoSx-aU~| zj()VP{vSpiBjbHQXFSo^{`4A-}c*2Wp-qj=GCOruamSS=Top zj&56)#84FW(Hiykd@~v~%_3s&T}Dsb*Vv(+yr*MaWkj%~wPYoVPP^~gJ4Phg!bq-L z5y`Brw2P(8?NQl!R^Z^sPDwf~(!}xDx0utD?&lqR&n$YgyDeVNs79_+VLwmba-B*Z zA!>Z`be=py-D5Srw-q0oZ(ehDa?Eo*cWj;BC(G|YmdZ{#&s8GV-#HJ)!sC zHTz>Z@{@6!4wS2?)ooW(vfHdDx~>EJpUZXmGP}%P>Y07tTD?DON;yAdpwHf9ViKZ zd(g|0kZ*A;*Rs_2&AAmVW7w%cIF_=}%wY_&Sz(Qom6K7TZG8>59pPS3&qNY?iu!=$ z4wqH8eavEntXqqcBPnmRN*0S8p^q}+#L(X~d3p%(40NjSq>%=@&Yp-J@jIq-mr~AD zTCb&ZjpIsd4|+Fh{Yy*9!1wFI{9QXF{?{z^f78Oqit7=xRb`H8R9Wm{Dca~kn<4_^ zE6!S2Z#1{ZcywGlet90_%;i{H7~jfTjLxIYGiqr|Hy_g{&v{OppPxM~&3nvSd#890 z??qe7@5MO^pL^zEL%sSrD(Ct*T0@O7g5Dv3wd|2w%j-Sr7<0(l_-pw`=4LGKP)l=J z_S=q}GpmUaYgvd!?i*-EG%F(5V?e}_4umi9#nMuY(_0JOz0 zdrPhMzMXV*-ABip?@U~6ua+e3Fpb7rQDdx@y~g5PDdQf|+UMR7&U(J8BW6^`s1Z~# zkJi;jew6#M<}I+kj~Cye+V4~P^pZQ#;`-{mK0q^ee|*hj}DN`CYbVBawwFG9MZ-S%}zkRLXHj zyp*@(u8&kkxSbw9l|}h>746Tg_28&|g1C_JiZb;J+_)|8wwR5vwBMCy|BUV-!mV}( zx~Lwv`!H{9`)otEW@^uYsBAfQ)=+JYY@5S2FI6dTKQ%<8%Z@QV4XhprBUu-Zi2Y05 zmRb^*(M!9m#4jbh-qcm9ti=DTSCLuDhy_eOrCs`x-P!!_6XaWu&Z#+qBl$Uwb)a{W zm3Y?YG~|UnbH=KX-Ac6ZZN1 z-RU3GzZd$~`QMZNGTmP$`DMC(I{)+X^W`GHOxn-qFBb&(=Slza`a|B!WdCX6{(QL* z57#f}|4cu>p8tFPZTk5--Tyb;c^YV*AEx?neRulfbp2_%{`~v(mlLkPUapU)kEc(U zpHHX1y?ig`l z;ZrRRvPo7f>WUld$qZ`B95wkk67vY>2#&@Y!19v4y++X`v^p+#Y31 z&G+oHy%XC#@3|k(+WH;fvqL*q|6ADu{Mm?_ zzqek>o4qr8&X$??q{a2hs}@(271JJBT0LPkFZx8;J13$oS%1IfUu@&wT=_eTek+O= z|2{)&=8!3G#?`%50WjC=)f3nI+_v=+_78t_=e`8Wy(N7lHa*0Y#>hhNc|^xsuO8mw zj$w@0iVMuRrB>W*&7RNZYHL^YLk+HT{aSPA53y~Nz-ttkBw@q0OXxTE!Yp{P7H#H!;( zB+AY(BFU3^pfRsbE8(*Abu-iz$8J?Ze#??EMak$}X(P|=2-$&NMz8vt5-{qBLgb~0ipw~l-}ryk%*Ag2 literal 0 HcmV?d00001 diff --git a/samples/ko-short.wav b/samples/ko-short.wav new file mode 100644 index 0000000000000000000000000000000000000000..ca416f5b8250d00a89bb6e072d65481e847e67e3 GIT binary patch literal 351404 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%0Av3pst zF^5^1b&Tk9Wc?NNRvT9E5?XW?7QxK-y=ac=&>%Bdw2V{^ek%=4T#aI6Q9DDaA=t^8 z_yoV=w~0tLZ`6eOdhUxSirvlg0ao-?{FQ;|k-PA4JdyobqWmLy4koWT0P8y#J2!)D z#}cTskd@g4x1^xVb>vdZQlGOGkD(v5yqo8}P_+cejj7!KHZr;;s6zW48q6X8{Ucf5 z1?V_W`?`iTyOAvDFlJPmNc+<~`k~k6l4bPt$iw9Sb|I&`u@rMcIk}V3yIVPoT&%>; z`2;`ePS(6CG_408R>cb_5qblSkO9wE>W&BW48G7uH8b6+o{xG&}_mJaogdGvY z_l z;oWY;UYQlojL-Zxy4b#7<^$}xX(#Zv7-3)dXb}Go<1bH&9E(qE%|c;zCl8{bzGtoT za#rx&;Phw5kH?E*Ctk)*?n>lLmQGem{sVGgKd9`#LiEJ5&}|JPe1HnFhMX{XcWN0r zGFy-gN?{>J1?#a8^_l&KR3Y-Gqv8Kd?0I{W2dzNH`fYrlNz_yhfR_Ivja~7ZOTx34 znaLOAsOo@?SP$KLryhigcY~{V6OFSPPqQ%j*n6=YBcRV}G<+`nn~rex3t0Z=$r0Vb zm9k?Wtyg&+ueduSybl}M7Ottzb?+i4I1^1>iaC!!<|E*Ur6Rmc1cV?8_q|g*J8f+(^Y&CKFSC@+vCA=L9Sp!#+r;(89_!}kP=IR zGQ5)?eY6R*To=~#RIG0NDLm;Pu)Ax?X)g}F>D=*ek;JT^zeb}Ss*_b;8ETEOWYmXI z|MU)58H3-qGnExh*Aw1%*Le-T+}+4+Ki10rmd}%UZ39h9aitT`ViHuj134>?mMjRD z6h=O3(xvq|a++Jξ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 OD(3_v%JIxK<^Kcj$>o*+ literal 0 HcmV?d00001 diff --git a/samples/ru-long.wav b/samples/ru-long.wav new file mode 100644 index 0000000000000000000000000000000000000000..d595d248fc07223a7e2cecccf1b92ae55646c10a GIT binary patch literal 1082924 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

qfBa4%t-9VTQAiYV-0qpuotmZ|< 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 z zq`|sL2h&n_rv#SbWmg+;H%;Li@_{(e^j`W`xLYc~P0*6FeW`oB`wvheHn^b$`Y^o( z)|*@3pf%KP!r?+CM{=->IjilIb`xu?nF_tt(8$Bxr-4xtjQj`K7qWwr$_Rf;8!N_c zinSAGZ*zX;#Js6K6B^!sztDiO)afnNpB6`K$yGG z0PTNTdTkdz11dJLpSw9H>>PGYtB>h5*U)lnkXR>ZyOGh%*aLe)ZmdVYUC%yj*Q55q zNLF|!tX%uy>px1>;H4l0zA83(`!|{WY~0k(g85Le)G}k0AJc;HEW~NoVJO-NPHMe2 z7Oc!6a$7-4f?~Zu7WGRzE!uO6=`laSZ*bgLYi#GXGs(DR3;`3q#VTNr;$E8tPwG6F z$)uX#KloeS?{HJT47$GDB$<-0lLu%G0+Z%S=?aTLqPg-loB#yOh1(9iHbWd@~l z0L!{RxvYJZA6-qb)feK8Xlrk>-kJl==4Le*G0O4(N@ilSDrlf~R$=ne!*)8S7wCWm zcx2{aqd%c4Ksj+`1E~_wWbT!+%_nZ1*Jtl4-5b|Sg{;18-(z<%_1+O0ht_gU^tj-HzWT%J-Z;K9VSP0B3Zf?(+g4RbleVyRaYXfjl~lx5xux zEdjaS*OeXgGge6ew)cjzpH+LLX!!Eqkx9J-A7w^7ry23C7U5jWj<+T~bt6vM!)@I@ z3~$t7D?YcEE}#Hf*}t;mljD2X0*;{&UbFdl3TtwYIS4N871bf)kvGzn4E#xCX4Qxv)kW)8dK)c9ntijW?nrhqsC|8w_Fm>E#?aC-8@e0)=`u8uHpF2RRJ!jmD z>;dHL`t2v=>)z!Sk&B)1i#>(g#5Iy1YvVopL@%b|p(sth?rCm~1<1>tLN4xf`Y@Y( z?W4*q?&zNtO9_%&ehEq4M7v8_tHyZka)EA1!yb+gUN9kZxSiaQGWf`6;}dL1#_3(> z570ZB;{m;y9xeqxbCU-RS(i-q+0i-BBaV{<=HbfGsu5qvbI6HDqB>m z)fO+?KJs22d9k3H0Iv9%RE1o+qrdGszB4fX+7W6?WRMU`zgUsa)=QzHD=iq`Jut-HfHjPIQ36FCeQlAO^k)O4!K?aoM zS4w8CREKPf*S0q+JDGOpBj-{zY%l)i%j|~F=&m?$Y6_ARhyJ*THd{~chU421F6%q2 z zs=&x<5fdpBjp0b%a4CMSOKhzn{p*dS|AGvQymzF>KcIsoH(qA4B5{`dM1v&%Bxy9a zBr)G-A;KY9L>iHiqoUXg zn`+T4UHPrVFS{_NUW}w3{m#a!e9!y&9L={l%N#Ahhunwx>WEBMrC(CVm{VDMwsoQX$wZ1_d@gb4&IOb4l$w<}SZAidB z^lCk^qS?&bpTu!~p{IkA&VQ-oT!l5R&m2i@;L6Nd zRen>Cl`TOZDzMAjFtbuQ?t4}7RUnSmQFrQZ_S1akek!vsIDzuafp9AOiGy*=Wk(+8 z{M|sGrjq5ih?v$e5Ocq5AQ`U2ND76!TkMB#BB+&H_6Vs63t!kuyPVdl-PAA z5F1kOatdDV<;=%+bj3mR#2fr*&-m&PYfBC`GCq2*I6ANtCqr|kGv4q4N+0ktJ;B8M zh7Ht=-!|c2Q!u7Q`Gi5l?lR9>f=u^CT1ygN6t>_1YrhT2{F5_eE;BihQ%!0k4JVgC zV$IX&t5izf&)&LG)W~=j-8awq{w@C`iY+;1l0EXA-w4OIACIuY+=}*-TpykN znjYy3^6ppYMac>Igv6gg#*VPA@^3ZK$F=C44MYL=B3F~6{hGom4`NTZWw+EIhL;Zn zS3>Y8X{flBgEK7)QN2>pDBlpy+R^BvwMgw2)<*I=k2B8~SRJXCB$6$ah$eAsy#!6!T&5+=FXxyC0k&OBk ztG=1nG*-DMa*`k9Ojdf9I+6%!@)EB~fVEPLQ%Bf;TOtXw(La77;BPr0a-&IVvpXB3 zNxDVP;-T!?;pmiBNW?()LTCP33mtWkIqMG|sRU@uL!3svkdkbi%axIZ^jJ1&iNo$A zZ{aL5GXmRXKckmDa0d@sRG#3Z=A23!Z*Ofz9d#yjd@$bJB0W8HB9|YquChK z8L4paufZBP%+8d`oKwIiG-up3*wf{BC4kTWFtaVy<_%)_f<*bm9W4>Ny*VfH2ylkG zu#a<%*J};^AIBtR8W1i2Y@t-_>B`)IUt&$1AQHcl6I4(g zg^}KO(P;k!deRjsbP=6R7_EV=L_WhJP%Ns$`XTwdkocSI)XdDGRJjn0OA}u8c@^c% z$-}?=?A-t}c9@)jKhd{i&<{;Gwf@KH)d(x36{p#s{7vdcUg3^d8u=ZDnD_5c)Z&&`nyV+~C}J#eNmsV_j}n6PeHdu;^`gB#NN9+JJe!g^lk*T0W!E>Y~%;BSWfd zK2O-p$U8@D=YbR9zK|2#$bD|V>9L>cfTFESyC*qM0@y#vnbS_pZfpMaVBCG!F>R4* zu|4WC`%>{qa^TNlKP-(}GCeuT%b<~KFbB1nlRE6*5u7=H@NXOE*!LXL3hdx%oB&(E zN(7^NtWflxyG0p@#*K4jWds$KQ_OQ?-Zh#%J)ft{My}hUZBJ5RG{_G8gr2yH&dtdF ztIcW9g>@B#!2>i@O60i>b6tlKbYRARL(&@Y5`<8y&Q?{G>D(pv4a*P@4L~KcX^+nRs~HUxnDV0 zw_&VcbL4j*7@HIL+>UUD6vnsGRLMXNOds03g*F_5UcSQJJS*6g)|?wDk-TP{wEM~H zc~8$fAcqb3I*#-2F4jl^&UL{JPDYn*^*!Ws#EzH^MSVQe93mkp&s|n&*|E zwT|e;eqfQ4!{PELJs&~tUUKCB8l(M}8J)oV%x1^G1O>mIlLnqeET9scGX=;4yA^4I z+FyU^tU&%EV!*4*obl9k(x2DHdgNuB=Qb(EvU|q*h{6*vbQ;F?xPiZz#w!1A5UI# z8QXAI-^XcIo4KjYEw&^&#XRPJ_%dyeq6v-UD zb6cDZ4;cAkcGCj(fz-gtz-UI(ZXH_djHflZ>Qmb(6KJm;;vh5b)S!xLzP*rp)42XEWh9b*T7;_yobdXxLy3&xD3pb=A^eCh2DmteNxn2Z6s6#eHCv_SOQwElE2QttFxAPYstT`}N6~*J|h3Bc1Q`7mGS{J9C7Ua6F zrVhaqB%=aeuno#~Wx4V@UNDa`mGLBDl@FnD4m(Y$fKds5*93Y!7EOBB$&ZC?L~0nZjg4Su%R@%t4x%p` zkcVm1{hfh#_YpC)gh<9etnEnbytm{5m*&>c3T6ibpK)ufu>_n~6Q*pGCv}$WDLA{o(<4B*{vBgdA4l&UqI5eKpe16?w13zV#pxADwv2 z_iFZKnW)uU9qV-te$^6qr*q;fj?dQ$$Yd4#j77L__jOHTj(?)Dboa@ZddQz8*WdnCldL`Y1QNUTDnuSY&0`e>s)C z%-B)pDHFc!x@d>eoc|y3eoW@>xkyRg`M&D=)G?vxY-%XPDZ;Gt!Wlp_0 zd>_FN--SC&JhV+=B>ovT;{(vU^UwnOu(1N1k$-a1JmIW~kBxYdezxNjI}Ed03pDd> zM&6AzJcWhQnZ5cOCw@V6S7)@&TWYEo;5L?+$byPTrUTaOSXcYV7$+;9_!U?oCD7Wf zS+n@u5OTBP&A9(6%3aRGzG$yskk^yw=~GQ z?hh5Q9-3pV{DKxsgIph`?=#u|9ogqgv07JRFP}z}f5jGDh_`7nC#+PJ67GaDSP*5A z^fBnl2d;NW=?j>wQelHjWTBEWo2c9pxXfyj*tc0tDPL~>wnHN)zvguRg;8#50*D35G= zT*uJvt!ZTpJ-x>%DA=_-oQu;rg-5VAu4D5iXUDg|-f4rCvy$GXU{9u2vLNAk;U&_z ztLGzfMBOCvoPUD7Px#+*F&lsUKbp=0&Wdt>+%vOFF5R_sH==-uh^W|s*Y>Jd*UszT z?u%X5ZZYo_TMz{m6%;AyuBCHnSZdGA`9IIh?{YrC?m1^>-uL@{JITpz2UpvboQ0lt z4cfp+DEm3Q7xx0WXYpiw3JmK6ZzHpNvHB~)+p)m;52)-0@aJ0gu!IV;rf7IwfLuQ? z$J%cvM|VbVn}VGG20Yn-_yPL%bmpW^<&?C;NL6j-Mn$xQo-S?PPZut2zTtH5z=o13G~Rs*oY}_nPhic~R`!KU+zfxXh1FY=(2QL<32_b*d_UKG zgMNE?z6wa8N_&)!;b3fqyV$AcNy01tbS3}Fqgpf?=LdaHwN7lC($ z_^0NiK7iL*?^8VaE%rBqUF_ujoy`91#rlizL;S%rdx8_)(HFJ1tafw4?;@nxawuvM zJYxlGbRPE}_||G{ap%Y`$Fi`F#OU5G?)fDYXLX&^94A1Z>(I?wV%cowxnt6OIfvP< z5Vg^*`liro&#q2p7e}JG)Mjs8pwxC)eb)Dk#e1E=yGoD+`|#Eb1P<1VSoPc!f6e{) z2s`3mJpip;0ao{f(|*Nzj0bg3y-UBd?yB4^=1!|qFPL?sHBxA91b<7hpPFL#Eaq8j zu^}1*f%RB8YtX3=A!RlKn?Lx;YMfQjs-xS`>MIK+u|=ZLDK+zA^ji z%(wR-ff|7~cE)JM9qct@y-e-qc&e>YvX-wV*l2y9HM6D2*Ru4f4SO`~nr@3zCXIU8!T>Z%HRI|kafM@D_1u!dERg)=N+ zg{wH7dHinVOK<#fDK|a=OQj#!VmGKBoKH`1%o(1>hc@GPnwRd`IFnUWYdC|d?6eF1 z4x^3z`2NX2r)IkIZmc1n(#v#ke;M~EL2mv6Mt;j(O404?n^1%AR%G3IAXf$a>C8C= ztaKUcTFU2Q*?eTd1UTY1;QeecXe(ZV%}`ujc!G7+U07{@=)`_A@|&Z<2`huM-a1x< zX0y$=r*hwJFlEH0oCVsF^RR-g1$fYdGtiS&l{uYTIq`a&g8f)l13PDfuHn6a82c=6 zBIe|FbAQj*o=WyosX=X71E{Pb*GH@+cu*^VXf|+8B5kNv;c?_T?$=u{Y0I&i-;P6=GY>RCHL6tT7zV4?9W=~_CoQ*R-#w5N-mGn|0Bi|5bc z>Bfk*vht??$LqVo6`Z7K#~17E4}yQrv0TbISg~wAhP80D;P|DiqAJjH&j;AEQ6}fL zTW{~g*!}cFsmaa`a&}IO-pHNAIcs+9Em968tU>2%2`pj??%T6}>yp)WtuZ%- zZ!L75d(7d^c0Q=clk4)i)#TPO`mZo3Vn0?}TI1_-fpa;(h7KT19Myu@%R5 z2eGo#`5Adh4#UPDp$C)ZPIx>$L0HUhaL6 z`za&cud9ta?>13Wh#nv~trej@ zC977omfdPed3(rr?B}3HChsridiks8<23l{TyIsn_59w!&MD%6Qo)Jy6?xVn-px7_ zxTj3My9+(*?#%l9Jv`IrSwmhIT*$mjPHYy7i+Or${?||7JawOG2Mb~8d|tZ;NaNnY zN_4w|II*`gG}scT)MxE>C8!HDtEH4Lf47d^IF+-8okXt>Lb+BOp3wx}F7I+`vCvYZ zvmZ|76i15q-`J{jF28fNQm_50JYh4J#A@r)?L;6xWnCtuBs&H;+jt`{IkORVWzAmb z$X){(Kd?7PmSthr40|PQV}Ih49aHRbX2*maKa1&E9lO|K*Nz;!D@~uFMBU1>a{RRl zc^BW8qq@4vz}hP_%5aLSeE~fYdqAj-2~+Rq6lUr0Adud{&vpWkKl`asX1jISqpfnf zP zzV7;^CcD&FJ07!QxusZR{9CNGPFt=g)U0Her)6Cs+?|uR{bSz^Z3%JOZ^*mkbJ=>- z*M*e#s?GCivKRN{gBIqQrghD-5&CZ`sI{F5Lz7P&f2`}t=Sa**AQ;nGUbDI*(>6G^P6h%H|sCrJ+gW8dG2pdo?WbXdwPaKE$i|j zR6U)Hj}&r+-B+B?u5^*(iBDPvVzeu;#kb)yuIH>CKLI;(%1# zh?Qj&WA>0(H$^Rt9z%z2kWpi%mJ>Fi>_mD z(s@njTDr9#?0#Ta3k|}aGBtSLzeZ^6u(lViWi=LO1!U4$=(63>w}ia&=WDY@I~6sB zMwS67>31jB*gL}R4|bxe&t1%)o5%MyU}0!$&1WA=S#^c{7kD>M0G5T=2?JP@>vb0P zk?4g=0Q(s=A)Yk^3tSs;7e2J*ShC_hJbU>eJ%U-pu z8?f4@yf2@S8%f!lSnCp2c!+0g0Xye$m!14A;kkdMw&W~McOvJui=Eg5RB5UlRwGtZ zlZuo*wRv|l-?NLzG$1w)OkB>+wCe2Ww}Yps*)Ihfn7arjnTudQo;utm>&DxGv+WHB zv6HVn%g%OcMRIHF^V%MEmgqz6W;g!gOq6aNa93;B z3SEwG^aZ?g#}nDk5ntJfC$`qz`b9fmGygYvv zG-sd75m4MQz-}Awj$)nf5dnUka~jJkTHu+!9k2dN?EXW1aJS*FJR8n%B5=2#%mU#2 zF<#lbS@-koX$;qY21VLI*8VfU;_Lhme%}*`H=KY6^mnl5FubQ{fSZHxdw)t)=2)h2 zSUd3(5v)(>$8jyb{uTK{R83t^gl!a%c?O)ZuhIhUzXad?e}aWX>gI4Jx55E-fp_2G zhxibGd{bg6Ztg3AB>aT_Md z%ude4%h8VKRlpau5)OMUu--^4W*hO$5j>?5o}=%8_UXg|ClT|Sk>rvif#Y?~n1ry$_5J!mE#fr*&t2cHCLO=dW;r-=?ds&ThK_ z^PWV|9spP76R}^3cfW)VrLDV&MHVRJ#=p{S{H4@$CGT zG(TV^dwvei-W$pvjnDNayyDkzuBVVe@)T!uFwHQ$1&CjdWHIMf-lCQw1#aOR=2v~r zn&p)H;3zSBZNu8_iQJa&{{kjmkH>vDShS4uu!on~(gX2CnMZjAT-|))X~bG8Lw|dT zwiGa5qZRoD74yfiin&NUJzS%pZ>uv}f^GMZ>+}#)Oo^+0Q}W4FB`vmSC;S3Yfc^%MK=tbji|kEkNh?t?_>4~MM}f763z#`S)9iT#X^ z;Ir;Xqh5Fb&5A#PpY7g$JTmMeysU?DR;yX%`*`&y!WCL@AAKnqHh;qUroy{wa+Upv zkLJ_XaQ7{o|A%<<-%hDizngY|UEsFEx%B_J3c0Ub)6SJ@vD;bo8s6W?zdM1tz4g`u zDY40Xh1u*!&Tyu$(wDKP?rvO%D&b)#`Ut5?9x!>Y(@ZCGOyRe6rOkRJ9!aILnSRDYr{*~~J%4(Q&2dsIv%{N|>3#KD2{+?8YgmnTRR^G>zGd#KT^p5A#XQ%} zu6Dz<->-h1tfQ~1&i>frQrp#ju6x;&JgWh4YYc`q;yU|ihwNSNQ`U<%=2Wy6JvFU< z{f*jsHBuj$o(w&q`jV|!sRown1#%je-Bs<+wv2VJ2TOfk)<1O_8kgO%7l5yJBekci zGZZ#~QTFsV_F=b0^;(~0zjm?DZkOA+`*!YZ<$*qSy^vN4iML{klO2>X>TK>d>kPS< zJ(sd_zoUOruZTU=_5k@R{H8xi4libzL8e~rPgV+vhrNJH_MVW@7FB}TvseE|1+LxB zog%(n46QZ+-}dl{lp!Uk7u)4lKZ(9S>nPOujqTI}GyGGNE7j`sPACPd{~z}2OK8A- zwPPBwCb2W?Fxh}l^r`6MXvE82%X;zTb9x}+>o^?6bND{IE0c8t$VVt{ZjKyt2EN{XOHvUoS&MU9YNaxKjC37TDu*a`=Q0*i~u8PcBIuhHoj-yK)p&n#h3iR z-qsyBr3O4v-)+Py4ggCzobiU8z(_tOXVaf9{>p1&pi$0=X;BAYX2#|8f!5%!{4ev5 zd#5ezbQSmUf2m3@i15>X(K~5>!R+1vdVFd6M6pl4sE=k>`nm8imL#VUB5KL{RrGq= zJJO!BT2fZl*{N5G*4tw=LMfx)+)n7rk&7$1-mbsmq%}VJkM;ZL#qgz9d4FnUitUHk zbs3N`N}@NeHh3q7xdQw8>aVZB&n3|PLMUIqynMDG<%OQ1_~z>L$!2=49zs1g+Q)JV z>-U__5OF^CaMXKe&ts!P_IjMp4(+a}mq!jJKHJMV$5m!N+sWKDNry&6s;9s96)dcw;nYUbtE0+zpo_%M`H`Zo)KxN#t5 zs{V8(nO-^JZA`KN8fgop^uX%d^m^f7M{+UQiZEx=G+|$U?nDdwaUSC8b;t>=Epbuq zpiXUvc>Q%sZco>Eit{~`)nb}afy_UzhN0DN-)^~@{tSKMJ9xG=kY=$Z+);hT&gMp5 z^^dNH=PYC8#q6&IwB3~Z>IG^JWcKoHJI3qNYs}hqF265%Wavo4@3(TI&`*el$4 z)FG%xZ_OTjQ!RN_gkqL+s_xd8@z*)Lwr~%t4eLYsYSUY}qB47F!1@CqVD6X{Adk~$ zWz@syN?kse=Xeqcwq(onEbYi@H&rE?_+tk83iz`d1w|H^E}iy?eOnD)!1FPQA0gP>c~~NN{^ZnTG_OV z(^cwfLCQ1b+3Lod+P$5Q@@FIrWewresbD92Jq z6Jx}nEMDwBG7hcQ=8Dx6q*d4M&Wy;ao$Je0YgA{L{?LeA$|Jn?4CS%{u z-Vt&YS%KWM3Rs{Fsn5^anR4n1>1kKuGrO-Fr7)jD9LeS*s5fO@>a+Z`UHopG&S-F&gB-5p;0yAS2;=-=Ir@LL-g2ai*qTXsVd5&Y=%-KBe`}6~ z*#XkLbY2Z=a>j-n(NB%^8VQxkjlc*)xx@cfF68{IZhAlUUbDWO31H@f{Ksq5+@v9& zV5De&dg4M$U-dYhcA9eHEP#ZX{!&b ze`J{o>RM(Nh^117Cn28@6EiAx4v5$#zGo-l-Nh^+Cq=6{c&28%h_OMrp>rw zA*XJfO&~DNsGaOJa*8aP=6nZZxY`0jT)I~K*1Avw5MEhEh|x`-xRt+78WKK6F$>6- zmqNB8y^2zv-GDU}f-%}1p0H5{W0q>pPTEkf_MY02CHO(-;*qcigWkwF=mC3>kk&O@ z>9`g?X#7*y>%Z{C%@A;Y@{U;V4vUhdKiC;7aVoVK8RHS?V8NB@#W%}kRU zN32h+ORttxTL7=uv!MLYcOkTz;ZJDGZYmi?k87vRNjfo(}`Xk6TE{)F_2R!%|A?z?1a3X&cA16 zM?l4LjoqM z(1d3j;3U^~9*-QR8D2|udOaO-+xqBfS^^Q;N&z-p#C`Ng=%J7&iR%UUF`YmpcXRHO z{);t0Qm;)rWVG7#;n?8yQ=P@xKXvgxU%)43EIIeV%qp>0563}jcxsSIn+HnMShJl5 zq|)6yL0hDR=O}mNzvcW~k309~{ze-EPOUW_%+9RT={#b6MvYpmPMkb|r%8{JeHfHk zO2M71_$St_){@!4(wh-^s|d@%=Y3Fv_-|Y=0I!TIujQ(3oS||-eAbHZj9#lh#WOP} zOnOxs%1z9%HIuRtP~DRHZ@=Wy=$j|d&wOXwb#%rAor7y~!v6UW*e(7V;X8&&}CXL9mJw(FShMx7FWja`NJcRIT=^Z?OirW*-)P z^1FDR(P3+9)K~(Z+8wN@19dC`K7GLN_MC=Q2o-^LC%#$4Qzoz%v3NBe<|Dw{HE7s5 zB1_%4uUTyS!2M-FNKH(A$T?D*IXkhY}Mz!VAwSkN8WLn%-pxzSfl3S@6HDvEaz(9N574PR>wb;{4;HY;?|Cw5vIzt^` zek7k7ZCC?m@-F49%IPxufvHj{%QCCRRqF6^WA)RGti@UwVu`r;eo$HH61zIpSj;&cF~x78TXmX-Sj4yu@$mMt8@ZzQ18PbzU|xty1 zIuV1pjCagg(M#&=JaNAinpy(%dlFL^07UJ|QqBoA1!4{Prt@I`0^hWV)xbBh1~qqm zSo`4b&4G&+PZ^(^iQ5TW=*IqbK{pHF$5u&s7rh1bp^5J7bS^N`FQ9DKm#;=-G)rE) z5&X3$&045#DfnTQPz(03gZrB~s?Ob#b6=4E707oa0;3*Vg>`?&J3Ha6Y6&ZVv{{Nf zp=4$5KKSj*)TgYMWj`1(4g6cmY4l))d16hk@=h^0-itFVfsW?0&o=Bv+&61bkBJ_z zJwV?0*ktap1-!C1hS|5;e9jU&#JU#)nLb1*?eI{atJDRI^z{N~tP;_C)+~+h^#mHolp)_6TdlDeB*fIe{kJ-KbMc1&7v_yuXZ? z=r63vnW%P`5PGv%aeYpw4BGkyC|T{_n}}UEPS2>CekrvgeSUJVD&R*?p0%H|l6Q85 zG8-c4SMZJ6{B|0>t_Bl*AI)?APDHJkXRif{<2m=5#HiY_S3BzHb) zslyoW7I!*x7pFLzFJ8hbjd_%@24i2{Qf$|j)o<8@XE-s-Sf4tyvH1j;ErV**>Nl}7 zD;&g~nY>ou_ zSL%h(e`CaMI}yo6yzgw$ZBT~1X)P-@Mq9{zW&*iN?5TAs-wweoJiT`Ci$260+Yrai z=g*;z>u~O9-HX{-ebcI`y};^E@JbKnA@FY^_`D5#(97Z)H$ojsA#?V%ywdjvSvhAXUb@>)GBu3wA7`VK8ZC#qKA?5YE? zy>Lsbri{3`yDD&?RqVMY>o!8D=fF5uz`D&G~+L!Pk{{4s9Wh~4U|stKMRPnN*ZsWg)JX{Y5_ z=?u;+$y?pomFzq->6Re}^aeRktdu9)A5$+=H|}zPwM^&t&YZ9srv4tMxmQhb)w+$< z(9>jKvzha8e(EfE`fSdlIqPxSmcI2&zNxEC=G$}NQG?-nZMoZGxXc``G)KNMykQ}f zXq2M`oUIa8hSP}_u)bRCM_pZ7uFg}f#M;fX7K6W8^wS+~WgW&6jcQba`&3|uGr*wE zJne9<*uc}rK|#)2cfOPwp0=rZP(9e6F>QSSwUIOG+D=+F$K1*-CtzBqr%V!`tc}qE zn+tB3w{Q2TUF=LtK|Q=HfBjwSv?-L|nV+1Tti`9iQQuM*);q72)mb7 zJ2l}G+rjRxe8)-E?b-S7z|QQjPMo_l*Q|w9Q!HaW;@UzoEyj_M6ICt;~`>gmsV z?&<&9!1aYd>~!Rz{%Up5GAatsCo9O9+U&HFvKG7R%+*f4HM7L%QX3?NV7#BRAH*a!PsT9oK`b|H}+X`LwcM&x`)?9jwR+qR!8(#5LxGWoPDu z$NA|eo47)q*lGeJSavbX=CTJ}` z3%ikL%SnnjDLpslI+z(@4A=}(d7-)NVvSh?uw)8WtXYX@3r$y{qUzpx{rP?MisWgRN2dv?NWMy^b>iOV; zc_<+#??kuFe8*am#0EqjpJ`WuV`TB~R7vi(;#@`R?y zBefG(qbAc6zSIYdC<1TSv6gJoqnQ^iQ~h8ISDGJWmV-XW`Ow5_q=Yf1-K_jiC_-Ju ziKyl$$WiPfe2_D1&MCHM&sw>wSfw_uc}2#_)L4yb=p}b*u2$7Po^_D3w-Zwaskxkl zwU$~M-Qltg`Oadrs$am99b}<)WY@-qoiwfI(&&FZz9VHjl~>(TpQlqM?OUk_O>DIm z!5k0eh53tG!@qIg#q6epl^B86{x?>j4@|1s!vE$^n4zWbXbGRGD;04E;bqKSn@@df zF*qcqM&O}7Y3o~!HF)X^;49;>r)Pi%o@y=j=GiO)uGVOY1x_5+?{7__)#Ht!Pi^n) zkI&ef!fPFOnZ)14ti{a8syxZu{!HK2N2v^}4h}ml+Uc-H8q5keHl$z4|IIu!H^_*B z-a;eXT8m1MZ2GJjG%MMWRz?g}Y2{jB6rd5S$NJ57a33fA7W0XEgxO(6Ih}c{*J&%e zb#KN279;2FzPp91%lUUp$~UYgFpJ5!OG|j*(a4M5{I6e6kGT=%Ec3edIhmVo&X6^cwYZ;g&MYEfq(#48T|Ti6*!aHKsl;dpw)Wx~ z&IRwlin2JYc1*Tsd5!hgdex>ti4#&TJC9E{amw~OHlFX)?<}LFCM&SM(ro|3fmJ*H zZOvKN=RVFocO^y@v=g1%y_$P0=BEm97WHAfIs6HpevhwlKA2=y&OTmps1mSAkDlJC zJldD1*nt!238&Jl*cA&yN_VEYa55U@A9M0nf%(>F%tkVgMTeOP57dj0S$&In{}-@q z9^VwN?fNkvY~6&kRGKt^r|ID}-mdo0kC#1xTC&gP{HvW+ogLc!z&;2KI3csGoCv=r z)yk&v+@;)eE|8tc^FJrc{Y~_|Z`iGwn^q%d6_{Gu+IRNs8%(zTpfpSNT>d?S{q;m! zKb)uZWXD?R&48tncm+?}3Ut)S767Tt*Wx^Nt3oDlcJi4+(1^85>V`|<7-p&YQtqkG zwCAo}*hh=>{>B^hs~Y{5M%(hYK0B+$o?G#67Nb@=*u}uyzZGcwzXRVfz;X${%Z=oM zM!U>nP|MSsZd}SNUGc;`yteGgj@ljIfBku7cAr@^o4C^KvX$w}+8jH3$d#q^<-l?| zKds_B)&m;LH`CNkK-#XAQZ8dhv(DVLFaL@e*6hjMjf88j)!`ar6P1wG%EcMLYBQ@e z!&d*`7M?wao&AL5naR#d*qeO9F7(#knFVESzf#zI_rp^-DqWn8ZVhi;c6KUz>%zJM zw5}Q4X&N^AICRU2oR8W>72r@Ed^BTr8+UcSwQ#l%Nl$*VO3BVPQ(29&B!UZd0_%IR zUp6xfb%8h;^@Gr*n{WD_FglZdBOFqIQ(l>NlL? zRG?jntL%0=ge$X%xY>c?KnJ)}KUSfyr$WjH^^M6r52EjM02)m><;K8ZCVQR6Ycg=! zoL+65PQSo7p!yTLn!|d8wK)!23We}jIhLHbX{t^AlfIKzU}LleN=7;gIopOnKyR&a z;~nfnJ$V{uxB^Nu3a*y1m6!D*+Qj5NQ>uWj!r*5oB7+QxemlC_WKzB!QCY3pjU0h>lnT!j{@r`?kv9pmF zW;`0TGas>x->l~_Bg@>@ES8~0Rm_u`vvxD~%q^(KncF4hG&qx%u|739qdJR`SS`YG zPG&Lk@F%cqBxkMWKAV5d$)1Glu+yadU+f{Ip6Aqw_UzMmVrR~~8?<{IFSUq1aJg1M zQ9o7#?p-yd&+?RRCLwVrasU59sf*Z+dWz9RYbfnGV;ryrcT>LEgGKAHKG^F|O2nhs z#}PbTP1Op#wcwyynm$$Gp=V+_uSMXM)}hu3L&);Y!G9t)NBCE+jFNZ z!_r(G>nij=$}e4)yv1CK4t(33Z0$koQC6@T|EhJLXI(o6M52`;GLi*UL&zDa_mmaou>Rn7^Bq zJNrC~tC?>i-k8DM0@xf4PqBtcf0Ef**05@+=o`>VEaZ;LZ+*gIf_!&9Tx&M#mj->h z8QSZ4+7`a4W@)vFk#qfw<{X-1rq9K`AvL(G5?!4#;{IwuN!rSA^!S7yr;#S z#o%jlmVQ?rWHe|EIG|TSo6YPDeb2r(7altfUSKEUwJEI4$T2(S05CVlu^|}N5$rxX z#ct(=+^8yY$NQ^Km{(W@ZO?pdV?9-FgPBmRiMUYHCaQZ7%QGWp5`M zne#s?@HBmvdTeU)+)nT&{jg1dvNl~);94DDqiNM(kn;Z zgoKwrnDxFtwNA}tlB<}{BF5C^4n4s{DcIZw`*Sr0Th%S>2HTFGjQ}11ugx8^vyZuR zdU@>qBqYtH(9@qyfpNuI7Z$xSY9Cr-YFYZIm1brHs9%}2U=+wHG-{YyT;^&DTl=MC zf3z&jlgM(8%xp5&Z3RJ==cIk04_SRp{^_Y(nIWIjHdIqJS4&H5JCezGh(Bk(BB|I2 zs=nY(oOMrNdI&60Dmqoe+G0DaYyu~@@mCoo4=^KX8SB^%H1zT42{YT@2)vnDSwvjh zIHLJZTGWF%D?1SR>Y}#$@)TF@eq8Pd|a$sX0U115%XTW6U!)Drw&qJ+DTR zwTO)8dTmxKR>tq!)6cYbv#eO3?YY`7M-HQeP#T!QqOByZyHYbz%#oF&?t$ZpIZD@s za0XA@T$I^hu6lwVv8)orh=4j%TV#xuUuSrken|5I&4+KqeytX3%#Q8Br+#Msy*$J^ z4YR$B28>r5N7qozE=N-gO`Uw5`gC5ZX9 zRz9i;7}d_Qd&CgE7xwoOYI;!A8jLg+#TwDeD!a^OHFHe~ zr1q5M)#iDI-ZlH7*)O6RIHKo6{bVt_u?k;mG)qq|ZC$BVYQoJtLh~|Oa%c5i*PsW! zG2Bg?_C$CzT0| zmzmW1ZLB`jW2aX|J|KmeiSEfO5v1NMKhw;+tnZ2vO-VYSkgt z*E7F@)tp)*W+CcfFk3Lo5-o%4F5zV*N0zxFpU-qHqllSjTx-UDc^P!HEX?K0d@|TSYI< z8h_CfZoZWM3puS`TJzD?amF%yb4!_#}O1q0*Bqq<#dZ9cCO2+z|=9+K868DxknA` zYwvdwyjoA&UcPsT=uCCEOFQCZC@?cRiBeI!&|z}stDx9E%;fz+-f=TP!FE5 zdUYXv)85zW12NwSquw3$VR2PGavi(h#a_&x)w0opoLMVs4+nv!xybUUkkyw#J*AwR z9!fb?rcv4x$9ox{c5UX|>X|eXvkI$|QuJX|O(CU!BFiR`Z&{x#_pleId6Uh!k9C{k zT*jfit_n~zk6Z4heqimm^c;Y7o`QK+hd5#1b6-Yeon_L3XPG-7eR;lWbjIPe8RT_J zU2ROQ1HE?I+g6uYxv~LBn76rtXUemb3woWDQ_5uj_>TUF8r)m#&^|K@RL#;p8wpqX zZ>D4FpHg#_qxxK*sMpcFYhkb6qzqJ&nEho%mHBZ-itSC(3oXXUZ%ujWy;gtImuoJn zcxp|(cA^}~>=1KZtX!3QsMV=AsPkBJ5`#(dVXyIw^~5VjTfn>ZtaJbioAaDv&McD- z_KTF~s_jYz-dk%evlNy?U4J4Ow70WNFFmQ7;U;#jlLj+=LM_7Bki1R{LEJUNNea_K zk-F@2CUk|l`^xGFtkE!kV+AmCHr;}hcI`qXjhlt+N$4le`dFEZuUDlb6sneKp2ZQ^ z63Pc7maf1G;-);$=@iCSteRIdHs)#;wL8%F>9dvSo}>FVYfkJ?-pcLWfwj?|MHU&g zl2WR&&OlGL5ziq?C%ldF{SN@veh9%CMrP&Zy7*D;^CH7Bf&W?WT#7uSVi23czm z&54jJN-<9b|V&>okk*FyM8@J?$x>8z3IyfmMrJ)pZCxqHr@IcJyGSmkl}=WDs^nLBgGs47w>#mYbEQ>XBDn>RdQ0b1t}$~_!o=n@J!>a{*k|^-=xi3Z6>VCzBRPMNUGlP_%;($-E?%%VLAE?7OdXRUm+kCZ%COUmf4x}*1U){A~cGpDldeDXeXBgND#gG4W+ zIB=q$|xpQ|do_Idmx%wQ`q0N;yJJIST zV@s95Gvkp(_{|oQcd&@>lwt=tSK8E++`Dg&B*ukgi=`=akCCDU|*iS{%P|& z)%}d}nhR<@n6)FGn3?K@WaX$4tI1g->icHM{+=H|216ItT#8;JFEf(p>;*d+o5>)b zv;M?;XpLAkr;n>Lo=J5$^MkV|LiAr$giX1eH{HUv#^=E`y`Z124X|ie@`ew9@ zGYKPwD=*c9eNT(|e>#)A#!saQIh&NLm8TW+zuu$f%nB*9YW$8gsYaY>G49{oadkSQ zN?Iqzg^cGIIWStKR%VSx*1y&Wts02D)cxvZmcwKmT7IKcly6zLt7h8@9nlW=)&r<( z*yA_rv0|?gz3YI9Qvi_5D zEq9nvjj?Rs(K=KjWtE5aD9LJJwJ+6%^sTAcnAMl@mrQe2etNF1D(jt-NeAOSp0;sz zrEq3n$RE|YtVL1xRU47!^oXpPO-P<&L_O`i|J;`DC)o6BGZ%6t#MvC-sYUN+I*PT^R$mN>R9FHP%8xFOOBNo}FA;9mAizTFEDk`9y6ed64&V{~1n;U*eOz zSiEx`nN-z_n91y{F4dKY1(q}HnmpxA6c++1Yv;dNQ;8N~;g7B-4V- za8hdUdapIUB=41D>Nil5xzkK1bxr!)t!MPittmDdC~V|6@}aD+w|cmmp`JK>h0?X$ zQSDsaOx?i<#2W5zH!mYg#$uGC_V*AYrPjvqQhh;k)VgUbqBD^X?at%zNM6SO$MDlo zGAz#`R^F0m=~+ZHv%O1m3-EuL7cqxu&gXfjRgb3LW(1w%UZKz))2DE3u!^aQPtpzd5#}mALyWdHa8N7U zPG-an>0IU)m`L?^CPJRcEb&{IJa{tQ53i(O=so$%n8Elez4Ja`1x^&x%G2)OkVa9> zv2nM~$~}>t9mn2IrDo^v?DbA2Z+*yY&@WlRLMDq>qCe>zW<0&iT-nc9;~Cg`&WR}q zzM=bMH~Nzv&pfCd$rvV?=95NDEh^;q!|Ckn-0)ZN(=H^3Vig?yZ z)C=8CKf}Kv`&!T))LeC|S2}?c`hj9<=q}>hPKAFSn2cif?z{AC{EUgblbLvAZ^3K$ zEDY>f`7faT7<2J8o=&BM=sm#eMtY2nLwDMb7B~egb*|e0Byf9j zIv$}*Yahr$)8O7+Lrvr6yteG$du?KnTT~Vog?2RZax7#*vfv- z0>Ao_?|LJXsBULM;wAic15w2xc#rC)8cPdg-lFvT3s}3}bG3&Dfl3MU%9aO3%yzt( z>2y<>%y~F7b0^}Z?8|vxhhBL;JwlIXa$EiU6Lc88m6Mv5JeNGkth~RH?yRLPtGWd& z)g$ySQP9JHfn9og(slH6dY}#=|KyS2VODerXVI3|@vPUZ+NPXR1w6Z_0K0B{`#ols zZDM+?(<<*{Dq&|Pnl%rHFsynzCgtNiWr+`cpqG6WLPu0IT#4tzDkGC%k$?Y*Tu)iAH{W&>*JBETC( zcvbu}(+Zt!{Tf>3a3<#ci@wGU!-nAl;Umm)-yXaIyjO!ed!W|`=(hU>HqZ}b5*HIY zu8-AoFI@O|u*gcBW0(`T6Q1`x-FzPbQ-;yY_w?`-V0$|29sx)GkV&K~kQGDo4=2Ya zy_gaCeR6g3d;CPapR;;6c_z6u>65$-EN=Il3=uAH4(| zuL@sa%JU{L?KkAtNz8O!lDx}g-Y1i0Nxx)8{GWIz-!jQfxCdk&x9X09 z^pI|p%!?n5d&jTG^Ww4bgYo-uSv-W*ZUV0>1D)y2wp)%@@@7_30m`@z?lY4~u4o`f5+&ptHF9RSGXL?F;5(%GFnV2&q!ai^_~OmU`AlBy%i3DNE$>ch!kg|! z!d}ZP!$+B|`Ca}vuDu%EK96(!5B>1pgVoW2rIjS^!8oTX0iC3n3)?P0ryEYV{0 zq~^%0SLjIo1yW=x^3{g z`#JBIkgwWprTo7g56h99idxA1Ob+~#Zqt9UpEuyFf zbLjN}Al(Xm(`eE`7^@M869b}ES1N~R=Ayy40(|6%MaHBc>_5T4}-%4?I6dLuN>}Ux*`cyQB zbHOsF0Bp@)3*D`!r+yi6>Q~XPuVCdB!#jc7C~)ltbo^K8n*I-Lx$n?L??P+(0o)kQ z>CZ*7S*>#woW7LZk3nyA9$+=_aG4w#?d)&Z3;THHb>PxjXf3_b?MI=>pAX)?jxP32 zerHkv&G#I5^htDBugUzPny@yrw3A*Ujtm8`Hxt$#5hdGt+nJPaIK6?dp zg?5fc_zGUPGdcNT+yg&B^6&h6VD}Vc;oVH2{xlg+zn{y1=PJn^D@v#>$fJ!Bd@r?Zxs z+5bgqTpj!teg+5l7gLV^8;lL7(fQ%IZ~`=bf4(rkFX$0o8@vGKPT?DEnFsz{uqf;v zYy^_}7v4Z_JeF_F#P`1imGhS+H^Y&ZW0{&S_!dy;oovh>z^~LR$S3!(!m-I2`A*@z z>|-d}%pD$OKRI6o@-FsPWnBAFOm z7j{dA)1Q3^I@6=c`Dl21kuKfyA(rDuRPKJ39G5Q-8Uxe9@C9(NNB-hu8dMu1quWCn z*Mj4hptUbxha1q?SK@b=ogbc*VedUgY;zKDdJwDNPCl>8)0zY&$;jY&xJ_H8EbPvI z7w$^#%rC*$J|*pK|64FCOp;6T7X$yJgKIeHTAb7r>ko3||bcPDZ0w#rZ#y z_4&`)|IgSQeS;IioAYNUE%Fzmzche`u7d`?2!2j};du{)MZq}ckvB)0R|;O`(`iAS zuv5|oT)Y&1`$cj&_@*VlAh|nV0R6wjr0fs#XNMhu;Yty4(a3N^JQjX*T6jfpe7p+R)PIAo!nfnMlZDZ9`6|gN!HVSguzz$;@_6z{{zqtV zbKEPa%5~S|FF=bNAFL0zCHE&aqvOM8km`++hw}vmCCM13s@|GsDl?~eettNRo(7#% z%8v|R4_d_!AcN`!mxd#mS@BRfF!+gC-ur{y^uIX>bZ>(DT@p3~Pn{a_L2z<@dP2YS z@QvX8gsgg~oSJAj@=L*}@FckOaY%wEIFI$oUBT$^SG2jq^4En#5Wtr@;1@k@!Y7lT z@=wEu&I)EHbMxOt$0nz@PUjV@>(1c)a1vTdD`P{^IndcJ`5%Lp(Wzhqxh3IL z?zt&>6PxOetB2EB$$x@|z`RfJXdW&Lm3|u(fveC!@?dZ-FfN8JPtFeyA7EPh z$#BD2;YIoF$!zF-9auHf!%OIzEN}}vU^f^3+HwZveV81`-3Do75RG( z^O-J&qyLbf70yYD*fTNBuvOA8drxGh-Hwlc(g5hF|@KpY~Tg zSoOmfk;EV38yN$i{grRsk)Oe84x?V|%y4i1v1B-tvwJaBqz${P#~$i&f=t`hKiNO)KN^`r*!4GKjXTmYUtPmi9Ea~PF>9C`A5a%1p9*o*1% zzk!cMSXM`&r@zLeotuNp!k>~;^Ferh@C<&H`AC`0_TJo*%UB~E5Q zm)()TkLPaz>tDnd*AA^^KHU5vJSaEdmot|v2Tm<#4%Sxmiz!$bb%QI>JBM=j6}K*{cy9fW!CBYN$;0xK)1fX;Z zy2i)o{hi_I&I)M3=ZiU&OW}rp!X3;>KOfJGT?q7QuE(P3$a99k&z?m?c>rDbJ5K!; z@bSjHQ?R~f5**s%VrQiMt-g_wC4Mr{sUK zpYiAeXS3I}+{ykX4SE={r$;ebTQBVW>UbLM24p9{6<}vSe1kQ>FgwTX=KigLS_AG~$Uf|XW6khxuAIjj z8nGL@T2$gWi|~Rq1uAMQ=HM7(*8lCqHtA{#_|Yu*k>6X=ThW-km6V6LhqKkqf?a_8 zHA{UDnrNPSZF^TVV0UwYLt|*8Dq6dB(?;!^@%)OMmho}(k3F01`F?3^peMUo0*%%N zBkVh2yd>Zx7XpFyJhe42FzdUNeOeQ5B&;#slZ~8OWguf86>DIPm-Oc3ovLe0*xWF) znT$$`-R2V;W$ePYJ&Eo>VGWSki5{kx*X$eXT8vni^In#DSBYzlUD#QvIsGFG@Efn@ z8&(2u=c!gI9$?>gqO1b1sKuGq<>Xp}*F|^>Lv~<9btXD$4|X^S3!?{cd5>$%|F+(z zh*K(LzXyT&R3Ky*ts>y+1Q(V8HJIyQt!4;hoSk4q(9Qt+xVk=2F(X`0xRs{nXX)3s zqqlK4tE+aS%^n1Yj2a8g9(?mJ&eF_3XPh{f`D<3xiIo)sX){rO28X?OEnsX0##+`| zn!+Maey=gU>8yMs&$6;4&;NEvvrC<`$JRm#uE0!)_N;m?xM;4Bk(a^jVFlFGlK;); zvrB;;ml{H29XY3I?7>`AyK)(sTfiOy;Io;3&E+xc)Ci27z3pu_mG|2Kivn;m0QRog z{xDs5uF*bY*}_;W**aKzH`s;K{MH2iX2jX9gYD^g(hyFvnweYn7Be!|8~m^bN-^Jx zIT`a#q#yH#?Hy?bL6)sz4ZZ!C>~Cs^0kPf=GIljJwq%`O6X5JT6fxMR+j-8aS!;-` zOWMb0#=Wc*5%y*=nZ+nasEC$qw?})2tb_ZQ>t?TsQvT*xvk|i_@5J63PO34&>SyKP zRUr^r3j~~!Yfjr*bUS<5S!-=Bm{A!!g;xS^bKt|S^v(sGk+JTD^o=@-Q=Y+72J(&- z({^;RUM&D_`@w573N{04Em!lgJaaMGejANha~*bg5U%418s)N9!&yjHn;L6wz+KEX zF~(=Np+5ZN#A)-kog&i|EH-Pn9;>(ii_tsdr}mgL=flhaPsceGW{^7%#H_JB;CTmN zFVqhrk<5o^3S8wGW_DXmRFhSQ*s#vH_KpYGm6c3#cw_DBxvnXYHgmmz`x}QgcRK4b zW&MCTk%hp>=!hq74yskIP9vzr-}>Bd8_%#xKu%@s-Tb2>?v(X`kT%RfJdob0DbP08 z$7w}o9_(jjQqU%#VNQmt?8;NjKDMseZs+EZTUG3t8}GNfMt5uoo|^T%_2I1UW)G0I|De?$ zg`7rfQV}J``63ops{*CG5xSd?Q^0f!#v5 zhQ4NVV0$AAvW&{j?8m8H75T1x+GoPu%{;Ba2`kBr#20dna;kQE8vD@n{=x@(e^Nx0 zU|0TMe6k+u#^ac*%QZ;a2Q|WtplX2DaHpbSVD3yV3~bx$sc4&4%I|JPpslD0lc5a4+}b5gNf+cfeoNlxO~cw)-OQ zy@6D8hRkTZ)pqpwfGaOmM@O4{oH)@(z~w`HFAw3-oDS}Oi-U5)r+_@N#S=;`#}G`%UpT z@#pb(@!RoD@!9cFL}Jd5zmAV3YP2M&iO1(%plomHzF0)>U@;6tUsYfF1KaU-;&5l< zi@J&3tVZkp08F?gTpS)2-5vcF<)W4aJqm6uc&T7k!McK71&iPmEWzn;vBFN-(A ziuULJ%H5hPFMp@})bcya7nI+hYZtd9c2LBbjt$DWTf6Yia9db0+DPQ^bBo&jhlWUkV`XTacI-aw*YYERap9zBYt*fvb;0A&cij0$WNr`a z;SqRZ*Wqb?yck5{9s}Rn;%n~;p8OnsAO1+Z>?ds7 zUf}oL*x+}CV~CeM7QP)m89u>x{tOGE_oA)^eG5iJkB8^ry}LbmC+->7jBkr`@$<=A zBEOF%Q{$2GQ}Iu6{bX0tE4Vg1G5RQaGAa)b4{wB;tme9!s6(IdBH}fdV=qr7=Jv0+ zL0loeG~N|op3EW^c>*9CwHZ#XrV9lLg5@JjN^G z)N7#A_tB8IBZKdU6YdE*;F$}-y@NG597=Fl=xtmq7QJfJk2cOZ7AbSh>KqhPk9~*SP#Fza5(v1RysI5hPw^pth=(>u3?+7JXi!4EWoSy zeXu#GLhQMi?3Vw+xyRt0`3i5}MZ}OFB8r?N?o*5>@fdueHHi0}iC_Oyw4aON5;eje z;n_f7AegfNN$?P-(Hm*InHbf(M754(V(b(=px3a<$wox4?meWUkZ=6L9N2sHiEL`Dn1u*`NPJ zLR<&Ew`5XmNUXRzyM7W0u?_qCOuS3C0?&UDDIWn;x3G%Yz-u^BDkqhXgcJNfV1Ir7 zJh;MPJpE!KWsi`Bun=9Q1M>7{u6+vpc$28oL;M|%hv-T0{RX(q=}@)Sx%G2)8Tp>9 znCJ3Ouuy&+b!W(y6P{(@eQa+|9|&mvY55NT>iy@B(OuTTx@hjQ#rT zRXYYep8{OAqR-ji*6Q;H*mFgxe_;pEw7cP-aD>-5mnS%x7ma7v|ep#bw(>)?5NR~*u_P_#h36@Q(w!yj33YBnsMNrbI~Vo_vz?` zdNB?|4x9$=91q<(uhDDl%Bw%b*%Hgx=bRLKwUw7i(ece{5g%o?PpEC_O*+ z!ZCl?d`SCOTY-H5S#RI)lUU(t;A0=I@JU*H<{#SY%sj=n(0SefbG~7ZPP6bX)`c98 zK6N3xx&r83&iUU2{Ce|D`)W9GO3#Q{yjF5pm1~y?GmNuJ1bYOTmumKDE!J#pS5_~! z88|HB>FZgcQ%~CcM7VEyOKhg%Y65p&;bF{7Z*#`ES`}tDJFW!SXe_@Y{!5;h2m_6St&3!x(Iy#TP z#<07yX04#CKBI(ZEC7#xPOG@5ftz-qwy&8pK&(fx+pB$xYNk)t7PPOcoFVIOV->hv zuMe`fdhDS!ua2x&OUmBW)>~?~t>x5zBVy}R<&o)1?Z~U`Uj{YWv!Wg6YyGIR1nmN5 zcSOBnc5N}QcrS370c0nzN~bR`<(aj)!j2)W!LinS)86b}YlTp?6h6Om9^XM-P9Ogk zshasp2N(WhrM zk$J_!!71>ELFYYr$(!sX=!_NncG}5h5~nx@T9WFs%24witXu5@E!yX#2R~N>qpcOr zCJQcOPg6M+Ip<`!#yTKshEo^#_R;7TCxD{^;53JGD*9UNx98lx-#EkZz|wvQ3)$yp z_G|r=-gj-PVqVsQ>bWrUeLvrs&;2I@5qqzB1|_WBOm(Zz?P#wrNUE*HZ)Ta>k85^% z+B1Ov9{65WpliPfyY=+~7WT{=%<6ixx+d7V&eiyV3>UkFeF{~4!fO;fbq>3ggW2h* zAJpf+gSpo3Q$4{sEql9%t>iTuS@#_hSgB;kIeS~#{jfE#v+s?)%Q^xftFf$-(1&9G zF>7QuvgWP)p2M1#N4H^JatV24R=uWQq%yXr{S53kZ)Wr|o}tggEPDGP_h4szSfRSz z$#98dISJ=1WxdYr1*Y$RD|_w$&M*tD=L`XS9pdlw=?;Ep?^iaxY ztuxjFwARG_!g5}F!?y*u8nZ9E@mL{azW|@+WQIjxi<7*Kvv{rDr_EnC6V4uPcBORB z{`INu8fiG@BI~$1AJB1VMg+_M-`!YvTNLXi=)oM$xEjX2yc%an>9?Bm`-Y4^{ z6*&C{vFu;TZrwx%rD9TF>rytJar9pTTa~nBfLMOcve?@$1{QI#c8F$(|k)0(@O5(jQbY& zGQUPw`vku044B67w*{QW)x^iYhU@l6&paO}uYf+s1JCXFx9mA*UD5$0$+_slmxB2r zUNNV;x8d7&pb?x3zBylBe{YBko6ed?;#v6-%Kx3GuL3q7Lc{i#oCWqMS;+R`*;0wM z9mZPbu&%Gc`s27`wzJuA_0~wpGokScVDed5PnWYA`|;Q>YYVXoYyX`LY?nW4tk?0` zTC}R;fSCHpKE5{<>Ti|eO;(9xXWjxZsXaI@r;|Un;qI4$BNsvEcCs>GxD(i6BuU!U zqE;_mLH<=|p1F)2nXOlbuTdTAFMcMEi1q4cUI*U(!LC<=Pgc}gpJkV9`=zUc9SK*k zci2FFbMBKuc{G^bptl)LccCogrYB#u9W$wL%yUFF9_-qx-AuQPTtlbX8_R^XMg{0hR}=Jz5DIaU#w#5~3C1^hYE6oULQ-wEktaUaNhY@UGob><(!? zrXE(c;XLo`b>jd7oTPOWEQ{_0IZO2|ad+q^O)R>*_VIKxP`#b%JYqLwoWx0d-~Y7!U&4>(RL;Oi+`=^wI`p`i|k)g z%DZcLW;b?|@YC=7t-}h8a8&1ndb9rqskC%LnLQM%gYE5rgMH$BS~KW!Ip=G~akD+F z{Au_whAzWpQLvx|c9YwP>$JEcF~4k|sNw{Gz0GoaKH;i@+yGtNf_ zU5w3q102uFoO`f?{>EC*=e#=uF}v;BDahV43&Ht`@Vi&3MS6kPeaO1o(yY?!@rn=Q zx4Yr(cOczvAZzPQWY4$I+Pm0a*;JPOMAI6uZ+jk}$Fu)|FW?QN*LZmRSiD_h@R^kc zhsZD9iTqiHk6}ES<{u*k-bZ#m#|qDfvor!u^O0Ypk!*M159o^T>R?hzZPxcxk35aX zK7|hz9f*Y4Wr7gkX3-D{a!c(k3Xd50&WyzEH{=USM zIU$^lA9^*O;OThGzM`t+27E|I;Op5*M$PNk-={!H#*RM$0{zLM`6+oKIT2s-7IcLX zcrb5?FOM(ABYqV>4Ua#K=fvgsrq9PWH#=zw+hq-CFIMH@!6;Qil`wFoa^9jcA)0~QBzlXLIoZqE&+&ZjqjPt0AF zdzp1qj!%oj*|qgqF_$*CyiMJC*&-4a=#HIWxK@`hU^uJa;rOSre^~ zHbhIJ+0ppuTh@3zpZ8-WwW2ak=My~jCt%Qj4vv?ifmF`FnY2l!P!%#5Pxm~|;f~yC zxsJJ7xr+Slox7BktjQf7zYv$khp~=nNikl=&!FO7VEj1h6Auq>10svVB2MN6Fyg`J zeV+SAw1AatkM{A}9<2o`A4X5H%8R4pqE1l-A|Ag`w{jx>*?ZxIkLGjWXWit>_@cO8 zyf`-^cTa9`u1c0F*k7jPH}F zewh-Mh0UUY(a`Ar=y9GoBib7^F6drxL_sg28;uGI3${cPc>lTR=IG?8LsS$k3%|hk zz8zfOgO9L;T;m<_^Kt(;$xX~X%9*s!?I@pG{!RJl@(JZj%WLJ%%#F+?xy$iE*GsNU zz9!l*2t9lOa(ozG$KAm(;c!;5BWxR;72Qar=w&c-NmR9=p^X$zUZ~+lV~Dm zvNx(j)auBBV~HHKFQ`>e7A<2H|Bfz;PKjDV!#h~}b78OW5BTvoEQk?F%jAoADDjI~ zxz}?4$eo<4lRLnv{8~PRlQ~r04f6R2J7nfTyBNOD+@+s~;NEENO(odPFj3Aa*S1GJ`k&rvg)>Kxn26=)X z(R>M{C{CL$;YW63`#pOlll9EpY>qT5Kr%UNtTYB0e;b31WyS*|8~WtCS)YhZ5;B@L z5`{@cuF`&H1CFyJIoW=zS(PlvMmKpdQn+3|Cx4OSD@ByXN-t%!GF<7cv{p(hX^@Xg zjA9P^sXIG30r9W$(s68{8N?>Kp~r{e_gy#Vo2|^W<|m|ciqXnwY_u>27`u&Fqm6mk z%xFy@7p|N=k633qn7S)D!P_zyZmA=u$Zx5D+ynVrjwZc|7L}D$L=oF7!<6aDC}l8` zT3*Se$jT%60I!*VK5IzE+kUAWJl0(B8Uti&y(J=(%sOpOU?v>q@whRRGfEm|jn>8z z5NDt z0gp1qWVA;`a|1hNH1W=X-PegVmo1+7)xESqgn|gm`Ze zBe{{9M;T+Ral^=9jxs-)bvRc(T9xf(_H*{h4D6zY#E#OF=kL_6Zh;=oXmg7Q@QHMN!;#_RETxnkCupG z3|W+_N++aorm}~t|EJtmt|=#!9m;s6FDq11aj_;hZI(eEOskc>4edP%`@AMP z0#-McT^)4cZ8?H-t1WwRp|TYz@F^ZfkVH+XdekqT$5dES_bUPxg)(XZ(L>7R9%QIuJEX%xrWxyJ~`T4$_WL>0f<6|q|j zfTg5`mGDNY$Ovw5ZdE}iEmoc?8P#%XYju=5PF>f)N2}B3>!YeE%K`STeq#O z#MZx(tMDLP3sj{B`O9hLG4f?OwbDXa#l2ffF|IyQU9BEcukp1-jpnb0NQJIkQKFSh z$_*^j<3uN0llhc5+!rY*Ywd+y@WvQzWM?1j)JN*W^q%@Ot{mQmBy`|56WvD#eC zp`Jot$;t%zu@r;VzA^m8cH3R7m&o9Cqn9BW^YnIlCOxtKCFBnk)Z6GgbOlM=ZDd7X z{4uL?dWNljWZ@P8&!|iEwz70us*08JQEs7ZM&2{1ZPmG4?X~LFBDAzxQq80Jx&AhF zh}u+@)CH{4N4b$a7HhYul*lpJt_rKEyY-Q^Zf$(mpM~0nwudf-vWFr=|AZ3h$#joC zMsI{2@x*9g2F*R3nnTIEiH5cGk_@M>(h_+KJMfZHR?W%0m)Ck}m9*wstmbwu)gEeJ zw9eW@ZNJt``&TWgPEifzJ?xv)MAc2A%9Y_fyfjy#htn9j^`fB?q3WUM!LGrp!PKG5 zp@E?{p`rR?y}J=(bTQLen=Loi%is7LLpYhvB6qvw0%$&6>7ou*|5FQU?X`N^Xzhn~ zQCqHE(2_a-)tYLXw3XU>HIv#42}q@cv9LQzH5^JfKiR|at@B1(Be9WJZyu@|Y8tu_ z92mS7EEdWTY8(oM`syLQBiEj4mbY$LshIWC@X5D3#$rjYlQSVpkCZa%C&J&h+Clrx zbr)!Vv>Hxv{ZHCi=3%r}T1%k5Q?jWYlo@y!tED-P3wB;OJK3#t=6u6tRMby~)`#kb z^x&D`gJ9ZFwa|*t@=$#JzTOT?@}9BY?1uKMM_%k@vU74t>!s0hbLD}OL_Mf>(&lRq zw9L-7&Z*AH&Lhq>&LPfW&IZm*&Q02I?Kv`kn-hAKoEBEVLh|4<+a0a0)(Eq)aafB~3C$&EP+lqZR8>pEXGb|ZyHdK-yKA{`xUadFx&3Z~>u+{db!BvQa#qkzD-W^J z#!I`x9pRs3wbmQ6^^AJuP^RF;K%ao=-|fHV|LvCoJp=Coe+733M~8Ch+w`QydE>0P z6xrHolMCh;Ak~mtE6Lfx{k7iCUCs=yFRnW7zHXm;ji-yp>zVJ_=($Fzztygmu4c}3 z+9k!nV$US?3D>o6So6))Mh?AFC|ht?z#FLOKjJ&;d+IyxOXZ*C@8mcAS%dq67lK1W zzx7o{bu8fQc49I$+QY@VE|*o4Yb~_q&bh2-Dt8{wKb~ryqn_>F3f}FWuqUneu=|&* ziF>GPhE_rSTkWCrm29#vccD4n7<=^0Ts2p)RN$w-jsKW0;7jiJ`JDdk{*r<5fx-j@ z`-W=h&GF23n=7ra?4lWt$?DGSA$WZ;rdYHjd9zYZQlZu^E-TUJ9WD{SqnRL*AaKLC%d<+w`4?YgcWfr zA{a3`Vw`urccJ&4d#E$gS=6~nHKnc~q^XeIlSWCs1$yCDAdkO-FRjn(s~M}s{)x#H zyE!(Iua+;`x7@!bP%`)$!hC9@xw*qyW3LMjk;b5tPN{R9J($r=p5xxhT<26|k9e8m z-HBWgSwB*W>=lvFtGO$=(z-TlKV%m|yT-a`?U zB40%gj@Lh4bmaEPc=0+%zVO!cymIGvzji8GLIoU3Iv;*x6*sTzuR|Y$3j)dfNqjG2 zd&eG*sT$CilIW7foMkC_$Q+}8+cZSVga@CQ$XKI%!#E!Kr_E3!A+DDAcEt^)4bp6=c> z5kDf5#2XcFVr273?k?W$G@v+%r$H%7fjX~EmWzP={z6{;f&l{bsQDolElM*VD*3p^EmET>!v)Qx9lgs*{XmSqoN^N9SU89Y4UU9}an=p&_+(|s=(9&7mx%ryy z`p-GQ`BVF)e#2)TO=fIQM>e>nN8wz4FgED2eg&(iX7F-gLtsvzL!fmaI*>5ivy$5#I*3i9>2m30IK2*E-Xzc#Yy*GY0xs&6FT&#dP8@VW_$iogO8c<&6@T!) zG0!NEFZNkai4PPs{xaK|=gbixB}eV43!640=*V*Ux?G5>Y~mVo@B^!Y ziezDiGAr?v3t+%k;7e~LhEYAd46N*hHQP$WSy{tO04DRyIB9$}ikU0TpJpCVkfioj zSey-s1MH5A^mxJe_YtW+A;p6+Jx<;Z)^bVyEN21pr~%@jgNgN!LsAdo*lS>Jy@S{1 zfluDr&S8Ir0X&g;pKndE+Td}Y1o_GY+q11b9ZY|yJ&RNSHnwy(V(Yo7?Qx%YL2{VX zMZtgvQ=4ZM`2AJ5)mx-JAY46RC1=KxI|nx0nJ7^~qPp<7^Z?Q=bvr zoe93T5Y}BUIQ^x<88|a7eAlhS5DxJDG?r`(eq?c2ffv959Yn3V!h79B+`@8Xg-bjT zziu!L?bSpPmg4WPBXY2sSbcK5mPcThg8iO~80I-5@Wnw^_K|g-2Mc5i{>e_*=ohV< zmSt73+uH-|A$Bw|g;&Haioo%`Os?B(@`vL|ow49!U{V(bWosjM0KMuU=V8yJke^E{ zrEcIhKDdt=iRky>9)8)2L6KU6;gsS^CY*8|fA|ON^7~fED#Vqd;o;VRtMCV#W&v#5 zOw89LuHgXDuEpBb1xRF%&^36Hx1D0@GmFtNlydsD+D3EuD97j{AX?tR4bDl${k;4I$2|9MK48%>H2|JA}HNr+b+ghTN!jD{$9D3RoM zogz*o;x$vi4)RkS;VpdOhv0oC4AopjT}}|+5)tuXtZfiBcZ8H4{%j#BF}v>_ zQJQUBu|9D>9gK1#$VE9=u|MoD_yjNPXR!SfVlQL?2`&vQz8aj>?(i)B#Xt5khS^kz za^dkTWEBsvXPgw!{6#e26e~JeDh0m(kah1)^zs#BtQL-?Dpgmzi0!pw$S9EPZ_Kfa zyaLTmYS*OZ(j5CK`=b}}~HlG|sZhOI0z6gIc z51#f2YS&#r=3BBezFC*76V^s{M@QK1o$*SBP-*I#rP$?QR>#^k;i-nmJbp#?_j;tH zj=U5s{xxV*Kz_$>>p?{G6Ghq%%Uy@J-IfUdB62idvr?1TU&-ws)*EE-2>$wbYaUX0 ziM>~mwY_iW0?B#;inM@C^m5F>Qz?yH0j#$Y@=;Ds2XYz9{On{0R6ySE!B4F~eC#-U zm)b<=Uc>udNad+W@(J$Y*KD_TAn&$SpF6t%V}B$u%~C|wPC1exeK#3S)n~N(W_$vJtFuA6k1Xn09>SDwu6$`2|wrk(Q#@j!{WTr&3iV+aNcmtrgFDVy+>w zPzmI;5_ru3{0ZG`L?%K;G6XV$4Yp$6_mTY4BI0ay@O{rH@0A$vxHlj_d%=hcEAQmF z)MIC@lsHt7DeneCT9OGq0FQt@H z`6epxSV&S$sktS;x?3x+WwX(>+nG6zI z*p6?1ME8EQ;@d^3d)D0k$9_*FWeEB%7gG9&IIPHR8A42C7N^%1w9f&m;%%0qu_}gh z#^gt9z9TL^6W!*5ZMB9xmq>Cz=3px&wO?B2(GOA9B5Mun`;`@LK@9vS`6hE<6ZC}n zpO`53PIhkyc~xYcsA2@?@E_?N5_X^3b~}jz=Lc!M!e~ko)7?VMJbU;C=WZVR74uWa zim(Fa7xNV>kiu$g&9a_aiP&uqz`D1?`C16NIg`(8jeT($-E&KR1m=ECzE3o0Kk=3+ z#D+4;*FdsTVS|+%qC`1^Ox}n{4xvjI@Nq{wj`%40Tn&H zXz~I?>>EhGq$%vR{vg$tmG6qA%4!ThW0jv^$BU8T2xTXT?M~36^>81iV_i%oXJoOJ z)>>gEGj|wu$k#fnuhX~am-NI~e5Z{9<_gfV<5petMif;k;uHN}3qI&lhpV^L%vuSp zoK{_{2tHXsOQZQfD|@N&)al9_^5e#!uf2}y;d!=A#O4llEq5DvjrDpKeK#mg*-+_F zi_n&kqL1cU{}NgJZSJu8Q#B~PBLn;Hg?vp}p$^hQS{LU&=L_dg=O^b)=N8bD_RcI= z$+fh7YCy@Y6qbuf%^U-$IkSO1UBDb+T-7V+$M8RU1b+tB1=a^XgU>_-Uj(a!o`g2& zTa0yBe?@HthD!>m7QV}9b+Fddnca2YRm;7^ebIf_ecip?-P4`iecV;Wb=;ZQSyU^n zCR83uYpJ3&&K_uWGY1*VvAc_g<_D!<-@t4CQh#3_3;YlL%>r)&GlOkHjX^1zgN#(L zds4OLvXoev>*yDtr5SJ9-OyAA4qbvUrxeL#}GBQO*%sJ2jJXR~qfe z7rtlB!^U5$-wb^Z76{G@D1mwY{QkGTy}nJp3qI99$e%3mKJX^^U+5M-v`n0-DHTDs zNw4KZY6ERF_{&6hTTcq_5^sz*L4@Vq=B?;G;C9U;7aezs%h#yd9sw*an|l? zB{4tX)w)7;f*S&v0^9u6D1Cp~w-y}ap|6mCwZC}42z(0Kp%g|raKy>>+VDZgVd;Y` zf%c?uI$bieHp5fUyU+W{`@?(G+sP|=yL$e^TWaH)=v=FM1p_Wb=l8 zIrJu&EjTFf+y9ThxZm=<=1NcTFl+nQ__GFX2lfUJhwkWaj0meZ7uv1PyV zTRjWPGs@M)UD)&4Gus>RR*&c%(LEwr#7S>)?=sH=cdRR$tCF+2mP?Hx9#Yrw+8%9r z&Fy;YP=;WVKsoer3Z z)?Pb@VDaz8xBm3~Q|?dYKSTb!_|qolQ_R}fuD-IM zXhnkU*?R$_opshO?brd*Q%{}Atj=@w$CLl+iSoK5q9WczWQ%M8Mv*)6Rm7x-&)&-3 zQJx9zuC9_!m$pZ#FMpw`P$BykyDy#oEVwB!)j!?0DE3=Sr1?mKwggWbEjE&}bOTkK;A{~&wQb=6a{LYiCrqeUV^V(C!+uyt0dl}sBuy>+2 zzxTSQmS>yW?<&lS7SWQcVK@?-iGSC$(^|icTl$XBhTy3{tiQZ}wXdk}9kaSA_Ef9^ z67$s8*Pl7?G_XE6KGaFC1j&m6712t&fzZ2-5U)T z&r`-z-_yub)|1F{-#yb^#C_P6-8IwsPRpfrR;MUiOalC(F0q9V?(v{g76T$SopgAJN(3PPdY5GR>rFpw4gS} zS!C;zT>R_$ltl-;V{m^Z+tb)Dz{Qd+hU=MNkCD_~Ju(*5Tw>E~IQ61kQIX=|^Fo0xO z##PB`A0C(8SsnynE?LJfV6T-VyZe+e$LI(DqZe`h^>B1NW)-+7*UjYkKYOtXh7;?r zhc{S&e7L0K#=ep&ajjQmHFs0i5Mi^G0$@Px)b5_3wl$QR|Z;581lx;jBUtXgUsEw5HkE2(ABB<+p5U!6>Zsi68Fc6=wW zq+QtVS6~({$6IOxW}eet3ddlrS=fATOfw1@&-6{;UJdl3dO5wJKA70*AH6E`;Dk^2 zgb3R~s~G4+RWg;TQq`ah7F-iz`*}c(E-2a63dAqxsXNrY#Jx7gMRc30mDC9J8K}Y)?eyv zjkK_G`omeufEAd}E{CUenRAi~4#?zMIXgM?J|(j{QvIkV!CLyE#@C92BHm>bL)5`) zA!gv1vVrJtb{H_LVI)n0f3uzZf;!=I;0OJQ?@xz;G#7@)Dt(AvTGvAdLNh|wLH}HO zD*dEh!#GH6WSKdd-0azKPJV?~Ac-@j3i3;$+VkKvROL#$h;W`$9}v@Cug+Avsa4bj z>Q0y^_3=5*gMt+R*O*1MgCyirkAOG6o4kP#JiI5?41A8GW^*&fcx0@FXHkv)(8K6$ z^f9&?Dv~+gyl*zZ`)*7H{G#xKYhv?Pk>+7Z*M`CJSpJHalMg?z0=QZUyqpN-L7bQ0 z13%;?7}XdUrA6Xci$}$n*B%5(g(C0O>4sjEL7KPy0X`$g*?c$EX; zl>SZS>$X;Jyy!PPpM!kmD@3L0vIf`jcWZ)7OeQD!4B6wqU=UKs4U{D*_ZSIAk{nMu zEt&46;3>Akqnij~wvv7L1e7B=ws~>l++*;V{*nXKI9NpX`493U6Hs@fIXu_3-~>TN z63rNjTe|rljK*W;S86eQH9cgHPrzHghToAE-zFLcjL6LH2gCCoxJpCra4(*CO1PCn zK~i2IDV4xIPQXlxhbPzs6mmFq9+rc4MuD-`!sZR(Idqn9gLmdYIzEEpoUkxA(44_-)H?xg(9So>C_=cZ~iqDab0bpE(!0$HV2fvWQ zFc?4b{R^7&GN|Ql(24n6sS8=6Z9w_Jf$dRrZ9}#7G`a5{D$U1*n8DrC?By3;F;!N z?Ek^ZFMzik>nOuK|BY<41U{VaqQTf#0D+1{taNyEMHh?jxhOvJ1IWv+!2blQAmrslM31}}Rj2ZGK+cs8CYr< zu0sc^z%ODHGMH^hl4Q4>1V2Ageu#&E0d(ZQIInvdmEt188^Gg+&<7!@l>!^&hxwen zyw!~4xerzZSVdiX6gcUA@|UW?tX>VOdKZti5Ob6RocR?Jy_tJkz!+PQMUtL*$qk=W z;w+D1Z&yEZ*SP`Ia!%T z?74a57JO%2QzD&_#0Z8F8F&sa@;qGCi|o8B(j~ZoXVJzrsKf9VBdgE7y@7jeGedpg z$TtjU4X=n>vGdkvOSZ$XskVYu97508RyC^Dk3>UngPB_%Ok8BBq-524U>TjG(nQ#i z1VpqDs8(n8_aU&?O+*N~hz<}^B6P|*Q15=czAX79m&gj(0pi^l{(3=bG2{kWu7*w0 zm*-BfQzJm$MDHMxU6z6CBS5FJaL%aUQ}>a~$=p|4u-CL){RijLF5)Y_(4MtG zoHK+Ig0kkOu5>DXOU5~u1cqg1u33S~83obuWS%ePp{lV1`9q z%2M2Af3(IZzK;Z}n#ga1xZ+5n3{kB5B5GW0WLBb?ktnK9EJvd)q3X#|WcV77hxBpz ziXMH*d32D6sJ+w=n>ZJ!+H2%#DVTI`*8VTF2%rwLWZKTKsEzTN-(%70-`S@>_#Ob2 zO3Zu~Mz3~8Viu77eF3aop*Y>v8&Yr+(B#Mz;W*@(@V(b;j@p{r;9(`Y(yi zJp-6M2Zov4;A}ytu)8hOl zD&I6FyRsow>|4SU?@e}QU*>QI_}>B^o3Yv-lGpT|*oljk$xpV_U)T%v*e!jy{|U^( zKSbo#vTM$f6(Y``Cvb`Ha2o7kY-^d>X}oF#lGTNgwMNFea1J%&)Tl!yWmPhZ@{s=| zs-OuA<^*fDoYflv!a0(!A;e+2V-JjEOudNUwa40P!dTlf*3SGbGKVG+Q4v)yPLa>_ zgggk*ol$gR%s{-YGCQRibJ+#iAI7SR&I8+7yS>cmvbap4xr}cz^EZfB3}O}svPZ@v zACr)eDfIW~$z9fkLn(UL2AGTETuZEU2WGA;F@>z*1W2Sp^_FgBHxQn?U|NF?B6ss&U^+Y|;3~~9CqM}I?#y6C!MKfP}SnDgCr1x3hXUykQ_{jUw zV|p!i5;^WZ8nP>jGiF+wWzRMkr9++r7IDWZNNA> zvp1%Z&$|{)wHWPpkX*5&$lhIc$$!kh$l4eEXC+p|#rOYL#T2>UB8O0PJ}5`tP9?_M z1M5?CQ<%W)P2)rnb=3YwV%wla8Zql4hrJN5FB&H=Lbo(!y#KEZRF$(q)EmjjCpxL{ zCbH7bv4ggPO|L<7O(d>1kg+yrM>jw+8-nZqMbC$Nta~dWtwZ_$ME2WZ)2zXq;xU2o_9VBpIeS)ASrb`(NmvDu&o4Txeu3@#i5xhQ z$uDyGMHPfBL`Tw+gC;5+I>=@e-BnFyNL0W3$?Idut`ikeL_J#39a7|ki)tG`cwXe( zgHNz3Cz$7L+}S4bo_CNhyM(cChi)ESVEaXaR#OEF(W&63#Y~n^;*d-0njOD0~SBR6Z z3_7Pce^rW;hW@-_0rBfqyjoO+6IBBhW-$krT`BfwLsqmK>pGm>JDD0e3pksXAfZdB zlRcOHF_f`(WPcSxXNeBCf4J*M_;knM%!(20Mtkgt%jr9f9u`$9-tiD!0Y!IAFTSJ5 zo7LiEP4u=CS;(TZt;psTJ)qw+e=m8697a*c<2m0&7hI9=DtaG?I+g$L9+-&zE_y(V zjQhQBBvr>^cEXF8uAU~qo zh^X}_s>Lrl_cGDf$75=S1#km{*C)GAgh8 ze-~Ks9?{Lwi*&{#FI7|;7TNQO8JVbmEP85+XGOnl(XUh7Z3OEp`h6#h`%84x6y1zP zeVqTVhRA!yU||>hzxS=^i}^WjcZhDn&soE}WFOyQHANkt3)oH<`TaKYB34C=T4eDH zyDmQ(pgg;+3;V7IlF|cN?aI$yaeuc3$r63dQ!`6q2GeqfqQ>cKuJxMvdC$HP^@aAb zPqwjR)}ZG{(j~2P9F`Q1OvdTR=Tmfm7?aTU&bSJWMOlHiXzuA~)e6j|=;@i99a5hC zGMII#j#dkji~j$L&7$Accdm01nZ3iE{9v7zf^kjb44lGM&-2-5x#Nd?$}MD1)XIE~ z#@xyKB&1E`#lj*bh_LBmbbEhjNm1;hYq6D0+emZ7*twZ{tee>`r)G|Jb$A zVK;~oCP7<8VTJ4`R@j#r*oaO$&$!3Xg{Tj^FFo(R%m_qCT4dRC-D?ME1G#|j^1s@ZvM@vud@?x^BPfQWfy0?8*6STcakO!N2rCg zh`yVxiI_*DU52o;Tk_7*e8yz%ry1*dkP~b#Yx0P({NfW&<8e&kE{-zVTybkCGPzZ9 znM=f3k~LW0+uZXdUSEcB)MocZf>XRlrpusDrgDD;(Ep+?byIZ9c(in5Wd0Sak&x4Z zE+9zqNls4D{b>Vw^bRNeBCLVNSOXh*mCjwQ;6$j;dM!i-Woja9g^$x3t6?Gk6MeDM zG8)lStpK}mFqTPnxDvVIxHtR3FUk^auM5NL7Jfw;@YTJn+jl;15!`_L)@o~zRm&=8 z^|emXYpwtsn|mO~GuaVE8F63cc`R$6mA&L*j@My_J|_S01~wiJ9X4xIG@zTgcn+%H zoOtFsSW+{|Sz4_;<1t-H2Wz}AG3*s&8D6&Un%RxpWP@BHSF8`YY&Xnu))i~EJvaQo zaa8I^Z?hl~<7-4nefYho7JsP)(E?Oc&g)-6qJuBN5ET}5rywg&T%X}8W-`TAT=p#fx?ag;qOCl zysmW2>q6&>p?J9k$roD+`(rI#5dYx>sp1$Kj<#Loi)Dll)0&g(s^gecA1tW^QUA6| zKlNWVi<(+#Ngm`ae7~!Xi*^$8Oz07L3tja*W?}r_D)jo<3TJY(hdqB->O;*=MQKf>^e1w)lWfhL zR9$II)lerMWD>XzhBQD)p>9=9%BGZ>SyI$4YEm_;l1ok?l_m#qo;BTgADSEb7+Rrk zGKP>zHOBrCPJ{P617!CunNqL7j3jx0^av|t1)u!U%3^IcUxE(i2Pu4Mwzm5tCqt<% zID)y~i10K4Q~ONci?PhlSZYT;2Qlmv*TZWA+UtVjg_K=sqE09GsFzX{ZbV__tn8FK z!{}JZ=uNA?Q8BbPI6ZVxZ)!FnlO}=_YoCLRbaLsQDHGMIYER`Wo_&1BIJ}jr_H8ou z-V^7ZN^VkG;`IIP@8OJixy51B{03c_37%F&`i2!+o<0hB!w=vfMpL117k+mZK6`;< znzT&bqtsN3sn3;Z$^@{u#7cR27o8PTNHZO0!FWr1Zpk$9JPB>g^$|l?YkfzHLSko5+f;yay`>YT(u|maeC%Rk?VmfJtC90 ztQ;XNp<_%09)Az=!+Y4}!4hHo(etO9JX85ceWlJ(Q>o|4+W9IlZl$c;Mmj|Qgxb~~ z{U0(T{tA85=b6W>i}nTjw~S`r#DnLPp4^Wy;NA`8Uk>Wd+I_$-?~uVc)XHwPFz1rj z`P!&zH4aylZpe$_L!Ou0NvqlGzZ@&zf2Ee9!i~uTNpA@moq)ElPmV<&?slf!SE-?z zYAW)DR;h{A0!nEZMV*e-qm-k{4duC#OdY8HLl)U&q6}B1*Wt?6B>ibHZ?Ic%ROp~y z&YWYNu(!hSj|LfeB<+%yD6PTE*Kilr6t~=j-br(q9S?bzCftY|=1DT6-x%l2GWO$e zRuH)YL~)w1x9jme4;a%w(jT;EQ&6R>;52*52{{iNtq$3CCDD|7n5pRIFVJ=XrNo6n)+}3q4Cf>$K2k9OOhMivBhy#`Xygix~ubH@orQa%NOW%bkOc& zk3ho5Si{V2Mq_JEcL^w{8J0?p@ zq-^AzFX0M%IC)lZl5WCBtIVe_vqRvFH_-O2h@E62=dLAP%d)`?dP%&eNz2@kOxo?yeHNeEu;w zum|DWe1QcO3Db2Pb>*&OGm6^$>9P1rVP*8gJ3$seoeH8)uaZ}tkhv=>S0QrNgxFPn zIV(uIvs@3)k=;22zo?Y7>1O`2auLW=p z4`PwTvd-y=%T@!|T!l~k06!rc*7gQgESCDf4Y|r8MsSVqySVQt@ZM%1t65>wegjE* z2$pn}@9#lwUh{PXjHD-HDTj@oftnOgvGA6HYt{tS2+=$8KHSWmtjRFDBNa@_5Djh) zS8c1ko!xQ`Oz=JSj|)^J6C>&elC&NctHx&y;~sBuJq^BCPiA2y`22bvv#~;Y!ow>G zMwnbO!Pq{7wf(?qy2r?lAvdc*=O$p=HphbtW5sS{#v6l2{^k^#9*6Q~v(v!7%u5_0 z6THr1;J$s4{MTTU$>9DL1wm-Ue(r*0e;Us*FVZ&wnSMl^D-E%&TFi*p-~WN^zNeItRSZ`LGDvV=Gp{vyOy$_<*zUA7-U5{OQ8j zL8qwdy_m0^=mlR~M(-i^NDOjY8}#J`mUl-y>0QXoCs?c{!AIv1uegY{c7@ft0GsS5 zRl7Z~?w-Lo9nJqMgA1pTWa%Zb(^WWQfQX1cO2`Iv{4wgSI6 zjLe4U4E&p~u$4J(ZdMb6&cx1L#M&feH%?-nKR66WI^szEz@2w-bqBU!L3T?{IIpVw zl|H+N=(c--S-ON2wFS9-z)ouq!s8(pe}T{H4!ZE0{+DavN6x1ra(7tBji_gw85{2_ zOmeYzGN2(lz`u<``)wsw`Gh{V1+mxZEJ&TWo?wa3Vdq!n#M=w6_a#=No2Xi9Dstq5 zpI4sIB%wCPPonlG7)4hi3-QQoxQrfaiYI@Cxu}JGdlw0vLFBQFodVwMGuW~B`2K|2 zEiU-xC77RD{C6VJuYF+ILGpYDV88!|?;$E66$bZM7w0SVhf#SGdGJ!rz8dkpDvTjz z+-y8&hAx6-k72(n(iUb=XtNr4WM0mWP2jEN*#n=+JUB=tzA4nQZi{7-kvwF-^^LfI zO>Ok@@F3@)=lP%G)lR=?(pvhh!r+K(e7xdW*q~lGTgx=@+ zCyB)l!-B8C$&yeCGIu-iquSzqi#}1iU|2@uD|H4x%Yux)MnY$@D$Th6qGU+q<$E=| zK7Un3uk@#e%SG_~-0YKo&?E2SeBAPA?Un45#Ec+6F}ni9&MFc6Xv?mh!PS=|Ei14P zM-okIOO&DpF_R?J8WM=*QhebO_+Sq?DMqnV@`2xH;42xNfr~_I7QhrAL(FD67VdUd zY!h;`1gSWL9(iXcJMn7xsa z@8zl4otBt_4HA7EX_|$nIf*l&1^O%zc_Zgpn>ld^V@EVv0rrdyBJW2A{-7`3QeFHy zc>_;v!%o0R3(?c}uedX@3kXCsdj3C90xwoeJ@naP&Y4SbnlnDyv?$eLs?!u0PnrLHbolT;D>|hG96X(r-p^ zoUzX5j2VmO`v(hd2G~L^&e|MgJS1agM9-8z`1X521)DOOB8=uQ(Br(+Pw)Z?{bH6( zVrWJ1ow_oD8R(rA>={w-_7lii0Bk|vrp38CQQNUA_c;VvoB__h3|)H+cEJTQQcm(X z3Ie|x`(QrE$0Fur9-|t_o~w&a%gz3Cq2*)wM1jqm<0>QA7oCyHcF03>zS@FcR%9f3 zIrU1xVrYkFGy+MP3CbRA`%d8K6(Vtk#60W+A(M-j9n!v~eTC*A% zS;8|T;}Gm#jG`B#83%^ci@PWdPN;wgJOhCd*rvdKqKG=QVzo+g@|R&YS`Z89#GLfu z_(Y*_-UDjU`gJp-7h0qn5BAVz~2!|=Fq z%>+{)kJOH1ReSS_R_K)~yel7b<3(yj@1#eJ=pi=C9Y(c_YtG@`$8j#s0YRU_>WpSY zgILSiJii?LYy%k4HBOy3aY)@Sd^S;aH5qc48)?kV*wXWr3)`|D*XxR$j%UWkfc=W! zqFAM6%-1Z=zd_g*jd)!-?m%GpqW8~dKKTr&@4w8?CQgDVt~?B#+M9Lj$%mq@`)e(nZ?T1U)dAu+-Ej4KLBS;{PpXP(9q zo0$Nrw3yeNNBh4A*LumgL`S|qNOVS4s}bk)IOd@jYta}ls#u(iSK|2w*sG!vab4s~ z)R7;?d<{eDr!%s?JktS-r7`zXoc;BY&%DPR?d0C)vPuiN=3K5kjI*jDnBZuv-G4bX z6WdMUiTtr*?W^H&?3e|td~rrm4NT92jwwtgL2n-Q_+2F)d;qDL%DU{t^UMK;B}t;c zw&+aU8vQHw-cfen5LPQ;T&_xcbj=&Aw*{bCEwEI!V#Qv!FJVcY#KI2I^`iq;(n^r~ z(^ze#nekbCek*1|0`+qsDIM6ax9|hfqV1=00x59x{-x$xBs>@mZq^>yT+65{RTh6G zsg#M1o?k4ZNS-G zfGnGZ)H(CYpXr;tfC?O!$U%J=N=Xf#?xt?hkJ~Xox`Wkq8~#QkP^=8tVY#SAHbhP& zmzN4VuG&Sd#l}RvAT=@)nyail;cJfaatUP$_}u_`q4b>H+ky37jRj#>OZgtGsC)YmDcB$Mk&7dbsf5oI_=Y`KYD%_>zZ zc)jiH@76o`^_QvR@rb>7g2zL62AdsSr7Bchc&N0YZcHonEyz(P`5*kC7WiNb!gK8m z)>vwUG=aZ=hMeikX1VYmsjhlYtL{9fy-?RGiRHiPT$)={GeKU?!cKXM54*~IZPb8K zwb(dqcC!mPGI)fzDK3bRD|12 z29ZZS4D)RY{3jknk9m`#u3gx8)RG&(x)Fb04jdBUb=W8(I-$cLqvLo1+;aqklbE|$ZG$~Y3 z-)0=Mia6fO@tLIz&U5M;*-1y)WOiq(gB59~hwB;5X}Fi#ZGT%msYaE?q>Bys)Im9# zeA+}x3i&8FTu-vcK7-Y{!P)b3Hi!tMMi0WZM4}o|14q<++$QBACr{L`J0tg#ZMZ^- zq;s4a712bKcufWJ7515r$*~?1s;uud9$8%-DU}vv1$1&cwP*5e`sr?mWi=eOTTy#r zSoDUkOPAu;rr)?|{B1tBjBqb`rut5EI!~(&P1QU1OaS)PJQS;U4ISbmnEVu>B$2g}RpWB>FbOqHjuts3)d7d|sNO zP9VR%i?fNER~l}$)B6UEK*G>aW1wAFYO6$1`{#nvRE~1wg(H0xOtl_Z;b}a&v&@rM zTE{GT(Zk8n(k^_@MzWJk>|t;&|CPSjQ;qt;X@a#K7^Oe6)=Jei)m_8$xBIwOOimk4 zV7)bV(l4s4-O}L%$A2un3Xifz858szhJtjRm#1ozVUX{2epZNpn66NVK%Kz+pk{ov zE;=$RE7fe;A$X(>Wc*rqEC;Z|=i?{s!uzPk8Tj6D1U_^@IR=k&Gv4Pg^vfD00oAp- zD^H|6wkLW-Gg~L$H&s(HXjj zDH)2f&%}n4b7*Z`Ro!b`)wNsFTdRV;JMgc+dLUltfpN=jAQhl)PG$AJ5~=)=7ElYb zFdUzoFscUQDYn9=p9J3D6)isqmh>FZ`=@ZB5|Q8ciE3DSSEBuzhvIA_c-!U2_QN7F&E%jon`F`)8jlTIA&oy{%ml&KHI+V zAju~`R!%Gb5hKYaO~qFz#(qdAY2>We1s@+E|Lc(KO2%h+@)<$}jE43gskz$D8FF@T zPF5dDe*2#3qN?L~%SZ3=m)OeZ!?Wx%RPmW;p0biT#>nH;aat9vh}uT>I`&%KjL+bR ztMu|_Iy;$Ti!_JKwRQ3fJg~Hm4OoLk!EYLo*ZT_3zX|@tGkTBjkrS%@)f>t}xw|xi z&!3B}T>wueEUhNfeILx?PEs_O>mfaRsAQ;ze#0CXej+_rUZ^>>q3Rsj?O0{afT!Av z+?307RZdKNAc}tS3&5uCTfgk(j`VT^vfI`uPvu_H?(lJPGVbUT^)kjvv#y=fF;kid zy17FpqmhpDRf$5RV~ro$y|8=Af$L{ye;ja(g8`U{HEzeLQ-sRukHC^PIA%!y(2*>M znqS?ftdv_hX0zUp0wn_}g7fw5)=EcprM@=G+1zdJMG=%CA}eX^#=~xL(qu} z_9fWSwXA4+o@18m0%fkH)=<_-JHwZ(l4gGDQY8S#?r(ReSE>XumQt3HtGj6Ozlh-M z0WDaLKQtDfv;=lv3OvqN#H@x&`^b;Yip0XRK=QZB3#dHP5K!;;1b3RP*>OOqUU zpmsm15=Wxhd&n1+3FI?=fQ|m0ljbQlG@gTFue9G0Z67e!h62G3p?pRUD~%($a#6eP zYVJGxQ z%FXNsMs~fiKHC^#&85Q6JZd_glRgqoSxOG^RjVIWc;?96seM;lDIqs^G_wzx6>-MO z+0j(vNDe}`A0F*UM`ZXQecKF+dZ*yJ3$aDN;FlE$lY;|;xjcStdZZyfwHfcSGFKhX zh@`Yo&QSqpHRr=^M^8=%752eOMg*fj(N%{?W^;UGoe;R zR>N7%mHKJjGBVr69e1R?@@DxgWBzFUP2G)n)>}KN^itkVHqR}2qJ$o^^IF@<0$F0G z!!ErBf|gL)hHZZve5i$ep8Wkib_>w-TKIUkVRNUEKH--&3-1Ok`j@_YEkL24*)<$X zrG4bfq~XMW4i57k4{Zn0fr;c&j3;Ba44IQLcxgZEKjsR(e&}Xszj4qWER7<56{J#O zUZpL4TkygWLMv`)4{?jU~6@kXPL0-{8#=IW1?XY8I_=XiQ+~jcdGfUdvWnJ5b)vp9UtaaHO|ZGxu6_`7oU`~vyuFI6Pgv{yPB_E?FG`efhSGxA%> z!^NaTN-ruDmQfGLd87>Ftt`eHzDkAr=lJN=>{I3d*aszzpJv7ILaCNgPMxY2Ra+@# zWFMC6PS#(=<_}sc(HTdq8ff>)baOoBC(I%tPQ z+$#Jx>vW!o`dYlR7i6Cf;;$GfmcMOIfIjqxy@z*s1Us>&eL9>)YAGk+)SoA>ly-53 zEG7nV4=YP_M!kY}TP*w%j4>1ZoAr)PMA)LRdwLS%ZAnx|!}HCBXBl6LBEof(GyD%; z#iZ~on3x&C^>(u^+rY%`*eO6T-VljzFHfQZQ4Co9En-bM$eEji=4tQ9YkxNe>*@5% zdQRe$bI=}VcG(5u2J?vUYyuMzUAM2q@lU6L<&|Sa8iI>F!VZ}NLMPZ=UEyJTpl-)daI9+J zY=40q=b|#mXHeQ_pa*NPOICq*JKz^YQUPKg9_3?4VWOdF@HfU|2WFA7;-hRN+Rz32 z;e}lR3~C-oR9$p&UDmD%@2-a2E+DU<3SN79$1Io!SJ28oiRu-DZ`zdy+4G=zzd2=V zgG@_*$VBGDI&j%{AWc=nj_@bY)574G zBUq2f8*2%i*ql3jDPSNS^3! zxQuc21;5%2XE77r-&G<=m$8f$Y|nb&$G_Q~F0L^fMDA`JqwWbmkHePR4ubs%T+2qAn`%Gn=(qKj-(4tMT1_ zR)o|8R`u~W?Kt5JV?4RpM zz-QL67~>rdo;Zhh*2UjQ3=iNJBax7XR@}u>Bx^8p`UlDF%dV}?D7K)>zwoMOAe0AK zPtmj5ft@%8doYR>Nk^Tw<7kex+`$o~MRWiZ9Y8jLfjx$uoeX&pT^~i)r>!96lX#U$ zX7W@Jpvy!jmLXU1v2;ZbKtFO+l>6x$hr$=)vmKl#3L3j0&lh74d9d!pXuc6wP7G$< zir0=nI@^K^i@rLd@1E%TmzWiB!B2dQv|M4tXW=jI!~@*Tj@ZvCi+=nw ziL~~_ZduJMKQf9eVE>U^>k9ALhTM)tYPa$G9(L$m{Gy*+y%bj4SjNAJh~0P|-FdWO zW&~DWm9;9%442^UQ=@-VvqB;oCOW`eK+dkQ+ILwK3%@0TH4@CNCvgp#5kQpk(BOCnO4_s*tGCUM%KEr&) zXKtMAo)>ZNJ;yA@XO!cJ@tpv%-pyTXN2f<41q0cMebKd*nVqy?bONOpy)^y2N3f|+ z$IZzaqL$Oy;X}}>3t8>Ej6MlcnhW_6T;q7mpMtJ?f#jS)iUcQr715=QT>ljFDEcbB z;O@ThsiJ%51hnld5VAJN?3Xwx65Uzj@p&cD2^}~OvaqrR_2D zOxB_XGExR9$iYn9;%bX|OhBXcA;MOYM{;sRIx*@a%$n%VbB;0GWkyAx)%2V;U16iv zh9M)OEu!zc#Xhp&p0`3WPHqW|Jyysj#oDH^rm?qN;e zga2`tpVx?5Z|96Z1=9A66EhWY_XeCxqI%mMMs)@mKEh`lK_-4OYeMHXWZYsWRYelB zA{kkj8Ns9-g{)3wo#!zck)0^A)W)(O=MZ(8#WPd+Ii8=puntoaQ-}}7ScNRk_%I<3 z5<6JJ{}(d*(?BXV@+kv3l{>NvxRvs zKJ%0UNiC1=X~3f;sVzD|(-PWnYUQbD>n#ZmmOjKwfr$jG)jz$-^ zL1HFznn&^MSWck1tjRQC@O58!~I6YpTt7T%;qVKE7>-fTcaI^L~xQdTwo}yD8BgLYt z>KpuZgB|mVxw**q8*!`ogXctN!;idMWQl~CN0EObdSQx;%jDeu17t6jKJ7XA+;ogV zbh8tg2N`))1?IFdk|0jdER4j>Z2pDh73Tlhm{)h4l)Xdu-)0YsIY`2@`M8E7PHr@Q zI*`c_8sG`*?SV6Qg*7|R*dH>ZFVW{m(8@Ph@x4TKs>3K)%=(`}X4dhJ#_Y6-ST`zj zkd+-bkH>Vb|DHQdLtyusrh9@}Va zy~FIimYjT3*f$|&MD(2dj^4S3#?OlnY{O?L2Lsiz^I&rg=j0O|$nJ3cEXYtrR;D9b zwH7-j7C)dEs~4X;6!|1s_)Y8;Ju6 zKZc8Qa;zez-U+K@3@6GR_-)sTs(!+UObc#zmaFDveMINsXUORsw6Wlaw8TEo2_}+` zEYm{xAH5jwRQBI4uKSKLe`Ll>U|*F$UQQwvPUim_JNYu&?-=uYk=J}+_7AZKJ|pG7 z7~>Awi8^pkJxtCIM?+-Pkh3jO(PfaELQnMtf|kSt>SRiKBV7d z?4s6C(nnnL5%KD#WQ9xv+Jj);0cTf+QoAFqTJq$!tTYMwFF9JLJ(P3|S*eN@$&d8h zFAr3Fl1M=X;(JZ$agiCX^8z54!3m}@TDuG9weQGmt3k!_d3=n^$*{|b?(WHxn_(%h zgwiX4mrvm4)~tU5+Gt^fn?%dSq2C0o)U{+nv>{id7FSioUtI>?8U*(DK&h9(M=q@6 zp3v$5zN&Ju6Huo?lD$D<>fc@LlR50lHsqA5T3dphg=G8GCjyTLm7WIa@m@_PChj2{ zu05J)FZ;iY-OP*MaRj-)Gw^EfM^7gOhURz-en9%?jO=AT?l+N$>=N{@@?Snj61lLG zG(mA08mBFA_lE=8g6I6?z4XS)TF3oW38&ePm5>`>0&!hrpRzg9BilLwS`b_>)65ihO@VQIE9}jI<^MO;vV^uDe-o7 zj!@1nG?Hck*5TC@A6YyW%L#0*IY^y8$jv9x)m2l|4%QzAkSsu)sj;tN)H5!kE4Yh&1zS$N<4bX;zaKem~14M|l2 zep=0mp$9&tMc`*FC#G&-Cp~u3WwII*>16vQXQ>(dWgZeq6FaM7i+4jl4n@xO#p?MI zDDo2@*^D*147!|(p6`gYRfn&AxVjr__=bCEqN4{5AxW7X+1!SG>Vkw!2}il16WO6o z{Np<~yq;Ia!N6QuU;&d&^<>oI|!9<}*6etEyE#f}fz$zmN$x zumCS%X?mdJs$g4|Rz>)!8@!o~YoB5*yhd_sYWFeLcMvZ40PWxgVK4e)k*>t6dz9?C zfFlbz!RN94W=HamW<#qj(DJu{a4x6P74X(Ls8jh^tvEBShNpJ(UsJaCBD*q!F)#F- zfaDfDnvb0VyFzp2_wrQDOt+vJ)p_0o1}9ie$7k{Yabf zQ?bvlI`P3S)uoXBo z!&`PpUY^|qDcYN-wnv|Q!81QW^4Gw6(j49pbmM_?RGX+N(l)%Ty3b_rf~Jm^W|#XQ z??*xVosc&5k#33+R_1RxzUx zGn0Wm)n#YqbDAOF9Esls%KrjQKMtG^2Gc!&zA0(!I_GLuuoG-*ihV3FS7ldggW(2z ztq%N}tE+0V%)lhaswof-1kdBKQFH|apl-(05|xVO+T=UM4(*8LK@ z)yaM3D=Gy}YJj;~>}_3sQr>0_FjWZZPXmOiCsvKMd>e1s?cBiI0(ifM16QG$FA!5Z z!TDfsF7%XpLfIYu15BJLBye30~(y6C0t~Kj7ch z5$fFt6|VXB1IcUi$&X)s$6$SZ=ss>nc{>~e!Ac>;8P-VIME z2XGHRpJHD%MYuZBOId_}V@ciQ|6yR)#PUN(!e5~9u26O!Xz3n&x0F5ai`M^)v+P$$ z;oj)!;k-AKo!2DWh0w-)zOLa3%62>q_T{Nl)%`J^7Y~l*3(5c%%K&F3=&u!+`4Zm$ z8VS%3?cSIDZN?7g0m}*Kq&Rj*(4S!+)yp6+G}Ix2=fzmnC$U)10Q(j^BkQncCqXam z;F7#>?j4@L7K-SHEz&IFSN;^(JM-#+#vG6CnS@sPja5lXXbQDx`~#Xzb@rN^?ZbL= zAO~`=@1?n`q@Aoi<|DvKUx2y3$dQks)XLDZdLhVTa~9e=2Yye%L-G-&VLzI&N_n4l zk#YDZuU+8xAE;vy)ZL%EHHYTp!BW2J0w7a9XiF$WeMfrmTVFI@Kj`B-@UBV0${8I8 zDO_44I-&KI>ngF$`yJc%O2HN(#Q->AhfHIyTi!QRWo1u%% zU|CjTB4?TsT+;{ZZw4B1H=e&ey!PS0`2*cE2N}|h`&C4mzUP^LL8bE}6#WhO?Tfw_ zoFk#|pIFHRc3>hj{VVh=Uy>-|GCKP;bf8J#&!7qE8Oh6RJhv2jr3T+?06`s~SGNrP zToGB92TGTR>lC}SI-A-^UN5P1ECg%p>3-3?tt*R0vu(*Nb) z!S+Bs4C|~M{Pm*D6g`sl5US9I^i|+oQkKG;HhPSw;D2{K2VAe zTLH0Vg|~{VpeD4FAK4M&%DX^(0gFdm@g#DBFrl3athpYP{XJTH9Qal@oU!~g2>R#@ z9%_S?tenlPRH|;a;lZlJrz95Qd$n|Ya%jl4;GZ{6G@FQ7E%(R z&dTn~t6c;cA^(iB&y{;#3;I_6dn>*-hA%6@liAUOnzjCdd)(#ql)aNaOa?EP<8v*+ zt9lwK*Sl5Z)dYMLWW~AQiFlsA0UVNBiv}43RZK>YEMyITM0DLQ=wUB>a~hfPFL&4c zdfCBApa}JzNr7xuPmhee)GtFlYvfngU$gN)I})QJ7;nv!KLOkIfI61dWQU`KRYxbk0Q^Sj9%$YE?n?yBcYZYcae@VJf2;EUw=l)=t4=_Q#JzgAuqQVwLoUhENZx+=@2QMs1WI0l>r;2TA7J#_6*WpX)c zYIBeUQ3xNBDv!E>-3QcfmHh(?-)L|g+` z41k00q1oFYw*~^+Uyh{sV+K=4Udfn*?0JlzWg}8yFZp(}iS29ypQG`Ab){K6t8F%Rz&tQ5e$0hloPfo4(~*sezi!n3-9VaU zfO?-o&lMe2$S`bxBq{|TBqa-M9zN$a?Db6S_*rOri^)RG&@$tpR1xrG_!QJdEC_u(!H!yu zC3q9tTE6q7P*8K8sB_aq?6iIC(nL7@9ulqr>rLqxhwtKNFmnc})rx3aV=R*ENQbe& zeG(sK7i3Om?o$(pWeZeCUaI2BW)EY4=P|e*OitMpcIr5L+Y{?)DqJFe#YL#}Jyenx zNt^-hsm`v~;_JuYp$9)z=DnI|0a;?=s>1A|dVY=OHHtl{f<1bQm6d|d-eIHHhI$Ty zi3>cVA$+rsUHOj{@8Vf)xoa(CeL3vvF;HYjD4{&>wMSaJz)%oQc!dnw4wU;jFKuLZ z_i^oI?)WD^{RfU+NOZ+2<+DxCOA(I{8s!1IBOVMwJ@UWE7ExSL=haL=-3}TU4kdL# z9`=D62O_EJp?k#5@*6xuSIJuc5l$EdhFZZt1L3_HSUO99UeCOVCQD$~vT(ztmJ)qD&`t3FV5>dQE#4rAB8V0Az6eoL^K z6M0%1Xq;F@_u-63!2b|Ee;2&U8*~ghe9Yee36A$5f6pVO_we(s$hma|HuMJYaTa=6 z&d+<$HBb1wDhdP0J@vnnmdy{BcEL&*%Coz&o9*D4hOAjW75S%i()IJ)Q^#l{4>e)6pYyb4 zoQukUjaVqOG`phyQcRz~gD9_r?2b!7uB;a6>^tn2g;ko9y~)bG<;BoClJlL?cVJD< zduAlN;R87Pz>3xJFd6Tv*I_20D8#EMcTnCy_K5Y8j=!ejs-);9S!Rh`nZR`~SWgIT zrOsu_r4gUYvy&@wuFu3ZskxtgShCq9333BhN+g8~2;BTV8!J*gFf-qa!Y76KdoFl1 zJ^yoYPZxWubHXE5c88y?vDO>VeLU|ehezGgUPjigzJo9L`6heu3fNxqiC5TR4?(e)ot0&t zp0Dbg_6CS-_9l$&r!I9_`Jai;W&mG`ZR-qO6z-DMUJ;EUT9t>q7`T+@N_(yjed>y+ zUCY8%vM$~1hF+?DO~#!qC{j=>jxQ;re*y3mh)|L!Ejgdl{iLDQYcD1Or-vPNa$l`P z^5_kcSg+Jvk%Xtp@0XsU&=S!U%pz= z&oy@N5c{dzAD#J+^Zh3K_7bWP{)P3d5z5R6-ZQZFG~CO{j``V{#}Vqg!rkuj{{c^Z z1nxf{_@g!o&XaL7u8zv%o|E zIG^%V$x~5=dZlM%6{)#nl86i_1{LIIKV_TAGwcQ54lpEd`8hc6DDv|pJ97rUQl$G~ z1TWfGb*hxaOcuegu2RJ0H5h!rr{a03dRfvoo*h;eLjq9flp`G&?UtDcRH9r1zSR00 zc#ED!V15L?BmpF`E#6m8(+|i~b%d4oU0y>M&wk6_-t(LCUEhG&53E(1^EscF$4IhB z&(r=0OY#$Vz)yhp6L^v`%S1J*MSlcrx>^uMb7>qrA$nTO0JV$q(}O)PxRdPG>GCCT ze_$2L#}T!qj&P@BgHFk!Rb>toLi%Rrl?$BbhL&}jmh4fNWu4^IMKjvjRo~SYQ~f;k zNy&=Ld^#)lk}Q^%66L?+*>5AX5Q@;DXhZVD1-(USQIKZhm6@v~1)_VNB(ht=xpLy7 z=UGW7#RcSrQa(;reix@jwU%hq162gUkbH-U5$X*^s4EG7k=18Ihk9-Xo|c<6yWuuv zibz8Vs}CZ3c?bHr#&7q*@;fju+eHv)1=0Yo*^4(wVePKPdc?ODf0HZ`y&DlqiE>18 zAWX`WJv_^Z+~XbicpaeT)W{qW;3%4%*S0WCciX=^gdY z6=#OHiwzWtMJ0s_lJXqIl%)-{1Mj)hGw9|X^nH_`;*ckLM;#h&a8J?i8$Km}hp1h$ zDiB$R`ok)hM6y(JE!rto_MCLKvNR=UoDq5zjYzsjrH#RJC5=PCAvvJ?iI$ZKD%}XyELG3#4LZ*9nWFs1B3M*;*`)$Vf9WZCa+HIei_dE3#4C1$7vDtiqTNsq zrSLAU*N#ixC*`{V4W)`eE$JtUis~dMf0eeB-H-x)k*6#9|5K)VPzY*CO>w9XYLL#* zPCe)K7>bb{a0AH^$KE{zkFQygG;ms;DZQtiP?u2kp%qmmatB2al#>_&_YT$~h$I!o zQPMwJnJ}mLqITv*ParMFql*`T#2unUcRs26*{N+DiXLPohFWu1{-U4DO(g zyipyJn(LEs2U$4j_@0KZvJmCplW$e05P1b8ErgxuX;Qte)A2W5osN5|pRXjWG@xik z)SQwhshjc>b}NJor#>(8UIKVg_M+BoV3#alRzW3tLHriJ;kZWMgJs4bM}=^0x;BMv zbSX7$i;UN-p&?Til5lQv;8&Q4Wqywn=S=({@pzMJavCT?t>}Jyfwh2v0b z%82~5_}eKs*9-l`Lgk4O2_@|$J51K4bdE9uy;x7TfZ!0Y3G+JjpM^Tr!}%ef$QHro z3A{23@K?LQTLGv~HQ3WQ2gk8C=`_g$$p#l^F-7AtLem@Zgr4Imiq2%=u8Q^?#5$9w z=N&Rr9kByU+g7f3YI1Nihx#IWq*@GRt1}5cV#g_?yD)rdvTlnAQ%QDMUii-VC{zvg zANW_^e0r|Q4rcT7S)EF?(&#xwS+no)K4;-~KeAhVuN)3p+%E8!0(>YUe1khlVkxFu z1>P)=p2>@*Nzd=mZsA^5s=WETXp0IwzvTblQ4&E?ORtRZyv~+7E!>G<O6f0T&TB*X1Az@NHPC4?B{8q(AoDrc-RN!Jpvo0fg(58JY@}CSd{Nz@W#!A(!HfJ^kD;shzJ(Q@(S5_q7Bj{`! z{;%T^t7j+CiXWlw9rz+n@qZ({F$=HWY~pfr@j)rmW*EUg{`bP1J6+p znZEez&XPfOlE~#0`0X;?wK9_-n9O)jAL+d0I5wp7n#=eLueLHd#^9$Z>X<_fLW{2-I|>_wr!1$WHr9Tf0V-U zYd8)$SCqb$1L*nl8GRF4GKHoxn8_UR>~w(+IujGvP7U2`c55TJke6&BaMi=#Tmkt% z4(V40$y^G0y94ECfNqrOdyHLIuHiJW+LsvfLa-{ofQu+k421XI>3OZvvlRlDnb)Mbfxu;P{D9#D1vv5`K(fL`0?ov3jbj z&PW|j3j*Z|ymkxVlY8t=eSX_Tyr71o3sI6rbYDD6HRfR>M4j?8JjLgzaLvH(zNeev zXlovQcFqH7Mf|Tb*|kr>(Wk8RxuY<>;Ev<1Z47nPho{d%c|CacOf=g_s9_z{I2W8v z0GfhuXhCGdeI!vfR;Nzpi+F9}`_Fh{$Ak6pKsO!iW`-U+;;&qRw{$eR>MuA)alos1(sdGDhSuK&51WqNz*&*#%Pu5# z2KZmO@n?DMg+}~%v2}V#4$Qy7N7;-TRKc#pg;5M>bDCcBFXJgW0EtxK)m7i%pG&3?kZt4i@I zlJ|S+Th<{}rqZn~819A!4iJUgWIN%+XW-aSg*)`!3+dLA4E2UcwL!p{2L48 zrc=jdD6k+E+ePWBoWLv!GFxFJ!}OgW$N0@c9b%EIo8EnfUNP;%mjA z_w{h#-(d3;>--x3a~1X}JKS3jt-Jzhv<4ZYXj(Vca-OJ4R-|iYo^Z-hnXYVu;kxhW z>wAS-@D9d(dX+5a`90XTnaKZd;k-^@Hcm;(&kfx&iK8M9)4ZHr)p6@&}@1 z;U5O=xRT9T0u1Q zOyp@>o;(0NeTF9Zj6Cq^$lB|iylx|7bE2icMZ(pHL`%OybJxd~O5ks@6{TOt@P8nC z)DSLi$8XAo8H5D<8C`vk*IBTB0W32O7}=wo%GOBUZg7rjTkE0!hl3TxiAN)$4x;Hc zBb~Pr7m-HM{HY<}NnX6BthFfoat(SsiH!T1?3>o`R%__>D^~C^Yf%lY=DEnP{vVY7 z3~NPatn0+wwj&iEW8WQzmX>4bsZRALc4rPW@tofdA^G-VTY0g!;-PUjRMiX^%klI) zV5o=yUMg zh<9_ds+T}>8i}u2dXte~E5Q6#UVFeUw}@Ej@;iw43iAXvIxfilWy{~;Ns2qkcX%jr zGI)!HtKOYYp{)>~(@9aDKR39PFJDv0=%jfIuGQkdeh`9`2-ZrQYEkQkyLAx5uB(_HfO}jR0d8av|ZG{ zE&Eo{CDp&FR!v?JopcROx$?JOLmEB@_7_l@@_LlbB9DpAEGBo%g6*D{D_v;GXRK6D zehp6K>5*?v{s4K9R+Ha3DXeyeIM`X+83YMDylVwU>)4bF)63I^urp%S)$(n1G8_cW6s7_}0B4-ZeGyiXTl1^@l9LX~xUyAzJiWZ{2 zT6vi?tyH+zx%MrbD_kmuBHwgcG-YzGkk?F}K>5RUN8wt&(RaM$h2vWbHn^+zy#Rvo3N7c59gD6&@O7KG9QxPmp`YXV-if9TR&0PAx z3I(S;kZ$fBZFTR+fJliqiVzPxD6L zRSZpe$MS&x&zq?#?q`uT%4;RO$S0~gdC64usx8JoD8eGl=^65hy@h_{Nm8w=W}*3@ z8Us2|R7%mC?BGNGNBMYlW{-M%<(ZQYEWousFe@13|C5YRq(Nu*tUN`#Bu|)Rt$h8e z((r-NME>im!Ct9;L|B$5S@X4=JXMpeL=CyXtmr}BQ#*o7VOM@mojjvn!#nVb;!)9v zt~gMh;|K7-Qz%kV6V=7acm9fN?(ps{zG@ocTb}RZ)2dYz{l`Fa>R0>*DCH*+b_B2d zrL^mc?1-Wk&*3oT;lE&?6+O_MijiyYv=Zqn`7jkD zRrE-4bj^8t0>tn6N%PSZLsCZG3%*Aq5}K!H0*`1ylg{K5mflk|%8JmO?k!yDQ;JS_ z*!L8C)tVGZQUq5kQBJ-pgp+_dakD(tQ4g(XP}RwPXh?o%`DayWqHGhzam>j5^$g)6 z$fp%W)3a1boBWQ z>{*mA-cWA6?2{CHRZWKC+2Y<*d>6-v3KVw~G{UeVCwj7?0pf>f3`%%O!oEi7EFXA? z&VG}}I62RhcTd+UjxG9?eilT!ukJ1>FUnHRgZN2NP(_Lr-H&Q>#R=sdmtRhlpd9SX zJWn<5iqUF?ik}G2il~a`6cV^G~HM9A?W1)R^%Wms}!f!{d9lDGDSIhuH>quhb$CDj}`S%G)L5^ zd5_AeP&7fgw2%2OI7QWp6lp@H_D6F^qto?7ZBDQ#YET}lw2}BdnjsOzX*6yu=_qW= zHc)RAppa?-4xK16rl@%dw60JvLnS%NqdnDe`&iMXcM(Aoq zsl*r2>3)htDyFX~FY2HZj{ozR+8 z=N8qFx~t-H0iL1mJG!4REcnIwvNVJ{eM-Bn$dVJtwSuUmmb4M|Ne)OK>1n#3VxP)> zkgOABDSj@vpYvT`WhLr<>Y)&w(JB}e-xS}zhkhjs1gWYYw6l_u%7aJ+W)#^>#ozTD z?U-yaWyL8Ltn<9d=d~}&+7RU^0x#|pU&Pji0%qY;Cg9e;aAc$Wh7HURhycqsVoLjn8o|b;!_TgI4JuqNwO zS}}(ABr_DZQ?yp^EB`B+mn8_Jxt=fZFzPQs?j|WJSS8&=O_DT{*rE~1aLu;Wd|K&O zMNJi}mE@9Cl1-&}y{KN<6rwS`B<~d2{h##IdSqt^9%+$iBw2SB$BLH3+wZ`V=r(G7 z$V;hxQuJNAHY#zH=OWuxwywBeGEKT#X9rZPNIr1BBPV|qtcb5t7Z`^(4*-$d>% zeI!XPi$&PdDM6g8yF}%D)Z){fm0zK{1+6BkyYxg|DSj7q>zi(*7GlE1>5B(Z2$RVnICBFc&83;a*_@iFcqNgjyE1liY;ZF-{aCp;?$ zF{N}OM~dlW%5;)r?iRg zB>oXCslHd#CcH}y336dVJSs}ku8PLRi^>p@6qhxvjDct-l>Q>S^eKF!IC(UGOm>m> zQ#e(BGM&hx5=hgGC0nGU#W#A!Q{K_@q{nrQo~I{^PJP@{TGLBsBIP`47i=g)laIB7 z$=SyY^y3NJf8fb%%o>k})#YwIkd)>$J_Ubqb-YdGiLA%q;Y;E;6)wc50-RYM;>Ws0 zpS2WtvR)xIH8D1x{dtKWOnJIVh(A2ydm6_?JdcVz<;5%Mz}t9*vv^5P-12>-=lqxf z51}6)PHKFR#fc#}@S}Q|H>&9mS*Q(p!c(+w%Fiy0&wd`immuFhKH|YV1+MZVjowqE zp*oUh{GOXgcVT>zCK0-_c%9PIL0?mBRqHCssn4B7WyPQsFXvN9uTq?omAxT39cFbE zp^7WS$qRy?r>wOYpH$T0Jh*;>M?kcssAH6xlJTTW&{GWY>_cFqFtqdvJm=zG?^t10 zbb~xt>A_twRvF+o=}KjgJppSzpf~AzrwS&?s%y|yZti}WU9QMIFCs0n0ed`HdB|6B zaDeln&fTK8cRWiy*)sFljOeC{d!qB_9%5K5EOkvz|bH?a_~$3?I`8LWN>tts=k6FYnmI_kvQp5a3) z4(3v@lDqir%L4Zc{Q4PK`D1DTB$L$n#GuYbbNP~hJ^47E1G!BsNEmiNSMqWk!?DPK_BpEXC3?4N6ia< z&6U|47ugea>r?MSSsLenU75zwdgml$d8iM<6?R4Vu#o|&z+gV``Wl$Mc%bsKw&cJf z3GW~#nv1`v^HmzIv%z!>c+n~D8apjNo7b_AyD2y5I)2)mK(vP^s#D@E{M(gy&hHT^ zlmlK+<&6BCab#i$7ti3e>^%QJFqDrqCg4#m2L`uCFy_PSbqoHL2SOdR^0GtH>!Lqp z$UNh2JCGh(f$%@B4MU}ItmQb*smN6>Agjtg?BKn;;6k=eY2bWFA8uJaIzuQwJUQNL zc{`F~ixy|^5}8`+<6iPRr3UIJWRbY&T%Q3y@~uc*EEfFB`fN#^+pBO#@D#^yHNlZ) zck}{hXTrI_Wm;AlU@Bx1u=xTCOV3@@cjgppS9hLb$b&-sB-=_^Ch>eqr)MW?6XhF` zH5TGixsja7f$|!$qyKoe{M%=^cOE{YbG7o$WD6C6!_+rXwtXz0cSEIdU?mw*ivQT{ zq@27}i<*Yd9tQUOQ0{eLRX<13OFn2(85FVsmCLW5VmFZ0)!6IPNVJsT=m^rO7PNX0 z2$i)F56?=TylR(X%#N1{9iIYX*WQ{RiE5h#)2lw()KWD{{ ziMS||p>t3?Pm4Mx{IWeMnX%iEw(fJ~gmFFgcdXL>Q;5o%JLp(9SeSBclM&9TQD1EQY9dTh{ zKB;qSQC6eOepx|Lt&#+)c*wQNJr)cF!L9{Y>BOg+Drw)>K$?|%``Miwz#Jxqn-iGD z6(zuU92iiKr@K6<2Hbs)CuifzGwiftU8=6tSzQ@YiYMs2CMtXf#mSCkN;P*9MaUY? z0sdZcCvm^Le>&4k!ij#>ZB+cA%+K`ffHFTtC#v36b|BM^xl;Cyd>%SOz2SNCZAgnK zyD|;%%OVZ1r}@CBqFUP+*RqMnp--+yLbtjd@rr%_(t55C={+s7HN@3(rxDT1M_ zU|A8$MAo?|32W0;ZlI7yRd|qBN}lfM300Y5TDujIma^P40slLwH#whBwpbQ+HId)7 zKM4_zObs0ep(Q{EHiOSA>st9-I^XJ4Et^(nJ^2=ulc!Uz&Lo+@iJ%K}U-j;h^&QQG zRYxjeRA+a=mcW|Ru*OI1v!wrx2u{^gLub~qa3enteiA-M$K5T{gcjrLebvZHbV+jFi~?cr6Pb(sk7 zOrp8-$hP=`*I=pui;_d}C6VF0*w){Wt?(uB__fGWb-Fd-qWV-O4<$3<5Y^H-nLJjN z*`yojGyV&m*LD);KS9s#o=i=h$o$86GE2^r@grV)7XF;<3J;O`9pqfKx9cz&I&3-V zCm(OUu--BaHN@14#&%CKvlh@RJtNWa5%5t0c9btuNl zX1T40p$gU@t2Z-G_Am>zjy>95!UU{Tk*wXDXo>;kyCtV{{8z?w`qQ7F6L|&tkUPyT zW)o(@JU1GfMa^Awm~Y0cn;~?iFKpUk{?rYs+^tB~PPkUX63WOn?8K38RA0y?@4 zv?b2$Pp*MFJhUS(C)zho(r+;gpA z7XsH|Z2tpTRXva*<*2Tm4n%Qe9k(C{sy5kE{dvL=GX9P;pCt}=dyL^>rb|9!8=2kx z%ne2_GQComZH??`{u0KQ%mN#LEuA%NFo*Sx{e^wNN@EwZk29$^Y+YfdP{680p5S*( zGV09qit6E8bmJRIl=x3*TW5*3(E2>GY?3i&lY^Kr2H9JS!Z8&FGeV-yqH$1qWF z2lM^vGE1cvljU+TU(0ExrFZZ#CJd|NeP5_*7t}Ec8*DqBjr&vcejfg;Y-g|s1I1mY zIFGQ7TOX_)Ob~8q_hrh@&rHop8a{2;#0H!|hDdfYIy4#a0&uKnPRAE?2`mit&Sg4p z8|Zf|z5Lri!`sPb>c`xQn{;fPNWcFMWH{}l>tqW$l8!MZIQpV9zIF5>CqE{fi;TS_ z%pOm$##vLC_At$wXzjC>TAP?;oEBM9m}>lKOnEQJ?1i+Ps!m}Gdf|q)$e)bNL|EyF zC3n9$6Cr;$?vwY`lBcdApK2Bpo({rSUM4giV>)MnOSu~=Al<$irLT1ynap9eR=BE*I<>r!X_I7 zHEsn050i;IBgHn;rSb?EKW9`RH*u5E%3Nz^F_W0<%xC69GQ0*ePvQd|S-&+bAo+s4 zn0aW80C?`ktg3cM%=&g0Yj7wZ`Ib*Y+i+eMvOHF-H4|ypg&8TWnDWrd9%36v@Q&nE zUJZZ6-u_CqV0q}_I#VI;kQq6f$&{7MVW!LZi}@83D=Rstn*+>P=PKsd)B}Q-#s|k> zsO1#eIyZioc1(zxLC?=~RvxRi)zf+$Y8%=f+7bFJG(EI4bUCyl^d!{UDrqpmO=TY8& z&-ARzObe|?uZyAd$=E|~+Y0qZvDa9$tXH8np~9j2Jh5P~da!J;P%sCtZ-UQ*$wL`J zi$W#g$^WdT%m&NBIin$&lF6AQnc4iDNu=L9$2ng)=em};R=JY9n_&#ya#i7LS0JhA z+UTszY?v)j-6kZ&UaW+h$ib=13tGfe3x{q5`v*@k@$kn$Y~Zp#S)hKPNT7OPOQ1?{ zaxgLYZRkyCIlAkX-2p2s&M^xexx=jF+~w@zI^lA=`?-&}eeNWlOuS4_$i3bDu{(iz zXLVgyopqh#p#2q0w@k~tnKa>6%&2@2`Y5y^SUPwpkUlWqKg&PHpThslSI7UUzrO#J zzeiwX;AvoQ@OyT726JetVGZv_vX*D|-U(-O*Ll}(ZofO$v%+)3bKetUI%3H4z2`Gt zKe_*PZFJRg<#l#p8ca`Q{ukjS;oP>LnN`=B3|ODpm1X>wd=q^Yd`@3lUlCt3-(;WZ z|K1wZyd9hy>cHF=+rAlI<@m<<)NJewJAZX`ai{Ri_dN8p^)B)r_CE98@ox7H z@>cU6_0;t2cNcMg?OMS6xzuKEqYe_JgFVAK8afud8|WE0=r{d6e7?l>i4zlh@EVtR zB(bt@fv>3ln*Y1NN5Rseq}Ew$iM>6%1$t<0mUiZFJ#u~HF6;TzQ`9@td&=vI33;6{ zsbl`|*7N#2TRj;(rQOq9PFD$MC9|2))GB(<|th=;>?rInXW$WYMwKm_N=Q_Ouv{( zG23Gn#59d@#vJli@hX3l zQz#}`ObXVu!<*atyQisVzI&DHm9vAhu~`KxWF0elzO(j+(uOhys|8m2WBuE}V_m4;5p!V>G|L(;O*|s<^2uL zuIJg~e#n%=m(EnqBxXk}u7lx&Oy~N{>W?JJ6Pz4K5*XpH=Xd)`nXDebY`SE2ZC zUC*5LorBG_blOSn$RBQF&$P~m@`w5%B|i;3_fPiMWMzf?1^rc!9tZtZ0-FN4gPVeb zL)Do&H4?fQh;4Y=*k{gg7IhtWed6Bj&h42676*A2cuskycy79vx#zpR?mVtfodG5< ze`b8`*h#0O_RPXwfV7_xOv9wr41pW|Km3dRzxr4DFZ&AwMg{f+aw4bNg&v2dA*q7) zET)WA#mbp!HgzT<|1DQ<_Y-$1PYsXluIriTDe0N#ZtVWZebHq*KX<<2OjXg?f~HRv zPGZlovRgGmBZ78dd!R|+l7FUuf`5^JsehS2N#L8n>Ojii(qOYtT&Sa!0UPm0Jm>eZ z*czK|^lEw6F;{KYP{7lJS1O*f(9_4Wz@64z&7H^H*j2;1+x*PzYqX+|Q{HfKyB<4r zH`p*ZD3Fs$y*>QJ{0{#k-z{G%o_fZgDX=8aDEKNkgn5XMnA$afNmU`oFGdZsy|V@y z^pR_>yDGc1(eu_*#{1l}2HAhllipL;UD;jK-PhIHIRHzls!_`k8*YRy4TPQsp9ZEf zFM7EDzHf_fldq4jyl=kmKGa^xf8W0z&9)nAuVmG*@7q(u3mn6Y>gG#xDH1A^d%yc9 zo)qWl-|qpIgyY+b}npy_}Pok^6-^yXRkc ztG{=l_o??468{oZzl#;F_jGqRWc6iS>%e4?^VsL%Om-)x#0>}@57Y|u_Al|(^yT%P zO8kP!yQ>n@`*Ql)`=0pL`uhX|fy2Rhp|;lN_PB68>MN5XH?}$3V-q}bcl2EGe1_+R@!4`d0Z3#GNTSbgB^epIezU}kQ>*$u1fp}Q|~-|&9w zUFALF4SF-gq(}1K^_K8f@N94&aCdhHoQdY|W;-*LF^P(jW%l3J%+R>t{y^)%QU7Ct z%;OSACH??je?Vg&PR#D}`$qV0_@@MR1s5~5^#fBTw=zMyv(eD3ikm*y>vHD^m|YvL1zIh1Lf*1+oX` z`b+xbeLY!kI;I3y^A++P^-c2!{IvoX0uPxi*qt-TKKn>`ALrefoM!7fuQ>C$w!130 zSG$vYs(XGwlFjk_&UD!gp7x#u_bK;TcP;m3k~LZ~^Eah=*)Wak;UG0`KcRyThPs48 z!HU7(0%ZcWe}w-nwCeV^KqC$JZ}+DS{1NCHOd1*yDqz{xF}oE$otezDe`Yi>SDOu- zE1VfzC0yfNY29typSw%Dzj6QN-sbM?&f-q(e&+h!73(_S9P4a@+?i<{!Iu<=-|RY7 ze{JmE_EKwYs6NwS&j)h`_XK_kbPp6q4mAu+3LFc(3DgNrk8o#SYQ?hCe}6Y;xsi@| z$3!C~lMN@C$IMdBkQjxu|gwas`=yhrfK zdGL8uqbmCw`%62OJ)Luu%UTy|6!L_QGR<~ka9nUO&wLwf9BLn$9kQ?`9#}>3fwaIo zpO+e}%$%mr8Krpk7-ow;HVZj(I-O9@_s*~RT9DIJI_CqXU>0HO;$u86Rk5!#86oOI z6fGP@9asmvI}bRw_vNHIlqu`Ot>#u~E19*G=lvM^KC~osEmX@IVy#2o)~9>Frhc@* zE4hwd(T6z0o?$|0nE8%r&4Ok+QnPq1 z#h2E|=z!1TDt?I?oOYTSH|eC9jdu=G-P!;j&VK4*>V{K??*mUec4#7gr^5bFT(ru4?d7nOweq~ zd2$#tE>oNR%)v}0U2YCyHf%9-4rlKBV67frnaAvKCMKxX3cq8XR8{*OzK$wZ0jsiA z-?|$*5sD9att?Cj&SjP0FGsA0RuSM_!xYFGRQGJh6IGsdpP-5QxE zbM16d}WwlN- z_p(zcXUGu>a?WiP>KAGj8Xigvjll15j#KAdyB1YJHkQrbBp(lBl4nxxIm!If+-u(F zY!>8XyWCvFJ0EivI?0^UE>u_@#fv95pkuIK3XALt+>YTvIBm{(~l_ zgX?|ZzA^sUN#G>b{)%(%a%v0rPF?CQ z?ci@6iS`!2e_afJzos0;f z2{}ECPw~j4Fh0T`+yIYKHvDVvptUx5y4qmjPK8VQ(B-of9Y1&3E2(Nb47JS1W7rmt z;kVF_e1|=utnEO)&%TXUt300eFQ^vQl(1yfLiNFiyOZk5VtAfP8r|`VO`|IGfbq(B z&t7`WGI*X-na_>$oYwo%qp~8^&DW_BtO3>B$35Kv^ztJ6VBOc@Nc(T6%mvwkbh-ShDf zc209NqdIaYUi5-s`(NZweX99x;mOX4JQ{#R8ji%=Ot!)>eB9-cl*$30N1WyY5!iuz zpGh5IJE(XtI;9CuKZupIiumshs(nZEJszwK=d-F6QJ$MRQK%L~8IgUdnbus6;XJQ4 zoY4h;egR-@hR3rw(0>w%#uX=;RF(XyAUOnzROh4etuH=R_1FEFwa#&jV#mH@Ex$sC zEhBZB&A4B3$1%8hHZpM)`lc;iH#9M`61=Sr9PNQtRfsnwSZdn|ENX2%Uq}seClQbZwwyyBglY% zsMlT2I?EEZEyfj(@u}^k!fQHp*|D5-lHphOhA$#bPTF3gG!N|n8mAO>oi(AWMMShRjc_{Nev9!P7JVo3uvs3E5uZ|ztBiL&L=9|M6Bk_7>W|hq%IX23)O~(EuaEEi; zX9KvMN0r)Gu-S&HV}1P`N%Aq1nc5Sx>j547K-K!M?7%<75;u`^bCo^U^IXKv)q78K zAbvt(u7kS|(M!N%q(Q1>WZr9WzLuh&Y;NS+8KPJ>_{4asXf??+6&Vexc>fVSnF{;( z866$g5;vRAYb8Hn<5M@Cl{jKU_V;&Wz*#b7)B~pt>uU+6%to5dB}TKJI{h8|U(61P z_rHSDn!~ZenT}I_EFN{p`xp7LpH&};=mvGrct>178N;v1ScE-M`4qP;S{9;?L#KmY;$}O^sX*t^G~kfyZc!AYY&IdQTthIQSXw z7*^+0uswx+ZO)FW=1d(yw({(y$jUazkkWX3(?N|1_8I#*(&ZIVxtMTD;to~e@pfps zrBvbWW(R|0F%+gAur52&pW4|O+O9+QoOx4&4BhnmVLOEt|03RNE+haS?idNHqH%*K01L^08HEC(hEW$#g)fsA2=; z=LFU=0&TDWn{FF+)Njz~Ox89Pd8OHSL-|@9o~ZyPG~rM4Z&$NZL(vPJiFwpROXNT* z)}Y61MNW?0u5IBxvI~K@^GuL!a`6{d)BMzbE-+!6c|lNC<_KEK|Pv6 zs5+CPK&n1`sW_==vZE>(YxC(GWULf}TbuF;Sq{}%Phq~+;;f-u)ja%O38|0*E>`8; zb*S%8aHB~Yn}O;#Xm2U_+6K=o;rm*&sb*&!0L#aK_yE|v0tT-D`2!$V?^9L5sa8pO z${B!0-9KvpeRrhPKw@7%fW1YL$mj~X39O}4)nd4A6};9TZte<}n*fm}qACYhwXf%R zl6seqM|%i|b zKCjI_(iXGL|z#?l;a;H?h`_Az@6k@fYyKM7Z}R^i(236JNk_ztB(M z0B60moFsPe(*p1|4GGsD>dKD}EdkVVtVX%-%3x8yDCJRSMMks$SM#{?KJewBPsLrh zb`d({71x&n-RbvH+Hx1B-R9oq#Q02)qBe{hs`TU*U!Ma6%lpHD!_Q zKf?L5u?|N9-EL^OKiS|7(YH0RhZ5k5ec*T&8m}WbZw}^rvbHaw$jL|s7n=7Ty?RC< zA2-p_rwDz3zA_dYyRij3(-p0mv4CiJUSla|#8YUdBIMX@WCu$^VfXBVbfqstPqu+XgKB_xq@wxxZ|+sPGW-u*r8c;HhDs{VLenR1Q1CkL}%LNDRT3(Gduz5%ruB$u%he-?rj;|6splf{KQ-Gn;|yApM4( z@P7f6y#>l{0+p#^;4!Q24S!YRYaMpwrJWnC(+R9@fz~gf@tT64L@;PO+Jn1`_!r(7 zLA>VEIlUgCA5b?kK02`DN1>7VtS>D&5*s@0Q~;`skE_cRtO z;d^MPB~-H**v`@url?VlwO8VFrP-u+>HfA6xty6?sRZb>7xr2)ph^$S!#D7f%*6Wm12#MIbNZM_UzFWO*!b8SO)k+TY^_Sh zLh?i!8lA{WlRmrz_a=~ol8>y5B=&uBE*cSU-(?j5b6GgqwSuSHLGfp>1?sYzLY&{n z8dJ$;SjXvF*-8tb>onMJOL%Gu&erM-RfuT-3+Q=Oi++Zc$VlqV&x@er&QQrl@Ye$? zuqiS3O`JEI;DvTNlR8i1+4++Ul0o>JrWpf}lgcD;I_iYCaEHR+?KHlkSgWAb)cV@m zNM^4smPh@EAm~|W8a1%Id<#lQS^*8oyM~= z*B;MFe+2vDvuh&>e&p61|$pp3DbQ=1?8T`GK;oTyo>HjiythpoTyd=>|DpCM0EB4=O0|Lw3%N|GU#9bZd7 zb1eRq+|HiPrp^iGALO%4CJHkRf5%01gF%0x7fcH;XD_hITMjFYRS{3lB5R4Y*Scjj zU_V~iUtm2YLvH-($iNx(8aWde;I_ZXS;`dc~CjxUCn(2qNe-?Y|E?oZ99&9JK zcUwP`4>!;%W1YbtxQdL1xnwkCv76v~xn)o;veIj@BUxlQ$qc#={?;HhkKuRdi8fCLFZ970*^DOp43F4T@=+?ABgy3J zhhMn1@eDb$6|12ww%IYP@+#qnc;1?_x_abcxRAlI_zByx1B*GYwZ$gs8aZo(skZo? zv&=De_8`*Z8kF}BSX>Q{wqiHc#ZJ?c@^W8gs@~)kKsFYKe=9)QDY50sV5w>L-5+q* zR-}7~{Ev5NyB*+D6Q%!!Pb~Zxnh)0;sow#MuMS$R9J;6hR~O|bTh z6mPHs&e*HK>No8ASL9>1wtK;I^O%dff(*_7uo~Q)NLt}7?nOq|7A#E{c&f^M+F(&l z!M^N{MKl@hz8w6nMknpy{G$ojhr#_mEW8cafB*3N9=`v@elEdw9|m4zWjBKYYICoW zVCN}VU5ID8H@dqbGO99GXI(7LBKUi9GA%JHU8&L_Rm;QOjloJk>@CfnoI>xSjqJ%j zWWPL2>Ugc3Y}Jve=WVpgPxY-u*j?>>Yo6U7=|3B|rvdYE&TFsGF;}piZu9d|R zWew1-1HXgW!06=wI4D;gOC6lU)1mvX zp#?ReaR(OJBK(;PvFy8JYblrgF;>NJ=%oYa?c(4o7d)2>4fLJ}@Jl4BUWs;cPD6#k zY8|Zi@o>~w=x#m~cOJ_~nbLXLi?+O4W2>}a)q{Br#nKo8mo7oStOCA8d|iP>qe+G* zfap3fU14{3K>;(s>JQkCU9dAg;^b5YjqM<}dmrcKACN|kvC%7{@5`Zc>w=kBAWcax zy)2y33bVJd;Ho>a>^shH<5qQ9#fO;X&Olln|(b3zDBU`UvYgU?CC6=bySCZ8gA||1Gt0WP7qXvA?5&9emT=FyyUV^jdNDv<|`q8epf$b_eo0^&QD|`Pbwq|PfP`y#r$#xx2nS^Jg z1^e}eh~q8%$T#db`w6~^Y!TmVJ}la@@NXlcOugC3NkFw0xuxk+OVLQ`k-U;S-N5D( z%~gO_Y9dd%!UwW^e*r6+J$aQAVh}sp4{Sc*e2l#s&rV;(zWy8Nrf`0%1}CZJMt-49 z+<6Jl`jHdjN9fp`cu`FD&I#TMKwEXdQ)&LkB12-)COXA_3m@p@9i6ax9?AL;PRIyX z_Qq1y$>#*myUR}A;lDJ=J@91F16tX#G5Bxq0L^an%>pc(A6Y|NsIv)l>gPPN0|`GD zN*)EZe9I2?#tLi;r4^(DWg-}RhiwzWddSABBrwH7d6nRc&%y6VWc?~+;w>bYDhyH} zcbj9yea&9Z!W(i1>{!s2Y53U1%k1XA;N}=|<0vry4OcA38X3c<2Y}lq=%A`diq!C9 zJo_lUrkSptB0i^DNUPGw+)Uu>4e`y}SYYQOdm4bg(j(0(Vq$<3vX6H^0wzx_cK16p7@UQNlJL%5qW+*dw15cpVtOt{v;$pH*A4A$R`h8@aJIp9RAG3tZyL{ zG>-j}?CAwmz0oyIz|tq2H`<_&J4e3u;4giVX+NP4CgCAo17428BkBfP5B(lbG}2? z3_>1gBAcdwev20R21?iL<4JJ*ufVVZD3-wmJK_9uaF;s9$-}RFa7{+6f|b$^TIc~q zj6qV5K^n|~+vY;M@~KUPqsF4q2P0WO=3FhkoFBSV{|Zg8xr*oFBsP%x*zJwb_G0*Y zDbHO7XKPaGVImKEp)O5eK8sdSPi)n*${VA)AvT?VnqHEgI~V8vngde;dZ@u(Gy?;T z_^K(B>JD3v-)`$M$Q7;s5MTcQqD>Jf z{|1gHoPOWnG1FJ|G_au?b->f~fr?0=`n<~VDug7e#IrTMQggeC!E;5Sl%?=R7I@$c zcgg{*-ywHCgyZcloUu!xnKb+55o?samKNPMkQ40>*d|-pne^D4^7pBGLUt(iKc@EW zg&xm=_d?u7-Oj#&pQo_i27ERZvDd%B^D>^54|s}TJ(huU&$FgQQ08BpL>utgUU<5T za)%B0JNFXl>V$@tmvk7{WJR|X<-}f zHG6j%dvrfIo6HLGpEal+b3WcpX)?>+EgT|rv)h0X>cl~af3 z*ahti)+DQ(m7mj5Rx-I~SR2T#&w-V?4oRR`*HzAg6VRdeBkPf`{T5Hz!kPx5i&J9d zo(9S|bWBNT`T)MNlJuq>hle7w*^T)3OU`BuIR&LAuV?}p3`YzLf8HZ%J;qTJw2;j5 z+Mz0;JfRoCe}i|(uQ?U^!AhjsqAa**1)gKDFKV!!!N@y5+Was+ly6z}1N7Vw?1>Ow zwuNX$57OgXw7^sRCZ`?cIR6^vQ1h($!n|(oHg{3Gw3z(+u4XRtma!E1IiB4E@FIXFvi#&0zN3x5+<{pa}p-rDV<$RL&1tBEeR<>WVzbHYob4msj&$=`Uw3G-KK zG}0rxYZLjcZoEJ))MH(hu}?CP`TvAS@)WCs)ytZ18FnGO2f4_N=tSf!H?k-$+>Twy z#yO-fC(h#3ofN@#JqD#d#%{l4r>2r-D<|g$oZA{vuaSW}d`8@;1#~ows9h5>Gd|}3 z59F-;%ep@2G@gg97RN9#T#lIy^3>Bnw81Z(5T`Iydo zt>K4H;j5YGm*Lplr|}gmH`19UsWmHWUN=Tl<+h$&7@K;AW7Mx$(E1QG<7g}etoZOh z_6KTp>RBICCz1(&hR#|K$f;R`cVv}a1U|2d2H1v8{WDs9Hx)pwzS8P~4H7ng!8qt#$=JiIlHuS2N+ z$%Lh{gA>MdIA$Zz9l-`a1uQ?};W`S9R!6o4?H{NY8BJD2a!xp^vM-DER~K&T%leOT z{c0%g7qmu4o~uqR>I$l!7pfV*iS`_ZMp}uC&4Z5bji%{{mTel*JbkfpM*?L9B2GuJ z*RF9Az5s99?7O-;s?t6k&#R4YD8l*e4ZM4Szr3XaE;qjUL&(GPycf?EIlxSH{K)@D z)1AOeJ%9fLzcV)?A+(A1l1PPYWtUyDi)``DTK0Vl`9{bdWnZ&o-}l|uu2i-*g|r}) zCEc01|L1G&@83M;-f8a4=X2iYefD$S=cMOACbVxy9=D`d(ivtcIQ}Gk(kb;Xn&=_A z@d7feEi0ypJbvUgJ@$DUQ_4`G=e%;FklFCVe? z@jRR>{T#<*IP81gSCEN9b0st;kfsj7@Mc{{yG z*ZwT3p5$v=zYn6>Z{WkeLVqPAc|8l{Ub~x_fge<**!whVrhd*PY14A4F}Qfd!eR&q)DcO_Vh@kr4L;;fS%ol{eK(_%N+JKEjH!s=tR$@utNag1>!#mRK{-f-DlETEu5 z`dbwGnbqgidxxqf&Rn|8pJ-!UThgiPdzEf^Khsu|$i|tz^FHiePmd0(dPbQvf3^KT z3U{C6_bp<6?|}RR)IJwYro+}ccCWh~?^?|_X4+j>nCs-8nfDxS=m|fWH?y_7_Ve5d zA022fG8yx7TsN5P8t(OI)O#H%FvhF1Y5i?{e{Fcp6o3!l<6eI4dEhvY?{OJiCAJcq z_*r(r)A0HQd}Y4;7wF^@aK7!`N72m-sP#$T&m`r{FL}ey^wmkvzFOSe*?#w7 z0@(iy6cg;`H82@VIWdj_^t}w*P(YRdTHHNkjir zacjD4rk7QEb7Uq-7f|&h5qiUSr>eZ^eLXSYFr-SftYdglz;iSgN z==liGomsP)oRaw}>Ao`GecpDzTdVwaleph-_Tpf^*kS*du{s+)U&GS620b_%1K*i8 zlD?a%;7Jdq6g)l4HC*qq$*vs(i3VKFEkzJ(gSu14*LWxyl$soCbhg_qFU%dak8YR=SR*vqC!Rr60nY^hrAXU+{PI{EqZL(l6>?942*hQFoDZ8~$Ot8k5Y z@k0APwdz&9g=(Kd(c@9gwYYOUs=1y_OJwB{Qg1@l*LfZ6nVFL=LebB)3ZG+heZ-cQlvT|J=zDN(|tX6Kndv^up`JDX0N7`b8Fa)CzxKs$(5(~Li!}8 zr$P8UohULTEm+FLw6EbZl^-wL{Rw`*K#EMnXSb5n*YRs_M&0+3Ew_5_K95YJnS;)L zM&;>OxH2ibfxX-XcMUDt@RL3yrO`g)5{#-wNn`TUscPNM%>L>!*KSdfN9! zpAD5RoxziiJLy^&s!4rm8!}`nEKP;EX}ESRnlAM%xx$+6wi8O<*h(u^UA0Wdg7jd^ z#DR29{0@zz@74<}#3M!R_F^}7B%_~37Z3W|AMy;V!uKAe&Pg8odzBeXL($=QHrZ$p zk7Gw%L&hFOY7O_fL+P%g>D|z2shh`6tWt z4^h-c@<2a}Kg<%h|I|CHs2ll~t+ppQ`8rD~wG;cXP#1~x2G|dy@b-%+@KfdzCGS~O(bn=kc#mlnnW4*VxzjQ6k zppSmF+9#}ZOH)V|s15nd3Gibpd+|c|mtnh@XZ5SI!cpYg{ac^Aa!Z8j+OuLGmT~ zeL<{nTc6p4+}a(^+NdG8h23&mH9mcjNaSGg&^=@+`s0r^#E?69CsESNVRtnBbTg@y z?(XTplwL}i@wPMk?~WtRWSyo;GdZK9?aJ0xn+{g#iMcZBnSp;Fr|Yi48>hn95O_Ps zy%UR?$c8$Poiy6(?`ZKZG!A9s9Eu(1J7n$3Urf;dk+Z1-`r|i=c@bp0Ic-Hmyg@wqC zyyL*Zj(Yq0KtZI$)li4)&B&xz-r#>k8Wa3rX%e) z;FxRWb3Fbf@nfZ>dNs2`(q}$%q8r(V%~>DE&|Me!*_%e%+hY^7*NwD!6fQ4Blfz)U z-qq?=bR9%`ZH}57CP>xl2YER>^hA$a;^bplN~hrF6M5bH;PCDw$4=zXHK_O{*m>2@ zNp>_H_ajf2iq~#TpQd(pH`m^dY#-`5#Lwfz${*zW|45$xh(qoosU8+p{Yd`fA6)Y# z-~V1ZYcyG~1Nf$+n^Rc#hs$gB6?0fi6nUzX1TU&5`&fqMPtvBDs>MUd^vnaBiDwJ; zts}j5Agyv)HP&#s6%T@m)_6BvSTpftW>wEVNrsL>Ll@fhQ7H9!RFm$X&Czr$(oI00 zTI(?~YLD?{CyN7r&a=gZ{gO z?fDqF6I<;LJUI7M2{h=p!$&ipYd1^wT@=$1Kx1w5%4*PUTjo9vsxoG zvT~t_)!oj~OxA6srHuSucKTXSzJ+IMNX4vwJRZ!Pz>D$VAn&B+Ahefh;}xHK88w{2 z`^vDP|=8Cd$-Tmc2__>u;{3*%! zr%L0*AQEc`7W-RmrY5Cc`v7#i7oOf6^`&cfvf1h2nF*k;qw)0YOgFiPs{PjF)V^%T z#9W>gN1M$yS;|VO*SF*k+Hi`P+D9ylr_sqxWciWgRvWTnj@3S3kA}06cEjacvy*mW zBSo|3T;p+c@X4g+`Sf6>lif{jKaIj)B*)@OeM)2gf*Mmfy$IfB(KK`XFLMkUx`L-$ zd+OjbmA<$2#9B;d_ehr3vFK?UlqsLUE8vEOU$ij5#o5H7zhjTkv z&jZsjRpn>60-YxB1jPb~1goKEhqIL6ctY@i5z>)84MwjlH=(*_7vY zFtI%>@96#XgY4khFcUsDQu=PT9O?VNc4IJiGCuP zKG2ogqqp>+{TkiAhw@)QZP(G`SCLN_p|_E!^+dY;@ap3v_&=W>y4q*%Ws{DB-}lkS z68oETD(%UjOq)-4>eRYy$41^C9(TciiP>&T5AW=~o#8e4tV}hFZLlAX9|Eqc>F&{V z>0Q;B^NloBB3H?>pJg9n5vGDGy#g1~+Mj^=$*PB(Gcnh}_(=KE;Z?i(1e)=5Tyu)| zg75Lx^@!EIV1GWV(sVlUC3>7#N3=lB9Hp)~{V(I~Bx9K#|LN(OIRZJSvjHB+ETDd9 zcpot5B-I6=8x6|q!FoLkxmvDy6#5uq<-3rQ>E-=*72cP@dJUa?CfE}BIg(sE%yVzg z?bvI3&|!n%JA8gK{082S$kRX;KV}Vg->@1t*v#&3!K2xoRNIW~*uu}8-DrpzCUTXC z+7={BUzp#~=LV1wgV4g+AU>UT8Ck{cjcEEdenaqniccJ1PvQ$U=j)~K_jEMz9;<62 znKKqlH=>I3KzJG)A6u22vC>Y4^GuRX^y)TLF@bb@%eOuU`y{-!0FDzCY?vLED)o-2 zV?)v;(CzB6Jv!*?ky95N`OD@gBXOO*s#LlcOdf}3k3|LNlXSzupU7J#;SKVc-K{kK zV3}Nxzdx-C^J`?+z2xL$Xk#L%#**$2f-Mui9w$qlWg)%bGf$%659z~j;4CsB(~B~R zseq4~fwPzW4mQ`rjlDtF*WGdoryVLuKj3C|CVkE`7a;R!GNGzn^&9=s$R4QVaBvO> z`T5{Jr~3PJTIs;*?ri`onNagjHQtn7i|P{#oTCiJnb?Fb^FaarXxb%I^ zoVCn)OT4+^wB5F-VtVox@3$J?u}g5S^7-?wPGH3+6K!FfsUKt#5_*8%X2p zt>7x$Ig;Ieg?ADUdeWypAvZGdI8(}kwRFDEjJDonUGCi*^(J1no}ZD0iH3K@g=<#% zF_FnkKS)o{l9i`#eEQxd4%5zey4tt?FnmB&vJ4`vhkG7p1qXX4RfyZTZZEW$nf1vW zeUAn{qOV>?C5f>;Og2B@)t&ZXyjKr+f1;JWYMq&w)i6aZlN{Pr;Z9UK1f6JiOlyx@sT6_{6BJKJ@@To*E8cTk)=jfwA4OkX5eBw`V;Id zC9_hqkvLao(WMV1Lb`xS3^;X(O2(k>2;|Rh^kj zOTm#i;8ZE4VPs4V*|`t%VK++c_`^B{1eE2^m{J@uhGxINNTh9vG!g^$Aq<1iz84~GCy#R#MtMWYejUM?34TK7w zC%IomyZQY%NRxw#UVjy4Q={^wb!DzkB;i`F-x+L?+R-QB%l+6M$&T!e3L4HjMwa)( zt%)Od!~vNd(ad|Tt!)kTkT^lZ6pmB?WqM(A@tM_7Mq=Wbs5u=r;-k%Q?^qIFSM$-C zl2<0ZAFEuf|M?`E|8XZ?b~0IcwEpP_h#fue(|fRrLR~{xyQu|h2D;w*sW!u9yQ9)y z#83`_!4fICHJs%n@ecl${_lG^;q*T~dTVtosccP7yy*V_dUv`iqeZaM%qpj`gug|j zMNrJtFQ$c<+UNe>Rb1jL5tItZ!>>!L)SBq;yZCtt+K5bl-Mhc|_5!<*bBF16U5j(l z;X4x~TEkW-A^q$#^)Y=gx}($7S#9spnLgSV&##3R`r7x^(7;}>x5UY(W^B)NI4|+W zf3$zem%c*!2HtmB@sHW@M`^iN$g5Q1PxpKXRCCefb7*n_>U_)p=71?Xo-;J*joi$= zLtUx0-oYa|uWd+~U09j>!|z4xw!Q4ZA^yKT`Z$@c?ghSG!I?97$@qoJ6Td3E%lBw8 zr{7+4&+lOOS&}prs5j7ZxBLH7RUPpWh%fN^f3W+YpTFSp=`gz(#9#USCyDU8E(2ZA zPkS^s0B$z1@58}2kPUVY`|M;ffSbe^ZV;sz$)3E&Ux$kr-f9JVvC>Yls*b3r6`qOq zt0M;=fSC!dfOitf?v_ z*|vvin^EE)1HiJLXhK(UnO3ToTZ@LQSoMQb@j3`R|790E&4+l|4*rP_Go^J?nBS*r zZJe$a;0*TC820p4?sk^{pF@Wq&-xqcFFA#On*YZpxe%`$;JyFY%MI-Ewy3RMtT}Uy zrqiwS(NE5;-Uqf*c?AuA|55zL17PMdym^wnypz;>6va=sj_JM`*^Fx2N+@1;h z4CNPO`t-K;Sa|UQQq}%_?+dbiRb-F3h)Xa^vQ4L|ln*SFiR ztKe{gJv$rcUJAFVV_B0XdkYS)qzsGKFI4imv@i;J0GEeUa~_u1#_U!PQuN%R;%k@SHHec1Zzy?G|){4^90eXR($JT zeC+4YZqDKCjGnhei4V$OjlrMs*$=SuCxAZv|BL3-yn})-w!0_$xxdWViB;?Qeo}KW z`1+8+Bgn@8$=RfKaUVFmTThv0VwX?Y>o2W*CMtFQjwYOD2M)r?3+?KSPOhEm6yjx- zPL*wSe4h%=S7eO#LyyU5{3E)$Evg$O`gOI~?F>OauG<8+y;T|s$}s?DA|u6yvF*u+Z8v(ZB6R`uC&qle^zBJ`e-Pcx(6Ota_3QG%^!GqTm8ab zEqtxp^-qN}@yui$&JJFol<`jqS~v;2!6eCkDj+{}PW1QkcTPJmQPKNX`Q`FsPG%2t zihR6IM~f=&t36*1!tG__w@?e*NaT21=R5Z;%yy*%3g6QSTjS0B&0`vfgU_Ske{lZ% zUME-AtiQ|p`=HEQX|al$;HzZB)|D&0%kC~HbT*w~wC;*6oy2}x56_K@-{6pR4;@h> z6Jj6!#1C6J8~c?0@(-&teqPn{Tqk3DI}f~>9CCXyZENQVUxvRQYX+-({>0Ag3cg2F z&%WWz{b7X>GM!&J7rk=L*6M@ragL;-4!Yrg__L<6dsOd%a{IPP{0}H1YcGhujl)CTnvI7fh zwkqsaxZ2KkVjuh^TC)+YxhW3*oHRJk`NmS^3-!m1?f7(4&W`YS6J0#)%xP`0L-EAo zg~c)Y*S}l5v3Q%FTIZv{ZiThg^$#OU`_~VvJgiq-q4JeZcFP^4+NgX6&UhDWy;UPm zs_g1h%Vo1KAeD9o(IZy9jcogGPNUbcgI{%O;X~H(W8_DA&Fo;c(@@+3wI+|qw$CM< z-hlt{szaVu1N*vj0XsNTzp)<98<`ODCfGiQ!Lek)^)UAaKjsW};3ag!CVnQA5*+m=l>&F zHJ$9pt9G+DDLINgFiOq*3-)fM%5&wd%iEYW@QDru|CW2A=~{IU?b(UHIP-k8YoAZb zuj@R*%ebP0jM`MP^;FW~OgoyaNh5yN9i-Y#bZjEupUB)E$;Q8v?)%WJl<{CXj@)>& z(5kq5aeKA*OPnCy2jw;^OlGfr%i=qLc4=BaLFdd_IP!P0N7QYp8@ zr=w&C=Qy2kh#2+l{&v9l9M z`1zn;?zxnvI=pZ)8MwW31pAUYJClwRadUH4^#YOEZuOJw&5ii@kV*|HyU>}0I#j=g znGyZa(?L#H|D(~nnr(JgOXOSe?yjZ47qSfW!1_bq*Xy* zz@ly!9rPeLm|p*;vIZM&9N%jL>wZY)?cbX1SqT@w_&vHIyn(}G(+njs_9elVI~Dn~ zdmqok=x^sXwST{`{eBR|O1G|$*q>i`e&U%p@I+R_U95{yG{uo@$(?vLy=d~rD0n5d zL34Dxk<9a6sQD_M{->_A8msO=e%v^G{|S2di7sE6d~f08<*)vivyPw8EH}g5P|>`^ zL)(g<`~Z%5Vg_$ktNor}@g;`!EC>=Gc#hTdHjDT*Rzke?{N+krv7E!bi(f& z^KMdynJV0VJgp8Mo%s{%vc=a0aZ{2u^G-8Exenav&z4hEbM4=2Y@X*~bFO#Zrmuq4 znf@LdHdDG&tNaIe9d__>-fE%|MztFjlh#?&di0( z`M|`l>cq1W$4Tw!_wK!rT$utdpSpkQ(%-j}FN$?M4U56ytA0r+O(v_QgV~on%|)R8+t2y_lD-X@9i0AN9qd%_oyg91 zpj#gfHuEZx(!>RmPiX9s`N^rY$YjF#uJ}#Wn~E2knw|6seZ{&zqW=QhPd*pFeKjjd zx29yY+ErtRnINAya5^p~PWmsXl3$(=v){S)9GLwCw`88~4^@vR5vxp$Zh$tquS{dz z7}e|w&YYFVdB5(~kz8-)sWoGxE%M#PAjzb#FWK9(y_2(_iQ%P6yfF&P1lP5!GP%rj zFk9C*TU9CacM$yumQ049WmSP?8dfF9C}mlrPD%l z`wRmk3Hb&?V}d^E)|5-^I0i@NJSw zDA~8Q{Vnr)v*WRuvwtgya882D#PnO(#Z1dNHp z@L%S(WiDmT4uk_U*?Iw(GwCszfrgpg$zo(;`3fQ^$&#;X4`abL z1=9a=epV@$!yOr7K$rYuJI+Ld}ZSr?lN&Gu~Ko(WsPc9}? z-y`dOwsVmkJdf}F?<+9P^*XehIe?ju{Vy6#z9N$p zlQYe{?aU$1x#{Juo4wCzj7+c$7u3Rh?vzY%#otqBlF9GIDn4^6!kg$e6W%j7y@~6r z;!0U@+0}CDIp;eTRb@uH#jWD|sfP~z1e=-RnDgE_iIh{vt9TtQN`Jsahf*;Snq30^ zrLGg|TL>$82E(h{o7CT@+CS4{TcV`o0$bb7PWZJ|m1}dVAoI&JH+4npNuDNG40akM zN2uw?DjhHTKTI{UQ<;z$%1Nia)amEiIr;H7+Kp@~;@-&A;5T#S8#LOlRoIsKU-ms* zomrM^`yGro%tmkFYRT2CS|Z< ztx#nqvajtC+-9O$a)_C1-!Reo-zu(>)mw&Mf3@;xob>GrZT{xE;hE$sGo>;#7O5Uy zYuNShPKimJkGY;;iz=6$?3Pu?hHOwwYv01%{t2VHx$yO z`n{YC`W^mK%k-<=&8hUfip-nmcTT^j&tYS5rLHVhEwKSQc*LGr9hY{k!j^fb*@eG7 za^~lI)ISSUsSS#iw}3=VoptV#EawvR*D!57S-_lnNJO`lJ4C*Q@}G6li0IYvV~fS7(T%kKOMYJ^D+)+>n3m4 z2VMTe>${(gv_>^1zoGx%!h;$iepWC0cOoBXYy0@7oXrH5R*kE+M;9;E&lP>UsM5|} zj<4w~s-kZXFj(yNXBK*E-#kW~>LwCxe>UT>j{9gX==hoC71-G`> zb3i%M&ZS!XYc}u)aNJ;#W@_!)_P;lKs5k5EPV0C>O!y`A@KL2@d3oKor3=bt#}!tu zeWbQS?e&F`^?URDCRY~M_izq+`{Drw-FoYiai9U!pyGg0OZoq69wJYclX-Dw3&#rRh9sVC6dCcO3?SWo}* zNpH6Ljpep-7T{vGU-~hBfR1veDV$Y@I@e;M#{1ik)!LL~YiwUquM}&)lN~!U_I@MZ>tM3$C7Gj3;Cod&ekywEgVQ2i7Vs?Ig^zTcT>&+x-{s7N53k=r#Sg-5Q!9u}Ta|5=toYZ~{Fzm+!EQUy-gHAZQ^Ec+cvf@o%sl?l z=O%k*a&KD_CiUANd$$QIa93Kq!s5CG9M4%vhiZLIH+I>5B9d?5@|^l?B(waKNWgQr zG&%EBBDDEGEH>1?{OKBRgYgB|o{zhV;QO-bX?*7Q->SrWqQsmA_|+$pmtK|SnOea$ z6_w(L3VIQkhZV`so>kt9%eRoWc9Be%UF}U!{`v7 z>ISRvLE6YlZ-oNa21(8>tcEWVU)_aNOpX1EV4Ys&pZL7(?AVw7|0^2l<}*8@{n!xk z(!R&3ok9O^6_X#4ma*vCp__PI3*h#3zC=1!*1PLQu9kY_RbYO;&;CWK#fFH7Hy7nh z^6f_UHJ;saD@;w@R9H<#S`SxUZa+Wvsd%pi7|RL$Pe`IGaLK1At&#ODKnb(0u`vkZ z3#7A1W;p-qexbQ|i#bu%mCRmD-cPZUlThS8*1IMh{fE!}Mtii!e;c`H?Adf~t^su{ zE?{zCPF8Ot@$9$+f6!7M{+u=h#|HP|b>Pww3+t44$0Q{KtElYTOns zHUZgh==2+_|Ao$OA-Z*`2+8r*yNq=BOBKZc`*OJ$|5)*p9bI#QySKCNi37BQfmH6K zcCQ)Oe?jp%EpnZB$bBH1YWG{ZbI!$oAWt2S;(dIZv-c0Eba?>f=EU=_?lq&TSJJ(6 zV|3n|AHR*C=>^{&C0-)`v7w2oM~f+zNwrtWpLCadLw4oe$2q3Bg8*; zm*+ZCp5Q$7dne=Xt<`+)B*Sz#Nq87tvy(h|OF8mwXrlk(>oepiE+Yw_;I+hh%Pj6P zY&FJ-_vixhAT9Ty+|I=^C})YYUn&cAy~xcd|KCe5w5P?jwnNhe5^D)ea)EB7n0y&w9)xG-*CXSRP_*KSXLHWNrRvcRC0=oy1*;mM&jF)vgnD$CX zwGCuZ28rCy%eAM{}*x)Y4bwnUx!K!*~G(Z^yY;iE~wI){);`zh>|H+r(h&L>l)H;XQ+{yq%6d zj3)iI{!r1f{ayQNJ#E%9E4H5I-^1?q!qpdnZ!np8p9tF7qU0-?QMh*DNpZgMs^bTX zCjKOo^MMHU`DpmQ`p-;pyS3DzbWCYkX-4_E%CTxvmeyP+>$q>BBx?JP9UWmmpQJ^` z&|I%L+4V=cu_@LMRo11MccC|@(SRqA7zd%gC+yx~vQasGb1%IxO*iYy!L&R2-c#Oe zKiz0n&~x;lVyohVdYk;tvS=)-I6y9G0d1bh?Z@>ORepq{>*^Zm!nt|n5ObY(kmLDH z6!aU}j~RN(Y+`D})^_$7=h)7w^cK;3K(^y8ulEy?{h@Lty#871R%J-)g))y`Qiv6^A;h!3n zsO69A+Sd)O+rRXD`SALCYW}O+?%9Q}MOKG8Pj;;SlcST@sySDLZ-jm$tCdKqBY*%w;edhlR)J=9Dk=zND9`r_E-1UeU>}~XM>c+Pf^FNuQWS`OtJy<7YlPg(KJ52rXrg8Ce1bUT2t9f36SuyIgxV4{H$!O$6hAKhBJuKa!F^qRZ$Cw@w#`%PBNG;!a?g>h`ih?gJ{DIpC7SssUuUctrPGn0Nlxr*d%kH0qvX|-yl1|Yx^j5mtDZlmV?+};& zq;h@z@inIu`kEf|u?{~s(W65}luu*F9ih+8C55|cHm~2OykhC9x*bcy%HLL;|CWz^ zi)33O4*iYT^Z&?S*>Bx-`lGFpvPtP+(zN~;Qbff{&F+QQ^uam0@B^K+WBm~Qci$;* z4Y%un|10uyh{*CRdFYq)%ek=d6iMD!59d*+^_BVyYj)AucfR=kQR4fri-i|uNj}CQ zE6XLVQ>d*utMYrPs3X$+(s$+l_1D(iq1(;Jy4$=%!HDCIkwQjD#lxH zZDGEhy@@?EQ1)1OLYDVFxnyHo9 z{Z&Ygvq{TCcmp@c-R$OW z_*&nnlPa%QR#AWRAWJTO?>w3?-haCGmaF#jha|$Myphw?o!mp_o7dqeSywSKC%yM^Hny%^|bL|UdGPy6hmmp zBjh0ms4`k^H}8`fUCRlialZ92+v#Om>O_AZYXA1+n+)=|jpc^6CqX8XAzf5HOpvE* zr@EyFsyp0lxc*LQtsuLxsgBgcaml}WVC`2tu6T&<sHdH01>Ftx?_Xrd2b~C$ZGyi{AF85*(J_f>%sutvI=N%8^ zcRi1{7s~mpY7W|7wCU&OyKPe3Ms{)!GIibJav8y1#g4`1#Xn>Rucyfmq!XV&b35~y zo?y$=)IVvqRnN*_dRSjx-b*j=70YX~GIl7RrQg-(<&LIb-RDeU5A_E_`GNbXXo~H`r8?XAM<|8`zmm z?dniA;#fQXpldwNE}V_`cfu<#vr3k$d)UGBuZ!r0m&k&Z%-~ubW*YlhTl}~13#~kl z9X1^wPm?XXnb!QA-YT)8Pqo&s$(qA-uKpbiUx4HrdE9$d4vZ;JEPqJScaxnzm2P}o z_0l|c&SW{lzbnnzg2O>biViN`l_Q-hEruNbCAf*#$e%FRxX5xovB=b|`l$w=H+jAN_#x zrR6u}E4#@Ro=Y}A3zb9o3)VTAo@DyLF{(ZVjA_GCARm!fb2*O|`@}#i42w zCKZoEA*Rm!4WBOtDVvAy<;yin|Lt!pyQjbG=)IV#7)}$%YRcWx~<2VZK957C6b7gn|#SE@T$TI^`j=3Ztqu2s8I?KJO9G=1+G(;Lq&Zda@+UWa}k zmM5!N({A-&ROdoIr4nKF@>iv2OShM#f(1l(|u*-y?jjPhD@8J_^5<&o%LIdg+PMsiqJ1He-C1QhnW@ zb(OmArISnVmAb2pc%}Snxh;uz3wmwM9)1Sjv}ZS-LuWTr0X7leu2VcvhxyCY_}l@G z<@ROk+5xq@)$UNcrC9>aY8%!51wWIkdo#d{%S%*eUBfef42?X;a$bUKk1uyFFE!2f zM!49!)K!nh4RmNc3VvSVJ8WG(m9G7v+{4a%s>|OPe&5=Bnz8g_Q~eEZL!-+IYpcxK z86+2@#3{u>?H08=*6ss}^=q5M#cH)H*8XW{-ZwGv=wi3xhh*G8_NBeE_XE+#$(1IR zC(9?`*tw;NFtSsreW`J&QEBZ`4-j2idZScV+7^wxu5x5w)q7u8>kaO!Mj5wZPybyr z2-p5oSPvJBveqw(i;A6V`_~S(8%LXxx=n32JJiL`Znf*0s=ZX*%#FOdx70l>AcI=f zJg8cAEL-7m-11lH#nJ_(-Afylme+k-_i5cHb+b)tUWY|=10GtXJXrtE8r26M!p2BG zeP{Kt&!UVSN$_bj%{KOY6iG2p)m2we45>ZcMAg%3_k)kk?aQXMo7HYqyK?Qa;{S>l znK=5mc?xgyqrOM+tMLxIR$eS0&dT`;ryO0{927I_o~gUJ?uNPvbwAW~E}f!#=2A0q z$CiIqrSfQ{jjG*Qpct&CXt}BBw-@G`+HeRMo-?bmrOu#7*Pc~7s`kINm(&icJ*0N~ z+6~QA?P^cv6~8e-^AYURXO&JcJ9u&3y>&a* zm6k7E-oh00{&mOKU1NVbliruvR&aq9o*vQ0_KiPrj0 zu^tp#nRY(7_LkZ!U}a?O`F#G`RF~sS%4{2NMR?r5S%Rab%*N1RIdwqs0mCXJ!9LkF0|- z51>m%sT7<>R?UNfpNjM0<;UXp#ox)VyU6$!#h(lBkrik1;vW=)Isi>}uDn`4xcpn` zoYFd_kL%v9`&bXx6>!M#(umS?W~ZK7eoOz&{b{zAEQQJ9rAP8IXR9+_m(6i7tvXuF z;v(H*FW0a2Nj_>*GCK88{nP?(t6pnuI(4mLlj3h|#`g-Zvrw*MyKlm8xn8{ee5Wnm zs~m4a#eM3vDy6xlN#w$-r75)9q|#5NwshJ<^hl8wd74%|Ks@0yakP!ubtj0fe9S8R zOI+hu-bj1#fPo@9m$QQ=@%x(cIC`08bD*`K2s;;p2-YeZlYTaM@+8%V(S@)RojcNl;N>Ovzi~VyKPpKuF`)1WW zFSEryi3 zEm#{D(`J7qJ5WAEH{VL>@6rsoc%*bi=_4%;3LZaQBl{Pu5ZfjXl1YV6cfAOl;_6eYpnUb$d@nV z0|tsc-Yp{aXH8qy`c|-Ug4rjdSb5*McbzFd1zu_^(DYytwkWQID;KJCoy%5!2yF~g z5nh%dI80pfZ;`gs)%3r})7n-w)dC&9n8@cN`o~_t?-PF|8}02(4PE;)|8++=`9P)jZg%l! zp6o+n#e33aKaw5igJ6al)b-u<0Q7l+-od-$*DmPsA62Lii-#Pq1NFxI-R7#tzLJ-E zgVp#9kK<~Q!qoPzAd-0%|86tg`QL|=J@`^Tqm$FCc4@s?$A6Uy<(9bVVzzq=b$oZ| zk#W2zWN)_c=V;?Fai1>=zv{u;rnmuK*wEb@6^rbh|# ztS8R@qpHR`NwIarPwv7Y3t^)%DYcfLe;1arivRJP%6GXB48zgzCSX`YmEj`TcpazR ziQfkCls6MEpMe9f;NxztYwdj47-RNXi^?K=`h58&7&(`haE(3sr@Rh4oy;!(xw1Lz zO;?3{1f0$kmDtTZrVCKuO?DX&MF7?i3_+f8%Z)Yd!@%D7x!KaBvJP(F(_TnsY z&qGDp(|vv+3;%H*>&ar|&2(IU(3y$D%&qFlXQ&qut}CwwKl|uIeLkxAKz)37y8Rik z>a|_rKcwjsVi9vl)8%w*Q~jSi;e&Pc73+x>yQw8?%HCbVkIDRtznw!^D1tTxG|z|~ zTo0PeJMK(=EUso)ZO{n!^L#&=AkUsExwE_0BAn^lLgB(nsuJh&btZ zS(xM?|Ebmhv;o&{cKie}k)iTn7g_HUbn#1Qc@`*YOu1-V#Z^~zxNEV4m-BBv10_S6Kk$XJu2Te}peCzzkpQ@IdfO%80 zC#OJe7SI2P4YIOKLO&MSx$NXyK=B5u_=^v-uITV)wBY`@cW)j|fAV)dl(QUe-eE<) zOdg)X34S34`8?dD6MCj@Pr)-w%*JV|>a-tybCS5u zy>xKSjV8yNZYigTC*JSu+uQW<0+dmdM_C8mtc!xy!@=#*O77yFQb-Es`OmMyUp!Tt3n5y)Kb)_BxAAyyo8_Mp{-sA(^%gd zEV`H6VrEc%Ap3QZ74IVAQQ%j-;KatIxMv9JJ&Z&f%zHYW*MFD!l>f zzLz6hhnIU49ds*-{MzGBckGJO2a7cyAvSqF{vN@CI#v$hF!u3wa8}0SGfBAXSp7%g z%1-DdQw9dJ4c4ju#rkg|LG~3FZBtpjQtPqM{J15mw|jyneElZMX{}D zm#(rq-`JN{c4KqZ?(4JNj#t|;T9>|2wC*UH=_YaJu_VrLFm47<&Ft9EcrS6ZzPRXJ zxxYt9jP;zI`Vf6w<($J7;zdhI_$O)LF(NdNimq2o-RsGYxzoO_WRLdXAJ1kv?!wl3 zpk}(*(AIS9S?0(+>MY9dB<&K9rJ~m*QIV-0-+O+}KDn9{ypoLG5=VU|kFY+8|2H`? zSOjerDt**$G_U;6xtFKPH#og<5^LaKp5A3N(MRPqSV`xB;(Zckh+KE(Quja^&!~s~ zjqKQlW%39Kf0yShet$c*z-0HGJbXnoC!IJl zv3Wke*+-T9K0Mw@?shFYxj|fdiP+g+;!`_{*Mwe9U?bh`{KvbMeqv?goU;E=+^!#) z_8$?&v*G4RvFU%=u}$ckHLCKzvxsYd*}x{%vkmj%;AhH;l5I%6!|mN! zB4?xR_t(xN?BSHi>7aRBBv#svt|^&>iKQ?Ym|E!OXZEqH0O3! zaXRpNT6%#Ri2cd5_5JFfp{a+`%)Kh_@OK{v&6m9I?^zK4l(!>` zKUXodfcG=p=TmQa8ys!ruFt~KK5X`{aOumm(|)AJ6YhT)8F(VS@H0xE>3$!Zmaq+e zUR^}ua(sR^PJc|St1-W9pj_&BJlVG}7LQ*|c0HtCW)b^!PjT`?DnFG!W5?WAevTLR zr_&j8_~ZA9w=QGF^d_gLh>xdMuA;`c1DSp9oaj}$OTI>r zPX*Bm^i&6Xx0X!&NU`bj$)H!{sFuoi-Cp<}cHdON^aYK1Gs>7K>vVAaXmX`ZWoNPb zSHx@1vU@YcsAoHSv^q|Im?poC#5qw$ezJY*h%e3u!L_p3ciWRMVd+gf^$pBDgSO72 zh3*2;-lF=MTX3IuKVWS&fgRCY7kl;w&t(pdJRApPj#Tf$og$c--t#MYxOx5c zxay$F+2)}<&(gdARG;Gh56OVeqQc{G{!AzF4q}7+B?o^9?7XE8YdQX1j(nuyNqUwoV*c!+CxgV|y^)E-y8}bmwh|oPmTAk&+7eL%qOte-$ zY!FN8Sh{=<-1avaST0}0U)mX54~b!aQ(jQ+PBu)_33ff2bBf5$e)PixJMuGlR^W4# zSQ5X{l=hn8d{$5X{^8ZxtZmt$`^fp)Gxdu9g9w}o@OJ?MrX*p{EjQM93v zGx>c{{Qx{VT@+`1yZA|=Z}DJRi4&?Zq%Df)75)X=fmYeB=1AF=ZuKP^eeKFayxueI z6PNG|0|B?sdg;<7S7 z^D1$WZHl+@C|)B^H>~;0uKlTA;BP$Kldhb@r@j>KoARQLmS^~;a)lh{P##Zfl4629 z-`1d-EZ+NF@im!>&&2=6@LpT0uRO&ZnFmqNaL~P5zETYHeO%bL{C8;u*2ycZgg?bJ zf2o`$3(=8(@O{lNGUt67f5+kjV#^y9zjlX-A|gYaQhQKU&th2Gi`IHntf6VSg>#O# zmmfi~Q=A67ju&??>9-+S(nQ=~VIe0IZ;+=LEABbBxOVN=_H`{D?H?)w&Sp)WYEK`O zt)5LHbgP_PURc^hgnY%y4Ci+5c1|%_wk=TFvijll@Rv1>QSO%_CSRhk_t{CaY1to1 zscXrJ&1!Bie`gdb*xp)CV*lKamnK+m2Uh81IgVA)_8%}8+k6pSK9D{2i!RQt>ffX#*K+plaI3wM-7t|&H>a{aE&T(@ zu{StI;<8p%Ut=ZGu@Md2x$rrUU>#QU`Z9W#i#nI+iYaX8J!!ZhEcltO{siA<5Nq-_ zc6Jw>liui;;`n*4){_?B3Qr~f9S=Nq(RFBhD^ZbN?6GcS)I{FLsr3sgtCC}DgYyKE zr4Q|W8N2XRS;5w5^h8o;S^WXx9^ddvy0945XFK#INA@P2W{PI)!`^Sl)_+`fYPkr- z0-E*~_Q=6#`*e28&rZ2-go{_^3HaI?9CTD*MzphEulUT@>>;R@i+4Tpw`kz(n zsRu|K7k*)-y+c-Q0@APKPgk)gU(i&W%ROI+wkNRXS5o12AS^v8GIDE8sip-ReKYk7 zH;GQ3NCPd!lefapa(3@1l3lHjEZ{LT%V2rxzHmB{h5MZqua3KO#%77Q!eA2NVRB|H z?VHT`Q*wyCS}iVF1SJ6R9iYPRr;T(g}stw-;9jNG`3es%)d-gJ_j%S zD^~bBA7PH@(NTp9Yi=bc)qmUfA(cX9I?el%9P#0*xejz<{C>95AbR$N!un*y44gDk z*7-Ix{|>9}BbmU3JelpqB@QKh-eQ%u5^emaatf{Tgt~}(Sy2Dh?1W2pK{*)PQz#h1m|cEx#T6gID^ zS8b`()<$!qzce5$&jF?Q~J^s+MRY^UP=@{C6p7hCgog+=W1m1;(##Pgh{ zf0KOtjU>B7&haw)ay-BH9-c&hCz40Ap6;Q2N7#=k=;m#`W+w60{$r~AJbBP>byt{Q zUR6y0)yk1*<-d6L&cY_etL0h0_IOUN;Ev)1x!)tnt)YeaY@>JTZ>iiWn%3Baxl`rf zC%XF~IC^(>-&N%M1>%WqN%+3S{pqsadI79fIEZB5r2Y+v$5?~96# zrx^y4HAfY`EtL3uZFqj~;rIDgUzQQ=Q~!`^voG!AYfc2mpB%;t{uIQ2Rc@<4+-~kK z+whq9+?Qur6ronJaw)4|?@>-TsO-;HLZpo(F46d%={SP2<2fFw6BE37{ zy=CYsGaN6$pO4e!@AKH_)X!k;c0<<((A?*#{h!QkTM_@vrXRjQm7nmo4#eNvz{W-3 z8t61ZD>Ct~N_!U3{&f9|?9yvQZ(eum;UOG%H@R>+eeg@oK6t06(*|df3Xg~Z9mYak zpFjH|Isdr5T^|=`Hp$B*^f*=3zpL&@m#cxQuF}WsD0lzI-nU^D*RiVaWE=ISVctQ1 z$CIxAsd=>iaX7qF=k7z)QOtmwtN0Bg@%{z4d2Oq2XUE@1w^x&P+ZE1HYu3pcU+33f z;j`C}9@pq6@BuyhtQzKhX^30c&OMSrW0!9!;`S-8qK)|kx3l6p)IUjA@2HmZ2@$K7 zRZB7*cgJ{sMaP^;+Klu#!DD|B#)rt9kNI%FTgMM<$}yzOdc3rk)z6&HJ~35;9lgXH z!@=ZUts2(b#Cm>K7c`#b-&^c8QNW8}b15scL*YeM`=_E;=aQVgc#o^lDDz37a;3jW zQX`S6J>dQ>_gjw!8cJqv26uDVv#anXu40X^U4MfJ=`J+HtF*=Xyx~lL84LfP$Y*TN zH#nVzxgwsvm)2a1_cxMmxQ2glEI6jAP}_%>asWy`wp!o3Hwmy>&F*5s6WIJC(DF#u zWTwO}Cx;(X{ctTmb`}0}CsepM3Ab|L37WX2UiQa;|4W|m3)Vcw<3X~Ur%DUj$Cbk?M=?61%P~JO_&IwA2K6pDVub4lAcg{f6QZhloaP!B0BUKD;g3oU?;p%jRC@ z|F5Wz>Ft~G(t^)dVW+d`<^K5VM%O=r9^I5>auG>=AnNFdLNhzOvB=*pQ^Ey9+<44(vi@`hHx=*Rv;;Z1PwMpT{{NEy)SVl5*k_8#$69x9p01(U< z1DIN~raicsSGzk7neEE6=*xQ7KhchSh#t-Z%M~(+UDO9;j`cjxIjU0A`?i-@{+%Me zL*Q;(mh?eByT1Chwj}Bn@c5;OeL5O%$j^TeCv7gWdNXa_2o)};)1O4){djF_);y1{ z?sNj;E^=rzPa(bUQ?K=c)x9dK^*ud%HBFn|vX6L``Fp2(+{xRUCQ|i_i2Pi?pZ0rQ z_gjM>m{Yrd^RE{=%hFc%v|K%_QTB}~B3mO+!PzS;KV;k(DX#T!KzpG z-3>(aI*Q4)htnR`xEdI`liBxx?L9nrw93W(z<)3)bG>~z)yatTYx)#5XO3~stepYY z(?onXXCWpkvmUE*Dv$qX*t-|rGl?YU21fY#1B_n+7hQ4Mn{@D2yv9T}_a$L>g57`d z*x{<@GleSCu~wwZcJRLi?v&|4UC8}2?C@W_nCoHuZ#igQ~*KwE4SziNWw~hhP#<=oY_x~N1 zhTxXZ(Cz>1|4VeyPB?v{ZaiyP$+e`#>Nu^=y`HhYZOGCNvM#%cv7C(#kH%%ESWl)3 zZ^UlTX{*^h_spM5U)N{EMrz=^2U)%w>d8!oL&&vb?af9gV*{|xfamw!aU5D5O)8G_ zNJrC5QJTqa+SRu^*nu(dF@o*;C|xm(&N#|Wt|+pV6R9<7Qy;C?yZ+^z%uni7bDD2A z^pu$-H`1xEkU=+-Avd6~mTcKgRCi5Jn%8)o}`D~`*g^=H8TG|qbt)z9*N&JX9D{r5h-SVScqZZmgpioN^XzGOzz zbf29I(sWZ@g-5j~DEr}t_52>YUGQa2@07{2^al7AWa;lP-BojjHoYQ}1K0&F zw}O$oeRH>}l*yT_?pC?TJyy5AXF>Y0?>!8L%x|0FIyqsq5la5Peh-#LQT{n++M1Ha zIcfAZntli5uUX;!;$d%DS5ElnoZfEsV;kIi1sR*E(dp-%^G03m{dh(`HT-SeId$C}tm&tbz6al+j@clZ<7)FknAts!ytb_P`@!7az7E5S*6eH6q3b4GI&G9goU*2Klz!~X#!K)RL=@H%Jra+WSU-vRaJ zjClHUq+db!C0V&;uA6h?tN5Az0qOFb4xyRumNW0k+a>zD1YGHdFh_hVXTZ`s^l$&4 zN&b~#c_G=5sX^&}um)&z#yK4va^5{>-)Gr{w_zv!lE3!-^cKkZyE;^sIB3rHr$>3_ z2xMm2${@<*xC;1kTK`YGQTFNdoLC7ag28k=XyS9}W}JSzna8&}4ClObR@uVuB7Iiz z+3;6-Ru-&1-)aSKnHSp4v$^}_dpVU^>s9(Rq+7@e?w-k#6?e-tzI3vfh0@Y3Z?AbvC!sg|6Mue9Ko@`{op)>Pa6M{k1|R7%pAPxyHQy9Qx3rcPb}{`Ik|+5AjV`cr zkvTbW|F89?GGPrkZ{g9_ibFFixnFR%#627Cl`bCXSM#0k{$Z^-Q~R4MWvvx_nVp^I zFX>2-)4-vfzwCIrvxY{}t03^F`*P-z&U3ZDTsyr`(itLqloORXd6`ZF=?1dQzUONH zqOjm0eYKiasUw~6+kiFu)C`u}!dN=S=Okg^S;6ac_{h~7TT!OkrmuUt`lruH6W4Fz zYUwyL4>a?wEGLP7u!_IzQ9}=n^Z`$&kcN)y`DVB)y$X0Tm1ceEZj`PG4O3_Yn7vcyp7|Gf6NnpmoenQKU6O9Up@m=UOH0^U(LK^#A{}*d zraGLIc?E0wTuwbl3$(7@FV_hjuEZ8j*O7(Qbu6mx1NX2U9*}*;UW>6qq>|mPWPsqz@HCW zu`MFs=KD)}dPHw7vzF+e@MF5Ggu@~mm7Tj+<^hB@>-|4;6K)L_G8rJJ%ro&I6r45W zw0}NZ^1pO8$rP7ZNSQ*E4j-Y)bW({#%G9UeIXF(=rciVPt);t5Bz!bQ<0X%Oi!5l)GG%vtk}{+Agc;g1$%cxDu} z@~zciDRL#e9!P(4m%tvnO;?yD{-60*4LwvsBk7itUC7-dJ7O0^dZlAcW;7JNlkPB~ z>vTX$Z=i;M;g(;j*Z!GoPVbQUbWwVTMLT_OXZ~={P+&uMpUCobxsUD*6rr)~e0DsN zA#{({Q)0eSSS8=__jfM##4ZTy^ zdMEwz*TpfJn;Z)*T0K;mZWYlGu@$08(nBS?yxcBVz?$>^;q_P~|GJ+tD1QxaX5V93 zMeAfnRB#h|%GE2?y-tsy^sR~Qk+nu5h6^Np*qZ5j6zvsDF@J54E}`vkeDq*G-PrD~ zW5?IE-?3D(ACWR^SZR9gM1C~vUo5TITIp}||M#^)s)T0KsVUPbLVcOhw8*RQR$y#i z#YBT%UXC6cI^+bWktOMglYSDx^*ne_|C`@Pj}`4xqiX++cq7@dI{P2Znw5ng(oHQr zp)!A=xpilivCX0t(~T@PMjf7w6bmMzZGUt9=(I(?9ZG8Gs z$>m?M)F<=88;j)Z#CBfHqaDQe$<&>lM1I~B`MFlk<3M)FK|Hv>)i7jM)XhBg=SZq0 zyqNUSDUtE>{C_pJZ~EKCwo7GS;uFnbe<^%4)z6_LPFvHveOXKE_<#7OJ6kz6a5`;m z=-Yepqju)muEeoTf_9mc6K^%@05rIy z&CpypICqaH)X_DURxPj=aMsaZSF!%@;pZ=q#Tu^_U-=gP8oF}LguBUnwM_DOr)s;! zCi?*v(~mB&cd+Kj?-kv3Z95jKiB$ckDx<=64KgblE7GXJB5vS`5{o)L$2#HncBu*@`Sc>Ty_Xo_S-$^9Rudp!9>K9t$ci>ESl`pL)EBLO75nvOi)4N&iPyuxHV_vMEV7RNbL#Oc4{ z|M!UR={+rudAdm3)*xPl#~u+SJ6)W7WBJKdWqem7MB9qU_i=`I06%}E$kF3sZt;$P z2YbAd=;cgWPlt}k<@D8yMY0+?3Qrza&0W4LuDwvkX9Kk#`^$2iD`#_yEZ&2%2B*oM zykM8l72Q2jWOSKqM@{9I@=AIm3|HH5rf1I4?kc9yRdvHX@}c*L%{HmV$a^@EG*d+O zBazd~_{7~&_IqNo>0p1Y>V>mp4@bk`O7M}{A=~)OsXlpxSLw&OksVne_HmD>UXSY8 z`QKz`O7i3Hs#X0r|0}ugQUJRb^c(1M`Ty!^<)}-^hW?kn6iv*86IiiLrif zZ!HTv!tu4F*mNFo;;fDAP>p+iRFxXvqx?*ee?nCEc9QOGSbYl|kK2Wh>~#t4CnCBv zcr*QNxSyAaYTYgmK2AO}(=^WUyxh-J^PetWd7Rxnk^DLWl!ud}+4BQL-n!uW^w0bg z-A@wPOCPTh)-(c^{-Z{BZ&CTdaCQSsjX?tsi^zQi;#lG7nNnPb_U7ZB=!?WP z-WNA{72L0hoJ>NspX0pfl}L<4vsOcuJ;3UL=UYcYSfoxI8sdR zKsxXU(Z!u`NqmRkBbq0DfyTk&?P6b#c)Se9pZnWC;y_)+ocg=-e)jWNkNwqD><8j) zT)B5dUJcz z-Fg~4$)CuZDXfRL$?(re^K__;$MUZ{#5y4E5Aq>ZY9HwL$ug4{;Fru-KceO+>)Xjn zGp8>7k9ydzwxrg4G2~ms^PdO9W1{M*6nLAQO&{Lp+~;TZXF7+r2Tx`d?eAwFP^AxY zWB%>$_&1YY-vw7@JkN%&sn!yY>TB=Cw@MG=bU_MV%mViZ;+voNdt!s}R%1D*-*WoR zu3f!b@-3Y}n>jn}L7ORnnbER2y4}R@Or^_|$aK1EJ|ssudjc1j&{#m8pFBoj%0rQ@ggSC1#Zf zO(v-&Ciyzdrx)Gyss#`ony$UgeWR1dR&2G%q=U$&hWU5{syN>m{yTsyU9r=5IWr1> z@H_FT#B+Y~eteY70c`HR>sEIx9g92rUpp&|H5A_<)jXLfnhAl4X-$WRFRd=K4?hNB z`Z@pTZ|VA)uB3^*#4l^GsbWXP&&l^=vq!pShtol|ISOcn+t#-uks94`L+rP71x?gz zHBvvGQoN>g!3-^=pJYS7(1xf@8&~LrkD7agdg6nmLuahKg&>~`wm_J;O=2FI3>M!s zv65JNiLS(M3(dvGPUp_pn&}Cf$Vwwvh^L%x-?e_HV{PJhv41izIlGjIbNb*mbWKha zF?QmwerNt&@bsnM-{Q_W)$c~qK1XXlTGh&1*1>f4}Gczs~3JjC1b$ zzOLW(+Y?ARtF$b8ibGxY>CD9$Wd~|bx_9QSJ_~IvpKHuO3p~y)kMVy-KCKq4m7kIC z`JqTP`QrTSDXV7{1uu;06$Jvm^jMUEGOGdoLhLyMpDYRv)#g0P@Vi*xz4R~^11j31 z7lElVNsoj5f7gQv+gXFXTQjlpGrX^ckclhw=SVFX_+J}SU!NUlogW$oqWV}5u$LXc zCzb2;UEAY0@T}>((I&PFt+Gap)Yq5>J@i5nkI(Y_qsjBN@A7RvsjaLxy$H{~huvwf zIPJ3x&leWr%-!5o%(Nr>HLiBDv~vsXGyK0OjCz3juNLqBxR4gJYtqtn_geOP8pJ%i z1#`fhq5YA?GWVd(eJx25;)|VPcuzn7oemjZjcBwqYU5#YuRS=7{gK_~AsZXzt6km-0?T&vp zcT~1#1a5%^p(oID*G9<1XS5CMUhi*mYHe-3(OTikc0P8O#s~C#Ugw>Q z>`qHbzs4m#p;y_}c^YD~{!%?ST43%&Pl#TGV8*1hcZK`uE7R|I0L~-*8Ap@5o#!4t zTfc|hJhOoVML2ss>SlzN08aYSNoa7)PJRq zGzzY%7X|C`d3xog zKW2dQVzf4w7^0t6&x%-Qv_W69z9vsxNVx}XKC>kJSzq9dBsR(SysN$TJvVJS{j~BI zZCUY6>J%I0G{FSxoBUn>o}AUY>F?J14)fVKxUJX5v(>k(x64S5GEW+{SH1dzy@$Q0 z(XoucRga<``oQKE!tyR9q&=+lMmkM3uvO*kV!alkD;IxUf1ovZ0%DiGMxzW;hVn)K zmU|4&Og=7M1eBqS)pKa9*a)B=3s-B$aaSsa1v*Zg`x?XWFH*7|<2!r_BXQWL2a$a} z&c^(t5BXe9e)AR3uyYEG3n)*$x1KoVqTQ(VmYhkRseVf>bt4fzM`}%%#JC{(lLOf3 z9oNH`7KkY;)yt)6{oS6PPY^HkjVm7xpu;;|*Vx*AD8*+guTLk}Al@2J(jTj5M*pz! zOr^9Kpx;x^s!~T!xxO6tEZ5P3H=1gER9sghb1Jsqg}S`jzk6?glNJKcVm5YRhk562 z8;>-mDd!SidW=0qPg`%hR3m4VtJ|MjdX+~?2V%TG8N)X2sK;FIxaXn{qoh!B=%d&B z>y!X_obhP&iHu;g-RDEtap%EkJNBOi;`+i4gHL`pZtN64KNZ2_7-jE1M_SYiYkWzG zn~!@tl|an)soD{04z9wJ)YGXgX!cKVQl6QT=mvdnO7OE+8HLq@FSUCvMj?cP=b~>{ zZm7>f54I5oF+@*>QxVbwUAeGcWuf3T>M0jlsa#q7I|D{s23}erTF2^|V!#DHpB{Zt zIuiTjDQY|RAy>x9BgF<|UrKI$|9VoT{UFAt4(xNq6FsQLk@cL*S$vi_BwrVQjFpSw zN{vA0my7BxlVkY|e-nrA@C3b!-pT8wSpC<|W|cn~Pw`qaC;YDTH<}|Q1U`0s!oky| ze|5e9lijCODHpMWzZnK#oU`D1^waw^g`w;&?r zZarP2J?d8CwD>Ar7(#l-sMVa4G+ci3!=Oe9~zdN?H9SYR*Q*JkKD) zCl&;LcPC}*Es`tfYxbT#UA?{`ijj`d<{p{Rgz+G#nu$zX&9+5OtciXC%MTN1+~U9N1idT>QnDyYH(<>GzZm zdP<&L(5c_pvr=C8O3l)9u=;FV74SU$rRs{FpF9x)NUm6)qF1_hyZlQ-LO_0{pHWFI zw0-X~99kVlZ|Vi!4fvba34fz0QdtnUm!^%Rc$&t2gp<9L$!cUV*liF~a>q`;2==ZPp9$V39OaaOh9TB^#=g`_r6{q_Q7soQ94ct+Bn63-lnAeJQ5%tCT!eqMePTH)CJgAbuG$)tVGH#0GT*Ep2}n=2|nZ%GF2# z(y7|=|G29=6OZM$@<{C{wIlhvpScR&26I4+6$TtMu(pC{2D*iMo6j>+t*mm*Qoop~ zCE*$ZTnO}YcPD@I9>KGHqE?L%51_+l_)WYLmhuF-r*s>fgK%|cW*qo;xsG`6U&T_f zM99YR0E;7mED)>Zwpo&p_TH{m>Xl!5g&6D3l_2_$wN;fi-a}lz!J0e)PelG=^hpgw z43&Ph6qT%IhR7qu_h6Sd!ASLLHC3}MyrY<=K56cZ6l{KoRHtOoj!=UTPo+p#8swgs zU2qv5qgO~?swE#tOm!0Do?@kEAa{_KT$`Ts0J>tZJVC8aYa_@@kekaBm5uUzPg{+} z%mw%ESp@co*Xcde0tsv=VeX#AaH;SvRxeEl99KAr>1O)LZ^V0bU*R0UPP-(St0aC0 zS9!g%Mx9=4yv5&LpEM@7^nEcV$QTLapC{xe<-6js)S%uZpLU;0B{4(_@Pvh|FEvV` z9jsaS1Zx*_rAZ;Lj1e0moR;>WdaW29WIvb%V|JLDRbaPz`r0Ic{v*D~ZL}Mee(u5j zNEdQ8Wv<$hQo>vU^|2^x^)%FV)coA9kPhH4PRp0%>+1QwBbLj5a{;2b7=YRVjC!P~+ds9mvZ|tIkXU{Y?JN90Pq)dUCb%)Rxr#wHtz$ z8cr_Op#>3jY*YOQLqfB%Cfy7WJQwLTP*Fw=M^GV*{lhf`BY%*6TzgIIhD?@Iirr`gsS{>Pa zh&kpO>fKapkb}6Jz>_3Ry8}JhfvpxuJy+ys#IGQ`Rr-*F>0MF74|GkXbl{T=G(@F= zI)P`RhAmb}1)iqRQr63lg`lvI4~mUu{HcShLu*Be)0aD9~Z_TFL3%p%P7Q zq0E#X|7WMDam%3t?MGcisi?i|t^-|0{B%`LQS?4y>!sv(KP65mNdjpe$StLm9wK!H zWraFOVC%_++^7G%lXn)%!CvH#e!?>dGAx5!0lmY{S8*zroLMVbo5b%@uFuoH5hDT} z!>M~t4e?oCqpS+F7VUYpy#S)_An;BL1EHzKqweQF`Js34#I@Cgu_x*O(xcCmOUdn& z4dR6S+~1Vv(wAC@oJh;T-6{LTDeoHaJZVloq<2J#C?=#&eopBT>`YlA6tou9CxyCJ zpSUGfxC-~@St`o{O)$_i^}Z^5-K(dqq>u^%e^8Jw?1=_gbCWaHrx|z^eUi41G#FTe zL1s(9!=-tBP)cv9MeNtR6G%5_?OkDI%2hQN{bec0z95$497+8&(pJ9Y&h;mWzv3X9 zfzuXX&1ty8HJ;!;Vv?sPggqIl(pY<;P%${O9xf-%93m!RHnh1{Vu$`zy%8YPmZ;uNYJ&a=)u+c)13Fzi&-%vEd*ffaJmezMmzg@Dz4XN>99~Ui?F5nZ z0%Vf3q2_!HH6Blrt?)IOUL%oVmx+3eptf*uG74Ogcls0G{||B77;rJK;79Tcu5rg& zWNN)iHbYZ>Iz;}$Dy-@}e10Jr7%Ql?%@kV0{Fu)4Z~B!=<9F!Ok%MfLzTs`WI?-*R z1ykD_Q+t=24jRWeh1T5f7Egbgio6Q+FF42qgKwz3yN{keUmz>LCKn~bjNX>S4I5Ec zScp38df_X?mQzCCQ$bdN_j?d$Pse)g4zP;sk5*I!jv?-OKM)#2tg1fI`YqJyZ=s5* z19)o>`j_=GCFm#Je~i5*jk=yZ1?@AtB{gG9vUaK%>6v?84yIuZSDgJ0|xap&*2 zZa#ay2yAKr<4!z37t((oc|C9N9J^rLV0PFu$tdXkaJa+3c@kL^v&d>#3N{8lAG1id zgF9AvTwpiViI6)9ssdLy!DuVH`4tR41@0LuzK?o^qP&-zswQLPi}{SxKlAfWC8#A1 zOq{_Q%(*m|&N;B^NjEr`^?ZIkbaD+^D^GSnO|aPfyEMQdH*w(d#HQ~j(pH{b76sFl zC}t#@`Iv`Dm7a>UV4>dHokYf*#d;jda5kY@ll;g0#UMM?SYb|9cIh0fI95tNXfqG%ItB+eW~sE!$VugA*QKGL+x%@ml}a%cvTm1Kp;RZiTB z>^I3hYCs0kIl8#~N;j(U@j3KT+)PiA2)v>VRR1)YMYE`On+aqV0l$kpJqPDf0Xley z47*?GHBp>uUaOx6(f45lUvDJ)9IU4Y)!FcEI>R5NC&~c$$wQ$j^fP#g{&)N7csh)p zITPu2^A~;0R?rdfPOKL1jgQCU&p|P5;SE1i*}RN>^a6J_z-3-bbfapy2Q`hO$oO%Z z_iA`}8u;BP_}}|{U7LF*JIi0B&%_bBa5Sc?Wo!KFr$W<{J?)!D;`AOnPQ`aNDudT?zL(&} z_d$hsg_e-9b$7xpDed4H9l53_a{?GJE{UlT$c@{Kal?w+Eoj&Qz#>2{x_g>k~4bYIE*4;T+~=9s$?QO8y6|m_r`h2qfzB zz@j7g)SfE$W>kHbqQgl}_EL^o`j?Q4E5T}WlIwE+c5v|Lz{jsS-Fe8A<(%_;e*2Us zeMGk0hpgvYVhFPy`4 zY&gR_i_?6+M8}>I^r3tk*zAP*%y2M%T^f4!L>?vkc^>qUp8k^c=owfw+0XJET{BM5 z=P<$v)}a&L>-1LW$Gf@1d#Tg@l52WHa}|)yLy)mEnO%`Bz9Y7rxgV!vmE+IRjqi85 zUhL!Rc04mVU?Vx(id;2^EXq0T?=iT;ap1oM$*~^3nxN9txpS2{%LZiJeM8@vhTzXZ zrWsVD>vl)_Z8Za*i!o-86%w~%k=Wp9iRgYh;a7;RioQ%|%Nx*A zdO9hVqX$W9d}`voP=Dr#d`AbW`P^w{_%f%voxH#QqKoul55u9V8}#BlNVk(WV!zVW zYC-(H#7k&3pN4;@JJ$rdCDaXh@_S@=WNze<$aK0)J;Btq zB8hkC@^w2FjTK?OQ$2d{T&9P5DSF&|PG5$u@Y&x&kJ5khAib!6rX&1aXk6ccB^R02 z^aY*EGtnXY?no*>x1ujlLpsDn`DDRxj!*-7!IX@@9-A3`oX+HxV}CQdVFYtVs*$hN z7JBOrmmL#oLT~3snU%1Xj`W!#9m6k$M$x%p2>qY3(GjR4{e-5`y{0W4Iv=3V*Kp4G zKDhF8^d)IcZ;vp931oobcH-t71g?5EkMf#`APx)`k@yJo&oITW) zp6e(1L~b%hJECt+p@-10*kiGWV%_Po)-q0iPdH~8x?{AYUr8vuo6b{{lO5>(fJ2p_ z>(fU}6CBN&`@*@4@Op+0hV_#ZAUa@tEufE0+SrKbjXS&UbczL3n*#y3Ljg zr6UviH!`6g3!jI-sNr;h+NaXZBqP0DiqiA;3SDAiXp(7=DZ9g6nFf$GrD00Glm{Y9 zLbVb#y(T1Sewps(BI*v zgOH*|PRwVUijLnV{vUe46^Ok^kLg|U$%)pip>Q}xMg6nL*AP77v7}tJo6~Xl!6giz zFwjf^UTx_8Q!g@w894b;>ZjbMOVS@ql50n2xt`GDwCFN0e<=N2chFVmGJWB)(j(SPeQ@!hD+dnJG|$ZbJRg?`KfI z(HXv31{stQ$@@8+F*6-ds?ce*4Yo&^NsO84!j+E>UKPkT-$);)*37|qEAnK7-Zr61 ziGlIMbcB1AZgBmXfpasKpN{ao=&AP>Jy$oxJ0sQV(Ob^u`iib{XPJM|7nHzTeB8Uw-zq^H`KcfP5)u~6x~nXn^T;{a;R?wee`zFFYrn{JKbNp zV9$JnR@s^?>Zw?xRs(0pYTk|nzXU(7iAIu{ZW_PvslJJ#bb6b}9r8mh%Q)3E={;&vfYOwc{*d;ZKHOnJu>R5p!-1Ezu&GPu7O z4QmndIu%V~UeZ=Lij8R1DJU*%Ar8ns|`kDPyK1z002(iUeGB7HH zKD#r11RJ6{vbz^r(39}yPIPbD%c*bR+#7M)&B=y;jhc&@=st&-OVf%oD~CrXSF&oS z92(i%cs}%syo`SM2>6!+=;lS&+k+RU9C}MFPWLtVpLH>#fZ{6fFGhE&3g~Z@>06Wm z4!sLH8W9@C=Ne;|Edgdj@nV#x_fZJRxs6WX>yrPk<^Rjn{M3ZM4971p1lWv1XMPv> zY{V0GFPd?E^s@3`S!49FX6T&_S!rb~xZGHf8L?Td^IL}Xwgst@0UlTrYh?r#3{E!L zfWIaTPc987X-eHsZ9Fbl@ir}>&&yD%83uB%;?&5j78Dc zlYERmHGTQ&#_KtD@(nc>OW+p9gsvww@U2|GoI5Oqs`ap+M?c?!X1*0#{h71>3#sP} z@+Y8_UepTAf+ugLkLYFkJyk$Yssh|6JH-NYO(c)ut z?fV<=Id~p-A z44e+#73(NFTxfo^|M32oPiTi-+Q_%0wS};@6ZZM>{0g81McxQ9d{<8fv!Vi*vRVw8cbGJ zX#ea2tTS!+Ak;kpy|@`zoC?S44=2kZ~JdwJP~tsNX~Fken`c!{3|ah7daOI>iYB&$q=B(VBoJ=ZM77W@OQdYK*E z1$U~L^cgjSkB>yU96@i$hc2HLP3IV%%gwCu7wBjdbk`LtBt-uuIoY%D-CESfRRIUv z^K(c3(w|q~WEE9U`ddE>-M;@~m7cNtd4u|(LeIPfl^g#0*^fVotu@ySW z9xT5nkRawR;#iN}IgvNn?`WR* z95S&9Yc)c61CF>CPmEoJ_TvBB!%zEp9pty|P?|e2=4yN<6W4UX0-uLx)H(2{OK;j|z_@C5EJq?XJEod#=dJ|meJbG77tmks*@|}U> z$3Sukvd^jzB$7V@ccUy$hwGOF3@_l2v*^q=mjl&;6<$Jst z>%g3yP}>D?H3!_a8yw;@_|p+|iX5DI2>tjP((x}K{Vup)2U^HVCnc-;Mj&fj^J)op zb^@CA(jG<6B71zzM8-{`8fy;nZz~|-hZ`P+h zjQ-`_>a65_G{&mn#Z~+*PttXL2$XEjd_!n|A>8LLsQy=K)n0@qr_rxChTfMRJ^3;f zUUoz{3sgHm^DjcnUqCCbvA#uM;sHJpcmmC!zs1wHAxHj(SFh&#Ca_@?TD4fanw78R z?9Ev>4>yJTHizouQ z7wfwTUH)1jjb29Q?HfJ<71$4QHu5bWJ@~3k7CI`h5poJ&Ims z9j`ooG+f~)@X1_^Jb2qnq1)zw`&9w+jzK@afg59ay$FQHfy>i)=GV~OQLZp9Yt*YP zYwH7deF)jyo}b!b`Iy0b0ZbW(=Ghm%(;G?r3|^%Uoaq$KX*<%mI-eW}J#9i~Pe-Ka zC02ckNfWiv&e}e@~$&;P+f_UH#9j zcQ{a6%em+Yx64u^&fo5FC+SsQ4mQ?6G1c%vnw`mH1ClY(evF^fccGFS?)eE6IHy z2J5UDt_pn00!QPw)^r@@yw}5tzlRgggx=my@{2doaz=0pU$gE7tbYTL`vV%Ym%~=h zdS5c4X588?KLwLIOfBHk2C5tctmdG#Ou?$1h~+nx4vMcpt9BTCl>Obqi5S(gPU`QZ z{WBXliH*Mi)yeRg$^1N#*W@Gy{0_u6LX+E|zMzsd$d)r}A|q#ZKYK2~9&4ewHsk-& zV8Q)JS2fqdtj>IhTda3C7`lsltWR>ax$Jp5yI#z18(GI1;Gkxy>@j;c$iRpI>D=hN zRyUUBj#}iElDlorPgU4)qa@pwoIM6-EQ;+bn!-SobtZA^S)C@E; zc=CWv#kn>YXX1*D9NxpZ-OEpQ9<2nI(C=IZysN_QS|l;>e%`T)y)@7_$KM_fdw`D< z+*iQAet|OPv7@!X^EYJpA7F-=Z)P!>iDBiQR;I+%qug8(mX};JCs-EG?}>? zR3DnlZXT$sF`vjBdGpDv$gp2k3HEJdwGzaqs;}3RIsy$8*f3&|0z{(~dA@phY_fd&0(5t^F>-Qw#G6Gh%{lq#)Jnvy`oH?#$ z(wV()2AkP9W)B5jxx^ePKA!xHnWgv9M*IN*`Ma9+9}a@%r&%gqCH-${guMRC2`xV zF7x~B9eR?#iCI<#`%J4d%pEdE-(I73F)0N7m*#tMo@?I*tBUkt8Mijq*9s5w4a`}) z!adIL6~M|Kb#W{sSDcfbTNf8(KIDOyG~~`9az@@kYdA_@_Oa;AZIC>#qN~nCM^r!T z!zX^gPqm2CYyu~*#XT0oLstX;TwrAmq*KsW=}I!fo*|imA;pP_R-T*NXxCBW)OtF_ z+6z$U9w3k&?6%i&Hgb;aMVX5=b;k2mg)=)2?H*$F1(Uv=6s$HoFYE*VZqp~nZXouQ zvPRj?wzasj9Ctp=Rl9&r1+=fG-2EJU@OR`$1o%0R?;`iu%{uZ!o#sfHnPrVaX5QC6 zkVX!(-k`2C!J3b-_MLpc&1ss~XKyPjVbUgP+^!~Oj+u+)`J3fwMXc3M;$R3ZzsIkNcQ_OkgT|HLMQ>1n) zsLaBUjBlok~(D&|u9{~)_g3}V0 z518XEJnv?&H^D6Ph|D_?Q{-2H&S6JQGiKuK`*4y%?I}_nJtsRjzKg4FBx%K-t9H?` z>ij135>yhHU1>&rHukumPj82t2v;+pu&d3jn6K6?{Bc7nUOD>2NBZ!NOj@E5yJ+2u;^cN=K@gKlaUL2+ChNXL4& zBKLpiy)3}37P??gsBk-cY6ZH19y{fzy>_frP1{+dn^7(InUqJyu)JKO-cjhiH9C9961b&$wlZz)T=w3*NN(N@fhyL?%Rs*@+kh^ z19Y&e%XP)E52oQ6uFSlt+C+7Jr@Q-nyz;Gi-e&BLTZy{Z_Y?7jU%@UIj6FM>uIerE zkoV%$>^`##tu7~ecNP3Bc{#6~tiCONsnbL?kK<2!EUA-c;C>ykM|uJ)JB=U2+UtsK zz8=igRyc5?vFII=e?a5oTxB98TaV` z?*9Q+-sW$Ou&^FTV$UkzwGH~nzay?p+%pwh%IOx~OSyLwKC=YddK^2BK!Y`sC$JG1 zcZ!xd>?2$TuTdkcV72|yXg%tT**X6PoNjGCt2ZMR{dS z=AD%zW>S)fat(ZcE$~yD%k>C8)=orHTH`y>YyA>h+}HRaegWf-fdke^RD*i{OD;?u zvRtZ=JMb+rx>e9-6*8wjB5pmLxhTcSdf9-7KTMADPtZVP&UsAY4wEPg$K$cKLy-} zf6N4?R!of=3itT|%p43qkv?j0#&@IfmF0xxQ9bZ@)(1Adz|9q4k$IxIpyHqKTg~9y zw!q&;0KHtq^J)OI1ab5B;K4TZ-ZuQD4SU$1sDTH05gzY)_~>hdFS3^{#A2@y6+RWJ zOGf2vre-b*uOvGBD?8Yf$P|Audh$+#=!0;_m%!oI;YmC2Bt4%z?YZ!&$*l0*M7qQ_ zBEvs0ndpglZ+LVYu=xdi)~UpKvxLvGs|}p{05aHeGtKZ~tUZ%<&L+OYv_26PR+{vGj& zKFHxu5}V_h;-AHyCClzfqTJUK6Tq!F@v9l&U0FDb8MPC@l1G5)V6>xEq0gBY_$pJi zo`fb}C716-X0T<6)F2n@2c}ouVxn!{aGy|t#8a^j(PCtQ7LC`Wo9P=#AMOEU)^Rd^ zYT+TT7hZzK@Oa`FxvAgsnoIOE8+ex%XwRk><1J>NUE{KVwsvft@Sfjre>^cu##!?o?7%o3rydP}>6} z>*Hac1YCaLyzUSG3opKguC^fb6thIDM!GT`vqa<%CJDyKSS%HOCzK)abnKOA&giev z`LQp+x64>RkE6rZ1+KNi*&|IOyU0{Z6Y4`Wei5;{xnx>|$>2Op#Hl!x_8@te`HB1N z0Ed1jW;ThHR*F9bc629u=6L*TVgpm4j^8=?sqnfN;mdmN?8b2cum7t+WjEGjUO4aL zV9|6k?s7%SManZBbQ#l2TY#lcg*%7F#>>Y(j(!_$!nC$gWKO)ri7tgN{zxuUR`9!A zWDU{BkKyq1q11M07q!Vh*-AdcKqBAolDn{m=+A$VSFaF*oJ=J5SiA$4>{enBbMe^k zM>>~)=i7bn40QiES%&YR0c1qteFi=}#60l?aQ*-v=4sa1lDOP(GA*YQp(`4`O`ceF zG@TE~+d2<6<%-v3GTUY{=!&3OU1Yx3hQuhSZXFpduQDlqHoDF<{LNo**6+iS(j;~= z-Mt0pcLtg*jdnB$4|qDFkB!(zTcQVR$tW{YYbLn;mh9N~Gak!d;bOlNG0Vc<@_;V` ziDzyE*LtIC9SwDY&Nnj0a9H?hsHYA&Q@xlY`5Ic=2sm6iX6pxj#T;qCL#GKzuG zpYxQr_0QJE>yYd7es~J` z`oEJ?wt|^_J;A#>aI6V%mNw`$)zN$30+QAgEClD5qDhYix`W|XPaq3Vf!qCv5JwU# z$%*Y5e*{@lgQ@bZ$V*xWl*+)7UuOODfa71_m{xuq2sx?eGY{GUQjbd0pqFgits(rS8yGm4Gnxrhw({(2P;zc^0P3Po^oA=oAbKhG-9SD`I|LuVh@bPfqW4hX))HJ#9Zi-JA7 zu&>7R!C%JT1%j_L6LSjHExVa;7$-lZG}Q3~`Gl{*34TV;KaOse zg>$Hlw%(e1_9RyQ0vhEb{PqYm+!-Bu5L{&}kXZoq4ioRsjm#_08RvmZ79p!NFLODw zkXvE)&r!J2D6r#MD7Y@`i=ol3fKLoS8?4Dxz-(}n?PP7vU`Fu-bhMRV;c>Wjg#5$% zSlh$w;{)P;#`dJUwSAs(gWDV~V%^w6!wB_Y|q0j%r{w;q6=H5wat z0o?Hv+U`}puHz)S2_(a;E?xLKvVI|$`vv#w$sO$UYTeNq&TI&}ekm+|G8}4si?9E%lD^|DJqG`23UBTJX1zk@j=HVY zo+DVHlRx|ZKS!Dkzd4Tnd=ndDE1c*Dbi1+axFMXuzIE2xZGz+cm-DU;MPDIza}_K6 zneWS>m#y(FWK71fFG`cAR0%oM3f}V}@_imM*$%1)(73GhX@sRwf$uGO{`){;JXAaf zi7^2@oWYa-rUq#SFg2rZ1`wVM#D~KBUS!2W-IWbvH`eAhX4e&=XZ!m9hQ?@a&oH#a z2YJ4e!!J^saTA}}t@w2$U}kcc>ywEy5Y22RwB__QquW*sZUUNi`b`f%ECg3HQYuty zv(jojqZ-fZ1Vo3jUb*&k)-?l~UIdS}EB0vCHjAHT^7AO5Ye)9}oJAKXtpPM`M`S(D zhtWL0WtDxg;X8tH)qqzCveD8eGLqv}4L$7)?$}rQkJiT9w%h##-ewK`%i&E~fHjZwm8atg$VSgm4F7*gdIZyvzz` za_T=q_oMlm%Be5nFQ0*>ufmz0<5Ml*JGt;*rD6ljMs5scUHWXAU=deDe=G}J^P^qo z=jTSOb};xjmaGV~MfFA7fyr)pR-hMR?{$Hgv|XR`tO+EnL$)ekkCs)y#?75FCZtOM zcPq2ILg^!c?7QIML_AQF;qULWx}MO{bI8)>&`&VO!%mhvdGcI1%NxM0H@vbdxY-d3 zZiw`GoWBf5({KvmbYzQJFW&=wZ7V&S=24iVX+LQv*6qR*m5Q}vB zlmm7(fMQYb>^|t|K~AzA`1cH0Ivm^_4|o5G6;ES@ud&9V;At1+XdQN09=;L5zWf)> zVm^?3jm)&pobAK#q6azUX8imd*!o5CH5L2Lj3Tqb%`H9x&20gGMn~-MeuTA~{i8Qj zy}S%(+6ZXWgJ#;m+ns3e46j~5)43Xx!9v%zh}TkV25UGcfRXYb^``rwyu$1;jK^~; z&m7B%_Jz~5K;krKeT~7*hoGIoqQ*oTU&A(=lGO) zg698Tfk!Su0)GlGAIxdDWtFvoVG~x|nS8Fd(IURb?%o8nw*faj-u4AJl+3o;%g=f% zw}FMO+-%{!?88nNSK&_i;FL9iq+JT01j_~^TSfw_QE1tpv7-6#$7SH7)vj8!*1MV| zsnu8t9J1f{B5?m}bizSsHIKlxt%=FUS21+82jH6>d1rLe8r{tE?ImOViFp}T>T6jU z89xJu31atl&z6S%MiLn-uwPXs&b=Zq>;i0*)XzdU?}CFf!N2d2Jgcx9_v5kH0WTVz zNq6FZv<&z8(yF7fJF6=UWZwk{LNun04mFYpcfn5;n8dG)@w5V$D{hjXA() zz(6yg{{3$`&!w!R zU{V4*`JxxPOly8Cj1+Mih8-j9cWERx4Vi!9tn)5&!G&9+?aU^p?+Ct!Sf~c}{Xo3T zQ^K>T?Ab;I(sukN_l3{nr#gmA90g|l2_Jb1UvR<1-uNiIp=II)s5whV4Q%Oni+BgD z)R9yR+=({@vfl!ioM8IPXnLN?GBD;R&Snabm<--L$7wvk8I~a`^EcGAj4RfF*=t#C zK`^Q>zP1nJOV>*5Q0CplGze^=hIw zTKnDP=Qj$!%NgvU(su+E-?^~d?!dtsU^|*&I{>bpHn9&sz%l%h*YF0kgJ(s6`bR*Qb!Re<647 zNgSXWdl*%&p&`+X98AB$JLDi!aW z>7?*`lXZJzmRAg7=KxBWUM#?KGV^ZEtNtd!Bav`!ga*(?5zM%&aBe>!cp3MQVkD}G1 z4WoU4)xhX$(W%h^(P`1Hc)IU`3axyd6dD|^8JWnnKS#Dl&I0+%k!9@pAm?~bxOwPs zd=q&2PweMd-PkYDjM042t6nPJtKM?vC z+i*GBMN_!_yNM0)>9G;9Rn#dTr+PVatS~j?pT%>-iykIU8BH{Y6C4J+TLJ4u(DS3z z$^HbUUZpOu2kV(YEa(`~pM5;*-S8{nNAMzk85)>)K3*Rm!F+h@z46hpSAb(qeEGj% zz3qyB1kWu5wv5M5R}xRjS5SR9;`;}vn$H|wjD9-^xo0-GF^FmLld-X}>2x;ukzOHB z$A-||U_!hse#hlxjyVrS|KQS4rEqulw*bjh4Y~?PcHqsdMl^C+ICJD0>st-?ok5-I z2jKTH{Q6^v)ofxVhvN6ghs1hOH=G5(8AhsarW*qZpj!|_5y1kzD!SQGxy77qUsI^B72a5YtHYgy}u z$oqNtJWk_Ds0aU@5kAiUSE)R%2XAQ_d56mA|3<2Z-%E5y5|o1b4vF_BUhzTnShRU; zWUNdwYLgmojJA>|G$dS zj#YvB@~0yssq@Vg`j?vMq49#uF?%i+j-`oRjpmG1j{Qqqr2|~`7&ug!?h3cVU*g?v zK|hvd#1Pt09rq1TIg5_98jf--mX|$si5H=!wG7|i#aEIGJ4)}-8TjQ=;)iF5NX$g4 znKQ8zO)wSdwjciRR1%`Oz`l#&`+;6b`ebzCH6-#f{AVbCITSh-pAw5lSH<236E8(y zjgE{?iDrqt9_tf-lL;z65o^6g9oLTVj7avBN-1AO(nlVEt3OB#Y7ysKD)DH1DpDpj z`ekewzME8{7H9DdpN^MAa#hAR*@~LKSJB=dL%Zt+{2EblG6Na63$OUT_`1YID0~BW zJ{4b4ZK6C`;5?7eH{c93wI1H~MdXjjg7D{w5wR!X4;7)u8FVHnA3Gi`3Eyr;#Ay{7 zF!P9_r-W;U{|x_3hl5MNe@u9Ms2`EE+2CtE?B++!n?hMPtDMcPHa z3a>*0%L2FA6|V$kEXAum4ywLCo*yf!KUUTn^sXc5WLc0QS3-|KZ=Yg0&E|~DVB?PF zl#7Q(bBABz)rcwPf$x8VKB2YM9T`{x2=*Y#_a|IwES-R!r^~{$$o9~%__FBSX!=+R zF^S^P`_x#&*uLl!$ld_pBjdqIU5hy9yoa~w9vg!P%8RwX)MHIIKEyz%sT$aE86TFJl~(-83ilQ zq`wPwhgTN~zkx;f9{m{Vg?F;51iJPWJY|!y!k01KGaHfF1Ni;^r2orje9~#?9eMIw zaDltXPUu9W@)0;iQ#k8tJo(S!cWaL}_XhPf+3;t+!JZc;t3CEHKePju?2~xso8e7) z4m;unblqT@#0IpjGWc`4p=-Yj7aayC`wVQ|h?l!JcG@>sk#=+Ih}AwB`|@Ax^pRNf zXVBF8p_lc+Dj$bco`LLvwM3fYXzq=%ez%KA9k0V|K0lJLPgv;>JjYDG za_HI_!0esa_f1*z>+IP$$J0bI@`S38voe-A;7mApQ#{o}=pfe*NM9{7vXsper{ z)@6Thu=|ccwJY>6iEBRPOvz6ur$+RBV}XNr|~S#Wf#_h?ZNi!iY(7UZ^NR{ z)AQ^rEq2>9c)%R2ZP)!PI5Ho7{u88H5zbnie}TQ5C4C1eISxo`Gam`%LcV`VoO3Xi zYZJUL2eBZ(#YVmm@5fqy!viu7ykEfgiNMC3p3YqNHqY(Fx*L<(l@F+yr)6KvUF1L1 zBJbf}?qi1+Fecym#kHgo;f-ybtBA9u%7oOzwkhySK?eHtC??$3D{)oEZ ze`Bth0Z({?v;GRMRvUXUE!W*n=)Jtb8E?hIk;+|u!sfNxRZC7_B%i7WK0nBBozOj; zOH_lON+59tp=ag-W5QI%{>h10^<*ZV)j6y1tbB@BVx*lm>uh7^Gq}^M@CrL6&gFjA`)z>^tb53dRaTbO zJLV2CsRflu4*U?yIQP2kM;@QTZvt#hPmz+;9JQ!dC(pW`n1 zpy1*_bTrs}9IRf*6Lzpy*c^ZRiQk8oy#@cf?v0~>P>C(`XE0$YGiGWN+R$Ej6>r`g>x6}+vAv`hh4 zK7qXe0l?;0_UMdA>w+tCRg8Y4J>b=~cy-~#i$Ed8Im>_G zJMXhf>$&HEZF@QIZ@AWphh?FFhG2dz_SBR84TNSJbaULhQ)|rPzct%~WZ^)}QPpyLFGRMNIvkQ1Tcfl3b0iEUG+cvoCD(-0wPB071 z+6(IyoIhrTi;C`W~9dmftk$40EJv`ppcI;{ttOmn_~6?TPySE(e`IjbP(LVcaJ+BM`L7O8Q89lZAOWb4r4V7+}goWAC( zAS*8lTrz$E(yg_!Hp>~e=B@j(O4idC(qe>FnAW0Mr6ir)4J1qRDgb>r+p`*c?g22VNb<>c z-_OHZ?MC9|jT7y%a(dQBl;Q-;H58kKWl&Kj_M6Qv+?|hS^{w@aQSP$_*|n0G z)mAK?zT{m_L>iAr7B=D>GaPc`4}ePw-$N(bV$f0T+W;tmDLr!foF|H+!3SQ(4ZjJCgBDbbtj| zV!xtU_T?`#po+t2gHGH10N>A_Mo7te6tvYet4t`xL- z4lUA{qkZlx@wy-Ub0Uy3!@t_cIEWHu;Cc0sB5gRkHLORza|qlz3Z~>iO4kQAMdA1L zfLTHKuoJcGBYT^|9Sd*<+2N_TxpNenF3#`PR$1AVjx{fWw@yZK{hrj?jo7Y3ihY4j z_6a<9HL_wMlKWeD@Ha@ul}R3_-ki$*1@e8`d8rJ0uW3xA|aQb0TMbBbAD0Zv-(ZFd#8Jo`oKf*JAhJBYXl zrDZ*dJ*ayHG4q?8>OS^znGR=tfl`Q$pzq_eIUUYPuhJ(Xo$=OSFDEj`m*U%RfUi~S zsxnc~uE@ID#I3sFjcGQr7M2(#Gm+k$B~nj6T5yI5L<~%E(iU6L?rGN zUd~Rh!g-WH{uf3s?u)SYUE9kWn_g%<&bb#`Hg^QSv z)fTPjvrrl$SJ%SrA_F4>BDeAI774dQgMJl1>=3*r6R2fqN{_M^&_l{`w-4}lr_f)t z1ks}kc;*kF;nt!q?gyaL9?HLnm)bngd{AO}o_~r=!^LP|9pDwuaP@moMF}jT&DhD$ zQ-E7PzBcww(hJ=hY8?&M-N26c3TS45V{AjO*aB7`foJu``Ze#NAMe)cm-JcJY2UhJm)C%U7xzZcgYt$7=MF( z+P$hY`1}CRs>*pg!M;8?EHAJ(HGP}on`4g>k@z@1CD8=C`4GE$kFyKGlSA;Ka@f4j z63=Z2|7gKUOvkP^OLH>SFqv5QMq&!{@L1*G%-3>02k{;4#$)su)f~&o)2hXaS79kg zXTRd>7=mAZG92X-{6BAU`gyPfHX^5HVRyF2M=}x4rG0*d>N4Z+ z8;P5&qTg^cyizYCJ)S@Y*}E-2m3$MC4lCduS^0T3H2FPpusEEobW%I*$ok#@?=BN- zEK3ib!+46OL+=%!gCams9dbE5e=1y5IaLLzeFT{P2is}@Cvb`gYA>XQm4|2HCP zbF`a60!`XU3QmdNgyyst&E_ETJJ7yPpcDNIUfLbv68qW%rp*R+U$e3`{MG&pN~#b$ zXbZNz0v73cd<@xCg*~)m6SOZIte2bxj zUpRF;W$H`#ho?L9N$ttZBeObA!jEpE)u?5j(VcCH>-BV23Kq64*TQj6Fvs??JNNB*tI8+ z0@u)THPbW50t~t?*oWj)a^EL71v`LfHw5;(_0aY-uuG2B{F&H|eIU$#vICoaleTeI zmw|FIo?)iGU4M$h9qq`X{cjI|V$gUl?&L(eyV*}*k*H0Thoe>lGWPGVbBWzf%vjPV z&>V^}o2vs{;U2U{wZ6tsw_L{FKDmKG3inq3HWRBf*VW;4obsHD(@;OxKPOCuq5Tg| z0q@hSUc3xudD&m77@C2dL+rugbRz8)txwNReAQq15BQ{i#g}t)HgWP=$2)+7UGkh< zY)6cXXpBMc6T4yD0hZdMxA?1;w!M8^v7LQ<>Fd<4yuiv1K$Uiayv4mQaqm=~bBq(X z#(Q=XvP#7o25tL`z{{Cd_J6V;k+W_0@rrR8hoM`0dBj+|)}0wmPAxLG&h7+GS~|#k z|3F1%x~+t2toHqj@6ME24HuH{m{V_-tMxGjxH1JjSnM_@O3J#D)VQ5XrDd)y?s?c< zLE9}S-?M?Wc8-wS+BsoAuZ!>|XDMAsu1!im%l`D_rgF#Ae78qo9_~~STqwj>I!-za z%nI=&?aH91P7EDV8E)s85I;PGjPF_fvLvsX z!F}c?A#T47@opcVTMtfb2TSbGEp2B4OAg^xKTGwz9w)O>?fMd8?RUV88+_tAk%hB7 zDNHQqHYaBfnJv6FfkXB@v?p0AJ3R<3X(^wFSD%FP(%^Z{1qM4s&;03NBCuW;XMzT2 zW#=L%)7t~5EPIqj4)b+}l>``K?&wvXYyTN%4F)q`^`2zpDPovDo9jTp{vCGdG0WZl zI7aBo0l$izo1RkPn2$T?6S8}ae8OHR&XAMeI`cAx)yWy1GJchFv}#A`u>>TS9M)D?U{uJ2m)HS<QKe=c{-(~86<4Rq8VX~9hyBi!4fbA;gZac@mbE|G^C%-&p$_8Y z`Lx_!$)h9;rrJ6+)C}4K>~KF&3_M4B;ih)r(gUY-Q3^;)&Q_9R*>_5Bpnh8aw?B}6 zS-ow}fK$3yHItv;^YctCc2}Ch?`DhJm&SdnU&xQ_C}c+%C$t4~x9#AQjZZqG#rT%K zB=6~5U27?YUm(w=DyOpR<+4+fJ)`Z2W45(CM!6$ogJ)#s2|`TG$9{5pqLfF@`gZQ5 z8if=b2KUS?*Nb<8PX<0YJ$iZ$ogIHU37;cil%Lb9rFUB2qBAvP{O?RwIaHwANHPAV z*GmZ_P79TEXktp_G_2OXb5?&i!74M*6wY^px8jvoiO)f=8hN#y{iFsvqM4~}-u8J; zQopmkxb(g%UG-SnIY)f6Yg-|pV_#n7Rh&;`X;KfOXL5({ z_GJoYv|1aHg}do}Ru{{~&z`fof)o?X8rQ2WKQp&p$`iZokfhvqh4!bjl2`wqM>e45#jia?9^?Qb{Nm_Karx+A;q0^%( zmlVJ9aX(>|d`C)A7m#M8Irrsf)c(`(1SiURZ{q;2Ol`(9QOi)PGVR)yglM~qsQtl^TwXaqV{u*HWMKI4hDh;FoIZQC8-mYx>xX$_R_N`YNw2PI!vBW&J zGakb~JNN3RxAUKr6mT)AM2H1kJ($j`XIv_A6>~Lo#jdMhUIpgZ}&U#TY1hi_G zJ~7OBwpuJ|nXdGI{nzZGW?wNeD>!4%TA!M}Q#C8QUnzg&e_1#Qdz`upCwhCGvRS>= z9%$mQogc+n=Zf3;OdJtjMm+4@CzaU;Ot~3YH_}TQb|8H1eI<{xGmdgbD$K)s;{9## zPYuqqG%6u45kG{k64OZ-*^|FZ1#0v11MN5?FWLB9R_|c3BK$A|l6XS)Clf{L!9gUv9s=FG)UlX(ZHDFh_k#{pKns>10&<-JS+Fu44C{BX{En_ptxCoy6o?!A#c+JY7!Z zUM}LdT#U|oo3pPK+6twoM;9!J&US%Z!Nc4?CqL(4ZN-6;T+t4eb^tY!Ww*9#L~K&& zOLc=!SvlfdSLvY&69k$8<6Au4xS;-j<2h1PM(z_uN8ihiPO|nAtkEuWS=fJLvJ)zE z=6A@*+QQd1x?-JS^@WM-SHV|Xo%f4zmuswVKbDYDh67|k-Gx1rnO&D9zeLVux3{~w z?bQi^DyMh*;il2K{64T73h+`Yv zg|2@Po56{a8CX#P@S-`ZdNDK$_@(ELi6pcWoKY(8YFpms=gnj%E&@VPEDa-YHTg?D z&co?}YALzE*aR607rA#B=w#8B;h1&9EC(trG>bFEq*0O~Y@jT@@Y7s|) z{T*!9e874c&`HZIn#x>l^f{H!?B$&$oXB`qQI|7+gi|=dr^IRJ>IyS$q+3KZDgcf9 z*i{wa=?TeswDHT>ltVs~p;Q7%5653D|fKl&6Wx|uu9CyQ(eXBFYB@&SWP ztolK+z>0BIX`p%x2pk4xyZIjCq>Hi7vV8U$klV%@Qo#_tfoAmF&0g=~Nd;N!X7&^! zC%Ol{^KNp-ujw`PB`Ye#Qwwqe893o=;IqAGceA#cock$ki{|w7Z$S2$6Aq^E%r%^t zyzCxm+RmJ68D}~3o2+&fuq(ixTJXuoz=}LP@dWs_hdYS%uD3yG0iUw#W)7}wPSwa$ z%FPi8E?p2a^?bLXK zScuskZ-hR=%5TfLJju%Hu+KPGHw7?(011B+%bPw!0J3Yw(nvymt-Q&0@bT zL+^q0$_i%@q_U0hq5E0;zQpsPZ=lB)LsJu7@E`pO)S}R?oM;~J{lH$$ zxR@S#8|Yo;{4U|U{~hS9C!6aJ==L-evnyVe2!-b{P~&Xk6SXy3-c#&^I`BCB9V zey~>kZwITHl4!>|jZ+;+&_@ejOcOZmbH zEVV_OIOS11^Qq8>V8{EcuLd}^mt3=Md{qq%;s0g$WPhRNr7O_8NafCAptY1|l;R0J zIf2ZaUu_^T&+uW%B-L7``f=j`KL_Y!a0 z1$4?KHn83&;9`Y|i}eQkTf#fKfj=*TvtJ@b65RJZym$u~I~0%5Q%K)@p>H`|J=+Tt zkHa-jLs6B%olS{hP{&#D=rdq3B=HsJbrgQ1f9pf2u`c*olgQnhNQKwoI`U-Wl_iM6 zbpZw&IkBhNe`Zds6Q5~>H~w4T|2*E&*;GJHVZUMiW(2!5bsk&5R3=YQVbBcTmJWE2 z!n2wQyxPK@4iJTWlz58sU1tKX+E8fM&}-C6-cR(R1^NAJIMat%?cGFKo#B2F3W^|u z{{(u4;2?d0Mt)+ki@3Tx8N`>UEb2lW(|HkVh!#8y{=i;k?Zg(^;vtO5T;*Y~$<`K<(2yA^CXlDvXLX+ZT7>6GUos2iY zOW2S2#T|0V@&e1LthXtAeFG=-GMwWrYRR{Qk9l~;IOW)xsgloXQgF@Q&@!_F*~{J1n-N%#s6VfS2@89aJ{uaqY;?9 zjlZf@Yp_ z^bGIphSJTSQVZP0j+H-78NZQS_igA->q5VV_4;ND9p@)CLiL}sKw3>!|3Nm+BQ2}B zz{x26&ck!n-!nj=A-GLJIG~wP4LBit9_d}YpVJAv9QI|*#2W23?o9Q6kYow?-*NEI z-ty)XnSo_Ypd?YWYEVy8_VXwlqd$?szEF$(V9cT{gFaLVnse&FnWRU49kIcs#0IC5 z6*7hl&i|0T@?W^mD1JBV;sfaS2Y&hqI4_5`&9&6a81(hM$}Veh$LxGP$WH!41;8|N zi>qNvDg1q8b&A~qBd5d=g*igXYV>7CHK(vscH_dNH0vcH66bNAkJ=FH5Q znKSbrP;iPa1Q%PNL?t7PV(x$tU@YjDY@( z>MQ165?yj!Z=q(!JcK@+<`<$0FPFJgi1p7uM&8C{`RB=}DNbkc`ScCV zPCZT~Ut_wizCx}~N6sYcgs0apQNMmTb_;lG|Di(eV(OpE(H~MA#Wry6Z1RJ)Q71@os+!CQ{6cd5`^OQq975O+3%MD;%Ry^E8zV(8!|*bjMB zTdpSeV>mkQ5vVYnHEe?HK1!BDHZyGrwo!ttp%{5eBREBvgSOCOYr^$+F_)jnMkz>D zWo|5sN}aCo)mgHk{-G|STu>LZqHp1d@nl8~PT+DeIw=I`Z9<*g9k?T+3ct z51lfdOqh?5*<1KjEs$@HfIL}_pW1?v@dc~!DKh>G+N5Ear!^n}@M))}p4j04$opGTX#!Rt{hph4IuPcy&o(J5Qew11M7 z@E7{KR;Wir)Vh>AS=S@Z#ZWY|Xn7x?S^i+G-&4~!g5T|z`DUo)TB6D4ps7Y=Y}Y zqAT$cKc8XevEoI1?7@ua9cmfG{$0vSPlt1+AlbV?_xe7}w;96dp2wo<&L^&94>u~f z4}HBJYJGy%dxKoI#~9H_Xz(x`@CKIZo7gF@pm&EtslhziTy=8~R$v_)&q}gG7KO5Q zd$6xSBi6_`ySQHMunew&cCGlSJ>E(WD0V%z$_;$)&36&19$?gCuw*_Y|LaZkm3`jq z!Ri^s1+4UL_E(=dmASvmx{n}Z#6EpnuwYlC^*!}H%Fb1Z{pto;^K*mXEY1$o5DTJnlQR$KRUC5MGJDz6=%xGXg#>n6PJ_l>O6Se zY?rmnP_OAId}Ei98hkf**v=Tu(RvM`k{ukf_=@9CpJhazOs#|lcDoUM%GlrvG{`F6 zJB+t>8N789uP%II7VG~ZcGzO(EQZd_tZr3oh>zirr{MBM*gu|eW@5wt1V_C?9@eMK z`yBg%6;{R(HbWcFNIS!e!;z$`+4+~lWiMbAZAAjwVk5tT*VPW$nGVm18*0W_f8=Z- z+UptavJox!0IT-_R4WfB-^~hXce&b&klMZYqM2BLe?i?P%p=a|o3a`wdGZqYVJta# zze1_jXxSH$)JyQchvH!jguAxnUx&auHOH{1A1^4s}_Z_h~7h-!)=59yfkG}BwK~HK$|7dz zq*t8Q;>>C{E32(*UdUQ9jsh&xhgrWb+2gWV?N7-ev?}xj-t`mgc@vSBTCDY#(DZ8b z-W*1giwF87)E-EEP=Mz;7<=SKc;pCClm4vXJ*;^O?!TLTw-s4{pYWGnWC{LGc3z** zgP+WE=CFnZ(dnXreuq2`Mh;J+Jx8Ov#xp)~@$D0%_mKx@PeOl<3$u#NCdlSV_py6- z!VcNVT)*UVud`Z{k@=>K;W=J?(K|Dl&tUT+p;QAj)uYVzCdOypz!ctpANuablW5Jz zIzyqt=(J=TXK3l$_!`ToYhdNp=4GDEVW_+SZLk4NWH%f8 z5qE$d4e$udV%IN(i+)6F+7q?~@;D6YJ^?N3anDigox}KS0#ErRc8;~|yf>kvUd9?N zMV0MXCs&Z?U4!+Si)?(3C3ccMryEhX9-t9rvLC<1b6&;nC`vBy zPI5lxFqB;JyrI+t|_J5;8*I>^S=UMNwf;XdUCosDESoJ^Ph%spIpW%iJ z;GFxo&#h>)JoNPMP z$umpEPAdnYv-u15LQ&^MsB`;xr#0ggv++{aMr^j7$dh}gn0{5EgI!wYqEEkqmqsw! zdCYJJeocdL|7^uN+mYb_8h9aNJ%+{(&;!MopJ%2;knSyTwb*%6kp1*9i_Fd#@~u_C z6PZsrI9!~imOO1!$e-WvG^;)@M)$tX>UV=b<@1lZ{x2lI4Akhv%&YS3nT+jqIP*KG zzYAStKUphz&Ffspx{A%Uo?W&I9M&6t8HDz!$IkpdHiZ45Cqc>j?E3GcIc`Blf8pKh zu@xUjLd;7VfD}H;C(A*JMM%yN{yr87sR=iZK${N3`YuhL(YshE&#)UUBc6T-R_+w^ z!3$9LC|rCI_yv`bkKIJLmXqgu3_a0`C-uZjI7-dRYwVyeQ5{k=I02VmN-VD>7^jC) zRnZ3Jk+U@+R_1hMdlQtzBhvgufc5}!^a?;q97UJoBho(3W zb-GeHorV_s3~PRLYzJ5ZTcAWfJ3}M>(j1xk8@&3}XDLGj)Xpd~;jbO+FjqjeJK@}dMDiAf+UGFOXv99+2tC(`C&*({`O6-z zZp<^Az@um3){SV>@6oAWL3<<8_7Ja)MmM|jFi*9=Yen{&O7LUUKT3@DcIcZ{(7HYM zj)&2j-{2FYYgN$IwV}=ybgF$em#|YbW459>*xC7K*7`&Kwiny-ZurSPq%+($AHDE& zh=hxuK&0q8DhdyaXJh09*R+Od+U8?z)b$|_|O!3?KTx9*(%~4d)TJS+j zw62wm70}c6a;$~+uf)}5vHk5#Yj>p8$eLa1_rQf_dw6DT27x`-FK2%3;W2x`S79Fe z*=Nn{@wC^|U%ObXWiHnIdM4D0o!4AjbI8i`tm6D!jxSGXJ!97fk8)oRvtJZsM>x#$ zt#e%nm)gP5D!@Zf#aduO^UE@7fmH2u9q@o;S-VABrA^3j27LmY!L@xvZ%frDoygGlJ5gWLIS-_AxY1 z$Q;wgNOni|hjv)4_Wd*W#Av1~YX>m%Kg~_BRzht01N>$NhZ%!g!~Nw{C_DAw2&)h` zvWkUxMjdGPH{;mFYMU=%rDc>`XZ}%DW@v459cEM>I=92tX~y`&@6_5>( zK|6ppgboR)79pZ~inbCPV;Lhp4KLW$cntfUd?~u3wG;c9{cgBxHS@IgY%_l`KcXzp zv9r-JuF-#Uh0TsKZ^e@=Pg%|S-^9AvH%@u-j0#jZUczNc&yvC@9aJ)thFnnQ0W~ z?%u`REO%J@)7od#ycu(<%os7#IO;@fFIx4Z71PGU&OlM^?fNJ#Yd$-heZtJ#GvmtjG9T007W4F^;t@t^ z7elLq^7w=qN}h77k)_93M(sS!r}LCYIz*Xge{;R_|98)FRm^fTKhjJ}=}{Wqs|N+` z^egXGU`MI|jf~tHT@qK^+?9IlB+8PRRYs+1@=0SG@`KW5rqM3+g4no!p&`~_C#>Zs zrGG(a?=8Yh(*9q96=m)FAJEf?lv(~}#cTDLS!Mp3)h4Av`L_#Wb)GG5P(`#tE$F3n zSd)<`-F0}mvsFWDT)~LN@3uSgW>Q-O0aaqbu#;CT}Ur<^moJ_1|oC?+Siej0G_r ztvMMxO6-MYylV}D93l^xy((s|T1CAkKCN6?gQrzzq$T-D9u<$JG(TU=9&|BJwChEE ztb_LK3)-0NiDO;NT9;r{O}M@UYwUf^1JgtcG zFn-T#SeAuZwX#@+Pjby*C|C~qU5zDp16G(hA##wpZimntE3rM_#WsADXFtaGfp{|4 z;1@iOhwW+DF!q@rdHy=q^$@((DBO>mK>e=anbI&U!~3vgtr~oUIEztDanjncRyX0x zT!SsAWv;jU1Y`X#qkRbE+ZQ>-9)~aP2}U3O-U#}cDP@K3mv~=~5hJ-BZ@(*1?M(Va z)F!?yUi%$*Ca*%dIdI)SL_D+M52L*gLW>bZdf#Hk_b~T?JiRx6tIry^yIGaC0NTI7 zz3<}A4`FW(V~&IP=^3JZzp^$PxX#)N_oSEI(x-N4(OUg? zIb75R8a0Ewm*T`3XM$ogIHXqo2vF-SO=b8&xJWXO{K~c^XQ-fQ>$q zXvtLa6@KN+Wg?@0hIOjRUCl8*0}bATviA@x>Bj3)Xj>Hzv^@09!n3^{>WpPBv!O&1 z%cTi?eJ5)*42ym^vAoxy@l*Ih0~xcqOKQTCjOTYG>|4Bu7ootT#Cq<*e}0~Oy~UVk zqZzCNJ%df1#YmcB&Go}Gd4hX>&KT`fvzAKVU7XCE;=IfABTvqTLE%2|P;>P9F=Xd^ zyo*6_z~%V3jli9&4z8}fH@f4+zRak_^;TCFXJk#`_8Z|uyXSO;2US>JoJ7jPSKH!H)<+spx8MAL)1n|MGsViH4;{K<@YGyGPLv9*Gm z`as)fc-_ayuVe0)v*U?~5?M!L`7DMT=AhALFw!Z!jQ;(CZ}B^PVSLFG7juMbp^xk# z)FGtxQ;hdRPU5C=YP_Da<3mI(cF?tBHDiAV?&*iLwn0)dh;r)@KZ~4YgPl->7(@xq z*9s7EC=U|&HLUIbpwtYc={OM;>!+p3^~l?`Xr)f*L_6EsvoizU_!}y0#NV(V*)M!e zLb5-{qq7U>9C*>XQ>_Qj2K3o3V#IcLxS288G2;!!{5?8vJu!0eWH`i012wx2z>fxfoe|imSw9u}0<~^ZyL(b2r+y1?QJl7;g<|T$=woz~x3? z#`5fS?49<6GFR(H#(Fog@B4Y(f?VFt$UPTr#U0J-Ft66G#7jc{_>S>P@9*GqvA@<} zv1ogxGe(zpkAYRd|@K|)J}@r!jx z;e1{*q3bv3iV1MWSI}hwcTsO_M*^)P)xK*0XY@zQi(_dwfU!v240vNLIQA=vko^wD zm%$rD;btQkqRQ9(_#sCzH^ z)XqW=K<8WFv`cx37-k;taX8kj5Hm z6zbo@oZe!6&2%(Jy9qYYHBkCG_IM+2R>a>3w~3>t{?LcYWBnF0QxW^5@t4F_K84cL zcy}%OKI)r&9`Cdx_v+85)zQkJD4Jix)eGTb5m}bN8Pj?HPOj_Ds@Uh}1UhpvyXX_p z^g8yH#zDZiY79;1Drw7D4Huob=zyD6^2iEHs`c=ndJs?Q3D@snMafTFb6m2uZ6N z+M)7wU+8-!l<$D z9ZKO~_E%4~rXz)`c&&#ww(>O_*^I2JtGK!XUg9$D@EzLdSuBlgxT6$YT^wCq4ocTy zKkUMO^8{Qiy4(u%YmyAgdT6P(jJFq5vJYB6R;~{;Xp0`G#Hg(cIsi?L;7(w)?}nD2 znTHeMvJcs1enxj#t7wNFdp_R-XS|HPHHO!CMm-ZcuYuC*;F1|2hMKEjjI{%@Zk5a- zw8Bj8GaSukf0*v<<88>==mOol!|4z4m(fVmIA&+35Gw8|Xmy&1V(L9T`0 zS}>og>=t_Y$Kiwd(Bpl^JONED!lBrDQ(0LtD6AZ^lB5ZD>J7)~=CY?? zgmq`EtQl0b^Ny%<*^F0IP!YNQjo6(Jwa8!a!79E)P1wR{t%Ki)lv>x9&iu^f@5*Xj z4GnHVhnU@FZ1ioc($~>}qga9G;hy{9=)Tb9QY;T67KPDLYZ>{EP{iIlBHr4|?;-g7 zacte8yxh;ehEmq5Zwb9wvp%gwD1intifBYmR5mL|jl<|~ibG)LxOx57vsxYPIhD16 ze$sB*S*(sWK+8~;jrv~8_&p`|6!uZHiYNX9`Mo!5qVzOJa?Bw&4r9NiRiSpB81mjn z*k&W~h2CR@#hDT_OM7@e)G~+KIEV2BV_DYQ8b7i2)cA@u6^=~wM62P9Ojw_&_oGKG zkBOmW-EM_&uGQFSYeV%qX#2+K4G z1scc9S>ttjz8_74C zs_%RNny+R|%dykcPo5{+r)F}v3!6V;zSB~!5D7#p;xPPc^|_z7fJv zz}?2mPH@-l$jWvoxfXs{8jdeQ%l#P*I|t65hYql(iztgC^U2{>_K8I%`lFF8BQV;j z+8Cno$scDztznh8u^^+l#!QWPS>ZXjo3G}~||7$Yl zD$L7>XPIyfjYRr%Q9_PDMRT0CFfubKJP9_F(r!-nCh~uChs>e*i)-!db(nFAS!2{t zpG1Oi47AWM_LhT<)a*37z)-1DSaV&Q`}C`1}a1D$jpJW}ZB9G8Qt-UwKXlA$-v}zygf{j#)tZB|xRbD0dNl#x+ zwo=!uD{FH7{C-BYozZP#1|oWhZXgcHL4FhI#;SjPZsXyeR~V%$$eoIFS9O7!Kr|<_ zxkP31w8Cmo&rOun2#v;CR7YkH$VjUc;(F`o&Aaw=z-oW}Uh6Jh3#C1(akiRWU&Hl| z;@`)hfK?*L8J+y8w2RdsvO>fc0UB89C3vD$uTc%Qor8@F7UMbY=B3#2tdln9Q{So> zpOR~gmm8}x8%}>*d<(P6jmui$p5X85$ZCxL4F11Xfz@z-^R&Z!$q@yJw~Fv1B52f| zSiUq@Q+?&wqA06*>qdsHcC`bvc5@mdFH3erW4e;)+bPlV~u7d8Z6K zRD<{2X{=GUX0Q+^x<%mvSE@8)EyGW_M1)+QJR;>rprcAkPYu<`#(_M2)yv+?$WOux z@_=)e5_XC{iZ6SP@#;r4Wc92ji_U>6^JMEp_Y%?btjgT~f5>pif?9Hj73LzH6hwXIZP70gqN-OsBc} zJk&6*Z2sq;=+7FlUzu|S@?VxS&*j((ZO8(#LZmY1@b$Ug9_H3;S0(#Se7fz>&Xc9B ztltsF?OAJ4#%g_J0^QJ%9Hx>`%bMdX>Ppr^aXr)qtk5yu*~~pe0E)4zy3^O5DdF?TG;xN0);qwtM*w@EaxX925u*P8I(sVgjuuU>(bv&JJj z*;s?j79y{vD5F?K<c#QSlOqU*>-ljSI9MN%WCa~YWQ7PfW`A?GUpljqp5LQNM_uWeBzhz(S7i^b(g28 zV`$BKT}@5qMT~ScwUO^a%LUB45p^1OV^7`&M-C+~vot#}c_dinQ+UR=%xD^Ug*W9- zgl2Q7?P)-U(LOlBX!>K+{Uz|@ABKwyagPc};Yl)aT2O6!CGwpE-5TKSOrUnFDp`J> z!vB{sw`ac}&FsvyF;C|*K0g7jWZY|o&z9Ds~dc7Szzmn+A zC9K_Isx?b-)dF~+C$)uHSX497X`JC0@&gF3A0Ipw* zert+Wt^$?oQZrW@|2Bse>WQu7u5Vqc`#>?Y)jxb;;M{&4Ri0! ziWJA*zMU0(3cvR*q6=f_-Y|kwq%VnB&LngCdt%wkiBJs-qY|UxF}p8kK{q2@*5*v79^3cZ@TCDk3o)J}9! z`!U&v>YUPag}gU)J4n0dQ=Rb3pG6X9q4D10+~#E@@If*Nt8v#OM1>Y{GLjLTCsO!5 z-oL#~x)bN>f=mvE!X?>Lrs1zm$77p^)o876Q`Yc6ejj3X&tvnyPGT*WFXLk`bynudN{h(0U)X-%2WQ;nwQ_1JR)-95nM7Qu6bnRP5z12r> zz1SePa9VOT5vZ$zn}SKqFP#;+C^$fU&tvG1(VU}1K6BUnRjEgjxzF+oLG2&#$)}R5 z;>qp+s#%s&KlfB{Hwe(L(aWnturJmDyyqbyMmxy5OBk zu1Y>h^;cIqQhiUao#IqXeU45%hm2p&Jx|9f!3!@D8|zM`+6rj!G4b?g;om3GgipZv zRgv|(h!doU4RmD>8b#!+CmhfnBh^}yMK72BQ4erV z&H%faq7{EO9=*_i;+O+AZ2jS%Qsppbc(EISo zyM5ENS)LqG66YqE{z4}ID@5=4ArG`pDu;`7lQPsTUJub~F~abm}(7{^Qb+v(<4 zidmORUX*w<@dceZ_a%BHze#+VcraNp)f9x|DXAJn*A}oU<717fd#n&#M$PJ#^f5df zyvv%53-$*?(B~P!WTfR=YEAz@+G|3qY1$#dlfj3v*Mqb1`SD%!LAx@36_uV1IFXk|jqSUMjd_EU0qE4%q@HJl zZ?Q{>eRn<8s+TZx{I*!fc$44__VoSetsG+8+tGUu1a0HRgW9q8ga5@d(E4x12c?yY zkD{;MuS41hc&{J~ZuDR^z4k;Ix`)r{Z6wbx6B4 zUN7yc^j>M72b*KVf;-~p;!gyrR7DU2UW#SrUq-jhyOX_>1CkpO-4c}(pXJ@3S1nO0 z`Do&Xyn=~$>2dipomOuE<$WlcO+1|zoV-^He&#%FXOI=YoDQDX#h1m81eeCEq*YIw z7@wL}I=v2EY41+onbx1)mgC~{(F2X+{|kO$r?{DpvQMPmPTi9{lvg>Co9K~9&s&~* zDmORx*1V#LEAo2hw$0nhO8=4Qm2AqsTOQBhP0qdw(;YQ4erA$4i9Ul^Oi0?_eE#8d&c(Xa}yCK;z@n$k3`EK69 zy!MICc_s3m;hAl6Pv@Oa{F+xR@5aPBx~a}h&Pm>w8pUot39Ys$wj!8Mo%A)qjQAI6 z2jdsUE2oW2FOYsyTA}o^8Jp9mrx(e%Eq!^~^z;YPOT;GzqtiO4kGz?%DG_b05sTIQNy@>+;^uD^Aba!pR+ppOU?>EzhDkH^r*N zN5t#LH^(#6`=!@Te>MHVjL$QsX8f74Ipb)?l?A#L_%XdxT8H#|Guow32s+aHa#}zi zpZxu)oyqda`H32d(s?=1u}kh(=ey@_$lZ3n)A>HRzvfNLYnk^EG(D9ZM78+B)W`W% zf|BvER4)GR;2^lLM|&-gjxWJX$ndIcI3n3&Ni{pPd})1S)NnRYLdRVJ-T zybIP<=UCnR*>raOHaRTuO5W(azIk()St|F)`Pa`M$^8JD-ke(~Z+qUDMCat~bfu&d zEc?Oh@XN2k3-R01s-%xjFPEpSG-iY&K z{W!V2DgT4if0J(~`Xx5y4b02VyCknt-s0Ssb9?7z_G_DMVud=~5`T5m4- z#h~$LrtWEPHTk39RctEPrCM&3+`bbn2v4pNvaJy+!u5#{wVo; zvPJS5`c*$iFXhe2U+Dk%0CvIG^qTA*R_krULz@;$q18L1&khHV(e2=BYPxsB(JQFz z{)RKZte{OW0#Eo`xYW9g_WA4S{5Tk!X94@!BdNPnpJJs>O?}RtD{;ctg%itl`DSe9ar~Bs_^!oi+RnO5s)T;jhbj-aCtL?&grTAO%1@YGLcfxMT zDR!$j&~mM?AhzZ2q66=hbTnw3dNX+){cR`Fsdj#Hdvb5`Y_bXOuS`{E)b+8xvN+Rx z155T)>`vJ*RfL`!{!{wKHVQb^g7Pw>(ifbXsRU$0j=PVv{Xsx(J}QLUdB1> z{I~FGn&7!?k6i)nK7s=($E&kvz8SwK-i6N7ZQ{qlY?#iS-{VBD2XQN^iCD8f(6(gi z%Vf)BBRa`;N|s1w(N%OX6wYKV$J3AXTD-$M$?k~=QESJAIkuOQt-b?5R-zr&{{@8CPZcg+~+(UojrHQ)WQ4~x)M4$7{M0y63 zw@`|X_f_dFe|>yTJU3oAZF_tYdTl<>XceCXj|^weoPx)>3=8rac;R9En-X+Te~rG> z?_lI+)?nqmKpaVmUT#6EgS)5L*y`uNeNuWHKO@VmGcN z`{9Bh$#0W6ou5sP;I(*xZO{w*@KAptp7J=S+x^femvQ&9Na-u#+2v?F^s;yc-FV&3 zne!yPxLxFqErJ%av4(zzie_5&;wzho>HLk;*0y>nePl z>+!>5B*wNAJKzl6REy!^o+nddHNMj+^Ts;5(q8Y~$WogMhI}*?F?D{DDXWsA+#7ACbtzIN+tS|Sr>rF?pIp0L)p1`AB zhVLH`m#K$eJ_MQl0*`YXxg=Xysd2)BsS+e#0I`#mz%(@@hYCg z7trV#R>DpfJ&E0jc;RX1bfna*;@7D6dJt;8%DqQ%cY8;DK?FnG{y*`Je}Pu#*b7(i z-B?N{5x*;;%cHzrV-+?)uOC?7LwIiA!<(=0v|EXr)FJ+Um?y0x#$mqD7`}#+`|t#L zYfmA`Z}Zf?=#rNh!Em1c4)G_^lg#`*PSnxr!YcTk{n5Vmg&xIjaR>VURpvMZ-{cV@ zDx;z8-K_dG@MveEVV=@ByQR#)EQJ?|ehh*O?&mpo@Vpmz+EZ}B`{Akj46fUW_jw$P zzcgB?Aza=I|I&=Uq2#rVBI5KOGcsH3Rdyj4(X_9yKh3O6N0NHOPd7oi5Ah^FWqsa(A7;UIFOcKq+^n1LfMi5C z;U|a@P73*L0#y1hT4fMia2NTNHxR9Rg8RP&EkEX(>Bvx&7w*Y=7WC*7W_6hF@d)d6 z5Al;h{4|Jc+#C4Y<@ns) zedks<-W<<*jL9xz!^<(ZY;1OlF69aKf`W`2n1*`67i4OSjSfIiB*}#Cp^8j4~R93#rWwo?^;25 zn&_OJAw8iLUA+?b5TW-x?^kE;=eV25w4NrLGjA+VikINpI;?V4X5{ID-ARp5U&M-t zt5=UtTZv_li&EUtj1}_|tZlPGYA-UgfH>-E*4>O4qBzj*2M{G=6M|-NS1X=zC3o+{o#neWtUxv9YPN!1 zPRxX}tE%|}b`3IzY7ujq6Yc>&LM3yqf8qO&XahC1{aM#Bo89pL-^@wGn@W7OKr$}l zS^c5Y&3v~4#0=P8=rudPT47$4XL>^K`Rhv7#meW;nAdyE#~yv=^P0Cc0jZqCIIL~j z&N|vz$(|=x16|1d%(b;&pJGEc2i&2t>ky^^cD1aC)AlQQzQKt zJJSEy{f0x+FX4fi%xM!GSeZGP@z@m&avNHCII{l;7RNArZE<8CLK{2aBvtXR!$F|5Ow0Qw6@bMk| zW;|bHigtWm45yg6BA0DL3;xc1?2x+<+AV?~Re?Ah4QqX~ z{b#J>tr)&zPN7w0W|dfJXAX>gT95Li2)D!>1kwD}9p+`2;c|*6iKJ`4sq=8kCT0}X zX!`V>NT*#K%%CurMf~`Z@UFR5)?r@^O)rOHb~CeH=R)RK7ag^a>&=W2N7=q2cD}Mh z*G4qKYUa3$pRK(W@5!0$K_iInY{p=5c(@vxqz95}PLjAs@_ao;UWlhEXN~w0JN!75 zS`F3a!qxKcLhfyM;-#Ff%tHF*`-9<5R-09|*3F!)%i-H@p{{nvY0dj>(2E&7r6$iX z|7$;T_bcnLox9Fp=UU1;A|0FeW`5)nW?-(>8h9i?N@|B1uqywHq9txeEADJ>YwNk| z@^dpNA3*ONeBQHUv(Ue0d|Qx3pR|OhyoV&3A^0hK%`zx|f_Im)ABz)WCA_t-^^tb7 zvdmyCi^jZ|k(XuMb@^*acw8J3vC^%Q{*{&73w5@`p?~v}`B3|K!d#wd&f#2mSgT+) zJDGXop6u^u2QkadES5}u%4R0*uxHf-nds>&SqXF5YIBA8d*XZk4TVqeoIhDn`O2;- zo0!?3e2Ia)91h>h`y$X=hvq(LK9vaiX8e_fYF5b9LYMSI1DLC6wt98=+}_anXud3F zXf^z9ILGr;apqm~-K^GLW}zh76WBaIv){~KEXWBbt8AS)@>S`VPyF{?|3q}hxcRL z;~MUAh9@;u5bmo!wfR3WPN8py!;z?6<5IA zDzoj>mv+tC!*k4m$;EotA~?$k#Y1SpOw6nk`N7j~dw55k7Q`W|!`wvNX~fTV2^0<3 zJnZ$X&o;g`Fw@gK#fpVfSkGo&?cwQ%(Qd}E%?UCyE|1Y(#1pEqie~;=^(F6^8)KH0 z+1cg=oPih2Q4(Ew3*)zbsvv*K3OOr|<}oWNo!pZHJXIv;a@@&EZIM~eaSpFeHN)60 z;0<_{4*Bv3f75EQ7Pt_9H=n67f5{+w!Q4-)W3_({hSF-s7I8%jqm$%A`)s5b({9Fk z4$ct^zcFK4#$IuRb9s>~>|=cZ`kdqJs2}^DNEI=naDQ+w>+4g{Y(AVJ{%wqy?W z9($2FC}!Er!X7z9zQnbxzq8xL^9n*0G0n|2Gt;0e{7{uo#~G*C4d!%adZ!4q`}Sb+lM+ z_(bCgMUmAm+|w#^&&kcEE5rNMxu@7>a&VH7&csgJhRm;m9_IDV!kbaUh@qY#AUm8T0gPeu7gMQXPMOoYKYn6Di)^Bd84{M+ke2O;b9G)dAfr!Ej zprCo?QO~!H{ACH2jD0!Mpn4;CXfc}c7Cc)~kqR@9%G|due9?(jDh}1!U~!tme*^lV z0y$qxSc?E2(c_JUJgBY{A%8vkW*#FjOFD;9S^a#1>vCE3sMCmbt?rYZ(E>I3GE2G{ zzg-L;6-MqlK}qY0r1n8*AwGXS#%g{2!EkNt$8ZUj$wyeCT4?f?Qnwq5<{-;@9_Bxm z=T#N`+!d}!LyJ{JwhA+ke#}t)e~#KXlF2@rEp7mD5stjd#w*zyeb^I6%IJTT6V&&YtB5a ziT{Ir?O>S2cLF(?e3q2E96Z~e-?R$F&G4`4sA~Ki^*SlR zs${eNm3S}4C^Mj4J7#B%rijqT(J6LfEzCY=cIja#ybx~oUO8~~OlBb(qi8j0eEtMH zp2oTs4CPaOp$}>OU@howzdv&^?Ua$m=oFvB z4XbCiWie=JuS$__q8xXv8+E^VmOk|qV>yfNb=5MNOGVbJ4y)dhySu9Ph_g0D4^o`I zbTUfzL3Qyr&au{J2Ab&?;g{%*Ti0q->QA`AEJ(FtIpopaP~xAS4Ob(F9b*x*D$SkS zFjH||QhZ8%U6wTySwo9t8C+DFHSNMGnSr(j&7&Vx1wM@vy`0X>%(8FAeUu^bEIHMI zE3M6_z?U5#6QMTKvawrQ4C;x6znDnIGM*V@?K<(^Hr7W=!|I&Y#6_yZDejmH;SA9o zdomj}grhqdX5(e^#31AY`|C8pM!A%+TA^~1o!6>)b7<{knPS{i&;@4c+Pkw5*5nFw z!7r@VPtan2xW9`LRFJj#hdC7FXFHsVPcANlJCk*6q7u}BXT&5@Dsy;>-68D+Cs!Yb ztHtrsa$JnZJ_UN&YcY!zIKW(%z!%2aV^F3B@B9i)japv7eY>*m9r+T=MC2}Q0QI3# zW{#|AboXFw+3Q`zOcAC|lg(QJis;woaDOwD?Qf?QT@G$p#n|QJ9dJQc=x%1UNc6|x zVr$%6grnaL<#$3eF*`;1Y=AVK;Tb<8mtrMZ?UM%ewFDaRDKr1;FtR_G;VDJ|*CCF`C<4dYOoJ<4_Bl#R1}roj7GC2TW}9?a^l?CobpoW!a3~I zBEPQ<*S{L$w$AD(9QQ5sIfa(V;&a`2PA)65ikTip67s@(ipo<8?rn@5*zs^DV>kY1 zC4u-?#w_dtX?FiU?qw~2In$1?IP{KCtJWaRwa^3Q;q_B|&Uz)Si*&}4#hq*Md_9EL z{AQF!$#G{8iPN1)%%G^_vlf}CGS;XRVpLXgt8LeXQ59{)>Szo*Bjuo7moVouVg9la zIREL<>(x|deax5E77Tdbc#G(k)!`27QH(?E;B|thIOYiT#VQqRrLCp64x=1nHwq`# znBDtIB6;rTby%$<@KOTa5xG`m6|H5l+w?hqJ)oZEkaiM7C$SWA0bir8fhWqW9#f1x(eTee@BV@@yqVh z8mj>Ny45KnrB&h{?psza6=6iRxVk!X`nNlpo|`ycC-|JToGG|vC%mu|I*5)XVup1c z8@aQVw|A|N%>Kj9B>yW<>dC+PN#rN1M$T~kI#x?mYTv00-Ni?86!t?^=Ul`*MNBFQ zFZo+Vo}`a%ZJ9NOMwi{Qt&agBXCYd~Xb;zSn`o6D|?RwO#glV~w*slBX+6$b9LdZTuOj}U_XjbO@C zmEg1n(4;XMNrV&67_@YvUX(_hD?@cp617p}2T}d3K(s@qcATASty8pzw0IeRLRU4p zxL)=y72!-OSf{AG8$C7pVP&iGwyB;rFa}(Z!Mu!SNd<(g?S<< zTId?)wT!v!Z?&uPDOcPpcg>audIR|QtB3G1V*TZ?!C zZgziDTN%5s>ePxeyA_Kwr9YhEDN5@zx zP!~OJ#KTx#1L#+uksBp&UfR%B><2HIo(NVuyLA;@PS8uaz-AM+?s`wnjR3*N~RTJZJe>P0?^Rj+3Hn2ap`-6G0TtART4|NWwN~v*N6$O$mu*i=>qPB}%cJ?HZKme1N98Jb z!9DGCsLd*{qE%SU%6y$+)$GNcPu^%1KCi~mMs&vdCPolFA5x21i|ILt{TQM;TXRIL zRzJp-`&lEoUaM3}D4nICr;#D8Q9XE1S;aIIwNT_({cq3uJmu9FD#%lmSNk*@so%k0 zw!%Y^E{mhrtka7;4P`UNdRn917D_mq@~n!ryUKDoXi|pfL|Bs63?JsR5elZOlYw>W znac(=kf$%3c%JsIaR#eK^<{ke5ytEqiUeub^{D>CF6^SjX5*oB!@j+g=iA5B9%+`J{uL8;6(iq>e%-;0_Cui@_{3;^gi2{#!VZ4b;ovM@)x#NxtYcDdm44x5ReJNV?H#GSo*4<|q&$PF;dxE=wXBT3}G~_vY zdREtpRcckHJ$^lV%4DsqY}c;W4pX}2tLQXL{2cyzgTi;)nW*dRXgUC}Ex+*dJsM&xmYZrK>L7XQciB;|jQ&c*TyrF0{7NS3Bt# zpH(uIaL-QM1MSjPp0QZ3W?f+u?jyI^UD~+U{!nXqE+VF#HO=RFFNe`t>n7r=dQgmE zS7|TrX$9Fm**@rzZBUYxap#G;dRrx~HmHDhRMS{_=RPFLu{GX#@R8_DQM6yAV%Noe z@Els#b3M2JqF|N{so_4Zepg#o<2epv}G=JuH|c6)?t zjEmZ7q#M4VC~jt9bmp1e@b~S6p#Li^^$SZuOZ^yY#8ZseeM|e$^9e0|V~j>`PH*dL+mT}ZA&}Zr& zibZNvb`EpXUiE3tUX7_mE!wO#pq`w&deTa-$$#QL+6BiwP+8Uvb3}SA?lbOp>S;S& z+u3C?9I=L38qHI?F2_cg9Y#zxF;i)1{kd4W_PI4Wqo#5Hb)Oc)qz)@5qF)7m*6)q* zTRa8Ve^c(xakaaic;v;y&&%~%K%NEKF+&Q9s~h3(cq+Y;R}L~Ka*Z{mo||Y7_>OUO z{V8KUVu9!d8xhWfPWB7bC-l@+AH_3zv)uk+WjyKBL$i8V>rE}`cWngmaokz8QH+t; z)!qCCX(^?ncy1ndIte|L?P6TvHRc}peDfNLGfz8#J4!pON1cYF@#w=C(e!*!u9ka@ zCOfipo~vbSMwB|z=&3fEQTi%8%bDxXSv#s{=@X21C9xFD=`{OERC6il4(e%v@iKA0 zwdXhT{UCpdtiC8}SU#kI+ED~>@2*9i$=$_wvNl*8ZxKbrC9%hgPt=EY|M2{z9ODr? zPRq=_ybM3tSK0GjHLBGzaK><%@J zeaWLeL+*Dz#vaZvOQq7BS$jYD-B^fdBc8x+<$vj6_Lx?Zu?y`%>Fll`-byAklPA%ORc~9SS zCVIMMp@OIz>ISU}t!Xh+JP~)5SRy8>y@|1kAjr>QPKN(Ekds_8q&o};e*XX?wu!gU<(M1|4t z#qe)Ld@e+#WmCAa0iSEY?q)1xDW|r(i4cmSAa@#}E5YjM6BWYO7rkRAaoLm5$_Pmb zt}s7On?vhOoTDg8@7`U26T%AYqP?0N;DVOjX24t9{In#KsUwA6XV8O6dV z#=7Zs7K0vUzu1M{Q&xFUdZ@Y0-pdQA>luY7AI2D@Oabl?=_Wm?3*bhh+EEm;7@Tgm z0nfJ7BVuyf8O_*s3L2?pqX=HqiNP~kV_`1;g)8!Ab?~E1MmCqR@@RXwc#Qh?Q%o^EI z&z0pVQFKHu&g9G3kbbt56m3e3cy|SJjm~gK=i{zn-jbMn+V!Uyi#v6K-}Mtk;gI{Wo@*`JU&0yK zxj>F`7V?T7j6eJGyj!mIWc(~M_O7D!h~wo?j>3DHOD0~6c83T=+DpFYE~@5to<_u- zx%-u)^<76`K4BjB_N>=A7y)t|a;ztauCd(>7&BisfnAA|}L8H`aLvg3vqxC4Y>@pdBL_6=GUn)krCuvgAIk?W! z!d*bV(hFCY8q@JNaoxOk)G0$8NNoyt4SN?T{q{T1qE;3oouZ{`3{C&t6?9jN`1Kg; zrA6a!+A5w#m*;Ngw|fuIO3W;F|M4We1pB2rJ<{y??BiNh@}m5E6gufm$tTt?{KKy6 z{^suHJ}Sz*r&q=wrGm2-amn$fF)w#TZHbadcS*+LiIbM7_M<&rtQC;^q8#CTR?(GF zXBzQ!)!e;2O|#dK5iF6DA`D3Vy?^E1ks8T!-|>v`JbbC{mgD6#tyFCrBO^+#PjSEV zZ%WE>K5OlXvvdWF_(dPO_T*;1b@04I;Q1<8Xf6w(JWWU3wP_u%NY0mY%Mh^=8n%ZwYfu}^gucfXCi5BWeWSSg?mG^fVA z57+%PV;2RCOG8>kIDU@Necn5$LCjk>3Zz81TWh67eB^H8IfnYgzv)5PX-eIvr)Y+o zy2nrH?>k?4)^574g!Z6Tpc(I4-qJ|xRH~?<^!T*l{hWJ&oGCJ_>t-IKJBIW!4=S<- zJa?C#_5jiX@DmMLEi64xU2j(RpXlB8{zBO{Dd%bQq8E zT2UIcJ$r=}}uS{G|t!MX9$Ligpy~|NJM`>*2%zetWFwY?J zd)&Q@ny6Ev+(e^r>QiGouDW}W8d<%rohMftKRCe^^0xZTh^4%sU#=V(E7Hbw2UO3f zAI%x`yu@s)v)s{BL^)fpN*XG$u7viF5jyQBcOtLUE^&4Jw7;n<{LN@U#CH)FDP{g- zUW9QLy_BdYp8L7u(1YI3yT%*M&)7ngcRefO8Fo1|Pvl9N6;&#X?^a@bdeT}n>3H2{ zfbU0NT@bT|tq|yap7m~L)LQjMh9lHpCCwA%TEySPV>COyAik@!RR@_NVjY>4BFCYe zy_?;8)LL3c=28d55sngf+`wP02IXjV4`iy>Q+>&8Iv2Y+xG;DOB))4v3mXFu zeo7yQNas>yj!s5I|*vb2Y&spl(8;Lb95^dcNbdxLr` zl1|ann=lsF-7ad?i4C_v3-4iEV~D;UB)|PO>Z%44b=Xgp+y_KsDw7NH2)QCv$hrQ8 zdMz`>vU#sL<5)vA)imPI=ZLIaPqg_c8OVdE;hGaxa}SGs4+74^sUE2T#5gJh4+f8b z;#48lGyhzwF}YUHQGeeiSVO+w|EPwaoZ6ad%Qz~N0oaAe_~ZFMryc`+q6Z@lg5JTk z!3%UVJ`YaLwA77ssXiIIG&sl^#H(Pa98VRe2TLX>VG|kIQEJKTeq-JJKH{k}naOx& z(gaMc{jrNc%NoUsuVW?3@~r2HKW1%uaoqr7la^c@AigWHXM_dTu$BJ$GmqYsyy4t-~WP8s`Dj5FyUQ3WC(p0Sv+$K=^4H1i^0P^GU{j4r*FUa2p647lLAQAu`+% z{0cijJ+L%kL0Q3OQ|emE`~>!JN0D#y&$~(2OiA~#(>f> zD^>#3nOlO|!34C{Aa>^`Qq90Pdj^cldpW}vN4^7k{%-b&tC7LK@;`-R#W*?y-q^3H z-Ki#U?0R&1WwOja0qJic$S}*$`1$lPuNcIGIaC!_W_R6zK5PnBN=0yf{sGNz4oH%H zSj`r}9;7KhwJKR7IXm%p;<;o2u#WBqads^`&V}?(p8>{W7CYjtaLh#X%KwmxrKzVu z?CF{MDD_XO3;W*}Xzn;W>zC|EW01&3$mnMFhMxJmQ#-ikQYzg}!bKOLVFrSwFbTTv zg7e}?Y>S|7a0Zmro@khfNa1JDeMl@5O8y8|=`aw8vV)6}=MCu5tzhQuOuU?!owzJ{ zDEUt6Dm2xNV1W$BW*7|eQhN}99z_1$K?6==Cpw$@D)lI@?^1_TjgV~jzZK{ZQF@Dz zZ)5L-U#JI9&tH<-pK4BB{c?2s_h_X<`5oY)F^p?%tO!`MEg8dEX!|jiM{9PXOl*PC z(0Fh#4m8AW;2E7os)_`qz;!AU0~-wV%er7>%}rhb$Bm?lraimzRp`x5a9jm2tS(3T z#v$Q9f>2TxWYoE=Xo;|Ud^<3J2Ee5vNX$i7PR9nALiPIdXo11t7OZ7A(^E7eo}^x( zH8gz&-dqV)*MNyL3pAVY$lWbSUQcX}_rado%U@5E6_2|qccup`^*3rr6Lt2=3)(}M*neein`J(Z9j-&--EEZ z13nyql~4#?tAWSi$!|$?Kxg#X%k;{59%<`Ej=jr&w?LBa$)*1f&w+VEqF2?-!sm)#2(1>^2L~Z>FMC-)5HtDI9#PnW-(Q z+*JGgt3lz-&Myd-?v_+d)^j|TT{kqvli&(m%ag5tPsie$2!2dkG*n4u)ry}7V?DhN zjmKgk+2ijVnAO*CcRPjHv${R{@+0I-JfU~dT~D#1!^19)Kf<5ivL8Ln{oC?*jU4_PWNqsP8v^+%%fy0Y?rV|9KGs>VR1qCVKj z)p>p|kbEZdNvl}n*hf}>K7kH+2uWzlzOfC<(h8EluuQCeHP6Ye4dt+jnj`%+n3rCo z@14R{7v0HR)HRG}BiCA=ZXfy|kha(1nmfR_dI%2xnw@ta+O{COa|d|&Y1aK?=JYun z(HE^}T&g6V*8#X|2_v+7ULvf0>&ix zUOAE(i|?=zJIXxPom_8>u0SYXqCSZVY;U3N%*A{V<1%K)i_>FOg*j;UpJ@SYJMnBW z+#5hmk&<@6|Ksq$ou(G-x_JnI;&#&&RhB@aIp|Ta{M(*uPQimMX zPQ1jxXw5V1L)#7>GxJcS0TBR~;bL#(uf6QI_mgkO#E_Md{oo5=qwZpf)WV-Ui zfpE!v_$&|dQ$OZ-5hM1z#_WL-j9sg_B736!nXFCL-ZgIMY3E)v_ey-yW$@!H<5d7iKdyZRSi6R{%4BY~5cos|Vfzm16*Yck);%qS5+ zJY)29Gm7wdYG)5}D;lg)`S--!D3vi+y`x6VusJJVm)}JqIswP5WmM+FFXjK0$jTm` zm&Q|Cu}b}U4Git!4$Q75PxJ)A?4#p6E6T;T!>F+-vrsEAdwaCoDN7tByN%Zh|F6kf z7_~9$*6h%EP~Es(|DlFdl7nWOOqy|LA-m>wA|iyYD1v9svRQh1 zP1-khrLvYl$-5jWi4cAovL>Dv+w;UMur>U@h5zk7XRde-pB8&TtfbDNTv}qPRumcmvm&W1E7q7-Q>4ERtEO%+O6VzuIi*s> zk^Y;_ASEwgTvi-dcU7IAJ(o8(!@MvvBGeehP(8u3?~zzPA}v&d24=E1hBD%%bViDr za3{|_%t+c7a;Ck6?Uwcxt8ahD^^7@(I~Ill#t4n~MRPZ6dn2E*64s0#F^|O8GV915 z>&CJ92vk!i7*+I~$DS!>h!*EQ<|c}mVjh&ItPvVt5!TmeeJ$3l9a2<@uPTgNIWmLm zBzN)@_;2WFKcwi(ym)K-jQ3e-U!DKOT(k>mBD~s@ExFPFv@GY;w* zpua`g3`(-Px)3pjC|2&7qIY(kjIy7_KU9-i>8yS*!%ZL3_^cI^?jz>Qs<+ob6Yp(Q zpb(=i!`RfH;-y&KXXa{D#+WzG*2mtpIn2v*xfyj$M+o8?04+&4d~)o1pB)oT^Jt5cDxZJKYMgv6GjB=RenFa zBMq6)sbE@?eMzC5>vPykM3r6$TC4b zx}_}E=O*mQ^2F}W#YzTW@t5&frq$@cvX_1)Ut*uM#_Mo5{W||+@Qd?PTd?Y@V;}0v z-pt7KEh~b;dl7c(T}Vt#e1_Y($4x}L<`d1ig8x_3UqI}eMp%U7@Y=p%jS69L-OiI& zz?I#&$5p&%1)b;Jv!Tv3cxWm#`wr{%HtdM%P=6W`mrlG>4R7Tu@D=;OE1A%1860iR zi8aNUTx-vw4RE(P*yg{t;tpo6nT>Cc)XnUE>sjf2=%$IFcn!g46y0kbw9TaNj(tt9 zAVT{UduSeWQfqBsSNNRWauzyb8lPOt_XRxTZ*-hlfD6$XcC$=pmKVb(+gRlnv604O zM_5m`fqR&Xz6yz0%go*eHFGAmO9lMg4~bR{VQ$x9wXcAJmoQr`%LCkVBATTf)>jua zg4J}V+0%aJZ{h%I5w^s}F#>5-vAKGcxUwVbH4whA>*a-X^ZA@PSPjyI_qrj$Im~4# zW67g#_bROJzO2L@P_r+V)8%mC74U&wNpE3=TSAdNjNCd}bww#?Zto_mtbAXYF3PjB zpp;Sj9av_w*mFf1TZ3GAo*KtfUJr%r2`hGp_EIIJOW71np%Hx49$(`+M(#X~*W2e+ zpIqF${`h|F8K-|UJ9_{giHMrF;=5mkJ=FusG-Ic1hu-tdxeVIr5cIZEM3lI7;R+gy z6(>>*9cww}uokP}n6-RaX*dsy{{z<^5Ck~e~s^P?t z7T|@h=Cum1a}%%QcyUXKLw$t=z6k|yW$XjFx*EIDJP<@1(Mw`(Y63k!-T^y!EPn5D z5RZ4HPNwp}J-(25;r$^GW=3ejfqwqCH^uSX&w!>-i&!Dkh!e_pp74MH1{Wcvi z{sirIH)kKG=@-A3?-hv~-VqEX3R;N%6;1H_?qcSpIfW@iRI?p&(*^1lg}!U)#IZhA zlxHp`7WxS@w&(nx_`7#OO>1}ypc9NgmxPCxFuV5jh3n$7~=iK}Vj+1(@;ic4{K zclYA%#hp?d3WZXjcqzpxrMML+THK)&cXx_=@#5ShyPNO-B;QMZ_vRAWJ!j6GnK>iR z?4lb;QM!W2Q?wi2NlSk24$dEI;Z;S@`l4HofJ0uv&FrQJ^?NjD?y}JK1NHve9mOKr zSm>G6Im1t3jh95uz%IP~3tFfJyfYncj>}H@3a|4DIN_$}y(b5h9bud??$OU@jFBB0 zr}xZ(z9-<-U+GYDhOXt_@LN1wyTK`+2GaUbCBO5c^jd}AS)*WbWrH(1Hq@PYc8 z%GSKYdVh^?>Tmp}4csQ^k0tbN8Ndh%al)UC4w=U{hCtV!Ij#SWkMtjseKM! zIEZg)IwPJI@r{i^v*U3luD8tC1pa#yd_!xHdnu3?%GXsL%y!Ptx$%_GcI(jTsjWK& zzNp0R&xC}OS8M}gmJh5Sloc}b8rFR_|E~@|?d0@blYLwU?Jt!0^l-0`3VjO3`WWy&e>q<4t)7fQVx+?XACvv+D=~4C6ZHLUt&*xUL*B9cST7aiV(p1RK zKSTBJ;OI2$q@U4tUXaKQyw_i`YYg~kKHL}U$;eLs!PstGH2h{}`UZS%?w~6ZU1^XH zd+CLh)%Al9|0Sc{gC}`6G@gz>_mZ0nyQUJmb{r#)M+clc_&4Jl)8M%v`gSXvyahi< zC+sD~l52z8p5JYSL=3tk;mq$?U-jsEj4WM^936%h7{c>UP`x3#=OmIj7k=FR?mqmD z8Ck8%SYxgE>~YUK{GyeR6B~_Z^wB5_3Vj~)Z~EXg_bkMd+ro|GUUhCb$=ycq^d)*g zopQIsBX`{daN67OL{AB09sL*5nU1j^$$6MP^#m^L&sc{1%xFA~Z|KppjNT7V@MUj6qO^zKuVWG? zN0t^wx-FzfPzI3m)iY=fc=3%r6Y&Lp={n9G@bOJLRLwCCtR;emLU~B-=`Sb9usP@dlQLQlGK5o9L8NAKvK681iD5E)4vE&-+Kvh@>~|4*P-7J5A# zA(}G>Y&$DF7-Ra3vy+YyRo$6%V34mhDY7IrmfJ7b*JFsX{boEeQqk>W0-9tQa``BJ zq-OX8)w`?_zPWUac{RNpX0uKoi6vYnGV=%2GK?7G4Sv*Fcmo@83Q(q{D*x5xZY*n9 z7+G`O-3f*A^8aJZb1EY~LhSo4-Pe*Mp{n8EKMHT;qC>?xX0eKhNZjy1`a9&OA6Q%V z-UH%Kb;4P~M))*xFFxz;!4?mDM$^gbnX#T7a147m8FO8LZ)hW&ybvwY9nWisULh;s zr#Hyt30Oz<(2d)WX&0~&cH@uk10N5D*7c#YP?B%*?K#91f53xUnH8(d43?r(5@7L6 zWe?6nes3dom4OZwjg3LZujrF+kt3(^bp46OKFj^?p<~O_ljR#UZ!dOoA?Ta~Tk<*m z2UjrXO4tB-jYmk@p6CWY@n~gR2zN8g`J5hP;F`CF_7jlF@vv0}AS1f6A}KgIx>%0e>4#WpRr~LPi&k=`+0Cr>GB0)KKENmBLCDB8g(o3|9#y@R z#bRoU-6Wg@o%VI2Ex_OME2QLA^>HlE%#=r?+yYg$t13=DZq-se#fJQcbv()SFQ7XV zjSj$X@=>WSxs6U!290?$UYX zqC17IEe?`g?OB?rK(dF4x!-u@+VB z^Au}LwYM+PTb41W$~*D_*J553;Dhq;Y<(Vz zA7{ZAp-P{JeEuBQUdoOc!|C!T_RSP#y#P&dhVdwOO@1CB^i_vjrf1OAa0T8x$3BFqlz7#h6J7y(bI>Nb17{({yF7bp=|5eNU zm=#pcuDTT~7A-%Pa)Gn3)0L^I9AH`5`=HNpJ}s;RVQnd6GZXWz&O?!cV(i#TksT&1 zL*b|jh4lzj+y|}BBNeoBRh^{z+gFT65e(J1D2FUJ^HvU~ay8}mx(z)pvJ3v&>JGpl@3MKI)#7n)iTxTPmH$v93d!uB2-@y9$tqo+ly zr6IZSDSBrUpGi!NZX|Yajc`Teb7sydkI@oq=n8d;6I>_wO^6MO5@cncbwCDx$4_te zLLTmEBe8`ZxD$WT6nMTpXP<$@cjmE+jx%F$}#F2Aq z1$e3oa=JSw`Htv_>RhifT$T@teSjvXnYHjld`K~2Y4_oDIFA#@Rcx2k*i2c-#j8tK z&#BBzG1<9T4{?ds9zcs<=EPEsd#>cYUi7-yhOIQ5IO{U($TsMNs&IWJ?j`i%jC2V8 z3A>{_k+d$6@wQ-|?Xde6@x808OBAC(T&v1h)z~VR)x=U#)#M>)v>M&8555tKmi+k% z;ne|*HSEcXmC*pbJ~q zWs@m$>>6@q1)m#()E)&tEoF|&kq?KEk;-K zULzgn!bQTXT*$e#8g@%7ESKr5m~dBx<0_oXy70qfte)>#IU#U6NT}P$#Uspn75DFl zO*t9L9b*3pH&Hbveq=*-c%T}*P=IR)hhCLhs-Y70#~t>kGTU?}{+pTJX3VNUjNz`m zuy;=2-8jT~XAQRXN`7y~m#~fK{8Vi5GOU(%yO2BXFbDO=RsWOUurOxvvl0oU?8yyq zsIc%qL6M7a)d6(TR7N@#I_+fdEW-8~%+DlVQ6G@q@abuE>7I!6{1;iFsDh9#gsZ5` z>jZGLqMVtbjG|~lj48t$>$9$Hp=e_?Kp!N?EHuf_*k6P2ii||2{D2(jgoLjGr&fVi z^CJ0VODI=ab@W2iR{!S@@ZbT)5JkEdE?Be+%RV?#5iNC<7>5KJ%kH1eL;Z7pVcyfR zsnoMa9x%;wCsOeZQd4nFWiu+{`g1fyA?}=ySL8KUrF$uO>I-Hd?2u~cy!O}!O_)Uu zURA`YAUsqXtFJWURff2#uRcMM+uZ3q{3i^oQ;hcz)La1t=fSmqGFJ6zc!*@W$(R)@ zQnXsNpnB~I@>pvvJQ3whpJx5{AhmDvuDC)tZ#MbC8Mu3P?wgBo6k`nPI{Q68U$Ywr zp{J)twDx$kZuiJ6sv=p6!gZ=5h{NtucB!l<nIBl{t`L-jhU?MVW4vcjQ4F%dVbzEk#4CU#dtM%#wH*cI+rPe<~_?8dIx z!QG*Mch*6(X^eI%9?`MF@Jb73K4iA1S=&pD^%?&453J@U#8Z$)$*jN@zO##GWw-tf$6Sh7z!#bMBP^mQ9=j?hgv3}1 z?{Hs6Hw3@VK_0t!C=Y2l|DVV^eHs4{Xg?e~zApA%-UwgI@1C5Kz&$7{G(q9qsN>Kg zMmYe@Hw3vh1dSgI1N1VZ9j9w~TBIW151^y(wa;4?ueKgTK2&>uQlvmW9HK(WyI+koM29(nnZH zMcU6mmpPnN2XSH^!ste#LB2#=Hbx#VfLqtXKff{d-=OLts4JW^b=Fb$pAhE@A(cvJ ztNtYkYuTO=i6>jL@?D5`Od#WE4m8{cJ&)m8kv91kul`|tOWz`i)fGxPUNsqMZs@64 zzD`(a*#&1A-+J`OZ;Wm%-hj5)BA?^Oh)4cdO?2dNUi%&?F`U(2%;<#U{D|*dk7zbw zfrg>hea5P;U~A!neb8HIUqWig4t3fg!@h!&%I}>R@k1WQo;ixHK8O$ZFmZksElq!W!3dSh*3A;(7o&+jiV15urm~_ipQWO*=B9vf}vOi6R?}6!I2B# z*K=qWRTc@qCO+5GjD=k7C2p!2sKzMB$wYZ6^`TEy#@PXyj$(}KSmPsP)t$x%qdm2Z z@os`oH=>=VVJp^SAC_ijH5l(_*qfW7-e_#04$w}qhiX`y2{~J)#5a-+|4L45op$&g zCZWxyqm7mOy&0}JjD%8rTQ%g00_!I^V^(dGx)mrJK>cD`F|IzG`1(YA55F^}M`vi=iE-w^2XY(k`xA?4C_AMicF)&DYrbWyUqiRL zP_ZEv*e~q&_3ZUI?CQlxt7nW%_JC|@#T$heRu;WfnEfa`y%4m`gSHalcS#;Op@z`y zTl2dL+Ew~U88yNxQwOwMd{#O5La*Yndl}DPX=ZN~?s196N5UL)E zqH8FtOs6YV?>&aUBu|$?NmUTYleLsJS1-Sj@P{n+q5L%(YRlI7o%jF5#@U6O`Wu>` zMtWRDtE=WzHI>TR&y7`385!T09n}eXH-{TK!?lVdw&r}@j^7QSXE~^#T*->qd9@jJ z&Wj=+_eZrfG;tD7a?g@KXr^>&PMa$vbxr}gX#GV<29QXkq9)XW;T7+lk!WRpX zTIzbY0|_9@@?YeDYDa~qq3k`y8lz{~FSvI#9t|0>^3{|-SOIRV$v8?dqB4x8Qe=EW zO4W#?b8F7rx}p`jFt@s_RBf(TimNJHK$#+TKJXm1^5 z!>D3e2y8+|Ov7^)q`iDr<)D8#)5TsuEIA&T>+-b@u3 zxw2_1M)r7KRxl5A*AdP7gKq9vUP=(xHZB%ik|Oa z=gOYh!JM|EdycR#g|#P)7uCWm9xJa(G@DO3Xr-W-`j^R)RTiQ0ZHsYdc{fx^8O43l z+=ZnQ#aa=1xiZsKNu+8n2aPI8DHO{Lku?!|l`_X<;j6QwWUDNFRpMHlK`3b3CmW`|(A#+5l6;=28S%lIVpqearNwOmFb_HaJP~L^N ztX?fb&yy9VJVn*ps_s%2iSPnctE(DQ)o9CGr|eXnpX6;&g{{sg%0iNkQ^m2(+UuMm zG!}hd7z4`6QwEWc7(^3cGOF%W)!D+~l&4WLMJHidm8uNa9CX?fevB{&)Hxs>vrtx` zo};MS1zC#{NS%_*qy!JmPI6B;n}s7k>dh!*a^>U+e^n<{;XDaf@+Ef_V&_FPq0XnL z`7Iyp)rfpohS)hMtYh#E?gzsS~O5iue|oEx0WAG7#=!7C=#NI z-)R34p+`K7&{h~`R~YxTh(^4^ye_~oLgiBiqcTfXcc)xEWmqdJF5ixD>Yqo}Py0YM zx2ow@Zk@c2LVi}SHT9)Q%YCy@vw721hR8NnI2GEbI%jI_kd(+wolTT=U4oG(LV8wX zrG$AMi~hTWzP`oX)XPD+QmV?k!A|@Yi8u|Lv^D3}Zs8_Kn+r&qD_mPxUA3@)%0j0^ z{GLZddno!yR7=b?Cn8_pa@Jl$T>CXv@+`Dr9Y%B+`{^21)HME9513-;rLQ^pHIHai zRlF!$w;FRvL>1e3uGt?ObUb=}J=Vr=*q!yT{`z5C^+i_Cg$rc6WsgVz^=MK?Yz}6n zGhJNbQI{k3vMSln@#%5M_@9yOhu~~w9VKNqmdD;$O!WK_k+2Ws!z4C>#4nTK>1;q; ztcp>C=&M0Q@eVPHgr3RaNAwD>?sjmO66M`TPwpK=wRgI=+yY!XL=EjcZ0yQpXAGYojfFXo z^M`sTMX~Y+V@Wn9LYg6*21~aNHs(QQUz~MN@8H(hs&S3UL@o`}XFezIVJ}%1KN(4k z*4U+K$q8vm2l;ONj3x&EJ#oyhiN>ENpXFot2Tlkth)?GuYFmX!d_Q7|8H|58a~;I` zFTr^KBSw4I{hj{wRf!T0Bg$Nh-RZ@)nT}6w1K!sB)YMfpiZS2a__=E#yJXuerS_m2 zzQ^3uQzRzR+?F-GORn8$Eb8P&dn)cW8t3V>o|Kf_IOY~=Dw}!6QH4{}jd3#&_s{Ew zoCiFvJB8>c|Iz&dSx^Tr#|g4KYSZC;w6T;3abY7pe%=|Z{X;k}b9fJ#0@GNdR&Hy0 z+Yck_;U(4C->~~iK-+bkgRXLd+s`T;#*+UE36+-owcY5@DR_75aF+0gpSaK5?0BX3 z!6_x7?o7^m$&4PxK_jL4l{v^9V|FpKnHP;YMo;4cT=ZS|Bz@pR&P(F(3EYfsd+t1e z{EUNmZ0n#aCV7IMeAJDNWlcJhIgp&*^cz^`FX8kZoLLftFB60Rh3ub^ba~%JJzFU{ zwNFAjz9L7XJD)bm?=20wvt>Jrh(Nl@>m8vJp&WN?$iYnF|JW7*6q$=!3NL8IST481O!m8}d z>Ana5YYHvvqaD--?jjb}YV4Mk*fi>8e3Eaevrr){)S>YIM$U#8;my0u{S>F|4XoBu zJVlDtW<)+LVtrcUm9N72S^cW}L9texRjYB*8i38Oej-6?;qb4=gJqZudQrop`1eXDN{%AK6pX;GQ%!N^=90uA@?r@4N{_!Luf-q{AHENo_&P2k?%sD zJoRIK1nrcId5nj!l~n~G6bi-pq_czzloNTVp2me3bv0WZ=n}YZ9@ws?# zm%QBSrJ~*hx6lLXC#0NnRfOp^Md2@VC)pKO(GOR7S6w@Wey)?0Ds_Z%C(lN5uBraE z;vZ$7s|$uIOroCPK=rMCG?SK-vD(pQSUibR|v0ARXw7%Y;wgt zg{PVdN~s&-b4H`swoa!y+scC|WOQKy2_0Qs4u$To>;+}#)G7+Nn;A@nPSG`&`&avZ5YGJeKOx zA)obL#v-qeP_q)TkA?8A^GXrMt}}Ugc&Sk2p?)>0PKb6Ike6C3pm>syV}zC?6hqZu z$VZ%>*%n3;XavG`5O?bxNfn_?SP?49=dDT*A*7mUaA8oZ5=~fxs`L?JT=YAtYmiMR zyeL`2LIjkzT=hXZF{>|)@S21qEACYES`}FO5#Om&A_r6v%DkkTDnxW%)9976sPneE zcj$B=&ss(Nie;I@1W9SCvb$xOJ9@ zVySArih=075v>~v@|Q*+>_f#zgz6SWJJgv@tD<@t?H8Rmqj+k<;Sr{nY-v@C#APg^ znJQz{eNX2$`S64}8AUu*j|WLDWej9vCd%B9_ofn(tr+uD{}7>j33XJ~w05|nL8{04 zhndMoDa<3C?B%VM3={^cYh zcwuZSA4L^P>P9G^o$zzBuydsOq$>)-JMycjJFaS$9zqL63WOameD#a`{eU%BL|*$r z5BUbvJ0l<8&JCU90}*MdDLSGS%h$0pb_*>uAX;@wl^#PKv zN%1vZMY2WvQa&7^5ef-QXHDf=2un&xPCCDeXVlwL9Rt)IDizm}XF;fw;$BrjC^~tU z(O!!@eibi{qH0F@PdhqVkES)$J{5<^AEfiY z?nW9hcNC79_O5UWm8GL=iyqpg@)PP=Juk)Ux`L>v^RaN_CFQh#bwznHL`%sNA@FLq zsndn(k=4)P0q@FZqm#QZ;f0Q;IIljbI;ZGDQAhf|Kjos8N`)vsrewD~Y_d*-sHAwa zd|;Zra^1T}XKHsEHc#NvmdCo;=Y)-xC&T z6tiAfo9aWX`f24VxzeDvKB;5aj)!V`30q;ga9mbV6BxXE&kMw z6Rm|1FCU}UNB()~Y@t4Ck86#@S<)c7qOj|flPSwuUR3Qs;ZTX@sw7qIsSr4&vy_(; z#kq@O;R!KAcp^eF6>hPz=Y*KAUHYDANWt)G>I9y;i?QEy!uSfG!60Hw**P)R;gJ{} zG=-B)2QtdqaHbJ&XT=gLg9TX?ntwuKoWoXq3+H*MXq(L0axJGO)pl=*L`z=t_bJ9M zkEWk*7K1j?syL0L2-5!rn&BxjTKPD2&>yNNRsWgdjG-B)n>P5odU2ZUfb}Zxc|BfL z2V3EzROTezmii3G{ouX}x4^s52_HpIqXpUXgTZF|0ZV)l`{WZ?TEjW{b>d7`igS{> zycdVk6}X~&ssE8nnS^>Eb-Z{97iQ!h%INIO-P-XZukl^DPSr`O+LgRky|kiA|8h=S zL@vQJB&c$X%RsN8d@Chur(7uc6onNgi|`dPK^SN{Evf!lnVxAGkz#{ypw~EjeuFp> zALU*}h;{blQHf6psc$-Q&F}fW37Ut=gKdFFv1KG9OPvhViASDfAs!fLwW5qVH+KrM z63Vt!PL@1$sUo}WHkQ$0d~)i;`#H0fTvAu6V~jx=C+fy35A{9xN;rgy*XaxuhK|br z()uWCREWSj!Kq7`Y-{CGNfHW?T$!gr#S*fBPz>I~g^44Y=M{F#eqKKou_T1_Dt#gE zvFhP3bBfR$Ww|TAIuBYpD_0f{qp$*0wJnQGU3*kZoQiKsM@KRI6;V{>qbg7(yA;t< zZMRTag^umz9r>5lRYK=0QQcUVPbc~{1!t;M4hE1)iglDCp7LI_vK zM9Ea;s>uEnF0C|+vQ?FnA%s=Q1Vypb%~TN|#g>w?_e}gK>O`TFyz-Yzu$Pp7lbve{ zBO!{^mXvQOPEm%lUT#K^oja-XvU)`-DkFcskh7JUCC*coz2vAYC-t|y#wadFvNW{6 zgrzO4Ta<)Ku4=&EsLj}-`2MmR zCD}ZDL#P&tj0afPzmWn9@MbF;;1Y9{e3vb#v%jozb#)YWi+T^M8^uS)th~OHysy)O zd=;{gg-WQiw|aSLzhp#8$fwg6Z}tGPmnMAJ%MgMt6gsZnUO-cHI~7cRZ(zO%t$I{k=iReP+x{#V5Nq|=^!5XxFt=N1p2&d;1{GcMIk z*N^Cf7D!gb%UeN-KG1X~lwM2TjS!Q%Fb~y#2$|+SS31k}&v3Oh%>3&JokiKN8S7;3 zdXkk@wCgnP7t zUM`^w>9nb6vygO@BPw*PE@+-X@a9ZBySu4PzDH)uBhb3m5sB#;iNz>4C?6aye4=A` zbEc5F(k8;Ez45E6;w74)IGgCRYMhjbCd6p@loUgjXI1vPV%FMaM|fOd)XMKX1&x(I zaE1TN>VAbT$cE(0izZc!zbs>|!cQ&sc4KI+I`5`Xxhv5SAskiZR9BZzR)tsOyV7}7 zcC4%+Wf`avUwL#}8P^JatCmoFxQqKr)9AdZ+KXtfEOpF$3!N@9&a<4-l>@mCI!4hW zSMe+)FJ)=&!xyDKw~Fe;Mk;*Nb*v|}`9x!(!H5SiZDii>(bLLKl8)BdB_s6A#{azd%ibVq3p1h$NEGe&xQwAc z+^JsZ>bFvaF?Z&t9&^e9N2qG`TlQmV#wjm=FwBGil$`4domG`8_n?)s+mtJD5K75I zBgr=jE>YC`6%^OH-$Fmh&K3s50lsB{h9KTmZPa1(z$dis132Xq{H{(}Iyq+Mj`E{R zi>8Ifs=!efq=!h%8t_F*yrVjS%QCJ3U#G;rxk|lqIcO}bQDHBA&P<~?sH<7YcF_Mb z&qnSdZ|Q0{?_ba=bWI^JC!ofVGocR^x^`MFkMFe~IaOwI07 z?Tb85pTqmg?|c`QKU{g;g|LBA!{r57AB%O%%lyYPo6JOj7N9foFt(%cS0DKBTQdCy z@UsRT)tD7-L=-lw(U-k65k$^ZM5#I={o@#WF(y8dY1tM1m4XV10H2)W$!@$t*LC3i zq{i>iq91Z>1J~OCo}yxq+lU=4VO4r@{ax&UW<;J9J@^uRQkD4~Wj0;;zfP^WJ=>7Z zvZIb-_x6Cge_{bwWWNQ`$u?2B!PxKx!n@qhi7)M-t}-vy@e`_a&bocTTIk}YLHl^a zUlI-ej7s=DZc^e>yNTz8LF)U)O+{oZPxuFFiThDEyN!D2vplZ=F|--Bc7UrM;in1F z(j4LR;X_2=3i8|qd6190G=MMXp^Z&6Mt3Stzl94xC8SztEF3Znd*KJPpoeJfP&CLb zu2Y++U?(Jq;VDdnXacguPwj0&Xx|t-gXBou1k5ijeA$-DlHz2e_sE_n*hzQT8yCaX=r?wlo%)*7z#J%5pHs#pM!6wOwH;D3 zF{@q;$t#=fBm7?5(~)og1&1lhkcPa0rtsT9xVtCPt)^!_GUFXpu^<8>O_srL?XXaP zM_a2dVF%H_W$d|ftgy}9Mw2~y2+m7|7M=lDZwgmIj`fekEE{mYDB4YGqNOXrXJx-( zo%Loc+mIrid3PauX#v&7PuTUTk&MNu0Z)hp)e|}2jh%v*H7wM_Zg9d0~dd(Z*#tTqVvYsD^7lW01iHot>AVJ-tCr`vTM^CWx(lfnp5Uno4U|>VABmR( z#LR!f*WWqG%q4ukGc2Y#ER^nS?sji?hLs2 z2hRDQAuAMbE`nTb&B`h(r2#l96VcQMkh&pgI+j&g&o$3^{K(BWaM%EN@ie$81vq6) z=7jxgcoD0(71>$avxJjQA*5M4Pj%LCD{@#p6|!(HYK}fw0{-w_?wN!v0idbe^jD!bq%kRIZjoPUpim1#=q7I-I=a)7(2h zvST#YDGr^+hK0uW9I5hc_&a7b2M%k)dMpX|!|qCq%>EjVD#g7#?64PHr&z>pa>9MU zTWRQ-$u53}*EGni^B{dMVD+oQtu1xkqnK|h)_XpqQ+{t>&vtg&cy?1Jc7X*~FJ_Gj zd1i3;e2hN>+nY708ECo{`9?+34MJ;Y-lsM|MR#c3v5F zTz+=&G_E<{Q-hg&!Twmq8n>h`KoD7*n|uC*E;=7>@0rDVmq8XiA&y@b9rqjZtC%!7 z8cos4E7)d@J%ym|RP2O_%qa_)Pia__I!KYp;hxZQI-Hsxe5yFmJrOH&8e8ZZ`96o> zBlT2B?is{$kb1uZaK%aFW?gzGdZB{iHfcBytpS_(BT^wNT<|3_<0915-N?4^G=nZr zB6heuFzSk!0ME-2c;hH^kI#xM=2|YYaUb8x3H^U$MrE1n9$v5G>A)5D(W&uFxDo5_ zfqRaz(q8D;2MxL+Tpf8^5MI5Ch2_A%jp6O(jO>qa8@dy?NXzrW>IXOaIkZYeUBMb= zDxaMZiE}6dSsvcM4!55PXQXPk9nU|77vnWLk8Dg$ZkKFM^?M9~Xz`XkoE~YA4qKx( zqus@dN)@?w7G%W}M%x@7zQib+OR{j~%E+@%e9vHo^RPPA(F~`!!WYO7 zq0u$vT2GMF@p(NBqsoSqyBl5u#h$aj;(;L(VEtD^(=+TU6Pw^T`+gu-QaryKJb64k zl|8qY4wq%w2WO!3D>UC}W_J2|1ZM5C&1^* zz|(mq7jmIEqfLOk?}}`g1Md%D4OpWx2yI>?L`r)&?XL9Q zC=Vz3v4}rVWv_mJbnvg?;;`A{ZU4fo!_cu*3K^pl}cgNg&09m#(JIE zUV=9igO$&vHsh50Ms+ z7-2?sw0e~26#X{b3S0CLJ8U7Jc9G$E*bkYob8shMwMytj$ie~ORgM&{jtzY0V~ zCq&z9tdQ{bgd|o6%R^PlH<3#p(75Unb`{NZgV8H;@*H}mWVLT$x%k-Q@|&vLl!YEX z4h{W`GbcSb6eS2l-HUM7Ir#J$eByGw70l`;c1(YezJ+P`2k)syHNbw)0JRO)>Hs#= zNYL$GaitGX_9V}T`JX(2*ZF-KNhkb@f{{pK`+&7jNAVNf>mD=IT!kR~FaKB6D>GM8by<1nDa-C1uiWRa_{=03 z>vNaCQe@#1d4^zK5Nfkvk_q-^i<%omIcUwerIc@={7K>#XpY*A$m| z&U0LLwR#cDLnDmiyUaT|<9o@d)aN!1I$6Fs)v!Ef<+5{^Vv&=GP(u_Mw)nQ9nT61< zI+aLU#N|i*x#Dtf?T9jPnflNwBIZZ;DeK_{V@kwm)lXIV+3M4wm}@eqs4IRR`Tl3@ z2t{|&^DX80>lE~wz4ZYe_Ay!q%B6%Sufl^*xu5b?PGjSS;63&K^djGqFmJ_DFY`MI zYidRIV-6^omzgGmwn>p&>R+Ce5oo3#xYA=J-Cg#Ay7(Q1w{-SP3+>agV#(Q8L3Xix zcu)AOGPM;|JRp++&A5ggZ>;tqM|Qv*&}(Lb*^>sw7v-!Rt8~Ln&q^-cXE2 zu}wv%#X-V(Imem_*;z5CIB-uAY+Pm5>$Bpwhsfe|j8xukb%auHOx2t!{;TX3dHjWK zqMCJw`KbS*GPQ-`DxZ;}nyRK%O|4=S(Jt7^3s+299l?ANUQ?>#v#a_UDbpqm93JhzCC{_sP@i}f%0rm(--XZLAj=guRyK$tmruAuw6D5) z9m$iTxU2f62`Bd%JbjIeH>@(C zl%Jy*sjAQwIhQ^bXDBigggW9@jaKhGjjW=&JxBY1Y5hbm$<=6gEyc7I8CB+^<}R75 zouVD5tPDk2#660Os~$=H#*~qvD6IN%ik?~-WhSWxM7%3nE3;4DB_TPhzvfe(ecUsO zTcS9k%_^zSvFu{SXWzhU$|}-3(H@YhM$pyuTNz!VvQTAYODYoKhaSQiQ3O!(PPj*k zVXJ?mdPyoD#o-gOAZ%u+4tn?aw&KLv-O5lMoKeiuOmpt$4dI?3KwDt!7d+gyy0skzzlR$HFhq%x8r7E(~L38YyQ--6h0r zdM(L3v$ZpV z5nhV+URF0m?M-O_Ve6`krF@e@`8^V(6OtMFH}e&R7{JiVr9xo9QbD+wYArTi!97u`3?`I0rt z=TgR`vYekYW9>AZ>!n+iE2)mm!ZH>&D7qjiDr95jvHZtpOemnwMtdV_^`*U({i1Bl z=(;K!L^|OmcZk;E3Cl@ROq3GxhA`T7Z>?$~D4@Px%JNbMw7l8c(aQGH+?Cf7eOH}c zRXwSUMD1qP z&I9$l5i48LNt|7S@7UPVZy9waXsMH=JWJ}jry7bkyc%K#l5dhr7a6mcktX3P893h= zj8Z%8Dzj3CsB#X~^HJFe2N=x*I4U9ckQ6<{3F{VWjR^5Lb|Gl$WulnnSKEujrgo4b9@l~2|Hi8$G7kWxUA|)X4@3n#K#Bn zK0Fe?WDGP)hhO+Ho)l#;W;K$c_{1ZMFomTVX8_R(ws5P%dduQlmQvl8tTH77gMUv|Xy!#p|?PP5d!bLhY zeI$=URT&Q$(R*-Z-!O&>a8V-8g2L3lsqDrtm+r8oYC9u<*9hq!+QzN@I4IUQ!U|!-FQ8c` zz_*0T_?&mTGAE&5K4UIDSrg@6*5wtgg~=zBIeU_Qn~8nh17DBJ{Z|ra8cPJ?1(Bid zP)4UQVYdl+QMjA$(Ikb@F*f}74bho;_(A89SF@Wa%}Sz=K@f%)@kj&q+(G=9%ZUw) zz{gvgxVmbCPm={RiCV-j!p}j0{RF<>G52RG@YaL%K9t(hy&#RRrRQF9@Jy-@@l%z* zgX|eYgzJzeC0OlU=va5jh&8gB-z2ZFiV*~n~Tkq<_hDO@e<5kzp;p@Svxp( zJZP^+K*??4zIJvvOPqmDD#x+2I2oK6=bfF_Y3g)zesmT(ubkZAHIF1JnSofG5KWU2 zQ9lpHvmXrXBgS3hm66V@YK}LTnk&rx=1nuFmDCzZt?44Oj9F^W`_}CV)z`6_-MF7g zY_~T!<4=qSMg{XH(2kRtJM6e>lWGOEl{M)QxRhA0;}oT8_$Rl3`vVo01;HXt2DR@K z1ttDU+-N7UxA{b;Qy49I#5WQcgN>0X>+A*kh9S3E;2dz36 z$K1H=!ei*F9N2;Xp_TF(b&V;+xr)>CvN2uyT2i^10er;y;7fa0@80aO?#6wvqSHX1 z=KOE8vC`O%)OhY$YfSZ&q^i0id;1bq&tJJ!s9w(Lj&r`H7iv0 z`=|v@YN#h&A$l~v3|B<6p9J5j9DPea!0A6ZIoJsWoZe1u=dj&?9e30j#oaf6Gd_`C z(Up;H>VftiU3SSch&A8ndCEb*k$DtM>B?qvGic;C2bft+KbYmOsOZgab})Yf>-nQ+ zz46q@Y}iPz6P`wf&(oj!=cUw(XK*VzeZU4E?>x7MunXI>3l`a@>^+Xx9qtTqzNV*Q zOn4=^2G@w?^o&Tx)t>RjTDr?_^sFgHcZ?&~dE1uQQYGf6)Dq0DVbxY0DtVJ^8w9(jn zO?-=pHx`vA+yy!E57M)!Gs1pmH*uEPFGA_F9C*7P2-_95LJbH4Sh`90ct z8{L1uq2uct=vK(h8&|w*j5hzUPFj7eW7Y)kRBu`DBJXwYO7B2#KX1s&#aI?vSuGIf`TT67 zk>^4LeSd`8-ucu1-mYk04|NR14+VoMLjMJ41|I~sgl>m=gl2_K+Uw9Jzd03sZ0pW(sd-?-T2))!Vz(JJY+$yU{z?o7CIO%3+k25)U=b^etTKyRl>WG0 zv$J*6Tiw?bsF}U~pucR)H{7eWKXc5km@fWT-kQue=xu53HfNg;j1`h9+ z)1k$o?x8xttbvk&w}H`t!LjvY{eiWCXMufzoq>bFwDw5*XJo{1cLWk38C`Byarm6; zee6Bqo9mz9KjHs8=9quEe{#&ym>a&#zH0u_{)OJU*4I{fD}za=8uF5Ig@1C_*>gf= z>}odL5xXN$F4!c{C3Z~g>)0;?^8zgc^#c8Zi$W_yOG1O}E6yADCv@B?Pakutb=>OX zUE(XlT;BT2#Qf>M;eQ@;CZ?wUly9Sdt3QM9jJ4Z3ZM`r{8_~{>E8O@_Cwq}y#y%gs z9*D=9^$yI7JsSIMU}~UTAb((YV14kb(A?0DP)B>2^TcgWM$k-8R`UxuqoDVpcdRdm z|Du1LzmR{9e|k)pn4XFd{Wte4gnGl9_=?fWo1)2-ngwU67)>^z|~!Ow%= z1mgyq2GRt22hIgf1bzz~5Bw4w96B7@A1Y*j=lqHG9Eiq!V_Y^1S}U!o-rBwmzOBBM zzR#Fh)|fQ@vCQ(Mf2}X0H)!?u-nOcmudp=Eaq9iUUFQ5MOdpS&F0oktDJX%cZK)3x1R5u?{{`|IbUmELf;5) zQSW7|7n1V@)G-LPK7eZr0l|s!}|J_jRS*SRj!?QRwkcQP<18nc<=o;7a zE0`w%V~!a%(^%cCJ=S6Cvh~ioVI8r4u{v25aFUKRbDOcy?Hc-_9GNl+!wa!r;=7BS z%FY8U>D~51ySiQ6?q~0`_t}^1(%7}1oIW7Yq~)wzl&q~Qo}R`HBfi+5vzmM z&gyP`Vfm5lDXd@VY@t3eV~w}y-L#yYdXcv{!!6?8aArAuo$8Ly*@6CgO5gLujzyRD zd05P?kdF`CVVq$bktv=CRFRuTUhMKC%p|9k8*Nd`Drmh!?w&FSnvanj6X-}ko=k}w zWHBZQucCX+PWrch=ag|=`zYFRvwa79z;rxVB^&7u-3&yWM4Vn9aNfD-DT>W`*{I67 z=AoI+YHWRHO|~{#YptGE3#*d#pE=Yl4tKRQPEvi818wXN&!$7iF=w(HH*=sI4DcMgCf^EY{$^O;32u!+8gyK%4OZ|FaZRd~*>ABWzr$xx`wL_bZpSKAltV$OQUaay}avHRmG zFN=)5n)C!IZB8=dvD$U4dW^o4HQXA(U$N#sESd`DAv!_1*z}e0u~ZLlfeyLdXHcr9 z6G8@@v9Cg{{q|+sf^s9A4cHMKus3RRE=@yy#~n`%Ebtpf9&?WwGT)d9;GuF>HmjJG z&$?hvHk+B2IRU(v+vMI>CEuY)_%I!d8sTF7)#>WgcCtF3>{oUyIy8(HZGvrf*m>s+ z0GFsLbaKdGdEsfnTFwWhXM?%Z++zBfhb*G^=6~q*33S6bW-P+~UWp$kgr}iccq5%; z64Lu;Egb7}QaY)fGxlLSiId&Q=~RWs;&K0xAnf$QuTqS0CC92iWW+UVn`_K0Rx9ND z7uHYK4C_lc)-`?BS~ICRjs2a(n9F&8D77g&+-&YXXRuSixz9THu-n-K?Iw0vd$hg7 zzHeuA`a8Fr`t+PIIc*nV9o~CdbEfPFH?1;1nA5C>)@oMywB_|~whCD<&F9RdkvZ77 z1aB|LJ9mptJX6>Y1)Ni??RR!V`%P$R=u{|${XBFeRMB2+pR-e7SEr}zcYLsB)6plZ zym1m6dA1qHY6&l0u!?$zdYgDNdRuwBdmmW?tZLSIv%mR;ImYOYhomlfK=s{!oHtH) zXR@8sz8BgY+KKdt7s?!Jhb>hmG%r-i9>iWRgT*}34UmCZjMbiLq%yag)vZ<5V=EW( zH-|5^?;r13ZxUZd-#G7mYrR$7n$6x=YAi!W-6gBC2OL|H(|$Mmai~Vy}=pczD5_<#|~eJ&6dVm#BONsz346C`@?qyjk3ab-gnAZ z+_&62!&}Z<*6K&kr^%d>-f-@o;r`1ykHdDF7K#(95zH4H9;_JrCvZ1VFgPjrOYmIq z$53YG^RKESL#8X18zIr<}p$ zV1wPq39*e?&U(OIo_M?XhWO%PC++js@{jR<@=x&3@HO_e^ZkVt`U8^p5uNbB^mjYE zPw(A_OibnDIGI`@$In9A!In5;3`X6UEXTx0ft>Ee4 zi(tZF%|MYrg+QY~vp~*3-asrGcvkRn@N{UMU5}IN&+M7y*yJaSk>+HpI{L7#Zwnf+ zpg$IiY@vUs|Dpf1KZXB0UpC)%?<*^_RoQHX#aYVJJX{U!`_e9LcMP3jZPEsZ2Z{x% z1gZuq2MPyT1TF=t1{Yvm_YRfAD!uGf!~z8Q2-~=tX=0s^^k!gA8+}iFUtlT4i}@YP zWr}~Y-|?079q~@Xs{hx_Yc?>x$9q~S+|=#hY_enQexaAa?}9PG$${p9fq~B4sdQir zc17*r=3rGgypG)!KR{=L%)XXV42_n<`jr69Vio69XmI+WMFt;TA*0a z6Ur9q6IzP}SONbFoh?0EjLv2;%f%+2>?`LV5@VKF&k>c&iux$Q6I zJH+{9y0xBjUq??2r`lF-7U!=}g3!$1-N5`ngTTtzM6vZ^&&KYKU4zBhJTNKnA+Rr) zF*G7n&o1x$>#U=m`MT#nqmx_;Q!P%inD@SV{?-1& zzHZ(tXzBUp9HS5Uwj=P&1nsSy>CT0^21mmY`2u&j&x_b&v46zAiY)=>SHx=?>|#XcGj-gQ^; znR*_-+1mQSI%GZZzV&s-QcoDuBIct%w?C!7WlYDIUcSQKN9=^5)-=xX=uvXvU*mHr z<*szH*;Sa?{m_cw#lTtitsU4H_$SajI3ZYp9b7+T+T(1$^8{Hw(p6p9iEw`7gIStW z`AAM2O?`WOOW}-mF^gip^Jim6n=$^Fzq~0p&ld4M!n*AYO5CpSL#L9{8L5=P&KX)2 z{3{qIG%>g+&&k2ZZ*7iiLg*9kj=wcegrw+$ThJ>f$S-(!%UxEiq3Shs-a%!@Zfj zKOoI>`ciV{Y3Y0K%joanJLPQ(&u=%&TjQ-A#wEOU4?xsA;Z$>0*-q$}P|MJPU{@^M z5y4;}ZZLOfQ>ZaoE&iLE>+`4bp zwhmYmtY)11Us$!h54>x<2drgQb8iZ76*Cn+<=y5e<*lf-vp;J z!y!nGEy0VyB6dTkxU>Kq+8m$G?`Bn_j%Tv*z>I7DKxM@) z(DVZM)fUsY@Gm?sBh0<#H(09yGrKj@nqo~ipOCM*()h`2;5p$uatekoVAmhVr&83O z8)_P=6M7PAWWNdx2qnU!mK+QAJ$~%c;h`YKwI!Oe!BY_1s+f@uztSoEY2k1Z?)IAa z?^xZik1vDO}T?jo17S z`z2nM6rm=ea#;HVL(8!WTG>VMYo&JkxFv}gWTwg}x6uvX7J4WuX!$fibwh6dQRFI>3CPhJc!jk5X&>OnT(VBB|Ot^c&s}fo3jSC z+OM|P9?9J&ghny%PoW8%0iNJ>89@Efm9S8?w?fzH*nN)C-Yj6vwW?T~%&z#*OW`&A z3(sX?;~X_pxv2xT@pfOr%1e*cbAwvmq|_*w^q^S^)pF2{@*%nOX|Xa#dG5G%u-xLf ziQKmMWBi$o-Wc9!N$IT*|TkWtk96K~lLJU(G_0g;M@W_B~9 z@fTj=KAW}RQ+8lSG{xS|KzGzp#uVdsyd<}X5j?<~-`B{6 z-+VjggfUq0b;Gf4S30D&;GFo4`y+PVQM|9sK@z-0g~Cf}$2xNs9AhT6(qW_9%;P;i z-cEG)8*4Nr`?~?vRqyCy`Gn|6Z#o%n#4c}*74R8&lQXIN%0unrEn;KwsObrLk{DO< z(uX+*w1ngCalV<&d*?u^pFs!1qIky>6Cd7)V^<7`=VEL4(rBiQ8EH$;^L@ zKk!GVji7ASA!0X;%C&d+tSb=V8HJ2Z=mhK+_C=(1R{XBNu~YN9-(j(K!y~P#ufMiTctgx~*b;A;^G|P-F$QwB%RyWtxlxw>wr!wpO}M@zzWtSqbt^u0byWR_-B}s@ z%iBcxx)G@!3SR3+y7cCBw-8gx#R+ydd!Z{DYcprH_t0RN^W3S#$slpKFDspso#tV# zLz#WRzyF0v>KhEG3=sgcZrn8GRZZ z50ZwbB8PT3-8fU-L<)XsXS7q<#q2tEeS5h5*lq+D#^Icvg;Q8AXc)(s!TR;!RCU;V zY*w^7Tg8#BcQ~Q%Bx0D`yo`5n7Bf#|oT8>|EYV%%zFs71GmeVB_S7@xq6cvtA}G_r zQ*B42s0>_p!#TxC`Y?}!JRgGF;=1*q$4xl@XJRKUpp%FFa@xp@w|*Yc!fTuvQ(6y^ z33JS^kpxFTMM-2Fp)M^683vuh8L3=+jQ;$B7)@t-r`Ba>_9r5Gp3b5#IV&uQ#AP?K zt9(cgRkBBW%%vnwr5r!ytSPrbcnpn^AU|@No=P<80+sFJn8$GXDMq!FC|OD3!E>p} z>A)%S4ZC$IbNiLk=mPA*T|{0#2S0QGxeNKRA$~<##Srrw2RAGvzOxXivJm}Qg_G!Q z>c9Gu;r^6bwtmEFP0*LGxrd3dt>UU@=res8WZ(R})0P^iX;kS5kx(@>$_^B=opO#! zMldXzLy2jeJ7+P%-Bj?MX8f(-*^@+kTf(p9h;k+|{v)>hAMef~9`6#X8jH*-0rKlf zeDmMa2eu$*;^b~=cMx&5B}9_nxJ9_HGJf(i@1@WnDZ8#GQs58v)DqBl+raJR&$Ggl>Y|u1n2c3o1Dq z!tLtUwTUR6i8rG+^6xJyAOm=d3Sn_9;ViL|z4bG9E(5CaW9B*r3f|{iO`()8d>jAb zR^;(8cz6=A!L6XtdZ{YxKxNet;=@Up`8SMnGPP)bQh|Ar_~SNWbc=|Ncctp55;8;x zq4^?tlS0aiLk2>5<}dV6;j|Ut{fuNHyy1E)n8hq&juqI?rRkQMiANHi^U{kq2lcaq zL7zE_?ukooPG5Lx7?C3NaKG=l1ugFoox6)2q0U94$=CQCi})sS^QFvYJoUMqBK>L$ z5LIn}q-qYeMpMnE>Ued`QQf}s=ag-c3cpD~PH2_L=TO%~)gKn;xhUfZH~-}(S7;Hz9vMf({6}Uqj+poec&R(~OI<34 zs>27Win7QY5%SDKMywv92dVU54u`HKKE8$g9`ywLhdUqPQ_5!fhwK&gzf$I2G~Zju zJnH1Aj-u_MP!BApKCHMQKq-KnW=0snSH z7yrPH`Vm>SntLB1?@f8QLXH%EL?A4I=zgQHf0zc7WBQqR5_@WIdAX9BOS;%-8Zxd6Wj-(TO%M9fkdJ?bku49jjl zR`P0g&;lyuXEU=w%&2{Y6NComA^&J6vTHe49mmRig>3u|-s%xqn_swtdYtWndiThb z@sU}h&T2vnD$IR^v6`2$7v+ByBG!!%iEA;ZD)2-d)=~3QhnI5fP2p`SJ6u>Sdw48o zPUFzFeYk5Iw8U_@x)*o;366;Njkrw|H8C7loGbKYWqL!uQOs)~I-oD|TWA|i;Dy3a zPd#o`8S*dde41TznCHt#s-1AgcKBi)R9p@<4`4;#hYK!~+a<)#b3C6%t0_x9F4xHd zw-;caR%Dg>!Eu9;a+ArD7zQU!Ak(KaJYF3x|AJkrdKUG)P#+z2o|=ce83P|oWM8Q_ z?ketn3fkRgRPV??O2974%xKH7f9mm&JWwardeBT%s*Rkf!7HWMOHtfj ze}2Zjj&V2f_J+v1ZGhVrvP!=r3088)W6bOpkN4ay6W7njz1l!0VK#rqT*TMk@-v86 zEAn17)-ZQOUnz@M)jE$NYki;nsJ>g*`QJq-s-7KpkqdXApU~l=s8Ygn6vB!yMpdUG zbUR_zW`U=xFdy}BX$vL4f*)J5tJP6h*u1HcEkb#G1n(Z@ahyBsL$mxv9+;@Mk7xD& zy+QVvYGtIglrO7FgSQb`xC{HcCKy8Jkl5Sdf{$pfVbK0Ju9k?bxM^tH?^wxOtVUPl zO)sQEh>GYwaDR0q$7)up51*e72dHvEncL5p=_YtjJ$qC=qzwIpT=@x9|Bv;{L=N41 zs(lB+4Z^*!I4xWRIbx2Rjy0L@X~X$zis3cVd8%T`)#7o-1#JSvi`hhVa~i$LVf~M@ z$w1d)Z?E92K9P9;Y3}jJUFe*&7uap^oi_A*VJ^0wSp%(x=HFlx93s1*l~co=9e(dg zgT2+!9Ac#LTyy`%d)>z=?S31c&Uxw~KEpC(#hfE2Wg`~PYj+aadsjV^uyfmCBYlS@ zGYQOyl97|hsEDoo7#peyd3?jr{1c$WED$fIBi#-nhpQ8v+Jw~T4hLOkmkK$*E3-_A z9Y+|L0us41uPwg==uhsByVxmo38O3F6 zg%03H&BR*zial}^$=DH%JQ(fukz8SMc?ZUE6nWVZ9sLC|=6k+rvU`Uy`a$fl%=l)G za^I5x@@LCtE9d~@Nu)9}ACtVf|o-(U^wKxStphO-7Ff`yDB41F8I-3`!+ zm*KmfSWCT`-)ZCw>L}*$$%8!Z<6ADubtGTD zf$k}&_7j@XF?O3v?xwKf)3f_;FwSYL&ul1j2Dx$xZau^I)hlQ@+`o+PTwqVBJ75-Q zU52aX;G06s$;w|jpmPCaf-2^OgIk(=Rl-6o%KucwA)Gm3)hfIHX+(PJ>e`uy_kQB82d}yuRRvweF8L8FVKlbFM0BaJklvwrg!ld!xwfBg-9y(2&9o4*vLUljU!{!j zhRvu{Q7Rdfnk%ZxL^-|J$nD&TU3P?7+~gB)kYtxw`|VIpovoJgta@qH*r~QoU227l zEsSmTAF0TE)Z;+Wdtt++hIg_;<4jO2ijDUO`M3{>yaa9eI}d4_wfxpPZs6YPL3o=S zWYxJPihNU46JA4eblPb6buf=+yrTL>A?)5p(hBihBmWB>whlSJitC*~51ZWi3q~cY zQ91a^{f^@E3Y}9(`|6*rPH95&+5xXh!zsU7Rinb76{4l^*`*VPqYwJAi>h#UW$~)6 z?Gfwq4^&cb@13l|LS%!wpdHGqiP9+H7z?R z8J|**ap^Q+Xs2h)*;qRv5mw|ibs?eZACy=`Au}`0OS4 zW+f;fyQvWWtB8eAjL{c?8tPu7+BjJP(u6|VmyV8B^Qs>5F0Y`Sb zLQ_+{rmASP2I?BA+Dsu&tLKy(;jg#Q(cnHpsuwC`I#x8qXH`ift4&ok?-}hysIETm z+t4U`nT1d*D?=kynzi@6*D)>R_#Y3VB!o?a}`u>MWq6 z$hvl2RY5}t7TiK`cXt`w2WM~_24`^jkip$`aJK=1ySsbP00Dvr2omV7>ifKvf33T+ zfRJ=|owLujv*q2f$Z=&jPkFfFC3(3q*Z_4_zUKXxId$n9O|sRLFZmb3=GL4A^){to zz4DxLB85U67QHleD;xU>f!oxTt)3}$ehROwgnM3^O{tpu2%e!n7x@h-+`F63TrvZGE z$nS*Os}4qWWXkW0hH|IzNDrV3)ZbqT?tGmxaI)y0w9(fY_pt^70ARFp!Q;(~V$=|~@ zK3Ce)vzFK%adjTcQ~byi16})~P9)te#bcVik)6G1a!W2wF^H$Br&Kcl)DN!JsT=P# zvU370rU}v4*-vbTwYq9GlR`ZYLN~~U#FR&?$(Jt0=c(UP)4|jMrums!Se2$Te&J+q za0*X(FBt=VuBo`{9gSg6n&F}KsSi`AZIWzF%9UTOiD|-?O~vO3+dw{JY&Wrb_S3SL z-29z_XR5zXn3U25n!~A?4H0nL4L(P_rfJpktY5GL-9*(XF72#tV|CXGBU;GhiJ^(` z;zb8_Y^qaGy@EO!%~VuRrMeJfc&|DZg}h5}j-RS;NIj?OvsVwO`p7=9dd;j8cdBD7 z7Moqz<;GI?W_AvG-4P->JJ#-LdNF zROC)~Qgx0d<~-Hos4hq8XZ3api(02B)OVpA$`4n!s0u*9M9c&&QfHPKI>qTX3~ zDC#`cZq<*Nl%E7~hOxi(cb_CG#OFzRmwMIJ^DaH}3+ts7skb?{zf&^(nlpxB=DuzEBl7wY7d{*`9XlXNmBe?%8y!N=nHtEW>W&q{`5h$a30$nHi=TOgXrsHTkaH!`nth?Ufs%1e4AxGCkeG;-sbfvuu+mmu zX!RQDc+5^T&tBN9nh~j+xhAH{N0xW?h~GVAr_yf1V35`oeqj~vu)kqX6HYN1tS>E0mu7x4tPy572G1nbVe z3cqR*KUt1<_aF9QH?O(KzF$INP2^F;ts>q*d-5WG;ivtD$JU2WZOv{Kl~Q-C>1x?9 zR&|QcKh8a2HJ`YY``$F}MWfvN-6+1F#Qk9=HM@d+7i}rLvh$$B#i7HXFp=+i zWJz+nbMh23{sTHjVY3!5aKjnE`i1ja91i#bJ$B%u&fq3Kl33bU;%DRW{iow+&LO@w2OnBU z@s~L-P4X66LlB?a2nx(1wyf@iFJzw+n7_z$>V|loSn(uIp)&M-2haRVEUOXG+49_b z%M$mm%?)u7cmCPXM;_T7cwH7tGAo%D=C`I|-DW>0_&UzcHK}(IdtAT?Epyj%g_Q`& zrxAIqP28j7Gfl7!xu)sF-M7WiJOAbc0_ZuN zK-MXku8O17!_9Mskp=2T=aN?RfShds@&hZN(>Hon$|GBvX*LqB9>qO>3ip)(+!{K- ziFMrjmry01veUKDYb>|zfzWz9bUTLhCB!!OCkJ^8J}Ux`^(5=QnvBalx}W;-ztZ&o zJRk?$j+491-M<6~n}_M6YC)x8u#5n2I&~j z=RY)lpn{W851E#%-$ybn>o}zz+|f1NM&3;k~ML!lG8|hpg zSU|oslvQly)D|E|>)?l*@Oyw6Otz;M-C7~=*)im-7JPh)s7q^l)eP497A(>zD&)$M zqiRHKr5%4)W{oMyfHa22d(mAvkkKLReipLX0}WOLz4r`XHIzG_CeWWiqdZ363g6_J zYa8ORdd(Lu!VRo0bZrb@bcec9P(7imC;4x=5 zm^J0&{JQY{F*gQq8!a*dIZf>gV8&w&^vyx|PBTz5U{B8ya~VL~s4@E(jD8El@(04f z@ra5XfZzJCyH-$g8yuL9eGEo-E#zFs!=pXe;Zi7cA1O#_=0(4iMAs!I-*$)9?jXm9H3!o*T*&YEt_eK)rS_xy4p!tzGB~-Gw!8FdlYJ zJ@z5cMzP#_P$qWTf}-rgExUjgyTiF&W@iW4?PB5%y3yZ6*9SovVZ8t4N>pPa0e>Jb zlUUOtPW&jV-wq#)L2f%?3xt)Zn@=t*t)?|;s(|o+rHia=rsPG=6*lh)uxNl zsLRl|i+Hl;V2>lhG8+Dq723?#7U;U4)6hICP33(E{S$NAnoM7h8%bT_SMAUM!;zaA zXn?sy=2o+=)vRkIs})N6AFf@h$!j&kxjJ&05w9VU>m3WhMYcN2 zT7g|!=&o)xe=lc!>gQHR?jdf1LU@yhBcI?rbbP?~uUrpElN^Jwf|{(HpPQ^ADiw)o z_C{(OyB4Ss|8K(g)u62=&<*AP<9XdO`Z?u03pY}eC(fXCqlrn@LpC+jqA;JJDd~zY z6lVR6_`VAJ7p72o=v{)HJ;Dyi=e~^x6oD*XV@JE7Gt@UuX^%K&c)2~8-F$_8k@hOjm? z-$R)dMJ1wn!WAedOiWp1MW0UaozC+j6clody!TjSXU(P2j5*<}XN8LC;iICQm?p=? zPD0j9wQqPv!Wy`ScXkb`i!UCs+bF1}%!WKu;brK2M+Gk_;R06WgU|fe;fkD@wQul8#60TA9socKwQX%dgU`LqFanJQC%=vq9C8E=`5| zu9;?4}<1 zq??dt1nF*}$cOGo!tK+YQBj6Sz7t<5Vxk+4<_~@2JKZ=H75K;T{o-@f16yTPG$Iea+4ix9avLqyZrs>C_cb74C!1FV-UH z^b~8-O;cD@x@iiLOY>IV@||v^sufV&L9;%Dg|6sL7C0pnT$`Ey=jDHrFx@VN%@sS9 zEOs)7PU0JMlMYg5PnaUFI9c72zPMZ|&J;qL5TrEqPxl?&r4=(uz`2OebidQ>N(f&< zUU>!m!;s&boP2D2O>|OhOt+Jde4g;-Q}8ZfSt$msS%0y!+7;0ke!t=cilC`pMz`$P zTTE&sO;|j_;L$#0jdbp@Q`vMo6&{%;IcjRWw1OfhTD873{U(IZj-Aqyo~P>bG)Z0m z3KdFnquuGIE>tWbDd|3}y-LP~^AI~1M<*fNCXY)!MFWKrrrWCS)I#FY9a8U##lMnl zenU2XK@s7~eZj&#;Z?%q59egl6J=J$!(vB5Cw<5Bb$@)xo`gMh!F|7EE*!r64mXPe z;uxK(4NnQJGKhD}iUjk&Puwdtu|W7wis$HN8qMpF9;)5aVObJ@cnp##yC229WIaC4 zO72yqs8R3(>(%2Mj}%~UV{B!w8Q@vX1_;C!*CiWy5yXq;(C|6$Z-Z`C ztfUNHnIc&ExgQ7PJ86EIPB(@c5evi(JzKXbMI=-;5DAq&6I~NpoA9k}L37y^Aui>E z3Wf3Ye)5|TXl3DLq{s71NoFmI?)zkT>ksjEgQ#HJ&*ur_R2WM7Tah$>etwO8YM#<} zcwDiEH{?+hBbh=5OUaj)clmg_BBGjAa1Xgo#V((6k^$}xZga*NS&!%xfd09P-zpqB zgRZUKP$LwS%X{qb96w0{0?&Q+RvmiH0fQt1yBLOqb!BC*vA#+1s(oag_S2+R*wtxxNdmU)VVH!3I7E-fmjZ>bGOpuj1DZ z!)G20%J&TrIhglO7hqCjtFz9Rg&w?oz8OwJ>Jr!En-Ak=m&QDSXBJ65Fu=^o4Y(xU z-Z$fovk)2|=FV3WZl5evXQK}KU?aWROUcEK2QButGX}3K534E+9+0ZJQh{76e9-vD zVl#*DZ|93IBfSWTe9P=VsYXs?)WbXOK^4%S&Q;$G^A*)9H|bgJV3eZn&ociGMMd|9*~zh%qOg-nXiGFg%0D2zWCfViqOpZ-FKA8Mh5N;wS0S= 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

>;MsRf@Q;bKtN_{UM&L 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

uB?)+R`dFaYARj*wGdQ1Q|b=32+HXHlKV4dZ7 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 literal 0 HcmV?d00001 diff --git a/samples/ja-long.wav b/samples/ja-long.wav new file mode 100644 index 0000000000000000000000000000000000000000..5b2a89f50e7ad95343b44c43878847025d399044 GIT binary patch literal 902444 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�lF$6Pju#udDXR941UeH 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 z%0D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 z%0A7$%`p!Yzv@_7HW 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

lvc8clq90)Z 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 Icg~&tKh|-K@c;k- literal 0 HcmV?d00001 diff --git a/samples/ru-short.wav b/samples/ru-short.wav new file mode 100644 index 0000000000000000000000000000000000000000..3f68ca606a389d31ff11f3c4ff9efc0361da10bb GIT binary patch literal 351404 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 d$-T2fPYrbafu}!D0H^3hxsN&mV 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�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�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 >X|Y3VmZg5%ZK*!}Jj-MA2{HWZey}gmo7QR1B>2 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 literal 0 HcmV?d00001 diff --git a/samples/uk-long.wav b/samples/uk-long.wav new file mode 100644 index 0000000000000000000000000000000000000000..5f34dcb780d1cc255f2a7cc933456628054c9148 GIT binary patch literal 925484 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%0DYwd@e z-n2k7IqM(Hww2c|z;Lifs{I5nOiE|Ed)wmjaQ$TNm~Bd*=RY|13#rTqTtcJp@NFu5UHm0 zjE2z=G=6O`#|`s>AIbA5*FB2zNaWV;ffocbyA06c*F>w$2{&fNPM@FO%c0u~yP5MB z?_|-e{3`;fw_GkxKA7CQn_bUh-DaXEcw$elebj?3iOOM`tSb9Ut%8oU`L7y|cgOdAX0~T6T6oHV#$lc+Y_? zupjYxf!tjEWY|g8<2yTcX6idDSa&4ioY3nayf%JB_8v|B_Njd=9AcMWNIao_J2UbL z`g2jo?ETk<26PNv?E!msVhcNyvb~oC7d*Kvxr`m!{jt#jeKsmuFaA{OVioO+{bc_6 zL|#B`Y!Lfnk4gFA&i1m;b{3_XT7M^Z)Ve%1+Trw~Q0B};fS|Mk)rr8BLW6}q8*f*= zai@9S!Le&~_cdl2SzYwE@Afyt50Y$_ySE5v*u&9`$CJt%T$l7qcT`}LL2yNQeLE?0Wu=)uY0V*gR~XlHwuME0dq+;H_w-H;2xP zbe$W%JQ2A2ZWKv*A^c~Nye(u$?Z>0N_SSlB-Y>GRH~C@t>`{Ar^zF&e->$fH^rD@WW&I&B_wcPQ}5$QDcd4G6<&Lr~u zXoeW3_DWv*N;)qIhThh?KlsvR@2B;RBk#z)E>iQ&Ky0UE@87%-%;W|a_p%3OltNnOV`dlBT~i6+D+FRPv^&iU7zypGb>^s|16z%sQSjm z3#l6i^@Oq z-5O2stT_J6PK$OGr^asvuD%!BsEIWN2~86n*1Gl0A%2bFz;46nw8@?n47aFsZE?!-0PD`pI0%YY4iR2G=mO{E6b9p+u?}_U4BY9^Etesoo zeI~Mu0^SL9R68ocpPcZ`B%!c?2Q@uKvI=+i8iuzsQD?1T+d!~nk@*2Qm+~!%r{i}) zr=M|JAzHI-k7)I`7k6JTz8lpP@%`ZT`*^ufSXyoVoLlMj`Fmqm8X6OUp^CQa|DJ z-?C7sL{4E2cT!pZksG^@9sr)~Wc;78CVLMVk7@tV1v%G0t@ZA!*M(o;2iZTLu2`!b zuLoX_&;7yT;a$JR9hnXBh4lK}mR_Gv<){DW(@D8^hr2c_Xh^qxkBmRqZ_8eEFyxuQ zbU|`>pP3aYF6xF|`=F$;YoaNfY}=`QbmXZVr-NFGU~c=OXDkhl)hhW%D{Wx3?TjF} zYssUsUJawB?%TV~xZU(7+pEhyNk*E)+ICN44~$55Y~+F9eqVTOwET0s9nWkzUQz(i|?qo%PdBH%4Z>X!Z** zen3BDZKl24<#`W33)sjTd*9 z!tO89);<}i7Noe8*>CG&1-)ZgiDVtxkJG-K>Cvf8Kxq7LO*cdd-ol=A$9)VUgf>;ZEjgcRw`U zxBWxpn=f*NF;84u$M%wh_R-Y>v;@5EQ`6ViUP7hd7+I`MY8|NGFPp#vbOepPWq;Q^ z8~w56h*W)|)j$&7S$W3qjS!UbOG9#OnJ~GP=q6BGYo7bL|IKxtR2941&`qWy^PHAQ*UYG9;8HadN_-`In z=Txx{9VMluyh8h(wJ1q|_^V@}ou>fPj!oFz#+=!^cDCS-;Qr;Dwdeo7NW1w#q_9y1 z+0simoN`6tP=H335*K`pzuE(2!-qudPF^{$&%pQ2&p~aR z>@1n~;8y2xdS;Il0zA++-*M)SDZ*rp56&n>=Lp;r8^{ve9?Sow{Jxm~FXkF$?uie5 zI6Uf3aiX-wWcor-9sOt4M91>p6fNb4a0)eMbfo^QHmG}M@k8bhbPjgs7|wihy4yE2 z=nuIY>%;DJ27#SQyDug?-Pv_Z{%8XVp<4TM`3X?45cILOsG49j#8}APkp;WCqQU3$ z{oE^GbEigzdq3rHxMPtL-1b)HTAj%{FF_MX!ELdK zx8?h}Z`0&!J2~JVpWM-dW@wL;BHLLVDA4()<`iBTI*pX_DdP3o$WlbRaUvr$sCAri z74+zwn#L*}Q?GTXUf@HcK(#JiBqM`8DHNl^oz6h4Ve!o8!`6G77kywHy`JNtmGyX;8o zPYyXr1nYnjN>pxRWd5lTR2N1g>K$t{-5(!W??Erw>4}v_KhQ#?OcHKQ#MB>&_|nc& zel1$WR~q4M#M}{;v5}YUxY3z~bVFQwRro_1*hw^*wp(o_Ur`$1IV~95FcEHNS=KYF z4fbfyCv5|Ib`xwt}w~$#0_s{+fkkBh7d976;!chNcx?$d_%@R=6{1 zcjwD8iWpgP{$gfV)q~BrBm3R?UbT#!dB;kre@03h3m>I}_`#Qc^o*VCwc7~Fk=7-tG?cD%K7k#M`3n&=uW3HPE%|CwemcincTyp` z(2BY*v@=6ce;y4XpW?O7gK5p?9(xY~fBJSpeJ9H;rh$n*ljXJM&8B)#UQ{&2e|9En z`cJaRb(FeVDyAf(wG-M|-SvyDAQf!~XjAgi zEGGLj-m~-gERXm!fcE=?GA0&p+H;gXxkP< zuP3!}jQDP%$!coth1pLc?G@LP2XkJ`vT2LrbI}8REg#QZBX6VJ9i4e3l+xccQmQwU zglbW=CqaCqZ-bStG>9G8CoP_O47#8<%{!gtFdf0>)AWfAsR}f2iFQOWYot&{;=X+8+r`ZjG*dB~n2q z>Nh}Lt6AM>i%w0QlU#|sdS@d>S3${_Yhm-_Gm~ZJqOMumYrbQpK^sF~)y(^>{i_`m zJFp3CA-?;f&Ui~w!#eOc)z0ze`bSVegxzT0teVGyqgi3~AAK+3*678TBNgmp=MC0A z%$qdh1GKT}Y`KKeXkBS(zhgC0o4LIwxDAGCXT3(}sIwNe7uApUj`I>IUfC;`N&cGI z1n-d$T3N{`3?u|RE23#X?nvoKLg%2>R(en8Gm!!PE+j!zg%)gOTion}=!V9!;I&#L zqO&J!ttYB#%lGPQ<4P2m z7B6mUq)LDjjB?b?w^AyQsH)W$l3it6ocz$gfo*M@yH_9N$q( zG4XZ%W_@S>J6=^z!lQH{*HaUoFOQ7M?zoQXY8{1Z3~o>?w zVU73gsbNF-73pX}BlHnTlQL3LIu6CiOJQq`tTQOu3KGZR4;qR7_;h26BfH@2IKog` zY1-yIUVE;b(QqGn&@&!GOUJh*Rw_ggjU^gGiML&=v28A}jSp#5Ro~iw+F&jjiS%t> zC7QH9jfCipsMeqgN|a*cW}q!Tpv8s8JNk%?qJkOhe!YWcI|TE*J^~V}tm%DInzW|l zWM#1Um+M0b@>EaJh+=vt$maCQOte`(@V!3dqjgpbL`k>~$Bq(IHU?X{_^nzF&-PPE zP$K!PY>E~6E3}tV-Z`7OgYJ&R!m$00Ll0igueiTb(GFfIl?4&?$buvN;ye5%rtVeW zf|Oc6FSj$?Xx+taY$7^n`7~;%ufT0mK!->GUipZD=yC9O@S&`;Z zpoIAv#^@;q>PKt5<*CYb`W}Y)c z!F*J6R9+W&FVB1zz1}YeM?MM<%z+{?FGdm^&G%v>P!-(f!5RBT4KjenW@UoITXHX_ zp7txh7%IA}O=JcV>dflP@|lrgc8{5VB*%yWTI+jyT{vXTlFr+BEO*QvGb7F{Ni*SI z3J1xhnLo-g*V7ypvxCgEBLnI)FH=j`bKZwHM%bPlt31Ch^V7_^6Ti?Yx=8k(3x^*G zC0^V~1l`acqoewes4BwOkll&_XagkvWN0jyF4oW?z;v zE)J%&9Zc*pTW2QHH^b#i0=3zGI7mA?H|*@p>N|Hg+pdym4zyW&WWpHRlcA31$T*wV zi1E49#Il*2dU2q*F!gvV%}gZo7|jbao35H@t$SP(NwS>fHcfpwJRoy@@`*rh?x`8L z=Y$66_fpDNyET_z42~qje7sA;b2Gu%5RuA7`JEXm>pwHPQ~PYD+$GUTvQGESH@YNH zS&5un!^aBdXGZ>C%*x{CDjI1rTavdUC+rhHWzM0Q-xnq2WFSIGcJiFS@@VqOVO2A0 zqMxzj75k_!(Y(GZBcU`LhC`JnlJo1iX0N^HX(pvr%1MivTV@TzL^5=cIfym(7ZQ zBF`&>j8$sP5v)yP70tafhX4BHGHd<99iC>SkvsD?tzFJunOkNatC6P`4#RA@>08!spP_vJJGv;|W z?>5jiJ1l^d&XAJM_ZQRPzWMJkyfFIaNzsKEfsUE$&E7qc=RIvErjo5Je^DShFBI>n z2iavIFUd6+%xP!Y__;=5EUcMoo$E%<^!l*FofV0Tequ$q;=BC#24|XLmSNWg$7?cp zBF~(^gWmk(vr?*gomYg??1R~(X52l$OZ7zO)0zF<7@7ZI^I2+EfK_y4L*zG?Tf_jK z=OQa25tKVOQ1fM%N1nt|ow3J~@*#aQqjN*)7H_4N&Vz)Xd73;Q9e^Xu{nG$mvtE>? z<4fgkA8K>EPw&KktQ!4l^hZ}%A=HCG<5annMJJkrgw>9Ap6AG5YcV^pa|FRs4KE~O zD%=tAwO5DCfk$NHuAkE3;R;Q`R7$!c1Ld`|{zONOSHb5=Q3QzPXe2ILP;x&ZYs&IZ z-sJHqcN(!vCryps8(F(Qd8Cld=IcMHkfSAdw!d0PIwe{nD{U*ywcd|L`i=Ibw?*Zw zQGVNeyn@{QDMb!PFTST`)HF+o1u`8wkc1_{I_KP%4~h|^m-tG zr#!8Bs8br1(rRt|;LHcjc$$73dp=KBpPE`c_&Z!F^riJHk4I|AM)^GL%*u?kwrqNz zoHvbxjYc$uL{t_lFO{ICPEAXWDnG8913r}~m{g)GYtAdXN@)ordmwKsWl~)Ax&AlC z@TBxoskOE=|E2Dn^|_`^sjc6gDZ5b3v&}b8N*$h*kFG}c@d3Ao>!ge>Qm3@QcEbb1GVEy*If9^=emr>i8VxxO+!)t-72w-<*wHRD#^ChB)?HsUuPSZO%dUBjxoQdx>(Bk_+Z-pS*2xGgNUcb((HdJwOQKZS~{aRTw8|ne5x_E=pCKV%jDZpoBq3=zW4UPYE{W!k5LMg`n5Bt zt3Rjn$c@KztpuxKS&i2C<-=*=wU4Lc`ubbzXV3#29hK|)DaON$h^^TWr4qW34!S#| z;YRh0v5Ta9*zm<&|Y$)_R&$4k=n5s7`Ci(1jRftzEUo7-(F*9EXmYf zSre1vMOPdyHXSK2Rv@(ym4l;em4rf5Y8O%xQ>jsx`qkck>|!!9#b#B8cf@#wBGvfP zg+zhQ*b$ET8h7lRc=H_1hW~PSr$GfL_@9Dz z@X!ZiBptcju706U+`YD?a7qc~s&dP}#-mEC>}j8X2UHzHtKQO2k)52l3qNBJdYwCB z+8G~f?yNJTroP7eaUU1RA^Y1F3`lC($yxQZvWXJ#uEw$$m4g|>F}BxdXi>EhWTO=< z6UnC$ozH7Lw-%$T=XJ#-Yt(9?>+3bbPG(4aOT@o=dtRruaOB9!h2C@Odm-LD=?on3 z^tnO?AFV;N8@yL$PQ%raT5plmo(%M!@~LGRZ`Sd^>W~@J=Ca(Mxh$PEZD!9cv3&Yv zuFA?lKX~vv4u0(5w`S$2D}sr>w#S0E9x0fxfiEY;EC(y>=nuR)d4J&Gw`6VVcN|<7 z8tBh6N5WfoMl*P5w6yZ3zFmE~dIi;XL!S1QlGQZKs5k%ANO3Xo{-sd~Bj(ceiRi^N zx5b- ztwg@0tq;sSS5He0Xw7)udYW2#T1T@wzlg5;D56CjcA_zZ zavE!afCL&*t0xg9jIObGYpl9D4>B-z>|Tt(Q-TWB>2qyhxn2I@A$U6%iiS^wfKPp< z^GiDOW%vf?(hHRI9k7{T_+S65Tz0xGf!hB1AoAGvdgP#6g?cngEVpzAzAIv_7i=sx zvub*`Qri3dua==J3QcszS2h9y4NpWmy%*N`Xr0G=Ptv-3Y$fK>SWCU$>?G|gFK8&7 zE14{rNT_S(SuOUmNT&G=wT0EYMh@&*@$Krn#+A%0^iIl}Q;deCMhLRgtUg1U>qB_n zMlA4@%O|J#jBUX;{sz5_r<=`6T2Tol*&9@DIV-*yIV^X}dsa&hysm6E@<7q8oRO~i zRq8}1RtlSWfA__AT9yCIz~T*S>j_$2x9iS;9n6i7Xrpt z+~G3*@=iP~W$$8oQ-#rLi_! zo|ZRoRL5A3$~J4;I3LxWiOi-9)}A!7it4Ve!J+cqXiJ>$SHI~^%UUjxGe6J%*8|jg zRr9OM6JO#ax_hEh)H#3U&aw;a5lW7~B)?1Q$D36iabu*Z&ym^nnNo*(B)!sFNi8kL z8j@o2tB$c?O2CC;fjYHCXeJsWi+wBHo8f&YlvF+$T2{im6<}3^%H(iTExZvg(059o zOv$t#G`xI&T1@7Rnk`DJLBn^5m}dT1C5Kl-CvBp>q0yP{D8?*b9x9R|-+kKF0!nZ0$u)6# zwH}?&M(J$4O*s`1qe+bIGwSt4~e-%E5xDXW-uz_w7H|B(&dcBtuVJ zFW=p~-+uJllD3{dT7L0Z*e9^?MinID*y9oUjHlKsb{UV|EJzPeag1fp-XEo z6m6r76`@zvEk|E>mP`!Hb36`e_gZ#wTwL11Qiz*(^t$zoW$V*}*{k6{r3}YQVW~bV zwbx2)>PSYhFQ$$Dn&MoZ`JS3Ou#%_NI`H;bsJF7RfB*DXqai&`zG6`5=X_x`xz@4w zK(>W+pdFY`&$fJYzNO94dvkv*LT&D{yzcii5EM&t zv@c8R8YMtKG;r)w3n!AdB)b;sIM`adx?A3qIpvSH8u>X@o)(mz>1Ru^QebT2wC&r|qbI;6{(m&j~l+=>_>lg1Vn;Ey=)>_E*dga+em+2ejWea;j0ZsplP=ZWoSzy3nG^@sy^)As-C*_NN1 zzK%wYjUcCOx?(AiY`ZLAd8CcD`r(aXw#T_T(=ovI)8Nd)ru}I8 z?b}D%QMLVE8ZG?x*0$|JYG%x$y-<~BbQ#$#4Nw3r^h~cF+0`GjEI!>MNn1GqCk+|f zSREN};fY$Gk-T!GT2l_}|0^9Y`kOe!aVr-~GAdJz#+w^-N|}%HYcuN2+U6~s^IxeM z%4}2j<%CqD^2`&^PuG@wC8fP{9ot*|bNI}@qeLOAN5}WBFhJHimR2sbe_{28X|0nm zJnU1|oc0ERzAzV$j)&Ek9k(&mXy4DOYnUeTEL_|+!p(e7FkJnYO*m=QxTu83>t6Zu7( zj`_6Td&V@3iFN0a?!JSEs4#s`W6Queur7YH1MV!@Z?4j-oNWJ=bMz}-rNOc|WRdLo zj1H5j>0xe9HXAmhGfN}dW8HCGee$#sJpB#-2L9GTPDh8E(t4-%g+(#b<392^wrKL; zpHC&CvM{}HU4O^uX8YgRc`LgV=8lZ(-K8;THgq5A_qzI8I)b8S%bHfB#-Ua70!qxFsiyxOra^}jLGzLmrO`P3FRMyc;8 zyI4>p z;F)^vYV=4S2wGQZQQ15d58ibmgM|tFcm^EDQ{33%hntID`}bBp7;m9+r|qIbSv{u7 ze)E~KTYlxhJ$Yt~W)tAF>L?YcUx-tKj}+0%478H z6Y}-baz;a2j6|>|YAai(ujl^{cZN~}%i`?f!Q30puIumaZ0c}ShR-T}uJDmoG#2RD{`vNbwcLI^ zyM9ZWMs9YM9;vly{=Yjs{^`lJBzT>X*-B<@d}a9P|4|FsXO8A_JyKtby`N*PT&E(^g7L*w>vxf0XXuyS+ME!v6K5(b3vRkB4$YKb~i$O=*Sec<2@;&V1(o`217m z*iY9>UVB!%crmV^7zf`X75e^3&&w?{Uy=>AtLMX|cVx&R^}`$~9*Le~;^b zX@s-+Z0RFyN;&?x&CwEuPTO)yiBh+@TH5JL$LHfd$33xRWS!OCR2H{dCVeF7xbnAY zEp40P{CK!p=Fz;{{HxwVRXH9A$G$HOac5nPcD0n#Lvbo@M=5qZR>wiU<(E=cNq9K? zm0q4tTFcr>Lp5Sa+2n7Y$=O`TL$Xr$>AyI>pS}-6^>iSf`WgeRdt3Ml%ffio|LSL@ z)6wVF_3_j{3j1JnYF)i^RJvE(FtJ2?e5T*0eS)s`zmvOiwyx%^n$!P*X$x!5t5XB( z;95#7POtlw6L%)fah}_zZO^Cvrp?tH_fwaCxc`sqvoIiGwXXXz*YvqlIcyrQaw@I1 zki%n(OEE)x-`Wv;9NukhNAtAbpwCUpw#031$DNm>+dD0*DaB@ccb$JPwKVUxp}?x6xRoM3_w35IU-p7>d$xGFOuQJvNHV%mSXq!yxx$e}~ z6oN+TO7WemLNx#DNmM5jbEh)7y`DSxv?R9W7uLzq8bLo84{omgd~m&!`;@zgO!Th9zE3)F!J@a3~S#c41a8EW6MT+2H+6AjEbVaM^B zb3aPx)r=ZWzRBZx=N&m{sja2ZEL@7?7UMae<56lYiVS^P<`#>Qv4#7jtf%pReOGPU z9FzLpACHsCqfZY;$LFp5*4~U)m}711QQKMTH23=Cw$5#d&X>Jyx%0$v@ElF66m3g) zKAafZ4PARZQas1zK3Ybv_v@Q0$Mpm6cnIS`>ofjhjw|0vX`0&Bb5oC0FwbZ3+2YY0 zB)C#Md5<2qWv+WoT{S4pXPW}9!rSBYE^H%%i4AaYq+{~+ddWj+)w^=9vw60ZSTyPr z;OZS`ul^bCY;zq?ft90H|9IQKa!tvF#6LLayHfXQ)p!FXIx0Ewh+He@L{NkI9Ghz^ zbKgBB7UXkwIyw~g<{CT(uky(iZcQq<1}aZ9-PwLAP4O>B$84vZmbQOK9-nO~`z^7- z#c?aE+w{|)&l6LJnnt(koz}Bk{cEndw*ztaH!0=HP+_nrZpF9Htb9WS>7GN4p>I=~ zDxY+a%DYM^MTa`>ZOh!xC-1;2r|XtEsp~lOkTRUurmdW(=fFHC@6dcb*V5MYulH<9 zc2s7)?6Qahb<@XAPU6EtbKc?h4wuHIrvjbCc+P@k+SIv`h>Jg9TKYd;O#?D&rlu>REkB{T8 z{F8gZyi$iFy*D`>Pfgk0J^p+_QVE^wk?XCL&b{ri`L-#fc4`O%@!+$Nn$U!y2|7ddaOev1a zE}Sc7>hn0(-i+oSE|j|?6^`?5+kUP_1{|lXmAffysap2!@H{zn6bh+w>fvbqrfbRg zl)q~4b86`MK-7HwpEP}DJs&z8y_%A@c#jWIKBxw!&Oe;%fp+?5<|%MbtqVqHBclVu z7UF>$9Fxy8+t2>h+`;uFLp>YHOrFyn_eNBT@^|&&XuwRO+!TspHDd9WSv0q}P zy3a1WkCruZ)AW|$f1S;pNhuT~U+bzIS@O2em3g|khVG8PkxzL#|HqZod%d&r4Luxt z?w)o!k6f?Zvz{*-QV+{>AN|x`^nY2PEle}Zc$>D)2d0(c?6}m@azEd9cXhNhB@GA5 z^WoE^_IOaf5HF;c3Yi$46^!;aB%hdFpA#D!O4csk3`cc{4Vze!}PjCOH{%x9a=ewWo zs`WL`{@qi{lA@%3=D40JY^OrMg?S`t(w01K&z6*pR?M+FG&)kxTHo4dCf~NSbv_cN z_ERNqU|Pq;n}wybQesQlq3|4=fAR8YN$&V;>uO5rdMb5$cm21fqcH4Cs-A~e`|jti z9~cbgD9_P;jrK=0wY?ihb4B^Km7%ZGlf41oK-JX@=-)-*6x8=yB9X&3|sWdP7 zI__-b(!G(+qsNisTKlcd=K&gR&S+nw%Z?q+f8Upy|84xaJkNgFMgX6CE zWxP7F?ty zKFfkv?k94X{Dbw%KX-cEVqNW!J`jw)G;iTst;CgU&OEta{#+NX`S0=7c((4HUKaLk z@-|;3f8?Ls&2ODmWBNZOZOd>z($=S^yra4HuScUiee|T^iBRLb?P}Dn(vg_(&QTG zrhLcW$fwV*Qcf*@TkEMc?bp74b!zS zr$YI?r~GDd<9n}pOULj1>5duyWr#m0m z-1j-1r0vsV|7xE;m5WN>{{Mcy{i`X_)3rI1(tO8B+g4UrTsyKllH2Hc?mIS0-lnX) z+tkT7?ahgqw|QRed?4vj&MC>6Z;x{|`M3Ht6kNxBx|L&F-VLWu&&!t3d`C+=?po>F z8k%RHKl9vv>i$*p417I~l#_Xopn=_k?Z0q&)?Tt#jonD}^jVF|?&9`2);A-sok7|QxK=fki%zSv>?vjPDL?9RX4@v7@4*|pxzzVh4QKrUx`4_^$Vp0m#5 z8?tKSrTL!NtvY8v<-^@dOWlXV9_h1FmbGf^aY3Uxb6e}Qu;Gr6y-bvARRt?h*x|?i zCC<#Gv^T>Q+0WtP-OfknCiRTK`C@9c5|S04)n@l=E7-%!9_!W*J3sK*W9US#(7*fP z4jt^20dg~?tbE^R%>(E@-_<-je&bW~&K|cckToW)L4`Vw*0-~|9-52%r=5sb-JxCt z-*pVEVcA)t?pZ-g8Foyt2A`kZx=0S$Ru`zOU}UX$YcAQ9ZuV+G->$Q_*5CAuUu7$R z?LH{p5f_&v+eaPXwh~jT_I7wh}MrMb!6NPM40K^6>Wts7=fsjf(8B`9C;c4c|% zTG<)pq22B%59avbZbzzzcPkopza{&Lku;F0LCJRiu@9AJ?f7F?m9OM$pSioU$HLQr z;SJ&RW!bmtx_qzC4p!G^AFDTKFQB&{+HgWq%T?;QN_!4Dn0C-uEKbzFJy&Omfs)@idE-F+$R3n}f< z(CFptNq!6Z;nre*eLLaPS8YesA!)Ie5J(CBG@VC%ru| zzCOFC-*fo+!%rN3Fuyy);};^|7bS;Omy4nkXQW2E zNnLdCPaQ;V)%>wnrlG7X*$Q^6TD%*M!zrC+}N>-}T|*nXy!Mb-O?Rj|Gxv z^8~rJ$J4pt$J@i*9}hMErGq~ZIr;6u^{Pu%g2dT}@BA4W6cda{v;jbP3O3Jx6Qh#P}d-HBztQ&H?KD?tr*W`D3Abovo%(Hps zp~&y!q4l?-g?6YqKYX!=mEDfWl zhCFpcbm9Ey|FgmGzR2lAp-A`pxhHsj{P2B;|L-fh_a`Eu|7o!Na3KEvgMU5z`?Cjs zJpcb@IQquW`p!J}LVWS%JA3$CEXS`#vj29l{8Tt|5E$vp5ALMvEvfaAXxho0O`tF5 zL|dLt-S-F6MpG1MyoU)9=h4V%H{xhO(V@4kI1%bqCDXN1~)& z6xiMrdAT}w4h|kq`L~CIzAVgFB4M8hgg+Ze{nLm4%ZKUN79{k4# zKY8%4MrLjZg&vN+eKb!!5q_PMvc8d&&qe?KQMi6f%6j4O!tn4%^8N8>(R;#4yu$_F z^7&XE^nX5BT7wcdpGz8xdNRqZbodVT_$wZMIO>iBB%-yRv|Ngjxuxg&W0;^EKa_py}sWbk}vti?}62L3>v{=vxU zSqD$=q~^Z-TS3w8h1S&NOK{VEpZ3|hB3$#mBD`ZKFAc=kM@PPYw~ON2bAEZ?e<>x{ z+wCA&+w;+`k5}aEirv|@yJxQ3l|io_2$o-rK7K5m{BX1iNB(~J`R8I&|JdRG5Dk5Q ztkzo({;h-m?BLHF{Dp)6Hdgg_r=F)H-9H`Q@=M|C!+}+F@lv3_HyGa;{O^tSoFD4{ zwrKJ1-&x^nqbW~^8lQ~re>56=S8}j2-ED}^reg<@yOWW*8)MOK3d9!&BmUKXktf2h zcSJ{jXy>c0%abe%pYUu-x;T`1`;HRt+EL>CJn8d>Y zPxyFqa-0=9h#b!d#8*ZqelQyJ-e~S+JFCl9KbE_12={N?dDFKAJ|#XM2%gH5FYT
    joPlks-fA|lB>-)m5U�G9sczl#y=JKUWz^Xec|q(j1>Q5r1I^d)29#r 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