@ai.ntellect/core 0.7.14 → 0.8.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 (98) hide show
  1. package/dist/graph/event-manager.d.ts +9 -1
  2. package/dist/graph/event-manager.d.ts.map +1 -1
  3. package/dist/graph/event-manager.js +115 -37
  4. package/dist/graph/event-manager.js.map +1 -1
  5. package/dist/graph/index.d.ts +20 -1
  6. package/dist/graph/index.d.ts.map +1 -1
  7. package/dist/graph/index.js +59 -10
  8. package/dist/graph/index.js.map +1 -1
  9. package/dist/graph/node.d.ts +0 -24
  10. package/dist/graph/node.d.ts.map +1 -1
  11. package/dist/graph/node.js +2 -71
  12. package/dist/graph/node.js.map +1 -1
  13. package/dist/graph/observer.d.ts +6 -87
  14. package/dist/graph/observer.d.ts.map +1 -1
  15. package/dist/graph/observer.js +3 -116
  16. package/dist/graph/observer.js.map +1 -1
  17. package/dist/index.d.ts +1 -6
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -6
  20. package/dist/index.js.map +1 -1
  21. package/dist/interfaces/index.d.ts +10 -1
  22. package/dist/interfaces/index.d.ts.map +1 -1
  23. package/dist/interfaces/index.js.map +1 -1
  24. package/dist/modules/agent/agent.d.ts +35 -0
  25. package/dist/modules/agent/agent.d.ts.map +1 -0
  26. package/dist/modules/agent/agent.js +106 -0
  27. package/dist/modules/agent/agent.js.map +1 -0
  28. package/dist/modules/agent/base/executor.d.ts +51 -0
  29. package/dist/modules/agent/base/executor.d.ts.map +1 -0
  30. package/dist/modules/agent/base/executor.js +66 -0
  31. package/dist/modules/agent/base/executor.js.map +1 -0
  32. package/dist/modules/agent/base/index.d.ts +30 -0
  33. package/dist/modules/agent/base/index.d.ts.map +1 -0
  34. package/dist/modules/agent/base/index.js +100 -0
  35. package/dist/modules/agent/base/index.js.map +1 -0
  36. package/dist/modules/agent/generic-assistant.d.ts +20 -0
  37. package/dist/modules/agent/generic-assistant.d.ts.map +1 -0
  38. package/dist/modules/agent/generic-assistant.js +89 -0
  39. package/dist/modules/agent/generic-assistant.js.map +1 -0
  40. package/dist/modules/agent/generic-executor.d.ts +57 -0
  41. package/dist/modules/agent/generic-executor.d.ts.map +1 -0
  42. package/dist/modules/agent/generic-executor.js +200 -0
  43. package/dist/modules/agent/generic-executor.js.map +1 -0
  44. package/dist/modules/agent/llm-factory.d.ts +19 -0
  45. package/dist/modules/agent/llm-factory.d.ts.map +1 -0
  46. package/dist/modules/agent/llm-factory.js +56 -0
  47. package/dist/modules/agent/llm-factory.js.map +1 -0
  48. package/dist/modules/agent/prompt-builder.d.ts +35 -0
  49. package/dist/modules/agent/prompt-builder.d.ts.map +1 -0
  50. package/dist/modules/agent/prompt-builder.js +76 -0
  51. package/dist/modules/agent/prompt-builder.js.map +1 -0
  52. package/dist/modules/memory/adapters/in-memory/index.d.ts.map +1 -1
  53. package/dist/modules/memory/adapters/in-memory/index.js +4 -3
  54. package/dist/modules/memory/adapters/in-memory/index.js.map +1 -1
  55. package/dist/modules/memory/adapters/meilisearch/index.d.ts.map +1 -1
  56. package/dist/modules/memory/adapters/meilisearch/index.js +7 -4
  57. package/dist/modules/memory/adapters/meilisearch/index.js.map +1 -1
  58. package/dist/modules/memory/adapters/redis/index.d.ts.map +1 -1
  59. package/dist/modules/memory/adapters/redis/index.js +2 -1
  60. package/dist/modules/memory/adapters/redis/index.js.map +1 -1
  61. package/dist/modules/nlp/engine.d.ts +126 -0
  62. package/dist/modules/nlp/engine.d.ts.map +1 -0
  63. package/dist/modules/nlp/engine.js +300 -0
  64. package/dist/modules/nlp/engine.js.map +1 -0
  65. package/dist/modules/nlp/index.d.ts +27 -0
  66. package/dist/modules/nlp/index.d.ts.map +1 -0
  67. package/dist/modules/nlp/index.js +56 -0
  68. package/dist/modules/nlp/index.js.map +1 -0
  69. package/dist/types/agent.d.ts +233 -0
  70. package/dist/types/agent.d.ts.map +1 -0
  71. package/dist/types/agent.js +29 -0
  72. package/dist/types/agent.js.map +1 -0
  73. package/dist/types/index.d.ts +72 -18
  74. package/dist/types/index.d.ts.map +1 -1
  75. package/dist/utils/generate-action-schema.d.ts.map +1 -1
  76. package/graph/event-manager.ts +135 -42
  77. package/graph/index.ts +57 -4
  78. package/graph/node.ts +2 -104
  79. package/graph/observer.ts +9 -215
  80. package/index.ts +2 -7
  81. package/interfaces/index.ts +12 -0
  82. package/modules/agent/agent.ts +108 -0
  83. package/modules/agent/base/executor.ts +100 -0
  84. package/modules/agent/base/index.ts +99 -0
  85. package/modules/agent/generic-assistant.ts +90 -0
  86. package/modules/agent/generic-executor.ts +259 -0
  87. package/modules/agent/llm-factory.ts +47 -0
  88. package/modules/agent/prompt-builder.ts +78 -0
  89. package/modules/memory/adapters/in-memory/index.ts +4 -3
  90. package/modules/memory/adapters/meilisearch/index.ts +7 -4
  91. package/modules/memory/adapters/redis/index.ts +2 -1
  92. package/modules/nlp/engine.ts +325 -0
  93. package/modules/nlp/index.ts +45 -0
  94. package/package.json +5 -2
  95. package/test/graph/index.test.ts +6 -4
  96. package/test/graph/node.test.ts +18 -14
  97. package/types/agent.ts +174 -0
  98. package/types/index.ts +74 -18
