agentic_memory/engine/
decay.rs1use crate::types::{CognitiveEvent, EventType};
4
5pub fn calculate_decay(event: &CognitiveEvent, current_time: u64) -> f32 {
15 let base_importance = match event.event_type {
16 EventType::Fact | EventType::Decision | EventType::Correction => 1.0f32,
17 EventType::Inference | EventType::Skill => 0.8,
18 EventType::Episode => 0.6,
19 };
20
21 let micros_per_day: f64 = 86_400_000_000.0;
23 let elapsed_micros = current_time.saturating_sub(event.last_accessed) as f64;
24 let days = elapsed_micros / micros_per_day;
25
26 let lambda = 0.01f64;
27 let recency_factor = (-lambda * days).exp() as f32;
28
29 let access_factor = ((event.access_count as f32 + 1.0).log2() / 10.0).min(1.0);
30
31 (base_importance * recency_factor * access_factor).clamp(0.0, 1.0)
32}