ソースを参照

fix temporary newline created and removed with spinner in `ollama run`

Jeffrey Morgan 1 年間 前
コミット
6bbd6e26fb
2 ファイル変更15 行追加6 行削除
  1. 1 2
      cmd/cmd.go
  2. 14 4
      progress/progress.go

+ 1 - 2
cmd/cmd.go

@@ -457,7 +457,7 @@ func generate(cmd *cobra.Command, model, prompt string, wordWrap bool, format st
 	}
 	}
 
 
 	p := progress.NewProgress(os.Stderr)
 	p := progress.NewProgress(os.Stderr)
-	defer p.Stop()
+	defer p.StopAndClear()
 
 
 	spinner := progress.NewSpinner("")
 	spinner := progress.NewSpinner("")
 	p.Add("", spinner)
 	p.Add("", spinner)
@@ -492,7 +492,6 @@ func generate(cmd *cobra.Command, model, prompt string, wordWrap bool, format st
 
 
 	request := api.GenerateRequest{Model: model, Prompt: prompt, Context: generateContext, Format: format}
 	request := api.GenerateRequest{Model: model, Prompt: prompt, Context: generateContext, Format: format}
 	fn := func(response api.GenerateResponse) error {
 	fn := func(response api.GenerateResponse) error {
-		spinner.Stop()
 		p.StopAndClear()
 		p.StopAndClear()
 
 
 		latest = response
 		latest = response

+ 14 - 4
progress/progress.go

@@ -27,7 +27,7 @@ func NewProgress(w io.Writer) *Progress {
 	return p
 	return p
 }
 }
 
 
-func (p *Progress) Stop() bool {
+func (p *Progress) stop() bool {
 	for _, state := range p.states {
 	for _, state := range p.states {
 		if spinner, ok := state.(*Spinner); ok {
 		if spinner, ok := state.(*Spinner); ok {
 			spinner.Stop()
 			spinner.Stop()
@@ -38,22 +38,32 @@ func (p *Progress) Stop() bool {
 		p.ticker.Stop()
 		p.ticker.Stop()
 		p.ticker = nil
 		p.ticker = nil
 		p.render()
 		p.render()
-		fmt.Fprint(p.w, "\n")
 		return true
 		return true
 	}
 	}
 
 
 	return false
 	return false
 }
 }
 
 
+func (p *Progress) Stop() bool {
+	stopped := p.stop()
+	if stopped {
+		fmt.Fprint(p.w, "\n")
+	}
+	return stopped
+}
+
 func (p *Progress) StopAndClear() bool {
 func (p *Progress) StopAndClear() bool {
 	fmt.Fprint(p.w, "\033[?25l")
 	fmt.Fprint(p.w, "\033[?25l")
 	defer fmt.Fprint(p.w, "\033[?25h")
 	defer fmt.Fprint(p.w, "\033[?25h")
 
 
-	stopped := p.Stop()
+	stopped := p.stop()
 	if stopped {
 	if stopped {
 		// clear all progress lines
 		// clear all progress lines
 		for i := 0; i < p.pos; i++ {
 		for i := 0; i < p.pos; i++ {
-			fmt.Fprint(p.w, "\033[A\033[2K\033[1G")
+			if i > 0 {
+				fmt.Fprint(p.w, "\033[A")
+			}
+			fmt.Fprint(p.w, "\033[2K\033[1G")
 		}
 		}
 	}
 	}