Skip to main content

BeliefStore

Struct BeliefStore 

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

Persistence layer for the pre-commitment probabilistic edge layer.

All mutations go through this type: creating new beliefs, applying Noisy-OR evidence updates, marking beliefs as promoted, and evicting stale candidates.

Obtain an instance via BeliefStore::new after running the zeph-db migrations.

Implementations§

Source§

impl BeliefStore

Source

pub fn new(pool: DbPool, config: BeliefMemConfig) -> Self

Create a new BeliefStore wrapping pool with the given configuration.

§Examples
use zeph_memory::graph::belief::{BeliefStore, BeliefMemConfig};
use zeph_db::DbPool;

async fn example(pool: DbPool) {
    let store = BeliefStore::new(pool, BeliefMemConfig::default());
}
Source

pub async fn record_evidence( &self, source_entity_id: i64, target_entity_id: i64, relation: &str, canonical_relation: &str, fact: &str, edge_type: EdgeType, evidence_prob: f32, episode_id: Option<&str>, ) -> Result<Option<PendingBelief>, MemoryError>

Record new evidence for a candidate edge and apply Noisy-OR accumulation.

If a matching pending_belief exists for the same (source_entity_id, target_entity_id, canonical_relation, edge_type) tuple, this method:

  1. Applies optional temporal decay to the existing probability.
  2. Combines the decayed probability with evidence_prob via Noisy-OR.
  3. Persists the update and appends a row to belief_evidence.

If no matching belief exists and evidence_prob >= min_entry_prob, a new belief row is created.

Returns Some(PendingBelief) when the updated probability crosses promote_threshold. The caller is responsible for calling GraphStore::insert_or_supersede to commit the promoted belief, then calling BeliefStore::mark_promoted to record the committed edge ID.

Returns None when the belief exists but has not yet crossed the threshold, or when evidence_prob < min_entry_prob and no prior belief existed.

§Errors

Returns MemoryError for database failures.

Source

pub async fn retrieve_candidates( &self, source_entity_id: i64, canonical_relation: &str, top_k: Option<usize>, ) -> Result<Vec<PendingBelief>, MemoryError>

Retrieve the top-K unpromoted beliefs for a (source, canonical_relation) pair, ordered by probability descending.

This is a fallback for graph recall: called only when no committed edge exists. Results are annotated by the caller as uncertain (is_uncertain: true).

§Errors

Returns MemoryError for database failures.

Source

pub async fn mark_promoted( &self, belief_id: i64, committed_edge_id: i64, ) -> Result<(), MemoryError>

Mark a belief as promoted and record the committed edge ID.

Sets promoted_at to the current Unix timestamp and stores committed_edge_id so the belief audit trail links to the committed graph edge.

§Errors

Returns MemoryError for database failures.

Source

pub async fn evict_stale( &self, source_entity_id: i64, canonical_relation: &str, ) -> Result<usize, MemoryError>

Evict old low-probability beliefs for a (source, canonical_relation) group that exceed BeliefMemConfig::max_candidates_per_group.

The max_candidates_per_group highest-probability beliefs are retained; the rest are deleted. Returns the number of rows deleted.

§Errors

Returns MemoryError for database failures.

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> 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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
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