summaryrefslogtreecommitdiffstats
path: root/src/client
diff options
context:
space:
mode:
Diffstat (limited to 'src/client')
-rw-r--r--src/client/common.rs14
-rw-r--r--src/client/stream.rs31
2 files changed, 22 insertions, 23 deletions
diff --git a/src/client/common.rs b/src/client/common.rs
index 9d6480a..9232a2b 100644
--- a/src/client/common.rs
+++ b/src/client/common.rs
@@ -3,7 +3,7 @@ use super::*;
use crate::{
config::{GlobalConfig, Input},
function::{eval_tool_calls, FunctionDeclaration, ToolCall, ToolResult},
- render::{render_error, render_stream},
+ render::render_stream,
utils::*,
};
@@ -84,11 +84,11 @@ pub trait Client: Sync + Send {
let data = input.prepare_completion_data(self.model(), true)?;
self.chat_completions_streaming_inner(&client, handler, data).await
} => {
- handler.done()?;
+ handler.done();
ret.with_context(|| "Failed to call chat-completions api")
}
_ = watch_abort_signal(abort_signal) => {
- handler.done()?;
+ handler.done();
Ok(())
},
}
@@ -433,9 +433,9 @@ pub async fn call_chat_completions_streaming(
client.chat_completions_streaming(input, &mut handler),
render_stream(rx, config, abort.clone()),
);
- if let Err(err) = render_ret {
- render_error(err, config.read().highlight);
- }
+
+ render_ret?;
+
let (text, tool_calls) = handler.take();
match send_ret {
Ok(_) => {
@@ -465,7 +465,7 @@ where
{
let text = f(builder).await?;
handler.text(&text)?;
- handler.done()?;
+ handler.done();
Ok(())
}
diff --git a/src/client/stream.rs b/src/client/stream.rs
index 9913f63..907efee 100644
--- a/src/client/stream.rs
+++ b/src/client/stream.rs
@@ -34,19 +34,25 @@ impl SseHandler {
let ret = self
.sender
.send(SseEvent::Text(text.to_string()))
- .with_context(|| "Failed to send ReplyEvent:Text");
- self.safe_ret(ret)?;
+ .with_context(|| "Failed to send SseEvent:Text");
+ if let Err(err) = ret {
+ if self.abort.aborted() {
+ return Ok(());
+ }
+ return Err(err);
+ }
Ok(())
}
- pub fn done(&mut self) -> Result<()> {
+ pub fn done(&mut self) {
// debug!("HandleDone");
- let ret = self
- .sender
- .send(SseEvent::Done)
- .with_context(|| "Failed to send ReplyEvent::Done");
- self.safe_ret(ret)?;
- Ok(())
+ let ret = self.sender.send(SseEvent::Done);
+ if ret.is_err() {
+ if self.abort.aborted() {
+ return;
+ }
+ warn!("Failed to send SseEvent:Done");
+ }
}
pub fn tool_call(&mut self, call: ToolCall) -> Result<()> {
@@ -65,13 +71,6 @@ impl SseHandler {
} = self;
(buffer, tool_calls)
}
-
- fn safe_ret(&self, ret: Result<()>) -> Result<()> {
- if self.abort.aborted() {
- return Ok(());
- }
- ret
- }
}
#[derive(Debug)]