memories-lite 0.9.3 → 0.9.5
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/TECHNICAL.md +0 -2
- package/dist/config/defaults.js +4 -4
- package/dist/config/manager.js +2 -2
- package/dist/llms/openai.js +17 -5
- package/dist/llms/openai_structured.js +23 -17
- package/dist/memory/index.js +11 -2
- package/dist/prompts/index.d.ts +13 -14
- package/dist/prompts/index.js +40 -65
- package/dist/types/index.d.ts +44 -44
- package/dist/types/index.js +4 -4
- package/dist/vectorstores/lite.js +12 -5
- package/memories-lite-a42ac5108869b599bcbac21069f63fb47f07452fcc4b87e89b3c06a945612d0b.db +0 -0
- package/memories-lite-a9137698d8d3fdbf27efcdc8cd372084b52d484e8db866c5455bbb3f85299b54.db +0 -0
- package/package.json +2 -1
- package/src/config/defaults.ts +4 -4
- package/src/config/manager.ts +2 -2
- package/src/llms/openai.ts +18 -5
- package/src/llms/openai_structured.ts +23 -19
- package/src/memory/index.ts +12 -2
- package/src/prompts/index.ts +40 -68
- package/src/types/index.ts +6 -6
- package/src/vectorstores/lite.ts +11 -5
- package/tests/init.mem.ts +1 -1
- package/tests/lite.spec.ts +1 -1
- package/tests/memory.facts.test.ts +2 -2
- package/tests/memory.test.ts +5 -6
- package/tests/memory.todo.test.ts +127 -0
package/dist/types/index.d.ts
CHANGED
|
@@ -62,10 +62,10 @@ export interface MemoryTypeConfig {
|
|
|
62
62
|
halfLifeDays: number;
|
|
63
63
|
}
|
|
64
64
|
export interface MemoryScoringConfig {
|
|
65
|
+
todo: MemoryTypeConfig;
|
|
65
66
|
procedural: MemoryTypeConfig;
|
|
66
67
|
episodic: MemoryTypeConfig;
|
|
67
68
|
factual: MemoryTypeConfig;
|
|
68
|
-
semantic: MemoryTypeConfig;
|
|
69
69
|
assistant_preference: MemoryTypeConfig;
|
|
70
70
|
default: MemoryTypeConfig;
|
|
71
71
|
}
|
|
@@ -91,7 +91,7 @@ export interface MemoryConfig {
|
|
|
91
91
|
graphStore?: GraphStoreConfig;
|
|
92
92
|
enableGraph?: boolean;
|
|
93
93
|
}
|
|
94
|
-
export type MemoryType = 'procedural' | '
|
|
94
|
+
export type MemoryType = 'procedural' | 'todo' | 'episodic' | 'factual' | 'assistant_preference';
|
|
95
95
|
export interface MemoryItem {
|
|
96
96
|
id: string;
|
|
97
97
|
memory: string;
|
|
@@ -171,7 +171,7 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
171
171
|
dimension: z.ZodOptional<z.ZodNumber>;
|
|
172
172
|
client: z.ZodOptional<z.ZodAny>;
|
|
173
173
|
scoring: z.ZodOptional<z.ZodObject<{
|
|
174
|
-
|
|
174
|
+
todo: z.ZodObject<{
|
|
175
175
|
alpha: z.ZodNumber;
|
|
176
176
|
beta: z.ZodNumber;
|
|
177
177
|
gamma: z.ZodNumber;
|
|
@@ -187,7 +187,7 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
187
187
|
gamma: number;
|
|
188
188
|
halfLifeDays: number;
|
|
189
189
|
}>;
|
|
190
|
-
|
|
190
|
+
procedural: z.ZodObject<{
|
|
191
191
|
alpha: z.ZodNumber;
|
|
192
192
|
beta: z.ZodNumber;
|
|
193
193
|
gamma: z.ZodNumber;
|
|
@@ -203,7 +203,7 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
203
203
|
gamma: number;
|
|
204
204
|
halfLifeDays: number;
|
|
205
205
|
}>;
|
|
206
|
-
|
|
206
|
+
episodic: z.ZodObject<{
|
|
207
207
|
alpha: z.ZodNumber;
|
|
208
208
|
beta: z.ZodNumber;
|
|
209
209
|
gamma: z.ZodNumber;
|
|
@@ -219,7 +219,7 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
219
219
|
gamma: number;
|
|
220
220
|
halfLifeDays: number;
|
|
221
221
|
}>;
|
|
222
|
-
|
|
222
|
+
factual: z.ZodObject<{
|
|
223
223
|
alpha: z.ZodNumber;
|
|
224
224
|
beta: z.ZodNumber;
|
|
225
225
|
gamma: z.ZodNumber;
|
|
@@ -274,19 +274,19 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
274
274
|
gamma: number;
|
|
275
275
|
halfLifeDays: number;
|
|
276
276
|
};
|
|
277
|
-
|
|
277
|
+
todo: {
|
|
278
278
|
alpha: number;
|
|
279
279
|
beta: number;
|
|
280
280
|
gamma: number;
|
|
281
281
|
halfLifeDays: number;
|
|
282
282
|
};
|
|
283
|
-
|
|
283
|
+
episodic: {
|
|
284
284
|
alpha: number;
|
|
285
285
|
beta: number;
|
|
286
286
|
gamma: number;
|
|
287
287
|
halfLifeDays: number;
|
|
288
288
|
};
|
|
289
|
-
|
|
289
|
+
factual: {
|
|
290
290
|
alpha: number;
|
|
291
291
|
beta: number;
|
|
292
292
|
gamma: number;
|
|
@@ -311,19 +311,19 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
311
311
|
gamma: number;
|
|
312
312
|
halfLifeDays: number;
|
|
313
313
|
};
|
|
314
|
-
|
|
314
|
+
todo: {
|
|
315
315
|
alpha: number;
|
|
316
316
|
beta: number;
|
|
317
317
|
gamma: number;
|
|
318
318
|
halfLifeDays: number;
|
|
319
319
|
};
|
|
320
|
-
|
|
320
|
+
episodic: {
|
|
321
321
|
alpha: number;
|
|
322
322
|
beta: number;
|
|
323
323
|
gamma: number;
|
|
324
324
|
halfLifeDays: number;
|
|
325
325
|
};
|
|
326
|
-
|
|
326
|
+
factual: {
|
|
327
327
|
alpha: number;
|
|
328
328
|
beta: number;
|
|
329
329
|
gamma: number;
|
|
@@ -348,7 +348,7 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
348
348
|
dimension: z.ZodOptional<z.ZodNumber>;
|
|
349
349
|
client: z.ZodOptional<z.ZodAny>;
|
|
350
350
|
scoring: z.ZodOptional<z.ZodObject<{
|
|
351
|
-
|
|
351
|
+
todo: z.ZodObject<{
|
|
352
352
|
alpha: z.ZodNumber;
|
|
353
353
|
beta: z.ZodNumber;
|
|
354
354
|
gamma: z.ZodNumber;
|
|
@@ -364,7 +364,7 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
364
364
|
gamma: number;
|
|
365
365
|
halfLifeDays: number;
|
|
366
366
|
}>;
|
|
367
|
-
|
|
367
|
+
procedural: z.ZodObject<{
|
|
368
368
|
alpha: z.ZodNumber;
|
|
369
369
|
beta: z.ZodNumber;
|
|
370
370
|
gamma: z.ZodNumber;
|
|
@@ -380,7 +380,7 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
380
380
|
gamma: number;
|
|
381
381
|
halfLifeDays: number;
|
|
382
382
|
}>;
|
|
383
|
-
|
|
383
|
+
episodic: z.ZodObject<{
|
|
384
384
|
alpha: z.ZodNumber;
|
|
385
385
|
beta: z.ZodNumber;
|
|
386
386
|
gamma: z.ZodNumber;
|
|
@@ -396,7 +396,7 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
396
396
|
gamma: number;
|
|
397
397
|
halfLifeDays: number;
|
|
398
398
|
}>;
|
|
399
|
-
|
|
399
|
+
factual: z.ZodObject<{
|
|
400
400
|
alpha: z.ZodNumber;
|
|
401
401
|
beta: z.ZodNumber;
|
|
402
402
|
gamma: z.ZodNumber;
|
|
@@ -451,19 +451,19 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
451
451
|
gamma: number;
|
|
452
452
|
halfLifeDays: number;
|
|
453
453
|
};
|
|
454
|
-
|
|
454
|
+
todo: {
|
|
455
455
|
alpha: number;
|
|
456
456
|
beta: number;
|
|
457
457
|
gamma: number;
|
|
458
458
|
halfLifeDays: number;
|
|
459
459
|
};
|
|
460
|
-
|
|
460
|
+
episodic: {
|
|
461
461
|
alpha: number;
|
|
462
462
|
beta: number;
|
|
463
463
|
gamma: number;
|
|
464
464
|
halfLifeDays: number;
|
|
465
465
|
};
|
|
466
|
-
|
|
466
|
+
factual: {
|
|
467
467
|
alpha: number;
|
|
468
468
|
beta: number;
|
|
469
469
|
gamma: number;
|
|
@@ -488,19 +488,19 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
488
488
|
gamma: number;
|
|
489
489
|
halfLifeDays: number;
|
|
490
490
|
};
|
|
491
|
-
|
|
491
|
+
todo: {
|
|
492
492
|
alpha: number;
|
|
493
493
|
beta: number;
|
|
494
494
|
gamma: number;
|
|
495
495
|
halfLifeDays: number;
|
|
496
496
|
};
|
|
497
|
-
|
|
497
|
+
episodic: {
|
|
498
498
|
alpha: number;
|
|
499
499
|
beta: number;
|
|
500
500
|
gamma: number;
|
|
501
501
|
halfLifeDays: number;
|
|
502
502
|
};
|
|
503
|
-
|
|
503
|
+
factual: {
|
|
504
504
|
alpha: number;
|
|
505
505
|
beta: number;
|
|
506
506
|
gamma: number;
|
|
@@ -525,7 +525,7 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
525
525
|
dimension: z.ZodOptional<z.ZodNumber>;
|
|
526
526
|
client: z.ZodOptional<z.ZodAny>;
|
|
527
527
|
scoring: z.ZodOptional<z.ZodObject<{
|
|
528
|
-
|
|
528
|
+
todo: z.ZodObject<{
|
|
529
529
|
alpha: z.ZodNumber;
|
|
530
530
|
beta: z.ZodNumber;
|
|
531
531
|
gamma: z.ZodNumber;
|
|
@@ -541,7 +541,7 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
541
541
|
gamma: number;
|
|
542
542
|
halfLifeDays: number;
|
|
543
543
|
}>;
|
|
544
|
-
|
|
544
|
+
procedural: z.ZodObject<{
|
|
545
545
|
alpha: z.ZodNumber;
|
|
546
546
|
beta: z.ZodNumber;
|
|
547
547
|
gamma: z.ZodNumber;
|
|
@@ -557,7 +557,7 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
557
557
|
gamma: number;
|
|
558
558
|
halfLifeDays: number;
|
|
559
559
|
}>;
|
|
560
|
-
|
|
560
|
+
episodic: z.ZodObject<{
|
|
561
561
|
alpha: z.ZodNumber;
|
|
562
562
|
beta: z.ZodNumber;
|
|
563
563
|
gamma: z.ZodNumber;
|
|
@@ -573,7 +573,7 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
573
573
|
gamma: number;
|
|
574
574
|
halfLifeDays: number;
|
|
575
575
|
}>;
|
|
576
|
-
|
|
576
|
+
factual: z.ZodObject<{
|
|
577
577
|
alpha: z.ZodNumber;
|
|
578
578
|
beta: z.ZodNumber;
|
|
579
579
|
gamma: z.ZodNumber;
|
|
@@ -628,19 +628,19 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
628
628
|
gamma: number;
|
|
629
629
|
halfLifeDays: number;
|
|
630
630
|
};
|
|
631
|
-
|
|
631
|
+
todo: {
|
|
632
632
|
alpha: number;
|
|
633
633
|
beta: number;
|
|
634
634
|
gamma: number;
|
|
635
635
|
halfLifeDays: number;
|
|
636
636
|
};
|
|
637
|
-
|
|
637
|
+
episodic: {
|
|
638
638
|
alpha: number;
|
|
639
639
|
beta: number;
|
|
640
640
|
gamma: number;
|
|
641
641
|
halfLifeDays: number;
|
|
642
642
|
};
|
|
643
|
-
|
|
643
|
+
factual: {
|
|
644
644
|
alpha: number;
|
|
645
645
|
beta: number;
|
|
646
646
|
gamma: number;
|
|
@@ -665,19 +665,19 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
665
665
|
gamma: number;
|
|
666
666
|
halfLifeDays: number;
|
|
667
667
|
};
|
|
668
|
-
|
|
668
|
+
todo: {
|
|
669
669
|
alpha: number;
|
|
670
670
|
beta: number;
|
|
671
671
|
gamma: number;
|
|
672
672
|
halfLifeDays: number;
|
|
673
673
|
};
|
|
674
|
-
|
|
674
|
+
episodic: {
|
|
675
675
|
alpha: number;
|
|
676
676
|
beta: number;
|
|
677
677
|
gamma: number;
|
|
678
678
|
halfLifeDays: number;
|
|
679
679
|
};
|
|
680
|
-
|
|
680
|
+
factual: {
|
|
681
681
|
alpha: number;
|
|
682
682
|
beta: number;
|
|
683
683
|
gamma: number;
|
|
@@ -711,19 +711,19 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
711
711
|
gamma: number;
|
|
712
712
|
halfLifeDays: number;
|
|
713
713
|
};
|
|
714
|
-
|
|
714
|
+
todo: {
|
|
715
715
|
alpha: number;
|
|
716
716
|
beta: number;
|
|
717
717
|
gamma: number;
|
|
718
718
|
halfLifeDays: number;
|
|
719
719
|
};
|
|
720
|
-
|
|
720
|
+
episodic: {
|
|
721
721
|
alpha: number;
|
|
722
722
|
beta: number;
|
|
723
723
|
gamma: number;
|
|
724
724
|
halfLifeDays: number;
|
|
725
725
|
};
|
|
726
|
-
|
|
726
|
+
factual: {
|
|
727
727
|
alpha: number;
|
|
728
728
|
beta: number;
|
|
729
729
|
gamma: number;
|
|
@@ -759,19 +759,19 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
759
759
|
gamma: number;
|
|
760
760
|
halfLifeDays: number;
|
|
761
761
|
};
|
|
762
|
-
|
|
762
|
+
todo: {
|
|
763
763
|
alpha: number;
|
|
764
764
|
beta: number;
|
|
765
765
|
gamma: number;
|
|
766
766
|
halfLifeDays: number;
|
|
767
767
|
};
|
|
768
|
-
|
|
768
|
+
episodic: {
|
|
769
769
|
alpha: number;
|
|
770
770
|
beta: number;
|
|
771
771
|
gamma: number;
|
|
772
772
|
halfLifeDays: number;
|
|
773
773
|
};
|
|
774
|
-
|
|
774
|
+
factual: {
|
|
775
775
|
alpha: number;
|
|
776
776
|
beta: number;
|
|
777
777
|
gamma: number;
|
|
@@ -913,19 +913,19 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
913
913
|
gamma: number;
|
|
914
914
|
halfLifeDays: number;
|
|
915
915
|
};
|
|
916
|
-
|
|
916
|
+
todo: {
|
|
917
917
|
alpha: number;
|
|
918
918
|
beta: number;
|
|
919
919
|
gamma: number;
|
|
920
920
|
halfLifeDays: number;
|
|
921
921
|
};
|
|
922
|
-
|
|
922
|
+
episodic: {
|
|
923
923
|
alpha: number;
|
|
924
924
|
beta: number;
|
|
925
925
|
gamma: number;
|
|
926
926
|
halfLifeDays: number;
|
|
927
927
|
};
|
|
928
|
-
|
|
928
|
+
factual: {
|
|
929
929
|
alpha: number;
|
|
930
930
|
beta: number;
|
|
931
931
|
gamma: number;
|
|
@@ -1002,19 +1002,19 @@ export declare const MemoryConfigSchema: z.ZodObject<{
|
|
|
1002
1002
|
gamma: number;
|
|
1003
1003
|
halfLifeDays: number;
|
|
1004
1004
|
};
|
|
1005
|
-
|
|
1005
|
+
todo: {
|
|
1006
1006
|
alpha: number;
|
|
1007
1007
|
beta: number;
|
|
1008
1008
|
gamma: number;
|
|
1009
1009
|
halfLifeDays: number;
|
|
1010
1010
|
};
|
|
1011
|
-
|
|
1011
|
+
episodic: {
|
|
1012
1012
|
alpha: number;
|
|
1013
1013
|
beta: number;
|
|
1014
1014
|
gamma: number;
|
|
1015
1015
|
halfLifeDays: number;
|
|
1016
1016
|
};
|
|
1017
|
-
|
|
1017
|
+
factual: {
|
|
1018
1018
|
alpha: number;
|
|
1019
1019
|
beta: number;
|
|
1020
1020
|
gamma: number;
|
package/dist/types/index.js
CHANGED
|
@@ -21,25 +21,25 @@ exports.MemoryConfigSchema = zod_1.z.object({
|
|
|
21
21
|
dimension: zod_1.z.number().optional(),
|
|
22
22
|
client: zod_1.z.any().optional(),
|
|
23
23
|
scoring: zod_1.z.object({
|
|
24
|
-
|
|
24
|
+
todo: zod_1.z.object({
|
|
25
25
|
alpha: zod_1.z.number(),
|
|
26
26
|
beta: zod_1.z.number(),
|
|
27
27
|
gamma: zod_1.z.number(),
|
|
28
28
|
halfLifeDays: zod_1.z.number(),
|
|
29
29
|
}),
|
|
30
|
-
|
|
30
|
+
procedural: zod_1.z.object({
|
|
31
31
|
alpha: zod_1.z.number(),
|
|
32
32
|
beta: zod_1.z.number(),
|
|
33
33
|
gamma: zod_1.z.number(),
|
|
34
34
|
halfLifeDays: zod_1.z.number(),
|
|
35
35
|
}),
|
|
36
|
-
|
|
36
|
+
episodic: zod_1.z.object({
|
|
37
37
|
alpha: zod_1.z.number(),
|
|
38
38
|
beta: zod_1.z.number(),
|
|
39
39
|
gamma: zod_1.z.number(),
|
|
40
40
|
halfLifeDays: zod_1.z.number(),
|
|
41
41
|
}),
|
|
42
|
-
|
|
42
|
+
factual: zod_1.z.object({
|
|
43
43
|
alpha: zod_1.z.number(),
|
|
44
44
|
beta: zod_1.z.number(),
|
|
45
45
|
gamma: zod_1.z.number(),
|
|
@@ -33,6 +33,7 @@ class LiteVectorStore {
|
|
|
33
33
|
const filename = this.isSecure ? `memories-lite-${currentUserId}.db` : `memories-lite-global.db`;
|
|
34
34
|
this.dbPath = (config.rootPath == ':memory:') ? ':memory:' : path_1.default.join(config.rootPath, filename);
|
|
35
35
|
// Add error handling callback for the database connection
|
|
36
|
+
//console.log('--- DBG create LiteVectorStore::dbPath',this.dbPath);
|
|
36
37
|
this.db = new sqlite3_1.default.Database(this.dbPath);
|
|
37
38
|
}
|
|
38
39
|
async init() {
|
|
@@ -142,11 +143,17 @@ class LiteVectorStore {
|
|
|
142
143
|
}
|
|
143
144
|
return cachedStore;
|
|
144
145
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
146
|
+
try {
|
|
147
|
+
// Pass the full config (including scoring) to the constructor
|
|
148
|
+
const newStore = new LiteVectorStore(config, hashedUserId);
|
|
149
|
+
await newStore.init();
|
|
150
|
+
LiteVectorStore.cache.set(hashedUserId, newStore);
|
|
151
|
+
return newStore;
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
console.error('--- DBG LiteVectorStore::from error', err);
|
|
155
|
+
throw err;
|
|
156
|
+
}
|
|
150
157
|
}
|
|
151
158
|
async insert(vectors, ids, payloads) {
|
|
152
159
|
for (let i = 0; i < vectors.length; i++) {
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "memories-lite",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.5",
|
|
4
4
|
"description": "A lightweight memory system for LLM agents",
|
|
5
5
|
"author": "olivier@evaletolab.ch",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"scripts": {
|
|
9
|
+
"predeploy": "npm version patch --no-git-tag-version",
|
|
9
10
|
"build": "tsc -b",
|
|
10
11
|
"test": "jest"
|
|
11
12
|
},
|
package/src/config/defaults.ts
CHANGED
|
@@ -4,8 +4,8 @@ const DEFAULT_SCORING_CONFIG: MemoryScoringConfig = {
|
|
|
4
4
|
// Values from memories-lite rule & user request
|
|
5
5
|
procedural: { alpha: 0.30, beta: 0.40, gamma: 0.05, halfLifeDays: 1 / 24 }, // ~1 hour
|
|
6
6
|
episodic: { alpha: 0.40, beta: 0.50, gamma: 0.10, halfLifeDays: 2 }, // ~2 days (user request 'temporary')
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
todo: { alpha: 0.40, beta: 0.50, gamma: 0.10, halfLifeDays: 40 }, // ~40 days
|
|
8
|
+
factual: { alpha: 0.70, beta: 0.20, gamma: 0.10, halfLifeDays: 150 }, // ~150 days
|
|
9
9
|
assistant_preference: { alpha: 0.60, beta: 0.05, gamma: 0.35, halfLifeDays: Infinity },
|
|
10
10
|
default: { alpha: 0.5, beta: 0.3, gamma: 0.1, halfLifeDays: 30 } // Fallback default
|
|
11
11
|
};
|
|
@@ -34,7 +34,7 @@ export const DEFAULT_MEMORY_CONFIG: MemoryConfig = {
|
|
|
34
34
|
provider: "openai",
|
|
35
35
|
config: {
|
|
36
36
|
apiKey: process.env.OPENAI_API_KEY || "",
|
|
37
|
-
model: "gpt-
|
|
37
|
+
model: "gpt-5-nano",
|
|
38
38
|
modelProperties: undefined,
|
|
39
39
|
},
|
|
40
40
|
},
|
|
@@ -48,7 +48,7 @@ export const DEFAULT_MEMORY_CONFIG: MemoryConfig = {
|
|
|
48
48
|
llm: {
|
|
49
49
|
provider: "openai",
|
|
50
50
|
config: {
|
|
51
|
-
model: "gpt-
|
|
51
|
+
model: "gpt-5-nano",
|
|
52
52
|
},
|
|
53
53
|
},
|
|
54
54
|
},
|
package/src/config/manager.ts
CHANGED
|
@@ -51,10 +51,10 @@ export class ConfigManager {
|
|
|
51
51
|
dimension: userConf.dimension || defaultConf.dimension,
|
|
52
52
|
// Merge scoring deeply if present in userConf, otherwise use default
|
|
53
53
|
scoring: userConf.scoring ? {
|
|
54
|
+
todo: { ...defaultConf.scoring?.todo, ...userConf.scoring.todo },
|
|
54
55
|
procedural: { ...defaultConf.scoring?.procedural, ...userConf.scoring.procedural },
|
|
55
56
|
episodic: { ...defaultConf.scoring?.episodic, ...userConf.scoring.episodic },
|
|
56
57
|
factual: { ...defaultConf.scoring?.factual, ...userConf.scoring.factual },
|
|
57
|
-
semantic: { ...defaultConf.scoring?.semantic, ...userConf.scoring.semantic },
|
|
58
58
|
assistant_preference: { ...defaultConf.scoring?.assistant_preference, ...userConf.scoring.assistant_preference },
|
|
59
59
|
default: { ...defaultConf.scoring?.default, ...userConf.scoring.default },
|
|
60
60
|
} : defaultConf.scoring,
|
|
@@ -69,10 +69,10 @@ export class ConfigManager {
|
|
|
69
69
|
client: undefined,
|
|
70
70
|
// Merge scoring deeply if present in userConf, otherwise use default
|
|
71
71
|
scoring: userConf?.scoring ? {
|
|
72
|
+
todo: { ...defaultConf.scoring?.todo, ...userConf.scoring.todo },
|
|
72
73
|
procedural: { ...defaultConf.scoring?.procedural, ...userConf.scoring.procedural },
|
|
73
74
|
episodic: { ...defaultConf.scoring?.episodic, ...userConf.scoring.episodic },
|
|
74
75
|
factual: { ...defaultConf.scoring?.factual, ...userConf.scoring.factual },
|
|
75
|
-
semantic: { ...defaultConf.scoring?.semantic, ...userConf.scoring.semantic },
|
|
76
76
|
assistant_preference: { ...defaultConf.scoring?.assistant_preference, ...userConf.scoring.assistant_preference },
|
|
77
77
|
default: { ...defaultConf.scoring?.default, ...userConf.scoring.default },
|
|
78
78
|
} : defaultConf.scoring,
|
package/src/llms/openai.ts
CHANGED
|
@@ -9,7 +9,7 @@ export class OpenAILLM implements LLM {
|
|
|
9
9
|
|
|
10
10
|
constructor(config: LLMConfig) {
|
|
11
11
|
this.openai = new OpenAI({ apiKey: config.apiKey });
|
|
12
|
-
this.model = config.model || "gpt-
|
|
12
|
+
this.model = config.model || "gpt-5-mini";
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
async generateResponse(
|
|
@@ -33,14 +33,27 @@ export class OpenAILLM implements LLM {
|
|
|
33
33
|
// ⚠️ SyntaxError: Unexpected non-whitespace character after JSON at position 13
|
|
34
34
|
const fnCall = structuredOutput ?
|
|
35
35
|
this.openai.beta.chat.completions.parse.bind(this.openai.beta.chat.completions) : this.openai.chat.completions.create.bind(this.openai.chat.completions);
|
|
36
|
-
const
|
|
36
|
+
const selectedModel = model || this.model;
|
|
37
|
+
const isGpt5 = selectedModel.startsWith('gpt-5');
|
|
38
|
+
|
|
39
|
+
const options:any = {
|
|
37
40
|
messages: msg,
|
|
38
|
-
model:
|
|
39
|
-
top_p:.8,temperature:.2,
|
|
41
|
+
model: selectedModel,
|
|
40
42
|
...(structuredOutput && { logit_bias: { "1734": -100 } }),
|
|
41
43
|
response_format: responseFormat,
|
|
42
44
|
...(tools && { tools, tool_choice: "auto" }),
|
|
43
|
-
}
|
|
45
|
+
};
|
|
46
|
+
// GPT-5: temperature must be 1 or omitted; otherwise keep prior behavior
|
|
47
|
+
if (isGpt5) {
|
|
48
|
+
options.temperature = 1;
|
|
49
|
+
options.reasoning_effort="minimal";
|
|
50
|
+
options.verbosity = "low";
|
|
51
|
+
} else {
|
|
52
|
+
options.top_p = 0.8;
|
|
53
|
+
options.temperature = 0.2;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const completion = await fnCall(options);
|
|
44
57
|
|
|
45
58
|
const response:any = completion.choices[0].message;
|
|
46
59
|
|
|
@@ -8,7 +8,7 @@ export class OpenAIStructuredLLM implements LLM {
|
|
|
8
8
|
|
|
9
9
|
constructor(config: LLMConfig) {
|
|
10
10
|
this.openai = new OpenAI({ apiKey: config.apiKey });
|
|
11
|
-
this.model = config.model || "gpt-
|
|
11
|
+
this.model = config.model || "gpt-5-mini";
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
async generateResponse(
|
|
@@ -16,15 +16,19 @@ export class OpenAIStructuredLLM implements LLM {
|
|
|
16
16
|
responseFormat?: { type: string } | null,
|
|
17
17
|
tools?: any[],
|
|
18
18
|
): Promise<string | LLMResponse> {
|
|
19
|
+
const mapped = messages.map((msg) => ({
|
|
20
|
+
role: msg.role as "system" | "user" | "assistant",
|
|
21
|
+
content: typeof msg.content === "string" ? msg.content : JSON.stringify(msg.content),
|
|
22
|
+
}));
|
|
23
|
+
const isGpt5 = this.model.startsWith('gpt-5');
|
|
24
|
+
const base:any = { messages: mapped, model: this.model };
|
|
25
|
+
if (isGpt5) {
|
|
26
|
+
base.temperature = 1;
|
|
27
|
+
base.reasoning_effort = "minimal";
|
|
28
|
+
base.verbosity = "low";
|
|
29
|
+
}
|
|
19
30
|
const completion = await this.openai.chat.completions.create({
|
|
20
|
-
|
|
21
|
-
role: msg.role as "system" | "user" | "assistant",
|
|
22
|
-
content:
|
|
23
|
-
typeof msg.content === "string"
|
|
24
|
-
? msg.content
|
|
25
|
-
: JSON.stringify(msg.content),
|
|
26
|
-
})),
|
|
27
|
-
model: this.model,
|
|
31
|
+
...base,
|
|
28
32
|
...(tools
|
|
29
33
|
? {
|
|
30
34
|
tools: tools.map((tool) => ({
|
|
@@ -63,16 +67,16 @@ export class OpenAIStructuredLLM implements LLM {
|
|
|
63
67
|
}
|
|
64
68
|
|
|
65
69
|
async generateChat(messages: Message[]): Promise<LLMResponse> {
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
70
|
+
const mapped = messages.map((msg) => ({
|
|
71
|
+
role: msg.role as "system" | "user" | "assistant",
|
|
72
|
+
content: typeof msg.content === "string" ? msg.content : JSON.stringify(msg.content),
|
|
73
|
+
}));
|
|
74
|
+
const isGpt5 = this.model.startsWith('gpt-5');
|
|
75
|
+
const base:any = { messages: mapped, model: this.model };
|
|
76
|
+
if (isGpt5) {
|
|
77
|
+
base.temperature = 1;
|
|
78
|
+
}
|
|
79
|
+
const completion = await this.openai.chat.completions.create(base);
|
|
76
80
|
const response = completion.choices[0].message;
|
|
77
81
|
return {
|
|
78
82
|
content: response.content || "",
|
package/src/memory/index.ts
CHANGED
|
@@ -164,6 +164,8 @@ export class MemoriesLite {
|
|
|
164
164
|
const vectorStore = await this.getVectorStore(userId);
|
|
165
165
|
const parsedMessages = messages.filter((m) => typeof m.content === 'string' && m.role=='user').map((m) => `${m.role=='user' ? '**USER**: ' : '**ASSISTANT**: '}${$t(m.content as string)}\n`).join("\n");
|
|
166
166
|
|
|
167
|
+
// Disinterest handling is delegated to the LLM via prompt guidelines
|
|
168
|
+
|
|
167
169
|
const [systemPrompt, userPrompt] = getFactRetrievalMessages(parsedMessages, customFacts||this.customPrompt);
|
|
168
170
|
|
|
169
171
|
const response = await this.llm.generateResponse(
|
|
@@ -193,7 +195,9 @@ export class MemoriesLite {
|
|
|
193
195
|
}
|
|
194
196
|
//
|
|
195
197
|
// can use native structured output
|
|
196
|
-
|
|
198
|
+
// Drop factual facts at capture level (do not store factual memories)
|
|
199
|
+
// FIXME Drop factual should be done at prompt level
|
|
200
|
+
const facts = parsedResponse(response).facts?.filter((f:any) => !f.existing && f.type !== 'factual')||[];
|
|
197
201
|
|
|
198
202
|
// console.log("-- DBG extract:", userPrompt);
|
|
199
203
|
// console.log("-- DBG facts:", facts);
|
|
@@ -236,7 +240,9 @@ export class MemoriesLite {
|
|
|
236
240
|
});
|
|
237
241
|
|
|
238
242
|
// Get memory update decisions
|
|
239
|
-
const
|
|
243
|
+
const lastUserMessage = [...messages].reverse().find(m => m.role === 'user');
|
|
244
|
+
const userInstruction = typeof lastUserMessage?.content === 'string' ? lastUserMessage?.content as string : '';
|
|
245
|
+
const updatePrompt = getUpdateMemoryMessages(uniqueOldMemories, facts, 'French', userInstruction);
|
|
240
246
|
|
|
241
247
|
const updateResponse = await this.llm.generateResponse(
|
|
242
248
|
[{ role: "user", content: updatePrompt }],
|
|
@@ -249,6 +255,10 @@ export class MemoriesLite {
|
|
|
249
255
|
// Process memory actions
|
|
250
256
|
const results: MemoryItem[] = [];
|
|
251
257
|
for (const action of memoryActions) {
|
|
258
|
+
// Ignore any factual memory actions (ADD/UPDATE/DELETE) → void
|
|
259
|
+
if(action.type === 'factual') {
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
252
262
|
if(action.reason === "undefined") {
|
|
253
263
|
console.log(`-- ⛔ LLM Error: ${action.event}, ${action.type}, "${action.text}"`);
|
|
254
264
|
continue;
|