From 1bee2347bedb0ea43d15ffc42b481cb9a4804aea Mon Sep 17 00:00:00 2001 From: Bruce MacDonald Date: Tue, 8 Aug 2023 16:56:48 -0400 Subject: [PATCH] pr feedback - defer closing llm on embedding - do not override licenses - remove debugging print line - reformat model file docs --- docs/modelfile.md | 18 +----------------- server/images.go | 21 +++++++++++++++++---- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/docs/modelfile.md b/docs/modelfile.md index 77dd765b..a90cbc0d 100644 --- a/docs/modelfile.md +++ b/docs/modelfile.md @@ -103,9 +103,7 @@ EMBED The `PARAMETER` instruction defines a parameter that can be set when the model is run. ``` - PARAMETER - ``` ### Valid Parameters and Values @@ -139,25 +137,19 @@ PARAMETER | `{{ .First }}` | A boolean value used to render specific template information for the first generation of a session. | ``` - TEMPLATE """ {{- if .First }} - ### System: - {{ .System }} {{- end }} ### User: - {{ .Prompt }} ### Response: - """ SYSTEM """""" - ``` ### SYSTEM @@ -165,9 +157,7 @@ SYSTEM """""" The `SYSTEM` instruction specifies the system prompt to be used in the template, if applicable. ``` - SYSTEM """""" - ``` ### LICENSE @@ -175,18 +165,12 @@ SYSTEM """""" The `LICENSE` instruction allows you to specify the legal license under which the model used with this Modelfile is shared or distributed. ``` - LICENSE """ """ - ``` ## Notes - the **modelfile is not case sensitive**. In the examples, we use uppercase for instructions to make it easier to distinguish it from arguments. -- Instructions can be in any order. In the examples, we start with FROM instruction to keep it easily readable. - -``` - -``` +- Instructions can be in any order. In the examples, we start with FROM instruction to keep it easily readable. \ No newline at end of file diff --git a/server/images.go b/server/images.go index fe41c9be..5796d2f4 100644 --- a/server/images.go +++ b/server/images.go @@ -303,13 +303,23 @@ func CreateModel(name string, path string, fn func(resp api.ProgressResponse)) e } } case "embed": - // TODO: support entire directories here embedFilePath, err := filenameWithPath(path, c.Args) if err != nil { return err } embed.files = append(embed.files, embedFilePath) - case "license", "template", "system", "prompt": + case "license": + fn(api.ProgressResponse{Status: fmt.Sprintf("creating model %s layer", c.Name)}) + mediaType := fmt.Sprintf("application/vnd.ollama.image.%s", c.Name) + + layer, err := CreateLayer(strings.NewReader(c.Args)) + if err != nil { + return err + } + + layer.MediaType = mediaType + layers = append(layers, layer) + case "template", "system", "prompt": fn(api.ProgressResponse{Status: fmt.Sprintf("creating model %s layer", c.Name)}) // remove the prompt layer if one exists mediaType := fmt.Sprintf("application/vnd.ollama.image.%s", c.Name) @@ -354,8 +364,6 @@ func CreateModel(name string, path string, fn func(resp api.ProgressResponse)) e embed.opts.FromMap(formattedParams) } - fmt.Println(embed.model) - // generate the embedding layers embeddingLayers, err := embeddingLayers(embed) if err != nil { @@ -426,6 +434,11 @@ func embeddingLayers(e EmbeddingParams) ([]*LayerReader, error) { if err != nil { return nil, fmt.Errorf("load model to generate embeddings: %v", err) } + defer func() { + if llm != nil { + llm.Close() + } + }() addedFiles := make(map[string]bool) // keep track of files that have already been added for _, filePattern := range e.files {