Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@ name: check
on:
push:
pull_request:
# The digests are checked once a week rather than on every push. Hashing the catalogue means
# downloading several gigabytes — the two MiLMMT builds alone are 3.3 GB — and the answer changes
# only when somebody republishes a file. Every push still asks the cheap question: is it there,
# and is it the size the manifest claims.
schedule:
- cron: "17 4 * * 1"

jobs:
compile:
Expand All @@ -19,6 +25,46 @@ jobs:
# manually or on workflow_dispatch.
- run: python -m compileall -q scripts models

readme:
name: the READMEs still match the registry
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v4
with:
repository: Techainer/summo-registry
path: registry
- uses: actions/setup-python@v5
with:
python-version: "3.11"
# The numbers in each model's README are generated from that model's manifest. This is what
# makes "the README says 611 MB and the manifest says 640 MB" a failed build rather than
# something a reader finds in six months.
- run: python scripts/readme.py --registry registry --check

verify-digests:
name: full sha256 of every redistributable file (weekly)
if: github.event_name == 'schedule'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v4
with:
repository: Techainer/summo-registry
path: registry
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Download and hash
run: |
status=0
for manifest in registry/models/*.json; do
if [ "$(python -c "import json,sys; print(json.load(open('$manifest')).get('redistributable', False))")" = "True" ]; then
python scripts/verify.py "$manifest" --digest || status=1
fi
done
exit $status

verify-published:
name: verify redistributable manifests in summo-registry
runs-on: ubuntu-latest
Expand Down
28 changes: 26 additions & 2 deletions .github/workflows/export.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ on:
models/<model>.json in summo-registry.
required: true
type: string
version:
description: "Release version for this export, e.g. v2. Never reuse one."
required: true
type: string
keep_fp32:
description: Also upload the unquantised intermediate (export.py --keep-fp32)
required: false
Expand Down Expand Up @@ -87,9 +91,29 @@ jobs:
run: |
python export.py --out build/ ${{ inputs.keep_fp32 && '--keep-fp32' || '' }}

- name: Compute the release tag
# `<id>-vN`, one release per model, not one branch per model.
#
# A branch is for a change in flight; a release is for an artefact. Branch-per-model would
# mean twenty branches that never merge and never die, each drifting from the export scripts
# on `master`, and a bug fixed in one export never reaching the other nineteen. Tags cost
# nothing and are what a release is addressed by: `small100-v2` is a name a manifest URL can
# contain forever.
#
# The version is bumped by hand — `v1`, `v2` — because a re-export is a decision somebody
# made, not a date that passed. Two exports on the same day are two versions; a date-based tag
# would collide and quietly overwrite an artefact a published manifest already points at.
- name: Check the release tag is free
id: tag
run: echo "tag=${{ inputs.model }}-$(date -u +%Y%m%d)" >> "$GITHUB_OUTPUT"
run: |
tag="${{ inputs.model }}-${{ inputs.version }}"
if gh release view "$tag" >/dev/null 2>&1; then
echo "::error::release $tag already exists — bump the version rather than replacing an" \
"artefact that a published manifest may already point at"
exit 1
fi
echo "tag=$tag" >> "$GITHUB_OUTPUT"
env:
GH_TOKEN: ${{ github.token }}

- name: Upload artefacts to a release
uses: softprops/action-gh-release@v2
Expand Down
44 changes: 44 additions & 0 deletions README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,47 @@ The scripts in this repo (export, `scripts/manifest.py`, `scripts/verify.py`, th
ours, published under [Apache-2.0](LICENSE). That licence does **not** cover the models themselves
— each model keeps its own licence, listed in the table above and repeated in each model's
`models/<id>/README.md`.

<!-- index:start -->
**Nhận dạng giọng nói**

| Model | Dung lượng | Giấy phép | Phát tán lại |
|---|---|---|---|
| [`gipformer-65m`](models/gipformer-65m/) | 73 MB | MIT | ✅ |
| [`sense-voice-small`](models/sense-voice-small/) | 1,177 MB | FunASR Model Open Source License Agreement v1.1 | ❌ |
| [`whisper-tiny`](models/whisper-tiny/) | 256 MB | MIT | ✅ |

**Phát hiện giọng nói**

| Model | Dung lượng | Giấy phép | Phát tán lại |
|---|---|---|---|
| [`silero-vad-v5`](models/silero-vad-v5/) | 2 MB | MIT | ✅ |

**Nhận diện người nói**

| Model | Dung lượng | Giấy phép | Phát tán lại |
|---|---|---|---|
| [`campplus-sv`](models/campplus-sv/) | 28 MB | Apache-2.0 | ✅ |

**Dịch**

| Model | Dung lượng | Giấy phép | Phát tán lại |
|---|---|---|---|
| [`milmmt-46-1b`](models/milmmt-46-1b/) | 806 MB | Gemma Terms of Use | ❌ |
| [`milmmt-46-4b`](models/milmmt-46-4b/) | 2,490 MB | Gemma Terms of Use | ❌ |
| [`small100`](models/small100/) | 611 MB | MIT | ✅ |
<!-- index:end -->

## Release naming, and why not a branch per model

One release per model, tagged `<id>-vN`: `small100-v1`, `gipformer-65m-v2`.

A branch is for a change in flight; a release is for an artefact. A branch per model would mean
twenty branches that never merge and never die, each drifting from the export scripts on `master` —
and a bug fixed in one export would never reach the other nineteen. Tags cost nothing and are what a
manifest URL can point at forever.

The version is bumped by hand rather than derived from the date: a re-export is a decision somebody
made, not a day that passed. Two exports on the same day are two versions, and a date-based tag
would collide and quietly replace an artefact a published manifest already points at. The workflow
refuses to run when the tag exists.
44 changes: 44 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,47 @@ Script trong repo này (export, `scripts/manifest.py`, `scripts/verify.py`, các
chúng tôi, phát hành theo [Apache-2.0](LICENSE). Giấy phép đó **không** áp dụng cho bản thân các
model — mỗi model giữ giấy phép riêng của nó, liệt kê trong bảng ở trên và nhắc lại trong
`models/<id>/README.md` của từng model.

<!-- index:start -->
**Nhận dạng giọng nói**

| Model | Dung lượng | Giấy phép | Phát tán lại |
|---|---|---|---|
| [`gipformer-65m`](models/gipformer-65m/) | 73 MB | MIT | ✅ |
| [`sense-voice-small`](models/sense-voice-small/) | 1,177 MB | FunASR Model Open Source License Agreement v1.1 | ❌ |
| [`whisper-tiny`](models/whisper-tiny/) | 256 MB | MIT | ✅ |

**Phát hiện giọng nói**

| Model | Dung lượng | Giấy phép | Phát tán lại |
|---|---|---|---|
| [`silero-vad-v5`](models/silero-vad-v5/) | 2 MB | MIT | ✅ |

**Nhận diện người nói**

| Model | Dung lượng | Giấy phép | Phát tán lại |
|---|---|---|---|
| [`campplus-sv`](models/campplus-sv/) | 28 MB | Apache-2.0 | ✅ |

**Dịch**

| Model | Dung lượng | Giấy phép | Phát tán lại |
|---|---|---|---|
| [`milmmt-46-1b`](models/milmmt-46-1b/) | 806 MB | Gemma Terms of Use | ❌ |
| [`milmmt-46-4b`](models/milmmt-46-4b/) | 2,490 MB | Gemma Terms of Use | ❌ |
| [`small100`](models/small100/) | 611 MB | MIT | ✅ |
<!-- index:end -->

## Đặt tên release, và vì sao không phải nhánh riêng cho mỗi model

Một release cho một model, tag `<id>-vN`: `small100-v1`, `gipformer-65m-v2`.

Nhánh là chỗ cho **một thay đổi đang làm dở**; release là chỗ cho **một artefact**. Nhánh riêng mỗi
model nghĩa là hai mươi nhánh không bao giờ merge và không bao giờ chết, mỗi cái trôi dần khỏi script
export trên `master` — và một lỗi sửa ở export này sẽ không bao giờ tới mười chín cái kia. Tag thì
miễn phí và là thứ một URL trong manifest có thể trỏ vào mãi mãi.

Số version tăng **bằng tay**, không theo ngày: export lại là một quyết định của ai đó, không phải
một ngày trôi qua. Hai lần export trong cùng một ngày là hai version; tag theo ngày sẽ đè lên nhau
và âm thầm thay mất artefact mà một manifest đã công bố đang trỏ tới. Workflow **từ chối chạy** nếu
tag đã tồn tại.
17 changes: 17 additions & 0 deletions models/campplus-sv/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,20 @@ latency path. `task: speaker-embed`, `mode: batch`, via `sherpa-onnx/speaker-emb

The manifest has no latency (`latency_ms`) or quality (`quality`) numbers for this model, so none
are listed above.

<!-- facts:start -->
| | |
|---|---|
| `id` | `campplus-sv` |
| Nhiệm vụ | `speaker-embed` |
| Runtime | `sherpa-onnx/speaker-embedding` |
| Ngôn ngữ | * |
| Giấy phép | Apache-2.0 |
| Phát tán lại | được |
| Dung lượng | 28 MB (1 file) |
| RAM (idle / đỉnh) | 60 MB / 180 MB |
| RAM tối thiểu | 512 MB |
| RTF · `cpu_x86_avx512vnni_8t` | 0.006 |

*Bảng này sinh tự động từ `summo-registry/models/campplus-sv.json` bằng `scripts/readme.py` — đừng sửa tay.*
<!-- facts:end -->
23 changes: 23 additions & 0 deletions models/gipformer-65m/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,26 @@ sha256 and size for each file are in `summo-registry/models/gipformer-65m.json`.
| Latency — finalize (p95) | 700 ms |
| Quality — WER (Fleurs VI) | 2.41% |
| Quality — CER (Fleurs VI) | 1.67% |

<!-- facts:start -->
| | |
|---|---|
| `id` | `gipformer-65m` |
| Nhiệm vụ | `asr` |
| Runtime | `sherpa-onnx/transducer-offline` |
| Ngôn ngữ | vi |
| Giấy phép | MIT |
| Phát tán lại | được |
| Dung lượng | 73 MB (4 file) |
| RAM (idle / đỉnh) | 150 MB / 800 MB |
| RAM tối thiểu | 1024 MB |
| RTF · `cpu_x86_avx512vnni_8t` | 0.024 |
| RTF · `cpu_x86_avx2_4t` | 0.06 |
| Chất lượng · `wer_fleurs_vi` | 0.0241 |
| Chất lượng · `cer_fleurs_vi` | 0.0167 |
| Độ trễ · first_partial | 200 ms |
| Độ trễ · finalize_p50 | 300 ms |
| Độ trễ · finalize_p95 | 700 ms |

*Bảng này sinh tự động từ `summo-registry/models/gipformer-65m.json` bằng `scripts/readme.py` — đừng sửa tay.*
<!-- facts:end -->
19 changes: 19 additions & 0 deletions models/milmmt-46-1b/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,22 @@ mradermacher. Original file (the only one, since this model is never mirrored):

The manifest has no RTF or quality (`quality`) numbers for this model (both are empty `{}`), and
being `mode: batch` there is no "first partial" to speak of — so those rows are omitted above.

<!-- facts:start -->
| | |
|---|---|
| `id` | `milmmt-46-1b` |
| Nhiệm vụ | `translate` |
| Runtime | `llama.cpp/gguf` |
| Ngôn ngữ | ar, az, bg, bn, ca, cs, da, de, el, en, es, fa, fi, fr, he, hi, hr, hu, id, it, ja, kk, km, ko, lo, ms, my, nb, nl, pl, pt, ro, ru, sk, sl, sv, ta, th, tl, tr, ur, uz, vi, yue, zh, zh-Hant |
| Giấy phép | Gemma Terms of Use |
| Phát tán lại | **không được** — trỏ thẳng nguồn gốc |
| Dung lượng | 806 MB (1 file) |
| RAM (idle / đỉnh) | 900 MB / 1200 MB |
| RAM tối thiểu | 2048 MB |
| Độ trễ · first_partial | 0 ms |
| Độ trễ · finalize_p50 | 700 ms |
| Độ trễ · finalize_p95 | 1600 ms |

*Bảng này sinh tự động từ `summo-registry/models/milmmt-46-1b.json` bằng `scripts/readme.py` — đừng sửa tay.*
<!-- facts:end -->
19 changes: 19 additions & 0 deletions models/milmmt-46-4b/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,22 @@ mradermacher. Original file:

The manifest has no RTF or quality (`quality`) numbers for this model, and being `mode: batch`
there is no "first partial" — those rows are omitted above.

<!-- facts:start -->
| | |
|---|---|
| `id` | `milmmt-46-4b` |
| Nhiệm vụ | `translate` |
| Runtime | `llama.cpp/gguf` |
| Ngôn ngữ | ar, az, bg, bn, ca, cs, da, de, el, en, es, fa, fi, fr, he, hi, hr, hu, id, it, ja, kk, km, ko, lo, ms, my, nb, nl, pl, pt, ro, ru, sk, sl, sv, ta, th, tl, tr, ur, uz, vi, yue, zh, zh-Hant |
| Giấy phép | Gemma Terms of Use |
| Phát tán lại | **không được** — trỏ thẳng nguồn gốc |
| Dung lượng | 2,490 MB (1 file) |
| RAM (idle / đỉnh) | 2700 MB / 3200 MB |
| RAM tối thiểu | 6144 MB |
| Độ trễ · first_partial | 0 ms |
| Độ trễ · finalize_p50 | 2100 ms |
| Độ trễ · finalize_p95 | 3600 ms |

*Bảng này sinh tự động từ `summo-registry/models/milmmt-46-4b.json` bằng `scripts/readme.py` — đừng sửa tay.*
<!-- facts:end -->
21 changes: 21 additions & 0 deletions models/sense-voice-small/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,24 @@ sha256 and size for each file are in `summo-registry/models/sense-voice-small.js
The manifest has no quality (`quality`) numbers — its description notes accuracy has not yet been
measured by `summo-bench`; the publisher's own claim is that it beats Whisper-small while running
roughly five times faster, and that claim is theirs, not ours.

<!-- facts:start -->
| | |
|---|---|
| `id` | `sense-voice-small` |
| Nhiệm vụ | `asr` |
| Runtime | `sherpa-onnx/sense-voice` |
| Ngôn ngữ | zh, yue, ja, ko, en |
| Giấy phép | FunASR Model Open Source License Agreement v1.1 |
| Phát tán lại | **không được** — trỏ thẳng nguồn gốc |
| Dung lượng | 1,177 MB (3 file) |
| RAM (idle / đỉnh) | 300 MB / 800 MB |
| RAM tối thiểu | 1536 MB |
| RTF · `cpu_x86_avx512vnni_8t` | 0.044 |
| RTF · `cpu_x86_avx512vnni_4t` | 0.062 |
| Độ trễ · first_partial | 250 ms |
| Độ trễ · finalize_p50 | 300 ms |
| Độ trễ · finalize_p95 | 800 ms |

*Bảng này sinh tự động từ `summo-registry/models/sense-voice-small.json` bằng `scripts/readme.py` — đừng sửa tay.*
<!-- facts:end -->
23 changes: 23 additions & 0 deletions models/silero-vad-v5/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,26 @@ Summo's default voice activity detector. `task: vad`, `mode: live`, via `onnx/si
| Quality — F1 (ten-test set) | 0.940 |
| Quality — Precision (ten-test set) | 0.925 |
| Quality — Recall (ten-test set) | 0.956 |

<!-- facts:start -->
| | |
|---|---|
| `id` | `silero-vad-v5` |
| Nhiệm vụ | `vad` |
| Runtime | `onnx/silero-vad` |
| Ngôn ngữ | * |
| Giấy phép | MIT |
| Phát tán lại | được |
| Dung lượng | 2 MB (1 file) |
| RAM (idle / đỉnh) | 12 MB / 30 MB |
| RAM tối thiểu | 128 MB |
| RTF · `cpu_x86_avx512vnni_8t` | 0.0063 |
| Chất lượng · `f1_ten_testset` | 0.94 |
| Chất lượng · `precision_ten_testset` | 0.925 |
| Chất lượng · `recall_ten_testset` | 0.956 |
| Độ trễ · first_partial | 17 ms |
| Độ trễ · finalize_p50 | 91 ms |
| Độ trễ · finalize_p95 | 982 ms |

*Bảng này sinh tự động từ `summo-registry/models/silero-vad-v5.json` bằng `scripts/readme.py` — đừng sửa tay.*
<!-- facts:end -->
19 changes: 19 additions & 0 deletions models/small100/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,22 @@ The manifest has no RTF or quality (`quality`) numbers for this model, and being
there is no "first partial" — those rows are omitted above. Finer-grained measurements behind two
of the export's design decisions (split encoder/decoder, the KV cache) live in `export.py`'s
docstring.

<!-- facts:start -->
| | |
|---|---|
| `id` | `small100` |
| Nhiệm vụ | `translate` |
| Runtime | `onnx/m2m100` |
| Ngôn ngữ | ar, az, bg, bn, ca, cs, da, de, el, en, es, fa, fi, fr, he, hi, hr, hu, id, it, ja, kk, km, ko, lo, ms, my, nl, no, pl, pt, ro, ru, sk, sl, sv, ta, th, tl, tr, ur, uz, vi, zh |
| Giấy phép | MIT |
| Phát tán lại | được |
| Dung lượng | 611 MB (4 file) |
| RAM (idle / đỉnh) | 700 MB / 1100 MB |
| RAM tối thiểu | 1536 MB |
| Độ trễ · first_partial | 0 ms |
| Độ trễ · finalize_p50 | 244 ms |
| Độ trễ · finalize_p95 | 600 ms |

*Bảng này sinh tự động từ `summo-registry/models/small100.json` bằng `scripts/readme.py` — đừng sửa tay.*
<!-- facts:end -->
23 changes: 23 additions & 0 deletions models/whisper-tiny/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,26 @@ sha256 and size for each file are in `summo-registry/models/whisper-tiny.json`.
| Quality — WER (Fleurs VI) | 65.5% |

Being `mode: batch`, there is no "first partial" to speak of.

<!-- facts:start -->
| | |
|---|---|
| `id` | `whisper-tiny` |
| Nhiệm vụ | `asr` |
| Runtime | `sherpa-onnx/whisper` |
| Ngôn ngữ | * |
| Giấy phép | MIT |
| Phát tán lại | được |
| Dung lượng | 256 MB (5 file) |
| RAM (idle / đỉnh) | 200 MB / 600 MB |
| RAM tối thiểu | 1024 MB |
| RTF · `cpu_x86_avx512vnni_8t` | 0.107 |
| RTF · `cpu_x86_avx2_4t` | 0.3 |
| Chất lượng · `wer_whisper_testset_en` | 0.045 |
| Chất lượng · `wer_fleurs_vi` | 0.655 |
| Độ trễ · first_partial | 0 ms |
| Độ trễ · finalize_p50 | 700 ms |
| Độ trễ · finalize_p95 | 1500 ms |

*Bảng này sinh tự động từ `summo-registry/models/whisper-tiny.json` bằng `scripts/readme.py` — đừng sửa tay.*
<!-- facts:end -->
Binary file added scripts/__pycache__/readme.cpython-312.pyc
Binary file not shown.
Binary file modified scripts/__pycache__/verify.cpython-312.pyc
Binary file not shown.
Loading
Loading