From 64dc4513450e047c4c4021621e7315e46109cf85 Mon Sep 17 00:00:00 2001 From: Christopher Phillips <32073428+spiffcs@users.noreply.github.com> Date: Wed, 22 Oct 2025 13:20:23 -0400 Subject: [PATCH] fix: update gguf data to be GGUFFileHeader Signed-off-by: Christopher Phillips <32073428+spiffcs@users.noreply.github.com> --- internal/packagemetadata/generated.go | 2 +- internal/packagemetadata/names.go | 2 +- .../spdxutil/helpers/originator_supplier_test.go | 2 +- syft/pkg/cataloger/ai/cataloger_test.go | 10 +++++----- syft/pkg/cataloger/ai/package.go | 4 ++-- syft/pkg/cataloger/ai/package_test.go | 12 ++++++------ syft/pkg/cataloger/ai/parse_gguf_model.go | 2 +- syft/pkg/gguf.go | 4 ++-- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/internal/packagemetadata/generated.go b/internal/packagemetadata/generated.go index 02d0de5fe..7178662f7 100644 --- a/internal/packagemetadata/generated.go +++ b/internal/packagemetadata/generated.go @@ -27,7 +27,7 @@ func AllTypes() []any { pkg.ELFBinaryPackageNoteJSONPayload{}, pkg.ElixirMixLockEntry{}, pkg.ErlangRebarLockEntry{}, - pkg.GGUFFileMetadata{}, + pkg.GGUFFileHeader{}, pkg.GitHubActionsUseStatement{}, pkg.GolangBinaryBuildinfoEntry{}, pkg.GolangModuleEntry{}, diff --git a/internal/packagemetadata/names.go b/internal/packagemetadata/names.go index 712c8d3df..8862571bf 100644 --- a/internal/packagemetadata/names.go +++ b/internal/packagemetadata/names.go @@ -124,7 +124,7 @@ var jsonTypes = makeJSONTypes( jsonNames(pkg.TerraformLockProviderEntry{}, "terraform-lock-provider-entry"), jsonNames(pkg.DotnetPackagesLockEntry{}, "dotnet-packages-lock-entry"), jsonNames(pkg.CondaMetaPackage{}, "conda-metadata-entry", "CondaPackageMetadata"), - jsonNames(pkg.GGUFFileMetadata{}, "gguf-file-metadata"), + jsonNames(pkg.GGUFFileHeader{}, "gguf-file-metadata"), ) func expandLegacyNameVariants(names ...string) []string { diff --git a/syft/format/internal/spdxutil/helpers/originator_supplier_test.go b/syft/format/internal/spdxutil/helpers/originator_supplier_test.go index 1494accd2..ed32427a0 100644 --- a/syft/format/internal/spdxutil/helpers/originator_supplier_test.go +++ b/syft/format/internal/spdxutil/helpers/originator_supplier_test.go @@ -55,7 +55,7 @@ func Test_OriginatorSupplier(t *testing.T) { pkg.OpamPackage{}, pkg.YarnLockEntry{}, pkg.TerraformLockProviderEntry{}, - pkg.GGUFFileMetadata{}, + pkg.GGUFFileHeader{}, ) tests := []struct { name string diff --git a/syft/pkg/cataloger/ai/cataloger_test.go b/syft/pkg/cataloger/ai/cataloger_test.go index 9dc9e80b2..131a08da1 100644 --- a/syft/pkg/cataloger/ai/cataloger_test.go +++ b/syft/pkg/cataloger/ai/cataloger_test.go @@ -117,7 +117,7 @@ func TestGGUFCataloger_Integration(t *testing.T) { Licenses: pkg.NewLicenseSet( pkg.NewLicenseFromFields("Apache-2.0", "", nil), ), - Metadata: pkg.GGUFFileMetadata{ + Metadata: pkg.GGUFFileHeader{ ModelFormat: "gguf", ModelName: "llama3-8b", ModelVersion: "3.0", @@ -166,7 +166,7 @@ func TestGGUFCataloger_Integration(t *testing.T) { Name: "model1", Version: "1.0", Type: pkg.ModelPkg, - Metadata: pkg.GGUFFileMetadata{ + Metadata: pkg.GGUFFileHeader{ ModelFormat: "gguf", ModelName: "model1", ModelVersion: "1.0", @@ -182,7 +182,7 @@ func TestGGUFCataloger_Integration(t *testing.T) { Name: "model2", Version: "2.0", Type: pkg.ModelPkg, - Metadata: pkg.GGUFFileMetadata{ + Metadata: pkg.GGUFFileHeader{ ModelFormat: "gguf", ModelName: "model2", ModelVersion: "2.0", @@ -219,7 +219,7 @@ func TestGGUFCataloger_Integration(t *testing.T) { Name: "qwen-nested", Version: unknownGGUFData, Type: pkg.ModelPkg, - Metadata: pkg.GGUFFileMetadata{ + Metadata: pkg.GGUFFileHeader{ ModelFormat: "gguf", ModelName: "qwen-nested", ModelVersion: unknownGGUFData, @@ -248,7 +248,7 @@ func TestGGUFCataloger_Integration(t *testing.T) { IgnorePackageFields("FoundBy", "Locations"). // These are set by the cataloger WithCompareOptions( // Ignore Hash as it's computed dynamically - cmpopts.IgnoreFields(pkg.GGUFFileMetadata{}, "Hash"), + cmpopts.IgnoreFields(pkg.GGUFFileHeader{}, "Hash"), ) tester.TestCataloger(t, NewGGUFCataloger()) diff --git a/syft/pkg/cataloger/ai/package.go b/syft/pkg/cataloger/ai/package.go index 8bf7477fe..44b6edc7f 100644 --- a/syft/pkg/cataloger/ai/package.go +++ b/syft/pkg/cataloger/ai/package.go @@ -10,7 +10,7 @@ import ( "github.com/anchore/syft/syft/pkg" ) -func newGGUFPackage(metadata *pkg.GGUFFileMetadata, locations ...file.Location) pkg.Package { +func newGGUFPackage(metadata *pkg.GGUFFileHeader, locations ...file.Location) pkg.Package { // Compute hash if not already set if metadata.Hash == "" { metadata.Hash = computeMetadataHash(metadata) @@ -38,7 +38,7 @@ func newGGUFPackage(metadata *pkg.GGUFFileMetadata, locations ...file.Location) } // computeMetadataHash computes a stable hash of the metadata for use as a global identifier -func computeMetadataHash(metadata *pkg.GGUFFileMetadata) string { +func computeMetadataHash(metadata *pkg.GGUFFileHeader) string { // Create a stable representation of the metadata hashData := struct { Format string diff --git a/syft/pkg/cataloger/ai/package_test.go b/syft/pkg/cataloger/ai/package_test.go index 11d0c9fd4..c8a660eef 100644 --- a/syft/pkg/cataloger/ai/package_test.go +++ b/syft/pkg/cataloger/ai/package_test.go @@ -13,13 +13,13 @@ import ( func TestNewGGUFPackage(t *testing.T) { tests := []struct { name string - metadata *pkg.GGUFFileMetadata + metadata *pkg.GGUFFileHeader locations []file.Location checkFunc func(t *testing.T, p pkg.Package) }{ { name: "complete GGUF package with all fields", - metadata: &pkg.GGUFFileMetadata{ + metadata: &pkg.GGUFFileHeader{ ModelFormat: "gguf", ModelName: "llama3-8b-instruct", ModelVersion: "3.0", @@ -45,7 +45,7 @@ func TestNewGGUFPackage(t *testing.T) { }, { name: "minimal GGUF package", - metadata: &pkg.GGUFFileMetadata{ + metadata: &pkg.GGUFFileHeader{ ModelFormat: "gguf", ModelName: "simple-model", ModelVersion: "1.0", @@ -64,7 +64,7 @@ func TestNewGGUFPackage(t *testing.T) { }, { name: "GGUF package with multiple locations", - metadata: &pkg.GGUFFileMetadata{ + metadata: &pkg.GGUFFileHeader{ ModelFormat: "gguf", ModelName: "multi-location-model", ModelVersion: "1.5", @@ -91,8 +91,8 @@ func TestNewGGUFPackage(t *testing.T) { assert.Equal(t, pkg.ModelPkg, p.Type) // Verify metadata is attached - metadata, ok := p.Metadata.(pkg.GGUFFileMetadata) - require.True(t, ok, "metadata should be GGUFFileMetadata") + metadata, ok := p.Metadata.(pkg.GGUFFileHeader) + require.True(t, ok, "metadata should be GGUFFileHeader") assert.Equal(t, *tt.metadata, metadata) if tt.checkFunc != nil { diff --git a/syft/pkg/cataloger/ai/parse_gguf_model.go b/syft/pkg/cataloger/ai/parse_gguf_model.go index 92e8f9ca7..f3b38ac54 100644 --- a/syft/pkg/cataloger/ai/parse_gguf_model.go +++ b/syft/pkg/cataloger/ai/parse_gguf_model.go @@ -59,7 +59,7 @@ func parseGGUFModel(_ context.Context, _ file.Resolver, _ *generic.Environment, metadata := ggufFile.Metadata() // Convert to syft metadata structure - syftMetadata := &pkg.GGUFFileMetadata{ + syftMetadata := &pkg.GGUFFileHeader{ ModelFormat: "gguf", ModelName: metadata.Name, ModelVersion: extractVersion(ggufFile.Header.MetadataKV), diff --git a/syft/pkg/gguf.go b/syft/pkg/gguf.go index f9582b563..271f6123d 100644 --- a/syft/pkg/gguf.go +++ b/syft/pkg/gguf.go @@ -1,9 +1,9 @@ package pkg -// GGUFFileMetadata represents metadata extracted from a GGUF (GPT-Generated Unified Format) model file. +// GGUFFileHeader represents metadata extracted from a GGUF (GPT-Generated Unified Format) model file. // GGUF is a binary file format used for storing model weights for the GGML library, designed for fast // loading and saving of models, particularly quantized large language models. -type GGUFFileMetadata struct { +type GGUFFileHeader struct { // ModelFormat is always "gguf" ModelFormat string `json:"modelFormat" cyclonedx:"modelFormat"`