Stale, Misattributed, or Late: Where Personal Memory Fails Before Generation
Organizations: University of California, Berkeley · Haas School of Business, University of California, Berkeley
Abstract
Personal memory for language agents is usually judged by whether the final an- swer is correct. That score hides errors that arise before generation: the memory block may contain an obsolete value, a fact about the wrong person, or no use- ful fact before the serving deadline. We measure these failures directly. Using Personal Fact Memory (PFM) as a reference layer, we find that temporal validity is primarily a property of memory construction in our setting. On a controlled revision benchmark, serving only the active value of each correctly keyed slot eliminates observed stale exposure; without update resolution, 70.3% of prompts expose a superseded value. Once retrievers share the same active store and par- ticipant information, participant-aware BM25 is equivalent to the reference ranker within a prespecified 0.02 margin. The harder problem is assigning revisions to the right slot. Missed merges leave stale values active, whereas false merges silently remove current values; four LLM key assigners achieve higher key re- call than a rule extractor yet produce lower clean-retrieval rates, and open-domain merge recall on LongMemEval never exceeds 0.062. Misattribution survives va- lidity filtering: an entity posterior reduces same-name exposure on controlled data but cannot distinguish identically named speakers in LoCoMo. Two frozen lan- guage models reproduce prompt errors in generated text. Retrieval latency varies across rankers, but prompt prefill dominates turn-level latency on our hardware. These results argue for evaluating agent memory before generation, separating stored-state validity, identity resolution, abstention, and serving latency.
Figures & tables
| Store | Current | Stale | Wrong-person | Co-injection | Clean | |
|---|---|---|---|---|---|---|
| Keyed | 800 | 0.998 (0.993, 1.000) | 0.000 (0.000, 0.005) | 0.121 (0.094, 0.149) | 0.000 (0.000, 0.005) | 0.877 (0.850, 0.904) |
| Keyless | 800 | 0.950 (0.923, 0.971) | 0.703 (0.654, 0.749) | 0.004 (0.000, 0.012) | 0.701 (0.652, 0.746) | 0.247 (0.210, 0.284) |
| Keyed | 240 | 0.869 (0.836, 0.903) | 0.000 (0.000, 0.005) | 0.000 (0.000, 0.005) | 0.000 (0.000, 0.005) | 0.869 (0.836, 0.903) |
| Keyless | 240 | 0.823 (0.791, 0.852) | 0.446 (0.396, 0.501) | 0.000 (0.000, 0.005) | 0.438 (0.388, 0.493) | 0.385 (0.331, 0.435) |
| Method | Current | Stale | Wrong-person | Clean | p50 (ms) | p99 (ms) |
|---|---|---|---|---|---|---|
| PFM | 0.998 | 0.000 | 0.121 | 0.877 (0.850, 0.904) | 0.25 | 0.69 |
| BM25 + validity | 0.891 | 0.000 | 0.120 | 0.774 (0.737, 0.809) | 0.09 | 0.26 |
| BM25 + validity + | 1.000 | 0.000 | 0.128 | 0.873 (0.847, 0.896) | 0.10 | 0.29 |
| Dense + validity + | 1.000 | 0.000 | 0.164 | 0.836 (0.803, 0.868) | 18.3 | 93.0 |
| Hybrid + validity + | 1.000 | 0.000 | 0.157 | 0.843 (0.813, 0.872) | 18.2 | 82.4 |
| BM25 + (no validity) | 0.997 | 0.802 | 0.007 | 0.195 (0.164, 0.227) | 0.18 | 0.46 |
| Main benchmark | Third party | Hard slice | ||||
|---|---|---|---|---|---|---|
| Serving rule | Wrong-person | Clean | Abstained | Recall | Clean | Abstained |
| none | 0.121 | 0.877 | 0.000 | 0.985 | 0.000 | 0.000 |
| relative cutoff @0.7 | 0.008 | 0.983 | 0.000 | 0.975 | 0.908 | 0.000 |
| participant filter | 0.000 | 0.998 | 0.000 | 0.020 | 1.000 | 0.000 |
| identity posterior | 0.032 | 0.967 | 0.000 | 0.985 | 1.000 | 0.000 |
| + slot gate | 0.032 | 0.967 | 0.002 | 0.985 | 1.000 | 1.000 |
| Both | Merged | Merge | Cross- | |||
| Key assignment | keyed | both | recall | question | Stale | Clean |
| stateless, qwen2:7b | 0.438 | 0.000 | 0.000 | 0.042 | 0.688 | 0.219 |
| + store in the prompt | 0.500 | 0.125 | 0.062 | 0.294 | 0.594 | 0.250 |
| + model-judged linking | 0.438 | 0.071 | 0.031 | 0.143 | 0.719 | 0.188 |
| + Jaccard linking, | 0.438 | 0.071 | 0.031 | 0.087 | 0.719 | 0.188 |
| + Jaccard linking, | 0.438 | 0.143 | 0.062 | 0.140 | 0.688 | 0.219 |
Appendix figures & tables21 assets
Supplementary material from the paper’s appendix.
Appendix
| Component | Parameter | Value |
|---|---|---|
| Selection | facts per request ; character budget (whole block) | 6; 800 |
| shortlist before selection | 50 | |
| Query | positional decay ; participant weight (additive) | 0.95; 1.5 |
| term cap | 12 | |
| BM25F | field weights (text, entities, participants) | 1.0, 2.5, 2.0 |
| ; (shared by all fields) | 1.2; 0.75 |
| Seed | Msgs | Queries | Amb. chains | Amb. | Rev. | Canc. | Verb. | Para. | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| s7 | 1441 | 240 | 33 | 43 | 188 | 14 | 14 | 80 | 52 | 81 | 48 | 34 | 25 |
| s11 | 1437 | 240 | 32 | 40 | 196 | 16 | 13 | 80 | 44 | 81 | 54 | 30 | 31 |
| s13 | 1426 | 240 | 34 | 48 | 189 | 6 | 14 | 80 | 51 | 70 | 73 | 23 | 23 |
| s17 | 1465 | 240 | 31 | 42 | 196 | 16 | 13 | 80 | 44 | 59 | 66 | 39 | 32 |
| s19 | 1428 | 240 | 38 | 50 | 193 | 21 | 12 | 80 | 47 | 69 | 77 | 25 | 22 |
| Lag | Slice | Current | Stale | Clean |
|---|---|---|---|---|
| 0 | revised | 1.000 | 0.000 | 0.877 |
| 0 | unrevised | 0.992 | 0.000 | 0.878 |
| 1 | revised | 0.021 | 1.000 | 0.000 |
| 1 | unrevised | 0.000 | 0.000 | 0.000 |
| 2 | revised | 0.012 | 0.626 | 0.006 |
| 2 | unrevised | 0.000 | 0.000 | 0.000 |
| GC | p50 | p99 | max | read p50 | p99 | max | fresh p50 | p99 | max | fallback |
|---|---|---|---|---|---|---|---|---|---|---|
| on | 2.14 | 28.5 | 34.8 | 0.00 | 0.01 | 0.03 | 7.14 | 33.5 | 39.8 | 0.192 |
| off | 1.85 | 10.6 | 16.0 | 0.00 | 0.01 | 0.01 | 6.85 | 15.6 | 21.0 | 0.117 |
| Facts | Queries | p50 | p99 | p50 (frozen) | p99 (frozen) | Add p50 | Heap (MB) |
|---|---|---|---|---|---|---|---|
| 100 | 300 | 0.03 | 0.04 | 0.03 | 0.04 | 0.025 | 0.4 |
| 1,000 | 300 | 0.20 | 0.23 | 0.20 | 0.22 | 0.076 | 2.9 |
| 5,000 | 300 | 0.70 | 0.77 | 0.70 | 0.75 | 0.132 | 13.4 |
| 10,000 | 300 | 1.39 | 1.59 | 1.30 | 1.39 | 0.136 | 26.5 |
| 20,000 | 300 | 2.92 | 21.3 | 2.77 | 3.37 | 0.143 | 52.9 |
| 50,000 | 300 | 9.20 | 62.9 | 9.71 | 11.6 | 0.141 | 137.5 |
| Construction | Key prec. | Key rec. | Clean | Lost | clean vs rule |
|---|---|---|---|---|---|
| rule keys | 1.000 | 0.807 | 0.781 | 0.047 | – |
| model keys, llama3.2:3b | 0.930 | 0.994 | 0.592 | 0.331 | 0.189 ( 0.241, 0.136) |
| model keys, qwen2:7b | 0.926 | 0.991 | 0.560 | 0.342 | 0.221 ( 0.273, 0.168) |
| model keys, qwen2.5:7b | 0.990 | 0.996 | 0.644 | 0.275 | 0.136 ( 0.186, 0.086) |
| model keys, qwen2.5:14b | 0.969 | 0.980 | 0.593 | 0.307 | 0.188 ( 0.240, 0.134) |
| model updates, llama3.2:3b † | – | – | 0.292 | 0.517 | 0.471 ( 0.563, 0.379) |
| Key assigner | Correct | Missed | Wrong slot | Wrong entity | Commonest confusion |
|---|---|---|---|---|---|
| rule keys | 1,023 | 245 | 0 | 0 | – |
| llama3.2:3b | 1,173 | 7 | 88 | 0 | room meeting (76) |
| qwen2:7b | 1,164 | 11 | 93 | 0 | room meeting (74) |
| qwen2.5:7b | 1,250 | 5 | 13 | 0 | deadline meeting (12) |
| qwen2.5:14b | 1,205 | 25 | 38 | 0 | room meeting (18) |
| Method | Clean | Current | Stale | Wrong | p50 (ms) | p99 (ms) |
|---|---|---|---|---|---|---|
| PFM | 0.877 (0.850, 0.904) | 0.998 | 0.000 | 0.121 | 0.25 | 0.69 |
| BM25 + validity | 0.774 (0.737, 0.809) | 0.891 | 0.000 | 0.120 | 0.09 | 0.26 |
| BM25 + validity ( ) | 0.873 (0.847, 0.896) | 1.000 | 0.000 | 0.128 | 0.10 | 0.29 |
| Dense + validity | 0.834 (0.802, 0.866) | 0.998 | 0.000 | 0.165 | 17.9 | 88.5 |
| Dense + validity ( ) | 0.836 (0.803, 0.868) | 1.000 | 0.000 | 0.164 | 18.3 | 93.0 |
| Hybrid + validity | 0.807 (0.773, 0.842) | 0.949 | 0.000 | 0.151 | 17.5 | 79.7 |
| Variant | Clean | Current | Stale | Wrong | Amb. clean | Amb. wrong | |
|---|---|---|---|---|---|---|---|
| full | 0.877 (0.850, 0.904) | +0.000 | 0.998 | 0.000 | 0.121 | 0.341 | 0.650 |
| no participant field | 0.842 (0.813, 0.870) | -0.036 | 0.996 | 0.000 | 0.154 | 0.170 | 0.830 |
| no participant terms | 0.811 (0.775, 0.845) | -0.067 | 0.943 | 0.000 | 0.133 | 0.211 | 0.717 |
| no participant seeds | 0.877 (0.850, 0.904) | +0.000 | 0.998 | 0.000 | 0.121 | 0.341 | 0.650 |
| no participants at all | 0.756 (0.723, 0.788) | -0.122 | 0.890 | 0.000 | 0.138 | 0.130 | 0.744 |
| no entity field | 0.884 (0.857, 0.910) | +0.007 | 0.998 | 0.000 | 0.114 | 0.377 | 0.614 |
| Method | Benchmark mix | Reweighted | |||||
|---|---|---|---|---|---|---|---|
| PFM (keyed) | 0.878 | 0.867 | 0.874 | 0.887 | 0.902 | 0.877 | 0.877 |
| PFM, keyless | 0.794 | 0.233 | 0.047 | 0.033 | 0.023 | 0.247 | 0.603 |
| BM25 + validity ( ) | 0.857 | 0.878 | 0.868 | 0.861 | 0.910 | 0.873 | 0.863 |
| Dense + validity ( ) | 0.819 | 0.850 | 0.818 | 0.848 | 0.857 | 0.836 | 0.826 |
| BM25 ( ) | 0.983 | 0.000 | 0.000 | 0.000 | 0.000 | 0.195 | 0.688 |
| Method | seed 7 | seed 11 | seed 13 | seed 17 | seed 19 | Mean sd |
|---|---|---|---|---|---|---|
| PFM | 0.875 | 0.912 | 0.875 | 0.854 | 0.871 | 0.877 0.021 |
| BM25 + validity | 0.754 | 0.812 | 0.754 | 0.783 | 0.767 | 0.774 0.025 |
| BM25 + validity ( ) | 0.871 | 0.892 | 0.867 | 0.867 | 0.867 | 0.873 0.011 |
| Dense + validity ( ) | 0.833 | 0.867 | 0.812 | 0.850 | 0.817 | 0.836 0.023 |
| Hybrid + validity ( ) | 0.842 | 0.863 | 0.829 | 0.858 | 0.825 | 0.843 0.017 |
| BM25 ( ) | 0.212 | 0.179 | 0.208 | 0.183 | 0.192 | 0.195 0.015 |
| (rows), (columns) | 0 | 0.05 | 0.1 | 0.2 |
|---|---|---|---|---|
| 0 | 0.877 / 0.000 / 0.000 | 0.795 / 0.048 / 0.061 | 0.713 / 0.102 / 0.125 | 0.553 / 0.193 / 0.225 |
| 0.05 | 0.797 / 0.100 / 0.000 | 0.709 / 0.152 / 0.068 | 0.614 / 0.210 / 0.129 | 0.496 / 0.271 / 0.214 |
| 0.1 | 0.730 / 0.193 / 0.000 | 0.637 / 0.242 / 0.062 | 0.562 / 0.281 / 0.118 | 0.460 / 0.332 / 0.205 |
| 0.2 | 0.579 / 0.370 / 0.000 | 0.522 / 0.398 / 0.048 | 0.462 / 0.425 / 0.102 | 0.368 / 0.463 / 0.186 |
| 0.4 | 0.376 / 0.592 / 0.000 | 0.341 / 0.592 / 0.044 | 0.331 / 0.587 / 0.083 | 0.288 / 0.598 / 0.121 |
| Serving rule | Wrong person | name-sharing | Off-conversation lines | Current |
|---|---|---|---|---|
| none | 0.188 | 0.543 | 0.371 | 0.078 |
| participant filter | 0.104 | 0.301 | 0.087 | 0.102 |
| context affinity | 0.190 | 0.548 | 0.237 | 0.050 |
| Arm | Stale | Wrong | Clean | Abstained (no answer) | Model ms p50 |
|---|---|---|---|---|---|
| bm25+P | 0.800 | 0.006 | 0.196 | 0.000 | – |
| llm temporal rerank | 0.381 | 0.008 | 0.302 | 0.000 | 653.6 |
| pfm | 0.000 | 0.106 | 0.894 | 0.000 | – |
| identity hard | 0.000 | 0.031 | 0.969 | 0.000 | – |
| identity hard—abstain slot@0.5 | 0.000 | 0.031 | 0.969 | 1.000 | – |
| llm abstain | 0.000 | 0.054 | 0.569 | 0.667 | 912.1 |
| Memory | Curr. | Stale | Wrong | Correct | Mixed | Stale | Wrong | Other | Chars | TTFT |
|---|---|---|---|---|---|---|---|---|---|---|
| None | – | – | – | 0.000 | 0.000 | 0.004 | 0.000 | 0.996 | 0 | 325 |
| PFM | 1.000 | 0.000 | 0.125 | 0.929 | 0.000 | 0.000 | 0.013 | 0.058 | 472 | 1229 |
| PFM, keyless | 0.908 | 0.642 | 0.013 | 0.704 | 0.008 | 0.188 | 0.000 | 0.100 | 476 | 1236 |
| BM25 | 0.854 | 0.692 | 0.092 | 0.629 | 0.000 | 0.254 | 0.004 | 0.113 | 468 | 1365 |
| BM25 + latest-value instruction | 0.854 | 0.692 | 0.092 | 0.654 | 0.000 | 0.233 | 0.004 | 0.108 | 468 | 1506 |
| BM25 + validity | 0.887 | 0.000 | 0.133 | 0.842 | 0.000 | 0.000 | 0.004 | 0.154 | 465 | 1388 |
| Memory | Curr. | Stale | Wrong | Correct | Mixed | Stale | Wrong | Other | Chars | TTFT |
|---|---|---|---|---|---|---|---|---|---|---|
| None | – | – | – | 0.000 | 0.000 | 0.000 | 0.000 | 1.000 | 0 | 168 |
| PFM | 1.000 | 0.000 | 0.125 | 0.912 | 0.000 | 0.000 | 0.017 | 0.071 | 472 | 544 |
| PFM, keyless | 0.908 | 0.642 | 0.013 | 0.592 | 0.000 | 0.279 | 0.000 | 0.129 | 476 | 623 |
| BM25 | 0.854 | 0.692 | 0.092 | 0.454 | 0.000 | 0.408 | 0.004 | 0.133 | 468 | 830 |
| BM25 + latest-value instruction | 0.854 | 0.692 | 0.092 | 0.504 | 0.000 | 0.321 | 0.004 | 0.171 | 468 | 648 |
| BM25 + validity | 0.887 | 0.000 | 0.133 | 0.817 | 0.000 | 0.000 | 0.004 | 0.179 | 465 | 809 |
| Condition | Model | Memory | Prompt stale | Prompt wrong | Correct | Stale | Wrong | |
|---|---|---|---|---|---|---|---|---|
| hard identity | llama3.2 | PFM | 36 | 0.000 | 1.000 | 0.694 | 0.000 | 0.306 |
| hard identity | llama3.2 | pfm identity | 36 | 0.000 | 0.333 | 0.694 | 0.000 | 0.306 |
| hard identity | llama3.2 | pfm identity abstain | 36 | 0.000 | 0.000 | 0.972 | 0.000 | 0.000 |
| hard identity | qwen2 | PFM | 36 | 0.000 | 1.000 | 0.667 | 0.000 | 0.333 |
| hard identity | qwen2 | pfm identity | 36 | 0.000 | 0.333 | 0.667 | 0.000 | 0.333 |
| hard identity | qwen2 | pfm identity abstain | 36 | 0.000 | 0.000 | 1.000 | 0.000 | 0.000 |
| Condition | Current | Stale | Wrong | Clean | |
| Two instances of one slot type | |||||
| key(entity,slot) | 240 | 0.500 | 0.000 | 0.000 | 0.500 |
| key(entity,slot,noun) | 240 | 1.000 | 0.000 | 0.000 | 1.000 |
| keyless | 240 | 1.000 | 1.000 | 0.000 | 0.000 |
| Out-of-order arrival | |||||
| in order | 1200 | 0.998 | 0.000 | 0.121 | 0.877 |