@elizaos/plugin-memory 1.0.4 โ†’ 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +333 -192
  2. package/dist/browser/index.browser.js +348 -122
  3. package/dist/browser/index.browser.js.map +23 -13
  4. package/dist/cjs/index.node.cjs +2206 -963
  5. package/dist/cjs/index.node.js.map +23 -13
  6. package/dist/evaluators/consolidation.d.ts +19 -0
  7. package/dist/evaluators/summarization.d.ts +5 -17
  8. package/dist/index.d.ts +152 -30
  9. package/dist/node/index.node.js +2242 -994
  10. package/dist/node/index.node.js.map +23 -13
  11. package/dist/prompts/consolidation.d.ts +35 -0
  12. package/dist/prompts/summarization.d.ts +25 -0
  13. package/dist/providers/action-results.d.ts +2 -0
  14. package/dist/providers/long-term-memory.d.ts +18 -11
  15. package/dist/providers/recent-conversation-summary.d.ts +2 -0
  16. package/dist/repositories/conversation-summary.d.ts +33 -0
  17. package/dist/repositories/index.d.ts +17 -0
  18. package/dist/repositories/long-term-memory.d.ts +53 -0
  19. package/dist/schemas/conversation-summaries.d.ts +494 -0
  20. package/dist/schemas/index.d.ts +16 -6
  21. package/dist/schemas/long-term-memories.d.ts +308 -70
  22. package/dist/services/memory-service.d.ts +95 -48
  23. package/dist/types/index.d.ts +299 -52
  24. package/dist/utils/db-mapping.d.ts +20 -0
  25. package/dist/utils/decay-scoring.d.ts +41 -0
  26. package/dist/utils/embedding.d.ts +21 -0
  27. package/dist/utils/formatting.d.ts +17 -0
  28. package/dist/utils/index.d.ts +17 -0
  29. package/dist/utils/search-merging.d.ts +18 -0
  30. package/dist/utils/token-counter.d.ts +53 -0
  31. package/package.json +83 -1
  32. package/dist/actions/remember.d.ts +0 -11
  33. package/dist/evaluators/long-term-extraction.d.ts +0 -8
  34. package/dist/providers/short-term-memory.d.ts +0 -19
  35. package/dist/schemas/memory-access-logs.d.ts +0 -154
  36. package/dist/schemas/session-summaries.d.ts +0 -283
package/README.md CHANGED
@@ -1,34 +1,22 @@
1
1
  # @elizaos/plugin-memory
2
2
 
3
- Advanced memory management plugin for ElizaOS that provides intelligent conversation summarization and persistent long-term memory storage.
3
+ Advanced cognitive memory system for ElizaOS agents with persistent memory, intelligent fact extraction, and hybrid retrieval.
4
4
 
5
- ## Features
5
+ > ๐Ÿ“š **Research-Driven**: Built on analysis of 40+ academic papers. See [`refactor.md`](./refactor.md) and [`EVALUATION.md`](./EVALUATION.md) for details.
6
6
 
7
- ### ๐Ÿ”„ Short-term Memory (Conversation Summarization)
7
+ ---
8
8
 
9
- - **Automatic Summarization**: Compresses long conversations when they exceed configurable thresholds
10
- - **Context Preservation**: Maintains conversation flow while dramatically reducing token usage
11
- - **Recent Message Retention**: Keeps the most recent messages for immediate context
12
- - **Topic Extraction**: Identifies and tracks main topics discussed in each session
9
+ ## Overview
13
10
 
14
- ### ๐Ÿง  Long-term Memory (Persistent Facts)
11
+ Transforms stateless LLM agents into persistent entities with human-like memory capabilities:
15
12
 
16
- - **Intelligent Extraction**: Automatically learns facts about users from conversations
17
- - **Categorized Storage**: Organizes information into 9 semantic categories
18
- - **Confidence Scoring**: Tracks reliability of stored information
19
- - **Cross-session Persistence**: Remembers user preferences and context across all interactions
13
+ - **Three-Tier Memory**: Episodic (events), Semantic (facts), Procedural (skills)
14
+ - **Smart Consolidation**: Automatically extracts persistent facts from conversations
15
+ - **Hybrid Retrieval**: Vector + BM25 + Graph search with exponential decay
16
+ - **Contextual Embeddings**: Self-contained memories that improve retrieval accuracy
17
+ - **Contradiction Detection**: Automatically handles conflicting information
20
18
 
