pub struct UtilityTracker {
pub config: UtilityConfig,
}Expand description
Tracks and updates Q-value utility scores for memories.
Fields§
§config: UtilityConfigImplementations§
Source§impl UtilityTracker
impl UtilityTracker
Sourcepub fn with_config(config: UtilityConfig) -> Self
pub fn with_config(config: UtilityConfig) -> Self
Create a tracker with custom configuration.
Sourcepub fn record_retrieval(
&self,
conn: &Connection,
memory_id: i64,
was_useful: bool,
query: &str,
) -> Result<()>
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.
Sourcepub fn get_utility(
&self,
conn: &Connection,
memory_id: i64,
) -> Result<UtilityScore>
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.
Sourcepub fn apply_utility_boost(
&self,
scores: &mut [(i64, f32)],
conn: &Connection,
) -> Result<()>
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).
Sourcepub fn batch_decay(
&self,
conn: &Connection,
_config: &UtilityConfig,
) -> Result<usize>
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.
Sourcepub fn utility_stats(
&self,
conn: &Connection,
workspace: Option<&str>,
) -> Result<UtilityStats>
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§
Auto Trait Implementations§
impl Freeze for UtilityTracker
impl RefUnwindSafe for UtilityTracker
impl Send for UtilityTracker
impl Sync for UtilityTracker
impl Unpin for UtilityTracker
impl UnsafeUnpin for UtilityTracker
impl UnwindSafe for UtilityTracker
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> 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