Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 31 additions & 13 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -163,23 +163,41 @@
# ever asked, so they compress the whole scale: hits and misses both
# move closer together.
#
# So the fixtures validate the mechanism, not the number. On the real
# store the number is nearer 0.96 -- from ONE pair, which is not enough
# to set it. Re-run --no-plant with at least three questions on each
# side (the harness now refuses fewer) before writing a value here.
# So the fixtures validate the mechanism, not the number. Measured
# again on 2026-08-22, six questions against a copy of the real store,
# before and after it was re-sliced one entry per exchange:
#
# Read this before switching it on, though. The five rows behind the
# invented-causality answer of 2026-08-19 sat at 0.90 to 1.0015 --
# INSIDE the range a real hit occupies. No cutoff that keeps real hits
# would have prevented that answer. This setting removes the case where
# nothing in the store is remotely relevant; it does nothing about
# several middling entries being welded together, which is the failure
# that actually happened and which is an intake problem.
# before hits 0.8934 0.671 0.9386 | misses 0.9891 0.9356 1.098
# worst hit 0.9386 > best miss 0.9356 -> NO GAP
# after hits 0.4498 0.671 0.7695 | misses 1.0619 0.8337 1.0369
# worst hit 0.7695 < best miss 0.8337 -> gap 0.0642
#
# Re-measure against a COPY of your real store before trusting it:
# The intake change is what made a threshold choosable at all. The
# short fact (0.671) did not move -- only the entries that had been
# buried in a compacted block did, which is the control.
#
# 0.95, not the midpoint the harness suggests. Two of the three misses
# are "nothing here is relevant" (1.0619, 1.0369) and that is what this
# setting is for; the third sits at 0.8337 only because the store
# contains a lexically similar sentence that does not answer the
# question, and no number separates that cleanly. Too high lets a bad
# answer through, which gets argued with; too low answers "je n'ai rien
# en mémoire" while holding the answer, which gets believed.
#
# recall.dropped logs every cut with its id and distance, so a value
# that bites in the wrong place shows up in the logs.
#
# Re-measure against a COPY of your own store before trusting it:
# recall_distance.py --db /tmp/real_copy.db --no-plant \
# --hit "..." --miss "..."
# RECALL_MAX_DISTANCE=1.05
#
# The one ACTIVE line in this file, deliberately. Everything else here
# is a commented default that also lives in config.py; this value does
# not, because it was measured against one specific store rather than
# derived from anything general. Unset (the config default) still means
# no filtering at all, so a deployment that has not measured its own
# store is not silently given someone else's number.
RECALL_MAX_DISTANCE=0.95

# --- Memory ---------------------------------------------------------------
# MEMORY_ENABLED=true
Expand Down
Loading
Loading