@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.
- package/dist/graph/event-manager.d.ts +9 -1
- package/dist/graph/event-manager.d.ts.map +1 -1
- package/dist/graph/event-manager.js +115 -37
- package/dist/graph/event-manager.js.map +1 -1
- package/dist/graph/index.d.ts +20 -1
- package/dist/graph/index.d.ts.map +1 -1
- package/dist/graph/index.js +59 -10
- package/dist/graph/index.js.map +1 -1
- package/dist/graph/node.d.ts +0 -24
- package/dist/graph/node.d.ts.map +1 -1
- package/dist/graph/node.js +2 -71
- package/dist/graph/node.js.map +1 -1
- package/dist/graph/observer.d.ts +6 -87
- package/dist/graph/observer.d.ts.map +1 -1
- package/dist/graph/observer.js +3 -116
- package/dist/graph/observer.js.map +1 -1
- package/dist/index.d.ts +1 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -6
- package/dist/index.js.map +1 -1
- package/dist/interfaces/index.d.ts +10 -1
- package/dist/interfaces/index.d.ts.map +1 -1
- package/dist/interfaces/index.js.map +1 -1
- package/dist/modules/agent/agent.d.ts +35 -0
- package/dist/modules/agent/agent.d.ts.map +1 -0
- package/dist/modules/agent/agent.js +106 -0
- package/dist/modules/agent/agent.js.map +1 -0
- package/dist/modules/agent/base/executor.d.ts +51 -0
- package/dist/modules/agent/base/executor.d.ts.map +1 -0
- package/dist/modules/agent/base/executor.js +66 -0
- package/dist/modules/agent/base/executor.js.map +1 -0
- package/dist/modules/agent/base/index.d.ts +30 -0
- package/dist/modules/agent/base/index.d.ts.map +1 -0
- package/dist/modules/agent/base/index.js +100 -0
- package/dist/modules/agent/base/index.js.map +1 -0
- package/dist/modules/agent/generic-assistant.d.ts +20 -0
- package/dist/modules/agent/generic-assistant.d.ts.map +1 -0
- package/dist/modules/agent/generic-assistant.js +89 -0
- package/dist/modules/agent/generic-assistant.js.map +1 -0
- package/dist/modules/agent/generic-executor.d.ts +57 -0
- package/dist/modules/agent/generic-executor.d.ts.map +1 -0
- package/dist/modules/agent/generic-executor.js +200 -0
- package/dist/modules/agent/generic-executor.js.map +1 -0
- package/dist/modules/agent/llm-factory.d.ts +19 -0
- package/dist/modules/agent/llm-factory.d.ts.map +1 -0
- package/dist/modules/agent/llm-factory.js +56 -0
- package/dist/modules/agent/llm-factory.js.map +1 -0
- package/dist/modules/agent/prompt-builder.d.ts +35 -0
- package/dist/modules/agent/prompt-builder.d.ts.map +1 -0
- package/dist/modules/agent/prompt-builder.js +76 -0
- package/dist/modules/agent/prompt-builder.js.map +1 -0
- package/dist/modules/memory/adapters/in-memory/index.d.ts.map +1 -1
- package/dist/modules/memory/adapters/in-memory/index.js +4 -3
- package/dist/modules/memory/adapters/in-memory/index.js.map +1 -1
- package/dist/modules/memory/adapters/meilisearch/index.d.ts.map +1 -1
- package/dist/modules/memory/adapters/meilisearch/index.js +7 -4
- package/dist/modules/memory/adapters/meilisearch/index.js.map +1 -1
- package/dist/modules/memory/adapters/redis/index.d.ts.map +1 -1
- package/dist/modules/memory/adapters/redis/index.js +2 -1
- package/dist/modules/memory/adapters/redis/index.js.map +1 -1
- package/dist/modules/nlp/engine.d.ts +126 -0
- package/dist/modules/nlp/engine.d.ts.map +1 -0
- package/dist/modules/nlp/engine.js +300 -0
- package/dist/modules/nlp/engine.js.map +1 -0
- package/dist/modules/nlp/index.d.ts +27 -0
- package/dist/modules/nlp/index.d.ts.map +1 -0
- package/dist/modules/nlp/index.js +56 -0
- package/dist/modules/nlp/index.js.map +1 -0
- package/dist/types/agent.d.ts +233 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +29 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/index.d.ts +72 -18
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/generate-action-schema.d.ts.map +1 -1
- package/graph/event-manager.ts +135 -42
- package/graph/index.ts +57 -4
- package/graph/node.ts +2 -104
- package/graph/observer.ts +9 -215
- package/index.ts +2 -7
- package/interfaces/index.ts +12 -0
- package/modules/agent/agent.ts +108 -0
- package/modules/agent/base/executor.ts +100 -0
- package/modules/agent/base/index.ts +99 -0
- package/modules/agent/generic-assistant.ts +90 -0
- package/modules/agent/generic-executor.ts +259 -0
- package/modules/agent/llm-factory.ts +47 -0
- package/modules/agent/prompt-builder.ts +78 -0
- package/modules/memory/adapters/in-memory/index.ts +4 -3
- package/modules/memory/adapters/meilisearch/index.ts +7 -4
- package/modules/memory/adapters/redis/index.ts +2 -1
- package/modules/nlp/engine.ts +325 -0
- package/modules/nlp/index.ts +45 -0
- package/package.json +5 -2
- package/test/graph/index.test.ts +6 -4
- package/test/graph/node.test.ts +18 -14
- package/types/agent.ts +174 -0
- package/types/index.ts +74 -18
package/dist/types/index.d.ts
CHANGED
@@ -11,10 +11,12 @@ import { IEventEmitter } from "../interfaces";
|
|
11
11
|
*/
|
12
12
|
export interface CreateMemoryInput {
|
13
13
|
id?: string;
|
14
|
-
|
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
|
-
|
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
|
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
|
-
/**
|
92
|
-
|
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
|
181
|
+
export type GraphEvent<T extends ZodSchema> = {
|
172
182
|
type: string;
|
173
183
|
payload?: any;
|
174
184
|
timestamp: number;
|
175
|
-
}
|
176
|
-
export
|
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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI9C;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,
|
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,
|
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"}
|
package/graph/event-manager.ts
CHANGED
@@ -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 {
|
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
|
-
//
|
289
|
-
if (node.
|
290
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
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
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
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
|
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
|
-
|
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.
|
100
|
-
await this.eventManager.
|
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
|
}
|