2025-02-27 09:31:53 +02:00
|
|
|
use anthropic::types::{ContentBlock, Message, MessagesRequest, MessagesRequestBuilder, Role};
|
2024-09-12 13:44:06 +03:00
|
|
|
|
2025-05-10 09:18:01 +03:00
|
|
|
use crate::conversation::llm::{Author as LLMAuthor, Message as LLMMessage, MessageContent as LLMMessageContent};
|
2024-09-12 13:44:06 +03:00
|
|
|
|
2025-02-27 09:31:53 +02: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;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2025-05-10 09:18:01 +03:00
|
|
|
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
|
|
|
|
2025-05-10 09:18:01 +03:00
|
|
|
if let Some(content) = content {
|
|
|
|
|
let message = Message { role, content };
|
2024-09-12 13:44:06 +03:00
|
|
|
|
2025-05-10 09:18:01 +03:00
|
|
|
messages.push(message);
|
|
|
|
|
}
|
2024-09-12 13:44:06 +03:00
|
|
|
}
|
|
|
|
|
|
2025-02-27 09:31:53 +02:00
|
|
|
MessagesRequestBuilder::default()
|
|
|
|
|
.messages(messages)
|
|
|
|
|
.stream(false)
|
|
|
|
|
.build()
|
|
|
|
|
.expect("Failed to build messages request")
|
2024-09-12 13:44:06 +03:00
|
|
|
}
|