Skip to main content

potato_agent/agents/memory/
mod.rs

1pub mod in_memory;
2pub mod windowed;
3
4pub use in_memory::InMemoryMemory;
5pub use windowed::WindowedMemory;
6
7use potato_type::prompt::MessageNum;
8use serde::{Deserialize, Serialize};
9use std::fmt::Debug;
10
11/// A single conversation turn (user + assistant message pair).
12#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct MemoryTurn {
14    pub user: MessageNum,
15    pub assistant: MessageNum,
16}
17
18/// Trait for agent conversation memory.
19pub trait Memory: Send + Sync + Debug {
20    fn push_turn(&mut self, turn: MemoryTurn);
21    /// Returns messages in chronological order (oldest first).
22    fn messages(&self) -> Vec<MessageNum>;
23    fn clear(&mut self);
24    fn len(&self) -> usize;
25    fn is_empty(&self) -> bool {
26        self.len() == 0
27    }
28    /// Enables downcasting to concrete types (e.g., `PersistentMemory`).
29    /// Override in concrete types to support `downcast_mut`.
30    fn as_any_mut(&mut self) -> Option<&mut dyn std::any::Any> {
31        None
32    }
33}