Files
baibot-withmcp/src/agent/provider/anthropic/utils.rs

47 lines
1.8 KiB
Rust
Raw Normal View History

use anthropic::types::{ContentBlock, Message, MessagesRequest, MessagesRequestBuilder, Role};
2024-09-12 13:44:06 +03:00
use crate::conversation::llm::{Author as LLMAuthor, Message as LLMMessage, MessageContent as LLMMessageContent};
2024-09-12 13:44:06 +03:00
pub(super) fn create_anthropic_message_request(llm_messages: Vec<LLMMessage>) -> MessagesRequest {
2024-09-12 13:44:06 +03:00
let mut messages = vec![];
for message in llm_messages {
let role = match message.author {
LLMAuthor::User => Role::User,
LLMAuthor::Assistant => Role::Assistant,
LLMAuthor::Prompt => {
continue;
}
};
let content = match &message.content {
LLMMessageContent::Text(text) => Some(vec![ContentBlock::Text { text: text.clone() }]),
LLMMessageContent::Image(_image_details) => {
// This cannot be implemented yet, because the Anthropic library does not support it.
// The code below requires the library to be forked and changed a bit.
// vec![ContentBlock::Image {
// source: ImageSource {
// r#type: "base64".to_string(),
// media_type: mime_type.to_string(),
// data: crate::utils::base64::base64_encode(image_details.data),
// },
// }]
tracing::warn!("Image content is not supported by the Anthropic library yet. Skipping it.");
None
}
};
2024-09-12 13:44:06 +03:00
if let Some(content) = content {
let message = Message { role, content };
2024-09-12 13:44:06 +03:00
messages.push(message);
}
2024-09-12 13:44:06 +03:00
}
MessagesRequestBuilder::default()
.messages(messages)
.stream(false)
.build()
.expect("Failed to build messages request")
2024-09-12 13:44:06 +03:00
}