mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 08:23:15 +01:00
fix: update gguf data to be GGUFFileHeader
Signed-off-by: Christopher Phillips <32073428+spiffcs@users.noreply.github.com>
This commit is contained in:
parent
c689dcfeef
commit
64dc451345
@ -27,7 +27,7 @@ func AllTypes() []any {
|
||||
pkg.ELFBinaryPackageNoteJSONPayload{},
|
||||
pkg.ElixirMixLockEntry{},
|
||||
pkg.ErlangRebarLockEntry{},
|
||||
pkg.GGUFFileMetadata{},
|
||||
pkg.GGUFFileHeader{},
|
||||
pkg.GitHubActionsUseStatement{},
|
||||
pkg.GolangBinaryBuildinfoEntry{},
|
||||
pkg.GolangModuleEntry{},
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -55,7 +55,7 @@ func Test_OriginatorSupplier(t *testing.T) {
|
||||
pkg.OpamPackage{},
|
||||
pkg.YarnLockEntry{},
|
||||
pkg.TerraformLockProviderEntry{},
|
||||
pkg.GGUFFileMetadata{},
|
||||
pkg.GGUFFileHeader{},
|
||||
)
|
||||
tests := []struct {
|
||||
name string
|
||||
|
||||
@ -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())
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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),
|
||||
|
||||
@ -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"`
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user