feat(#814): believability scores memory carry — facts reused across conversations - #993
Open
0frankie wants to merge 1 commit into
Open
feat(#814): believability scores memory carry — facts reused across conversations#9930frankie wants to merge 1 commit into
0frankie wants to merge 1 commit into
Conversation
…onversations A sixth rubric dimension, memory_carry: does a later conversation reuse a specific detail that first entered this agent's stream in an *earlier* conversation — ideally with a different partner? That is the behavior #760's R1 demonstrated (Sofia carried what her Diego conversations gave her into a conversation with Professor Tanaka ~530 steps later) and the one #781's novelty term only proxies. Per conversation after the agent's first, the heuristic looks for a detail in the agent's own lines that was heard from a partner earlier (or IS an earlier partner: meeting someone is how their name enters your stream), was not already in the agent's persona/schedule/plans, and does not name the current interlocutor — direct address is not recall. Full credit when the source conversation shares no partner with the reusing one, half otherwise; the score is the mean credit, n/a below two conversations. Pure offline heuristic, no LLM calls; the LLM judge inherits the dimension through DIMENSIONS like every other. "Specific detail" is the part the #814 issue flags as hard, and the issue's own suggestion — rare-word weighting over the run corpus — fails validation in BOTH available corpus readings: transcript-only rarity lets plain filler ("nice", "anyway", "hoping") through because a small run makes everything rare, and whole-corpus rarity kills the true positives because a fact that WAS carried gets re-memorized and re-discussed ("diego" df 74). So a detail must be structurally specific (a met agent's name, a mid-sentence proper noun, a number) or a lowercase word rare by both counts. Validated on the batch-1 runs: R1's carrier Sofia scores 5.5 with the exact issue evidence cited, while R2's groundhog-day pair (and R3's) floor at 1.0 — 0/7 later conversations each. Closes #814 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
A sixth rubric dimension for
backend/eval/believability.py:memory_carry— does a later conversation reuse a specific detail that first entered this agent's stream in an earlier conversation, ideally with a different partner? That is the behavior #760's R1 demonstrated — the single clearest evidence the cognition stack works — and the one #781 shipped only proxies for (per-decisionmemory_use, thesocial_groundingnovelty term).It is a pure offline heuristic like the dimensions around it — no LLM calls, deterministic, always available under
--no-llm. The LLM judge inherits the dimension throughDIMENSIONS(tool schema + rubric bullet), exactly asworld_grounding(#780) was registered.How it scores
Per conversation after the agent's first, walk the agent's own lines for a detail that:
Full credit when the source conversation shares no partner with the reusing one (the strong, R1-shaped form),
0.5when the agent retells its source. The dimension is the mean credit over those later conversations; fewer than two conversations isn/a, excluded from the means like every othern/a."Specific detail": what the issue's suggested proxy measured out to
The issue records three proxies as already rejected (kept here so nobody re-derives them):
step - created_turn)aidenalone was 4,775 of Chris Donnelly's overlapsThe issue's suggested cheapest-thing — rare-word weighting over the run's corpus — was validated against the reference runs as instructed, and it fails in both available corpus readings:
designdf 57,diegodf 74 in R1), so the carried details get filtered outSo the shipped definition is structural first, frequency second: a detail is a met agent's name, a mid-sentence proper noun, a number, or a lowercase content word that is rare by both counts (
CARRY_MAX_TRANSCRIPT_LINES = 4,CARRY_MAX_CORPUS_DOCS = 5— filler saturates memory streams while a real detail like R1's "warm wood paneling" appears only in its few echoes). Names skip the frequency gates entirely: the run-wide line count ofchrisis direct-address noise the current-interlocutor guard already removes, and naming an absent person you met earlier is the R1 evidence no matter how often the pair greeted each other in between.Acceptance: measured on the batch-1 reference runs
memory_carry, heuristic judge, both runs from the batch-1 artifacts (#783):'diego' — first heard from Diego Torres at steps 276-370 — resurfaces with Professor Tanaka(steps 810+, ~530 steps later, a different partner) — the exact event the issue citesR1's carry scores 4.5 points above R2's loop. Corroboration across the rest of the batch:
'grace' — first heard from Grace Kim at steps 252-976 — resurfaces with Jamal Reed).n/aacross the board.Run-level means with Penn
meta.locationsinjected (the #817 procedure — these bakes predate #780, see #813): dimension mean R1 3.25 / R2 4.00 — R2's edge is Nina's genuine carry, the same healthy-majority effect the #817 spec documents for the overall mean ("run-mean ordering is not the bar"). The loop pair lands where it should within its run: Aiden and Chris stay the two lowest agents in R2 (6.87, 7.00). Overall means move R1 7.97, R2 8.45, R3 7.25, R4 7.90, R5 7.90 — same ordering as #817.This validation is a reported experiment, not a committed test, because the run artifacts live in
godot-generative-agents/runs/, not in a fixture; the committed unit tests pin the mechanics on small synthetic replays (a carried rare detail scores, a looping pair's converged vocabulary doesn't, cross-partner beats same-partner, numbers carry, innate vocabulary and direct address don't,n/abelow two conversations).Files
backend/eval/believability.py— the dimension, its helpers (_detail_words,_proper_case_words,_carry_frequencies,_is_specific_detail), theCARRY_*constants, registration inDIMENSIONS/score_agent/tool schemabackend/prompt_templates/believability_rubric.prompty— the sixth rubric bullet ("all six dimensions"), with the pinned render test updatedbackend/prompt_templates/README.md— the usage-table rowtests/test_believability_eval.py— 8 new tests plus the fixture-high / ledger-ceiling / GRADE updates for a dimension that can ben/aFull sweep:
2476 passed, 1 failed, 2 skipped— the one failure istests/test_godot_smoke.py's known fresh-worktree timeout, unrelated.Closes #814
🤖 Generated with Claude Code