Skip to content

Research: the seven unresolved licences and revisions in the model manifest (#694)

Status: RESEARCH DRAFT — REVIEW PENDING. Nothing in the manifest, the inventory, the schema, the validator or the product is changed by this note. The diff at the end is a proposal for a reviewer to apply, together with the matching inventory edit.

Base: main at 8a72bbc6. All file:line references are to that commit. Read on: 2026-11-06, between 02:16 and 02:40 UTC, unauthenticated, no token. Hub, PyPI and GitHub API reads were JSON; the three MediaPipe model cards were PDFs read with pdftotext. No model weights were downloaded, so no hash below was recomputed.

Labels: [Fact] is what a cited source says on the read date. [Inference] is a conclusion drawn from facts, stated as such. [Proposal] is a suggested change. [Vendor claim] is a publisher's statement about its own artefact that was not checked independently.

1. Scope, re-verified against the code

design/hci-huggingface/model-manifest.json (schema version 1, inventory date 2026-10-28) holds 54 rows. A count over the file on 8a72bbc6 gives:

  • Licence unknown: 7 rows. Revision kind unknown: 3 rows. The three revision gaps are inside the seven licence gaps, so seven rows in total. Nothing in Rounds 3-7 changed them: the last commits to touch the manifest are f123383a and 2989aead (validator).
  • pinned_by_yazses is false on all 54 rows. YazSes passes no revision, tag or digest to any loader. Every row below therefore says what was observed, never what YazSes uses.
Manifest id Licence Revision kind
openai--whisper-large unknown unknown
silero-vad-package unknown unknown
l2cs-net unknown unknown
silero-vad-v6-faster-whisper-bundled unknown package-version
mediapipe-face-landmarker-float16 unknown versioned-path
sherpa-onnx-pyannote-segmentation-3-0 unknown tag
3dspeaker-eres2net-base-zh-cn unknown tag

2. Findings per row

2.1 openai--whisper-large (upstream of Systran/faster-whisper-large-v1)

  • [Fact] https://huggingface.co/api/models/openai/whisper-large: sha 4ef9b41f0d4fe232daafdb5f76bb1dd8b23e01d7, lastModified 2024-02-29T10:57:46Z, gated: false, tag license:apache-2.0, cardData.license: apache-2.0.
  • [Fact] The README front matter (https://huggingface.co/openai/whisper-large/raw/main/README.md) ends with license: apache-2.0.
  • [Inference] Same pattern the inventory already records for large-v2 and large-v3 (model-provenance.md:143-144): the Systran conversion says mit (model-provenance.md:78), the upstream Hub card says apache-2.0. The 2026-11-06 runtime note (design/research/2026-11-06-offline-asr-runtime-and-provenance-audit.md, finding 4) explains why that is a legal rather than an engineering question; YazSes does not redistribute the weights.
  • Resolution: licence stated, apache-2.0; revision git-commit with the sha above.

2.2 silero-vad-package (optional silero extra, Meeting Mode VAD)

  • [Fact] pyproject.toml:344 and :435 declare silero-vad>=5.1.2 (a floor, not a pin). uv.lock:5654-5655 resolves silero-vad 6.2.3.
  • [Fact] https://pypi.org/pypi/silero-vad/json: latest 6.2.3, uploaded 2026-09-23; license empty, classifier License :: OSI Approved :: MIT License. Wheel silero_vad-6.2.3-py3-none-any.whl sha256 7b7f5436cfcb02fae583a05b512ea96467fd449fe54cb49a5e4f06c51a1e43b8 (PyPI digest).
  • [Fact] https://api.github.com/repos/snakers4/silero-vad/license: spdx_id: MIT, file LICENSE (blob 0bf5e90c…).
  • [Fact, per the project's own docstring] The model ships inside the wheel (src/yazses/meeting/silero_vad.py:7); the wheel was not opened tonight. If so, the package version is the closest available revision.
  • Resolution: licence stated, mit; revision package-version, silero-vad 6.2.3 (uv.lock). A pip user can resolve any version at or above 5.1.2, which the as_stated/value text must say.

2.3 silero-vad-v6-faster-whisper-bundled (silero_vad_v6.onnx in faster-whisper)

  • [Fact] uv.lock:1210-1211 resolves faster-whisper 1.2.1. At tag v1.2.1, faster_whisper/assets/ holds silero_vad_v6.onnx, 1,245,151 bytes, git blob 9febab9bc0aa5ae2b27e69243d813427212bfb36 (GitHub contents API). The git blob id is a SHA-1 of the blob, not a sha256 of the file.
  • [Fact] faster_whisper/vad.py:13 at v1.2.1: "The code below is adapted from https://github.com/snakers4/silero-vad." The faster-whisper repository licence is MIT (GitHub licence API). No separate licence file for the ONNX asset exists in assets/.
  • [Inference] The file's licence is most plausibly Silero's MIT, but faster-whisper does not say where the ONNX file came from or under which licence it is redistributed. Both candidate licences are MIT, so the answer is the same either way; the source of the statement is not.
  • Resolution (two options for the reviewer): (a) stated, mit, with as_stated saying "MIT is both the faster-whisper repository licence and the Silero VAD repository licence; faster-whisper states no separate licence for the bundled file"; or (b) keep unknown with that sentence as the reason. Option (a) is proposed below because no candidate licence differs. Revision unchanged (faster-whisper 1.2.1).

2.4 l2cs-net (gaze backend l2cs, manual install) — and a defect

  • [Fact] Repository licences: Ahmednull/L2CS-Net is MIT (licence API, blob e5258bf4…; head a4d8f7fa5436a2b2b9f088471623b552a85811bd, 2023-11-06). The fork its README installs from, edavalosanaya/L2CS-Net, is MIT (head 4a0f978d5b4c426a7d37022d8c927d6ea031dcb6, 2024-01-19).
  • [Fact] The weights are not in either repository. The upstream README says: "Download the pre-trained models from here and Store it to models/". No licence is stated for the weights. Google Drive was not opened.
  • [Fact — defect] https://pypi.org/pypi/l2cs/json: the PyPI project named l2cs is an unrelated library, summary "Rewrites queries from lucene syntax to Amazon Cloudsearch syntax", author Keith Mitchell, home page github.com/kemitche/l2cs, licence BSD, latest 2.0.2. YazSes's install hint is pip install "l2cs>=2.0" (pyproject.toml:367, src/yazses/gaze/factory.py:14, and the CHANGELOG entry at CHANGELOG.md:8755). It lives in a pyproject.toml comment and a module docstring; no runtime message or user-guide page prints it. That hint is satisfied by the unrelated 2.0.2 and installs a package with no Pipeline, so from l2cs import Pipeline (src/yazses/gaze/l2cs.py:18) fails. The upstream README installs from git instead: pip install git+https://github.com/edavalosanaya/L2CS-Net.git@main.
  • [Fact — defect] In both repositories l2cs/pipeline.py declares weights: pathlib.Path (line 19) and calls torch.load(self.weights, ...) (line 34). YazSes passes weights=None with the comment "l2cs resolves its bundled pretrained ResNet" (src/yazses/gaze/l2cs.py:25). [Inference] Neither repository bundles or resolves weights, so with the real package installed the constructor would call torch.load(None) and fail. Not executed tonight.
  • [Inference] The availability probe would not catch the wrong package. gaze status checks only that a top-level module named l2cs is importable (src/yazses/gaze/factory.py:41, :61; importlib find_spec in src/yazses/system/deps.py:49). So with the unrelated package installed, the probe would report the backend as available and the failure would come later, at construction. Not executed.
  • [Inference] The l2cs backend is therefore unreachable by its documented install path, and the hint sends users to an unrelated third-party package of the same name — a name-confusion supply-chain risk, even though that particular package is benign as far as its metadata shows. This is outside this note's owned paths and is not fixed here; it should become its own issue (fix or drop the hint and the weights=None call).
  • Resolution: licence stays unknown with the reason "repository code MIT (both repositories); the weights live on Google Drive with no stated licence". Revision stays unknown with the reason "no install path YazSes documents resolves to L2CS-Net; the PyPI name l2cs is an unrelated project". Do not record a git commit YazSes does not install.

2.5 mediapipe-face-landmarker-float16 (face_landmarker.task)

  • [Fact] The MediaPipe Face Landmarker guide (https://developers.google.com/edge/mediapipe/solutions/vision/face_landmarker, which ai.google.dev/... now 301-redirects to) lists three model cards for the bundle and links the float16 bundle at .../float16/latest/face_landmarker.task. The page text read shows no licence statement for the bundle.
  • [Fact] Each card says "LICENSED UNDER Apache License, Version 2.0": "Model Card MediaPipe Face Mesh V2" (dated September 15, 2022), "Model Card Blendshape V2", and "MediaPipe BlazeFace Model Card (Short Range)", all at https://storage.googleapis.com/mediapipe-assets/. The google-ai-edge/mediapipe repository licence is Apache-2.0 (licence API).
  • [Fact] HEAD on the URL YazSes uses (src/yazses/gaze/download.py:27-30, .../float16/1/face_landmarker.task): HTTP 200, content-length: 3758596, last-modified: Wed, 03 May 2023 18:02:21 GMT, x-goog-hash: md5=sOcnSQehZEQE/vZrKN1thQ== (= the ETag b0e7274907a1644404fef66b28dd6d85), crc32c=2FSEdQ==. Unchanged from the 2026-10-28 inventory.
  • [Inference] The card licences cover the three models the bundle is documented to contain; no statement covers the .task container itself. YazSes's /1/ path is the pinned-version form; the guide now advertises /latest/, which YazSes rightly does not use.
  • Resolution: licence stated, apache-2.0, with as_stated naming the three cards. Revision unchanged (versioned-path, float16/1). An md5 is not a schema-valid artifact hash (the manifest records sha256), so it goes in text only.

2.6 sherpa-onnx-pyannote-segmentation-3-0 (default diarizer segmentation)

  • [Fact] GitHub release speaker-segmentation-models of k2-fsa/sherpa-onnx: created 2024-09-27, target master, body "Please see https://k2-fsa.github.io/sherpa/onnx/speaker-diarization/index.html". Asset sherpa-onnx-pyannote-segmentation-3-0.tar.bz2: 6,958,444 bytes, updated_at 2024-10-08T12:54:10Z, no digest field in the API response.
  • [Fact] Hub mirror csukuangfj/sherpa-onnx-pyannote-segmentation-3-0: sha 9403a6902bb58e3d5ae8c7e77c3422de279db2e0, lastModified 2024-10-08T12:54:11Z, not gated, no licence tag; it contains LICENSE ("MIT License / Copyright © 2022 CNRS") and a README saying "Models in this file are converted from https://huggingface.co/pyannote/segmentation-3.0/tree/main".
  • [Fact] Upstream pyannote/segmentation-3.0: license:mit, gated auto, sha e66f3d3b… (unchanged from the inventory, model-provenance.md:108).
  • [Inference] The Hub mirror and the release asset were updated two seconds apart and the mirror carries the upstream CNRS MIT licence, so the converted weights are offered under MIT. That the tarball's contents equal the mirror's files was not verified (the tarball was not downloaded). The release asset page itself states no licence.
  • Resolution: licence stated, mit, with as_stated quoting the mirror LICENSE and the not-verified equivalence. Revision stays tag (speaker-segmentation-models); tags and release assets are mutable and YazSes checks no hash (src/yazses/recimport/download.py:22-24).

2.7 3dspeaker-eres2net-base-zh-cn (default diarizer embedding)

  • [Fact] GitHub release speaker-recongition-models (sic): created 2023-12-08, body "This release contains speaker recognition models for sherpa-onnx. Each model has its own license. Please see the corresponding repository for the specific license of a given model." Asset 3dspeaker_speech_eres2net_base_sv_zh-cn_3dspeaker_16k.onnx: 39,593,761 bytes, updated_at 2024-10-14T03:41:16Z, no digest field.
  • [Fact] ModelScope API https://modelscope.cn/api/v1/models/iic/speech_eres2net_base_sv_zh-cn_3dspeaker_16k: License: "Apache License 2.0", Revision: "master", last updated 1692869850 (2023-08-24 UTC).
  • [Inference] The asset was replaced or uploaded ten months after its release was created, which shows concretely that the tag-based URL in src/yazses/recimport/download.py:26-28 can serve different bytes over time.
  • Resolution: licence stated, apache-2.0, with as_stated quoting the ModelScope field and the release's "each model has its own license" notice. Revision stays tag.

3. Summary

Manifest id Proposed licence Proposed revision Source(s), read 2026-11-06
openai--whisper-large apache-2.0 (stated) git-commit 4ef9b41f0d4fe232daafdb5f76bb1dd8b23e01d7 (2024-02-29) Hub API + README
silero-vad-package mit (stated) package-version silero-vad 6.2.3 (uv.lock) PyPI JSON; GitHub licence API
silero-vad-v6-faster-whisper-bundled mit (stated, option a) or unknown (option b) unchanged faster-whisper v1.2.1 tree; both licence APIs
l2cs-net unknown, with reason unknown, with reason GitHub licence APIs, README, PyPI l2cs
mediapipe-face-landmarker-float16 apache-2.0 (stated) unchanged (float16/1) 3 Google model cards; HEAD
sherpa-onnx-pyannote-segmentation-3-0 mit (stated) unchanged (tag) Hub mirror LICENSE + README; release API
3dspeaker-eres2net-base-zh-cn apache-2.0 (stated) unchanged (tag) ModelScope API; release API

Six of seven licence gaps close with a quoted source; l2cs-net stays unknown with a reason. Two of three revision gaps close; l2cs-net stays unknown with a reason. Every apache-2.0/mit id is already in the schema's closed enum, so no schema edit is needed.

4. Proposed manifest diff (apply tomorrow, with the inventory edit)

[Proposal] The validator requires every Hub id, revision and hash in the manifest to be quoted whole in design/hci-huggingface/model-provenance.md (scripts/check_model_manifest.py:10). So each change below needs the same value written into the inventory row first (model-provenance.md:78/:142 for whisper-large; :109 sherpa segmentation and :110 3D-Speaker; :111-112 Silero; :113 MediaPipe; :114 L2CS-Net. :108 is the upstream pyannote row, which is not a gap), with "observed 2026-11-06" and the source URL. Leave inventory_date alone unless the reviewer re-dates the whole inventory; each changed revision carries its own observed_on.

 "id": "openai--whisper-large",
-"license": {"status": "unknown", "as_stated": "Not verified (not fetched)"},
-"revision": {"kind": "unknown", "pinned_by_yazses": false},
+"license": {"status": "stated", "id": "apache-2.0",
+  "as_stated": "apache-2.0 (Hub tag and README front matter, read 2026-11-06). The Systran conversion says mit"},
+"revision": {"kind": "git-commit", "value": "4ef9b41f0d4fe232daafdb5f76bb1dd8b23e01d7",
+  "observed_on": "2026-11-06", "last_modified": "2024-02-29", "pinned_by_yazses": false},

 "id": "silero-vad-package",
-"license": {"status": "unknown", "as_stated": "Not verified"},
-"revision": {"kind": "unknown", "pinned_by_yazses": false},
+"license": {"status": "stated", "id": "mit",
+  "as_stated": "MIT (PyPI classifier for silero-vad 6.2.3; snakers4/silero-vad LICENSE via the GitHub licence API, read 2026-11-06)"},
+"revision": {"kind": "package-version", "value": "silero-vad 6.2.3 (uv.lock; pyproject floor >=5.1.2)",
+  "observed_on": "2026-11-06", "pinned_by_yazses": false},

 "id": "silero-vad-v6-faster-whisper-bundled",
-"license": {"status": "unknown", "as_stated": "Not verified in this pass (...)"},
+"license": {"status": "stated", "id": "mit",
+  "as_stated": "MIT is both the faster-whisper repository licence and the snakers4/silero-vad licence (GitHub licence API, read 2026-11-06); faster-whisper states no separate licence for assets/silero_vad_v6.onnx"},

 "id": "l2cs-net",
-"license": {"status": "unknown", "as_stated": "Not verified"},
+"license": {"status": "unknown",
+  "as_stated": "Repository code is MIT (Ahmednull/L2CS-Net and edavalosanaya/L2CS-Net, read 2026-11-06); the weights are on Google Drive with no stated licence. PyPI 'l2cs' is an unrelated project (Lucene to CloudSearch)"},
 (revision stays {"kind": "unknown", "pinned_by_yazses": false}; the reason goes in the inventory row, since the schema forbids a value on an unknown revision)

 "id": "mediapipe-face-landmarker-float16",
-"license": {"status": "unknown", "as_stated": "Not verified. No licence or terms page was read"},
+"license": {"status": "stated", "id": "apache-2.0",
+  "as_stated": "Apache License 2.0 on the Face Mesh V2, Blendshape V2 and BlazeFace (short range) model cards linked from the Face Landmarker guide, read 2026-11-06; no statement covers the .task container itself"},

 "id": "sherpa-onnx-pyannote-segmentation-3-0",
-"license": {"status": "unknown", "as_stated": "Not verified for the conversion. (...)"},
+"license": {"status": "stated", "id": "mit",
+  "as_stated": "MIT (Copyright 2022 CNRS) in the LICENSE of the Hub mirror csukuangfj/sherpa-onnx-pyannote-segmentation-3-0, read 2026-11-06; the release asset states none, and the tarball was not compared with the mirror"},

 "id": "3dspeaker-eres2net-base-zh-cn",
-"license": {"status": "unknown", "as_stated": "Not verified for the weights. (...)"},
+"license": {"status": "stated", "id": "apache-2.0",
+  "as_stated": "Apache License 2.0 (ModelScope API License field for iic/speech_eres2net_base_sv_zh-cn_3dspeaker_16k, read 2026-11-06); the sherpa-onnx release says each model has its own licence"},

csukuangfj/sherpa-onnx-pyannote-segmentation-3-0 is a Hub id and its sha 9403a6902bb58e3d5ae8c7e77c3422de279db2e0 would be a new Hub reference; quote both in the inventory row if the reviewer adds them to the manifest text.

5. Follow-ups for #694 (proposals, not implemented)

  1. [Proposal] File an issue for the l2cs backend (§2.4): the install hint names an unrelated PyPI package, and weights=None cannot load. Fix the hint (git URL or drop the backend) and require an explicit weights path. Code change, needs its own tests.
  2. [Proposal] Pinning stays a #694 follow-up, as before. All 54 rows remain pinned_by_yazses: false. For the two GitHub release assets and the MediaPipe bundle, a recorded sha256 checked after download would protect against the asset replacement §2.7 shows is possible; recording it requires downloading the files once, which was not done tonight. This is runtime behaviour (L3) and is not proposed for this change.
  3. [Proposal] Re-run uv run python scripts/check_model_manifest.py and uv run python -m pytest tests/test_model_manifest.py -v after applying §4.

Sources (all read 2026-11-06, unauthenticated)

  • https://huggingface.co/api/models/openai/whisper-large and /raw/main/README.md
  • https://pypi.org/pypi/silero-vad/json ; https://api.github.com/repos/snakers4/silero-vad/license
  • https://api.github.com/repos/SYSTRAN/faster-whisper/contents/faster_whisper/assets?ref=v1.2.1 ; https://raw.githubusercontent.com/SYSTRAN/faster-whisper/v1.2.1/faster_whisper/vad.py ; https://api.github.com/repos/SYSTRAN/faster-whisper/license
  • https://pypi.org/pypi/l2cs/json ; https://api.github.com/repos/Ahmednull/L2CS-Net/license ; https://github.com/Ahmednull/L2CS-Net (README, l2cs/pipeline.py) ; https://github.com/edavalosanaya/L2CS-Net (l2cs/pipeline.py, licence API)
  • https://developers.google.com/edge/mediapipe/solutions/vision/face_landmarker ; the three model cards under https://storage.googleapis.com/mediapipe-assets/ ; https://api.github.com/repos/google-ai-edge/mediapipe/license
  • https://api.github.com/repos/k2-fsa/sherpa-onnx/releases/tags/speaker-segmentation-models ; https://huggingface.co/csukuangfj/sherpa-onnx-pyannote-segmentation-3-0 ; https://huggingface.co/api/models/pyannote/segmentation-3.0
  • https://api.github.com/repos/k2-fsa/sherpa-onnx/releases/tags/speaker-recongition-models ; https://modelscope.cn/api/v1/models/iic/speech_eres2net_base_sv_zh-cn_3dspeaker_16k