pub struct InterferenceDetector { /* private fields */ }Expand description
Detector for memory interference effects
Implementations§
Source§impl InterferenceDetector
impl InterferenceDetector
pub fn new() -> Self
Sourcepub fn check_interference(
&mut self,
new_memory_id: &str,
new_memory_importance: f32,
_new_memory_created: DateTime<Utc>,
similar_memories: &[(String, f32, f32, DateTime<Utc>, String)],
) -> InterferenceCheckResult
pub fn check_interference( &mut self, new_memory_id: &str, new_memory_importance: f32, _new_memory_created: DateTime<Utc>, similar_memories: &[(String, f32, f32, DateTime<Utc>, String)], ) -> InterferenceCheckResult
Check for interference when storing a new memory
Compares the new memory’s embedding against existing memories and determines interference effects.
Sourcepub fn apply_retrieval_competition(
&mut self,
candidates: &[(String, f32, f32)],
query_preview: &str,
) -> CompetitionResult
pub fn apply_retrieval_competition( &mut self, candidates: &[(String, f32, f32)], query_preview: &str, ) -> CompetitionResult
Apply retrieval competition between similar memories
When multiple similar memories are retrieved, they compete for activation. Stronger memories suppress weaker ones.
Sourcepub fn get_history(&self, memory_id: &str) -> Option<&Vec<InterferenceRecord>>
pub fn get_history(&self, memory_id: &str) -> Option<&Vec<InterferenceRecord>>
Get interference history for a memory
Sourcepub fn clear_memory(&mut self, memory_id: &str)
pub fn clear_memory(&mut self, memory_id: &str)
Clear history for a deleted memory
Sourcepub fn calculate_retrieval_adjustment(
&self,
memory_id: &str,
current_activation: f32,
) -> f32
pub fn calculate_retrieval_adjustment( &self, memory_id: &str, current_activation: f32, ) -> f32
Calculate retrieval score adjustment based on interference history
This implements Anderson’s retrieval-induced forgetting (RIF) theory:
- Memories with high interference that maintained activation → BOOST (survivors)
- Memories with high interference and low activation → SUPPRESS (chronic losers)
§Arguments
memory_id- The memory to scorecurrent_activation- Current importance/activation level (0.0-1.0)
§Returns
Score adjustment factor:
-
1.0: boost (multiply score)
- < 1.0: suppress (multiply score)
- 1.0: no adjustment
§Research Reference
Anderson, M.C. & Neely, J.H. (1996). Interference and inhibition in memory retrieval. In E.L. Bjork & R.A. Bjork (Eds.), Memory (pp. 237-313).
Sourcepub fn batch_retrieval_adjustments(
&self,
memories: &[(String, f32)],
) -> HashMap<String, f32>
pub fn batch_retrieval_adjustments( &self, memories: &[(String, f32)], ) -> HashMap<String, f32>
Sourcepub fn has_significant_interference(&self, memory_id: &str) -> bool
pub fn has_significant_interference(&self, memory_id: &str) -> bool
Check if a memory has significant interference history
Useful for deciding whether to apply interference adjustments.
Sourcepub fn load_history(
&mut self,
history: HashMap<String, Vec<InterferenceRecord>>,
total_events: usize,
)
pub fn load_history( &mut self, history: HashMap<String, Vec<InterferenceRecord>>, total_events: usize, )
Bulk load interference history from persistent storage on startup
Replaces the in-memory HashMap with persisted data. Called once during MemorySystem initialization.
Sourcepub fn get_affected_ids_from_check(
&self,
new_memory_id: &str,
result: &InterferenceCheckResult,
) -> Vec<String>
pub fn get_affected_ids_from_check( &self, new_memory_id: &str, result: &InterferenceCheckResult, ) -> Vec<String>
Get memory IDs affected by a storage interference check
Returns IDs that had interference records modified, for targeted persistence.
Sourcepub fn get_affected_ids_from_competition(
&self,
result: &CompetitionResult,
) -> Vec<String>
pub fn get_affected_ids_from_competition( &self, result: &CompetitionResult, ) -> Vec<String>
Get memory IDs affected by retrieval competition
Returns IDs of all memories that had interference recorded (both suppressed and close survivors with score_ratio > 0.9).
Sourcepub fn get_records_for_ids<'a>(
&'a self,
ids: &'a [String],
) -> Vec<(&'a str, &'a Vec<InterferenceRecord>)>
pub fn get_records_for_ids<'a>( &'a self, ids: &'a [String], ) -> Vec<(&'a str, &'a Vec<InterferenceRecord>)>
Get interference records for specific memory IDs (for targeted persistence)
Trait Implementations§
Auto Trait Implementations§
impl Freeze for InterferenceDetector
impl RefUnwindSafe for InterferenceDetector
impl Send for InterferenceDetector
impl Sync for InterferenceDetector
impl Unpin for InterferenceDetector
impl UnsafeUnpin for InterferenceDetector
impl UnwindSafe for InterferenceDetector
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more