21
- ### ๐Ÿ“Š Memory Categories
22
-
23
- 1. **Identity**: User's name, role, profession (e.g., "I'm a data scientist")
24
- 2. **Expertise**: Domain knowledge, skills, familiarity with topics
25
- 3. **Projects**: Ongoing work, past interactions, recurring topics
26
- 4. **Preferences**: Communication style, format preferences, verbosity
27
- 5. **Data Sources**: Frequently used files, databases, APIs
28
- 6. **Goals**: Broader intentions and objectives
29
- 7. **Constraints**: User-defined rules or limitations
30
- 8. **Definitions**: Custom terms, acronyms, glossaries
31
- 9. **Behavioral Patterns**: Interaction styles and tendencies
19
+ ---
32
20
 
33
21
  ## Installation
34
22
 
@@ -36,259 +24,412 @@ Advanced memory management plugin for ElizaOS that provides intelligent conversa
36
24
  bun add @elizaos/plugin-memory
37
25
  ```
38
26
 
39
- ## Usage
40
-
41
- ### Basic Setup
27
+ Add to your character file:
42
28
 
43
- ```typescript
44
- import { memoryPlugin } from '@elizaos/plugin-memory';
45
-
46
- const agent = new Agent({
47
- name: 'MyAgent',
48
- plugins: [
49
- memoryPlugin,
50
- // ... other plugins
51
- ],
52
- });
29
+ ```json
30
+ {
31
+ "plugins": ["@elizaos/plugin-memory"]
32
+ }
53
33
  ```
54
34
 
55
- ### Configuration
35
+ The plugin auto-creates database tables on first load and handles everything automatically.
36
+
37
+ ---
38
+
39
+ ## Configuration
40
+
41
+ ### Quick Reference
42
+
43
+ | Setting | Default | Description |
44
+ | -------------------------------- | ------- | --------------------------------------- |
45
+ | `MEMORY_CONSOLIDATION_THRESHOLD` | `12` | Messages before fact extraction |
46
+ | `MEMORY_MIN_CONFIDENCE` | `0.7` | Minimum confidence to store facts (0-1) |
47
+ | `MEMORY_ENABLE_VECTOR_SEARCH` | `true` | Enable semantic search |
48
+ | `MEMORY_ENABLE_BM25` | `true` | Enable keyword search |
49
+ | `MEMORY_RETRIEVAL_LIMIT` | `5` | Max memories per query |
50
+ | `MEMORY_TOKEN_BUDGET` | `1000` | Token budget for memory context |
51
+ | `MEMORY_SUMMARY_ENABLED` | `true` | Enable conversation summarization |
52
+ | `MEMORY_MESSAGES_PER_SUMMARY` | `7` | Messages per summary |
53
+ | `MEMORY_SUMMARIES_PER_LEVEL` | `5` | Summaries before next level |
54
+ | `MEMORY_SUMMARY_MAX_DEPTH` | `3` | Maximum summary hierarchy depth |
55
+ | `MEMORY_SUMMARY_TOKEN_BUDGET` | `500` | Token budget for summaries |
56
+ | `CONTEXT_OVERLAP_USER_MESSAGES` | `2` | User messages overlap after summary |
57
+
58
+ ### Configuration Methods
59
+
60
+ Settings are loaded via `runtime.getSetting()` with priority:
61
+
62
+ 1. **Character `settings`** (highest priority)
63
+ 2. **Environment variables** (`.env` file)
64
+ 3. **Plugin defaults** (fallback)
56
65
 
57
- Configure the plugin via environment variables in your `.env` file:
66
+ #### Character File Example
67
+
68
+ ```json
69
+ {
70
+ "name": "MyAgent",
71
+ "plugins": ["@elizaos/plugin-memory"],
72
+ "settings": {
73
+ "MEMORY_CONSOLIDATION_THRESHOLD": "15",
74
+ "MEMORY_MIN_CONFIDENCE": "0.8",
75
+ "MEMORY_RETRIEVAL_LIMIT": "10"
76
+ }
77
+ }
78
+ ```
79
+
80
+ #### `.env` File Example
58
81
 
