From aba706ea2d26c007a91e12512a2d0afe1d5e3a6f Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Mon, 17 Jul 2023 14:14:34 -0700 Subject: [PATCH 1/2] remove unused persistent pre run --- cmd/cmd.go | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index 99033614f..344bea524 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -9,7 +9,6 @@ import ( "net" "net/http" "os" - "path/filepath" "strings" "time" @@ -21,15 +20,6 @@ import ( "github.com/jmorganca/ollama/server" ) -func cacheDir() string { - home, err := os.UserHomeDir() - if err != nil { - panic(err) - } - - return filepath.Join(home, ".ollama") -} - func create(cmd *cobra.Command, args []string) error { filename, _ := cmd.Flags().GetString("file") client := api.NewClient() @@ -255,10 +245,6 @@ func NewCLI() *cobra.Command { CompletionOptions: cobra.CompletionOptions{ DisableDefaultCmd: true, }, - PersistentPreRunE: func(_ *cobra.Command, args []string) error { - // create the models directory and it's parent - return os.MkdirAll(filepath.Join(cacheDir(), "models"), 0o700) - }, } cobra.EnableCommandSorting = false From e4300e1eb78d12ce5d9412813e8adb6c0a5eeaf4 Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Mon, 17 Jul 2023 14:14:41 -0700 Subject: [PATCH 2/2] add spinner to create --- cmd/cmd.go | 34 +++++++++++++++------------------- cmd/spinner.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 19 deletions(-) create mode 100644 cmd/spinner.go diff --git a/cmd/cmd.go b/cmd/cmd.go index 344bea524..96ecc2435 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -24,9 +24,17 @@ func create(cmd *cobra.Command, args []string) error { filename, _ := cmd.Flags().GetString("file") client := api.NewClient() + var spinner *Spinner + request := api.CreateRequest{Name: args[0], Path: filename} fn := func(resp api.CreateProgress) error { - fmt.Println(resp.Status) + if spinner != nil { + spinner.Stop() + } + + spinner = NewSpinner(resp.Status) + go spinner.Spin(100 * time.Millisecond) + return nil } @@ -34,6 +42,10 @@ func create(cmd *cobra.Command, args []string) error { return err } + if spinner != nil { + spinner.Stop() + } + return nil } @@ -129,24 +141,8 @@ func generate(cmd *cobra.Command, model, prompt string) error { if len(strings.TrimSpace(prompt)) > 0 { client := api.NewClient() - spinner := progressbar.NewOptions(-1, - progressbar.OptionSetWriter(os.Stderr), - progressbar.OptionThrottle(60*time.Millisecond), - progressbar.OptionSpinnerType(14), - progressbar.OptionSetRenderBlankState(true), - progressbar.OptionSetElapsedTime(false), - progressbar.OptionClearOnFinish(), - ) - - go func() { - for range time.Tick(60 * time.Millisecond) { - if spinner.IsFinished() { - break - } - - spinner.Add(1) - } - }() + spinner := NewSpinner("") + go spinner.Spin(60 * time.Millisecond) var latest api.GenerateResponse diff --git a/cmd/spinner.go b/cmd/spinner.go new file mode 100644 index 000000000..e62e451c5 --- /dev/null +++ b/cmd/spinner.go @@ -0,0 +1,44 @@ +package cmd + +import ( + "fmt" + "os" + "time" + + "github.com/schollz/progressbar/v3" +) + +type Spinner struct { + description string + *progressbar.ProgressBar +} + +func NewSpinner(description string) *Spinner { + return &Spinner{ + description: description, + ProgressBar: progressbar.NewOptions(-1, + progressbar.OptionSetWriter(os.Stderr), + progressbar.OptionThrottle(60*time.Millisecond), + progressbar.OptionSpinnerType(14), + progressbar.OptionSetRenderBlankState(true), + progressbar.OptionSetElapsedTime(false), + progressbar.OptionClearOnFinish(), + progressbar.OptionSetDescription(description), + ), + } +} + +func (s *Spinner) Spin(tick time.Duration) { + for range time.Tick(tick) { + if s.IsFinished() { + break + } + + s.Add(1) + } +} + +func (s *Spinner) Stop() { + s.Finish() + fmt.Println(s.description) +}