@ai.ntellect/core 0.6.16 → 0.6.19

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 (83) hide show
  1. package/.mocharc.json +1 -2
  2. package/README.md +123 -178
  3. package/dist/graph/controller.js +29 -6
  4. package/dist/graph/index.js +402 -0
  5. package/dist/index.js +22 -7
  6. package/dist/interfaces/index.js +15 -0
  7. package/dist/modules/agenda/adapters/node-cron/index.js +29 -0
  8. package/dist/modules/agenda/index.js +140 -0
  9. package/dist/{services/embedding.js → modules/embedding/adapters/ai/index.js} +24 -7
  10. package/dist/modules/embedding/index.js +59 -0
  11. package/dist/modules/memory/adapters/in-memory/index.js +210 -0
  12. package/dist/{memory → modules/memory}/adapters/meilisearch/index.js +97 -2
  13. package/dist/{memory → modules/memory}/adapters/redis/index.js +77 -15
  14. package/dist/modules/memory/index.js +103 -0
  15. package/dist/utils/{stringifiy-zod-schema.js → generate-action-schema.js} +5 -5
  16. package/graph/controller.ts +38 -14
  17. package/graph/index.ts +468 -0
  18. package/index.ts +25 -7
  19. package/interfaces/index.ts +346 -28
  20. package/modules/agenda/adapters/node-cron/index.ts +25 -0
  21. package/modules/agenda/index.ts +159 -0
  22. package/modules/embedding/adapters/ai/index.ts +42 -0
  23. package/modules/embedding/index.ts +45 -0
  24. package/modules/memory/adapters/in-memory/index.ts +203 -0
  25. package/{memory → modules/memory}/adapters/meilisearch/index.ts +114 -8
  26. package/modules/memory/adapters/redis/index.ts +164 -0
  27. package/modules/memory/index.ts +93 -0
  28. package/package.json +4 -4
  29. package/test/graph/index.test.ts +646 -0
  30. package/test/modules/agenda/node-cron.test.ts +286 -0
  31. package/test/modules/embedding/ai.test.ts +78 -0
  32. package/test/modules/memory/adapters/in-memory.test.ts +153 -0
  33. package/test/{memory → modules/memory}/adapters/meilisearch.test.ts +80 -94
  34. package/test/modules/memory/adapters/redis.test.ts +169 -0
  35. package/test/modules/memory/base.test.ts +230 -0
  36. package/test/services/agenda.test.ts +279 -280
  37. package/tsconfig.json +0 -3
  38. package/types/index.ts +82 -203
  39. package/utils/{stringifiy-zod-schema.ts → generate-action-schema.ts} +3 -3
  40. package/app/README.md +0 -36
  41. package/app/app/favicon.ico +0 -0
  42. package/app/app/globals.css +0 -21
  43. package/app/app/gun.ts +0 -0
  44. package/app/app/layout.tsx +0 -18
  45. package/app/app/page.tsx +0 -321
  46. package/app/eslint.config.mjs +0 -16
  47. package/app/next.config.ts +0 -7
  48. package/app/package-lock.json +0 -5912
  49. package/app/package.json +0 -31
  50. package/app/pnpm-lock.yaml +0 -4031
  51. package/app/postcss.config.mjs +0 -8
  52. package/app/public/file.svg +0 -1
  53. package/app/public/globe.svg +0 -1
  54. package/app/public/next.svg +0 -1
  55. package/app/public/vercel.svg +0 -1
  56. package/app/public/window.svg +0 -1
  57. package/app/tailwind.config.ts +0 -18
  58. package/app/tsconfig.json +0 -27
  59. package/dist/graph/graph.js +0 -162
  60. package/dist/memory/index.js +0 -9
  61. package/dist/services/agenda.js +0 -115
  62. package/dist/services/queue.js +0 -142
  63. package/dist/utils/experimental-graph-rag.js +0 -152
  64. package/dist/utils/generate-object.js +0 -111
  65. package/dist/utils/inject-actions.js +0 -16
  66. package/dist/utils/queue-item-transformer.js +0 -24
  67. package/dist/utils/sanitize-results.js +0 -60
  68. package/graph/graph.ts +0 -193
  69. package/memory/adapters/redis/index.ts +0 -103
  70. package/memory/index.ts +0 -22
  71. package/services/agenda.ts +0 -118
  72. package/services/embedding.ts +0 -26
  73. package/services/queue.ts +0 -145
  74. package/test/.env.test +0 -4
  75. package/test/graph/engine.test.ts +0 -533
  76. package/test/memory/adapters/redis.test.ts +0 -160
  77. package/test/memory/base.test.ts +0 -229
  78. package/test/services/queue.test.ts +0 -286
  79. package/utils/experimental-graph-rag.ts +0 -170
  80. package/utils/generate-object.ts +0 -117
  81. package/utils/inject-actions.ts +0 -19
  82. package/utils/queue-item-transformer.ts +0 -38
  83. package/utils/sanitize-results.ts +0 -66
