@@ -19,6 +19,7 @@ import (
1919 parser "github.com/gpustack/gguf-parser-go"
2020
2121 "github.com/docker/model-distribution/types"
22+
2223 "github.com/docker/model-runner/pkg/diskusage"
2324 "github.com/docker/model-runner/pkg/inference"
2425 "github.com/docker/model-runner/pkg/inference/config"
@@ -308,19 +309,15 @@ func (l *llamaCpp) parseRemoteModel(ctx context.Context, model string) (*parser.
308309 if err != nil {
309310 return nil , types.Config {}, fmt .Errorf ("getting layers of model(%s): %w" , model , err )
310311 }
311- var ggufDigest v1.Hash
312- for _ , layer := range layers {
313- mt , err := layer .MediaType ()
314- if err != nil {
315- return nil , types.Config {}, fmt .Errorf ("getting media type of model(%s) layer: %w" , model , err )
316- }
317- if mt == types .MediaTypeGGUF {
318- ggufDigest , err = layer .Digest ()
319- if err != nil {
320- return nil , types.Config {}, fmt .Errorf ("getting digest of GGUF layer for model(%s): %w" , model , err )
321- }
322- break
323- }
312+ ggufLayers := getGGUFLayers (layers )
313+ if len (ggufLayers ) != 1 {
314+ return nil , types.Config {}, fmt .Errorf (
315+ "remote memory estimation only supported for models with single GGUF layer, found %d layers" , len (ggufLayers ),
316+ )
317+ }
318+ ggufDigest , err := ggufLayers [0 ].Digest ()
319+ if err != nil {
320+ return nil , types.Config {}, fmt .Errorf ("getting digest of GGUF layer for model(%s): %w" , model , err )
324321 }
325322 if ggufDigest .String () == "" {
326323 return nil , types.Config {}, fmt .Errorf ("model(%s) has no GGUF layer" , model )
@@ -344,6 +341,20 @@ func (l *llamaCpp) parseRemoteModel(ctx context.Context, model string) (*parser.
344341 return mdlGguf , config , nil
345342}
346343
344+ func getGGUFLayers (layers []v1.Layer ) []v1.Layer {
345+ var filtered []v1.Layer
346+ for _ , layer := range layers {
347+ mt , err := layer .MediaType ()
348+ if err != nil {
349+ continue
350+ }
351+ if mt == types .MediaTypeGGUF {
352+ filtered = append (filtered , layer )
353+ }
354+ }
355+ return filtered
356+ }
357+
347358func (l * llamaCpp ) checkGPUSupport (ctx context.Context ) bool {
348359 binPath := l .vendoredServerStoragePath
349360 if l .updatedLlamaCpp {
0 commit comments