fix relative path on create (#1222)
This commit is contained in:
parent
2eaa95b417
commit
37d95157df
2 changed files with 18 additions and 13 deletions
|
@ -228,10 +228,10 @@ func GetModel(name string) (*Model, error) {
|
||||||
return model, nil
|
return model, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func realpath(p string) string {
|
func realpath(mfDir, from string) string {
|
||||||
abspath, err := filepath.Abs(p)
|
abspath, err := filepath.Abs(from)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return p
|
return from
|
||||||
}
|
}
|
||||||
|
|
||||||
home, err := os.UserHomeDir()
|
home, err := os.UserHomeDir()
|
||||||
|
@ -239,16 +239,21 @@ func realpath(p string) string {
|
||||||
return abspath
|
return abspath
|
||||||
}
|
}
|
||||||
|
|
||||||
if p == "~" {
|
if from == "~" {
|
||||||
return home
|
return home
|
||||||
} else if strings.HasPrefix(p, "~/") {
|
} else if strings.HasPrefix(from, "~/") {
|
||||||
return filepath.Join(home, p[2:])
|
return filepath.Join(home, from[2:])
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := os.Stat(filepath.Join(mfDir, from)); err == nil {
|
||||||
|
// this is a file relative to the Modelfile
|
||||||
|
return filepath.Join(mfDir, from)
|
||||||
}
|
}
|
||||||
|
|
||||||
return abspath
|
return abspath
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateModel(ctx context.Context, name string, commands []parser.Command, fn func(resp api.ProgressResponse)) error {
|
func CreateModel(ctx context.Context, name, modelFileDir string, commands []parser.Command, fn func(resp api.ProgressResponse)) error {
|
||||||
config := ConfigV2{
|
config := ConfigV2{
|
||||||
OS: "linux",
|
OS: "linux",
|
||||||
Architecture: "amd64",
|
Architecture: "amd64",
|
||||||
|
@ -276,7 +281,7 @@ func CreateModel(ctx context.Context, name string, commands []parser.Command, fn
|
||||||
c.Args = blobPath
|
c.Args = blobPath
|
||||||
}
|
}
|
||||||
|
|
||||||
bin, err := os.Open(realpath(c.Args))
|
bin, err := os.Open(realpath(modelFileDir, c.Args))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// not a file on disk so must be a model reference
|
// not a file on disk so must be a model reference
|
||||||
modelpath := ParseModelPath(c.Args)
|
modelpath := ParseModelPath(c.Args)
|
||||||
|
@ -372,7 +377,7 @@ func CreateModel(ctx context.Context, name string, commands []parser.Command, fn
|
||||||
layers = append(layers, layer)
|
layers = append(layers, layer)
|
||||||
case "adapter":
|
case "adapter":
|
||||||
fn(api.ProgressResponse{Status: "creating adapter layer"})
|
fn(api.ProgressResponse{Status: "creating adapter layer"})
|
||||||
bin, err := os.Open(realpath(c.Args))
|
bin, err := os.Open(realpath(modelFileDir, c.Args))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -423,14 +423,14 @@ func CreateModelHandler(c *gin.Context) {
|
||||||
|
|
||||||
var modelfile io.Reader = strings.NewReader(req.Modelfile)
|
var modelfile io.Reader = strings.NewReader(req.Modelfile)
|
||||||
if req.Path != "" && req.Modelfile == "" {
|
if req.Path != "" && req.Modelfile == "" {
|
||||||
bin, err := os.Open(req.Path)
|
mf, err := os.Open(req.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("error reading modelfile: %s", err)})
|
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("error reading modelfile: %s", err)})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer bin.Close()
|
defer mf.Close()
|
||||||
|
|
||||||
modelfile = bin
|
modelfile = mf
|
||||||
}
|
}
|
||||||
|
|
||||||
commands, err := parser.Parse(modelfile)
|
commands, err := parser.Parse(modelfile)
|
||||||
|
@ -449,7 +449,7 @@ func CreateModelHandler(c *gin.Context) {
|
||||||
ctx, cancel := context.WithCancel(c.Request.Context())
|
ctx, cancel := context.WithCancel(c.Request.Context())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
if err := CreateModel(ctx, req.Name, commands, fn); err != nil {
|
if err := CreateModel(ctx, req.Name, filepath.Dir(req.Path), commands, fn); err != nil {
|
||||||
ch <- gin.H{"error": err.Error()}
|
ch <- gin.H{"error": err.Error()}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
Loading…
Reference in a new issue