From 3bc9d42e2eff8c8f6f80c886ea2fdbed9adfd76a Mon Sep 17 00:00:00 2001 From: ParthSareen Date: Thu, 3 Apr 2025 17:23:38 -0700 Subject: [PATCH] rebase + fix tests --- server/images.go | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/server/images.go b/server/images.go index e779193c7..97e80fae7 100644 --- a/server/images.go +++ b/server/images.go @@ -16,7 +16,6 @@ import ( "net/url" "os" "path/filepath" - "regexp" "runtime" "slices" "strconv" @@ -263,7 +262,7 @@ func GetModel(name string) (*Model, error) { return nil, err } - model := &Model{ + m := &Model{ Name: mp.GetFullTagname(), ShortName: mp.GetShortTagname(), Digest: digest, @@ -282,7 +281,7 @@ func GetModel(name string) (*Model, error) { } defer configFile.Close() - if err := json.NewDecoder(configFile).Decode(&model.Config); err != nil { + if err := json.NewDecoder(configFile).Decode(&m.Config); err != nil { return nil, err } } @@ -295,16 +294,16 @@ func GetModel(name string) (*Model, error) { switch layer.MediaType { case "application/vnd.ollama.image.model": - model.ModelPath = filename - model.ParentModel = layer.From + m.ModelPath = filename + m.ParentModel = layer.From case "application/vnd.ollama.image.embed": // Deprecated in versions > 0.1.2 // TODO: remove this warning in a future version slog.Info("WARNING: model contains embeddings, but embeddings in modelfiles have been deprecated and will be ignored.") case "application/vnd.ollama.image.adapter": - model.AdapterPaths = append(model.AdapterPaths, filename) + m.AdapterPaths = append(m.AdapterPaths, filename) case "application/vnd.ollama.image.projector": - model.ProjectorPaths = append(model.ProjectorPaths, filename) + m.ProjectorPaths = append(m.ProjectorPaths, filename) case "application/vnd.ollama.image.prompt", "application/vnd.ollama.image.template": bts, err := os.ReadFile(filename) @@ -312,7 +311,7 @@ func GetModel(name string) (*Model, error) { return nil, err } - model.Template, err = template.Parse(string(bts)) + m.Template, err = template.Parse(string(bts)) if err != nil { return nil, err } @@ -322,7 +321,7 @@ func GetModel(name string) (*Model, error) { return nil, err } - model.System = string(bts) + m.System = string(bts) case "application/vnd.ollama.image.params": params, err := os.Open(filename) if err != nil { @@ -331,7 +330,7 @@ func GetModel(name string) (*Model, error) { defer params.Close() // parse model options parameters into a map so that we can see which fields have been specified explicitly - if err = json.NewDecoder(params).Decode(&model.Options); err != nil { + if err = json.NewDecoder(params).Decode(&m.Options); err != nil { return nil, err } case "application/vnd.ollama.image.messages": @@ -341,7 +340,7 @@ func GetModel(name string) (*Model, error) { } defer msgs.Close() - if err = json.NewDecoder(msgs).Decode(&model.Messages); err != nil { + if err = json.NewDecoder(msgs).Decode(&m.Messages); err != nil { return nil, err } case "application/vnd.ollama.image.license": @@ -349,21 +348,22 @@ func GetModel(name string) (*Model, error) { if err != nil { return nil, err } - model.License = append(model.License, string(bts)) + m.License = append(m.License, string(bts)) } } - if model.Template != nil && model.CheckCapabilities(CapabilityTools) == nil { - model.addToolPrefix() + capabilities := m.Capabilities() + if slices.Contains(capabilities, model.CapabilityTools) { + m.addToolPrefix() } - return model, nil + return m, nil } // HasToolPrefix checks if the completion starts with the tool prefix, ignoring whitespace func (m *Model) HasToolPrefix(sb strings.Builder) bool { - text := regexp.MustCompile(`\s+`).ReplaceAllString(sb.String(), "") - toolString := regexp.MustCompile(`\s+`).ReplaceAllString(m.ToolPrefix, "") + text := strings.ReplaceAll(strings.TrimSpace(sb.String()), " ", "") + toolString := strings.ReplaceAll(strings.TrimSpace(m.ToolPrefix), " ", "") if len(text) < len(toolString) { return text == toolString[:len(text)]