diff options
| author | sigoden <sigoden@gmail.com> | 2024-04-18 22:58:34 +0000 |
|---|---|---|
| committer | sigoden <sigoden@gmail.com> | 2024-04-19 02:42:05 +0000 |
| commit | a0b4f344ee003dd9d1af19105d93f4914efdd520 (patch) | |
| tree | a264e5e3eae2bcc171ed9702df07461c7ce74a24 /src/client | |
| parent | 13bd2fe29912c2141a24d953204fd6fb28cfa8d8 (diff) | |
| download | aichat-a0b4f344ee003dd9d1af19105d93f4914efdd520.tar.gz | |
refactor: improve error message for some clients
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/claude.rs | 12 | ||||
| -rw-r--r-- | 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); |
