Skip to main content

potato_agent/agents/memory/
in_memory.rs

1use super::{Memory, MemoryTurn};
2use potato_type::prompt::MessageNum;
3
4/// Simple unbounded in-memory conversation history.
5#[derive(Debug, Default)]
6pub struct InMemoryMemory {
7    turns: Vec<MemoryTurn>,
8}
9
10impl InMemoryMemory {
11    pub fn new() -> Self {
12        Self::default()
13    }
14}
15
16impl Memory for InMemoryMemory {
17    fn push_turn(&mut self, turn: MemoryTurn) {
18        self.turns.push(turn);
19    }
20
21    fn messages(&self) -> Vec<MessageNum> {
22        let mut msgs = Vec::with_capacity(self.turns.len() * 2);
23        for turn in &self.turns {
24            msgs.push(turn.user.clone());
25            msgs.push(turn.assistant.clone());
26        }
27        msgs
28    }
29
30    fn clear(&mut self) {
31        self.turns.clear();
32    }
33
34    fn len(&self) -> usize {
35        self.turns.len()
36    }
37}