98ee701e03
The memory pass ran only after the notes-only gate had already rejected the same note at the same score. Notes and facts share one vector index, so a note that failed there failed again — the branch could only ever return a fact. Now the memory pass runs first: one search over everything Maven remembers, one gate, and the memory that clearly matches best answers (a note gets phrased, a fact is read back). The notes-only pass stays behind it for notes the vector index does not hold. No threshold moved, so the set of questions answered is unchanged — only which memory answers them. Fixture gained two mixed note+fact cases, so the answerable count goes 25 -> 27: hash recall@1 36.0% -> 37.0% (ratchet 0.32 unchanged, comment updated), e5 recall@1 72.0% -> 70.4%, false recall still 1/5. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CGeSZxh1DCtRxmFVSYVGvJ
26 lines
1.0 KiB
Go
26 lines
1.0 KiB
Go
package main
|
|
|
|
import "github.com/kami/maven/internal/memory"
|
|
|
|
// bestRecall is the read side of the long-term memory store: the top hit when
|
|
// it clears the confidence gate. The index holds BOTH notes and facts, and
|
|
// either can win — the caller looks at the returned hit's meta["type"] to see
|
|
// which. Facts aren't in the notes table, so this is the only path that can
|
|
// answer "when did I last …?" from a captured fact.
|
|
//
|
|
// The whole hit is returned, not just its text, because "which memory answered"
|
|
// decides how the answer is said: a note gets phrased in Maven's voice, a fact
|
|
// is read back as stored.
|
|
//
|
|
// ok=false when the hit fails the confidence gate (see memory.Confident: an
|
|
// absolute floor plus a margin over the runner-up) or carries no text.
|
|
func bestRecall(results []memory.Result, minScore, minMargin float64) (memory.Result, bool) {
|
|
if !memory.Confident(results, minScore, minMargin) {
|
|
return memory.Result{}, false
|
|
}
|
|
if results[0].Meta["text"] == "" {
|
|
return memory.Result{}, false
|
|
}
|
|
return results[0], true
|
|
}
|