Skip to main content

jules_core/conversation/
mod.rs

1//! Conversation module.
2
3use crate::message::Message;
4
5/// A conversation consisting of a sequence of messages.
6#[derive(Debug, Clone, Default, PartialEq, Eq)]
7pub struct Conversation {
8    messages: Vec<Message>,
9}
10
11impl Conversation {
12    /// Creates a new, empty [`Conversation`].
13    #[must_use]
14    pub fn new() -> Self {
15        Self::default()
16    }
17
18    /// Adds a [`Message`] to the end of the conversation.
19    pub fn add_message(&mut self, message: Message) {
20        self.messages.push(message);
21    }
22
23    /// Returns a slice of the [`Message`]s in the conversation.
24    #[must_use]
25    pub fn messages(&self) -> &[Message] {
26        &self.messages
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33    use crate::message::Role;
34
35    #[test]
36    fn test_conversation_add_message() {
37        let mut conv = Conversation::new();
38        assert!(conv.messages().is_empty());
39
40        let msg = Message::new(Role::User, "Hello");
41        conv.add_message(msg);
42
43        assert_eq!(conv.messages().len(), 1);
44        assert_eq!(conv.messages()[0], Message::new(Role::User, "Hello"));
45    }
46}