From 3fdbc3090d2cc5c2e24014009cccbe5e7c55d217 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Sat, 26 Apr 2025 13:51:04 +0200 Subject: [PATCH] Fix error when deserializing Gemini streams (#29470) Sometimes Gemini would report `Content` without a `parts` field. Release Notes: - Fixed a bug that would sometimes cause Gemini models to fail streaming their response. --- crates/google_ai/src/google_ai.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/google_ai/src/google_ai.rs b/crates/google_ai/src/google_ai.rs index a20bedd890..70b13b9b6e 100644 --- a/crates/google_ai/src/google_ai.rs +++ b/crates/google_ai/src/google_ai.rs @@ -48,7 +48,10 @@ pub async fn stream_generate_content( if let Some(line) = line.strip_prefix("data: ") { match serde_json::from_str(line) { Ok(response) => Some(Ok(response)), - Err(error) => Some(Err(anyhow!(error))), + Err(error) => Some(Err(anyhow!(format!( + "Error parsing JSON: {:?}\n{:?}", + error, line + )))), } } else { None @@ -152,6 +155,7 @@ pub struct GenerateContentCandidate { #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct Content { + #[serde(default)] pub parts: Vec, pub role: Role, }