Browse Source

pull model on make if not present locally

Bruce MacDonald 1 year ago
parent
commit
8ebbd12f21
1 changed files with 29 additions and 3 deletions
  1. 29 3
      cmd/cmd.go

+ 29 - 3
cmd/cmd.go

@@ -21,6 +21,7 @@ import (
 
 
 	"github.com/jmorganca/ollama/api"
 	"github.com/jmorganca/ollama/api"
 	"github.com/jmorganca/ollama/format"
 	"github.com/jmorganca/ollama/format"
+	"github.com/jmorganca/ollama/parser"
 	"github.com/jmorganca/ollama/progressbar"
 	"github.com/jmorganca/ollama/progressbar"
 	"github.com/jmorganca/ollama/server"
 	"github.com/jmorganca/ollama/server"
 )
 )
@@ -36,6 +37,24 @@ func CreateHandler(cmd *cobra.Command, args []string) error {
 
 
 	var spinner *Spinner
 	var spinner *Spinner
 
 
+	// pull the model file if needed
+	mf, err := os.Open(filename)
+	defer mf.Close()
+	cmds, err := parser.Parse(mf)
+	if err != nil {
+		return err
+	}
+	mf.Close()
+	for _, c := range cmds {
+		if c.Name == "model" {
+			// check if the model file needs to be pulled
+			checkPull(c.Args)
+		}
+	}
+	if err != nil {
+		return err
+	}
+
 	request := api.CreateRequest{Name: args[0], Path: filename}
 	request := api.CreateRequest{Name: args[0], Path: filename}
 	fn := func(resp api.CreateProgress) error {
 	fn := func(resp api.CreateProgress) error {
 		if spinner != nil {
 		if spinner != nil {
@@ -59,8 +78,8 @@ func CreateHandler(cmd *cobra.Command, args []string) error {
 	return nil
 	return nil
 }
 }
 
 
-func RunHandler(cmd *cobra.Command, args []string) error {
-	mp := server.ParseModelPath(args[0])
+func checkPull(model string) error {
+	mp := server.ParseModelPath(model)
 	fp, err := mp.GetManifestPath(false)
 	fp, err := mp.GetManifestPath(false)
 	if err != nil {
 	if err != nil {
 		return err
 		return err
@@ -69,7 +88,7 @@ func RunHandler(cmd *cobra.Command, args []string) error {
 	_, err = os.Stat(fp)
 	_, err = os.Stat(fp)
 	switch {
 	switch {
 	case errors.Is(err, os.ErrNotExist):
 	case errors.Is(err, os.ErrNotExist):
-		if err := pull(args[0], false); err != nil {
+		if err := pull(model, false); err != nil {
 			var apiStatusError api.StatusError
 			var apiStatusError api.StatusError
 			if !errors.As(err, &apiStatusError) {
 			if !errors.As(err, &apiStatusError) {
 				return err
 				return err
@@ -83,6 +102,13 @@ func RunHandler(cmd *cobra.Command, args []string) error {
 		return err
 		return err
 	}
 	}
 
 
+	return nil
+}
+
+func RunHandler(cmd *cobra.Command, args []string) error {
+	if err := checkPull(args[0]); err != nil {
+		return err
+	}
 	return RunGenerate(cmd, args)
 	return RunGenerate(cmd, args)
 }
 }