Skip to main content

RelevanceEngine

Struct RelevanceEngine 

Source
pub struct RelevanceEngine { /* private fields */ }
Expand description

Proactive relevance engine for memory surfacing

Implementations§

Source§

impl RelevanceEngine

Source

pub fn new(ner: Arc<NeuralNer>) -> Self

Create a new relevance engine

Source

pub fn set_active_ab_test(&self, test_id: Option<String>)

Set active A/B test for this engine

When set, the engine will use weights from the A/B test based on user assignment.

Source

pub fn get_active_ab_test(&self) -> Option<String>

Get active A/B test ID

Source

pub fn get_weights(&self) -> LearnedWeights

Get current learned weights

Source

pub fn set_weights(&self, weights: LearnedWeights)

Set learned weights (e.g., loaded from storage)

Source

pub fn apply_feedback( &self, semantic_contributed: bool, entity_contributed: bool, tag_contributed: bool, helpful: bool, )

Apply feedback to update learned weights

Call this when user indicates a surfaced memory was helpful or not.

Source

pub fn surface_relevant( &self, context: &str, memory_system: &MemorySystem, graph_memory: Option<&GraphMemory>, config: &RelevanceConfig, feedback_store: Option<&RwLock<FeedbackStore>>, ) -> Result<RelevanceResponse>

Surface relevant memories for the given context

This is the main entry point for proactive memory surfacing. Target latency: <30ms

Source

pub fn surface_relevant_with_momentum( &self, context: &str, memory_system: &MemorySystem, graph_memory: Option<&GraphMemory>, config: &RelevanceConfig, momentum_lookup: &HashMap<Uuid, f32>, ) -> Result<RelevanceResponse>

Surface relevant memories with feedback momentum integration (FBK-5)

This variant incorporates momentum EMA from past feedback into scoring. Memories with positive momentum (consistently helpful) get boosted. Memories with negative momentum (consistently misleading) get penalized.

§Arguments
  • context: Current context/query text
  • memory_system: Memory storage
  • graph_memory: Optional graph memory for entity lookup
  • config: Relevance configuration
  • momentum_lookup: Map of memory_id -> momentum EMA (-1.0 to 1.0)
Source

pub fn surface_relevant_with_ab_test( &self, context: &str, user_id: &str, memory_system: &MemorySystem, graph_memory: Option<&GraphMemory>, config: &RelevanceConfig, ab_manager: &ABTestManager, ) -> Result<(RelevanceResponse, Option<ABTestVariant>)>

Surface relevant memories with A/B test integration

When an A/B test manager is provided, this method:

  1. Assigns the user to a variant (control or treatment)
  2. Uses weights from the assigned variant
  3. Records impressions for the test

Returns the variant used along with the response for tracking.

Source

pub fn record_ab_click( &self, user_id: &str, memory_id: Uuid, ab_manager: &ABTestManager, ) -> Result<()>

Record a click for A/B testing

Call this when a user interacts with a surfaced memory.

Source

pub fn record_ab_feedback( &self, user_id: &str, positive: bool, ab_manager: &ABTestManager, ) -> Result<()>

Record feedback for A/B testing

Call this when a user provides explicit feedback on a surfaced memory.

Source

pub fn refresh_entity_index(&self, graph_memory: &GraphMemory) -> Result<()>

Refresh the entity index from GraphMemory

This builds an O(1) lookup table from entity names to memory IDs. Call this periodically or when the graph changes significantly.

Performance: O(E * M) where E = entities, M = avg memories per entity Typically completes in <10ms for 1000 entities.

Source

pub fn get_memories_for_entity( &self, entity_name: &str, graph_memory: Option<&GraphMemory>, ) -> Option<HashSet<Uuid>>

Get memory IDs for an entity name using the cached index

Returns None if entity not in index, empty set if entity known but has no memories. Falls back to direct GraphMemory lookup if index is stale or missing.

Source

pub fn entity_index_needs_refresh(&self, max_age_hours: i64) -> bool

Check if entity index needs refresh (older than max_age_hours)

Source

pub fn entity_index_stats(&self) -> (usize, Option<DateTime<Utc>>)

Get entity index statistics

Source

pub fn clear_entity_index(&self)

Clear the entity index (useful for testing or memory pressure)

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts 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>

Converts 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)

Converts &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)

Converts &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
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Sync + Send>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> Fruit for T
where T: Send + Downcast,