Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
83122da
refactor: generate CycloneDX BOMs using cyclonedx-python-lib
saquibsaifee Mar 1, 2026
616f6ec
Merge branch 'v0.2' into refactor-bom-generation-to-use-cyclonedx-pyt…
saquibsaifee Mar 1, 2026
0d12800
Merge pull request #65 from saquibsaifee/refactor-bom-generation-to-u…
eaglei15 Mar 2, 2026
520e91c
Revert "refactor: generate CycloneDX BOMs using cyclonedx-python-lib"
eaglei15 Mar 2, 2026
dc31236
Merge pull request #68 from GenAI-Security-Project/revert-65-refactor…
eaglei15 Mar 2, 2026
93e5347
feat: add safetensors hyperparameter extraction with GGUF parity
afogel Mar 9, 2026
d496b7e
feat: adding logic to enable use with earlier supported python versions
Mar 25, 2026
13bd8f9
refactor(logging): replace print statements with structured logging
emmanuelgjr Apr 13, 2026
d49cce0
Merge branch 'GenAI-Security-Project:main' into refactor-bom-generati…
saquibsaifee Apr 15, 2026
65fc113
refactor(validation): replace manual jsonschema with cyclonedx-python…
saquibsaifee Apr 16, 2026
0c79f5d
refactor(scoring): replace manual jsonschema validator with cyclonedx…
saquibsaifee Apr 16, 2026
7d0ac83
refactor(license_utils): replace license-expression lib with cycloned…
saquibsaifee Apr 16, 2026
cb31d90
refactor(service): use LicenseFactory and ToolRepository; fix _genera…
saquibsaifee Apr 16, 2026
4a2d4dc
refactor(extractor): remove duplicate LICENSE_MAPPINGS; reuse license…
saquibsaifee Apr 16, 2026
bec6a6b
chore: remove bundled JSON schemas; drop jsonschema and license-expre…
saquibsaifee Apr 16, 2026
ade22c2
docs: update README and CONTRIBUTING to reflect cyclonedx-python-lib …
saquibsaifee Apr 16, 2026
e32a88c
Merge branch 'v0.2' into refactor-bom-generation-to-use-cyclonedx-pyt…
saquibsaifee Apr 16, 2026
016e7bd
fix: restore _create_aibom_structure after bad v0.2 merge conflict re…
saquibsaifee Apr 16, 2026
88acb88
chore(deps): add missing httpx and ruff to requirements.txt
saquibsaifee Apr 16, 2026
b988d41
Merge pull request #70 from afogel/safetensors_extract_hyperparameters
eaglei15 Apr 20, 2026
4df60bf
Merge pull request #73 from emmanuelgjr/refactor/16-structured-logging
eaglei15 Apr 20, 2026
7b5d5b7
Merge PR #70: safetensors hyperparameter extraction
saquibsaifee Apr 22, 2026
38d6c68
Merge commit '4df60bf' into refactor-bom-generation-to-use-cyclonedx-…
saquibsaifee Apr 22, 2026
7ce04fd
Merge pull request #75 from saquibsaifee/refactor-bom-generation-to-u…
eaglei15 Apr 27, 2026
c27768d
Merge pull request #79 from GenAI-Security-Project/v0.2
eaglei15 May 11, 2026
8ecfe47
Add regression guardrails and runner tooling
e2hln Jun 24, 2026
cee789f
Fix cleanup output behavior and regressions
e2hln Jun 24, 2026
443c2dd
Fix CLI output file contract
e2hln Jun 26, 2026
9e98c2c
Merge pull request #83 from e2hln/v0.2
eaglei15 Jun 27, 2026
4da0039
Merge pull request #72 from mini-moose/fix/71-python-version-compatib…
eaglei15 Jun 27, 2026
14eb00b
Merge pull request #84 from GenAI-Security-Project/integ
eaglei15 Jun 27, 2026
3f43e94
fix(scoring): detect externalReferences under components[0] on v0.2 (…
Rul1an Jun 27, 2026
95b2bb3
feat: Add training data transparency flags with HF Hub verification
adityamulik May 16, 2026
7db0271
feat(distribution): add model_file_size and runtime_requirement metadata
eaglei15 Jul 20, 2026
cd37d7c
feat(summarizer): fix prompt-leak, swap to BART, add optional Ollama …
eaglei15 Jul 20, 2026
fa5fb67
Merge pull request #86 from eaglei15/v0.2-distribution-and-summarizer
e2hln Jul 20, 2026
036acfb
Merge pull request #85 from Rul1an/fix/external-references-scoring-v0.2
eaglei15 Jul 20, 2026
2ae7503
Merge branch 'v0.2' into feat/training-data-transparency
eaglei15 Jul 20, 2026
82c7af3
Merge pull request #81 from adityamulik/feat/training-data-transparency
eaglei15 Jul 20, 2026
6d1cee5
fix(tests): mock hf_api in training-data tests in TestProcessLicenses
eaglei15 Jul 20, 2026
91da584
Merge pull request #87 from GenAI-Security-Project/v0.2
eaglei15 Jul 20, 2026
6448f41
Merge remote-tracking branch 'upstream/main' into resolve-88
eaglei15 Jul 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .codex/skills/regression-suite/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Regression Suite

Use this skill after implementation changes in this repository.

## Required Checks

- After every implementation change, run targeted regression at minimum:
`.\.venv\Scripts\python.exe scripts\dev\run_regression_suite.py --mode targeted`
- Before staging or committing, run full or pre-stage regression:
`.\.venv\Scripts\python.exe scripts\dev\run_regression_suite.py --mode full`
or
`.\.venv\Scripts\python.exe scripts\dev\run_regression_suite.py --mode pre-stage`
- Use pytest through the runner. Do not rely only on `unittest discover`.
- Never hide test failures. Report the exact command, exit status, and failing check.
- Never stage or commit unless the user explicitly asks.

## Decision Guidance

- Small localized fix: run targeted mode.
- Controller, output, formatter, schema, or validation fix: run targeted mode and make sure output-contract tests are included.
- Broad model, service, schema, or cross-path change: run full mode.
- Before commit or staging: run pre-stage mode.

## Manual Smoke Reminder

Real Hugging Face generation remains optional and manual because the automated regression suite is offline and deterministic. Mention this residual integration risk in final responses when relevant.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ __pycache__/
.env
venv/
.venv/
.venv-*/
env/
dist/
build/
Expand Down
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ import json
import logging

# Third-party
import requests
from cyclonedx.model.bom import Bom
from huggingface_hub import HfApi

# Local imports
Expand Down Expand Up @@ -124,7 +124,6 @@ aibom-generator/
│ │ ├── validation.py # CycloneDX 1.6 schema validation
│ │ ├── license_utils.py # License normalization
│ │ └── analytics.py # Usage tracking
│ ├── schemas/ # JSON schemas (CycloneDX, SPDX)
│ └── templates/ # HTML templates
├── tests/ # Unit and integration tests
└── requirements.txt
Expand All @@ -135,7 +134,8 @@ aibom-generator/

- **Service-oriented architecture**: Core logic lives in `models/service.py`
- **Registry-driven fields**: Field definitions from `models/registry.py`
- **CycloneDX 1.6 compliance**: All AIBOMs validate against the schema
- **CycloneDX Python Library**: BOM serialization, schema validation, and SPDX license handling delegate to [`cyclonedx-python-lib`](https://github.com/CycloneDX/cyclonedx-python-lib) — avoid manual JSON construction for anything the library supports
- **CycloneDX 1.6 compliance**: All AIBOMs validate against the schema via the library's built-in `JsonValidator`
- **Completeness scoring**: Quality metrics in `models/scoring.py`

## Running Tests
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ The tool is also listed in the official **[CycloneDX Tool Center](https://cyclon
- Calculates **AIBOM completeness scoring** with recommendations
- Supports metadata extraction from model cards, configurations, and repository files

> **Built on [CycloneDX Python Library](https://github.com/CycloneDX/cyclonedx-python-lib)** — BOM generation, schema validation, and SPDX license handling are all powered by the official `cyclonedx-python-lib`, ensuring spec-compliant output without manual JSON construction.

---

## 🛠 Features
Expand Down
8 changes: 6 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,14 @@ classifiers = [
]
dependencies = [
"beautifulsoup4>=4.11.0",
"cyclonedx-python-lib[json-validation]>=11.7.0",
"datasets>=2.0.0",
"fastapi>=0.104.0",
"flask>=2.3.0",
"gunicorn>=21.2.0",
"httpx>=0.25.0",
"huggingface_hub>=0.19.0",
"jinja2>=3.0.0",
"jsonschema>=4.17.0",
"license-expression>=30.4.4",
"packageurl-python>=0.11.1",
"pydantic>=2.4.0",
"python-multipart",
Expand All @@ -36,6 +35,7 @@ dependencies = [
"torch>=2.0.0",
"transformers>=4.36.0",
"uvicorn>=0.24.0",
"safetensors>=0.4.0",
]

[project.optional-dependencies]
Expand Down Expand Up @@ -71,5 +71,9 @@ pythonpath = [

[dependency-groups]
dev = [
"pytest>=7.0.0",
"pytest-cov>=4.0.0",
"pytest-mock>=3.10.0",
"ruff",
"gguf>=0.6.0",
]
Loading
Loading