@ai.ntellect/core 0.4.1 ā 0.6.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/.mocharc.json +1 -1
- package/README.md +311 -272
- package/dist/graph/controller.js +63 -0
- package/dist/graph/engine.js +563 -0
- package/dist/index.js +6 -6
- package/dist/memory/adapters/meilisearch/index.js +249 -0
- package/dist/memory/adapters/redis/index.js +96 -0
- package/dist/memory/index.js +9 -0
- package/dist/services/agenda.js +115 -0
- package/dist/services/embedding.js +40 -0
- package/dist/services/queue.js +99 -103
- package/dist/test/graph/controller.test.js +170 -0
- package/dist/test/graph/engine.test.js +465 -0
- package/dist/test/memory/adapters/meilisearch.test.js +250 -0
- package/dist/test/memory/adapters/redis.test.js +143 -0
- package/dist/test/memory/base.test.js +209 -0
- package/dist/test/services/agenda.test.js +230 -0
- package/dist/test/services/queue.test.js +258 -0
- package/dist/types/index.js +2 -0
- package/dist/utils/generate-object.js +32 -11
- package/dist/utils/inject-actions.js +2 -2
- package/dist/utils/queue-item-transformer.js +2 -2
- package/dist/utils/state-manager.js +20 -0
- package/graph/controller.ts +60 -0
- package/graph/engine.ts +709 -0
- package/index.ts +7 -7
- package/interfaces/index.ts +119 -0
- package/memory/adapters/meilisearch/index.ts +286 -0
- package/memory/adapters/redis/index.ts +103 -0
- package/memory/index.ts +22 -0
- package/package.json +9 -2
- package/services/agenda.ts +118 -0
- package/services/embedding.ts +26 -0
- package/services/queue.ts +5 -32
- package/test/.env.test +4 -0
- package/test/graph/controller.test.ts +186 -0
- package/test/graph/engine.test.ts +563 -0
- package/test/memory/adapters/meilisearch.test.ts +297 -0
- package/test/memory/adapters/redis.test.ts +160 -0
- package/test/memory/base.test.ts +229 -0
- package/test/services/agenda.test.ts +280 -0
- package/test/services/queue.test.ts +286 -44
- package/tsconfig.json +10 -9
- package/types/index.ts +270 -0
- package/utils/generate-object.js +111 -0
- package/utils/generate-object.ts +24 -12
- package/utils/header-builder.js +34 -0
- package/utils/inject-actions.js +16 -0
- package/utils/inject-actions.ts +3 -3
- package/utils/queue-item-transformer.js +24 -0
- package/utils/queue-item-transformer.ts +8 -11
- package/utils/sanitize-results.js +60 -0
- package/utils/schema-generator.js +46 -0
- package/utils/state-manager.js +20 -0
- package/utils/state-manager.ts +30 -0
- package/.nvmrc +0 -1
- package/README.FR.md +0 -365
- package/agent/index.ts +0 -244
- package/agent/tools/get-rss.ts +0 -64
- package/bull.ts +0 -5
- package/dist/agent/index.d.ts +0 -38
- package/dist/agent/index.js +0 -143
- package/dist/agent/tools/get-rss.d.ts +0 -16
- package/dist/agent/tools/get-rss.js +0 -62
- package/dist/bull.d.ts +0 -1
- package/dist/bull.js +0 -9
- package/dist/examples/index.d.ts +0 -2
- package/dist/examples/index.js +0 -89
- package/dist/index.d.ts +0 -7
- package/dist/llm/interpreter/context.d.ts +0 -15
- package/dist/llm/interpreter/context.js +0 -89
- package/dist/llm/interpreter/index.d.ts +0 -21
- package/dist/llm/interpreter/index.js +0 -87
- package/dist/llm/memory-manager/context.d.ts +0 -2
- package/dist/llm/memory-manager/context.js +0 -22
- package/dist/llm/memory-manager/index.d.ts +0 -17
- package/dist/llm/memory-manager/index.js +0 -107
- package/dist/llm/orchestrator/context.d.ts +0 -2
- package/dist/llm/orchestrator/context.js +0 -23
- package/dist/llm/orchestrator/index.d.ts +0 -44
- package/dist/llm/orchestrator/index.js +0 -139
- package/dist/llm/orchestrator/types.d.ts +0 -12
- package/dist/memory/cache.d.ts +0 -22
- package/dist/memory/cache.js +0 -165
- package/dist/memory/persistent.d.ts +0 -57
- package/dist/memory/persistent.js +0 -189
- package/dist/services/queue.d.ts +0 -13
- package/dist/services/redis-cache.d.ts +0 -37
- package/dist/services/redis-cache.js +0 -93
- package/dist/services/scheduler.d.ts +0 -40
- package/dist/services/scheduler.js +0 -99
- package/dist/services/telegram-monitor.d.ts +0 -0
- package/dist/services/telegram-monitor.js +0 -118
- package/dist/t.d.ts +0 -46
- package/dist/t.js +0 -102
- package/dist/test.d.ts +0 -0
- package/dist/test.js +0 -438
- package/dist/types.d.ts +0 -258
- package/dist/types.js +0 -22
- package/dist/utils/generate-object.d.ts +0 -12
- package/dist/utils/header-builder.d.ts +0 -11
- package/dist/utils/inject-actions.d.ts +0 -2
- package/dist/utils/queue-item-transformer.d.ts +0 -7
- package/dist/utils/sanitize-results.d.ts +0 -17
- package/dist/utils/schema-generator.d.ts +0 -16
- package/examples/index.ts +0 -103
- package/llm/interpreter/context.ts +0 -101
- package/llm/interpreter/index.ts +0 -136
- package/llm/memory-manager/context.ts +0 -21
- package/llm/memory-manager/index.ts +0 -163
- package/llm/orchestrator/context.ts +0 -22
- package/llm/orchestrator/index.ts +0 -232
- package/llm/orchestrator/types.ts +0 -14
- package/memory/cache.ts +0 -221
- package/memory/persistent.ts +0 -265
- package/services/redis-cache.ts +0 -128
- package/services/scheduler.ts +0 -128
- package/services/telegram-monitor.ts +0 -138
- package/t.py +0 -79
- package/t.spec +0 -38
- package/t.ts +0 -133
- package/test/llm/orchestrator.test.ts +0 -47
- package/test/llm/synthesizer.test.ts +0 -31
- package/types.ts +0 -288
- /package/dist/{llm/orchestrator/types.js ā interfaces/index.js} +0 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.StateManager = void 0;
|
4
|
+
class StateManager {
|
5
|
+
/**
|
6
|
+
* Updates the shared state while preserving immutability
|
7
|
+
* @param currentState Current shared state
|
8
|
+
* @param updates Partial updates to apply
|
9
|
+
* @returns Updated shared state
|
10
|
+
*/
|
11
|
+
static updateState(state, updates) {
|
12
|
+
return Object.assign(Object.assign({}, state), { context: Object.assign(Object.assign({}, (state.context || {})), updates) });
|
13
|
+
}
|
14
|
+
static createUpdate(updates) {
|
15
|
+
return {
|
16
|
+
context: Object.assign({}, updates),
|
17
|
+
};
|
18
|
+
}
|
19
|
+
}
|
20
|
+
exports.StateManager = StateManager;
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import { SharedState } from "../types";
|
2
|
+
|
3
|
+
export class StateManager {
|
4
|
+
/**
|
5
|
+
* Updates the shared state while preserving immutability
|
6
|
+
* @param currentState Current shared state
|
7
|
+
* @param updates Partial updates to apply
|
8
|
+
* @returns Updated shared state
|
9
|
+
*/
|
10
|
+
static updateState<T>(
|
11
|
+
state: SharedState<T>,
|
12
|
+
updates: Partial<T>
|
13
|
+
): SharedState<T> {
|
14
|
+
return {
|
15
|
+
...state,
|
16
|
+
context: {
|
17
|
+
...(state.context || {}),
|
18
|
+
...updates,
|
19
|
+
},
|
20
|
+
};
|
21
|
+
}
|
22
|
+
|
23
|
+
static createUpdate<T>(updates: Partial<T>) {
|
24
|
+
return {
|
25
|
+
context: {
|
26
|
+
...updates,
|
27
|
+
},
|
28
|
+
};
|
29
|
+
}
|
30
|
+
}
|
package/.nvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
v22.0.0
|
package/README.FR.md
DELETED
@@ -1,365 +0,0 @@
|
|
1
|
-
# AI.ntellect Core Framework
|
2
|
-
|
3
|
-
## Vue d'ensemble
|
4
|
-
|
5
|
-
Ce framework est conçu pour exécuter des workflows complexes à l'aide d'une orchestration avancée, de la gestion de mémoire et d'une intelligence exploitable. Il intègre des outils, des interpréteurs et des systèmes de mémoire pour :
|
6
|
-
|
7
|
-
- Analyser les entrƩes utilisateur dans leur contexte.
|
8
|
-
- ExƩcuter des workflows prƩdƩfinis et des actions dynamiques.
|
9
|
-
- Gérer efficacement la mémoire à court et à long terme.
|
10
|
-
- Permettre une intƩgration fluide avec des API et outils externes.
|
11
|
-
|
12
|
-
---
|
13
|
-
|
14
|
-
## Table des matiĆØres
|
15
|
-
|
16
|
-
1. [Composants d'architecture](#composants-darchitecture)
|
17
|
-
- [Runtime de l'agent](#runtime-de-lagent)
|
18
|
-
- [Orchestrateur](#orchestrateur)
|
19
|
-
- [Gestionnaire de file d'attente](#gestionnaire-de-file-dattente)
|
20
|
-
- [InterprƩteur](#interprƩteur)
|
21
|
-
- [Système de mémoire](#système-de-mémoire)
|
22
|
-
- [Listeners](#listeners)
|
23
|
-
- [Schedulers](#schedulers)
|
24
|
-
2. [DƩfinir et exƩcuter des actions](#dƩfinir-et-exƩcuter-des-actions)
|
25
|
-
3. [Gestion de l'Ʃtat et rƩcursivitƩ](#gestion-de-letat-et-recursivitƩ)
|
26
|
-
4. [Installation et configuration](#installation-et-configuration)
|
27
|
-
5. [Exemple d'utilisation](#exemple-dutilisation)
|
28
|
-
6. [Travaux en cours (WIP)](#travaux-en-cours-wip)
|
29
|
-
|
30
|
-
---
|
31
|
-
|
32
|
-
## Composants d'architecture
|
33
|
-
|
34
|
-
### Runtime de l'agent
|
35
|
-
|
36
|
-
Le `AgentRuntime` est le moteur principal qui coordonne le workflow global. Il connecte tous les composants et garantit que les tâches sont exécutées efficacement.
|
37
|
-
|
38
|
-
**ResponsabilitƩs :**
|
39
|
-
|
40
|
-
- Construire un contexte pour l'état actuel à l'aide des systèmes de mémoire (RAG et CAG).
|
41
|
-
- Orchestrer les actions Ć l'aide du gestionnaire de file d'attente.
|
42
|
-
- Exploiter les interprƩteurs pour analyser les rƩsultats et gƩnƩrer des rƩponses.
|
43
|
-
|
44
|
-
#### Construction du contexte
|
45
|
-
|
46
|
-
La mƩthode `buildContext` crƩe un contexte complet en :
|
47
|
-
|
48
|
-
1. Ajoutant les outils et les demandes utilisateur.
|
49
|
-
2. RƩcupƩrant les actions rƩcentes via la mƩmoire cache (CAG).
|
50
|
-
3. Cherchant les connaissances pertinentes dans la mƩmoire persistante (RAG).
|
51
|
-
4. Incluant les interprƩteurs disponibles pour la demande.
|
52
|
-
|
53
|
-
#### Traitement des workflows
|
54
|
-
|
55
|
-
La mƩthode `process` :
|
56
|
-
|
57
|
-
1. Génère des réponses basées sur le contexte à l'aide d'un modèle de langage.
|
58
|
-
2. Gère les workflows récursifs pour l'exécution des actions.
|
59
|
-
3. SƩlectionne les interprƩteurs appropriƩs pour analyser les rƩsultats.
|
60
|
-
|
61
|
-
---
|
62
|
-
|
63
|
-
### Orchestrateur
|
64
|
-
|
65
|
-
L'**orchestrateur** dirige les workflows en analysant les entrées utilisateur et en planifiant les actions. Il interagit avec les outils, les systèmes de mémoire et les interpréteurs pour garantir une exécution logique.
|
66
|
-
|
67
|
-
**CaractƩristiques clƩs :**
|
68
|
-
|
69
|
-
- SƩlection dynamique des actions en fonction du contexte.
|
70
|
-
- Gestion des interactions mƩmoire pour les opƩrations RAG et CAG.
|
71
|
-
- Gestion des workflows multi-Ʃtapes avec affinage itƩratif.
|
72
|
-
|
73
|
-
---
|
74
|
-
|
75
|
-
### Gestionnaire de file d'attente
|
76
|
-
|
77
|
-
Le **gestionnaire de file d'attente** est chargé d'organiser et d'exécuter les actions dans le bon ordre, qu'elles soient séquentielles ou parallèles. Il agit comme le mécanisme central pour gérer les workflows, en s'assurant que chaque action est correctement mise en file d'attente, validée et exécutée.
|
78
|
-
|
79
|
-
**ResponsabilitƩs principales :**
|
80
|
-
|
81
|
-
1. **Mise en file d'attente des actions :**
|
82
|
-
|
83
|
-
- Les actions sont ajoutées à une file pour exécution, individuellement ou en lot.
|
84
|
-
- Prise en charge des journaux pour le dƩbogage et la traƧabilitƩ.
|
85
|
-
|
86
|
-
2. **Traitement des actions :**
|
87
|
-
|
88
|
-
- ExƩcute les actions en maintenant le bon ordre.
|
89
|
-
- Respecte les dƩpendances entre les actions.
|
90
|
-
- GĆØre les erreurs ou confirmations via des rappels.
|
91
|
-
|
92
|
-
3. **Gestion des confirmations :**
|
93
|
-
- Prend en charge les invites de confirmation pour les actions critiques.
|
94
|
-
- S'appuie sur des rappels pour dƩcider de poursuivre des actions spƩcifiques.
|
95
|
-
|
96
|
-
**Exemple :**
|
97
|
-
|
98
|
-
```typescript
|
99
|
-
import { ActionQueueManager } from "@ai-ntellect/core";
|
100
|
-
import { actions, callbacks } from "@ai-ntellect/core/examples";
|
101
|
-
|
102
|
-
const queueManager = new ActionQueueManager(actions, callbacks);
|
103
|
-
queueManager.addToQueue([{ name: "fetch-data", parameters: [...] }]);
|
104
|
-
const results = await queueManager.processQueue();
|
105
|
-
console.log("RƩsultats :", results);
|
106
|
-
```
|
107
|
-
|
108
|
-
---
|
109
|
-
|
110
|
-
### InterprƩteur
|
111
|
-
|
112
|
-
L'**interpréteur** se spécialise dans l'analyse des résultats et la génération d'informations spécifiques à un domaine. Chaque interpréteur est adapté à un cas d'utilisation particulier et utilise sa propre configuration de caractère.
|
113
|
-
|
114
|
-
**Exemples :**
|
115
|
-
|
116
|
-
1. **MarketInterpreter** : Analyse des données financières de marché.
|
117
|
-
2. **SecurityInterpreter** : VƩrification de la sƩcuritƩ.
|
118
|
-
3. **GeneralInterpreter** : Traitement des demandes gƩnƩrales.
|
119
|
-
|
120
|
-
#### Workflow d'interprƩtation
|
121
|
-
|
122
|
-
1. Construit un contexte avec l'Ʃtat actuel, y compris les rƩsultats et les demandes utilisateur.
|
123
|
-
2. Utilise le modèle de langage pour générer des informations exploitables.
|
124
|
-
3. Fournit des rƩponses dƩtaillƩes pour l'utilisateur final.
|
125
|
-
|
126
|
-
---
|
127
|
-
|
128
|
-
### Système de mémoire
|
129
|
-
|
130
|
-
L'architecture mémoire combine une mémoire à court terme et une mémoire à long terme pour fournir un traitement contextuel.
|
131
|
-
|
132
|
-
#### Types de mƩmoire
|
133
|
-
|
134
|
-
1. **MƩmoire cache (Redis) :**
|
135
|
-
- Stocke des données temporaires pour un accès rapide.
|
136
|
-
- Exemples : Actions rƩcentes, donnƩes de session.
|
137
|
-
2. **MƩmoire persistante (Meilisearch) :**
|
138
|
-
- Stocke des données à long terme comme les interactions historiques et les connaissances.
|
139
|
-
- Permet des recherches sƩmantiques et des rƩcupƩrations basƩes sur des vecteurs.
|
140
|
-
|
141
|
-
---
|
142
|
-
|
143
|
-
### Listeners
|
144
|
-
|
145
|
-
Les **listeners** permettent de se connecter à des événements externes via WebSocket. Ils écoutent les mises à jour en temps réel et déclenchent des actions ou des callbacks spécifiques en réponse aux événements.
|
146
|
-
|
147
|
-
**CaractƩristiques principales :**
|
148
|
-
|
149
|
-
- Connexion à des WebSockets pour écouter les événements.
|
150
|
-
- Gestion des abonnements avec des messages personnalisƩs.
|
151
|
-
- DƩclenchement de callbacks pour traiter les donnƩes reƧues.
|
152
|
-
|
153
|
-
**Exemple d'utilisation :**
|
154
|
-
|
155
|
-
```typescript
|
156
|
-
agent.addListener(
|
157
|
-
"listener-id",
|
158
|
-
"wss://example.com/socket",
|
159
|
-
() => JSON.stringify({ action: "subscribe" }),
|
160
|
-
async (data) => {
|
161
|
-
console.log("Data reƧue :", data);
|
162
|
-
}
|
163
|
-
);
|
164
|
-
```
|
165
|
-
|
166
|
-
---
|
167
|
-
|
168
|
-
### Schedulers
|
169
|
-
|
170
|
-
Les **schedulers** permettent de planifier des tâches ou actions pour une exécution ultérieure. Ils utilisent des expressions cron pour définir les intervalles de planification.
|
171
|
-
|
172
|
-
**CaractƩristiques principales :**
|
173
|
-
|
174
|
-
- Planification basƩe sur des expressions cron.
|
175
|
-
- Support des tâches récurrentes et non récurrentes.
|
176
|
-
- Gestion et annulation des tâches planifiées.
|
177
|
-
|
178
|
-
**Exemple d'utilisation :**
|
179
|
-
|
180
|
-
```typescript
|
181
|
-
const scheduler = new TaskScheduler(agentRuntime, redisCache);
|
182
|
-
|
183
|
-
const taskId = await scheduler.scheduleRequest({
|
184
|
-
originalRequest: "Analyse de marchƩ",
|
185
|
-
cronExpression: "0 9 * * *", // Tous les jours Ć 9h
|
186
|
-
});
|
187
|
-
|
188
|
-
console.log(`Tâche planifiée avec ID : ${taskId}`);
|
189
|
-
|
190
|
-
// Annuler la tâche si nécessaire
|
191
|
-
scheduler.cancelScheduledRequest(taskId);
|
192
|
-
```
|
193
|
-
|
194
|
-
---
|
195
|
-
|
196
|
-
## DƩfinir et exƩcuter des actions
|
197
|
-
|
198
|
-
### Qu'est-ce qu'une action ?
|
199
|
-
|
200
|
-
Les actions sont les tâches fondamentales exécutées par le framework. Chaque action comprend :
|
201
|
-
|
202
|
-
- Un nom et une description uniques.
|
203
|
-
- Des paramètres d'entrée validés à l'aide de schémas.
|
204
|
-
- Une logique d'exƩcution encapsulƩe dans la mƩthode `execute`.
|
205
|
-
|
206
|
-
### Exemple d'action
|
207
|
-
|
208
|
-
```typescript
|
209
|
-
import { z } from "zod";
|
210
|
-
import { parseEther } from "ethers";
|
211
|
-
|
212
|
-
export const prepareTransaction = {
|
213
|
-
name: "prepare-transaction",
|
214
|
-
description: "PrƩpare un transfert de token pour approbation utilisateur.",
|
215
|
-
parameters: z.object({
|
216
|
-
walletAddress: z.string(),
|
217
|
-
amount: z.string(),
|
218
|
-
networkId: z.string(),
|
219
|
-
}),
|
220
|
-
execute: async ({ walletAddress, amount, networkId }) => {
|
221
|
-
return {
|
222
|
-
to: walletAddress,
|
223
|
-
value: parseEther(amount).toString(),
|
224
|
-
network: networkId,
|
225
|
-
};
|
226
|
-
},
|
227
|
-
};
|
228
|
-
```
|
229
|
-
|
230
|
-
---
|
231
|
-
|
232
|
-
## Gestion de l'Ʃtat et rƩcursivitƩ
|
233
|
-
|
234
|
-
L'agent gère l'état et les workflows récursifs pour s'assurer que les actions sont exécutées de manière ordonnée et jusqu'à leur achèvement, tout en respectant un maximum d'itérations pour éviter les boucles infinies.
|
235
|
-
|
236
|
-
### Gestion de l'Ʃtat
|
237
|
-
|
238
|
-
L'Ʃtat (`State`) contient :
|
239
|
-
|
240
|
-
- `currentContext` : Contexte actuel de la requĆŖte utilisateur.
|
241
|
-
- `previousActions` : Liste des actions exƩcutƩes prƩcƩdemment.
|
242
|
-
|
243
|
-
Lorsqu'une action est terminée, l'état est mis à jour pour inclure :
|
244
|
-
|
245
|
-
- Les rƩsultats des actions prƩcƩdentes.
|
246
|
-
- Le contexte restant Ć traiter.
|
247
|
-
|
248
|
-
### RƩcursivitƩ contrƓlƩe
|
249
|
-
|
250
|
-
Pour éviter les boucles infinies, le système limite le nombre d'itérations via la configuration `maxIterations`.
|
251
|
-
|
252
|
-
**Fonctionnement :**
|
253
|
-
|
254
|
-
1. **Initialisation :** à chaque itération, l'agent :
|
255
|
-
|
256
|
-
- ExƩcute les actions dans la file d'attente.
|
257
|
-
- Met à jour l'état avec les nouveaux résultats.
|
258
|
-
|
259
|
-
2. **Validation des limites :**
|
260
|
-
|
261
|
-
- Si le nombre d'itƩrations dƩpasse `maxIterations`, le traitement est interrompu avec un message "Max iterations reached".
|
262
|
-
|
263
|
-
3. **RƩcursivitƩ :**
|
264
|
-
- Si des actions restent à exécuter, l'agent appelle récursivement la méthode `process` avec le nouvel état.
|
265
|
-
|
266
|
-
**Exemple de gestion d'Ʃtat et rƩcursivitƩ :**
|
267
|
-
|
268
|
-
```typescript
|
269
|
-
const updatedNextState: State = {
|
270
|
-
...state,
|
271
|
-
currentContext: state.currentContext,
|
272
|
-
previousActions: [...(state.previousActions || []), ...(results || [])],
|
273
|
-
};
|
274
|
-
|
275
|
-
if (countIterations < this.config.maxIterations) {
|
276
|
-
return this.process(updatedNextState);
|
277
|
-
} else {
|
278
|
-
console.log("Max iterations reached");
|
279
|
-
response.shouldContinue = false;
|
280
|
-
}
|
281
|
-
```
|
282
|
-
|
283
|
-
---
|
284
|
-
|
285
|
-
## Installation et configuration
|
286
|
-
|
287
|
-
### Installer les dƩpendances
|
288
|
-
|
289
|
-
```bash
|
290
|
-
npm install
|
291
|
-
```
|
292
|
-
|
293
|
-
### Configurer les services externes
|
294
|
-
|
295
|
-
#### Redis (MƩmoire cache)
|
296
|
-
|
297
|
-
```bash
|
298
|
-
docker run --name redis -d -p 6379:6379 redis
|
299
|
-
```
|
300
|
-
|
301
|
-
#### Meilisearch (MƩmoire persistante)
|
302
|
-
|
303
|
-
```bash
|
304
|
-
curl -L https://install.meilisearch.com | sh
|
305
|
-
./meilisearch --master-key="VOTRE_CLĆ_MAĆTRE"
|
306
|
-
```
|
307
|
-
|
308
|
-
---
|
309
|
-
|
310
|
-
## Exemple d'utilisation
|
311
|
-
|
312
|
-
### Initialiser l'agent
|
313
|
-
|
314
|
-
```typescript
|
315
|
-
import { deepseek } from "@ai-ntellect/core";
|
316
|
-
import { Agent } from "@ai-ntellect/core";
|
317
|
-
import { checkHoneypot, fetchMarkPrice } from "@ai-ntellect/core/actions";
|
318
|
-
import {
|
319
|
-
generalInterpreterCharacter,
|
320
|
-
marketInterpreterCharacter,
|
321
|
-
securityInterpreterCharacter,
|
322
|
-
} from "@ai-ntellect/core/interpreter/context";
|
323
|
-
|
324
|
-
const model = deepseek("deepseek-reasoner");
|
325
|
-
|
326
|
-
const agent = new Agent({
|
327
|
-
orchestrator: {
|
328
|
-
model,
|
329
|
-
tools: [checkHoneypot, fetchMarkPrice],
|
330
|
-
},
|
331
|
-
interpreters: [
|
332
|
-
new Interpreter({
|
333
|
-
name: "security",
|
334
|
-
model,
|
335
|
-
character: securityInterpreterCharacter,
|
336
|
-
}),
|
337
|
-
new Interpreter({
|
338
|
-
name: "market",
|
339
|
-
model,
|
340
|
-
character: marketInterpreterCharacter,
|
341
|
-
}),
|
342
|
-
new Interpreter({
|
343
|
-
name: "general",
|
344
|
-
model,
|
345
|
-
character: generalInterpreterCharacter,
|
346
|
-
}),
|
347
|
-
],
|
348
|
-
memoryManager: {
|
349
|
-
model,
|
350
|
-
},
|
351
|
-
maxIterations: 3,
|
352
|
-
});
|
353
|
-
```
|
354
|
-
|
355
|
-
### Traiter une demande
|
356
|
-
|
357
|
-
```typescript
|
358
|
-
const state = {
|
359
|
-
currentContext: "Analyse des tendances de marchƩ XRP/USD",
|
360
|
-
previousActions: [],
|
361
|
-
};
|
362
|
-
|
363
|
-
const result = await agent.process(state);
|
364
|
-
console.log("RƩsultat :", result);
|
365
|
-
```
|
package/agent/index.ts
DELETED
@@ -1,244 +0,0 @@
|
|
1
|
-
import { LanguageModel } from "ai";
|
2
|
-
import WebSocket from "ws";
|
3
|
-
import { Interpreter } from "../llm/interpreter";
|
4
|
-
import { MemoryManager } from "../llm/memory-manager";
|
5
|
-
import { AgentRuntime } from "../llm/orchestrator";
|
6
|
-
import { State } from "../llm/orchestrator/types";
|
7
|
-
import { CacheMemory } from "../memory/cache";
|
8
|
-
import { PersistentMemory } from "../memory/persistent";
|
9
|
-
import { ActionQueueManager } from "../services/queue";
|
10
|
-
import { CacheConfig, RedisCache } from "../services/redis-cache";
|
11
|
-
import { ActionData, ActionSchema, QueueCallbacks } from "../types";
|
12
|
-
import { QueueItemTransformer } from "../utils/queue-item-transformer";
|
13
|
-
|
14
|
-
export class Agent {
|
15
|
-
private readonly agent: AgentRuntime;
|
16
|
-
private readonly memoryManager: MemoryManager;
|
17
|
-
private readonly cache: RedisCache;
|
18
|
-
|
19
|
-
private listeners: Map<
|
20
|
-
string,
|
21
|
-
{ socket: WebSocket; callback: (data: any) => Promise<void> }
|
22
|
-
> = new Map();
|
23
|
-
private readonly config: {
|
24
|
-
orchestrator: {
|
25
|
-
model: LanguageModel;
|
26
|
-
tools: ActionSchema[];
|
27
|
-
memory?: {
|
28
|
-
cache?: CacheMemory;
|
29
|
-
persistent?: PersistentMemory;
|
30
|
-
};
|
31
|
-
};
|
32
|
-
interpreters: Interpreter[];
|
33
|
-
memoryManager: {
|
34
|
-
model: LanguageModel;
|
35
|
-
memory?: {
|
36
|
-
cache?: CacheMemory;
|
37
|
-
persistent?: PersistentMemory;
|
38
|
-
};
|
39
|
-
};
|
40
|
-
maxIterations: number;
|
41
|
-
};
|
42
|
-
|
43
|
-
constructor(config: {
|
44
|
-
cache: CacheConfig;
|
45
|
-
orchestrator: {
|
46
|
-
model: LanguageModel;
|
47
|
-
tools: ActionSchema[];
|
48
|
-
memory?: {
|
49
|
-
cache?: CacheMemory;
|
50
|
-
persistent?: PersistentMemory;
|
51
|
-
};
|
52
|
-
};
|
53
|
-
interpreters: Interpreter[];
|
54
|
-
memoryManager: {
|
55
|
-
model: LanguageModel;
|
56
|
-
memory?: {
|
57
|
-
cache?: CacheMemory;
|
58
|
-
persistent?: PersistentMemory;
|
59
|
-
};
|
60
|
-
};
|
61
|
-
callbacks?: QueueCallbacks;
|
62
|
-
maxIterations: number;
|
63
|
-
}) {
|
64
|
-
this.cache = new RedisCache(config.cache);
|
65
|
-
this.config = config;
|
66
|
-
this.agent = new AgentRuntime(
|
67
|
-
config.orchestrator.model,
|
68
|
-
config.orchestrator.tools,
|
69
|
-
config.interpreters,
|
70
|
-
config.cache,
|
71
|
-
config.orchestrator.memory
|
72
|
-
);
|
73
|
-
this.memoryManager = new MemoryManager({
|
74
|
-
model: config.memoryManager.model,
|
75
|
-
memory: {
|
76
|
-
cache: config.memoryManager.memory?.cache ?? undefined,
|
77
|
-
persistent: config.memoryManager.memory?.persistent ?? undefined,
|
78
|
-
},
|
79
|
-
});
|
80
|
-
this.config.maxIterations = 3;
|
81
|
-
}
|
82
|
-
|
83
|
-
public async process(state: State, callbacks?: QueueCallbacks): Promise<any> {
|
84
|
-
console.log("š Processing state:");
|
85
|
-
console.dir(state, { depth: null });
|
86
|
-
let countIterations = 0;
|
87
|
-
const response = await this.agent.process(state);
|
88
|
-
|
89
|
-
const unscheduledActions = response.actions.filter(
|
90
|
-
(action) => !action.scheduler?.isScheduled
|
91
|
-
);
|
92
|
-
// Execute actions if needed
|
93
|
-
if (unscheduledActions?.length > 0 && response.shouldContinue) {
|
94
|
-
console.log("\nš Processing action queue");
|
95
|
-
const queueManager = new ActionQueueManager(
|
96
|
-
this.config.orchestrator.tools,
|
97
|
-
callbacks
|
98
|
-
);
|
99
|
-
const queueItems = QueueItemTransformer.transformActionsToQueueItems(
|
100
|
-
response.actions as ActionData[]
|
101
|
-
);
|
102
|
-
if (!queueItems) {
|
103
|
-
throw new Error("No queue items found");
|
104
|
-
}
|
105
|
-
|
106
|
-
console.log(
|
107
|
-
"š Actions to execute:",
|
108
|
-
queueItems
|
109
|
-
.map((item) => (typeof item === "string" ? item : item.name))
|
110
|
-
.join(", ")
|
111
|
-
);
|
112
|
-
|
113
|
-
queueManager.addToQueue(queueItems);
|
114
|
-
console.log("\nā” Executing actions...");
|
115
|
-
const results = await queueManager.processQueue();
|
116
|
-
console.log("ā
Execution results:", results);
|
117
|
-
|
118
|
-
const updatedNextState: State = {
|
119
|
-
...state,
|
120
|
-
currentContext: state.currentContext,
|
121
|
-
previousActions: [...(state.previousActions || []), ...(results || [])],
|
122
|
-
};
|
123
|
-
|
124
|
-
console.log("\nš Recursively processing with updated state");
|
125
|
-
countIterations++;
|
126
|
-
if (countIterations < this.config.maxIterations) {
|
127
|
-
return this.process(updatedNextState);
|
128
|
-
}
|
129
|
-
}
|
130
|
-
|
131
|
-
if (countIterations >= this.config.maxIterations) {
|
132
|
-
console.log("Max iterations reached");
|
133
|
-
response.shouldContinue = false;
|
134
|
-
console.log("Forcing stop");
|
135
|
-
}
|
136
|
-
|
137
|
-
// Handle final interpretation
|
138
|
-
if (
|
139
|
-
!response.shouldContinue &&
|
140
|
-
state.previousActions?.length &&
|
141
|
-
response.interpreter
|
142
|
-
) {
|
143
|
-
console.log("\nš Analysis complete - generating final interpretation");
|
144
|
-
const interpreter = this.getInterpreter(
|
145
|
-
this.config.interpreters,
|
146
|
-
response.interpreter
|
147
|
-
);
|
148
|
-
console.log("š Selected Interpreter:", interpreter?.name);
|
149
|
-
console.dir(state, { depth: null });
|
150
|
-
const interpretationResult = (await interpreter?.process(
|
151
|
-
"Interpret the analysis results",
|
152
|
-
{
|
153
|
-
...state,
|
154
|
-
results: JSON.stringify(state.previousActions),
|
155
|
-
userRequest: state.currentContext,
|
156
|
-
}
|
157
|
-
)) as { response: string };
|
158
|
-
|
159
|
-
console.log("\nš Final Analysis:", interpretationResult.response);
|
160
|
-
|
161
|
-
const finalState: State = {
|
162
|
-
...state,
|
163
|
-
results: interpretationResult.response,
|
164
|
-
};
|
165
|
-
|
166
|
-
console.log("š Final state:", finalState);
|
167
|
-
}
|
168
|
-
|
169
|
-
// Return the final response at the end of the function
|
170
|
-
const validatedActions = response.actions.map((action) => ({
|
171
|
-
...action,
|
172
|
-
parameters: action.parameters.map((param) => ({
|
173
|
-
...param,
|
174
|
-
value: param.value ?? null, // Set a default value if undefined
|
175
|
-
})),
|
176
|
-
}));
|
177
|
-
|
178
|
-
const result = {
|
179
|
-
...response,
|
180
|
-
actions: validatedActions,
|
181
|
-
results: JSON.stringify(state.previousActions),
|
182
|
-
};
|
183
|
-
if (!result.shouldContinue) {
|
184
|
-
await this.memoryManager.process(state, JSON.stringify(result));
|
185
|
-
}
|
186
|
-
return result;
|
187
|
-
}
|
188
|
-
|
189
|
-
private getInterpreter(interpreters: Interpreter[], name: string) {
|
190
|
-
return interpreters.find((interpreter) => interpreter.name === name);
|
191
|
-
}
|
192
|
-
|
193
|
-
public addListener(
|
194
|
-
id: string,
|
195
|
-
url: string,
|
196
|
-
subscriptionMessageFactory: () => string,
|
197
|
-
callback: (data: any, agentContext: Agent) => Promise<void>
|
198
|
-
): void {
|
199
|
-
if (this.listeners.has(id)) {
|
200
|
-
console.warn(`WebSocket with ID ${id} already exists.`);
|
201
|
-
return;
|
202
|
-
}
|
203
|
-
|
204
|
-
const socket = new WebSocket(url);
|
205
|
-
|
206
|
-
const wrappedCallback = async (data: any) => {
|
207
|
-
await callback(data, this);
|
208
|
-
};
|
209
|
-
|
210
|
-
socket.on("open", () => {
|
211
|
-
console.log(`š WebSocket connected for ID: ${id}`);
|
212
|
-
|
213
|
-
// Envoie le message d'abonnement si une factory est fournie
|
214
|
-
if (subscriptionMessageFactory) {
|
215
|
-
const subscriptionMessage = subscriptionMessageFactory();
|
216
|
-
socket.send(subscriptionMessage);
|
217
|
-
console.log(
|
218
|
-
`š” Sent subscription message for ID ${id}:`,
|
219
|
-
subscriptionMessage
|
220
|
-
);
|
221
|
-
}
|
222
|
-
});
|
223
|
-
|
224
|
-
socket.on("message", async (message: string) => {
|
225
|
-
console.log(`šØ Message received for WebSocket ID ${id}:`, message);
|
226
|
-
try {
|
227
|
-
const data = JSON.parse(message);
|
228
|
-
await wrappedCallback(data);
|
229
|
-
} catch (error) {
|
230
|
-
console.error(`ā Error in callback for WebSocket ID ${id}:`, error);
|
231
|
-
}
|
232
|
-
});
|
233
|
-
|
234
|
-
socket.on("error", (error) => {
|
235
|
-
console.error(`ā WebSocket error for ID ${id}:`, error);
|
236
|
-
});
|
237
|
-
|
238
|
-
socket.on("close", () => {
|
239
|
-
console.log(`š WebSocket closed for ID: ${id}`);
|
240
|
-
});
|
241
|
-
|
242
|
-
this.listeners.set(id, { socket, callback: wrappedCallback });
|
243
|
-
}
|
244
|
-
}
|