From a0b4f344ee003dd9d1af19105d93f4914efdd520 Mon Sep 17 00:00:00 2001 From: sigoden Date: Thu, 18 Apr 2024 22:58:34 +0000 Subject: refactor: improve error message for some clients --- src/client/claude.rs | 12 +++++++++--- src/client/openai.rs | 14 ++++++++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/client/claude.rs b/src/client/claude.rs index 91ed163..7a4dd36 100644 --- a/src/client/claude.rs +++ b/src/client/claude.rs @@ -118,13 +118,19 @@ async fn send_message_streaming(builder: RequestBuilder, handler: &mut ReplyHand match err { EventSourceError::StreamEnded => {} EventSourceError::InvalidStatusCode(code, res) => { - let data: Value = res.json().await?; + let text = res.text().await?; + let data: Value = match text.parse() { + Ok(data) => data, + Err(_) => { + bail!("Request failed, {code}, {text}"); + } + }; check_error(&data)?; - bail!("Invalid status code: {code}"); + bail!("Request failed, {code}, {text}"); } EventSourceError::InvalidContentType(_, res) => { let text = res.text().await?; - bail!("The endpoint is invalid as the response content-type is not 'text/event-stream', {text}"); + bail!("The API server should return data as 'text/event-stream', but it isn't. Check the client config. {text}"); } _ => { bail!("{}", err); diff --git a/src/client/openai.rs b/src/client/openai.rs index 7a923a2..24c72cc 100644 --- a/src/client/openai.rs +++ b/src/client/openai.rs @@ -106,20 +106,26 @@ pub async fn openai_send_message_streaming( } Err(err) => { match err { - EventSourceError::InvalidStatusCode(_, res) => { - let data: Value = res.json().await?; + EventSourceError::InvalidStatusCode(code, res) => { + let text = res.text().await?; + let data: Value = match text.parse() { + Ok(data) => data, + Err(_) => { + bail!("Request failed, {code}, {text}"); + } + }; if let Some(err_msg) = data["error"]["message"].as_str() { bail!("{err_msg}"); } else if let Some(err_msg) = data["message"].as_str() { bail!("{err_msg}"); } else { - bail!("Request failed, {data}"); + bail!("Request failed, {code}, {text}"); } } EventSourceError::StreamEnded => {} EventSourceError::InvalidContentType(_, res) => { let text = res.text().await?; - bail!("The endpoint is invalid as the response content-type is not 'text/event-stream', {text}"); + bail!("The API server should return data as 'text/event-stream', but it isn't. Check the client config. {text}"); } _ => { bail!("{}", err); -- cgit v1.2.3