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.
This commit is contained in:
Antonio Scandurra 2025-04-26 13:51:04 +02:00 committed by GitHub
parent f2b4004c00
commit 3fdbc3090d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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<Part>,
pub role: Role,
}