This commit is contained in:
jmorganca
2026-01-19 16:15:15 -08:00
parent bda8cb7403
commit 5dc20e91d0
2 changed files with 22 additions and 42 deletions

View File

@@ -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"

View File

@@ -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
}