52 lines
1.7 KiB
Rust
52 lines
1.7 KiB
Rust
|
|
use super::{Author, Message};
|
||
|
|
use crate::conversation::matrix::{MatrixMessage, MatrixMessageType};
|
||
|
|
use crate::utils::text_to_speech as text_to_speech_utils;
|
||
|
|
|
||
|
|
pub fn convert_matrix_message_to_llm_message(
|
||
|
|
matrix_message: &MatrixMessage,
|
||
|
|
bot_user_id: &str,
|
||
|
|
) -> Option<Message> {
|
||
|
|
if matrix_message.sender_id == bot_user_id {
|
||
|
|
return convert_bot_message(matrix_message);
|
||
|
|
}
|
||
|
|
|
||
|
|
convert_user_message(matrix_message)
|
||
|
|
}
|
||
|
|
|
||
|
|
fn convert_bot_message(matrix_message: &MatrixMessage) -> Option<Message> {
|
||
|
|
match matrix_message.message_type {
|
||
|
|
MatrixMessageType::Text => convert_bot_text_message(&matrix_message.message_text),
|
||
|
|
MatrixMessageType::Notice => convert_bot_notice_message(&matrix_message.message_text),
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
fn convert_bot_text_message(text: &str) -> Option<Message> {
|
||
|
|
Some(Message {
|
||
|
|
author: Author::Assistant,
|
||
|
|
message_text: text.to_owned(),
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
fn convert_bot_notice_message(text: &str) -> Option<Message> {
|
||
|
|
// Notice messages sent by the bot are usually transcriptions of previous messages sent by the user.
|
||
|
|
// Such transcriptions are prefixed with an emoji and blockquoted.
|
||
|
|
// If we find a notice that doesn't match this pattern, we skip it.
|
||
|
|
|
||
|
|
if let Some(text) = text_to_speech_utils::parse_transcribed_message_text(text) {
|
||
|
|
// This is a transcription message. We remove the prefix and consider it as a message sent by the user.
|
||
|
|
return Some(Message {
|
||
|
|
author: Author::User,
|
||
|
|
message_text: text.to_owned(),
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
None
|
||
|
|
}
|
||
|
|
|
||
|
|
fn convert_user_message(matrix_message: &MatrixMessage) -> Option<Message> {
|
||
|
|
Some(Message {
|
||
|
|
author: Author::User,
|
||
|
|
message_text: matrix_message.message_text.clone(),
|
||
|
|
})
|
||
|
|
}
|