@ai.ntellect/core 0.3.3 → 0.4.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 (85) hide show
  1. package/.nvmrc +1 -0
  2. package/README.FR.md +201 -261
  3. package/README.md +208 -260
  4. package/agent/index.ts +199 -216
  5. package/agent/tools/get-rss.ts +64 -0
  6. package/bull.ts +5 -0
  7. package/dist/agent/index.d.ts +29 -26
  8. package/dist/agent/index.js +123 -112
  9. package/dist/agent/tools/get-rss.d.ts +16 -0
  10. package/dist/agent/tools/get-rss.js +62 -0
  11. package/dist/bull.d.ts +1 -0
  12. package/dist/bull.js +9 -0
  13. package/dist/examples/index.d.ts +2 -0
  14. package/dist/examples/index.js +89 -0
  15. package/dist/llm/interpreter/context.d.ts +5 -22
  16. package/dist/llm/interpreter/context.js +8 -9
  17. package/dist/llm/interpreter/index.d.ts +9 -5
  18. package/dist/llm/interpreter/index.js +55 -48
  19. package/dist/llm/memory-manager/context.d.ts +2 -0
  20. package/dist/llm/memory-manager/context.js +22 -0
  21. package/dist/llm/memory-manager/index.d.ts +17 -0
  22. package/dist/llm/memory-manager/index.js +107 -0
  23. package/dist/llm/orchestrator/context.d.ts +2 -10
  24. package/dist/llm/orchestrator/context.js +19 -14
  25. package/dist/llm/orchestrator/index.d.ts +36 -21
  26. package/dist/llm/orchestrator/index.js +122 -88
  27. package/dist/llm/orchestrator/types.d.ts +12 -0
  28. package/dist/llm/orchestrator/types.js +2 -0
  29. package/dist/memory/cache.d.ts +6 -5
  30. package/dist/memory/cache.js +31 -21
  31. package/dist/memory/persistent.d.ts +5 -3
  32. package/dist/memory/persistent.js +89 -73
  33. package/dist/services/redis-cache.d.ts +37 -0
  34. package/dist/services/redis-cache.js +93 -0
  35. package/dist/services/scheduler.d.ts +39 -16
  36. package/dist/services/scheduler.js +81 -103
  37. package/dist/services/telegram-monitor.d.ts +0 -15
  38. package/dist/services/telegram-monitor.js +117 -101
  39. package/dist/test.js +106 -172
  40. package/dist/types.d.ts +38 -7
  41. package/dist/utils/generate-object.d.ts +12 -0
  42. package/dist/utils/generate-object.js +90 -0
  43. package/dist/utils/header-builder.d.ts +11 -0
  44. package/dist/utils/header-builder.js +34 -0
  45. package/dist/utils/inject-actions.js +2 -2
  46. package/dist/utils/queue-item-transformer.d.ts +2 -2
  47. package/dist/utils/schema-generator.d.ts +16 -0
  48. package/dist/utils/schema-generator.js +46 -0
  49. package/examples/index.ts +103 -0
  50. package/llm/interpreter/context.ts +20 -8
  51. package/llm/interpreter/index.ts +81 -54
  52. package/llm/memory-manager/context.ts +21 -0
  53. package/llm/memory-manager/index.ts +163 -0
  54. package/llm/orchestrator/context.ts +20 -13
  55. package/llm/orchestrator/index.ts +210 -130
  56. package/llm/orchestrator/types.ts +14 -0
  57. package/memory/cache.ts +37 -31
  58. package/memory/persistent.ts +121 -99
  59. package/package.json +11 -2
  60. package/services/redis-cache.ts +128 -0
  61. package/services/scheduler.ts +102 -141
  62. package/services/telegram-monitor.ts +138 -138
  63. package/t.py +79 -0
  64. package/t.spec +38 -0
  65. package/types.ts +40 -7
  66. package/utils/generate-object.ts +105 -0
  67. package/utils/header-builder.ts +40 -0
  68. package/utils/inject-actions.ts +4 -6
  69. package/utils/queue-item-transformer.ts +2 -1
  70. package/utils/schema-generator.ts +73 -0
  71. package/agent/handlers/ActionHandler.ts +0 -48
  72. package/agent/handlers/ConfirmationHandler.ts +0 -37
  73. package/agent/handlers/EventHandler.ts +0 -35
  74. package/dist/agent/handlers/ActionHandler.d.ts +0 -8
  75. package/dist/agent/handlers/ActionHandler.js +0 -36
  76. package/dist/agent/handlers/ConfirmationHandler.d.ts +0 -7
  77. package/dist/agent/handlers/ConfirmationHandler.js +0 -31
  78. package/dist/agent/handlers/EventHandler.d.ts +0 -10
  79. package/dist/agent/handlers/EventHandler.js +0 -34
  80. package/dist/llm/evaluator/context.d.ts +0 -10
  81. package/dist/llm/evaluator/context.js +0 -24
  82. package/dist/llm/evaluator/index.d.ts +0 -16
  83. package/dist/llm/evaluator/index.js +0 -150
  84. package/llm/evaluator/context.ts +0 -21
  85. package/llm/evaluator/index.ts +0 -193
