From 040c48b9b392e3329d3f1de8eeb1b8773129773c Mon Sep 17 00:00:00 2001 From: sigoden Date: Wed, 24 Apr 2024 12:38:59 +0800 Subject: refactor: handling of response error (#433) --- src/client/qianwen.rs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'src/client/qianwen.rs') diff --git a/src/client/qianwen.rs b/src/client/qianwen.rs index a3ee988..fb97964 100644 --- a/src/client/qianwen.rs +++ b/src/client/qianwen.rs @@ -111,7 +111,7 @@ impl QianwenClient { async fn send_message(builder: RequestBuilder, is_vl: bool) -> Result { let data: Value = builder.send().await?.json().await?; - check_error(&data)?; + catch_error(&data)?; let output = if is_vl { data["output"]["choices"][0]["message"]["content"][0]["text"].as_str() @@ -137,7 +137,7 @@ async fn send_message_streaming( Ok(Event::Open) => {} Ok(Event::Message(message)) => { let data: Value = serde_json::from_str(&message.data)?; - check_error(&data)?; + catch_error(&data)?; if is_vl { let text = data["output"]["choices"][0]["message"]["content"][0]["text"].as_str(); @@ -165,13 +165,6 @@ async fn send_message_streaming( Ok(()) } -fn check_error(data: &Value) -> Result<()> { - if let (Some(code), Some(message)) = (data["code"].as_str(), data["message"].as_str()) { - bail!("{code}: {message}"); - } - Ok(()) -} - fn build_body(data: SendData, model: &Model, is_vl: bool) -> Result<(Value, bool)> { let SendData { messages, @@ -243,6 +236,14 @@ fn build_body(data: SendData, model: &Model, is_vl: bool) -> Result<(Value, bool Ok((body, has_upload)) } +fn catch_error(data: &Value) -> Result<()> { + if let (Some(code), Some(message)) = (data["code"].as_str(), data["message"].as_str()) { + debug!("Invalid response: {}", data); + bail!("{message} (code: {code})"); + } + Ok(()) +} + /// Patch messsages, upload embedded images to oss async fn patch_messages(model: &str, api_key: &str, messages: &mut Vec) -> Result<()> { for message in messages { -- cgit v1.2.3