package/index.ts CHANGED
@@ -1,11 +1,29 @@
1
+ /**
2
+ * @module @ai.ntellect/core
3
+ * @description Core module with workflow functionality, providing graph management,
4
+ * memory storage, agenda scheduling, and embedding capabilities.
5
+ *
6
+ * This module exports various components:
7
+ * - Graph management and controller
8
+ * - Memory storage adapters (Meilisearch, Redis)
9
+ * - Agenda scheduling with node-cron adapter
10
+ * - Embedding functionality with AI adapter
11
+ * - Utility functions for action schema generation and header building
12
+ */
13
+
14
+ export * from "./graph";
1
15
  export * from "./graph/controller";
2
- export * from "./graph/graph";
3
- export * from "./memory";
4
- export * from "./memory/adapters/meilisearch";
5
- export * from "./memory/adapters/redis";
16
+ export * from "./modules/memory";
17
+ export * from "./modules/memory/adapters/meilisearch";
18
+ export * from "./modules/memory/adapters/redis";
6
19
 
7
20
  export * from "./interfaces";
8
- export * from "./services/agenda";
9
- export * from "./services/embedding";
21
+ export * from "./modules/agenda";
22
+ export * from "./modules/agenda/adapters/node-cron";
23
+ export * from "./modules/embedding";
24
+ export * from "./modules/embedding/adapters/ai";
25
+
10
26
  export * from "./types";
11
- export * from "./utils/stringifiy-zod-schema";
27
+
28
+ export * from "./utils/generate-action-schema";
29
+ export * from "./utils/header-builder";
@@ -1,37 +1,11 @@
1
- import { BaseMemoryType } from "@/types";
2
- import { SharedState } from "@/types";
3
-
4
- /* ======================== PERSISTENCE ======================== */
5
-
6
- /**
7
- * Interface for persisting graph execution state.
8
- */
9
- export interface Persistence<T> {
10
- saveState(
11
- graphName: string,
12
- state: SharedState<T>,
13
- currentNode: string
14
- ): Promise<void>;
15
- loadState(
16
- graphName: string
17
- ): Promise<{ state: SharedState<T>; currentNode: string } | null>;
18
- }
19
-
20
- /* ======================== REAL-TIME NOTIFICATIONS ======================== */
21
-
22
- /**
23
- * Interface for real-time notifications.
24
- */
25
- export interface RealTimeNotifier {
26
- notify(event: string, data: any): void;
27
- }
1
+ import { BaseMemoryType, CreateMemoryInput, ScheduledRequest } from "../types";
28
2
 
29
3
  /* ======================== EMBEDDING SERVICE ======================== */
30
4
 
31
5
  /**
32
6
  * Interface for an embedding service that processes text into vector representations.
33
7
  */
