@ai.ntellect/core 0.5.0 → 0.6.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.
Files changed (131) hide show
  1. package/.mocharc.json +1 -1
  2. package/README.md +311 -272
  3. package/create-llm-to-select-multiple-graph copy.ts +243 -0
  4. package/create-llm-to-select-multiple-graph.ts +148 -0
  5. package/dist/graph/controller.js +63 -0
  6. package/dist/graph/engine.js +563 -0
  7. package/dist/index.js +6 -6
  8. package/dist/memory/adapters/meilisearch/index.js +249 -0
  9. package/dist/memory/adapters/redis/index.js +96 -0
  10. package/dist/memory/index.js +9 -0
  11. package/dist/services/agenda.js +115 -0
  12. package/dist/services/embedding.js +40 -0
  13. package/dist/services/queue.js +99 -103
  14. package/dist/test/graph/controller.test.js +170 -0
  15. package/dist/test/graph/engine.test.js +465 -0
  16. package/dist/test/memory/adapters/meilisearch.test.js +250 -0
  17. package/dist/test/memory/adapters/redis.test.js +143 -0
  18. package/dist/test/memory/base.test.js +209 -0
  19. package/dist/test/services/agenda.test.js +230 -0
  20. package/dist/test/services/queue.test.js +258 -0
  21. package/dist/types/index.js +2 -0
  22. package/dist/utils/generate-object.js +32 -11
  23. package/dist/utils/inject-actions.js +2 -2
  24. package/dist/utils/queue-item-transformer.js +2 -2
  25. package/dist/utils/state-manager.js +20 -0
  26. package/graph/controller.ts +64 -0
  27. package/graph/engine.ts +790 -0
  28. package/index copy.ts +81 -0
  29. package/index.ts +7 -7
  30. package/interfaces/index.ts +119 -0
  31. package/memory/adapters/meilisearch/index.ts +286 -0
  32. package/memory/adapters/redis/index.ts +103 -0
  33. package/memory/index.ts +22 -0
  34. package/package.json +7 -2
  35. package/services/agenda.ts +48 -43
  36. package/services/embedding.ts +26 -0
  37. package/services/queue.ts +2 -29
  38. package/test/.env.test +4 -0
  39. package/test/graph/controller.test.ts +186 -0
  40. package/test/graph/engine.test.ts +546 -0
  41. package/test/memory/adapters/meilisearch.test.ts +297 -0
  42. package/test/memory/adapters/redis.test.ts +160 -0
  43. package/test/memory/base.test.ts +229 -0
  44. package/test/services/agenda.test.ts +280 -0
  45. package/test/services/queue.test.ts +286 -44
  46. package/tsconfig.json +10 -10
  47. package/types/index.ts +278 -0
  48. package/utils/queue-item-transformer.ts +8 -11
  49. package/utils/setup-graphs.ts +45 -0
  50. package/utils/stringifiy-zod-schema.ts +45 -0
  51. package/.nvmrc +0 -1
  52. package/README.FR.md +0 -916
  53. package/agent/index.ts +0 -151
  54. package/agent/workflow/conditions.ts +0 -16
  55. package/agent/workflow/handlers/interpreter.handler.ts +0 -48
  56. package/agent/workflow/handlers/memory.handler.ts +0 -106
  57. package/agent/workflow/handlers/orchestrator.handler.ts +0 -23
  58. package/agent/workflow/handlers/queue.handler.ts +0 -34
  59. package/agent/workflow/handlers/scheduler.handler.ts +0 -61
  60. package/agent/workflow/index.ts +0 -62
  61. package/dist/agent/index.d.ts +0 -38
  62. package/dist/agent/index.js +0 -143
  63. package/dist/agent/tools/get-rss.d.ts +0 -16
  64. package/dist/agent/tools/get-rss.js +0 -62
  65. package/dist/bull.d.ts +0 -1
  66. package/dist/bull.js +0 -9
  67. package/dist/examples/index.d.ts +0 -2
  68. package/dist/examples/index.js +0 -89
  69. package/dist/index.d.ts +0 -7
  70. package/dist/llm/interpreter/context.d.ts +0 -15
  71. package/dist/llm/interpreter/context.js +0 -89
  72. package/dist/llm/interpreter/index.d.ts +0 -21
  73. package/dist/llm/interpreter/index.js +0 -87
  74. package/dist/llm/memory-manager/context.d.ts +0 -2
  75. package/dist/llm/memory-manager/context.js +0 -22
  76. package/dist/llm/memory-manager/index.d.ts +0 -17
  77. package/dist/llm/memory-manager/index.js +0 -107
  78. package/dist/llm/orchestrator/context.d.ts +0 -2
  79. package/dist/llm/orchestrator/context.js +0 -23
  80. package/dist/llm/orchestrator/index.d.ts +0 -44
  81. package/dist/llm/orchestrator/index.js +0 -139
  82. package/dist/llm/orchestrator/types.d.ts +0 -12
  83. package/dist/memory/cache.d.ts +0 -22
  84. package/dist/memory/cache.js +0 -165
  85. package/dist/memory/persistent.d.ts +0 -57
  86. package/dist/memory/persistent.js +0 -189
  87. package/dist/services/queue.d.ts +0 -13
  88. package/dist/services/redis-cache.d.ts +0 -37
  89. package/dist/services/redis-cache.js +0 -93
  90. package/dist/services/scheduler.d.ts +0 -40
  91. package/dist/services/scheduler.js +0 -99
  92. package/dist/services/telegram-monitor.d.ts +0 -0
  93. package/dist/services/telegram-monitor.js +0 -118
  94. package/dist/t.d.ts +0 -46
  95. package/dist/t.js +0 -102
  96. package/dist/test.d.ts +0 -0
  97. package/dist/test.js +0 -438
  98. package/dist/types.d.ts +0 -258
  99. package/dist/types.js +0 -22
  100. package/dist/utils/generate-object.d.ts +0 -12
  101. package/dist/utils/header-builder.d.ts +0 -11
  102. package/dist/utils/inject-actions.d.ts +0 -2
  103. package/dist/utils/queue-item-transformer.d.ts +0 -7
  104. package/dist/utils/sanitize-results.d.ts +0 -17
  105. package/dist/utils/schema-generator.d.ts +0 -16
  106. package/examples/actions/get-rss.ts +0 -71
  107. package/examples/index.ts +0 -98
  108. package/index.html +0 -42
  109. package/llm/dynamic-condition/example.ts +0 -36
  110. package/llm/dynamic-condition/index.ts +0 -108
  111. package/llm/interpreter/context.ts +0 -94
  112. package/llm/interpreter/index.ts +0 -140
  113. package/llm/memory-manager/context.ts +0 -19
  114. package/llm/memory-manager/index.ts +0 -115
  115. package/llm/orchestrator/context.ts +0 -19
  116. package/llm/orchestrator/index.ts +0 -192
  117. package/llm/orchestrator/types.ts +0 -14
  118. package/memory/cache.ts +0 -221
  119. package/memory/persistent.ts +0 -265
  120. package/script.js +0 -167
  121. package/services/cache.ts +0 -298
  122. package/services/telegram-monitor.ts +0 -138
  123. package/services/workflow.ts +0 -491
  124. package/t.py +0 -79
  125. package/t.ts +0 -25
  126. package/test/llm/orchestrator.test.ts +0 -47
  127. package/test/llm/synthesizer.test.ts +0 -31
  128. package/types.ts +0 -367
  129. package/utils/schema-generator.ts +0 -73
  130. package/utils/state-manager.ts +0 -25
  131. /package/dist/{llm/orchestrator/types.js → interfaces/index.js} +0 -0
