open_ai: Fix error response parsing (#36390)

Oleksiy Syvokon created

Closes #35925

Release Notes:

- Fixed OpenAI error response parsing in some cases

Change summary

crates/open_ai/src/open_ai.rs | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)

Detailed changes

crates/open_ai/src/open_ai.rs 🔗

@@ -432,11 +432,16 @@ pub struct ChoiceDelta {
     pub finish_reason: Option<String>,
 }
 
+#[derive(Serialize, Deserialize, Debug)]
+pub struct OpenAiError {
+    message: String,
+}
+
 #[derive(Serialize, Deserialize, Debug)]
 #[serde(untagged)]
 pub enum ResponseStreamResult {
     Ok(ResponseStreamEvent),
-    Err { error: String },
+    Err { error: OpenAiError },
 }
 
 #[derive(Serialize, Deserialize, Debug)]
@@ -475,7 +480,7 @@ pub async fn stream_completion(
                             match serde_json::from_str(line) {
                                 Ok(ResponseStreamResult::Ok(response)) => Some(Ok(response)),
                                 Ok(ResponseStreamResult::Err { error }) => {
-                                    Some(Err(anyhow!(error)))
+                                    Some(Err(anyhow!(error.message)))
                                 }
                                 Err(error) => {
                                     log::error!(
@@ -502,11 +507,6 @@ pub async fn stream_completion(
             error: OpenAiError,
         }
 
-        #[derive(Deserialize)]
-        struct OpenAiError {
-            message: String,
-        }
-
         match serde_json::from_str::<OpenAiResponse>(&body) {
             Ok(response) if !response.error.message.is_empty() => Err(anyhow!(
                 "API request to {} failed: {}",