From 019e4a45582b2c7e1a1967e0d37ed71a73a285e1 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Tue, 17 Oct 2023 15:40:06 -0700 Subject: [PATCH 1/2] image: show parameters --- server/images.go | 51 ++++++++++++++---------------------------------- 1 file changed, 15 insertions(+), 36 deletions(-) diff --git a/server/images.go b/server/images.go index 8fa9e5af..cf1ecf5b 100644 --- a/server/images.go +++ b/server/images.go @@ -898,51 +898,28 @@ func DeleteModel(name string) error { } func ShowModelfile(model *Model) (string, error) { - type modelTemplate struct { + var mt struct { *Model - From string - Params string + From string + Parameters []string } - var params []string for k, v := range model.Options { - switch val := v.(type) { - case string: - params = append(params, fmt.Sprintf("PARAMETER %s %s", k, val)) - case int: - params = append(params, fmt.Sprintf("PARAMETER %s %s", k, strconv.Itoa(val))) - case float64: - params = append(params, fmt.Sprintf("PARAMETER %s %s", k, strconv.FormatFloat(val, 'f', 0, 64))) - case bool: - params = append(params, fmt.Sprintf("PARAMETER %s %s", k, strconv.FormatBool(val))) + switch v := v.(type) { case []interface{}: - for _, nv := range val { - switch nval := nv.(type) { - case string: - params = append(params, fmt.Sprintf("PARAMETER %s %s", k, nval)) - case int: - params = append(params, fmt.Sprintf("PARAMETER %s %s", k, strconv.Itoa(nval))) - case float64: - params = append(params, fmt.Sprintf("PARAMETER %s %s", k, strconv.FormatFloat(nval, 'f', 0, 64))) - case bool: - params = append(params, fmt.Sprintf("PARAMETER %s %s", k, strconv.FormatBool(nval))) - default: - log.Printf("unknown type: %s", reflect.TypeOf(nv).String()) - } + for _, nv := range v { + mt.Parameters = append(mt.Parameters, fmt.Sprintf("%s %v", k, nv)) } default: - log.Printf("unknown type: %s", reflect.TypeOf(v).String()) + mt.Parameters = append(mt.Parameters, fmt.Sprintf("%s %v", k, v)) } } - mt := modelTemplate{ - Model: model, - From: model.OriginalModel, - Params: strings.Join(params, "\n"), - } + mt.Model = model + mt.From = model.ModelPath - if mt.From == "" { - mt.From = model.ModelPath + if model.OriginalModel != "" { + mt.From = model.OriginalModel } modelFile := `# Modelfile generated by "ollama show" @@ -959,8 +936,10 @@ SYSTEM """{{ .System }}""" {{- range $adapter := .AdapterPaths }} ADAPTER {{ $adapter }} {{- end }} -{{ .Params }} -` + +{{- range $parameter := .Parameters }} +PARAMETER {{ $parameter }} +{{- end }}` tmpl, err := template.New("").Parse(modelFile) if err != nil { From 4dcceeffb7ad9bd656c11c43c8112195f78e6bf8 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Tue, 17 Oct 2023 15:53:46 -0700 Subject: [PATCH 2/2] let the template do the work --- server/images.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/server/images.go b/server/images.go index cf1ecf5b..80018efd 100644 --- a/server/images.go +++ b/server/images.go @@ -901,18 +901,17 @@ func ShowModelfile(model *Model) (string, error) { var mt struct { *Model From string - Parameters []string + Parameters map[string][]any } + mt.Parameters = make(map[string][]any) for k, v := range model.Options { - switch v := v.(type) { - case []interface{}: - for _, nv := range v { - mt.Parameters = append(mt.Parameters, fmt.Sprintf("%s %v", k, nv)) - } - default: - mt.Parameters = append(mt.Parameters, fmt.Sprintf("%s %v", k, v)) + if s, ok := v.([]any); ok { + mt.Parameters[k] = s + continue } + + mt.Parameters[k] = []any{v} } mt.Model = model @@ -937,8 +936,10 @@ SYSTEM """{{ .System }}""" ADAPTER {{ $adapter }} {{- end }} -{{- range $parameter := .Parameters }} -PARAMETER {{ $parameter }} +{{- range $k, $v := .Parameters }} +{{- range $parameter := $v }} +PARAMETER {{ $k }} {{ printf "%#v" $parameter }} +{{- end }} {{- end }}` tmpl, err := template.New("").Parse(modelFile)