diff --git a/server/images.go b/server/images.go index 88d7a206..5ae8d008 100644 --- a/server/images.go +++ b/server/images.go @@ -896,51 +896,27 @@ 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 map[string][]any } - var params []string + mt.Parameters = make(map[string][]any) 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))) - 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()) - } - } - default: - log.Printf("unknown type: %s", reflect.TypeOf(v).String()) + if s, ok := v.([]any); ok { + mt.Parameters[k] = s + continue } + + mt.Parameters[k] = []any{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" @@ -957,8 +933,12 @@ SYSTEM """{{ .System }}""" {{- range $adapter := .AdapterPaths }} ADAPTER {{ $adapter }} {{- end }} -{{ .Params }} -` + +{{- range $k, $v := .Parameters }} +{{- range $parameter := $v }} +PARAMETER {{ $k }} {{ printf "%#v" $parameter }} +{{- end }} +{{- end }}` tmpl, err := template.New("").Parse(modelFile) if err != nil {