|
@@ -896,51 +896,27 @@ func DeleteModel(name string) error {
|
|
}
|
|
}
|
|
|
|
|
|
func ShowModelfile(model *Model) (string, error) {
|
|
func ShowModelfile(model *Model) (string, error) {
|
|
- type modelTemplate struct {
|
|
|
|
|
|
+ var mt struct {
|
|
*Model
|
|
*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 {
|
|
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 := modelTemplate{
|
|
|
|
- Model: model,
|
|
|
|
- From: model.OriginalModel,
|
|
|
|
- Params: strings.Join(params, "\n"),
|
|
|
|
|
|
+ mt.Parameters[k] = []any{v}
|
|
}
|
|
}
|
|
|
|
|
|
- if mt.From == "" {
|
|
|
|
- mt.From = model.ModelPath
|
|
|
|
|
|
+ mt.Model = model
|
|
|
|
+ mt.From = model.ModelPath
|
|
|
|
+
|
|
|
|
+ if model.OriginalModel != "" {
|
|
|
|
+ mt.From = model.OriginalModel
|
|
}
|
|
}
|
|
|
|
|
|
modelFile := `# Modelfile generated by "ollama show"
|
|
modelFile := `# Modelfile generated by "ollama show"
|
|
@@ -957,8 +933,12 @@ SYSTEM """{{ .System }}"""
|
|
{{- range $adapter := .AdapterPaths }}
|
|
{{- range $adapter := .AdapterPaths }}
|
|
ADAPTER {{ $adapter }}
|
|
ADAPTER {{ $adapter }}
|
|
{{- end }}
|
|
{{- end }}
|
|
-{{ .Params }}
|
|
|
|
-`
|
|
|
|
|
|
+
|
|
|
|
+{{- range $k, $v := .Parameters }}
|
|
|
|
+{{- range $parameter := $v }}
|
|
|
|
+PARAMETER {{ $k }} {{ printf "%#v" $parameter }}
|
|
|
|
+{{- end }}
|
|
|
|
+{{- end }}`
|
|
|
|
|
|
tmpl, err := template.New("").Parse(modelFile)
|
|
tmpl, err := template.New("").Parse(modelFile)
|
|
if err != nil {
|
|
if err != nil {
|