๐ค AI Model Information
Name:
{{ aibom.components[0].name if aibom.components else 'Not specified' }}
Type:
{{ aibom.components[0].type if aibom.components else 'Not specified' }}
Version:
{{ aibom.components[0].version if aibom.components else 'Not specified' }}
Description:
{{ aibom.components[0].description if aibom.components and aibom.components[0].description else 'Not specified' }}
PURL:
{{ aibom.components[0].purl if aibom.components and aibom.components[0].purl else 'Not specified' }}
{% if aibom.components and aibom.components[0].licenses %}
Licenses:
{% for license in aibom.components[0].licenses %}
{{ license.license.id if license.license else 'Unknown' }}
{% endfor %}
{% endif %}
{% if aibom.components and aibom.components[0].modelCard %}
๐ Model Card
{% if aibom.components[0].modelCard.modelParameters %}
Architecture:
{{ aibom.components[0].modelCard.modelParameters.modelArchitecture if aibom.components[0].modelCard.modelParameters.modelArchitecture else 'Not specified' }}
Task:
{{ aibom.components[0].modelCard.modelParameters.task if aibom.components[0].modelCard.modelParameters.task else 'Not specified' }}
{% endif %}
{% if aibom.components[0].modelCard.properties %}
Additional Properties:
{% for prop in aibom.components[0].modelCard.properties %}
{{ prop.name }}: {{ prop.value }}
{% endfor %}
{% endif %}
{% endif %}
{% if aibom.externalReferences %}
๐ External References
{% for ref in aibom.externalReferences %}
{% endfor %}
{% endif %}
๐ ๏ธ Generation Metadata
Generated by:
{{ aibom.metadata.tools.components[0].name if aibom.metadata.tools and aibom.metadata.tools.components else 'Unknown' }}
Timestamp:
{{ aibom.metadata.timestamp }}
{% if aibom.metadata.component %}
Component Ref:
{{ aibom.metadata.component['bom-ref'] }}
{% endif %}
Field Checklist & Mapping
Legend
Critical
Important
Supplementary
CDX = CycloneDX Standard
AI = AI-Specific Extension
This breakdown outlines field categories and statuses in the AI SBOM generated for model {{ model_id }}, showing how each field impacts the completeness score.
{% if completeness_score.field_checklist %}
Required Fields Category
Status |
Field Name |
Actual Location |
Tier |
Type |
{% set required_fields = ['bomFormat', 'specVersion', 'serialNumber', 'version'] %}
{% for field in required_fields %}
{% if completeness_score.field_checklist.get(field, '').startswith('โ') %}
โ
{% else %}
โ
{% endif %}
|
{{ field }} |
{% if completeness_score.field_checklist.get(field, '').startswith('โ') %}
$.{{ field }}
{% else %}
Not found
{% endif %}
|
Critical |
CDX |
{% endfor %}
Result: {{ completeness_score.category_details.required_fields.present_fields if completeness_score.category_details else 'N/A' }}/{{ completeness_score.category_details.required_fields.total_fields if completeness_score.category_details else 'N/A' }} present
({{ completeness_score.category_details.required_fields.percentage if completeness_score.category_details else 'N/A' }}%) =
{{ completeness_score.section_scores.required_fields if completeness_score.section_scores else 'N/A' }}/20 points
Metadata Category
Status |
Field Name |
Actual Location |
Tier |
Type |
{% set metadata_fields = [
('primaryPurpose', 'Critical'),
('suppliedBy', 'Critical'),
('standardCompliance', 'Supplementary'),
('domain', 'Supplementary'),
('autonomyType', 'Supplementary')
] %}
{% for field, tier in metadata_fields %}
{% if completeness_score.field_checklist.get(field, '').startswith('โ') %}
โ
{% else %}
โ
{% endif %}
|
{{ field }} |
{% if completeness_score.field_checklist.get(field, '').startswith('โ') %}
$.metadata.properties[name="{{ field }}"]
{% else %}
Not found
{% endif %}
|
{{ tier }} |
AI |
{% endfor %}
Result: {{ completeness_score.category_details.metadata.present_fields if completeness_score.category_details else 'N/A' }}/{{ completeness_score.category_details.metadata.total_fields if completeness_score.category_details else 'N/A' }} present
({{ completeness_score.category_details.metadata.percentage if completeness_score.category_details else 'N/A' }}%) =
{{ completeness_score.section_scores.metadata if completeness_score.section_scores else 'N/A' }}/20 points
Component Basic Category
Status |
Field Name |
Actual Location |
Tier |
Type |
{% set component_basic_fields = [
('name', 'Critical'),
('type', 'Important'),
('purl', 'Important'),
('description', 'Important'),
('licenses', 'Important')
] %}
{% for field, tier in component_basic_fields %}
{% if completeness_score.field_checklist.get(field, '').startswith('โ') %}
โ
{% else %}
โ
{% endif %}
|
{{ field }} |
{% if completeness_score.field_checklist.get(field, '').startswith('โ') %}
$.components[0].{{ field }}
{% else %}
{% if field == 'description' %}
Not found in component level
{% else %}
Not found
{% endif %}
{% endif %}
|
{{ tier }} |
CDX |
{% endfor %}
Result: {{ completeness_score.category_details.component_basic.present_fields if completeness_score.category_details else 'N/A' }}/{{ completeness_score.category_details.component_basic.total_fields if completeness_score.category_details else 'N/A' }} present
({{ completeness_score.category_details.component_basic.percentage if completeness_score.category_details else 'N/A' }}%) =
{{ completeness_score.section_scores.component_basic if completeness_score.section_scores else 'N/A' }}/20 points
Component Model Card Category
Status |
Field Name |
Actual Location |
Tier |
Type |
{% set model_card_fields = [
('energyConsumption', 'Important'),
('hyperparameter', 'Important'),
('limitation', 'Important'),
('safetyRiskAssessment', 'Important'),
('typeOfModel', 'Important'),
('modelExplainability', 'Supplementary'),
('energyQuantity', 'Supplementary'),
('energyUnit', 'Supplementary'),
('informationAboutTraining', 'Supplementary'),
('informationAboutApplication', 'Supplementary'),
('metric', 'Supplementary'),
('metricDecisionThreshold', 'Supplementary'),
('modelDataPreprocessing', 'Supplementary'),
('useSensitivePersonalInformation', 'Supplementary')
] %}
{% for field, tier in model_card_fields %}
{% if completeness_score.field_checklist.get(field, '').startswith('โ') %}
โ
{% else %}
โ
{% endif %}
|
{{ field }} |
{% if completeness_score.field_checklist.get(field, '').startswith('โ') %}
{% if field == 'typeOfModel' %}
$.metadata.properties[name="{{ field }}"]
{% else %}
$.components[0].modelCard.{{ field }}
{% endif %}
{% else %}
Not found
{% endif %}
|
{{ tier }} |
AI |
{% endfor %}
Result: {{ completeness_score.category_details.component_model_card.present_fields if completeness_score.category_details else 'N/A' }}/{{ completeness_score.category_details.component_model_card.total_fields if completeness_score.category_details else 'N/A' }} present
({{ completeness_score.category_details.component_model_card.percentage if completeness_score.category_details else 'N/A' }}%) =
{{ completeness_score.section_scores.component_model_card if completeness_score.section_scores else 'N/A' }}/30 points
External References Category
Status |
Field Name |
Actual Location |
Tier |
Type |
{% set external_ref_fields = [('downloadLocation', 'Critical')] %}
{% for field, tier in external_ref_fields %}
{% if completeness_score.field_checklist.get(field, '').startswith('โ') %}
โ
{% else %}
โ
{% endif %}
|
{{ field }} |
{% if completeness_score.field_checklist.get(field, '').startswith('โ') %}
$.externalReferences[type="distribution"]
{% else %}
Not found
{% endif %}
|
{{ tier }} |
CDX |
{% endfor %}
Result: {{ completeness_score.category_details.external_references.present_fields if completeness_score.category_details else 'N/A' }}/{{ completeness_score.category_details.external_references.total_fields if completeness_score.category_details else 'N/A' }} present
({{ completeness_score.category_details.external_references.percentage if completeness_score.category_details else 'N/A' }}%) =
{{ completeness_score.section_scores.external_references if completeness_score.section_scores else 'N/A' }}/10 points
{% else %}
Field checklist data not available.
{% endif %}
๐ Completeness Score Report
{{ (completeness_score.total_score if completeness_score.total_score != "Undefined" else 0)|round(1) }}/100
{% set score_percent = completeness_score.total_score %}
{% if score_percent >= 90 %}
{% set score_class = 'progress-excellent' %}
{% set score_label = 'Excellent' %}
{% elif score_percent >= 70 %}
{% set score_class = 'progress-good' %}
{% set score_label = 'Good' %}
{% elif score_percent >= 50 %}
{% set score_class = 'progress-fair' %}
{% set score_label = 'Fair' %}
{% else %}
{% set score_class = 'progress-poor' %}
{% set score_label = 'Poor' %}
{% endif %}
{{ score_percent|int }}% {{ score_label }}
Your AI SBOM Breakdown
Model: {{ model_id }}
Category |
Fields Present |
Score |
Progress |
{% if completeness_score.category_details and completeness_score.section_scores %}
{% set categories = [
('Required Fields', 'required_fields', 20),
('Metadata', 'metadata', 20),
('Component Basic', 'component_basic', 20),
('Model Card', 'component_model_card', 30),
('External References', 'external_references', 10)
] %}
{% for display_name, key, max_score in categories %}
{{ display_name }} |
{{ completeness_score.category_details[key].present_fields }}/{{ completeness_score.category_details[key].total_fields }} |
{{ completeness_score.section_scores[key]|round(1) }}/{{ max_score }} |
{% set percentage = completeness_score.category_details[key].percentage %}
{% if percentage >= 80 %}
{% set progress_class = "progress-excellent" %}
{% elif percentage >= 60 %}
{% set progress_class = "progress-good" %}
{% elif percentage >= 40 %}
{% set progress_class = "progress-fair" %}
{% else %}
{% set progress_class = "progress-poor" %}
{% endif %}
{{ percentage|round(0) }}%
|
{% endfor %}
{% else %}
Breakdown data not available |
{% endif %}
Calculation:
Subtotal:
{% if completeness_score.section_scores %}
{% for category, score in completeness_score.section_scores.items() %}
{{ score|round(1) }}{% if not loop.last %} + {% endif %}
{% endfor %}
= {{ completeness_score.subtotal_score|round(1) }}/100
{% else %}
{{ completeness_score.subtotal_score|round(1) }}/100
{% endif %}
{% if completeness_score.penalty_applied %}
Penalty Applied: -{{ completeness_score.penalty_percentage }}% ({{ completeness_score.penalty_reason }})
Final Score: {{ completeness_score.subtotal_score|round(1) }} ร {{ completeness_score.penalty_factor }} = {{ completeness_score.total_score|round(1) }}/100
{% else %}
No penalties applied
Final Score: {{ completeness_score.total_score|round(1) }}/100
{% endif %}
{% if completeness_score.missing_counts %}
Missing Fields Summary
- Critical: {{ completeness_score.missing_counts.critical }} missing
- Important: {{ completeness_score.missing_counts.important }} missing
- Supplementary: {{ completeness_score.missing_counts.supplementary }} missing
{% if completeness_score.missing_counts.important >= 5 %}
Impact: Missing multiple critical and/or important fields will incur penalties according to the Penalty Structure.
{% endif %}
{% endif %}
{% if completeness_score.recommendations %}
General Recommendations to Improve AI SBOM Completeness
- Required Fields: Ensure the model is published with a clear name, version, and hosting platform information to allow proper SBOM structuring.
- Metadata: Include author or organization name, purpose of the model, and relevant timestamps in the model repository or card.
- Component Basic: Provide a descriptive model title, a meaningful description, a valid license, and a consistent version reference (e.g., tags or commits).
- Model Card: Fill out structured sections for model parameters, evaluation metrics, limitations, and ethical considerations to enable full transparency.
- External References: Add links to source code, datasets, documentation, and versioned download locations to support traceability and reproducibility.
How AI SBOM Completeness is Scored
The completeness score evaluates how well your AI SBOM documents the model across five key categories:
- Required Fields (20 points): Basic SBOM structure mandated by CycloneDX
- Metadata (20 points): Information about the SBOM generation and model purpose
- Component Basic (20 points): Essential model identification and licensing
- Model Card (30 points): Detailed AI-specific documentation for transparency
- External References (10 points): Links to model resources and documentation
Calculation Method:
Each category score = (Present Fields รท Total Fields) ร Maximum Points
Subtotal = Sum of all category scores
Final Score = Subtotal ร Penalty Factor (if applicable)
Penalty Structure:
Critical Fields Missing:
- 0-1 missing: No penalty
- 2-3 missing: 10% penalty (ร0.9)
- 4+ missing: 20% penalty (ร0.8)
Important Fields Missing:
- 0-4 missing: No penalty
- 5+ missing: 5% penalty (ร0.95)
Note: Penalties are cumulative and applied to the subtotal. For example, if you have 3 critical fields missing AND 5 important fields missing, both penalties apply: Subtotal ร 0.9 ร 0.95 = Final Score.
{% endif %}