package/services/cache.ts DELETED
@@ -1,298 +0,0 @@
1
- import { type CoreMessage } from "ai";
2
- import Redis from "ioredis";
3
- import cron from "node-cron";
4
-
5
- export interface CacheConfig {
6
- host: string;
7
- port: number;
8
- password?: string;
9
- ttl?: number; // Time to live in seconds (default 30 minutes)
10
- cleanupInterval?: string; // Cron expression (default every 30 minutes)
11
- }
12
-
13
- export class RedisCache {
14
- private redis: Redis;
15
- private readonly defaultTTL: number;
16
- private readonly cleanupJob: cron.ScheduledTask;
17
-
18
- constructor(config: CacheConfig) {
19
- this.redis = new Redis({
20
- host: config.host,
21
- port: config.port,
22
- password: config.password,
23
- });
24
-
25
- this.defaultTTL = config.ttl || 1800; // 30 minutes in seconds
26
- // Setup cleanup job (default: every 30 minutes)
27
-
28
- // this.cleanupEverything();
29
-
30
- this.cleanupJob = cron.schedule(
31
- config.cleanupInterval || "*/30 * * * *",
32
- () => this.cleanup()
33
- );
34
- }
35
-
36
- /**
37
- * Store previous actions for a specific request
38
- */
39
- async storePreviousActions(requestId: string, actions: any[]): Promise<void> {
40
- const key = `previous_actions:${requestId}`;
41
- await this.redis.setex(
42
- key,
43
- this.defaultTTL,
44
- JSON.stringify({
45
- timestamp: new Date().toISOString(),
46
- actions,
47
- })
48
- );
49
- }
50
-
51
- /**
52
- * Get previous actions for a specific request
53
- */
54
- async getPreviousActions(requestId: string): Promise<any[]> {
55
- const key = `previous_actions:${requestId}`;
56
- const data = await this.redis.get(key);
57
- if (!data) return [];
58
-
59
- const parsed = JSON.parse(data);
60
- return parsed.actions;
61
- }
62
-
63
- async storeMessage(
64
- role: "user" | "assistant" | "system",
65
- message: string
66
- ): Promise<void> {
67
- const id = crypto.randomUUID();
68
- const key = `recent_messages:${id}`;
69
- const coreMessage: CoreMessage = {
70
- role,
71
- content: message,
72
- };
73
- await this.redis.setex(
74
- key,
75
- this.defaultTTL,
76
- JSON.stringify({ ...coreMessage, timestamp: new Date().toISOString() })
77
- );
78
- console.log("🔍 Message stored successfully", { key, message });
79
- }
80
-
81
- /**
82
- * Store a recent message following CoreMessage structure
83
- */
84
- async storeRecentMessage(
85
- message: string,
86
- metadata?: {
87
- socialResponse?: string;
88
- agentName?: string;
89
- agentResponse?: string;
90
- actions?: any[];
91
- }
92
- ): Promise<void> {
93
- console.log("🔍 Storing recent message:", message);
94
- const id = crypto.randomUUID();
95
- const key = `recent_messages:${id}`;
96
-
97
- // Create CoreMessage structure
98
- const coreMessage: CoreMessage[] = [
99
- {
100
- role: "user",
101
- content: message,
102
- },
103
- ];
104
-
105
- // Add assistant response if available
106
- if (metadata?.socialResponse || metadata?.agentResponse) {
107
- coreMessage.push({
108
- role: "assistant",
109
- content:
110
- metadata.socialResponse || metadata.agentResponse
111
- ? `Agent ${metadata.agentName ? metadata.agentName : "Main"}: ${
112
- metadata.socialResponse || metadata.agentResponse
113
- }`
114
- : "",
115
- });
116
- }
117
-
118
- await this.redis.setex(
119
- key,
120
- this.defaultTTL,
121
- JSON.stringify({
122
- timestamp: new Date().toISOString(),
123
- messages: coreMessage,
124
- actions: metadata?.actions || [],
125
- })
126
- );
127
- console.log("🔍 Recent message stored successfully", {
128
- key,
129
- message,
130
- });
131
- }
132
-
133
- /**
134
- * Get previous actions
135
- */
136
- async getRecentPreviousActions(limit: number = 10): Promise<any[]> {
137
- const keys = await this.redis.keys("previous_actions:*");
138
- if (!keys.length) return [];
139
-
140
- const actions = await Promise.all(
141
- keys.map(async (key) => {
142
- const data = await this.redis.get(key);
143
- return data ? JSON.parse(data) : null;
144
- })
145
- );
146
- return actions.slice(0, limit);
147
- }
148
-
149
- /**
150
- * Get recent messages in CoreMessage format
151
- */
152
- async getRecentMessages(limit: number = 10): Promise<CoreMessage[]> {
153
- const keys = await this.redis.keys("recent_messages:*");
154
- if (!keys.length) return [];
155
-
156
- const messages = await Promise.all(
157
- keys.map(async (key) => {
158
- const data = await this.redis.get(key);
159
- return data ? JSON.parse(data) : null;
160
- })
161
- );
162
-
163
- const formattedMessages = messages
164
- .sort(
165
- (a, b) =>
166
- new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime()
167
- ) // Tri par timestamp
168
- .map((message) => {
169
- return {
170
- role: message.role,
171
- content: message.content,
172
- };
173
- }) // Extraire les messages de chaque entrée
174
- .slice(0, limit); // Limiter le nombre de messages
175
- return formattedMessages;
176
- }
177
- /**
178
- * Cleanup expired keys
179
- */
180
- private async cleanup(): Promise<void> {
181
- console.log("🧹 Starting cache cleanup...");
182
- try {
183
- // Redis automatically removes expired keys
184
- // This is just for logging purposes
185
- const actionKeys = await this.redis.keys("previous_actions:*");
186
- const messageKeys = await this.redis.keys("recent_messages:*");
187
- console.log(
188
- `Cache status: ${actionKeys.length} actions, ${messageKeys.length} messages`
189
- );
190
- } catch (error) {
191
- console.error("❌ Cache cleanup error:", error);
192
- }
193
- }
194
- async cleanupEverything(): Promise<void> {
195
- const keys = await this.redis.keys("*");
196
- console.log("🔍 Cleaning up messages with TTL:", keys);
197
-
198
- for (const key of keys) {
199
- console.log(`🧹 Suppression de la clé expirée ou invalide: ${key}`);
200
- await this.redis.del(key);
201
- }
202
- }
203
-
204
- /**
205
- * Stop the cleanup job and close Redis connection
206
- */
207
- async close(): Promise<void> {
208
- this.cleanupJob.stop();
209
- await this.redis.quit();
210
- }
211
-
212
- /**
213
- * Store a memory with tags and categories
214
- */
215
- async storeMemory(
216
- data: string,
217
- category: string,
218
- tags: string[],
219
- ttl?: number
220
- ): Promise<void> {
221
- const id = crypto.randomUUID();
222
- const key = `memory:${id}`;
223
- const memoryData = {
224
- data,
225
- category,
226
- tags,
227
- timestamp: new Date().toISOString(),
228
- };
229
-
230
- // Enregistrer la mémoire avec TTL
231
- await this.redis.setex(
232
- key,
233
- ttl || this.defaultTTL,
234
- JSON.stringify(memoryData)
235
- );
236
-
237
- // Indexer les tags
238
- for (const tag of tags) {
239
- const tagKey = `tag:${tag}`;
240
- await this.redis.sadd(tagKey, key);
241
- }
242
-
243
- // Indexer les catégories
244
- const categoryKey = `category:${category}`;
245
- await this.redis.sadd(categoryKey, key);
246
- console.log("🔍 Memory stored successfully", { key, memoryData });
247
- }
248
-
249
- /**
250
- * Get memories by a specific tag
251
- */
252
- async getMemoriesByTag(tag: string): Promise<any[]> {
253
- const tagKey = `tag:${tag}`;
254
- const keys = await this.redis.smembers(tagKey);
255
-
256
- const memories = await Promise.all(
257
- keys.map(async (key) => {
258
- const data = await this.redis.get(key);
259
- return data ? JSON.parse(data) : null;
260
- })
261
- );
262
-
263
- return memories.filter(Boolean); // Filtrer les valeurs nulles
264
- }
265
-
266
- /**
267
- * Get memories by a specific category
268
- */
269
- async getMemoriesByCategory(category: string): Promise<any[]> {
270
- const categoryKey = `category:${category}`;
271
- const keys = await this.redis.smembers(categoryKey);
272
-
273
- const memories = await Promise.all(
274
- keys.map(async (key) => {
275
- const data = await this.redis.get(key);
276
- return data ? JSON.parse(data) : null;
277
- })
278
- );
279
-
280
- return memories.filter(Boolean); // Filtrer les valeurs nulles
281
- }
282
-
283
- /**
284
- * Get all available tags
285
- */
286
- async getAllTags(): Promise<string[]> {
287
- const keys = await this.redis.keys("tag:*");
288
- return keys.map((key) => key.replace("tag:", ""));
289
- }
290
-
291
- /**
292
- * Get all available categories
293
- */
294
- async getAllCategories(): Promise<string[]> {
295
- const keys = await this.redis.keys("category:*");
296
- return keys.map((key) => key.replace("category:", ""));
297
- }
298
- }
@@ -1,138 +0,0 @@
1
- // import dotenv from "dotenv";
2
- // import promptSync from "prompt-sync";
3
- // import { TelegramClient } from "telegram";
4
- // import { NewMessage } from "telegram/events";
5
- // import { StringSession } from "telegram/sessions";
6
-
7
- // dotenv.config();
8
-
9
- // const prompt = promptSync({ sigint: true });
10
-
11
- // export interface TokenLaunch {
12
- // tokenAddress: string;
13
- // messageUrl: string;
14
- // timestamp: string;
15
- // }
16
-
17
- // export class TelegramMonitor {
18
- // private client: TelegramClient;
19
- // private botStartTime: Date;
20
-
21
- // constructor() {
22
- // if (!process.env.TELEGRAM_API_ID || !process.env.TELEGRAM_API_HASH) {
23
- // throw new Error("TELEGRAM_API_ID and TELEGRAM_API_HASH must be set");
24
- // }
25
- // this.botStartTime = new Date();
26
-
27
- // const apiId = parseInt(process.env.TELEGRAM_API_ID);
28
- // const apiHash = process.env.TELEGRAM_API_HASH;
29
-
30
- // // Utiliser une session stockée si disponible
31
- // const sessionString = process.env.TELEGRAM_SESSION;
32
- // this.client = new TelegramClient(
33
- // new StringSession(sessionString),
34
- // apiId,
35
- // apiHash,
36
- // {
37
- // connectionRetries: 5,
38
- // }
39
- // );
40
- // }
41
-
42
- // async connect() {
43
- // // Se connecter en tant qu'utilisateur
44
- // await this.client.start({
45
- // phoneNumber: async () => prompt("Numéro de téléphone ? "),
46
- // password: async () => prompt("Mot de passe ? "),
47
- // phoneCode: async () => prompt("Code reçu ? "),
48
- // onError: (err) => console.log(err),
49
- // });
50
-
51
- // // Sauvegarder la session pour une utilisation ultérieure
52
- // console.log("Session string à sauvegarder:", this.client.session.save());
53
- // }
54
-
55
- // async startMonitoring(
56
- // channelUsername: string,
57
- // callback: {
58
- // onNewLaunch: (message: string) => void;
59
- // }
60
- // ) {
61
- // console.log(`Démarrage du monitoring pour ${channelUsername}`);
62
-
63
- // try {
64
- // // S'assurer que le client est connecté
65
- // if (!this.client.connected) {
66
- // console.log("Client non connecté, tentative de connexion...");
67
- // await this.client.connect();
68
- // console.log("Client connecté avec succès");
69
- // }
70
-
71
- // console.log("État de la connexion:", this.client.connected);
72
-
73
- // // Vérifier si le canal existe et est accessible
74
- // try {
75
- // const channel = await this.client.getEntity(channelUsername);
76
- // console.log("Canal trouvé:", channel.id);
77
- // } catch (e) {
78
- // console.error("Erreur lors de l'accès au canal:", e);
79
- // }
80
-
81
- // this.client.addEventHandler(async (event: any) => {
82
- // const message = event.message;
83
- // if (!message) {
84
- // console.log("Pas de message dans l'événement");
85
- // return;
86
- // }
87
-
88
- // if (!message.text) {
89
- // console.log("Message sans texte:", message);
90
- // return;
91
- // }
92
-
93
- // try {
94
- // callback.onNewLaunch(message.text);
95
- // } catch (error) {
96
- // console.error("Erreur lors du traitement du message:", error);
97
- // }
98
- // }, new NewMessage({ chats: [channelUsername] }));
99
-
100
- // console.log("Handler d'événements ajouté avec succès");
101
- // } catch (error) {
102
- // console.error("Erreur lors du démarrage du monitoring:", error);
103
- // }
104
- // }
105
-
106
- // static async generateNewSession() {
107
- // // Supprimer la session existante
108
- // const client = new TelegramClient(
109
- // new StringSession(""),
110
- // parseInt(process.env.TELEGRAM_API_ID || ""),
111
- // process.env.TELEGRAM_API_HASH || "",
112
- // {
113
- // connectionRetries: 5,
114
- // }
115
- // );
116
-
117
- // // Se connecter en tant qu'utilisateur
118
- // await client.start({
119
- // phoneNumber: async () => prompt("Numéro de téléphone ? "),
120
- // password: async () => prompt("Mot de passe ? "),
121
- // phoneCode: async () => prompt("Code reçu ? "),
122
- // onError: (err) => console.log(err),
123
- // });
124
-
125
- // // Sauvegarder la nouvelle session pour une utilisation ultérieure
126
- // console.log(
127
- // "Nouvelle session string à sauvegarder:",
128
- // client.session.save()
129
- // );
130
- // }
131
- // }
132
-
133
- // const telegramMonitor = new TelegramMonitor();
134
- // telegramMonitor.startMonitoring("testcalldegen", {
135
- // onNewLaunch: (message: string) => {
136
- // console.log("Nouveau message:", message);
137
- // },
138
- // });