diff --git a/crates/language_models/src/provider/mistral.rs b/crates/language_models/src/provider/mistral.rs index 542779803f9314cd6bf71b7beb48ddc429664159..a2d7c2925b74906acc6bbe62356ff80cf6a2967c 100644 --- a/crates/language_models/src/provider/mistral.rs +++ b/crates/language_models/src/provider/mistral.rs @@ -405,6 +405,9 @@ pub fn into_mistral( Role::Assistant => { for content in &message.content { match content { + MessageContent::Text(text) if text.is_empty() => { + // Mistral API returns a 400 if there's neither content nor tool_calls + } MessageContent::Text(text) => { messages.push(mistral::RequestMessage::Assistant { content: Some(mistral::MessageContent::Plain { @@ -853,6 +856,13 @@ mod tests { cache: false, reasoning_details: None, }, + // should skip empty assistant messages + LanguageModelRequestMessage { + role: Role::Assistant, + content: vec![MessageContent::Text("".into())], + cache: false, + reasoning_details: None, + }, ], temperature: Some(0.5), tools: vec![],