59
82
  ```env
60
- # Short-term Memory Settings
61
- MEMORY_SUMMARIZATION_THRESHOLD=50 # Messages before summarization (default: 50)
62
- MEMORY_RETAIN_RECENT=10 # Recent messages to keep (default: 10)
83
+ # Core Settings
84
+ MEMORY_CONSOLIDATION_THRESHOLD=12
85
+ MEMORY_MIN_CONFIDENCE=0.7
86
+
87
+ # Retrieval Settings
88
+ MEMORY_ENABLE_VECTOR_SEARCH=true
89
+ MEMORY_ENABLE_BM25=true
90
+ MEMORY_RETRIEVAL_LIMIT=5
91
+ MEMORY_TOKEN_BUDGET=1000
92
+
93
+ # Summarization Settings
94
+ MEMORY_SUMMARY_ENABLED=true
95
+ MEMORY_MESSAGES_PER_SUMMARY=7
96
+ MEMORY_SUMMARIES_PER_LEVEL=5
97
+ MEMORY_SUMMARY_MAX_DEPTH=3
98
+ MEMORY_SUMMARY_TOKEN_BUDGET=500
99
+ CONTEXT_OVERLAP_USER_MESSAGES=2
100
+ ```
101
+
102
+ ---
103
+
104
+ ## Configuration Details
105
+
106
+ ### Core Memory Settings
107
+
108
+ #### `MEMORY_CONSOLIDATION_THRESHOLD` (default: `12`)
109
+
110
+ Number of messages to buffer before triggering memory consolidation.
111
+
112
+ - **Lower** (5-8): Extract facts frequently, more LLM calls, better for fast-paced chats
113
+ - **Higher** (15-30): Let conversations develop, fewer LLM calls, better for long-form discussions
114
+
115
+ #### `MEMORY_MIN_CONFIDENCE` (default: `0.7`)
116
+
117
+ Minimum confidence score (0-1) to store extracted facts.
118
+
119
+ - **Higher** (0.8-0.9): Only store high-certainty facts, good for critical applications
120
+ - **Lower** (0.5-0.6): Capture more nuanced information, risk storing noise
121
+
122
+ ### Retrieval Settings
123
+
124
+ #### `MEMORY_ENABLE_VECTOR_SEARCH` (default: `true`)
125
+
126
+ Enable semantic similarity search using embeddings. Recommended to keep enabled.
127
+
128
+ #### `MEMORY_ENABLE_BM25` (default: `true`)
129
+
130
+ Enable keyword-based search with stemming. Works best combined with vector search.
131
+
132
+ #### `MEMORY_RETRIEVAL_LIMIT` (default: `5`)
133
+
134
+ Maximum number of memories to retrieve per query.
135
+
136
+ - **Lower** (3): Faster responses, less context
137
+ - **Higher** (10-20): More context, uses more tokens
138
+
139
+ #### `MEMORY_TOKEN_BUDGET` (default: `1000`)
140
+
141
+ Maximum tokens for memory context in prompts. Automatically trims to fit budget.
142
+
143
+ ### Summarization Settings
144
+
145
+ #### `MEMORY_SUMMARY_ENABLED` (default: `true`)
146
+
147
+ Enable hierarchical conversation summarization. Reduces token usage for long conversations.
148
+
149
+ #### `MEMORY_MESSAGES_PER_SUMMARY` (default: `7`)
150
+
151
+ How many messages to include in each Level 1 summary.
152
+
153
+ - **Lower** (5): More granular summaries
154
+ - **Higher** (15-20): Broader summaries
155
+
156
+ #### `MEMORY_SUMMARIES_PER_LEVEL` (default: `5`)
157
+
158
+ How many summaries to accumulate before creating the next level.
159
+
160
+ - Example: 5 Level-1 summaries โ†’ 1 Level-2 summary
161
+
162
+ #### `MEMORY_SUMMARY_MAX_DEPTH` (default: `3`)
63
163
 
64
- # Long-term Memory Settings
65
- MEMORY_LONG_TERM_ENABLED=true # Enable long-term extraction (default: true)
66
- MEMORY_CONFIDENCE_THRESHOLD=0.7 # Minimum confidence to store (default: 0.7)
164
+ Maximum depth of the summary hierarchy.
165
+
166
+ - Level 1: Direct message summaries
167
+ - Level 2: Summaries of summaries
168
+ - Level 3+: Higher-level abstractions
169
+
170
+ #### `MEMORY_SUMMARY_TOKEN_BUDGET` (default: `500`)
171
+
172
+ Maximum tokens for conversation summaries in context.
173
+
174
+ #### `CONTEXT_OVERLAP_USER_MESSAGES` (default: `2`)
175
+
176
+ Number of user messages to show as overlap after summarization for conversation continuity.
177
+
178
+ ---
179
+
180
+ ## Configuration Presets
181
+
182
+ ### High-Frequency Chatbot
183
+
184
+ ```json
185
+ {
186
+ "MEMORY_CONSOLIDATION_THRESHOLD": "8",
187
+ "MEMORY_MIN_CONFIDENCE": "0.8",
188
+ "MEMORY_RETRIEVAL_LIMIT": "3",
189
+ "MEMORY_MESSAGES_PER_SUMMARY": "5"
190
+ }
67
191
  ```
