From 704546d53c1193fe80712c8c7dd8430c389a3c93 Mon Sep 17 00:00:00 2001 From: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com> Date: Thu, 4 Dec 2025 11:41:45 -0500 Subject: [PATCH] fix: `final assistant content cannot end with trailing whitespace` error from Anthropic (#5967) --- crates/goose/src/conversation/mod.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/crates/goose/src/conversation/mod.rs b/crates/goose/src/conversation/mod.rs index a083dbe8..14d9e5c2 100644 --- a/crates/goose/src/conversation/mod.rs +++ b/crates/goose/src/conversation/mod.rs @@ -202,6 +202,7 @@ pub fn fix_conversation(conversation: Conversation) -> (Conversation, Vec) -> (Vec, Vec) { [ merge_text_content_items, + trim_assistant_text_whitespace, remove_empty_messages, fix_tool_calling, merge_consecutive_messages, @@ -257,6 +258,32 @@ fn merge_text_content_items(messages: Vec) -> (Vec, Vec) -> (Vec, Vec) { + let mut issues = Vec::new(); + + let fixed_messages = messages + .into_iter() + .map(|mut message| { + if message.role == Role::Assistant { + for content in &mut message.content { + if let MessageContent::Text(text) = content { + let trimmed = text.text.trim_end(); + if trimmed.len() != text.text.len() { + issues.push( + "Trimmed trailing whitespace from assistant message".to_string(), + ); + text.text = trimmed.to_string(); + } + } + } + } + message + }) + .collect(); + + (fixed_messages, issues) +} + fn remove_empty_messages(messages: Vec) -> (Vec, Vec) { let mut issues = Vec::new(); let filtered_messages = messages