pub struct ScoreWeights {
pub alpha: f32,
pub beta: f32,
pub gamma: f32,
pub delta: f32,
pub half_life_secs: f32,
}Expand description
Weights for the multi-signal recall score (scoring v2, shipped in v0.7.0).
score = similarity
+ max(similarity, 0)
· ( β · recency
+ γ · (importance − 0.5)
+ δ · tanh(access_count / 5) )
recency = exp( -ln(2) · age_secs / half_life_secs )
age_secs = now - memory.created_atDesign notes (from the 2026-11-06 scoring-v2 bake-off; see the
ranking_v2 harness at mnemo/examples/ranking_v2.rs):
- Similarity-gated. The recency / importance / usage terms are
multiplied by
max(similarity, 0), so a stale-but-semantically-off memory can’t ride recency or importance past a semantically-on-point one. Pre-v0.7.0 scoring was purely additive. - Importance is centered at 0.5. A default-importance memory contributes zero importance bonus; importance only pushes a score up or down from that reference point.
- Usage is saturating.
tanh(uses/5)caps the feedback bonus so a heavily-returned memory can’t keep accumulating weight past a plateau. At 5 uses the bonus is ~76% of its asymptote; at 10, ~96%. - Recency is decoupled from the feedback loop. Age is measured
from
created_at, notaccessed_at, so arecall()call does not bump its own results’ recency scores on later queries.
The output of this scorer is on a different scale from the pre-v0.7.0 formula. Callers that compared raw scores to a fixed threshold should re-pick the threshold against the new scale.
Fields§
§alpha: f32Weight on semantic similarity. Kept in the struct for calibration
hooks and symmetry with the other weights; scoring v2 always uses
it as 1.0 because the leading similarity term is ungated and
the whole score sits on the cosine-similarity scale by design.
beta: f32Weight on the recency bonus (multiplied by max(sim, 0)).
gamma: f32Weight on the importance bonus (importance − 0.5), centered at
the default-importance 0.5 (multiplied by max(sim, 0)).
delta: f32Weight on the saturating usage bonus tanh(access_count / 5)
(multiplied by max(sim, 0)).
half_life_secs: f32Half-life of the recency term, in seconds.