34
- export interface EmbeddingService {
8
+ export interface EmbeddingModule {
35
9
  /**
36
10
  * Generates an embedding for a single text.
37
11
  * @param {string} text - The input text to embed.
@@ -117,3 +91,347 @@ export interface BaseMemoryService {
117
91
  */
118
92
  clearAllMemories(): Promise<void>;
119
93
  }
94
+
95
+ /**
96
+ * Extended interface for memory service operations
97
+ * @interface
98
+ */
99
+ export interface IMemoryService {
100
+ /**
101
+ * Initializes the memory service
102
+ * @returns {Promise<void>}
103
+ */
104
+ init(): Promise<void>;
105
+
106
+ /**
107
+ * Creates a new memory entry with optional embedding
108
+ * @param {CreateMemoryInput & { embedding?: number[] }} input - Memory data with optional embedding
109
+ * @returns {Promise<BaseMemoryType | undefined>} Created memory or undefined
110
+ */
111
+ createMemory(
112
+ input: CreateMemoryInput & { embedding?: number[] }
113
+ ): Promise<BaseMemoryType | undefined>;
114
+
115
+ /**
116
+ * Retrieves a memory by ID and room ID
117
+ * @param {string} id - Memory identifier
118
+ * @param {string} roomId - Room identifier
119
+ * @returns {Promise<BaseMemoryType | null>} Memory entry or null if not found
120
+ */
121
+ getMemoryById(id: string, roomId: string): Promise<BaseMemoryType | null>;
122
+
123
+ /**
124
+ * Searches for memories based on query and options
125
+ * @param {string} query - Search query
126
+ * @param {Object} options - Search options
127
+ * @returns {Promise<BaseMemoryType[]>} Array of matching memories
128
+ */
129
+ getMemoryByIndex(
130
+ query: string,
131
+ options: { roomId: string; limit?: number }
132
+ ): Promise<BaseMemoryType[]>;
133
+
134
+ /**
135
+ * Retrieves all memories for a specific room
136
+ * @param {string} roomId - Room identifier
137
+ * @returns {Promise<BaseMemoryType[]>} Array of all memories
138
+ */
139
+ getAllMemories(roomId: string): Promise<BaseMemoryType[]>;
140
+
141
+ /**
142
+ * Deletes a specific memory
143
+ * @param {string} id - Memory identifier
144
+ * @param {string} roomId - Room identifier
145
+ * @returns {Promise<void>}
146
+ */
147
+ clearMemoryById(id: string, roomId: string): Promise<void>;
148
+
149
+ /**
150
+ * Clears all memories
151
+ * @returns {Promise<void>}
152
+ */
153
+ clearAllMemories(): Promise<void>;
154
+ }
155
+
156
+ /**
157
+ * Interface for memory adapter implementations
158
+ * @interface
159
+ */
160
+ export interface IMemoryAdapter {
161
+ /**
162
+ * Initializes the memory adapter for a specific room
163
+ * @param {string} roomId - Room identifier
164
+ * @returns {Promise<void>}
165
+ */
166
+ init(roomId?: string): Promise<void>;
167
+
168
+ /**
169
+ * Creates a new memory entry in the adapter
170
+ * @param {CreateMemoryInput & { embedding?: number[] }} input - Memory data with optional embedding
171
+ * @returns {Promise<BaseMemoryType | undefined>} Created memory or undefined
172
+ */
173
+ createMemory(
174
+ input: CreateMemoryInput & { embedding?: number[] }
175
+ ): Promise<BaseMemoryType | undefined>;
176
+
177
+ /**
178
+ * Stores a job in the adapter
179
+ * @param {string} id - Job identifier
180
+ * @param {ICronJob} job - Cron job instance
181
+ * @returns {Promise<void>}
182
+ */
183
+ saveJob?(id: string, job: ICronJob): Promise<void>;
184
+
185
+ /**
186
+ * Stores a scheduled request in the adapter
187
+ * @param {string} id - Request identifier
188
+ * @param {ScheduledRequest} request - Scheduled request data
189
+ * @returns {Promise<void>}
190
+ */
191
+ saveRequest?(id: string, request: ScheduledRequest): Promise<void>;
192
+
193
+ /**
194
+ * Retrieves a job by ID
195
+ * @param {string} id - Job identifier
196
+ * @returns {Promise<ICronJob | undefined>}
197
+ */
198
+ getJob?(id: string): Promise<ICronJob | undefined>;
199
+
200
+ /**
201
+ * Retrieves a scheduled request by ID
202
+ * @param {string} id - Request identifier
203
+ * @returns {Promise<ScheduledRequest | undefined>}
204
+ */
205
+ getRequest?(id: string): Promise<ScheduledRequest | undefined>;
206
+
207
+ /**
208
+ * Deletes a job by ID
209
+ * @param {string} id - Job identifier
210
+ * @returns {Promise<void>}
211
+ */
212
+ deleteJob?(id: string): Promise<void>;
213
+
214
+ /**
215
+ * Deletes a scheduled request by ID
216
+ * @param {string} id - Request identifier
217
+ * @returns {Promise<void>}
218
+ */
219
+ deleteRequest?(id: string): Promise<void>;
220
+
221
+ /**
222
+ * Retrieves all scheduled requests
223
+ * @returns {Promise<ScheduledRequest[]>}
224
+ */
225
+ getAllRequests?(): Promise<ScheduledRequest[]>;
226
+
227
+ /**
228
+ * Retrieves a memory by ID and room ID from the adapter
229
+ * @param {string} id - Memory identifier
230
+ * @param {string} roomId - Room identifier
231
+ * @returns {Promise<BaseMemoryType | null>} Memory entry or null if not found
232
+ */
233
+ getMemoryById(id: string, roomId: string): Promise<BaseMemoryType | null>;
234
+
235
+ /**
236
+ * Searches for memories in the adapter
237
+ * @param {string} query - Search query
238
+ * @param {Object} options - Search options
239
+ * @returns {Promise<BaseMemoryType[]>} Array of matching memories
240
+ */
241
+ getMemoryByIndex(
242
+ query: string,
243
+ options: { roomId: string; limit?: number }
244
+ ): Promise<BaseMemoryType[]>;
245
+
246
+ /**
247
+ * Retrieves all memories for a room from the adapter
248
+ * @param {string} roomId - Room identifier
249
+ * @returns {Promise<BaseMemoryType[]>} Array of all memories
250
+ */
251
+ getAllMemories(roomId: string): Promise<BaseMemoryType[]>;
252
+
253
+ /**
254
+ * Deletes a specific memory from the adapter
255
+ * @param {string} id - Memory identifier
256
+ * @param {string} roomId - Room identifier
257
+ * @returns {Promise<void>}
258
+ */
259
+ clearMemoryById(id: string, roomId: string): Promise<void>;
260
+
261
+ /**
262
+ * Clears all memories from the adapter
263
+ * @returns {Promise<void>}
264
+ */
265
+ clearAllMemories(): Promise<void>;
266
+
267
+ /**
268
+ * Clears all jobs and requests
269
+ * @returns {Promise<void>}
270
+ */
271
+ clear?(): Promise<void>;
272
+ }
273
+
274
+ /**
275
+ * Abstract base class for memory implementations
276
+ * @abstract
277
+ */
278
+ export abstract class BaseMemory implements IMemoryService {
279
+ /**
280
+ * Creates an instance of BaseMemory
281
+ * @param {IMemoryAdapter} adapter - Memory adapter implementation
282
+ */
283
+ constructor(protected readonly adapter: IMemoryAdapter) {}
284
+
285
+ abstract init(): Promise<void>;
286
+ abstract createMemory(
287
+ input: CreateMemoryInput & { embedding?: number[] }
288
+ ): Promise<BaseMemoryType | undefined>;
289
+ abstract getMemoryById(
290
+ id: string,
291
+ roomId: string
292
+ ): Promise<BaseMemoryType | null>;
293
+ abstract getMemoryByIndex(
294
+ query: string,
295
+ options: { roomId: string; limit?: number }
296
+ ): Promise<BaseMemoryType[]>;
297
+ abstract getAllMemories(roomId: string): Promise<BaseMemoryType[]>;
298
+ abstract clearMemoryById(id: string, roomId: string): Promise<void>;
299
+ abstract clearAllMemories(): Promise<void>;
300
+ }
301
+
302
+ /**
303
+ * Interface for event emitter functionality
304
+ * @interface
305
+ */
306
+ export interface IEventEmitter {
307
+ /**
308
+ * Emits an event with optional arguments
309
+ * @param {string} event - Event name
310
+ * @param {...any[]} args - Event arguments
311
+ * @returns {boolean} Whether the event had listeners
312
+ */
313
+ emit(event: string, ...args: any[]): boolean;
314
+
315
+ /**
316
+ * Registers an event listener
317
+ * @param {string} event - Event name
318
+ * @param {Function} listener - Event handler
319
+ */
320
+ on(event: string, listener: (...args: any[]) => void): void;
321
+
322
+ /**
323
+ * Removes all listeners for an event
324
+ * @param {string} [event] - Optional event name
325
+ */
326
+ removeAllListeners(event?: string): void;
327
+
328
+ /**
329
+ * Returns raw listeners for an event
330
+ * @param {string} event - Event name
331
+ * @returns {Function[]} Array of listener functions
332
+ */
333
+ rawListeners(event: string): Function[];
334
+ }
335
+
336
+ /**
337
+ * Interface for cron service functionality
338
+ * @interface
339
+ */
340
+ export interface ICronService {
341
+ /**
342
+ * Schedules a job using cron expression
343
+ * @param {string} expression - Cron expression
344
+ * @param {Function} callback - Job callback
345
+ * @returns {ICronJob} Cron job instance
346
+ */
347
+ schedule(expression: string, callback: () => void): ICronJob;
348
+ }
349
+
350
+ /**
351
+ * Interface for cron job control
352
+ * @interface
353
+ */
354
+ export interface ICronJob {
355
+ /**
356
+ * Starts the cron job
357
+ */
358
+ start(): void;
359
+
360
+ /**
361
+ * Stops the cron job
362
+ */
363
+ stop(): void;
364
+ }
365
+
366
+ /**
367
+ * Interface for embedding model operations
368
+ * @interface
369
+ */
370
+ export interface IEmbeddingModel {
371
+ /**
372
+ * Embeds a single text
373
+ * @param {string} text - Text to embed
374
+ * @returns {Promise<number[]>} Vector embedding
375
+ */
376
+ embed(text: string): Promise<number[]>;
377
+
378
+ /**
379
+ * Embeds multiple texts
380
+ * @param {string[]} texts - Array of texts to embed
381
+ * @returns {Promise<number[][]>} Array of vector embeddings
382
+ */
383
+ embedMany(texts: string[]): Promise<number[][]>;
384
+ }
385
+
386
+ /**
387
+ * Interface for similarity calculations
388
+ * @interface
389
+ */
390
+ export interface ISimilarityCalculator {
391
+ /**
392
+ * Calculates similarity between two embeddings
393
+ * @param {number[]} embedding1 - First embedding
394
+ * @param {number[]} embedding2 - Second embedding
395
+ * @returns {number} Similarity score
396
+ */
397
+ calculate(embedding1: number[], embedding2: number[]): number;
398
+ }
399
+
400
+ /**
401
+ * Interface for embedding module operations
402
+ * @interface
403
+ */
404
+ export interface IEmbeddingModule {
405
+ /**
406
+ * Embeds a single text
407
+ * @param {string} text - Text to embed
408
+ * @returns {Promise<number[]>} Vector embedding
409
+ */
410
+ embedText(text: string): Promise<number[]>;
411
+
412
+ /**
413
+ * Embeds multiple texts
414
+ * @param {string[]} texts - Array of texts to embed
415
+ * @returns {Promise<number[][]>} Array of vector embeddings
416
+ */
417
+ embedMany(texts: string[]): Promise<number[][]>;
418
+
419
+ /**
420
+ * Calculates similarity between two embeddings
421
+ * @param {number[]} embedding1 - First embedding
422
+ * @param {number[]} embedding2 - Second embedding
423
+ * @returns {number} Similarity score
424
+ */
425
+ calculateSimilarity(embedding1: number[], embedding2: number[]): number;
426
+ }
427
+
428
+ export interface IJobStorage {
429
+ saveJob(id: string, job: ICronJob): Promise<void>;
430
+ saveRequest(id: string, request: ScheduledRequest): Promise<void>;
431
+ getJob(id: string): Promise<ICronJob | undefined>;
432
+ getRequest(id: string): Promise<ScheduledRequest | undefined>;
433
+ deleteJob(id: string): Promise<void>;
434
+ deleteRequest(id: string): Promise<void>;
435
+ getAllRequests(): Promise<ScheduledRequest[]>;
436
+ clear(): Promise<void>;
437
+ }
@@ -0,0 +1,25 @@
1
+ import cron from "node-cron";
2
+ import { ICronJob, ICronService } from "../../../../interfaces";
3
+
4
+ /**
5
+ * @module NodeCronAdapter
6
+ * @description Adapter implementation for node-cron service.
7
+ * Provides a bridge between the application's scheduling interface and the node-cron library.
8
+ * @implements {ICronService}
9
+ */
10
+ export class NodeCronAdapter implements ICronService {
11
+ /**
12
+ * Schedules a new cron job
13
+ * @param {string} expression - Cron expression defining the schedule
14
+ * @param {Function} callback - Function to be executed when the schedule triggers
15
+ * @returns {ICronJob} Interface for controlling the scheduled job
16
+ */
17
+ schedule(expression: string, callback: () => void): ICronJob {
18
+ const job = cron.schedule(expression, callback);
19
+
20
+ return {
21
+ start: () => job.start(),
22
+ stop: () => job.stop(),
23
+ };
24
+ }
25
+ }
@@ -0,0 +1,159 @@
1
+ import { ICronService, IMemoryAdapter } from "../../interfaces";
2
+ import { ScheduledRequest } from "../../types";
3
+
4
+ /**
5
+ * @module Agenda
6
+ * @description A module for scheduling and managing cron-based tasks.
7
+ * Provides functionality for scheduling requests, managing their lifecycle,
8
+ * and handling recurring and one-time tasks.
9
+ */
10
+ export class Agenda {
11
+ /**
12
+ * Creates an instance of Agenda
13
+ * @param {ICronService} cronService - The cron service implementation
14
+ * @param {IMemoryAdapter} storage - The storage service for jobs and requests
15
+ */
16
+ constructor(
17
+ private readonly cronService: ICronService,
18
+ private readonly storage: IMemoryAdapter &
19
+ Required<
20
+ Pick<
21
+ IMemoryAdapter,
22
+ | "saveJob"
23
+ | "saveRequest"
24
+ | "getJob"
25
+ | "getRequest"
26
+ | "deleteJob"
27
+ | "deleteRequest"
28
+ | "getAllRequests"
29
+ | "clear"
30
+ >
31
+ >
32
+ ) {}
33
+
34
+ /**
35
+ * Schedule a new request to be processed later
36
+ * @param {Object} request - The request configuration
37
+ * @param {string} request.originalRequest - The original request to be executed
38
+ * @param {string} request.cronExpression - The cron expression for scheduling
39
+ * @param {Object} [callbacks] - Optional callback functions
40
+ * @param {Function} [callbacks.onScheduled] - Called when request is scheduled
41
+ * @param {Function} [callbacks.onExecuted] - Called when request is executed
42
+ * @returns {Promise<string>} The ID of the scheduled request
43
+ */
44
+ async scheduleRequest(
45
+ request: {
46
+ originalRequest: string;
47
+ cronExpression: string;
48
+ },
49
+ callbacks?: {
50
+ onScheduled?: (id: string) => void;
51
+ onExecuted?: (id: string, originalRequest: string) => void;
52
+ }
53
+ ): Promise<string> {
54
+ const id = crypto.randomUUID();
55
+
56
+ const scheduledRequest: ScheduledRequest = {
57
+ id,
58
+ originalRequest: request.originalRequest,
59
+ cronExpression: request.cronExpression,
60
+ isRecurring: false,
61
+ createdAt: new Date(),
62
+ };
63
+
64
+ // Create cron job using the injected service
65
+ const cronJob = this.cronService.schedule(
66
+ request.cronExpression,
67
+ async () => {
68
+ console.log(`🔄 Executing scheduled request: ${id}`);
69
+
70
+ if (callbacks?.onExecuted) {
71
+ callbacks.onExecuted(id, scheduledRequest.originalRequest);
72
+ }
73
+
74
+ console.log(`✅ Scheduled request executed successfully: ${id}`);
75
+
76
+ // Auto-stop for non-recurring tasks
77
+ if (!scheduledRequest.isRecurring) {
78
+ await this.cancelScheduledRequest(id);
79
+ }
80
+ }
81
+ );
82
+
83
+ // Start job in non-running mode
84
+ cronJob.stop();
85
+
86
+ // Store request and job using storage service
87
+ await this.storage.saveRequest(id, scheduledRequest);
88
+ await this.storage.saveJob(id, cronJob);
89
+
90
+ if (callbacks?.onScheduled) callbacks.onScheduled(id);
91
+
92
+ // Start the job after storing
93
+ cronJob.start();
94
+
95
+ return id;
96
+ }
97
+
98
+ /**
99
+ * Cancels a scheduled request by its ID
100
+ * @param {string} requestId - The ID of the request to cancel
101
+ * @returns {Promise<boolean>} True if the request was found and cancelled, false otherwise
102
+ */
103
+ async cancelScheduledRequest(requestId: string): Promise<boolean> {
104
+ const cronJob = await this.storage.getJob(requestId);
105
+ if (cronJob) {
106
+ try {
107
+ cronJob.stop();
108
+ await this.storage.deleteJob(requestId);
109
+ await this.storage.deleteRequest(requestId);
110
+ return true;
111
+ } catch (error) {
112
+ console.error(`Failed to stop cron job ${requestId}:`, error);
113
+ return false;
114
+ }
115
+ }
116
+ return false;
117
+ }
118
+
119
+ /**
120
+ * Retrieves all scheduled requests
121
+ * @returns {Promise<ScheduledRequest[]>} Array of all scheduled requests
122
+ */
123
+ async getScheduledRequests(): Promise<ScheduledRequest[]> {
124
+ return this.storage.getAllRequests();
125
+ }
126
+
127
+ /**
128
+ * Stops all scheduled jobs
129
+ * @returns {Promise<void>}
130
+ */
131
+ async stopAll(): Promise<void> {
132
+ const requests = await this.getScheduledRequests();
133
+
134
+ for (const request of requests) {
135
+ await this.cancelScheduledRequest(request.id);
136
+ }
137
+
138
+ await this.storage.clear();
139
+ }
140
+
141
+ /**
142
+ * Stops the agenda service
143
+ * @returns {Promise<void>}
144
+ */
145
+ public async stop(): Promise<void> {
146
+ await this.stopAll();
147
+ await new Promise((resolve) => setTimeout(resolve, 100));
148
+ }
149
+
150
+ /**
151
+ * Cancels requests matching the query
152
+ * @param {Object} query - Query to match requests against
153
+ * @returns {Promise<void>}
154
+ */
155
+ public async cancel(query: {}): Promise<void> {
156
+ await this.stopAll();
157
+ await new Promise((resolve) => setTimeout(resolve, 100));
158
+ }
159
+ }
@@ -0,0 +1,42 @@
1
+ import { embed, EmbeddingModel, embedMany } from "ai";
2
+ import { IEmbeddingModel } from "../../../../interfaces";
3
+
4
+ /**
5
+ * @module AIEmbeddingAdapter
6
+ * @description Adapter implementation for AI-based embedding service.
7
+ * Provides integration with AI models for text embedding generation.
8
+ * @implements {IEmbeddingModel}
9
+ */
10
+ export class AIEmbeddingAdapter implements IEmbeddingModel {
11
+ /**
12
+ * Creates an instance of AIEmbeddingAdapter
13
+ * @param {EmbeddingModel<string>} model - The AI embedding model to use
14
+ */
15
+ constructor(private readonly model: EmbeddingModel<string>) {}
16
+
17
+ /**
18
+ * Generates an embedding vector for a single text using the AI model
19
+ * @param {string} text - The text to embed
20
+ * @returns {Promise<number[]>} The generated embedding vector
21
+ */
22
+ async embed(text: string): Promise<number[]> {
23
+ const { embedding } = await embed({
24
+ model: this.model,
25
+ value: text,
26
+ });
27
+ return embedding;
28
+ }
29
+
30
+ /**
31
+ * Generates embedding vectors for multiple texts using the AI model
32
+ * @param {string[]} texts - Array of texts to embed
33
+ * @returns {Promise<number[][]>} Array of generated embedding vectors
34
+ */
35
+ async embedMany(texts: string[]): Promise<number[][]> {
36
+ const { embeddings } = await embedMany({
37
+ model: this.model,
38
+ values: texts,
39
+ });
40
+ return embeddings;
41
+ }
42
+ }
@@ -0,0 +1,45 @@
1
+ import { cosineSimilarity } from "ai";
2
+ import { IEmbeddingModel, IEmbeddingModule } from "../../interfaces";
3
+
4
+ /**
5
+ * @module Embedding
6
+ * @description A module for generating and managing text embeddings.
7
+ * Provides functionality for converting text into vector representations
8
+ * and calculating similarities between embeddings.
9
+ * @implements {IEmbeddingModule}
10
+ */
11
+ export class Embedding implements IEmbeddingModule {
12
+ /**
13
+ * Creates an instance of Embedding
14
+ * @param {IEmbeddingModel} embeddingModel - The embedding model implementation to use
15
+ */
16
+ constructor(private readonly embeddingModel: IEmbeddingModel) {}
17
+
18
+ /**
19
+ * Generates an embedding vector for a single text
20
+ * @param {string} text - The text to embed
21
+ * @returns {Promise<number[]>} The embedding vector
22
+ */
23
+ async embedText(text: string): Promise<number[]> {
24
+ return this.embeddingModel.embed(text);
25
+ }
26
+
27
+ /**
28
+ * Generates embedding vectors for multiple texts
29
+ * @param {string[]} texts - Array of texts to embed
30
+ * @returns {Promise<number[][]>} Array of embedding vectors
31
+ */
32
+ async embedMany(texts: string[]): Promise<number[][]> {
33
+ return this.embeddingModel.embedMany(texts);
34
+ }
35
+
36
+ /**
37
+ * Calculates the similarity score between two embeddings
38
+ * @param {number[]} embedding1 - First embedding vector
39
+ * @param {number[]} embedding2 - Second embedding vector
40
+ * @returns {number} Similarity score between 0 and 100
41
+ */
42
+ calculateSimilarity(embedding1: number[], embedding2: number[]): number {
43
+ return (cosineSimilarity(embedding1, embedding2) + 1) * 50;
44
+ }
45
+ }