1mod compacting;
4mod context;
5mod events;
6mod in_memory;
7mod summarizer;
8mod token_budget;
9
10use async_trait::async_trait;
11
12pub use ai_agents_core::MemorySnapshot;
13pub use compacting::{CompactingMemory, CompactingMemoryConfig, CompressionEvent};
14pub use context::{estimate_message_tokens, estimate_tokens, CompressResult, ConversationContext};
15pub use events::{
16 EvictionReason, FactExtractedEvent, MemoryBudgetEvent, MemoryCompressEvent, MemoryEvictEvent,
17};
18pub use in_memory::InMemoryStore;
19pub use summarizer::{LLMSummarizer, NoopSummarizer, Summarizer};
20pub use token_budget::{MemoryBudgetState, MemoryTokenBudget, OverflowStrategy, TokenAllocation};
21
22#[async_trait]
24pub trait Memory: ai_agents_core::Memory {
25 async fn get_context(&self) -> ai_agents_core::Result<ConversationContext> {
26 let messages = self.get_messages(None).await?;
27 Ok(ConversationContext::with_messages(messages))
28 }
29
30 async fn compress(
31 &self,
32 _summarizer: Option<&dyn Summarizer>,
33 ) -> ai_agents_core::Result<CompressResult> {
34 Ok(CompressResult::NotNeeded)
35 }
36
37 fn needs_compression(&self) -> bool {
38 false
39 }
40}