68
192
 
69
- ### Manual Memory Storage
193
+ **Why**: Fast extraction, high-quality facts only, minimal context for speed.
70
194
 
71
- Users can explicitly ask the agent to remember information:
195
+ ### Long-Form Conversations (Therapy, Coaching, Research)
72
196
 
197
+ ```json
198
+ {
199
+ "MEMORY_CONSOLIDATION_THRESHOLD": "20",
200
+ "MEMORY_MIN_CONFIDENCE": "0.6",
201
+ "MEMORY_RETRIEVAL_LIMIT": "10",
202
+ "MEMORY_TOKEN_BUDGET": "2000"
203
+ }
73
204
  ```
74
- User: "Remember that I prefer TypeScript over JavaScript"
75
- Agent: I've made a note of that in my Preferences memory: "User prefers TypeScript over JavaScript"
76
205
 
77
- User: "Keep in mind I'm working on a startup project"
78
- Agent: I've made a note of that in my Projects memory: "User is working on a startup project"
206
+ **Why**: Natural conversation flow, capture nuanced details, rich context.
207
+
208
+ ### Critical Applications (Medical, Legal, Financial)
79
209
 
80
- User: "Don't forget I use Python 3.11"
81
- Agent: I've made a note of that in my Data Sources memory: "User uses Python 3.11"
210
+ ```json
211
+ {
212
+ "MEMORY_MIN_CONFIDENCE": "0.9",
213
+ "MEMORY_ENABLE_BM25": "true",
214
+ "MEMORY_ENABLE_VECTOR_SEARCH": "true"
215
+ }
82
216
  ```
83
217
 
84
- ### Accessing the Memory Service
218
+ **Why**: Only store very certain facts, use both keyword and semantic matching.
85
219
 
86
- ```typescript
87
- import { MemoryService } from '@elizaos/plugin-memory';
220
+ ---
88
221
 
89
- // Get the service from runtime
90
- const memoryService = runtime.getService('memory') as MemoryService;
222
+ ## Basic Usage
91
223
 
92
- // Store a long-term memory manually
93
- await memoryService.storeLongTermMemory({
94
- agentId: runtime.agentId,
95
- entityId: userId,
96
- category: LongTermMemoryCategory.PREFERENCES,
97
- content: 'User prefers concise responses',
98
- confidence: 0.9,
99
- source: 'manual',
100
- });
224
+ The plugin works automatically once installed. No code changes required.
101
225
 
102
- // Retrieve memories
103
- const memories = await memoryService.getLongTermMemories(userId);
226
+ ### How It Works
104
227
 
105
- // Get session summaries
106
- const summaries = await memoryService.getSessionSummaries(roomId);
228
+ 1. **Conversation**: Agent buffers messages
229
+ 2. **Consolidation**: After threshold (default 12), LLM extracts persistent facts
230
+ 3. **Storage**: Facts stored with confidence โ‰ฅ 0.7 (configurable)
231
+ 4. **Retrieval**: Hybrid search (vector + BM25) with decay scoring
232
+ 5. **Context**: Relevant memories added to prompts automatically
233
+
234
+ ### Example Flow
235
+
236
+ ```
237
+ User: "I'm a software engineer working on React. I prefer TypeScript."
238
+ โ†’ [12 messages later, consolidation triggers]
239
+ โ†’ Extracted: "User is a software engineer" (confidence: 0.95)
240
+ โ†’ Extracted: "User works with React" (confidence: 0.92)
241
+ โ†’ Extracted: "User prefers TypeScript" (confidence: 0.95)
242
+
243
+ User: "What's the best state management for my project?"
244
+ โ†’ Retrieves: React + TypeScript preferences
245
+ โ†’ Agent: "For React with TypeScript, I'd recommend Zustand or..."
107
246
  ```
108
247
 
109
- ## Database Setup
248
+ ---
110
249
 
111
- The plugin uses ElizaOS's dynamic migration system. Database tables are automatically created when the plugin is loaded. The plugin defines three tables:
250
+ ## Programmatic Access
112
251
 
113
- - **`long_term_memories`**: Stores persistent facts about users
114
- - **`session_summaries`**: Stores conversation summaries
115
- - **`memory_access_logs`**: Optional usage tracking for analytics
252
+ ```typescript
253
+ import { MemoryService, MemoryType, DecayFunction } from '@elizaos/plugin-memory';
116
254
 
