Some checks failed
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Successful in 3m1s
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Successful in 4s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 6s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 5s
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Successful in 1m27s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 6s
joule-code conformance gate / joule-moq-relay, every target (pull_request) Successful in 2m15s
wai cross-architecture byte-equality / does this change touch it (pull_request) Successful in 5s
WAI conformance / does this change touch it (pull_request) Successful in 5s
WAI energy receipts / does this change touch it (pull_request) Successful in 4s
WAI HTTP delivery / WAI HTTP · does this change touch it (pull_request) Successful in 4s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been skipped
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 5s
wai-quantum studio and desktop / does this change touch it (pull_request) Successful in 4s
wai-web wasm32 / does this change touch it (pull_request) Successful in 5s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 54s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m51s
wai cross-architecture byte-equality / linux-x86_64 (pull_request) Successful in 31s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m29s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m28s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 32s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 10m0s
wai-pack / wai-pack · linux (pull_request) Successful in 1m31s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 2m36s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 19m4s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 4m3s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 1m58s
wai cross-architecture byte-equality / linux-aarch64 (pull_request) Successful in 40s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 9m28s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 51s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Failing after 4m46s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 23s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 50s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m22s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 8m59s
wai cross-architecture byte-equality / macos-arm64 (reference) (pull_request) Successful in 25s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 9m22s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 8s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 19m25s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 3m48s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 2m22s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 3m9s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 36s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m13s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 16m51s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 4m45s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 1m9s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 27m13s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 50s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m43s
wai-pack / wai-pack · macos (pull_request) Successful in 1m7s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m4s
The Internet-Draft (xml2rfc v3 source and its text rendering) for WAI as an MSF packaging: the "wai" and "wai-receipts" packaging values; the envelope, dispatch with fallback, the parameter-set pin by SHA-256 and the determinism tiers; catalog fields wai_capabilities, wai_determinism, wai_priors, the receipts fields and wai_staged; the receipts track (WJR1), its verification and the WAI_RECEIPT object property; the codecs parameter; security and IANA considerations (WAI_RECEIPT requested from the Specification Required range, 0x3A41 meanwhile; no action for the packaging values; application/wai registered). 36 pages; idnits 3.3.0 reports only the three normative references to Internet-Drafts. Not submitted, and the NMSF comment is not sent: both are the owner's decision. Author email is a placeholder until the owner confirms it. Co-Authored-By: Claude Opus 5.5 <[email protected]>
98 lines
5.2 KiB
Markdown
98 lines
5.2 KiB
Markdown
# Comment on `draft-herz-moq-nmsf-01`: a model digest and a determinism field
|
|
|
|
> Status: draft comment for the authors of `draft-herz-moq-nmsf-01` and the moq list.
|
|
> **Not sent.** Sending it is the owner's decision. Section numbers below are those of
|
|
> `draft-herz-moq-nmsf-01` unless another document is named.
|
|
|
|
Thank you for the draft. Two catalog fields would let a subscriber check two things
|
|
the current text leaves to agreement between the endpoints: which model weights a
|
|
track needs, and whether a decoder on another device reproduces what the encoder's
|
|
context assumes. Both proposals are small and OPTIONAL, and neither changes the
|
|
object wire format of §3.2.
|
|
|
|
## 1. A model digest
|
|
|
|
§3.9's `modelVersion` is a version string. Two endpoints can hold different weights
|
|
under the same string, through a fine-tune, a re-export or a quantised variant. A
|
|
learned decoder run against weights other than the encoder's does not fail: it
|
|
produces a plausible picture that is wrong.
|
|
|
|
Proposal: an OPTIONAL `modelDigest` member in the `nvc` object, the SHA-256 of the
|
|
weights' bytes as 64 lowercase hexadecimal digits, with two rules:
|
|
|
|
- a subscriber that holds no weights with that digest SHOULD NOT subscribe, which
|
|
extends §3.9's existing "SHOULD NOT subscribe" rule to a check a subscriber can
|
|
make;
|
|
- a decoder MUST NOT decode a track against weights whose digest differs.
|
|
|
|
Where the weights span several files (networks, entropy tables), the digest can
|
|
cover a listing of per-file digests. The WAI specification defines one form for such
|
|
a listing: one line per file, giving its SHA-256 and its path, in byte order of the
|
|
paths. A checksum utility can verify it without WAI software (WAI `SPEC.md` §3.1,
|
|
"What the digest covers").
|
|
|
|
## 2. A determinism field
|
|
|
|
§4.6 has the encoder run the synthesis transform so that its context buffer "contains
|
|
exactly the same data that a decoder would produce". That holds only where the
|
|
decoder computes the same values as the encoder, on whatever device it runs:
|
|
|
|
- **Entropy decode.** §4.2 step 4 entropy-decodes the latent with CDF parameters
|
|
derived from the decoded hyperprior. If that derivation runs in floating point, two
|
|
devices can derive different parameters from one bitstream, select different
|
|
distributions, and decode different symbols from then on.
|
|
- **Context.** §4.1 feeds each reconstructed frame back as the next frame's context.
|
|
Where the reconstruction differs between devices, the difference carries forward
|
|
until the next Intra frame. Where the entropy model also reads that context (a
|
|
temporal prior), the entropy decode itself diverges.
|
|
|
|
Floating-point basic operations are correctly rounded, but runtimes choose
|
|
accumulation order, fused multiply-add, vector width and reduced precision per
|
|
device, so the same network does not in general give the same bits on two devices.
|
|
|
|
Proposal: an OPTIONAL `entropyDeterminism` member in the `nvc` object, with two
|
|
values:
|
|
|
|
- `integer-exact`: the decoder derives every entropy-coding parameter in integer or
|
|
fixed-point arithmetic, or reads it from the bitstream, and so decodes the same
|
|
symbols on every device;
|
|
- `unchecked`: no such guarantee is made. This is the meaning when the member is
|
|
absent.
|
|
|
|
A codec whose whole decode, synthesis and context included, is integer could also
|
|
state that, so that a subscriber knows the reconstructed frames themselves reproduce.
|
|
WAI names these two levels `entropy-consistency` and `decode-equivalence`, and
|
|
explains why parameter transmission reaches the first but not the second
|
|
(`extensions/determinism-tiers.md` §2).
|
|
|
|
Both levels are attainable in practice. WAI registers learned decoders whose
|
|
hyper-decoder, entropy-parameter derivation and synthesis are integer
|
|
(`wai.neural.int_hyper`, and `wai.video.int_hyper` for integer motion-compensated
|
|
P-frames after such a keyframe). The repository's CI decodes their committed test
|
|
vectors on Linux x86_64, Linux arm64 and macOS arm64, and requires the same output
|
|
hashes on each (`extensions/determinism-tiers.md` §6). Those vectors are small, and
|
|
the full-scale model is checked against its exporter's integer reference on one
|
|
machine per run.
|
|
|
|
## 3. Integrity, for completeness
|
|
|
|
§8 relies on hop-by-hop TLS. TLS protects each hop, but not a payload against a relay
|
|
that alters it. A publisher signature per group, over the hashes of the group's
|
|
objects, carried on a separate track, lets a subscriber detect alteration across
|
|
relays and account for objects a relay dropped. If that is of interest, the WAI
|
|
receipts track defines one way to do it (`draft-charlot-moq-wai-packaging-00` §6;
|
|
`extensions/jwp-receipts.md` §2 and §3).
|
|
|
|
## Pointers
|
|
|
|
- WAI `SPEC.md` §3.1: the parameter-set pin, by SHA-256 over the whole set, its
|
|
verification order and its refusal reasons.
|
|
- `extensions/determinism-tiers.md` §2 and §3: the two tiers and what each lets a
|
|
receiver hash.
|
|
- `extensions/moq-streaming-format.md` §4 and §4.2: catalog fields that declare a
|
|
track's capabilities, its weakest tier, and the parameter sets its objects pin, by
|
|
digest.
|
|
- `draft-charlot-moq-wai-packaging-00` (in preparation): the same, as an MSF packaging.
|
|
|
|
All in the WAI repository: https://git.transaction.science/Transaction-Science/open-standards
|
|
(directory `wai/`).
|