goblin-agents 0.1.11 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -220,18 +220,6 @@ Le module peut également interagir avec d'autres services Goblin via le systèm
220
220
 
221
221
  Ce fichier est le point d'entrée du module, exportant les commandes Xcraft pour l'acteur AiAgent. Il importe l'acteur et sa logique depuis le fichier principal et les expose au système Xcraft via `Elf.birth()`.
222
222
 
223
- ### `config.js`
224
-
225
- Ce fichier définit la configuration du module, permettant de spécifier :
226
-
227
- - La version des agents (`version`)
228
- - Le profil par défaut des agents (`defaultProfile`)
229
- - Les paramètres par défaut (`defaultSettings`)
230
- - Les profils pour remplacer les paramètres (`profiles`)
231
- - Les paramètres par nom (`settings`)
232
-
233
- Cette configuration permet de personnaliser le comportement des agents au niveau de l'application.
234
-
235
223
  ### `lib/llm/aiAgent.js`
236
224
 
237
225
  Ce fichier contient la définition complète de l'acteur AiAgent, avec :
@@ -278,47 +266,27 @@ L'acteur AiAgent suit le cycle de vie standard des acteurs Elf Archetype :
278
266
 
279
267
  #### Méthodes publiques
280
268
 
281
- **`create(id, desktopId, agentState)`** - Crée un nouvel agent avec l'ID et l'état spécifiés. Persiste automatiquement l'agent après création.
282
-
283
- **`patch(agentState)`** - Met à jour l'état de l'agent avec les propriétés fournies et persiste les changements.
284
-
285
- **`upgrade(version, agentState)`** - Met à niveau l'agent vers une nouvelle version avec l'état spécifié, uniquement si la version est supérieure à la version actuelle.
286
-
287
- **`gen(prompt)`** - Génère du texte à partir d'un prompt en utilisant le modèle configuré de l'agent.
288
-
289
- **`reset(contextId, save)`** - Réinitialise l'historique des messages pour un contexte spécifique. Si aucun contextId n'est fourni, réinitialise tous les contextes.
290
-
291
- **`readPDFpages(pdfPath)`** - Extrait le texte des pages d'un document PDF en utilisant l'OCR via un modèle multimodal.
292
-
293
- **`embed(rawText)`** - Génère un embedding vectoriel pour un texte donné, retourné sous forme de littéral SQL hexadécimal.
294
-
295
- **`embedInBatch(rawTexts)`** - Génère des embeddings vectoriels pour plusieurs textes en une seule requête, optimisé pour les traitements par lots.
296
-
297
- **`set(contextId, messages)`** - Définit directement l'historique des messages pour un contexte spécifique.
298
-
299
- **`chat(contextId, question, userDesktopId, sessionId)`** - Engage une conversation avec l'agent dans un contexte spécifique. Gère automatiquement l'historique et les appels d'outils.
300
-
301
- **`ask(contextId, question, questionId)`** - Pose une question à l'agent avec streaming de la réponse (uniquement pour Ollama). Émet des événements pour chaque partie de la réponse.
302
-
303
- **`resumeExchange(resumePrompt, contextId)`** - Reprend un échange existant avec un nouveau prompt système, en utilisant l'historique du contexte comme base.
304
-
305
- **`react(reactPrompt, contextId, question)`** - Utilise le paradigme ReAct (Reasoning and Acting) pour permettre à l'agent de raisonner et d'agir de manière autonome.
306
-
307
- **`callAgent(contextId, agentId, action, feedId)`** - Appelle un autre agent pour effectuer une action spécifique dans le cadre d'une orchestration multi-agents.
308
-
309
- **`addAssistantMessage(contextId, message)`** - Ajoute un message de l'assistant à l'historique d'un contexte spécifique.
310
-
311
- **`change(path, newValue)`** - Modifie une propriété spécifique de l'état de l'agent avec gestion automatique des types pour certains paramètres.
312
-
313
- **`getUserChatContextHistory(contextId, filterTool)`** - Récupère l'historique des messages pour un contexte spécifique avec option de filtrage des messages d'outils.
314
-
315
- **`getBaseSettings()`** - Retourne les paramètres de base de l'agent (provider, host, headers, model).
316
-
317
- **`getUsability()`** - Retourne l'état d'utilisabilité de l'agent.
318
-
319
- **`trash()`** - Marque l'agent comme supprimé en changeant son statut meta à 'trashed'.
320
-
321
- **`save()`** - Persiste l'état actuel de l'agent sur le disque.
269
+ - **`create(id, desktopId, agentState)`** — Crée un nouvel agent avec l'ID et l'état spécifiés. Persiste automatiquement l'agent après création.
270
+ - **`patch(agentState)`** — Met à jour l'état de l'agent avec les propriétés fournies et persiste les changements.
271
+ - **`upgrade(version, agentState)`** — Met à niveau l'agent vers une nouvelle version avec l'état spécifié, uniquement si la version est supérieure à la version actuelle.
272
+ - **`gen(prompt)`** — Génère du texte à partir d'un prompt en utilisant le modèle configuré de l'agent.
273
+ - **`reset(contextId, save=false)`** — Réinitialise l'historique des messages pour un contexte spécifique. Si aucun contextId n'est fourni, réinitialise tous les contextes.
274
+ - **`readPDFpages(pdfPath)`** — Extrait le texte des pages d'un document PDF en utilisant l'OCR via un modèle multimodal.
275
+ - **`embed(rawText)`** — Génère un embedding vectoriel pour un texte donné, retourné sous forme de littéral SQL hexadécimal.
276
+ - **`embedInBatch(rawTexts=[])`** — Génère des embeddings vectoriels pour plusieurs textes en une seule requête, optimisé pour les traitements par lots avec gestion des verrous.
277
+ - **`set(contextId, messages)`** — Définit directement l'historique des messages pour un contexte spécifique.
278
+ - **`chat(contextId, question, userDesktopId, sessionId=null)`** — Engage une conversation avec l'agent dans un contexte spécifique. Gère automatiquement l'historique et les appels d'outils.
279
+ - **`ask(contextId, question, questionId)`** — Pose une question à l'agent avec streaming de la réponse (uniquement pour Ollama). Émet des événements pour chaque partie de la réponse.
280
+ - **`resumeExchange(resumePrompt, contextId)`** — Reprend un échange existant avec un nouveau prompt système, en utilisant l'historique du contexte comme base.
281
+ - **`react(reactPrompt, contextId, question)`** — Utilise le paradigme ReAct (Reasoning and Acting) pour permettre à l'agent de raisonner et d'agir de manière autonome.
282
+ - **`callAgent(contextId, agentId, action, feedId)`** — Appelle un autre agent pour effectuer une action spécifique dans le cadre d'une orchestration multi-agents.
283
+ - **`addAssistantMessage(contextId, message)`** — Ajoute un message de l'assistant à l'historique d'un contexte spécifique.
284
+ - **`change(path, newValue)`** — Modifie une propriété spécifique de l'état de l'agent avec gestion automatique des types pour certains paramètres.
285
+ - **`getUserChatContextHistory(contextId, filterTool=true)`** — Récupère l'historique des messages pour un contexte spécifique avec option de filtrage des messages d'outils.
286
+ - **`getBaseSettings()`** — Retourne les paramètres de base de l'agent (provider, host, headers, model).
287
+ - **`getUsability()`** — Retourne l'état d'utilisabilité de l'agent.
288
+ - **`trash()`** — Marque l'agent comme supprimé en changeant son statut meta à 'trashed'.
289
+ - **`save()`** — Persiste l'état actuel de l'agent sur le disque.
322
290
 