117
- No manual migration is required - the schema is handled automatically by the runtime.
255
+ // Get service
256
+ const memoryService = runtime.getService<MemoryService>('memory');
118
257
 
119
- ## Architecture
258
+ // Store memory manually
259
+ await memoryService.storeLongTermMemory({
260
+ agentId: runtime.agentId,
261
+ entityId: userId,
262
+ roomId: roomId,
263
+ type: MemoryType.SEMANTIC,
264
+ content: 'User is allergic to peanuts',
265
+ embeddingContext: '[Health fact]: User is allergic to peanuts',
266
+ confidence: 1.0,
267
+ decayRate: 0.0, // Never decays
268
+ decayFunction: DecayFunction.NONE,
269
+ source: { authorId: userId },
270
+ metadata: { category: 'health', critical: true },
271
+ });
120
272
 
121
- ### Components
273
+ // Search memories
274
+ const memories = await memoryService.searchLongTermMemories({
275
+ entityId: userId,
276
+ query: 'What foods should I avoid?',
277
+ type: MemoryType.SEMANTIC,
278
+ limit: 5,
279
+ minConfidence: 0.7,
280
+ });
122
281
 
123
- #### Services
282
+ // Get all memories by type
283
+ const facts = await memoryService.getLongTermMemories(userId, MemoryType.SEMANTIC, 20);
284
+ ```
124
285
 
125
- - **MemoryService**: Core service managing all memory operations
126
- - Tracks message counts for summarization triggers
127
- - Stores and retrieves long-term memories
128
- - Manages session summaries
129
- - Provides formatted memory context
286
+ ---
130
287
 
131
- #### Evaluators
288
+ ## Troubleshooting
289
+
290
+ ### No memories being extracted
291
+
292
+ **Check**:
132
293
 
133
- - **summarizationEvaluator**: Runs after conversations reach threshold
134
- - Generates comprehensive summaries using LLM
135
- - Extracts topics and key points
136
- - Archives old messages while preserving summaries
137
- - **longTermExtractionEvaluator**: Periodically analyzes conversations
138
- - Identifies facts worth remembering long-term
139
- - Categorizes information semantically
140
- - Assigns confidence scores
141
- - Stores high-confidence memories
294
+ 1. Has threshold been reached? (default: 12 messages)
295
+ 2. Is LLM provider configured?
296
+ 3. Check logs: `grep "consolidation" agent.log`
142
297
 
143
- #### Providers
298
+ **Debug**:
144
299
 
145
- - **longTermMemoryProvider**: Injects persistent user facts into context
146
- - Runs early (position: 50) to establish user context
147
- - Formats memories by category
148
- - Provides "What I Know About You" context
149
- - **shortTermMemoryProvider**: Provides conversation summaries
150
- - Runs before recentMessages (position: 95)
151
- - Includes recent session summaries
152
- - Shows topics and message counts
300
+ ```typescript
301
+ const memoryService = runtime.getService<MemoryService>('memory');
302
+ console.log('Config:', memoryService.getConfig());
303
+ ```
153
304
 
154
- #### Actions
305
+ ### Agent doesn't remember facts
155
306
 
156
- - **rememberAction**: Handles explicit memory requests
157
- - Triggers on keywords like "remember", "keep in mind", etc.
158
- - Uses LLM to extract what to remember
159
- - Categorizes and stores with confirmation
307
+ **Check**:
160
308
 
161
- ## How It Works
309
+ 1. Database: `SELECT * FROM long_term_memories WHERE isActive = true;`
310
+ 2. Confidence: `WHERE confidence >= 0.7`
311
+ 3. Decay scores (old memories may have decayed)
162
312
 
163
- ### Short-term Memory Flow
313
+ **Debug**:
164
314
 
165
- 1. **Tracking**: MemoryService tracks message count per room
166
- 2. **Trigger**: When count reaches threshold (default: 50), summarizationEvaluator activates
167
- 3. **Summarization**: LLM generates comprehensive summary of conversation
168
- 4. **Archival**: Older messages deleted, summary stored, recent messages retained
169
- 5. **Context Injection**: shortTermMemoryProvider injects summaries in future conversations
315
+ ```typescript
316
+ const memories = await memoryService.getLongTermMemories(userId, undefined, 50, true);
317
+ console.log('Total:', memories.length, 'Active:', memories.filter((m) => m.isActive).length);
318
+ ```
170
319
 
171
- ### Long-term Memory Flow
320
+ ### High token usage
172
321
 
173
- 1. **Monitoring**: longTermExtractionEvaluator runs periodically (every 10 messages)
174
- 2. **Analysis**: LLM analyzes conversation for facts worth remembering
175
- 3. **Extraction**: Identifies facts, categorizes them, assigns confidence
176
- 4. **Storage**: High-confidence facts stored in long_term_memories table
177
- 5. **Retrieval**: longTermMemoryProvider injects relevant facts in all future conversations
322
+ **Solutions**:
178
323
 
179
- ### Manual Memory Flow
324
+ - Lower `MEMORY_CONSOLIDATION_THRESHOLD` (consolidate more often)
325
+ - Reduce `MEMORY_RETRIEVAL_LIMIT` (fewer memories per query)
326
+ - Increase `MEMORY_MIN_CONFIDENCE` (only high-quality facts)
327
+ - Reduce `MEMORY_TOKEN_BUDGET` and `MEMORY_SUMMARY_TOKEN_BUDGET`
180
328
 
181
- 1. **Detection**: User says "remember that..." or similar trigger phrase
182
- 2. **Validation**: rememberAction validates the request
183
- 3. **Extraction**: LLM extracts what to remember and categorizes it
184
- 4. **Storage**: Fact stored with 'manual' source and high confidence
185
- 5. **Confirmation**: Agent confirms what was stored
329
+ ### Transient requests stored as facts
186
330
 
187
- ## Performance Optimization
331
+ **Solutions**:
188
332
 
189
- ### Context Reduction
333
+ - Increase `MEMORY_MIN_CONFIDENCE` to 0.8+
334
+ - Use better LLM model (GPT-4, Claude)
335
+ - Customize extraction prompts in `prompts/consolidation.ts`
190
336
 
191
- - Without plugin: 1000 messages = ~200,000 tokens
192
- - With plugin: 1000 messages = ~20 summaries + 10 recent = ~25,000 tokens
193
- - **Savings**: ~85% reduction in context size
337
+ ---
194
338
 
195
- ### Token Efficiency
339
+ ## Database Schema
196
340
 
197
- - Summaries are 1/10th the size of original conversations
198
- - Long-term memories provide rich context in minimal tokens
199
- - Recent messages still available for immediate context
341
+ Tables auto-created on first load via ElizaOS dynamic migrations:
200
342
 
201
- ### Database Optimization
343
+ ### `long_term_memories`
202
344
 
203
- - Indexed queries for fast retrieval
204
- - Separate tables for different memory types
205
- - Optional vector search for semantic similarity (requires pgvector)
345
+ Stores episodic, semantic, and procedural memories with:
206
346
 
207
- ## Best Practices
347
+ - Embeddings (pgvector)
348
+ - Confidence scores
349
+ - Decay rates
350
+ - Access tracking
351
+ - Soft deletes
208
352
 
209
- ### For Users
353
+ ### `conversation_summaries`
210
354
 
211
- - Use explicit commands: "Remember that...", "Keep in mind...", "Don't forget..."
212
- - Provide clear, factual information for better storage
213
- - Verify important memories were stored correctly
355
+ Hierarchical conversation summaries with:
214
356
 
215
- ### For Developers
357
+ - Multi-level compression
358
+ - Time ranges
359
+ - Token estimates
360
+ - Access tracking
216
361
 
217
- - Adjust thresholds based on your use case
218
- - Monitor summarization quality with test conversations
219
- - Use confidence thresholds to filter low-quality extractions
220
- - Consider enabling vector search for large-scale deployments
362
+ ---
221
363
 
222
- ### Configuration Tips
364
+ ## Architecture Highlights
223
365
 
224
- - **High-frequency chatbots**: Lower threshold (30-40 messages)
225
- - **Long-form conversations**: Higher threshold (60-100 messages)
226
- - **Critical applications**: Higher confidence threshold (0.8-0.9)
227
- - **Exploratory use**: Lower confidence threshold (0.6-0.7)
366
+ ### Memory Types
228
367
 
229
- ## Advanced Features
368
+ - **Episodic**: Time-anchored events ("User asked about X on Tuesday")
369
+ - **Semantic**: Timeless facts ("User is allergic to peanuts")
370
+ - **Procedural**: Skills and patterns ("User prefers git rebase")
230
371
 
231
- ### Vector Search (Optional)
372
+ ### Hybrid Retrieval
232
373
 
233
- Enable semantic search for memories by:
374
+ Combines:
234
375
 
235
- 1. Installing pgvector extension
236
- 2. Setting `MEMORY_VECTOR_SEARCH_ENABLED=true`
237
- 3. Generating embeddings for memories
376
+ - **Vector Search**: Semantic similarity (pgvector HNSW index)
377
+ - **BM25**: Keyword matching with stemming
378
+ - **Decay Scoring**: `Confidence ร— e^(-ฮปร—t) ร— (1 + log(accessCount))`
238
379
 
239
- ### Memory Analytics
380
+ ### Contextual Embeddings
240
381
 
241
- Use the `memory_access_logs` table to:
382
+ Enriches content before embedding:
242
383
 
243
- - Track which memories are most frequently accessed
244
- - Identify useful vs. unused memories
245
- - Optimize extraction strategies
384
+ - Raw: "It was terrible"
385
+ - Enriched: "[Movie preference]: The movie Inception was terrible"
246
386
 
247
- ### Custom Categories
387
+ ### Contradiction Detection
248
388
 
249
- Extend `LongTermMemoryCategory` enum for domain-specific categories:
389
+ - Detects conflicting facts via LLM
390
+ - Soft deletes old memories (marks inactive)
391
+ - Maintains provenance chain via `supersedesId`
250
392
 
251
- ```typescript
252
- export enum CustomMemoryCategory {
253
- ...LongTermMemoryCategory,
254
- MEDICAL_HISTORY = 'medical_history',
255
- FINANCIAL_DATA = 'financial_data',
256
- }
257
- ```
393
+ ---
258
394
 
259
395
  ## Testing
260
396
 
261
- Run the test suite:
262
-
263
397
  ```bash
