mirror of
https://github.com/ollama/ollama.git
synced 2026-01-29 07:12:03 +03:00
simplify
This commit is contained in:
24
cmd/cmd.go
24
cmd/cmd.go
@@ -136,12 +136,26 @@ func CreateHandler(cmd *cobra.Command, args []string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Check if this is an image generation model and handle it directly
|
||||
// Check if this is a tensor model (image generation) and handle it directly
|
||||
quantize, _ := cmd.Flags().GetString("quantize")
|
||||
if err := xcreateclient.TryCreateImageGen(modelfile, filepath.Dir(filename), modelName, quantize, p); err == nil {
|
||||
return nil
|
||||
} else if !errors.Is(err, xcreateclient.ErrNotImageGenModel) {
|
||||
return err
|
||||
modelDir := filepath.Dir(filename)
|
||||
for _, cmd := range modelfile.Commands {
|
||||
if cmd.Name == "model" {
|
||||
if filepath.IsAbs(cmd.Args) {
|
||||
modelDir = cmd.Args
|
||||
} else {
|
||||
modelDir = filepath.Join(filepath.Dir(filename), cmd.Args)
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
if create.IsTensorModelDir(modelDir) {
|
||||
return xcreateclient.CreateModel(xcreateclient.CreateOptions{
|
||||
ModelName: modelName,
|
||||
ModelDir: modelDir,
|
||||
Quantize: quantize,
|
||||
Modelfile: xcreateclient.ExtractModelfileConfig(modelfile),
|
||||
}, p)
|
||||
}
|
||||
|
||||
status := "gathering model components"
|
||||
|
||||
@@ -9,10 +9,8 @@ package client
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/ollama/ollama/parser"
|
||||
"github.com/ollama/ollama/progress"
|
||||
@@ -284,34 +282,8 @@ func createModelfileLayers(mf *ModelfileConfig) ([]server.Layer, error) {
|
||||
return layers, nil
|
||||
}
|
||||
|
||||
// ErrNotImageGenModel is returned when TryCreateImageGen is called with a non-imagegen model.
|
||||
var ErrNotImageGenModel = errors.New("not an image generation model")
|
||||
|
||||
// TryCreateImageGen attempts to create an image generation model from a parsed Modelfile.
|
||||
// Returns ErrNotImageGenModel if the model directory is not an imagegen model.
|
||||
// Returns nil on success, or another error on failure.
|
||||
func TryCreateImageGen(modelfile *parser.Modelfile, modelfileDir, modelName, quantize string, p *progress.Progress) error {
|
||||
// Extract model directory from Modelfile
|
||||
var modelDir string
|
||||
for _, cmd := range modelfile.Commands {
|
||||
if cmd.Name == "model" {
|
||||
modelDir = cmd.Args
|
||||
break
|
||||
}
|
||||
}
|
||||
if modelDir == "" {
|
||||
modelDir = "."
|
||||
}
|
||||
if !filepath.IsAbs(modelDir) && modelfileDir != "" {
|
||||
modelDir = filepath.Join(modelfileDir, modelDir)
|
||||
}
|
||||
|
||||
// Check if this is an imagegen model
|
||||
if !create.IsTensorModelDir(modelDir) {
|
||||
return ErrNotImageGenModel
|
||||
}
|
||||
|
||||
// Extract Modelfile config
|
||||
// ExtractModelfileConfig extracts template, system, and license from a parsed Modelfile.
|
||||
func ExtractModelfileConfig(modelfile *parser.Modelfile) *ModelfileConfig {
|
||||
mfConfig := &ModelfileConfig{}
|
||||
for _, cmd := range modelfile.Commands {
|
||||
switch cmd.Name {
|
||||
@@ -323,11 +295,5 @@ func TryCreateImageGen(modelfile *parser.Modelfile, modelfileDir, modelName, qua
|
||||
mfConfig.License = cmd.Args
|
||||
}
|
||||
}
|
||||
|
||||
return CreateModel(CreateOptions{
|
||||
ModelName: modelName,
|
||||
ModelDir: modelDir,
|
||||
Quantize: quantize,
|
||||
Modelfile: mfConfig,
|
||||
}, p)
|
||||
return mfConfig
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user