diff options
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/common.rs | 14 | ||||
| -rw-r--r-- | src/client/stream.rs | 31 |
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)] |