@@ -11,10 +11,12 @@ import { IEventEmitter } from "../interfaces";
11
11
  */
12
12
  export interface CreateMemoryInput {
13
13
  id?: string;
14
- data: string;
14
+ content: string;
15
+ metadata?: Record<string, any>;
15
16
  embedding?: number[];
16
17
  roomId: string;
17
18
  ttl?: number;
19
+ type?: string;
18
20
  }
19
21
  /**
20
22
  * Represents a stored memory entry.
@@ -28,7 +30,8 @@ export interface CreateMemoryInput {
28
30
  */
29
31
  export interface BaseMemoryType {
30
32
  id: string;
31
- data: string;
33
+ content: string;
34
+ metadata?: Record<string, any>;
32
35
  embedding?: number[];
33
36
  roomId: string;
34
37
  createdAt: Date;
@@ -61,6 +64,20 @@ export type SchemaType<T> = T extends ZodSchema<infer U> ? U : never;
61
64
  export type GraphContext<T extends ZodSchema> = {
62
65
  [key: string]: any;
63
66
  };
67
+ /**
68
+ * Configuration for event handling in a node
69
+ */
70
+ export type EventStrategy = {
71
+ type: "single" | "all" | "correlate";
72
+ correlation?: (events: any[]) => boolean;
73
+ };
74
+ export type EventConfig = {
75
+ events: string[];
76
+ timeout?: number;
77
+ strategy: EventStrategy;
78
+ onSuccess?: (events: any[]) => Promise<void>;
79
+ onTimeout?: () => Promise<void>;
80
+ };
64
81
  /**
65
82
  * Interface representing a node in the graph
66
83
  * @interface
@@ -68,7 +85,7 @@ export type GraphContext<T extends ZodSchema> = {
68
85
  * @template I - Input schema type
69
86
  * @template O - Output schema type
70
87
  */
71
- export type GraphNodeConfig<T extends ZodSchema, P = any> = {
88
+ export interface GraphNodeConfig<T extends ZodSchema, P = any> {
72
89
  /** Name of the node */
73
90
  name: string;
74
91
  /** Description of the node */
@@ -88,16 +105,8 @@ export type GraphNodeConfig<T extends ZodSchema, P = any> = {
88
105
  }> | string | ((context: GraphContext<T>) => string[]);
89
106
  /** Array of event names that trigger this node */
90
107
  events?: string[];
91
- /** Wait for a single event before continuing */
92
- waitForEvent?: boolean;
93
- /** Wait for multiple events configuration */
94
- waitForEvents?: WaitForEvents;
95
- /** Event correlation configuration */
96
- correlateEvents?: {
97
- events: string[];
98
- timeout: number;
99
- correlation: (events: any[]) => boolean;
100
- };
108
+ /** Event handling configuration */
109
+ when?: EventConfig;
101
110
  /** Retry configuration */
102
111
  retry?: {
103
112
  /** Maximum number of retry attempts */
@@ -111,7 +120,8 @@ export type GraphNodeConfig<T extends ZodSchema, P = any> = {
111
120
  };
112
121
  /** Error handler function */
113
122
  onError?: (error: Error) => void;
114
- };
123
+ agent?: string;
124
+ }
115
125
  /**
116
126
  * Interface for graph definition
117
127
  * @interface
@@ -168,15 +178,59 @@ export type MeilisearchSettings = {
168
178
  /** Array of sortable attributes */
169
179
  sortableAttributes?: string[];
170
180
  };
171
- export interface GraphEvent<T extends ZodSchema> {
181
+ export type GraphEvent<T extends ZodSchema> = {
172
182
  type: string;
173
183
  payload?: any;
174
184
  timestamp: number;
175
- }
176
- export interface WaitForEvents {
185
+ };
186
+ export type WaitForEvents<T extends ZodSchema> = {
177
187
  events: string[];
178
188
  timeout?: number;
179
189
  strategy: "all" | "any" | "race";
180
190
  onSuccess?: <T extends ZodSchema>(context: GraphContext<T>) => Promise<void>;
181
- }
191
+ };
192
+ /**
193
+ * Configuration interface for NLP Engine
194
+ * @interface NLPConfig
195
+ * @property {any} [corpus] - Training corpus data
196
+ * @property {Record<string, any>} [responses] - Response templates
197
+ * @property {Record<string, any>} [entities] - Entity definitions
198
+ * @property {string} [language] - Language code (default: 'en')
199
+ * @property {number} [threshold] - Entity recognition threshold (default: 0.5)
200
+ * @property {string} [path] - Path to save/load model
201
+ */
202
+ export type NLPConfig = {
203
+ corpus?: any;
204
+ responses?: Record<string, any>;
205
+ entities?: Record<string, any>;
206
+ language?: string;
207
+ threshold?: number;
208
+ path?: string;
209
+ };
210
+ /**
211
+ * Type definition for action handlers
212
+ * @callback ActionHandler
213
+ * @param {any} data - Input data for the action
214
+ * @returns {Promise<any>} Result of the action
215
+ */
216
+ export type ActionHandler = (data: any) => Promise<any>;
217
+ /**
218
+ * Options for the observer
219
+ * @typedef {Object} ObserverOptions
220
+ * @property {number} [debounce] - Debounce time in milliseconds
221
+ * @property {number} [delay] - Delay time in milliseconds
222
+ * @property {boolean} [stream] - Whether to stream the response
223
+ * @property {(string | number)[]} [properties] - Properties to observe
224
+ */
225
+ export type ObserverOptions = {
226
+ debounce?: number;
227
+ delay?: number;
228
+ stream?: boolean;
229
+ properties?: (string | number)[];
230
+ onStreamLetter?: (data: {
231
+ letter: string;
232
+ property: string;
233
+ }) => void;
234
+ onStreamComplete?: () => void;
235
+ };
182
236
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate-action-schema.d.ts","sourceRoot":"","sources":["../../utils/generate-action-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,eAAO,MAAM,oBAAoB,WAAY,SAAS,CAAC,GAAG,CAAC,EAAE,WAU5D,CAAC;AAEF,eAAO,MAAM,eAAe,WAAY,CAAC,CAAC,OAAO,KAAG,MA8BnD,CAAC"}
1
+ {"version":3,"file":"generate-action-schema.d.ts","sourceRoot":"","sources":["../../utils/generate-action-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,eAAO,MAAM,oBAAoB,GAAI,QAAQ,SAAS,CAAC,GAAG,CAAC,EAAE,WAU5D,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,MA8BnD,CAAC"}
@@ -1,7 +1,12 @@
1
1
  import { Observable, Subject, filter } from "rxjs";
2
2
  import { ZodSchema } from "zod";
3
3
  import { IEventEmitter } from "../interfaces";
4
- import { GraphContext, GraphEvent, GraphNodeConfig } from "../types";
4
+ import {
5
+ EventConfig,
6
+ GraphContext,
7
+ GraphEvent,
8
+ GraphNodeConfig,
9
+ } from "../types";
5
10
  import { GraphNode } from "./node";
6
11
 
7
12
  /**
@@ -17,6 +22,7 @@ export class GraphEventManager<T extends ZodSchema> {
17
22
  private graphEvents?: string[];
18
23
  private entryNode?: string;
19
24
  private globalErrorHandler?: (error: Error, context: GraphContext<T>) => void;
25
+ private lastEvents = new Map<string, any>();
20
26
 
21
27
  /**
22
28
  * Creates a new GraphEventManager instance
@@ -72,14 +78,12 @@ export class GraphEventManager<T extends ZodSchema> {
72
78
  payload?: P,
73
79
  context?: GraphContext<T>
74
80
  ): void {
75
- // Éviter la double imbrication des événements
76
81
  const event = {
77
82
  type,
78
83
  payload,
79
84
  timestamp: Date.now(),
80
85
  };
81
86
 
82
- // Émettre l'événement une seule fois
83
87
  this.eventSubject.next(event);
84
88
  this.eventEmitter.emit(type, payload);
85
89
  }
@@ -248,6 +252,7 @@ export class GraphEventManager<T extends ZodSchema> {
248
252
  * @param data - Optional data to include with the event
249
253
  */
250
254
  emit(eventName: string, data?: any): void {
255
+ this.lastEvents.set(eventName, data);
251
256
  this.eventEmitter.emit(eventName, data);
252
257
  }
253
258
 
@@ -285,20 +290,9 @@ export class GraphEventManager<T extends ZodSchema> {
285
290
  throw new Error(`Node "${nodeName}" not found`);
286
291
  }
287
292
 
288
- // Attendre les événements si waitForEvents est configuré
289
- if (node.waitForEvents) {
290
- try {
291
- await this.waitForEvents(
292
- node.waitForEvents.events,
293
- node.waitForEvents.timeout
294
- );
295
- } catch (error) {
296
- throw new Error(
297
- `Timeout waiting for events in node "${nodeName}": ${
298
- (error as Error).message
299
- }`
300
- );
301
- }
293
+ // Remplacer le code existant de gestion d'événements
294
+ if (node.when) {
295
+ await this.handleNodeEvents(nodeName, node.when);
302
296
  }
303
297
 
304
298
  return this.nodeExecutor.executeNode(
@@ -309,21 +303,54 @@ export class GraphEventManager<T extends ZodSchema> {
309
303
  );
310
304
  }
311
305
 
312
- async waitForCorrelatedEvents(
306
+ /**
307
+ * Waits for correlated events to occur and validates them using a correlation function
308
+ */
309
+ waitForCorrelatedEvents(
313
310
  eventTypes: string[],
314
311
  timeoutMs: number,
315
312
  correlationFn: (events: GraphEvent<T>[]) => boolean
316
313
  ): Promise<GraphEvent<T>[]> {
317
314
  return new Promise((resolve, reject) => {
318
315
  const receivedEvents = new Map<string, GraphEvent<T>>();
316
+ const eventHandlers = new Map();
319
317
  let isResolved = false;
320
318
 
319
+ const cleanup = () => {
320
+ eventHandlers.forEach((handler, event) => {
321
+ this.eventEmitter.removeListener(event, handler);
322
+ });
323
+ };
324
+
325
+ eventTypes.forEach((eventType) => {
326
+ const handler = (eventData: any) => {
327
+ if (!isResolved) {
328
+ const event: GraphEvent<T> = {
329
+ type: eventType,
330
+ payload: eventData,
331
+ timestamp: Date.now(),
332
+ };
333
+ receivedEvents.set(eventType, event);
334
+
335
+ if (eventTypes.every((type) => receivedEvents.has(type))) {
336
+ const events = Array.from(receivedEvents.values());
337
+ if (correlationFn(events)) {
338
+ isResolved = true;
339
+ clearTimeout(timeoutId);
340
+ cleanup();
341
+ resolve(events);
342
+ }
343
+ }
344
+ }
345
+ };
346
+
347
+ eventHandlers.set(eventType, handler);
348
+ this.eventEmitter.on(eventType, handler);
349
+ });
350
+
321
351
  const timeoutId = setTimeout(() => {
322
352
  if (!isResolved) {
323
- isResolved = true;
324
- eventTypes.forEach((type) => {
325
- this.eventEmitter.removeAllListeners(type);
326
- });
353
+ cleanup();
327
354
  reject(
328
355
  new Error(
329
356
  `Timeout waiting for correlated events: ${eventTypes.join(", ")}`
@@ -331,33 +358,99 @@ export class GraphEventManager<T extends ZodSchema> {
331
358
  );
332
359
  }
333
360
  }, timeoutMs);
361
+ });
362
+ }
363
+
364
+ /**
365
+ * Handles events based on the node's event handler configuration
366
+ */
367
+ async handleNodeEvents(
368
+ nodeName: string,
369
+ config: EventConfig
370
+ ): Promise<any[]> {
371
+ const { events, timeout = 30000, strategy } = config;
372
+
373
+ return new Promise((resolve, reject) => {
374
+ const receivedEvents = new Map<string, any>();
375
+ const eventHandlers = new Map();
376
+ let isResolved = false;
334
377
 
335
- const checkCorrelation = () => {
336
- if (eventTypes.every((type) => receivedEvents.has(type))) {
337
- const events = Array.from(receivedEvents.values());
338
- if (correlationFn(events)) {
339
- if (!isResolved) {
378
+ // Ajouter les événements déjà reçus
379
+ events.forEach((event: string) => {
380
+ const existingEvent = this.lastEvents.get(event);
381
+ if (existingEvent) {
382
+ receivedEvents.set(event, {
383
+ type: event,
384
+ payload: existingEvent,
385
+ timestamp: Date.now(),
386
+ });
387
+ }
388
+ });
389
+
390
+ // Vérifier si on a déjà tous les événements nécessaires
391
+ const checkEvents = () => {
392
+ if (isResolved) return;
393
+
394
+ const eventsList = Array.from(receivedEvents.values());
395
+
396
+ switch (strategy.type) {
397
+ case "single":
398
+ if (receivedEvents.size > 0) {
399
+ resolve(eventsList);
340
400
  isResolved = true;
341
- clearTimeout(timeoutId);
342
- eventTypes.forEach((type) => {
343
- this.eventEmitter.removeAllListeners(type);
344
- });
345
- resolve(events);
346
401
  }
347
- }
402
+ break;
403
+
404
+ case "all":
405
+ case "correlate":
406
+ const allReceived = events.every((e: string) =>
407
+ receivedEvents.has(e)
408
+ );
409
+ if (allReceived) {
410
+ if (strategy.type === "correlate") {
411
+ const correlated = strategy.correlation?.(eventsList);
412
+ if (!correlated) return;
413
+ }
414
+ resolve(eventsList);
415
+ isResolved = true;
416
+ }
417
+ break;
418
+ }
419
+
420
+ if (isResolved) {
421
+ cleanup();
348
422
  }
349
423
  };
350
424
 
351
- eventTypes.forEach((eventType) => {
352
- this.eventEmitter.on(eventType, (eventData: any) => {
353
- receivedEvents.set(eventType, {
354
- type: eventType,
355
- payload: eventData,
356
- timestamp: Date.now(),
357
- });
358
- checkCorrelation();
359
- });
425
+ events.forEach((event: string) => {
426
+ if (!receivedEvents.has(event)) {
427
+ const handler = (eventData: any) => {
428
+ receivedEvents.set(event, {
429
+ type: event,
430
+ payload: eventData,
431
+ timestamp: Date.now(),
432
+ });
433
+ checkEvents();
434
+ };
435
+ eventHandlers.set(event, handler);
436
+ this.eventEmitter.on(event, handler);
437
+ }
360
438
  });
439
+
440
+ const cleanup = () => {
441
+ eventHandlers.forEach((handler, event) => {
442
+ this.eventEmitter.removeListener(event, handler);
443
+ });
444
+ };
445
+
446
+ checkEvents();
447
+
448
+ const timeoutId = setTimeout(() => {
449
+ if (!isResolved) {
450
+ cleanup();
451
+ reject(new Error(`Timeout waiting for events: ${events.join(", ")}`));
452
+ }
453
+ }, timeout);
361
454
  });
362
455
  }
363
456
  }
package/graph/index.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { EventEmitter } from "events";
2
2
  import { BehaviorSubject, Subject } from "rxjs";
3
3
  import { ZodSchema } from "zod";
4
- import { GraphObservable, IEventEmitter } from "../interfaces";
4
+ import { GraphObservable, IEventEmitter, NLPNodeConfig } from "../interfaces";
5
+ import { NLPNode } from "../modules/nlp";
5
6
  import {
6
7
  GraphConfig,
7
8
  GraphContext,
@@ -46,6 +47,8 @@ export class GraphFlow<T extends ZodSchema> {
46
47
  private eventManager: GraphEventManager<T>;
47
48
  private nodeExecutor: GraphNode<T>;
48
49
 
50
+ private nlpNodes: Map<string, NLPNode<T>> = new Map();
51
+
49
52
  /**
50
53
  * Creates a new instance of GraphFlow
51
54
  * @param {string} name - The name of the graph flow
@@ -96,7 +99,8 @@ export class GraphFlow<T extends ZodSchema> {
96
99
  this,
97
100
  this.eventSubject,
98
101
  this.stateSubject,
99
- this.destroySubject
102
+ this.destroySubject,
103
+ this.eventManager
100
104
  );
101
105
  }
102
106
 
@@ -165,6 +169,9 @@ export class GraphFlow<T extends ZodSchema> {
165
169
  inputs: any,
166
170
  triggeredByEvent: boolean = false
167
171
  ): Promise<void> {
172
+ const node = this.nodes.get(nodeName);
173
+ if (!node) throw new Error(`Node "${nodeName}" not found`);
174
+
168
175
  return this.nodeExecutor.executeNode(
169
176
  nodeName,
170
177
  context,
@@ -270,7 +277,7 @@ export class GraphFlow<T extends ZodSchema> {
270
277
  * @param {Partial<GraphContext<T>>} data - Optional data to merge with context
271
278
  * @returns {Promise<void>}
272
279
  */
273
- public async emit(
280
+ public emit(
274
281
  eventName: string,
275
282
  data?: Partial<GraphContext<T>>
276
283
  ): Promise<void> {
@@ -280,7 +287,8 @@ export class GraphFlow<T extends ZodSchema> {
280
287
  timestamp: Date.now(),
281
288
  };
282
289
  this.eventSubject.next(event);
283
- await new Promise((resolve) => setTimeout(resolve, 0));
290
+ this.eventManager.emit(eventName, data);
291
+ return Promise.resolve();
284
292
  }
285
293
 
286
294
  /**
@@ -406,4 +414,49 @@ export class GraphFlow<T extends ZodSchema> {
406
414
  public createVisualizer(): GraphVisualizer<T> {
407
415
  return new GraphVisualizer(this.nodes);
408
416
  }
417
+
418
+ /**
419
+ * Gets the schema for the current graph
420
+ * @returns {T} The schema for the current graph
421
+ */
422
+ public getSchema(): T {
423
+ return this.validator as T;
424
+ }
425
+
426
+ /**
427
+ * Adds a new NLP node to the graph
428
+ * @param {NLPNodeConfig<T>} config - Configuration for the NLP node
429
+ * @returns {Promise<void>}
430
+ */
431
+ public async addNLPNode(config: NLPNodeConfig<T>) {
432
+ const node = new NLPNode(config);
433
+ await node.initialize();
434
+ this.nlpNodes.set(config.name, node);
435
+
436
+ this.addNode({
437
+ name: config.name,
438
+ execute: async (context, input) => {
439
+ if (!input?.input) return;
440
+ const result = await node.process(input.input);
441
+ console.log("GraphFlow NLP result:", result);
442
+ Object.assign(context, { nlpResult: result });
443
+ },
444
+ next: config.next,
445
+ });
446
+ }
447
+
448
+ /**
449
+ * Processes natural language input using a specific NLP node
450
+ * @param {string} text - The input text to process
451
+ * @param {string} nodeName - The name of the NLP node to use
452
+ * @returns {Promise<GraphContext<T>>} The result of the NLP node execution
453
+ */
454
+ public async processNaturalLanguage(text: string, nodeName: string) {
455
+ const node = this.nlpNodes.get(nodeName);
456
+ if (!node) {
457
+ throw new Error(`NLP node "${nodeName}" not found`);
458
+ }
459
+
460
+ return this.execute(nodeName, { input: text });
461
+ }
409
462
  }
package/graph/node.ts CHANGED
@@ -96,22 +96,8 @@ export class GraphNode<T extends ZodSchema> {
96
96
  this.emitEvent("nodeStarted", { name: nodeName, context: nodeContext });
97
97
 
98
98
  try {
99
- if (node.correlateEvents) {
100
- await this.eventManager.waitForCorrelatedEvents(
101
- node.correlateEvents.events,
102
- node.correlateEvents.timeout || 30000,
103
- (events) => {
104
- return node.correlateEvents!.correlation(events);
105
- }
106
- );
107
- }
108
-
109
- // Ensuite, attendre les événements si waitForEvents est défini
110
- if (node.waitForEvents) {
111
- await this.eventManager.waitForEvents(
112
- node.waitForEvents.events,
113
- node.waitForEvents.timeout
114
- );
99
+ if (node.when) {
100
+ await this.eventManager.handleNodeEvents(nodeName, node.when);
115
101
  }
116
102
 
117
103
  const contextProxy = new Proxy(nodeContext, {
@@ -206,27 +192,6 @@ export class GraphNode<T extends ZodSchema> {
206
192
  }
207
193
  }
208
194
 
209
- /**
210
- * Handles event-related operations for a node
211
- * @param node - The node whose events need handling
212
- * @param nodeName - The name of the node
213
- * @param context - The current graph context
214
- * @private
215
- */
216
- private async handleEvents(
217
- node: GraphNodeConfig<T, any>,
218
- nodeName: string,
219
- context: GraphContext<T>
220
- ): Promise<void> {
221
- if (node.correlateEvents) {
222
- await this.handleCorrelatedEvents(node, nodeName);
223
- }
224
-
225
- if (node.waitForEvents) {
226
- await this.handleWaitForEvents(node, nodeName);
227
- }
228
- }
229
-
230
195
  /**
231
196
  * Executes a node with retry logic
232
197
  * @param node - The node to execute
@@ -277,71 +242,4 @@ export class GraphNode<T extends ZodSchema> {
277
242
  }
278
243
  }
279
244
  }
280
-
281
- /**
282
- * Handles correlated events for a node
283
- * @param node - The node with correlated events
284
- * @param nodeName - The name of the node
285
- * @throws Error if correlation fails or timeout occurs
286
- * @private
287
- */
288
- private async handleCorrelatedEvents(
289
- node: GraphNodeConfig<T, any>,
290
- nodeName: string
291
- ): Promise<void> {
292
- if (node.correlateEvents) {
293
- const { events, timeout, correlation } = node.correlateEvents;
294
- this.logger.addLog(
295
- `⏳ Node "${nodeName}" waiting for correlated events: ${events.join(
296
- ", "
297
- )}`
298
- );
299
-
300
- try {
301
- // Attendre les événements
302
- const receivedEvents = await this.eventManager.waitForEvents(
303
- events,
304
- timeout
305
- );
306
-
307
- // Vérifier la corrélation
308
- if (!correlation(receivedEvents)) {
309
- this.logger.addLog(
310
- `❌ Event correlation failed for node "${nodeName}"`
311
- );
312
- throw new Error(`Event correlation failed for node "${nodeName}"`);
313
- }
314
-
315
- this.logger.addLog(
316
- `✅ Event correlation succeeded for node "${nodeName}"`
317
- );
318
- } catch (error) {
319
- this.logger.addLog(
320
- `❌ Error waiting for events: ${(error as Error).message}`
321
- );
322
- throw error;
323
- }
324
- }
325
- }
326
-
327
- /**
328
- * Handles waiting for events
329
- * @param node - The node waiting for events
330
- * @param nodeName - The name of the node
331
- * @throws Error if timeout occurs
332
- * @private
333
- */
334
- private async handleWaitForEvents(
335
- node: GraphNodeConfig<T, any>,
336
- nodeName: string
337
- ): Promise<void> {
338
- if (node.waitForEvents) {
339
- const { events, timeout } = node.waitForEvents;
340
- this.logger.addLog(
341
- `⏳ Node "${nodeName}" waiting for events: ${events.join(", ")}`
342
- );
343
- await this.eventManager.waitForEvents(events, timeout);
344
- this.logger.addLog(`✅ All events received for node "${nodeName}"`);
345
- }
346
- }
347
245
  }