48 lines
1.5 KiB
Rust
48 lines
1.5 KiB
Rust
use serde_json::json;
|
|
|
|
use super::super::convert::{ContentPart, ConversationMessage, MessageContent, MessageRole};
|
|
use super::sanitize_messages_for_bedrock;
|
|
|
|
#[test]
|
|
fn test_sanitize_messages_prepends_synthetic_tool_result_before_existing_user_text() {
|
|
let tool_use_id = "tooluse_Pzmn1QfoWgJsA8sb4RHTM3".to_string();
|
|
let existing_user_text = "What happened?".to_string();
|
|
|
|
let mut messages = vec![
|
|
ConversationMessage {
|
|
role: MessageRole::User,
|
|
content: MessageContent::Text("Run a command.".to_string()),
|
|
},
|
|
ConversationMessage {
|
|
role: MessageRole::Assistant,
|
|
content: MessageContent::ToolUse {
|
|
tool_use_id: tool_use_id.clone(),
|
|
name: "run_shell_command".to_string(),
|
|
input: json!({ "command": "ls" }),
|
|
},
|
|
},
|
|
ConversationMessage {
|
|
role: MessageRole::User,
|
|
content: MessageContent::Text(existing_user_text.clone()),
|
|
},
|
|
];
|
|
|
|
sanitize_messages_for_bedrock(&mut messages);
|
|
|
|
assert_eq!(messages.len(), 3);
|
|
|
|
let parts = match &messages[2].content {
|
|
MessageContent::MultiPart(parts) => parts,
|
|
other => panic!("Expected MultiPart content, got: {:?}", other),
|
|
};
|
|
|
|
assert_eq!(parts.len(), 2);
|
|
assert!(
|
|
matches!(&parts[0], ContentPart::ToolResult { tool_use_id: id, .. } if id == &tool_use_id)
|
|
);
|
|
assert!(matches!(
|
|
&parts[1],
|
|
ContentPart::Text(text) if text == &existing_user_text
|
|
));
|
|
}
|