Skip to main content

UtilityTracker

Struct UtilityTracker 

Source
pub struct UtilityTracker {
    pub config: UtilityConfig,
}
Expand description

Tracks and updates Q-value utility scores for memories.

Fields§

§config: UtilityConfig

Implementations§

Source§

impl UtilityTracker

Source

pub fn new() -> Self

Create a tracker with default configuration.

Source

pub fn with_config(config: UtilityConfig) -> Self

Create a tracker with custom configuration.

Source

pub fn record_retrieval( &self, conn: &Connection, memory_id: i64, was_useful: bool, query: &str, ) -> Result<()>

Record a retrieval feedback event for memory_id and update its utility score in-place using the Q-learning update rule.

This is a combined insert + score update: a new row is appended to utility_feedback and the running Q-value is recomputed from the full feedback history so that the score is always consistent with the table.

Source

pub fn get_utility( &self, conn: &Connection, memory_id: i64, ) -> Result<UtilityScore>

Compute the current utility score for memory_id from its feedback history.

The Q-value is replayed from the oldest event to the newest, applying the learning-rate update rule at each step. Temporal decay is then applied based on days elapsed since the most-recent retrieval.

Returns the initial_score when there is no feedback history.

Source

pub fn apply_utility_boost( &self, scores: &mut [(i64, f32)], conn: &Connection, ) -> Result<()>

Multiply the search scores for each (memory_id, score) pair by that memory’s utility score, clamped to [0.5, 2.0].

Memories with no feedback history receive a neutral multiplier of 1.0 (derived from initial_score = 0.5, mapped to 1.0 in the boost formula).

Source

pub fn batch_decay( &self, conn: &Connection, _config: &UtilityConfig, ) -> Result<usize>

Apply temporal decay to all recorded utility scores.

For every memory with at least one feedback event, the Q-value is recomputed (which includes decay). This function returns the count of memories whose effective score changed (decayed by at least 0.001).

Because scores are always computed from the feedback log, this function does not need to write anything to the database. It is provided as a hook for callers that want to verify how many scores have drifted.

Source

pub fn utility_stats( &self, conn: &Connection, workspace: Option<&str>, ) -> Result<UtilityStats>

Compute aggregated utility statistics.

When workspace is Some, only memories that appear in the given workspace are considered (requires a memories table with a workspace column and an id column). Pass None to aggregate across all memories that have feedback.

Trait Implementations§

Source§

impl Default for UtilityTracker

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

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<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
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