264
398
  cd packages/plugin-memory
265
399
  bun test
266
400
  ```
267
401
 
268
- ## Troubleshooting
402
+ Tests cover:
269
403
 
270
- ### Summaries not generating
404
+ - XML parsing
405
+ - Memory consolidation
406
+ - Decay algorithms
407
+ - Contradiction detection
408
+ - Hybrid retrieval
271
409
 
272
- - Check that message threshold is reached
273
- - Verify MemoryService is registered
274
- - Check LLM provider is configured
410
+ ---
275
411
 
276
- ### Long-term memories not stored
412
+ ## Research & References
277
413
 
278
- - Verify `MEMORY_LONG_TERM_ENABLED=true`
279
- - Check confidence threshold isn't too high
280
- - Ensure facts are being extracted (check logs)
414
+ Based on comprehensive research documented in [`refactor.md`](./refactor.md):
281
415
 
282
- ### High token usage
416
+ - **Cognitive Science**: Ebbinghaus forgetting curve, memory consolidation theory
417
+ - **AI/RAG Systems**: MemGPT, GraphRAG, Contextual Retrieval (Anthropic), HyDE
418
+ - **Agent Architecture**: A-MEM, AgentCore (AWS), MLE-Benchmark
283
419
 
284
- - Lower summarization threshold
285
- - Reduce number of retained recent messages
286
- - Limit number of long-term memories retrieved
420
+ Full analysis: [`EVALUATION.md`](./EVALUATION.md)
421
+
422
+ ---
287
423
 
288
424
  ## License
289
425
 
290
426
  MIT
291
427
 
292
- ## Contributing
428
+ ---
429
+
430
+ ## Support
293
431
 
294
- Contributions welcome! Please see the main ElizaOS contributing guide.
432
+ - **Research**: [`refactor.md`](./refactor.md)
433
+ - **Evaluation**: [`EVALUATION.md`](./EVALUATION.md)
434
+ - **Issues**: [GitHub Issues](https://github.com/elizaOS/eliza/issues)
435
+ - **Discord**: [ElizaOS Community](https://discord.gg/elizaos)