Aetheris AI Logo

AI SBOM Generator

๐Ÿ“‹ AI SBOM Summary for model {{ model_id }}

Model: {{ model_id }}
Generated: {{ aibom.metadata.timestamp }}
SBOM Format: {{ aibom.bomFormat }} {{ aibom.specVersion }}
Serial Number: {{ aibom.serialNumber }}

Download your AI SBOM:

{% if completeness_score.completeness_profile %}

๐Ÿ“Š Completeness Assessment

{{ completeness_score.completeness_profile.name }} {{ completeness_score.completeness_profile.description }}
{% endif %}
Human-Friendly View
Field Checklist
Score Report
JSON View

๐Ÿค– 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 %}
{{ ref.type|title }}: {{ ref.url }}
{% 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

{% set required_fields = ['bomFormat', 'specVersion', 'serialNumber', 'version'] %} {% for field in required_fields %} {% endfor %}
Status Field Name Actual Location Tier Type
{% 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
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

{% set metadata_fields = [ ('primaryPurpose', 'Critical'), ('suppliedBy', 'Critical'), ('standardCompliance', 'Supplementary'), ('domain', 'Supplementary'), ('autonomyType', 'Supplementary') ] %} {% for field, tier in metadata_fields %} {% endfor %}
Status Field Name Actual Location Tier Type
{% 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
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

{% set component_basic_fields = [ ('name', 'Critical'), ('type', 'Important'), ('purl', 'Important'), ('description', 'Important'), ('licenses', 'Important') ] %} {% for field, tier in component_basic_fields %} {% endfor %}
Status Field Name Actual Location Tier Type
{% 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
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

{% 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 %} {% endfor %}
Status Field Name Actual Location Tier Type
{% 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
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

{% set external_ref_fields = [('downloadLocation', 'Critical')] %} {% for field, tier in external_ref_fields %} {% endfor %}
Status Field Name Actual Location Tier Type
{% 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
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 }}

{% 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 %} {% endfor %} {% else %} {% endif %}
Category Fields Present Score Progress
{{ 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) }}%
Breakdown data not available

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 %}

๐Ÿ“„ Raw JSON View

This is the complete AI SBOM in CycloneDX JSON format:

{{ aibom|tojson(indent=2) }}

๐Ÿ› ๏ธ Need Help or Found an Issue?

If you encountered any problems, found a bug, or have suggestions for improvement, we'd love to hear from you!

Report Issue on GitHub

๐Ÿ—ฃ๏ธ Help Us Spread the Word

If you find this tool useful, share it with your network! https://sbom.aetheris.ai

Follow us for updates: @Aetheris AI

๐Ÿš€ Generated AI SBOMs using this tool: {{ sbom_count if sbom_count else 'N/A' }}