fix: skip whitespace-only text blocks in Anthropic message (#7343)

Signed-off-by: rabi <ramishra@redhat.com>
This commit is contained in:
Rabi Mishra
2026-02-19 11:08:38 +05:30
committed by GitHub
parent c35b24975f
commit 3dd197b24c
@@ -44,10 +44,12 @@ pub fn format_messages(messages: &[Message]) -> Vec<Value> {
for msg_content in &message.content {
match msg_content {
MessageContent::Text(text) => {
content.push(json!({
TYPE_FIELD: TEXT_TYPE,
TEXT_TYPE: text.text
}));
if !text.text.trim().is_empty() {
content.push(json!({
TYPE_FIELD: TEXT_TYPE,
TEXT_TYPE: text.text
}));
}
}
MessageContent::ToolRequest(tool_request) => {
match &tool_request.tool_call {
@@ -1005,4 +1007,37 @@ mod tests {
);
assert_eq!(spec[1]["content"][0]["is_error"], true);
}
#[test]
fn test_whitespace_only_text_blocks_are_skipped() {
let messages = vec![
Message::user().with_text("Hello"),
Message::assistant().with_text("").with_tool_request(
"tool_1",
Ok(CallToolRequestParams {
meta: None,
task: None,
name: "search".into(),
arguments: Some(object!({"query": "test"})),
}),
),
Message::user().with_tool_response(
"tool_1",
Ok(rmcp::model::CallToolResult {
content: vec![],
structured_content: None,
is_error: Some(false),
meta: None,
}),
),
];
let spec = format_messages(&messages);
assert_eq!(spec.len(), 3);
let assistant_content = spec[1]["content"].as_array().unwrap();
assert_eq!(assistant_content.len(), 1);
assert_eq!(assistant_content[0]["type"], "tool_use");
}
}