From 06ef90c051d0637bd46d9339d6829fe4c7641cd6 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Tue, 5 Sep 2023 11:05:03 -0700 Subject: [PATCH] fix parameter inheritence parameters are not inherited because they are processed differently from other layer. fix this by explicitly merging the inherited params into the new params. parameter values defined in the new modelfile will override those defined in the inherited modelfile. array lists are replaced instead of appended --- server/images.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/server/images.go b/server/images.go index 186a38c2..cc284510 100644 --- a/server/images.go +++ b/server/images.go @@ -276,6 +276,7 @@ func CreateModel(ctx context.Context, name string, path string, fn func(resp api var layers []*LayerReader params := make(map[string][]string) + var sourceParams map[string]any embed := EmbeddingParams{fn: fn} for _, c := range commands { log.Printf("[%s] - %s\n", c.Name, c.Args) @@ -359,6 +360,23 @@ func CreateModel(ctx context.Context, name string, path string, fn func(resp api config.FileType = source.FileType for _, l := range mf.Layers { + if l.MediaType == "application/vnd.ollama.image.params" { + sourceParamsBlobPath, err := GetBlobsPath(l.Digest) + if err != nil { + return err + } + + sourceParamsBlob, err := os.Open(sourceParamsBlobPath) + if err != nil { + return err + } + defer sourceParamsBlob.Close() + + if err := json.NewDecoder(sourceParamsBlob).Decode(&sourceParams); err != nil { + return err + } + } + newLayer, err := GetLayerWithBufferFromLayer(l) if err != nil { return err @@ -436,6 +454,12 @@ func CreateModel(ctx context.Context, name string, path string, fn func(resp api return fmt.Errorf("couldn't create params json: %v", err) } + for k, v := range sourceParams { + if _, ok := formattedParams[k]; !ok { + formattedParams[k] = v + } + } + bts, err := json.Marshal(formattedParams) if err != nil { return err