DEV Community

Oitrika Bhattacharjee
Oitrika Bhattacharjee

Posted on

Pedigree for Graph Hacks

Following a Hugging Face model's license up its family tree

I built Pedigree for Graph Hacks, a hackathon run by WeMakeDevs and FalkorDB in October 2026. You paste in a Hugging Face model and it follows the model up through the models it was built from. Where something a parent's license asks for seems to have gone missing it says so and shows you the path it walked.

The idea comes from a July 2026 preprint called "Don't Trust the Label" which looks at how licenses go wrong along AI supply chains. Its authors say no existing tool automatically audits licenses along such a chain. As far as I could tell the scanners out there look at one model at a time, so I tried building a small tool that follows the whole chain.

The problem

A fine-tuned model is built on top of another model and the parent's license comes along with it. Meta's Llama 3.2 license, for example, asks for things like a notice and an acceptable use policy and a naming rule. The fine-tune has its own page with its own license field. Sometimes that field says MIT and nothing on the MIT page mentions the notice or the policy. You only see the gap if you open both pages and read them side by side. Real chains can also run longer than two models.

What Pedigree does

You give it a model id like org/name. It reads the public metadata from the Hub (the license and the base model and the declared training datasets) and writes it into a FalkorDB graph. Then it walks up the chain and compares each declared license with what the parent's license asks for. Every flag shows the path it followed and links to the pages it came from so you can check it by hand in a minute. A flag only means someone should take a look. It is not a legal opinion.

The first runs

My first live test was gpt2 because it is old and simple. It came back with an MIT license and no parents and no datasets, which is right for a model with no parent. Then I tried a small chat model. Its card lists four training datasets. One of them, cerebras/SlimPajama-627B, gave me a 404 when I opened it in my browser on October 18. Pedigree reports that as "could not be fetched" and says nothing above it can be verified. Another dataset had the license "other", which Pedigree cannot read, so it says that too and does not call it fine.

I decided early that anything missing or unreadable should count as a risk and never as a pass. A tool that stays quiet when it cannot read something looks cleanest exactly when it knows the least.

One number

On October 18 I read the 60 most downloaded fine-tunes of Llama-3.2-1B. Forty-eight declared a license carrying the same obligations as the parent's. Six declared Apache-2.0 or MIT. Three declared a license Pedigree cannot evaluate and three declared none. I am not naming any of the six. Each one is a lead for a person to check and a flag says nothing about intent. The sample was picked by download count and is not random so it tells you nothing about the Hub as a whole.

Where FalkorDB comes in

Models and datasets and licenses and obligations are all nodes. Edges record who was derived from whom and who was trained on what and which obligations each license carries. A flag is a Cypher pattern. It walks up the lineage for up to six levels and looks for an obligation that the parent's license carries and the child's license does not. The path it walked is the explanation shown to the reader. Without the graph there would be nothing to show for a flag.

Each person who saves a decision gets a separate private graph. A decision stores a snapshot of the lineage as it looked then. Later a re-check takes a fresh snapshot and compares the two so it can say exactly which license changed and where. When a model is checked again its old parent links are deleted first. Model cards change and I did not want the graph to keep a relationship the publisher had removed.

What went wrong

Docker complained at first that its engine was not running. Once that was sorted it refused to pull the FalkorDB image and said a TLS protocol version was not supported. My internet was fine because a plain curl to Docker's servers worked. After I shut down WSL and logged out of Docker the pull went through.

My laptop had Python 3.15 and 3.12 installed. I used 3.12 because 3.15 was new enough that some packages might not have builds for it. I did not try 3.15 so I cannot say it would have failed.

What I did not check

Only the Llama 3 and Llama 3.2 rules were compared with the license text. Every other rule is marked unverified so flags for other licenses are leads and nothing more. The Hub only knows what publishers declare and declarations can be missing or wrong. None of this is legal advice.

Privacy and security

Pedigree reads public model metadata and asks for no personal data. There are no accounts. Your browser keeps a random id and your saved reviews live in a private graph under that id. A Forget button deletes the whole graph. No tokens live in the repository. The site has a privacy policy and a terms page.

How I built it

I set up the database and ran every command on my own machine and tested against live Hugging Face data and made the calls about what to keep.

Related work and thanks

Pedigree is a small tool next to some serious research. The preprint "Don't Trust the Label: License Laundering in AI Supply Chains" (arXiv 2607.20300) describes how licenses go wrong along AI supply chains. "AI Supply Chain Galaxy" (arXiv 2606.16292) is a visual analytics system for license compliance. What Pedigree adds is a path you can read for each flag and a place to keep your decisions and see what changed. Thanks to FalkorDB and WeMakeDevs for the hackathon.

Try it

Code: https://github.com/triixdev/Pedigree

Top comments (0)