@elizaos/plugin-memory 1.0.5 → 2.0.1
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.
- package/README.md +339 -207
- package/dist/browser/index.browser.js +348 -151
- package/dist/browser/index.browser.js.map +23 -13
- package/dist/cjs/index.node.cjs +2200 -1047
- package/dist/cjs/index.node.js.map +23 -13
- package/dist/evaluators/consolidation.d.ts +19 -0
- package/dist/evaluators/summarization.d.ts +5 -24
- package/dist/index.d.ts +152 -30
- package/dist/node/index.node.js +2242 -1084
- package/dist/node/index.node.js.map +23 -13
- package/dist/prompts/consolidation.d.ts +35 -0
- package/dist/prompts/summarization.d.ts +25 -0
- package/dist/providers/action-results.d.ts +2 -0
- package/dist/providers/long-term-memory.d.ts +18 -11
- package/dist/providers/recent-conversation-summary.d.ts +2 -0
- package/dist/repositories/conversation-summary.d.ts +33 -0
- package/dist/repositories/index.d.ts +17 -0
- package/dist/repositories/long-term-memory.d.ts +53 -0
- package/dist/schemas/conversation-summaries.d.ts +494 -0
- package/dist/schemas/index.d.ts +16 -6
- package/dist/schemas/long-term-memories.d.ts +308 -70
- package/dist/services/memory-service.d.ts +95 -51
- package/dist/types/index.d.ts +299 -55
- package/dist/utils/db-mapping.d.ts +20 -0
- package/dist/utils/decay-scoring.d.ts +41 -0
- package/dist/utils/embedding.d.ts +21 -0
- package/dist/utils/formatting.d.ts +17 -0
- package/dist/utils/index.d.ts +17 -0
- package/dist/utils/search-merging.d.ts +18 -0
- package/dist/utils/token-counter.d.ts +53 -0
- package/package.json +83 -1
- package/dist/actions/remember.d.ts +0 -11
- package/dist/evaluators/long-term-extraction.d.ts +0 -8
- package/dist/providers/short-term-memory.d.ts +0 -19
- package/dist/schemas/memory-access-logs.d.ts +0 -154
- package/dist/schemas/session-summaries.d.ts +0 -283
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Long-term
|
|
3
|
-
*
|
|
2
|
+
* Long-term Memory Storage Table
|
|
3
|
+
*
|
|
4
|
+
* Research: Section 4.1 "The SOTA Memory Schema"
|
|
5
|
+
*
|
|
6
|
+
* This table stores ALL persistent memories (episodic, semantic, procedural) with:
|
|
7
|
+
* - Memory type taxonomy (3-tier cognitive hierarchy)
|
|
8
|
+
* - Decay parameters for exponential forgetting
|
|
9
|
+
* - Confidence and provenance tracking
|
|
10
|
+
* - Contextual embeddings for superior retrieval
|
|
11
|
+
* - Soft delete for contradiction handling
|
|
12
|
+
*
|
|
13
|
+
* Design Decision: Single unified table vs separate tables per type
|
|
14
|
+
* Rationale: Easier to query across types, unified retrieval logic, flexible type reassignment
|
|
4
15
|
*/
|
|
5
16
|
export declare const longTermMemories: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
6
17
|
name: "long_term_memories";
|
|
@@ -63,8 +74,27 @@ export declare const longTermMemories: import("drizzle-orm/pg-core").PgTableWith
|
|
|
63
74
|
}, {}, {
|
|
64
75
|
length: 36;
|
|
65
76
|
}>;
|
|
66
|
-
|
|
67
|
-
name: "
|
|
77
|
+
roomId: import("drizzle-orm/pg-core").PgColumn<{
|
|
78
|
+
name: "room_id";
|
|
79
|
+
tableName: "long_term_memories";
|
|
80
|
+
dataType: "string";
|
|
81
|
+
columnType: "PgVarchar";
|
|
82
|
+
data: string;
|
|
83
|
+
driverParam: string;
|
|
84
|
+
notNull: false;
|
|
85
|
+
hasDefault: false;
|
|
86
|
+
isPrimaryKey: false;
|
|
87
|
+
isAutoincrement: false;
|
|
88
|
+
hasRuntimeDefault: false;
|
|
89
|
+
enumValues: [string, ...string[]];
|
|
90
|
+
baseColumn: never;
|
|
91
|
+
identity: undefined;
|
|
92
|
+
generated: undefined;
|
|
93
|
+
}, {}, {
|
|
94
|
+
length: 36;
|
|
95
|
+
}>;
|
|
96
|
+
type: import("drizzle-orm/pg-core").PgColumn<{
|
|
97
|
+
name: "type";
|
|
68
98
|
tableName: "long_term_memories";
|
|
69
99
|
dataType: "string";
|
|
70
100
|
columnType: "PgText";
|
|
@@ -97,74 +127,48 @@ export declare const longTermMemories: import("drizzle-orm/pg-core").PgTableWith
|
|
|
97
127
|
identity: undefined;
|
|
98
128
|
generated: undefined;
|
|
99
129
|
}, {}, {}>;
|
|
100
|
-
|
|
101
|
-
name: "
|
|
130
|
+
embeddingContext: import("drizzle-orm/pg-core").PgColumn<{
|
|
131
|
+
name: "embedding_context";
|
|
102
132
|
tableName: "long_term_memories";
|
|
103
|
-
dataType: "
|
|
104
|
-
columnType: "
|
|
105
|
-
data:
|
|
106
|
-
driverParam:
|
|
107
|
-
notNull:
|
|
133
|
+
dataType: "string";
|
|
134
|
+
columnType: "PgText";
|
|
135
|
+
data: string;
|
|
136
|
+
driverParam: string;
|
|
137
|
+
notNull: true;
|
|
108
138
|
hasDefault: false;
|
|
109
139
|
isPrimaryKey: false;
|
|
110
140
|
isAutoincrement: false;
|
|
111
141
|
hasRuntimeDefault: false;
|
|
112
|
-
enumValues:
|
|
142
|
+
enumValues: [string, ...string[]];
|
|
113
143
|
baseColumn: never;
|
|
114
144
|
identity: undefined;
|
|
115
145
|
generated: undefined;
|
|
116
146
|
}, {}, {}>;
|
|
117
|
-
|
|
118
|
-
name: "
|
|
147
|
+
confidence: import("drizzle-orm/pg-core").PgColumn<{
|
|
148
|
+
name: "confidence";
|
|
119
149
|
tableName: "long_term_memories";
|
|
120
|
-
dataType: "
|
|
121
|
-
columnType: "
|
|
122
|
-
data: number
|
|
123
|
-
driverParam: string |
|
|
124
|
-
notNull:
|
|
125
|
-
hasDefault:
|
|
150
|
+
dataType: "number";
|
|
151
|
+
columnType: "PgReal";
|
|
152
|
+
data: number;
|
|
153
|
+
driverParam: string | number;
|
|
154
|
+
notNull: true;
|
|
155
|
+
hasDefault: true;
|
|
126
156
|
isPrimaryKey: false;
|
|
127
157
|
isAutoincrement: false;
|
|
128
158
|
hasRuntimeDefault: false;
|
|
129
159
|
enumValues: undefined;
|
|
130
|
-
baseColumn:
|
|
131
|
-
name: "embedding";
|
|
132
|
-
tableName: "long_term_memories";
|
|
133
|
-
dataType: "number";
|
|
134
|
-
columnType: "PgReal";
|
|
135
|
-
data: number;
|
|
136
|
-
driverParam: string | number;
|
|
137
|
-
notNull: false;
|
|
138
|
-
hasDefault: false;
|
|
139
|
-
isPrimaryKey: false;
|
|
140
|
-
isAutoincrement: false;
|
|
141
|
-
hasRuntimeDefault: false;
|
|
142
|
-
enumValues: undefined;
|
|
143
|
-
baseColumn: never;
|
|
144
|
-
identity: undefined;
|
|
145
|
-
generated: undefined;
|
|
146
|
-
}, {}, {}>;
|
|
160
|
+
baseColumn: never;
|
|
147
161
|
identity: undefined;
|
|
148
162
|
generated: undefined;
|
|
149
|
-
}, {}, {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
dataType: "number";
|
|
153
|
-
columnType: "PgReal";
|
|
154
|
-
data: number;
|
|
155
|
-
driverParam: string | number;
|
|
156
|
-
enumValues: undefined;
|
|
157
|
-
}, {}, {}, import("drizzle-orm").ColumnBuilderExtraConfig>;
|
|
158
|
-
size: undefined;
|
|
159
|
-
}>;
|
|
160
|
-
confidence: import("drizzle-orm/pg-core").PgColumn<{
|
|
161
|
-
name: "confidence";
|
|
163
|
+
}, {}, {}>;
|
|
164
|
+
decayRate: import("drizzle-orm/pg-core").PgColumn<{
|
|
165
|
+
name: "decay_rate";
|
|
162
166
|
tableName: "long_term_memories";
|
|
163
167
|
dataType: "number";
|
|
164
168
|
columnType: "PgReal";
|
|
165
169
|
data: number;
|
|
166
170
|
driverParam: string | number;
|
|
167
|
-
notNull:
|
|
171
|
+
notNull: true;
|
|
168
172
|
hasDefault: true;
|
|
169
173
|
isPrimaryKey: false;
|
|
170
174
|
isAutoincrement: false;
|
|
@@ -174,15 +178,15 @@ export declare const longTermMemories: import("drizzle-orm/pg-core").PgTableWith
|
|
|
174
178
|
identity: undefined;
|
|
175
179
|
generated: undefined;
|
|
176
180
|
}, {}, {}>;
|
|
177
|
-
|
|
178
|
-
name: "
|
|
181
|
+
decayFunction: import("drizzle-orm/pg-core").PgColumn<{
|
|
182
|
+
name: "decay_function";
|
|
179
183
|
tableName: "long_term_memories";
|
|
180
184
|
dataType: "string";
|
|
181
185
|
columnType: "PgText";
|
|
182
186
|
data: string;
|
|
183
187
|
driverParam: string;
|
|
184
|
-
notNull:
|
|
185
|
-
hasDefault:
|
|
188
|
+
notNull: true;
|
|
189
|
+
hasDefault: true;
|
|
186
190
|
isPrimaryKey: false;
|
|
187
191
|
isAutoincrement: false;
|
|
188
192
|
hasRuntimeDefault: false;
|
|
@@ -208,13 +212,30 @@ export declare const longTermMemories: import("drizzle-orm/pg-core").PgTableWith
|
|
|
208
212
|
identity: undefined;
|
|
209
213
|
generated: undefined;
|
|
210
214
|
}, {}, {}>;
|
|
211
|
-
|
|
212
|
-
name: "
|
|
215
|
+
lastAccessedAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
216
|
+
name: "last_accessed_at";
|
|
213
217
|
tableName: "long_term_memories";
|
|
214
218
|
dataType: "date";
|
|
215
219
|
columnType: "PgTimestamp";
|
|
216
220
|
data: Date;
|
|
217
221
|
driverParam: string;
|
|
222
|
+
notNull: false;
|
|
223
|
+
hasDefault: false;
|
|
224
|
+
isPrimaryKey: false;
|
|
225
|
+
isAutoincrement: false;
|
|
226
|
+
hasRuntimeDefault: false;
|
|
227
|
+
enumValues: undefined;
|
|
228
|
+
baseColumn: never;
|
|
229
|
+
identity: undefined;
|
|
230
|
+
generated: undefined;
|
|
231
|
+
}, {}, {}>;
|
|
232
|
+
accessCount: import("drizzle-orm/pg-core").PgColumn<{
|
|
233
|
+
name: "access_count";
|
|
234
|
+
tableName: "long_term_memories";
|
|
235
|
+
dataType: "number";
|
|
236
|
+
columnType: "PgInteger";
|
|
237
|
+
data: number;
|
|
238
|
+
driverParam: string | number;
|
|
218
239
|
notNull: true;
|
|
219
240
|
hasDefault: true;
|
|
220
241
|
isPrimaryKey: false;
|
|
@@ -225,12 +246,132 @@ export declare const longTermMemories: import("drizzle-orm/pg-core").PgTableWith
|
|
|
225
246
|
identity: undefined;
|
|
226
247
|
generated: undefined;
|
|
227
248
|
}, {}, {}>;
|
|
228
|
-
|
|
229
|
-
name: "
|
|
249
|
+
isActive: import("drizzle-orm/pg-core").PgColumn<{
|
|
250
|
+
name: "is_active";
|
|
230
251
|
tableName: "long_term_memories";
|
|
231
|
-
dataType: "
|
|
232
|
-
columnType: "
|
|
233
|
-
data:
|
|
252
|
+
dataType: "boolean";
|
|
253
|
+
columnType: "PgBoolean";
|
|
254
|
+
data: boolean;
|
|
255
|
+
driverParam: boolean;
|
|
256
|
+
notNull: true;
|
|
257
|
+
hasDefault: true;
|
|
258
|
+
isPrimaryKey: false;
|
|
259
|
+
isAutoincrement: false;
|
|
260
|
+
hasRuntimeDefault: false;
|
|
261
|
+
enumValues: undefined;
|
|
262
|
+
baseColumn: never;
|
|
263
|
+
identity: undefined;
|
|
264
|
+
generated: undefined;
|
|
265
|
+
}, {}, {}>;
|
|
266
|
+
source: import("drizzle-orm/pg-core").PgColumn<{
|
|
267
|
+
name: "source";
|
|
268
|
+
tableName: "long_term_memories";
|
|
269
|
+
dataType: "json";
|
|
270
|
+
columnType: "PgJsonb";
|
|
271
|
+
data: unknown;
|
|
272
|
+
driverParam: unknown;
|
|
273
|
+
notNull: true;
|
|
274
|
+
hasDefault: true;
|
|
275
|
+
isPrimaryKey: false;
|
|
276
|
+
isAutoincrement: false;
|
|
277
|
+
hasRuntimeDefault: false;
|
|
278
|
+
enumValues: undefined;
|
|
279
|
+
baseColumn: never;
|
|
280
|
+
identity: undefined;
|
|
281
|
+
generated: undefined;
|
|
282
|
+
}, {}, {}>;
|
|
283
|
+
metadata: import("drizzle-orm/pg-core").PgColumn<{
|
|
284
|
+
name: "metadata";
|
|
285
|
+
tableName: "long_term_memories";
|
|
286
|
+
dataType: "json";
|
|
287
|
+
columnType: "PgJsonb";
|
|
288
|
+
data: unknown;
|
|
289
|
+
driverParam: unknown;
|
|
290
|
+
notNull: true;
|
|
291
|
+
hasDefault: true;
|
|
292
|
+
isPrimaryKey: false;
|
|
293
|
+
isAutoincrement: false;
|
|
294
|
+
hasRuntimeDefault: false;
|
|
295
|
+
enumValues: undefined;
|
|
296
|
+
baseColumn: never;
|
|
297
|
+
identity: undefined;
|
|
298
|
+
generated: undefined;
|
|
299
|
+
}, {}, {}>;
|
|
300
|
+
supersedesId: import("drizzle-orm/pg-core").PgColumn<{
|
|
301
|
+
name: "supersedes_id";
|
|
302
|
+
tableName: "long_term_memories";
|
|
303
|
+
dataType: "string";
|
|
304
|
+
columnType: "PgVarchar";
|
|
305
|
+
data: string;
|
|
306
|
+
driverParam: string;
|
|
307
|
+
notNull: false;
|
|
308
|
+
hasDefault: false;
|
|
309
|
+
isPrimaryKey: false;
|
|
310
|
+
isAutoincrement: false;
|
|
311
|
+
hasRuntimeDefault: false;
|
|
312
|
+
enumValues: [string, ...string[]];
|
|
313
|
+
baseColumn: never;
|
|
314
|
+
identity: undefined;
|
|
315
|
+
generated: undefined;
|
|
316
|
+
}, {}, {
|
|
317
|
+
length: 36;
|
|
318
|
+
}>;
|
|
319
|
+
};
|
|
320
|
+
dialect: "pg";
|
|
321
|
+
}>;
|
|
322
|
+
/**
|
|
323
|
+
* Long-term Memory Embeddings Table
|
|
324
|
+
* Stores vector embeddings for semantic search with dynamic dimension support
|
|
325
|
+
* Research: Section 3 "RAG Strategy"
|
|
326
|
+
*/
|
|
327
|
+
export declare const longTermMemoryEmbeddings: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
328
|
+
name: "long_term_memory_embeddings";
|
|
329
|
+
schema: undefined;
|
|
330
|
+
columns: {
|
|
331
|
+
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
332
|
+
name: "id";
|
|
333
|
+
tableName: "long_term_memory_embeddings";
|
|
334
|
+
dataType: "string";
|
|
335
|
+
columnType: "PgVarchar";
|
|
336
|
+
data: string;
|
|
337
|
+
driverParam: string;
|
|
338
|
+
notNull: true;
|
|
339
|
+
hasDefault: false;
|
|
340
|
+
isPrimaryKey: true;
|
|
341
|
+
isAutoincrement: false;
|
|
342
|
+
hasRuntimeDefault: false;
|
|
343
|
+
enumValues: [string, ...string[]];
|
|
344
|
+
baseColumn: never;
|
|
345
|
+
identity: undefined;
|
|
346
|
+
generated: undefined;
|
|
347
|
+
}, {}, {
|
|
348
|
+
length: 36;
|
|
349
|
+
}>;
|
|
350
|
+
memoryId: import("drizzle-orm/pg-core").PgColumn<{
|
|
351
|
+
name: "memory_id";
|
|
352
|
+
tableName: "long_term_memory_embeddings";
|
|
353
|
+
dataType: "string";
|
|
354
|
+
columnType: "PgVarchar";
|
|
355
|
+
data: string;
|
|
356
|
+
driverParam: string;
|
|
357
|
+
notNull: true;
|
|
358
|
+
hasDefault: false;
|
|
359
|
+
isPrimaryKey: false;
|
|
360
|
+
isAutoincrement: false;
|
|
361
|
+
hasRuntimeDefault: false;
|
|
362
|
+
enumValues: [string, ...string[]];
|
|
363
|
+
baseColumn: never;
|
|
364
|
+
identity: undefined;
|
|
365
|
+
generated: undefined;
|
|
366
|
+
}, {}, {
|
|
367
|
+
length: 36;
|
|
368
|
+
}>;
|
|
369
|
+
dim384: import("drizzle-orm/pg-core").PgColumn<{
|
|
370
|
+
name: "dim_384";
|
|
371
|
+
tableName: "long_term_memory_embeddings";
|
|
372
|
+
dataType: "array";
|
|
373
|
+
columnType: "PgVector";
|
|
374
|
+
data: number[];
|
|
234
375
|
driverParam: string;
|
|
235
376
|
notNull: false;
|
|
236
377
|
hasDefault: false;
|
|
@@ -241,15 +382,112 @@ export declare const longTermMemories: import("drizzle-orm/pg-core").PgTableWith
|
|
|
241
382
|
baseColumn: never;
|
|
242
383
|
identity: undefined;
|
|
243
384
|
generated: undefined;
|
|
244
|
-
}, {}, {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
385
|
+
}, {}, {
|
|
386
|
+
dimensions: 384;
|
|
387
|
+
}>;
|
|
388
|
+
dim512: import("drizzle-orm/pg-core").PgColumn<{
|
|
389
|
+
name: "dim_512";
|
|
390
|
+
tableName: "long_term_memory_embeddings";
|
|
391
|
+
dataType: "array";
|
|
392
|
+
columnType: "PgVector";
|
|
393
|
+
data: number[];
|
|
394
|
+
driverParam: string;
|
|
252
395
|
notNull: false;
|
|
396
|
+
hasDefault: false;
|
|
397
|
+
isPrimaryKey: false;
|
|
398
|
+
isAutoincrement: false;
|
|
399
|
+
hasRuntimeDefault: false;
|
|
400
|
+
enumValues: undefined;
|
|
401
|
+
baseColumn: never;
|
|
402
|
+
identity: undefined;
|
|
403
|
+
generated: undefined;
|
|
404
|
+
}, {}, {
|
|
405
|
+
dimensions: 512;
|
|
406
|
+
}>;
|
|
407
|
+
dim768: import("drizzle-orm/pg-core").PgColumn<{
|
|
408
|
+
name: "dim_768";
|
|
409
|
+
tableName: "long_term_memory_embeddings";
|
|
410
|
+
dataType: "array";
|
|
411
|
+
columnType: "PgVector";
|
|
412
|
+
data: number[];
|
|
413
|
+
driverParam: string;
|
|
414
|
+
notNull: false;
|
|
415
|
+
hasDefault: false;
|
|
416
|
+
isPrimaryKey: false;
|
|
417
|
+
isAutoincrement: false;
|
|
418
|
+
hasRuntimeDefault: false;
|
|
419
|
+
enumValues: undefined;
|
|
420
|
+
baseColumn: never;
|
|
421
|
+
identity: undefined;
|
|
422
|
+
generated: undefined;
|
|
423
|
+
}, {}, {
|
|
424
|
+
dimensions: 768;
|
|
425
|
+
}>;
|
|
426
|
+
dim1024: import("drizzle-orm/pg-core").PgColumn<{
|
|
427
|
+
name: "dim_1024";
|
|
428
|
+
tableName: "long_term_memory_embeddings";
|
|
429
|
+
dataType: "array";
|
|
430
|
+
columnType: "PgVector";
|
|
431
|
+
data: number[];
|
|
432
|
+
driverParam: string;
|
|
433
|
+
notNull: false;
|
|
434
|
+
hasDefault: false;
|
|
435
|
+
isPrimaryKey: false;
|
|
436
|
+
isAutoincrement: false;
|
|
437
|
+
hasRuntimeDefault: false;
|
|
438
|
+
enumValues: undefined;
|
|
439
|
+
baseColumn: never;
|
|
440
|
+
identity: undefined;
|
|
441
|
+
generated: undefined;
|
|
442
|
+
}, {}, {
|
|
443
|
+
dimensions: 1024;
|
|
444
|
+
}>;
|
|
445
|
+
dim1536: import("drizzle-orm/pg-core").PgColumn<{
|
|
446
|
+
name: "dim_1536";
|
|
447
|
+
tableName: "long_term_memory_embeddings";
|
|
448
|
+
dataType: "array";
|
|
449
|
+
columnType: "PgVector";
|
|
450
|
+
data: number[];
|
|
451
|
+
driverParam: string;
|
|
452
|
+
notNull: false;
|
|
453
|
+
hasDefault: false;
|
|
454
|
+
isPrimaryKey: false;
|
|
455
|
+
isAutoincrement: false;
|
|
456
|
+
hasRuntimeDefault: false;
|
|
457
|
+
enumValues: undefined;
|
|
458
|
+
baseColumn: never;
|
|
459
|
+
identity: undefined;
|
|
460
|
+
generated: undefined;
|
|
461
|
+
}, {}, {
|
|
462
|
+
dimensions: 1536;
|
|
463
|
+
}>;
|
|
464
|
+
dim3072: import("drizzle-orm/pg-core").PgColumn<{
|
|
465
|
+
name: "dim_3072";
|
|
466
|
+
tableName: "long_term_memory_embeddings";
|
|
467
|
+
dataType: "array";
|
|
468
|
+
columnType: "PgVector";
|
|
469
|
+
data: number[];
|
|
470
|
+
driverParam: string;
|
|
471
|
+
notNull: false;
|
|
472
|
+
hasDefault: false;
|
|
473
|
+
isPrimaryKey: false;
|
|
474
|
+
isAutoincrement: false;
|
|
475
|
+
hasRuntimeDefault: false;
|
|
476
|
+
enumValues: undefined;
|
|
477
|
+
baseColumn: never;
|
|
478
|
+
identity: undefined;
|
|
479
|
+
generated: undefined;
|
|
480
|
+
}, {}, {
|
|
481
|
+
dimensions: 3072;
|
|
482
|
+
}>;
|
|
483
|
+
createdAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
484
|
+
name: "created_at";
|
|
485
|
+
tableName: "long_term_memory_embeddings";
|
|
486
|
+
dataType: "date";
|
|
487
|
+
columnType: "PgTimestamp";
|
|
488
|
+
data: Date;
|
|
489
|
+
driverParam: string;
|
|
490
|
+
notNull: true;
|
|
253
491
|
hasDefault: true;
|
|
254
492
|
isPrimaryKey: false;
|
|
255
493
|
isAutoincrement: false;
|
|
@@ -1,102 +1,146 @@
|
|
|
1
1
|
import { type IAgentRuntime, Service, type UUID, type ServiceTypeName } from '@elizaos/core';
|
|
2
|
-
import
|
|
2
|
+
import type { Metadata } from '@elizaos/core';
|
|
3
|
+
import { type LongTermMemory, type LongTermMemoryConfig, type LongTermMemorySearchParams, type LongTermMemoryRetrievalResult, type ConversationSummary, MemoryType } from '../types/index';
|
|
3
4
|
/**
|
|
4
|
-
* Memory Service
|
|
5
|
-
*
|
|
5
|
+
* Long-Term Memory Service - State-of-the-Art Cognitive Memory System
|
|
6
|
+
*
|
|
7
|
+
* Research: Based on comprehensive analysis in refactor.md
|
|
8
|
+
*
|
|
9
|
+
* This service implements:
|
|
10
|
+
* 1. Three-tier long-term memory taxonomy (Episodic, Semantic, Procedural)
|
|
11
|
+
* 2. Memory consolidation pipeline (transient filtering)
|
|
12
|
+
* 3. Hybrid retrieval (Vector + BM25 + Graph)
|
|
13
|
+
* 4. Exponential decay for long-term memory forgetting
|
|
14
|
+
* 5. Contextual embeddings for superior retrieval
|
|
15
|
+
* 6. Contradiction detection and resolution
|
|
16
|
+
*
|
|
17
|
+
* Architecture Philosophy:
|
|
18
|
+
* - Async consolidation: Don't block the conversation loop
|
|
19
|
+
* - Decay-weighted scoring: Recent and frequently accessed long-term memories score higher
|
|
20
|
+
* - Graph-guided retrieval: Use relations for context
|
|
21
|
+
* - Confidence-based filtering: Only store high-quality extractions
|
|
6
22
|
*/
|
|
7
23
|
export declare class MemoryService extends Service {
|
|
8
24
|
static serviceType: ServiceTypeName;
|
|
9
|
-
|
|
10
|
-
private
|
|
11
|
-
private
|
|
25
|
+
config: LongTermMemoryConfig & Metadata;
|
|
26
|
+
private bm25Index;
|
|
27
|
+
private embeddingDimension?;
|
|
28
|
+
private isInitialized;
|
|
29
|
+
private longTermMemoryRepo;
|
|
30
|
+
private conversationSummaryRepo;
|
|
12
31
|
capabilityDescription: string;
|
|
32
|
+
/**
|
|
33
|
+
* Default configuration based on research recommendations
|
|
34
|
+
* Research: Section 6 "Implementation Strategy"
|
|
35
|
+
*/
|
|
36
|
+
private static defaultConfig;
|
|
13
37
|
constructor(runtime?: IAgentRuntime);
|
|
14
38
|
static start(runtime: IAgentRuntime): Promise<Service>;
|
|
15
39
|
stop(): Promise<void>;
|
|
16
40
|
initialize(runtime: IAgentRuntime): Promise<void>;
|
|
17
41
|
/**
|
|
18
|
-
*
|
|
42
|
+
* Load configuration from runtime settings
|
|
19
43
|
*/
|
|
20
|
-
private
|
|
44
|
+
private loadConfiguration;
|
|
21
45
|
/**
|
|
22
|
-
*
|
|
46
|
+
* Ensure embedding dimension is set dynamically based on the model
|
|
23
47
|
*/
|
|
24
|
-
|
|
48
|
+
private ensureEmbeddingDimension;
|
|
25
49
|
/**
|
|
26
|
-
*
|
|
50
|
+
* Get current configuration
|
|
27
51
|
*/
|
|
28
|
-
|
|
52
|
+
getConfig(): LongTermMemoryConfig;
|
|
29
53
|
/**
|
|
30
|
-
*
|
|
54
|
+
* Update configuration
|
|
31
55
|
*/
|
|
32
|
-
|
|
56
|
+
updateConfig(updates: Partial<LongTermMemoryConfig>): void;
|
|
33
57
|
/**
|
|
34
|
-
*
|
|
58
|
+
* Store a new long-term memory
|
|
59
|
+
*
|
|
60
|
+
* Research: Section 3.2.1 "Contextual Embeddings"
|
|
35
61
|
*/
|
|
36
|
-
|
|
62
|
+
storeLongTermMemory(memory: Omit<LongTermMemory, 'id' | 'createdAt' | 'lastAccessedAt' | 'accessCount' | 'isActive' | 'embedding'>): Promise<LongTermMemory>;
|
|
37
63
|
/**
|
|
38
|
-
*
|
|
64
|
+
* Retrieve long-term memory by ID
|
|
39
65
|
*/
|
|
40
|
-
|
|
66
|
+
getLongTermMemory(id: UUID): Promise<LongTermMemory | null>;
|
|
41
67
|
/**
|
|
42
|
-
*
|
|
68
|
+
* Update an existing long-term memory
|
|
69
|
+
*
|
|
70
|
+
* Research: Section 4.3.2 "Resolution Strategies"
|
|
43
71
|
*/
|
|
44
|
-
|
|
72
|
+
updateLongTermMemory(id: UUID, updates: Partial<Omit<LongTermMemory, 'id' | 'agentId' | 'createdAt'>>): Promise<void>;
|
|
45
73
|
/**
|
|
46
|
-
*
|
|
47
|
-
* Uses the cache table via adapter
|
|
74
|
+
* Delete a long-term memory (hard delete)
|
|
48
75
|
*/
|
|
49
|
-
|
|
76
|
+
deleteLongTermMemory(id: UUID): Promise<void>;
|
|
50
77
|
/**
|
|
51
|
-
*
|
|
52
|
-
* Uses the cache table via adapter
|
|
78
|
+
* Get all long-term memories for an entity (with basic filtering)
|
|
53
79
|
*/
|
|
54
|
-
|
|
80
|
+
getLongTermMemories(entityId: UUID, type?: MemoryType, limit?: number, includeInactive?: boolean): Promise<LongTermMemory[]>;
|
|
55
81
|
/**
|
|
56
|
-
*
|
|
82
|
+
* Handle contradictory long-term memory
|
|
83
|
+
*
|
|
84
|
+
* Research: Section 4.3 "Handling Contradictions"
|
|
57
85
|
*/
|
|
58
|
-
|
|
86
|
+
handleContradiction(entityId: UUID, newMemory: Omit<LongTermMemory, 'id' | 'createdAt' | 'lastAccessedAt' | 'accessCount' | 'isActive' | 'embedding'>): Promise<void>;
|
|
59
87
|
/**
|
|
60
|
-
*
|
|
88
|
+
* Detect if new memory contradicts any existing memory
|
|
89
|
+
*
|
|
90
|
+
* Research: Section 4.3.1 "Detection Logic"
|
|
61
91
|
*/
|
|
62
|
-
|
|
92
|
+
detectContradiction(newMemory: Omit<LongTermMemory, 'id' | 'createdAt' | 'lastAccessedAt' | 'accessCount' | 'isActive' | 'embedding'>, existingMemories: LongTermMemoryRetrievalResult[]): Promise<LongTermMemory | null>;
|
|
63
93
|
/**
|
|
64
|
-
*
|
|
94
|
+
* Search long-term memories with hybrid retrieval
|
|
95
|
+
*
|
|
96
|
+
* Research: Section 3 "Retrieval Augmented Generation Strategy"
|
|
65
97
|
*/
|
|
66
|
-
|
|
98
|
+
searchLongTermMemories(params: LongTermMemorySearchParams): Promise<LongTermMemoryRetrievalResult[]>;
|
|
67
99
|
/**
|
|
68
|
-
*
|
|
69
|
-
* Enforces multi-tenancy by verifying agentId and entityId
|
|
100
|
+
* Vector search implementation
|
|
70
101
|
*/
|
|
71
|
-
|
|
102
|
+
private vectorSearch;
|
|
72
103
|
/**
|
|
73
|
-
*
|
|
74
|
-
* Enforces multi-tenancy by verifying agentId and entityId
|
|
104
|
+
* BM25 search implementation
|
|
75
105
|
*/
|
|
76
|
-
|
|
106
|
+
private bm25Search;
|
|
77
107
|
/**
|
|
78
|
-
*
|
|
108
|
+
* Rebuild BM25 index from database
|
|
79
109
|
*/
|
|
80
|
-
|
|
110
|
+
private rebuildBM25Index;
|
|
81
111
|
/**
|
|
82
|
-
*
|
|
112
|
+
* Get formatted memories for context injection
|
|
113
|
+
*
|
|
114
|
+
* Research: Section 5.1.3 "Tier 3: Just-In-Time Injection"
|
|
83
115
|
*/
|
|
84
|
-
|
|
116
|
+
getFormattedLongTermMemoriesForContext(entityId: UUID, query: string, roomId?: UUID): Promise<string>;
|
|
85
117
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
118
|
+
* Store a conversation summary
|
|
119
|
+
*
|
|
120
|
+
* Research: Section 5.1.2 "Hierarchical Conversation Summarization"
|
|
88
121
|
*/
|
|
89
|
-
|
|
122
|
+
storeSummary(summary: Omit<ConversationSummary, 'id' | 'createdAt' | 'lastAccessedAt' | 'accessCount'>): Promise<ConversationSummary>;
|
|
90
123
|
/**
|
|
91
|
-
* Get
|
|
124
|
+
* Get summaries at a specific level for a room
|
|
92
125
|
*/
|
|
93
|
-
|
|
126
|
+
getSummariesByLevel(roomId: UUID, level: number): Promise<ConversationSummary[]>;
|
|
94
127
|
/**
|
|
95
|
-
* Search
|
|
128
|
+
* Search summaries by semantic similarity
|
|
129
|
+
*
|
|
130
|
+
* Research: Section 5.1.2 "Tier 2: The Conversation Summary"
|
|
96
131
|
*/
|
|
97
|
-
|
|
132
|
+
searchSummaries(params: {
|
|
133
|
+
entityId: UUID;
|
|
134
|
+
roomId: UUID;
|
|
135
|
+
query: string;
|
|
136
|
+
limit?: number;
|
|
137
|
+
tokenBudget?: number;
|
|
138
|
+
}): Promise<ConversationSummary[]>;
|
|
98
139
|
/**
|
|
99
|
-
* Get
|
|
140
|
+
* Get the most recent Level 1 summary for a room and entity
|
|
141
|
+
* Used to determine which messages have already been summarized
|
|
142
|
+
*
|
|
143
|
+
* @returns The most recent Level 1 summary, or null if none exist
|
|
100
144
|
*/
|
|
101
|
-
|
|
145
|
+
getMostRecentLevel1Summary(roomId: UUID, entityId: UUID): Promise<ConversationSummary | null>;
|
|
102
146
|
}
|