memories-lite 0.9.4 → 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.
@@ -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' | 'episodic' | 'factual' | 'semantic' | 'assistant_preference';
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
- procedural: z.ZodObject<{
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
- episodic: z.ZodObject<{
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
- factual: z.ZodObject<{
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
- semantic: z.ZodObject<{
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
- episodic: {
277
+ todo: {
278
278
  alpha: number;
279
279
  beta: number;
280
280
  gamma: number;
281
281
  halfLifeDays: number;
282
282
  };
283
- factual: {
283
+ episodic: {
284
284
  alpha: number;
285
285
  beta: number;
286
286
  gamma: number;
287
287
  halfLifeDays: number;
288
288
  };
289
- semantic: {
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
- episodic: {
314
+ todo: {
315
315
  alpha: number;
316
316
  beta: number;
317
317
  gamma: number;
318
318
  halfLifeDays: number;
319
319
  };
320
- factual: {
320
+ episodic: {
321
321
  alpha: number;
322
322
  beta: number;
323
323
  gamma: number;
324
324
  halfLifeDays: number;
325
325
  };
326
- semantic: {
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
- procedural: z.ZodObject<{
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
- episodic: z.ZodObject<{
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
- factual: z.ZodObject<{
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
- semantic: z.ZodObject<{
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
- episodic: {
454
+ todo: {
455
455
  alpha: number;
456
456
  beta: number;
457
457
  gamma: number;
458
458
  halfLifeDays: number;
459
459
  };
460
- factual: {
460
+ episodic: {
461
461
  alpha: number;
462
462
  beta: number;
463
463
  gamma: number;
464
464
  halfLifeDays: number;
465
465
  };
466
- semantic: {
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
- episodic: {
491
+ todo: {
492
492
  alpha: number;
493
493
  beta: number;
494
494
  gamma: number;
495
495
  halfLifeDays: number;
496
496
  };
497
- factual: {
497
+ episodic: {
498
498
  alpha: number;
499
499
  beta: number;
500
500
  gamma: number;
501
501
  halfLifeDays: number;
502
502
  };
503
- semantic: {
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
- procedural: z.ZodObject<{
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
- episodic: z.ZodObject<{
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
- factual: z.ZodObject<{
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
- semantic: z.ZodObject<{
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
- episodic: {
631
+ todo: {
632
632
  alpha: number;
633
633
  beta: number;
634
634
  gamma: number;
635
635
  halfLifeDays: number;
636
636
  };
637
- factual: {
637
+ episodic: {
638
638
  alpha: number;
639
639
  beta: number;
640
640
  gamma: number;
641
641
  halfLifeDays: number;
642
642
  };
643
- semantic: {
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
- episodic: {
668
+ todo: {
669
669
  alpha: number;
670
670
  beta: number;
671
671
  gamma: number;
672
672
  halfLifeDays: number;
673
673
  };
674
- factual: {
674
+ episodic: {
675
675
  alpha: number;
676
676
  beta: number;
677
677
  gamma: number;
678
678
  halfLifeDays: number;
679
679
  };
680
- semantic: {
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
- episodic: {
714
+ todo: {
715
715
  alpha: number;
716
716
  beta: number;
717
717
  gamma: number;
718
718
  halfLifeDays: number;
719
719
  };
720
- factual: {
720
+ episodic: {
721
721
  alpha: number;
722
722
  beta: number;
723
723
  gamma: number;
724
724
  halfLifeDays: number;
725
725
  };
726
- semantic: {
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
- episodic: {
762
+ todo: {
763
763
  alpha: number;
764
764
  beta: number;
765
765
  gamma: number;
766
766
  halfLifeDays: number;
767
767
  };
768
- factual: {
768
+ episodic: {
769
769
  alpha: number;
770
770
  beta: number;
771
771
  gamma: number;
772
772
  halfLifeDays: number;
773
773
  };
774
- semantic: {
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
- episodic: {
916
+ todo: {
917
917
  alpha: number;
918
918
  beta: number;
919
919
  gamma: number;
920
920
  halfLifeDays: number;
921
921
  };
922
- factual: {
922
+ episodic: {
923
923
  alpha: number;
924
924
  beta: number;
925
925
  gamma: number;
926
926
  halfLifeDays: number;
927
927
  };
928
- semantic: {
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
- episodic: {
1005
+ todo: {
1006
1006
  alpha: number;
1007
1007
  beta: number;
1008
1008
  gamma: number;
1009
1009
  halfLifeDays: number;
1010
1010
  };
1011
- factual: {
1011
+ episodic: {
1012
1012
  alpha: number;
1013
1013
  beta: number;
1014
1014
  gamma: number;
1015
1015
  halfLifeDays: number;
1016
1016
  };
1017
- semantic: {
1017
+ factual: {
1018
1018
  alpha: number;
1019
1019
  beta: number;
1020
1020
  gamma: number;
@@ -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
- procedural: zod_1.z.object({
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
- episodic: zod_1.z.object({
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
- factual: zod_1.z.object({
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
- semantic: zod_1.z.object({
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,7 +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
+ //console.log('--- DBG create LiteVectorStore::dbPath',this.dbPath);
37
37
  this.db = new sqlite3_1.default.Database(this.dbPath);
38
38
  }
39
39
  async init() {
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "memories-lite",
3
- "version": "0.9.4",
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
  },
@@ -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
- factual: { alpha: 0.70, beta: 0.20, gamma: 0.10, halfLifeDays: 365 },
8
- semantic: { alpha: 0.50, beta: 0.25, gamma: 0.25, halfLifeDays: 120 },
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-4o-mini",
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-4o-mini",
51
+ model: "gpt-5-nano",
52
52
  },
53
53
  },
54
54
  },
@@ -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,
@@ -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-4.1-mini";
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 completion = await fnCall({
36
+ const selectedModel = model || this.model;
37
+ const isGpt5 = selectedModel.startsWith('gpt-5');
38
+
39
+ const options:any = {
37
40
  messages: msg,
38
- model: model||this.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-4-turbo-preview";
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
- messages: messages.map((msg) => ({
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 completion = await this.openai.chat.completions.create({
67
- messages: messages.map((msg) => ({
68
- role: msg.role as "system" | "user" | "assistant",
69
- content:
70
- typeof msg.content === "string"
71
- ? msg.content
72
- : JSON.stringify(msg.content),
73
- })),
74
- model: this.model,
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 || "",
@@ -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
- const facts = parsedResponse(response).facts?.filter((f:any) => !f.existing)||[];
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 updatePrompt = getUpdateMemoryMessages(uniqueOldMemories, facts);
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;