diff options
| author | sigoden <sigoden@gmail.com> | 2024-11-27 09:16:06 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-27 09:16:06 +0800 |
| commit | 2003159d322a96165ab949051c004c456de5be11 (patch) | |
| tree | dc3c7f8e1850267ba24d1a3bf9a76fdac4366b6a /src/repl/mod.rs | |
| parent | 6f60ad47535b75064a79331c22758d86e6e46d4f (diff) | |
| download | aichat-2003159d322a96165ab949051c004c456de5be11.tar.gz | |
feat: handle Ctrl+C during every spinner in REPL (#1014)
Diffstat (limited to 'src/repl/mod.rs')
| -rw-r--r-- | src/repl/mod.rs | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/repl/mod.rs b/src/repl/mod.rs index 98d166a..4519e23 100644 --- a/src/repl/mod.rs +++ b/src/repl/mod.rs @@ -10,7 +10,9 @@ use crate::client::{call_chat_completions, call_chat_completions_streaming}; use crate::config::{AssertState, Config, GlobalConfig, Input, StateFlags}; use crate::function::need_send_tool_results; use crate::render::render_error; -use crate::utils::{create_abort_signal, create_spinner, set_text, temp_file, AbortSignal}; +use crate::utils::{ + abortable_run_with_spinner, create_abort_signal, set_text, temp_file, AbortSignal, +}; use anyhow::{bail, Context, Result}; use fancy_regex::Regex; @@ -362,10 +364,12 @@ impl Repl { }, ".compress" => match args { Some("session") => { - let spinner = create_spinner("Compressing").await; - let ret = Config::compress_session(&self.config).await; - spinner.stop(); - ret?; + abortable_run_with_spinner( + Config::compress_session(&self.config), + "Compressing", + self.abort_signal.clone(), + ) + .await?; println!("✓ Successfully compressed the session."); } _ => { @@ -401,7 +405,14 @@ impl Repl { Some(args) => { let (files, text) = split_files_text(args); let files = shell_words::split(files).with_context(|| "Invalid args")?; - let input = Input::from_files(&self.config, text, files, None).await?; + let input = Input::from_files_with_spinner( + &self.config, + text, + files, + None, + self.abort_signal.clone(), + ) + .await?; ask(&self.config, self.abort_signal.clone(), input, true).await?; } None => println!("Usage: .file <files>... [-- <text>...]"), |
