fix: update gguf data to be GGUFFileHeader

Signed-off-by: Christopher Phillips <32073428+spiffcs@users.noreply.github.com>
This commit is contained in:
Christopher Phillips 2025-10-22 13:20:23 -04:00
parent c689dcfeef
commit 64dc451345
No known key found for this signature in database
8 changed files with 19 additions and 19 deletions

View File

@ -27,7 +27,7 @@ func AllTypes() []any {
pkg.ELFBinaryPackageNoteJSONPayload{},
pkg.ElixirMixLockEntry{},
pkg.ErlangRebarLockEntry{},
pkg.GGUFFileMetadata{},
pkg.GGUFFileHeader{},
pkg.GitHubActionsUseStatement{},
pkg.GolangBinaryBuildinfoEntry{},
pkg.GolangModuleEntry{},

View File

@ -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 {

View File

@ -55,7 +55,7 @@ func Test_OriginatorSupplier(t *testing.T) {
pkg.OpamPackage{},
pkg.YarnLockEntry{},
pkg.TerraformLockProviderEntry{},
pkg.GGUFFileMetadata{},
pkg.GGUFFileHeader{},
)
tests := []struct {
name string

View File

@ -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())

View File

@ -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

View File

@ -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 {

View File

@ -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),

View File

@ -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"`