Explore an AI-BOM Interactively
See what is inside an AI-BOM with our free visualizer. Upload a CycloneDX ML-BOM or SPDX 3.0.1 AI Profile file, or load the built-in sample, to walk the model and dataset lineage.
Try AI-BOM VisualizerWhat an AI-BOM is
An AI Bill of Materials is a structured inventory of everything an AI system is built from. Not just the Python packages, but the datasets that trained it, the weight files it loads, the base model it was fine-tuned from, the prompts and guardrails wrapped around it, and the services it calls at inference time.
The reason this needs its own document is that a model's behavior is not determined by its source code. Two training runs over the same code and different data produce different systems. If a corpus contains subtle poisoning perturbations, the weights that come out will pass every build test and then behave differently on a specific trigger in production. Nothing in a traditional SBOM would record that the corpus was involved.
The practical test
An incident lands on your desk saying a model is producing biased or leaked output. Can you name, within minutes, every dataset that went into it, which base model it inherited, and what else in your estate shares those ancestors? If not, you need an AI-BOM.
AI-BOM vs SBOM
An AI-BOM does not replace your SBOM. Your inference service still ships ordinary libraries with ordinary CVEs. It covers the layer underneath, where the risks are statistical rather than syntactic.
| Dimension | Traditional SBOM | AI-BOM / ML-BOM |
|---|---|---|
| Core artifacts | Source files, compiled binaries, transitive packages (npm, PyPI, Maven), container layers. | Datasets, weight tensors (.safetensors, .gguf, .pt), prompt templates, MCP configs, fine-tuning scripts. |
| Primary threats | Known CVEs, typosquatting, dependency confusion, malicious library injection. | Data poisoning, weight tampering, prompt injection, model inversion, training data extraction, bias. |
| Basis for verification | SHA-256 digests of source archives and build outputs. | Digests of weight files, dataset partition hashes, training seed logs, signed attestations. |
| Failure mode | Deterministic. A crash, or an exploited code path. | Stochastic. Drift, hallucination, biased inference, a safety constraint quietly bypassed. |
| Governing rules | Executive Order 14028, NTIA minimum elements, ISO/IEC 5230. | EU AI Act Articles 10 and 13, CISA SBOM for AI, NIST AI RMF 1.0, ISO/IEC 42001. |
| Standards | CycloneDX 1.4, SPDX 2.3. | CycloneDX 1.5 to 1.7 (ML-BOM), SPDX 3.0.1 (AI and Dataset profiles). |
Already have an SBOM to explore? The SBOM Visualizer handles SPDX 2.3 and CycloneDX files.
What goes inside one
An enterprise-grade AI-BOM covers four areas. Skip any one of them and the document stops being useful during an incident.
Model metadata
Canonical identity, architecture (transformer, ResNet50), provider, version, model card, and measured performance such as accuracy, word error rate, or context window bounds.
Dataset metadata
Dataset identity, train and validation split ratios, license, sourcing provenance, bias annotations, preprocessing steps, and storage hashes.
Relationships
Directional assertions between components: trainedOn, testedOn, derivedFrom for fine-tuning ancestors, and dependsOn for runtime software.
Configuration and runtime
Hyperparameters (learning rate, batch size, loss function), GPU architecture and driver versions, guardrail settings, and build toolchains.
CycloneDX vs SPDX 3.0.1
Two open standards cover this ground. OWASP CycloneDX added machine-learning-model and data as first-class component types in 1.5, with a detailed modelCard structure carrying model parameters, quantitative analysis, and considerations. SPDX 3.0.1 moved to an RDF graph model serialized as JSON-LD, where an AIModel element and a Dataset element are joined by explicit Relationship assertions.
Both are fine. Choose on what the document is for rather than on technical merit.
| Feature | CycloneDX 1.6 / 1.7 | SPDX 3.0.1 AI Profile |
|---|---|---|
| Data model | Hierarchical JSON or XML with cross-referencing bom-ref keys. | Directed RDF graph, serialized as JSON-LD, Turtle, or RDF/XML. |
| Focus | Security tooling, vulnerability and VEX correlation, MLOps pipelines. | Licensing compliance, granular IP tracking, cross-industry interoperability. |
| Model card | Embedded modelCard object inside a machine-learning-model component. | A dedicated ai_AIModel class inheriting from the core software element. |
| Datasets | Components of type "data", linked through modelParameters.datasets[].ref. | dataset_Dataset elements from the Dataset profile. |
| Lineage | pedigree.ancestors on the fine-tuned component. | Relationship elements asserting trainedOn, testedOn, or foundationFor between spdxIds. |
| Tooling | cdxgen, cyclonedx-cli, OWASP Dependency-Track. | spdx-tools, the SPDX 3 Python SDK, SHACL validators. |
How to generate one
Hand-written AI-BOMs go stale within a sprint. The document has to come out of the pipeline that produces the model, at the four points below.
Training and export
Hook the checkpoint writer. When weights land on disk, hash the file, record the dataset versions and their hashes, capture hyperparameters and the base model reference, and emit the document alongside the artifact.
Registry publication
Before a model is pushed to a registry, validate the document against the official CycloneDX or SPDX JSON schema in CI. A malformed AI-BOM fails the job, exactly as a failing test would.
Signing and attestation
Sign the validated document with Ed25519 or RSA so consumers can check it was produced by your pipeline and not edited afterwards. Store the signature next to the artifact.
Continuous verification
Re-check the recorded digests against what is actually deployed on a schedule. A drift between the two means something was retrained or replaced without going through the pipeline.
Emitting the model component
The core of it is small. Hash the weights, attach the dataset reference and the ancestor, and write the component out. Call this from your checkpoint callback so the hash always matches the file that was actually written.
import hashlib, json, datetime
def sha256(path):
h = hashlib.sha256()
with open(path, "rb") as f:
for chunk in iter(lambda: f.read(1024 * 1024), b""):
h.update(chunk)
return h.hexdigest()
def model_component(weights_path, name, version, base_model, dataset_ref, hyperparams):
return {
"bom-ref": f"model-{name}-{version}",
"type": "machine-learning-model",
"name": name,
"version": version,
"hashes": [{"alg": "SHA-256", "content": sha256(weights_path)}],
"licenses": [{"license": {"id": "Apache-2.0"}}],
"pedigree": {"ancestors": [base_model]},
"modelCard": {
"modelParameters": {
"approach": {"type": "supervised"},
"task": "text-generation",
"datasets": [{"ref": dataset_ref}],
},
"properties": [
{"name": k, "value": str(v)} for k, v in hyperparams.items()
],
},
}
# Call this from your checkpoint callback, not from a script you run later.
bom = {
"bomFormat": "CycloneDX",
"specVersion": "1.7",
"version": 1,
"metadata": {"timestamp": datetime.datetime.utcnow().isoformat() + "Z"},
"components": [model_component(...)],
"dependencies": [],
}
print(json.dumps(bom, indent=2))If you would rather not write the emitter, cdxgen and the OWASP CycloneDX tooling can produce ML-BOM documents from a project, spdx-tools and the SPDX 3 Python SDK cover the SPDX side, and OWASP Dependency-Track will ingest and track the results over time.
One caution on generated documents
A tool can only record what it can see. Dataset provenance, licensing, and fairness assessments usually have to be supplied by the team that ran the training. Check the output for empty considerations and undeclared licenses before you publish it.
Minimum viable AI-BOM
If you are starting from nothing, capture these ten fields first. They are the ones an auditor asks for and the ones that make an incident traceable.
Who asks for this
EU AI Act, Articles 10 and 13
Data governance records covering training, validation, and test datasets, plus technical documentation detailed enough for a deployer to understand the system. High-risk systems only, but the definition is broader than most teams expect. Read more
NIST AI RMF 1.0
Continuous inventorying and provenance tracking across the Govern, Map, Measure, and Manage functions. The Map function is essentially an AI-BOM requirement written in prose.
CISA SBOM for AI
Guidance for buyers: demand machine-readable BOM artifacts covering base models, datasets, and runtime environments from your AI vendors.
ISO/IEC 42001
Requires an AI management system that manages third-party ML component risk and verifies data integrity across the lifecycle.
How Prismor helps
Prismor generates AI-BOMs at every checkpoint export, verifies weight hashes against your registry, and keeps model and dataset lineage current across every pipeline you run. The free visualizer reads one file. The platform keeps the whole estate documented without anyone remembering to.
Frequently Asked Questions
An AI Bill of Materials is a machine-readable inventory of everything an AI system is assembled from: training and fine-tuning datasets, model weights, base models it was derived from, frameworks, prompt templates, guardrail configurations, deployment services, and hardware requirements. It records the hashes, versions, licenses, and relationships between all of them so the system can be audited and reproduced later.