For engineering teams
Know which external models your code loads, and which revision.
Find every Hugging Face model your code loads, see which revision it uses, and know whether an upstream change can reach you.
- Never runs your code
- Pinned, floating or unknown
- Informational GitHub check
$ pindiff audit . Scanning project for Hugging Face model dependencies... Found 3 Hugging Face dependencies in 42 Python files: ✓ 1 pinned to a specific revision ⚠ 1 using floating revisions ? 1 with unknown revision or repository STATUS REPOSITORY REVISION ✓ PINNED example-org/chat-7b 3f9a2c1 ⚠ FLOATING example-org/embed-large main (default) ? UNKNOWN MODEL_NAME (dynamic) (unknown)
- Hugging FacePublic model repositories
- No weight downloadsUses file hashes and sizes
- Static analysisYour code is never executed
- Metadata onlyRepo ids, revisions, file:line
How it works for your team
-
1
Find model dependencies in code
Run pindiff audit in a repository. It reads Python files without running them.
- Detects from_pretrained(), snapshot_download() and hf_hub_download()
- Picks up Hugging Face model URLs
- Runtime values like MODEL_NAME are reported as unknown, never guessed
1from transformers import AutoModel2from huggingface_hub import snapshot_download34chat = AutoModel.from_pretrained("example-org/chat-7b", revision="3f9a2c1")Pinned5embed = snapshot_download("example-org/embed-large")Floating6clf = AutoModel.from_pretrained(MODEL_NAME)UnknownRead only. Nothing in this file is executed.
Example -
2
Record the revision you use
Every dependency gets one of three revision states.
- Pinned: an exact commit that cannot move
- Floating: main, a branch or a tag that can move later
- Unknown: no revision, or one set at runtime
Pinnedrevision="3f9a2c1"An exact commit. It always points to the same files.
Floatingmain · v1.2 · no revisionCan resolve to a newer commit on the next download.
? Unknownrevision=REVSet at runtime. Record the revision to see your exposure.
Example -
3
See your exposure, not a risk score
The same upstream change means different things for different revisions.
- Upstream significance and your exposure are shown separately
- Pinned to an earlier commit: no automatic effect
- Following main: potentially affected on the next download
Upstream change Weights changed in example-org/chat-7b Critical significanceapi/ uses Pinned 3f9a2c1 No automatic effectYour recorded revision remains pinned to 3f9a2c1.
Review before upgrading.worker/ uses Floating main Potentially affectedA future download may retrieve the newer upstream revision.
Review the change, or pin an exact revision.Example -
4
Review exactly what changed
Changes are summarised by category, with stored before-and-after evidence.
- Weights by file name, hash and size
- Licence, remote code, access and model card
- Each change links to its evidence page
- Weights 2 files changed
- Model card Modified
- Licence Unchanged
- Remote code Unchanged
- Access Unchanged
model-00001-of-00002.safetensorsa41c…9e02→ 7d3b…11fa 4.97 GBmodel-00002-of-00002.safetensorsc88e…04b1→ 2f6a…d93c 3.12 GBExample -
5
Report it in GitHub Actions
The PinDiff Action writes a dependency check to the job summary on each pull request.
- Scans the checkout locally and needs only contents: read
- Sends dependency metadata, not source code
- Never fails a build because a dependency is floating or changed
PinDiff Model Dependency Check
3 dependencies detected
✓example-org/chat-7bpinned: 3f9a2c1⚠example-org/embed-largefloating: mainupstream: model weights changed?MODEL_NAME (dynamic)unknown: revision not determinedExample
Not available yet
- Email alerts and digests Coming soon
- Shared team workspaces Coming soon
- Webhooks Coming soon
- Slack notifications Coming soon
Inviting teammates to a workspace is not available yet.
Start with the models your services already load.
The Free plan covers up to 10 models, each with its recorded revision. Paid plans raise the limit.
Already have an account? Sign in