323
291
  ### `lib/llm/providers.js`
324
292
 
@@ -357,41 +325,32 @@ Ce fichier contient un ensemble complet d'utilitaires pour le traitement de text
357
325
 
358
326
  #### Traitement de documents PDF
359
327
 
360
- **`getPDFImages(pdfPath)`** - Convertit les pages d'un PDF en images base64 pour l'OCR avec des options optimisées pour la qualité du texte.
361
-
362
- **`OCR_SYSTEM_PROMPT`** - Prompt système spécialisé pour guider les modèles multimodaux dans l'extraction de texte à partir d'images.
328
+ - **`getPDFImages(pdfPath)`** — Convertit les pages d'un PDF en images base64 pour l'OCR avec des options optimisées pour la qualité du texte.
329
+ - **`OCR_SYSTEM_PROMPT`** — Prompt système spécialisé pour guider les modèles multimodaux dans l'extraction de texte à partir d'images.
363
330
 
364
331
  #### Traitement de texte et HTML
365
332
 
366
- **`cleanHtmlContent(html)`** - Nettoie le contenu HTML en supprimant les balises et en normalisant les espaces.
367
-
368
- **`simplifyHtml(html)`** - Simplifie le HTML en gardant uniquement les éléments sûrs via sanitize-html.
369
-
370
- **`extractTitlesAndContent(html)`** - Extrait intelligemment les titres et le contenu d'un document HTML en préservant la structure.
371
-
372
- **`html2chunks(html, chunkSize, chunkOverlap)`** - Découpe un document HTML en chunks en utilisant RecursiveCharacterTextSplitter de LangChain.
333
+ - **`cleanHtmlContent(html)`** — Nettoie le contenu HTML en supprimant les balises et en normalisant les espaces.
334
+ - **`simplifyHtml(html)`** — Simplifie le HTML en gardant uniquement les éléments sûrs via sanitize-html.
335
+ - **`extractTitlesAndContent(html)`** — Extrait intelligemment les titres et le contenu d'un document HTML en préservant la structure.
336
+ - **`html2chunks(html, chunkSize=300, chunkOverlap=0)`** — Découpe un document HTML en chunks en utilisant RecursiveCharacterTextSplitter de LangChain.
373
337
 
374
338
  #### Gestion des tokens et découpage
375
339
 