@@ -1,152 +1,232 @@
1
- import { openai } from "@ai-sdk/openai";
2
- import { generateObject } from "ai";
1
+ import { LanguageModelV1 } from "ai";
3
2
  import { z } from "zod";
4
3
  import { CacheMemory } from "../../memory/cache";
5
4
  import { PersistentMemory } from "../../memory/persistent";
6
- import { ActionSchema, State } from "../../types";
5
+ import { ActionQueueManager } from "../../services/queue";
6
+ import { CacheConfig, RedisCache } from "../../services/redis-cache";
7
+ import { TaskScheduler } from "../../services/scheduler";
8
+ import {
9
+ ActionSchema,
10
+ GenerateObjectResponse,
11
+ MemoryScope,
12
+ QueueCallbacks,
13
+ } from "../../types";
14
+ import { generateObject } from "../../utils/generate-object";
15
+ import { LLMHeaderBuilder } from "../../utils/header-builder";
7
16
  import { injectActions } from "../../utils/inject-actions";
8
- import { orchestratorContext } from "./context";
9
-
10
- export class Orchestrator {
11
- private readonly model = openai("gpt-4o");
12
- public tools: ActionSchema[];
13
- private memory: {
14
- persistent: PersistentMemory;
15
- cache: CacheMemory;
17
+ import { Interpreter } from "../interpreter";
18
+ import { orchestratorInstructions } from "./context";
19
+ import { State } from "./types";
20
+
21
+ export class AgentRuntime {
22
+ private readonly model: LanguageModelV1;
23
+ private readonly tools: ActionSchema[];
24
+ private readonly interpreters: Interpreter[];
25
+ private readonly queueManager: ActionQueueManager;
26
+ private readonly scheduler: TaskScheduler;
27
+ private readonly cache: RedisCache;
28
+ private memory?: {
29
+ persistent?: PersistentMemory;
30
+ cache?: CacheMemory;
16
31
  };
17
- private id: string;
18
-
19
- constructor({
20
- id,
21
- tools,
22
- memory,
23
- }: {
24
- id: string;
25
- tools: ActionSchema[];
26
- memory: {
27
- persistent: PersistentMemory;
28
- cache: CacheMemory;
29
- };
30
- }) {
31
- this.id = id;
32
+
33
+ constructor(
34
+ model: LanguageModelV1,
35
+ tools: ActionSchema[],
36
+ interpreters: Interpreter[],
37
+ redisConfig: CacheConfig,
38
+ memory?: {
39
+ persistent?: PersistentMemory;
40
+ cache?: CacheMemory;
41
+ },
42
+ callbacks?: QueueCallbacks
43
+ ) {
44
+ this.model = model;
45
+ this.tools = tools;
46
+ this.interpreters = interpreters;
47
+ this.queueManager = new ActionQueueManager(tools, callbacks);
32
48
  this.memory = memory;
33
- this.tools = [
34
- ...tools,
35
- {
36
- name: "search_internal_knowledge_base",
37
- description:
38
- "Search for relevant information in the internal knowledge base",
39
- parameters: z.object({
40
- query: z.string(),
41
- }),
42
- execute: async ({ query }: { query: string }) => {
43
- const persistentMemories =
44
- await this.memory.persistent.findRelevantDocuments(query, {
45
- similarityThreshold: 70,
46
- });
47
- return `# LONG_TERM_MEMORY: ${JSON.stringify(persistentMemories)}`;
48
- },
49
- },
50
- ];
49
+ this.cache = new RedisCache(redisConfig);
50
+ this.scheduler = new TaskScheduler(this, this.cache);
51
51
  }
52
52
 
53
- composeContext(state: State) {
54
- const { userRequest, results } = state;
55
- const { role, language, guidelines } = orchestratorContext.behavior;
56
- const { important, warnings } = guidelines;
57
-
58
- const context = `
59
- # ROLE: ${role}
60
- # LANGUAGE: ${language}
61
- # IMPORTANT: ${important.join("\n")}
62
- # USER_REQUEST: ${userRequest}
63
- # ACTIONS_AVAILABLES: ${injectActions(this.tools)} (NEVER REPEAT ACTIONS)
64
- # CURRENT_RESULTS: ${results}
65
- `.trim();
66
-
67
- return context;
53
+ private async buildContext(state: State): Promise<string> {
54
+ console.log("🧠 Building context with RAG and CAG...");
55
+ const context = LLMHeaderBuilder.create();
56
+
57
+ // Add orchestrator instructions
58
+ context.addHeader("ROLE", orchestratorInstructions.role);
59
+ context.addHeader("LANGUAGE", orchestratorInstructions.language);
60
+ context.addHeader(
61
+ "IMPORTANT",
62
+ orchestratorInstructions.guidelines.important
63
+ );
64
+ context.addHeader("WARNINGS", orchestratorInstructions.guidelines.warnings);
65
+ // Add tools to context
66
+ context.addHeader("TOOLS", injectActions(this.tools));
67
+
68
+ // Add previous actions if any
69
+ if (state.previousActions?.length) {
70
+ context.addHeader(
71
+ "PREVIOUS_ACTIONS",
72
+ JSON.stringify(state.previousActions)
73
+ );
74
+ }
75
+
76
+ // Get recent similar actions (CAG)
77
+ if (this.memory?.cache) {
78
+ const cacheMemories = await this.memory.cache.findSimilarActions(
79
+ state.currentContext,
80
+ {
81
+ similarityThreshold: 80,
82
+ maxResults: 3,
83
+ scope: MemoryScope.GLOBAL,
84
+ }
85
+ );
86
+
87
+ if (cacheMemories.length > 0) {
88
+ context.addHeader("RECENT_ACTIONS", JSON.stringify(cacheMemories));
89
+ }
90
+ }
91
+
92
+ // Get relevant knowledge (RAG)
93
+ if (this.memory?.persistent) {
94
+ const persistentMemory =
95
+ await this.memory.persistent.findRelevantDocuments(
96
+ state.currentContext,
97
+ {
98
+ similarityThreshold: 80,
99
+ }
100
+ );
101
+
102
+ if (persistentMemory.length > 0) {
103
+ context.addHeader(
104
+ "RELEVANT_KNOWLEDGE",
105
+ JSON.stringify(persistentMemory)
106
+ );
107
+ }
108
+ }
109
+
110
+ // Add available interpreters
111
+ context.addHeader(
112
+ "AVAILABLE_INTERPRETERS",
113
+ JSON.stringify(this.interpreters.map((i) => i.name))
114
+ );
115
+ console.log("Context built with memories", context.toString());
116
+ return context.toString();
68
117
  }
69
118
 
70
- async process(
71
- prompt: string,
72
- results: string
73
- ): Promise<{
74
- actions: {
119
+ async process(state: State): Promise<{
120
+ shouldContinue: boolean;
121
+ actions: Array<{
75
122
  name: string;
76
- type: string;
77
- parameters: {
123
+ parameters: Array<{
78
124
  name: string;
79
125
  value: any;
80
- }[];
81
- }[];
82
- answer: string;
83
- }> {
84
- const state = this.composeContext({
85
- userRequest: prompt,
86
- results: results,
87
- });
88
- try {
89
- console.log("\nšŸŽ­ Orchestrator processing");
90
- console.log("Prompt:", prompt);
91
-
92
- const response = await generateObject({
93
- model: this.model,
94
- schema: z.object({
95
- actions: z.array(
96
- z.object({
97
- name: z.string(),
98
- type: z.enum(["on-chain", "off-chain", "question", "analysis"]),
99
- parameters: z.array(
100
- z.object({
101
- name: z.string(),
102
- value: z.any(),
103
- })
104
- ),
105
- })
106
- ),
107
- answer: z.string(),
108
- }),
109
- prompt: prompt,
110
- system: state,
111
- temperature: 0,
112
- });
113
-
114
- const validatedResponse = {
115
- ...response.object,
116
- actions: response.object.actions.map((action) => ({
117
- ...action,
118
- parameters: Array.isArray(action.parameters)
119
- ? action.parameters.map((param) => ({
120
- name: param.name,
121
- value: param.value ?? null,
122
- }))
123
- : Object.entries(action.parameters || {}).map(([name, value]) => ({
124
- name,
125
- value: value ?? null,
126
- })),
127
- })),
126
+ }>;
127
+ scheduler?: {
128
+ isScheduled: boolean;
129
+ scheduledAtInC?: string;
130
+ interval?: string;
131
+ reason?: string;
128
132
  };
129
-
130
- console.log("\nāœ… Orchestration completed");
131
- console.log("─".repeat(50));
133
+ }>;
134
+ socialResponse?: {
135
+ shouldRespond: boolean;
136
+ response?: string;
137
+ isPartialResponse?: boolean;
138
+ };
139
+ interpreter?: string;
140
+ results?: string;
141
+ }> {
142
+ console.log("šŸ”„ Processing state:");
143
+ console.dir(state, { depth: null });
144
+ if (state.previousActions?.length) {
132
145
  console.log(
133
- "Actions determined:",
134
- validatedResponse.actions.map((a) => {
135
- return `${a.name} (${a.type})`;
136
- })
146
+ "šŸ“Š Previous actions:",
147
+ state.previousActions
148
+ .map((a) => (typeof a === "string" ? a : a.name))
149
+ .join(", ")
137
150
  );
138
- if (validatedResponse.answer) {
139
- console.log("Response:", validatedResponse.answer);
151
+ }
152
+
153
+ const context = await this.buildContext(state);
154
+
155
+ console.log("\n🧠 Generating response from LLM...");
156
+ const response = await generateObject<GenerateObjectResponse>({
157
+ model: this.model,
158
+ schema: z.object({
159
+ shouldContinue: z.boolean(),
160
+ actions: z.array(
161
+ z.object({
162
+ name: z.string(),
163
+ parameters: z.array(
164
+ z.object({
165
+ name: z.string(),
166
+ value: z.any(),
167
+ })
168
+ ),
169
+ scheduler: z
170
+ .object({
171
+ isScheduled: z.boolean(),
172
+ cronExpression: z.string().optional(),
173
+ reason: z.string().optional(),
174
+ })
175
+ .optional(),
176
+ })
177
+ ),
178
+ socialResponse: z
179
+ .object({
180
+ shouldRespond: z.boolean(),
181
+ response: z.string().optional(),
182
+ isPartialResponse: z.boolean().optional(),
183
+ })
184
+ .optional(),
185
+ interpreter: z.string().optional(),
186
+ }),
187
+ prompt: state.currentContext,
188
+ system: context.toString(),
189
+ temperature: 0,
190
+ });
191
+ console.log("šŸ”„ Orchestrator response:");
192
+ console.dir(response.object, { depth: null });
193
+
194
+ // Force shouldContinue to false if no actions are planned
195
+ if (response.object.actions.length === 0) {
196
+ response.object.shouldContinue = false;
197
+ console.log("āš ļø No actions planned, forcing shouldContinue to false");
198
+ }
199
+
200
+ // Handle social interactions and actions in a single block
201
+ if (response.object.socialResponse?.shouldRespond) {
202
+ console.log("\nšŸ’¬ Processing social response");
203
+ if (response.object.socialResponse.response) {
204
+ console.log("šŸ“¢ Response:", response.object.socialResponse.response);
205
+ // Ensure all parameters have a value property
140
206
  }
207
+ }
141
208
 
142
- return validatedResponse;
143
- } catch (error: any) {
144
- console.error("\nāŒ Orchestrator error:", error.message);
145
- if (error?.value) {
146
- console.log("Partial response:", JSON.stringify(error.value, null, 2));
147
- return { ...error.value };
209
+ // Handle scheduled actions
210
+ for (const action of response.object.actions) {
211
+ if (action.scheduler?.isScheduled) {
212
+ await this.scheduler.scheduleRequest({
213
+ originalRequest: state.currentContext,
214
+ cronExpression: action.scheduler.cronExpression,
215
+ });
148
216
  }
149
- throw error;
150
217
  }
218
+
219
+ // Store actions in Redis cache
220
+ if (response.object.actions.length > 0) {
221
+ const requestId = crypto.randomUUID();
222
+ await this.cache.storePreviousActions(requestId, response.object.actions);
223
+ }
224
+
225
+ // Store message in recent messages
226
+ await this.cache.storeRecentMessage(state.currentContext, {
227
+ socialResponse: response.object.socialResponse,
228
+ });
229
+
230
+ return response.object;
151
231
  }
152
232
  }
@@ -0,0 +1,14 @@
1
+ import { QueueResult } from "../../types";
2
+
3
+ export interface State {
4
+ currentContext: string;
5
+ previousActions: (string | QueueResult)[];
6
+ reward?: number;
7
+ userRequest?: string;
8
+ results?: string;
9
+ }
10
+
11
+ export interface Action {
12
+ name: string;
13
+ parameters: Record<string, any>;
14
+ }
package/memory/cache.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { openai } from "@ai-sdk/openai";
2
- import { cosineSimilarity, embed } from "ai";
2
+ import { cosineSimilarity, embed, EmbeddingModel } from "ai";
3
3
  import { createClient } from "redis";
4
4
  import {
5
5
  CacheMemoryOptions,
@@ -7,16 +7,16 @@ import {
7
7
  CreateMemoryInput,
8
8
  MatchOptions,
9
9
  MemoryScope,
10
- MemoryType,
11
- QueueResult,
12
10
  } from "../types";
13
11
 
14
12
  export class CacheMemory {
15
13
  private redis;
16
14
  private readonly CACHE_PREFIX: string;
17
15
  private readonly CACHE_TTL: number;
16
+ private readonly embeddingModel: EmbeddingModel<string>;
18
17
 
19
- constructor(options: CacheMemoryOptions = {}) {
18
+ constructor(options: CacheMemoryOptions) {
19
+ this.embeddingModel = options.embeddingModel;
20
20
  const ttlInHours = options.cacheTTL ?? 1;
21
21
  this.CACHE_TTL = ttlInHours * 60 * 60;
22
22
  this.CACHE_PREFIX = options.cachePrefix ?? "memory:";
@@ -44,11 +44,11 @@ export class CacheMemory {
44
44
  }
45
45
  }
46
46
 
47
- private async storeMemory(memory: CacheMemoryType) {
47
+ private async storeMemory(memory: CacheMemoryType, ttl?: number) {
48
48
  const prefix = this.CACHE_PREFIX;
49
49
  const key = `${prefix}${memory.id}`;
50
50
  const result = await this.redis.set(key, JSON.stringify(memory), {
51
- EX: this.CACHE_TTL,
51
+ EX: ttl || this.CACHE_TTL,
52
52
  });
53
53
  console.log("šŸ’¾ Cache memory created:", result);
54
54
  }
@@ -58,9 +58,9 @@ export class CacheMemory {
58
58
  options: MatchOptions & { userId?: string; scope?: MemoryScope } = {}
59
59
  ): Promise<
60
60
  {
61
- actions: QueueResult[];
62
- similarityPercentage: number;
61
+ data: any;
63
62
  query: string;
63
+ createdAt: Date;
64
64
  }[]
65
65
  > {
66
66
  console.log("\nšŸ” Searching in cache");
@@ -72,7 +72,7 @@ export class CacheMemory {
72
72
  value: query,
73
73
  });
74
74
 
75
- const memories = await this.getAllMemories(options.scope, options.userId);
75
+ const memories = await this.getAllMemories();
76
76
  console.log(`\nšŸ“š Found ${memories.length} cached queries to compare`);
77
77
 
78
78
  const matches = memories
@@ -80,7 +80,7 @@ export class CacheMemory {
80
80
  const similarity = cosineSimilarity(embedding, memory.embedding);
81
81
  const similarityPercentage = (similarity + 1) * 50;
82
82
  return {
83
- actions: memory.data,
83
+ data: memory.data,
84
84
  query: memory.query,
85
85
  similarityPercentage,
86
86
  createdAt: memory.createdAt,
@@ -103,6 +103,7 @@ export class CacheMemory {
103
103
  results.forEach((match, index) => {
104
104
  console.log(`\n${index + 1}. Match Details:`);
105
105
  console.log(` Query: ${match.query}`);
106
+ console.log(` Data: ${JSON.stringify(match.data)}`);
106
107
  console.log(` Similarity: ${match.similarityPercentage.toFixed(2)}%`);
107
108
  console.log("─".repeat(50));
108
109
  });
@@ -110,13 +111,16 @@ export class CacheMemory {
110
111
  console.log("\nāŒ No similar queries found in cache");
111
112
  }
112
113
 
113
- return results;
114
+ return results.map((match) => {
115
+ return {
116
+ data: match.data,
117
+ query: match.query,
118
+ createdAt: match.createdAt,
119
+ };
120
+ });
114
121
  }
115
122
 
116
- async getAllMemories(
117
- scope?: MemoryScope,
118
- userId?: string
119
- ): Promise<CacheMemoryType[]> {
123
+ async getAllMemories(): Promise<CacheMemoryType[]> {
120
124
  const keys = await this.redis.keys(`${this.CACHE_PREFIX}*`);
121
125
  const memories = await this.getMemoriesFromKeys(keys);
122
126
 
@@ -140,11 +144,10 @@ export class CacheMemory {
140
144
  input: CreateMemoryInput
141
145
  ): Promise<CacheMemoryType | undefined> {
142
146
  console.log("\nšŸ“ Processing new memory creation");
143
- console.log("Content:", input.content);
144
- console.log("Type:", input.type);
145
- console.log("Scope:", input.scope);
147
+ console.log("Content:", input.query);
148
+ console.log("TTL:", input.ttl ? `${input.ttl} seconds` : "default");
146
149
 
147
- const existingPattern = await this.findSimilarActions(input.content, {
150
+ const existingPattern = await this.findSimilarActions(input.query, {
148
151
  similarityThreshold: 95,
149
152
  userId: input.userId,
150
153
  scope: input.scope,
@@ -156,7 +159,8 @@ export class CacheMemory {
156
159
  existingPattern.forEach((match, index) => {
157
160
  console.log(`\n${index + 1}. Existing Match:`);
158
161
  console.log(` Query: ${match.query}`);
159
- console.log(` Similarity: ${match.similarityPercentage.toFixed(2)}%`);
162
+ console.log(` Data: ${JSON.stringify(match.data)}`);
163
+ console.log(` Created At: ${match.createdAt}`);
160
164
  });
161
165
  console.log("\nā­ļø Skipping creation of new memory");
162
166
  return;
@@ -166,11 +170,11 @@ export class CacheMemory {
166
170
 
167
171
  const memory = await this.createSingleMemory({
168
172
  id: crypto.randomUUID(),
169
- content: input.content,
170
- type: input.type,
173
+ query: input.query,
171
174
  data: input.data,
172
175
  userId: input.userId,
173
176
  scope: input.scope,
177
+ ttl: input.ttl,
174
178
  });
175
179
 
176
180
  return memory;
@@ -178,28 +182,27 @@ export class CacheMemory {
178
182
 
179
183
  private async createSingleMemory(params: {
180
184
  id: string;
181
- content: string;
182
- type: MemoryType;
185
+ query: string;
183
186
  data: any;
184
187
  userId?: string;
185
188
  scope?: MemoryScope;
189
+ ttl?: number;
186
190
  }): Promise<CacheMemoryType> {
187
191
  console.log("\nšŸ—ļø Creating new cache memory");
188
192
  console.log("ID:", params.id);
189
- console.log("Content:", params.content);
193
+ console.log("Content:", params.query);
190
194
 
191
195
  console.log("\n🧮 Generating embedding...");
192
196
  const { embedding } = await embed({
193
- model: openai.embedding("text-embedding-3-small"),
194
- value: params.content,
197
+ model: this.embeddingModel,
198
+ value: params.query,
195
199
  });
196
200
  console.log("āœ… Embedding generated successfully");
197
201
 
198
202
  const memory: CacheMemoryType = {
199
203
  id: params.id,
200
- type: params.type,
201
204
  data: params.data,
202
- query: params.content,
205
+ query: params.query,
203
206
  embedding,
204
207
  userId: params.userId,
205
208
  scope:
@@ -207,8 +210,11 @@ export class CacheMemory {
207
210
  createdAt: new Date(),
208
211
  };
209
212
 
210
- await this.storeMemory(memory);
211
- console.log("āœ… Memory created and stored successfully");
213
+ await this.storeMemory(memory, params.ttl);
214
+ console.log("āœ… Short-term memory created and stored successfully", {
215
+ ...memory,
216
+ ttl: params.ttl || this.CACHE_TTL,
217
+ });
212
218
 
213
219
  return memory;
214
220
  }