summaryrefslogtreecommitdiffstats
path: root/src/client/common.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-10-29 14:31:04 +0800
committerGitHub <noreply@github.com>2024-10-29 14:31:04 +0800
commit740f4060f1272063ec89f2b93ed334d3ed1cbfe4 (patch)
tree7afe796777841202e14cb636ca49c956ad3e70f1 /src/client/common.rs
parentbf07cdf256e1e3008578972f5916a4d6763554f5 (diff)
downloadaichat-740f4060f1272063ec89f2b93ed334d3ed1cbfe4.tar.gz
fix: unexpected Ctrl-C/Ctrl-D handling in non-stream REPL Chat (#957)
Diffstat (limited to 'src/client/common.rs')
-rw-r--r--src/client/common.rs14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/client/common.rs b/src/client/common.rs
index fe12593..1275d0b 100644
--- a/src/client/common.rs
+++ b/src/client/common.rs
@@ -403,9 +403,15 @@ pub async fn call_chat_completions(
input: &Input,
extract_code: bool,
client: &dyn Client,
+ abort_signal: AbortSignal,
) -> Result<(String, Vec<ToolResult>)> {
- let task = client.chat_completions(input.clone());
- let ret = run_with_spinner(task, "Generating").await;
+ let ret = abortable_run_with_spinner(
+ client.chat_completions(input.clone()),
+ "Generating",
+ abort_signal,
+ )
+ .await;
+
match ret {
Ok(ret) => {
let ChatCompletionsOutput {
@@ -438,6 +444,10 @@ pub async fn call_chat_completions_streaming(
render_stream(rx, client.global_config(), abort_signal.clone()),
);
+ if handler.abort().aborted() {
+ bail!("Aborted.");
+ }
+
render_ret?;
let (text, tool_calls) = handler.take();