376
- **`estimateTokenCount(text)`** - Estime le nombre de tokens d'un texte (approximation basée sur les mots × 1.33).
377
-
378
- **`splitLongText(text, maxLength, baseId)`** - Découpe un texte long en segments de taille maximale en préservant les mots entiers.
379
-
380
- **`sliceText(text, chunkSize)`** - Découpe un texte en chunks en respectant les limites de phrases.
381
-
382
- **`groupSentences(text, maxSize)`** - Groupe les phrases en chunks de taille optimale pour les modèles de langage.
340
+ - **`estimateTokenCount(text)`** — Estime le nombre de tokens d'un texte (approximation basée sur les mots × 1.33).
341
+ - **`splitLongText(text, maxLength, baseId)`** — Découpe un texte long en segments de taille maximale en préservant les mots entiers.
342
+ - **`sliceText(text, chunkSize)`** — Découpe un texte en chunks en respectant les limites de phrases.
343
+ - **`groupSentences(text, maxSize)`** — Groupe les phrases en chunks de taille optimale pour les modèles de langage.
383
344
 
384
345
  #### Traitement par lots et optimisation
385
346
 
386
- **`chunkArray(array, size)`** - Divise un tableau en sous-tableaux de taille spécifiée pour le traitement par lots.
387
-
388
- **`embedChunksInBatch(agent, allChunks, batchSize)`** - Traite les embeddings par lots en associant chaque embedding à son contenu d'origine.
389
-
390
- **`buildPromptFromArticlesMulti(initialQuestion, questionsWithArticles, maxTotalTokens)`** - Construit des prompts optimisés à partir de multiples articles en respectant les limites de tokens.
347
+ - **`chunkArray(array, size)`** — Divise un tableau en sous-tableaux de taille spécifiée pour le traitement par lots.
348
+ - **`embedChunksInBatch(agent, allChunks, batchSize=50)`** — Traite les embeddings par lots en associant chaque embedding à son contenu d'origine.
349
+ - **`buildPromptFromArticlesMulti(initialQuestion, questionsWithArticles, maxTotalTokens)`** — Construit des prompts optimisés à partir de multiples articles en respectant les limites de tokens.
391
350
 
392
351
  #### Utilitaires de conversion
393
352
 
394
- **`vectorToSqlLiteral(vec)`** - Convertit un vecteur Float32Array en littéral SQL hexadécimal pour le stockage en base de données.
353
+ - **`vectorToSqlLiteral(vec)`** — Convertit un vecteur Float32Array en littéral SQL hexadécimal pour le stockage en base de données.
395
354
 
396
355
  Ces utilitaires sont essentiels pour préparer les données avant de les envoyer aux modèles de langage et pour traiter les résultats. Ils permettent notamment de gérer les contraintes de taille de contexte des modèles en découpant intelligemment les textes longs tout en préservant la cohérence sémantique.
397
356
 
package/lib/llm/utils.js CHANGED
@@ -2,6 +2,19 @@ const HtmlEntities = require('html-entities');
2
2
  const sanitizeHtml = require('sanitize-html');
3
3
  const {RecursiveCharacterTextSplitter} = require('@langchain/textsplitters');
4
4
 
5
+ function loadPdfToPngConverter() {
6
+ try {
7
+ return require('pdf-to-png-converter');
8
+ } catch (ex) {
9
+ if (ex.code === 'MODULE_NOT_FOUND') {
10
+ throw new Error(
11
+ 'You must add explicitly "pdf-to-png-converter" as dependency to your project'
12
+ );
13
+ }
14
+ throw ex;
15
+ }
16
+ }
17
+
5
18
  const MAX_SEGMENT_LENGTH = 500;
6
19
 
7
20
  const OCR_SYSTEM_PROMPT = `Effectue une reconnaissance optique de caractères (OCR) sur cette image et extraits-en le texte lisible.
@@ -12,7 +25,7 @@ Corrige les erreurs évidentes et restitue un texte propre et fidèle à l'origi
12
25
  Ta réponse contient uniquement le texte lisible.`;
13
26
 
14
27
  const getPDFImages = async (pdfPath) => {
15
- const {pdfToPng} = require('pdf-to-png-converter');
28
+ const {pdfToPng} = loadPdfToPngConverter();
16
29
  // The function accepts PDF file path or a Buffer
17
30
  const pages = await pdfToPng(pdfPath, {
18
31
  disableFontFace: true, // When `false`, fonts will be rendered using a built-in font renderer that constructs the glyphs with primitive path commands. Default value is true.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "goblin-agents",
3
- "version": "0.1.11",
3
+ "version": "1.0.1",
4
4
  "description": "AI Agents framework",
5
5
  "author": "Samuel Loup",
6
6
  "license": "MIT",
@@ -15,10 +15,9 @@
15
15
  "dependencies": {
16
16
  "@langchain/core": "^0.3.42",
17
17
  "@langchain/textsplitters": "^0.1.0",
18
- "fs-extra": "^9.1.0",
18
+ "fs-extra": "^11.3.0",
19
19
  "html-entities": "^2.4.0",
20
20
  "ollama": "^0.5.10",
21
- "pdf-to-png-converter": "^3.6.5",
22
21
  "sanitize-html": "^2.12.1",
23
22
  "xcraft-core-goblin": "^5.8.0",
24
23
  "xcraft-core-utils": "^4.14.0"