Skip to content

Weight integrity: downloaded == validated

oh-my-mlip records, for each model it has actually validated, the fingerprint of the exact checkpoint that validation ran against: weights_sha256 (+ weights_size) on that version in models.json. This lets a user confirm that the weight file they fetched from an official channel is byte-identical to the one we validated — not a silently re-uploaded or diverged file.

Every checkpoint comes from its official channel (HF, Zenodo, figshare, GitHub release). For CC-BY-4.0 weights whose official host is unreliable, a byte-identical mirror is used only as a fallback, and it is held to the same recorded size and checksum (see model licenses). The fingerprint is the bridge between "the official source" and "the thing oh-my-mlip validated."

What the check means

Result Meaning
matches-validated The downloaded file's sha256 equals the recorded weights_sha256. You have the exact checkpoint we validated.
MISMATCH A fingerprint is recorded but the downloaded file differs. Either the official source diverged (re-upload / different export) or you fetched the wrong file. Do not assume validated accuracy.
fingerprint-pending No weights_sha256 recorded for this model (see below). Nothing to compare.
file-not-found A path was supplied but does not exist.

A fingerprint-pending is not a failure — it is an honest "we have not pinned this one yet." Only an explicit MISMATCH (or a missing supplied file) exits non-zero.

Running the check

# whole-registry table (recorded fingerprints; nothing downloaded/hashed)
python scripts/verify_weights_integrity.py

# check one downloaded file against a model's recorded fingerprint
python scripts/verify_weights_integrity.py --model MACE-MPA-0 --file /path/to/weights

The script is GPU-free (stdlib json + hashlib only) and never imports torch/ase/conda.

What is recorded today

Run this to see the current state:

python scripts/verify_weights_integrity.py

At the time of writing, 16 of the 32 model variants carry a fingerprint and 16 are fingerprint-pending. A model is pending when there is no single file to pin: the weights ship inside the framework's package or are resolved by name into the framework's own cache, or the loadable file is produced on your machine.

PET-OAM-XL is an example of the last case: only a .ckpt is published, and mtt export turns it into the .pt used for inference. That export is not byte-reproducible, so no fingerprint is recorded for it.