summaryrefslogtreecommitdiffstats
path: root/src/client
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-04-18 22:58:34 +0000
committersigoden <sigoden@gmail.com>2024-04-19 02:42:05 +0000
commita0b4f344ee003dd9d1af19105d93f4914efdd520 (patch)
treea264e5e3eae2bcc171ed9702df07461c7ce74a24 /src/client
parent13bd2fe29912c2141a24d953204fd6fb28cfa8d8 (diff)
downloadaichat-a0b4f344ee003dd9d1af19105d93f4914efdd520.tar.gz
refactor: improve error message for some clients
Diffstat (limited to 'src/client')
-rw-r--r--src/client/claude.rs12
-rw-r--r--src/client/openai.rs14
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);