Tiếng Việt · English
Cách các model của Summo được tạo ra, đo, và phát hành.
Repo này không chứa file model. Nó chứa công thức: script export, phiên bản thư viện đã dùng, số đo, và giấy phép của từng model. File model nằm ở Releases của chính repo này.
| Repo | Chứa gì | Đổi khi nào |
|---|---|---|
summo-app |
Ứng dụng, và code đọc manifest | hằng ngày |
summo-registry |
Manifest JSON: sha256, dung lượng, giấy phép, URL | khi thêm/đổi một model |
summo-models (đây) |
Script export, số đo, README từng model | khi export lại một model |
Tách ra vì nhịp thay đổi khác nhau: script export kéo theo PyTorch và ONNX Runtime vài GB, chạy hàng chục phút. Không có lý do gì để mỗi lần sửa nó thì 13 job CI của app phải chạy lại.
Không phải lựa chọn phong cách — là giới hạn cứng:
| Giới hạn | |
|---|---|
| File trong git | GitHub chặn file > 100 MiB; cảnh báo từ 50 MiB |
| Kích thước repo | khuyến nghị < 1 GB, "strongly recommended" < 5 GB |
| Git LFS (gói free) | 1 GB lưu trữ, 1 GB băng thông/tháng |
| Release asset | 2 GiB mỗi file, không giới hạn tổng, không giới hạn băng thông |
Model nhỏ nhất của Summo là 73 MB, lớn nhất là 937 MB. Bốn trong tám model vượt mốc 100 MiB, nên chúng không thể nằm trong git dù có muốn. LFS thì 1 GB băng thông/tháng là hết sau mười lượt tải.
Releases không giới hạn băng thông cho repo công khai — cùng một lý do khiến nó là nơi mọi dự án
phát hành binary. Muốn thêm mirror (R2, CDN) sau này thì manifest đã có sẵn trường mirror; app tự
chuyển sang nguồn tiếp theo khi một nguồn chết.
Đây là ràng buộc pháp lý, không phải kỹ thuật:
| Model | Giấy phép | Phát hành ở đây? | Tag |
|---|---|---|---|
small100 |
MIT (model gốc) + export của chúng tôi | ✅ export của chúng tôi | small100-v1 |
gipformer-65m |
MIT | ✅ mirror | gipformer-65m-v1 |
whisper-tiny |
MIT | ✅ mirror | whisper-tiny-v1 |
silero-vad-v5 |
MIT | ✅ mirror | silero-vad-v5-v1 |
campplus-sv |
Apache-2.0 | ✅ mirror | campplus-sv-v1 |
sense-voice-small |
FunASR Model Open Source License v1.1 | ❌ không — trỏ thẳng nguồn gốc | |
milmmt-46-1b/4b |
Gemma Terms of Use | ❌ không — trỏ thẳng nguồn gốc |
Cột "Tag" từng trống trong nhiều tuần: bảng này ghi "✅ có (mirror)" trong khi manifest chỉ có đúng
một URL upstream và mirror rỗng. Nghĩa là mọi lượt cài model tiếng Việt mặc định phụ thuộc vào một
repo HuggingFace giữ nguyên tên file. Nay 11 file đã nằm trong Releases của repo này, đối chiếu
sha256 hai chiều: sau khi tải từ upstream, và sau khi tải ngược từ release.
Manifest của hai nhóm cuối đánh dấu redistributable: false, và summo registry check từ chối
một manifest nào trỏ model không được phát tán vào CDN của chúng tôi. Kiểm tra đó chạy trong CI của
summo-registry, nên đây không phải một quy ước mà là một cái chặn.
cd models/small100
python -m venv .venv && . .venv/bin/activate
pip install -r requirements.txt
python export.py --out build/
python ../../scripts/manifest.py build/ --id small100 --release-tag small100-20260813 # in ra JSON để dán vào summo-registryHoặc để CI làm: Actions → export → Run workflow, chọn model. Nó export, đính file vào một release, rồi in đúng đoạn manifest cần dán — kèm sha256 đã tính trên file vừa tải lên, không phải trên file ở máy ai đó.
Số đo nằm trong README của từng model, kèm lệnh để chạy lại. Con số nào không nói được nó đến từ đâu thì không nên có trong bảng.
Script trong repo này (export, scripts/manifest.py, scripts/verify.py, các workflow) là của
chúng tôi, phát hành theo Apache-2.0. 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.
Nhận dạng giọng nói
| Model | Dung lượng | Giấy phép | Phát tán lại |
|---|---|---|---|
gipformer-65m |
73 MB | MIT | ✅ |
sense-voice-small |
1,177 MB | FunASR Model Open Source License Agreement v1.1 | ❌ |
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 |
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 |
28 MB | Apache-2.0 | ✅ |
Dịch
| Model | Dung lượng | Giấy phép | Phát tán lại |
|---|---|---|---|
milmmt-46-1b |
806 MB | Gemma Terms of Use | ❌ |
milmmt-46-4b |
2,490 MB | Gemma Terms of Use | ❌ |
small100 |
611 MB | MIT | ✅ |
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.