agentic-api 2.0.31 → 2.0.491

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 (102) hide show
  1. package/dist/src/agents/agents.example.js +21 -22
  2. package/dist/src/agents/authentication.js +1 -2
  3. package/dist/src/agents/prompts.d.ts +5 -4
  4. package/dist/src/agents/prompts.js +44 -87
  5. package/dist/src/agents/reducer.core.d.ts +24 -2
  6. package/dist/src/agents/reducer.core.js +125 -35
  7. package/dist/src/agents/reducer.loaders.d.ts +55 -1
  8. package/dist/src/agents/reducer.loaders.js +114 -1
  9. package/dist/src/agents/reducer.types.d.ts +45 -2
  10. package/dist/src/agents/semantic.js +1 -2
  11. package/dist/src/agents/simulator.d.ts +11 -3
  12. package/dist/src/agents/simulator.executor.d.ts +14 -4
  13. package/dist/src/agents/simulator.executor.js +81 -23
  14. package/dist/src/agents/simulator.js +128 -42
  15. package/dist/src/agents/simulator.prompts.d.ts +9 -7
  16. package/dist/src/agents/simulator.prompts.js +66 -86
  17. package/dist/src/agents/simulator.types.d.ts +23 -5
  18. package/dist/src/agents/simulator.utils.d.ts +7 -2
  19. package/dist/src/agents/simulator.utils.js +31 -11
  20. package/dist/src/agents/system.js +1 -2
  21. package/dist/src/execute/helpers.d.ts +75 -0
  22. package/dist/src/execute/helpers.js +139 -0
  23. package/dist/src/execute/index.d.ts +11 -0
  24. package/dist/src/execute/index.js +44 -0
  25. package/dist/src/execute/legacy.d.ts +46 -0
  26. package/dist/src/execute/legacy.js +460 -0
  27. package/dist/src/execute/modelconfig.d.ts +19 -0
  28. package/dist/src/execute/modelconfig.js +56 -0
  29. package/dist/src/execute/responses.d.ts +55 -0
  30. package/dist/src/execute/responses.js +594 -0
  31. package/dist/src/execute/shared.d.ts +83 -0
  32. package/dist/src/execute/shared.js +188 -0
  33. package/dist/src/index.d.ts +1 -1
  34. package/dist/src/index.js +2 -2
  35. package/dist/src/{princing.openai.d.ts → pricing.llm.d.ts} +6 -0
  36. package/dist/src/pricing.llm.js +255 -0
  37. package/dist/src/prompts.d.ts +13 -4
  38. package/dist/src/prompts.js +221 -114
  39. package/dist/src/rag/embeddings.d.ts +36 -18
  40. package/dist/src/rag/embeddings.js +131 -128
  41. package/dist/src/rag/index.d.ts +5 -5
  42. package/dist/src/rag/index.js +14 -17
  43. package/dist/src/rag/parser.d.ts +2 -1
  44. package/dist/src/rag/parser.js +11 -14
  45. package/dist/src/rag/rag.examples.d.ts +27 -0
  46. package/dist/src/rag/rag.examples.js +151 -0
  47. package/dist/src/rag/rag.manager.d.ts +383 -0
  48. package/dist/src/rag/rag.manager.js +1390 -0
  49. package/dist/src/rag/types.d.ts +128 -12
  50. package/dist/src/rag/types.js +100 -1
  51. package/dist/src/rag/usecase.d.ts +37 -0
  52. package/dist/src/rag/usecase.js +96 -7
  53. package/dist/src/rules/git/git.e2e.helper.js +22 -2
  54. package/dist/src/rules/git/git.health.d.ts +61 -2
  55. package/dist/src/rules/git/git.health.js +333 -11
  56. package/dist/src/rules/git/index.d.ts +2 -2
  57. package/dist/src/rules/git/index.js +13 -1
  58. package/dist/src/rules/git/repo.d.ts +160 -0
  59. package/dist/src/rules/git/repo.js +777 -0
  60. package/dist/src/rules/git/repo.pr.js +117 -13
  61. package/dist/src/rules/git/repo.tools.d.ts +22 -1
  62. package/dist/src/rules/git/repo.tools.js +50 -1
  63. package/dist/src/rules/types.d.ts +27 -14
  64. package/dist/src/rules/utils.matter.d.ts +0 -4
  65. package/dist/src/rules/utils.matter.js +35 -7
  66. package/dist/src/scrapper.d.ts +15 -22
  67. package/dist/src/scrapper.js +58 -110
  68. package/dist/src/stategraph/index.d.ts +1 -1
  69. package/dist/src/stategraph/stategraph.d.ts +56 -2
  70. package/dist/src/stategraph/stategraph.js +134 -6
  71. package/dist/src/stategraph/stategraph.storage.js +8 -0
  72. package/dist/src/stategraph/types.d.ts +27 -0
  73. package/dist/src/types.d.ts +46 -9
  74. package/dist/src/types.js +8 -7
  75. package/dist/src/usecase.d.ts +11 -2
  76. package/dist/src/usecase.js +27 -35
  77. package/dist/src/utils.d.ts +32 -18
  78. package/dist/src/utils.js +87 -129
  79. package/package.json +10 -3
  80. package/dist/src/agents/digestor.test.d.ts +0 -1
  81. package/dist/src/agents/digestor.test.js +0 -45
  82. package/dist/src/agents/reducer.example.d.ts +0 -28
  83. package/dist/src/agents/reducer.example.js +0 -118
  84. package/dist/src/agents/reducer.process.d.ts +0 -16
  85. package/dist/src/agents/reducer.process.js +0 -143
  86. package/dist/src/agents/reducer.tools.d.ts +0 -29
  87. package/dist/src/agents/reducer.tools.js +0 -157
  88. package/dist/src/agents/simpleExample.d.ts +0 -3
  89. package/dist/src/agents/simpleExample.js +0 -38
  90. package/dist/src/agents/system-review.d.ts +0 -5
  91. package/dist/src/agents/system-review.js +0 -181
  92. package/dist/src/agents/systemReview.d.ts +0 -4
  93. package/dist/src/agents/systemReview.js +0 -22
  94. package/dist/src/execute.d.ts +0 -49
  95. package/dist/src/execute.js +0 -564
  96. package/dist/src/princing.openai.js +0 -54
  97. package/dist/src/rag/tools.d.ts +0 -76
  98. package/dist/src/rag/tools.js +0 -196
  99. package/dist/src/rules/user.mapper.d.ts +0 -61
  100. package/dist/src/rules/user.mapper.js +0 -160
  101. package/dist/src/rules/utils/slug.d.ts +0 -22
  102. package/dist/src/rules/utils/slug.js +0 -35
@@ -33,55 +33,15 @@ class Embeddings {
33
33
  }
34
34
  }
35
35
  /**
36
- * Retourne le prochain ID documentaire stable et met à jour metadata.docLastID.
37
- * Pré-conditions: this.mapping et this.metadata sont chargés.
36
+ * Extrait et sauvegarde les use cases d'un document
37
+ * Utilise la fonction standalone pour la compatibilité
38
+ *
39
+ * @param document Document parsé
40
+ * @returns Les queries extraites avec leur coût
41
+ * @deprecated Utiliser extractAndSaveDocumentUseCases de usecase.ts directement
38
42
  */
39
- getNextID() {
40
- // Si non initialisé, partir du plus grand ID du mapping
41
- if (this.metadata.docLastID == null || this.metadata.docLastID <= 0) {
42
- const maxFromMapping = Object.keys(this.mapping.mapping || {})
43
- .map(k => parseInt(k, 10))
44
- .filter(n => !isNaN(n))
45
- .reduce((a, b) => Math.max(a, b), 999);
46
- this.metadata.docLastID = maxFromMapping + 1;
47
- }
48
- else {
49
- this.metadata.docLastID = this.metadata.docLastID + 1;
50
- }
51
- const next = this.metadata.docLastID;
52
- this.saveMetadata(this.metadata);
53
- return next;
54
- }
55
- /**
56
- * Retourne l'ID documentaire pour un fichier. Si non trouvé, attribue un nouvel ID.
57
- * Stratégie: utiliser le mapping id -> "filename#section-0".
58
- */
59
- getOrAssignDocumentID(file) {
60
- const base = path_1.default.basename(file, path_1.default.extname(file));
61
- // Chercher un ID existant dans le mapping (section-0 comme ancrage documentaire)
62
- const found = Object.entries(this.mapping.mapping || {}).find(([id, ref]) => {
63
- return typeof ref === 'string' && ref.startsWith(`${base}#section-0`);
64
- });
65
- if (found) {
66
- return parseInt(found[0], 10);
67
- }
68
- // Sinon, générer un nouvel ID documentaire
69
- return this.getNextID();
70
- }
71
43
  async extractAndSaveDocumentUseCases(document) {
72
- const { queries, cost } = await (0, usecase_1.extractDocumentUseCases)(document);
73
- const filename = path_1.default.basename(document.filename, path_1.default.extname(document.filename));
74
- const docQueries = {
75
- type: 'use-cases',
76
- version: this.config.version,
77
- tag: this.config.tag,
78
- source: document.filename,
79
- file: (0, utils_1.toSlug)(filename) + '.json',
80
- cost,
81
- queries
82
- };
83
- (0, usecase_1.saveUseCases)(docQueries, this.config);
84
- return docQueries;
44
+ return (0, usecase_1.extractAndSaveDocumentUseCases)(document, this.config.baseDir, this.config.version, this.config.tag);
85
45
  }
86
46
  /**
87
47
  * Charge les documents du RAG
@@ -102,6 +62,7 @@ class Embeddings {
102
62
  // throw error;
103
63
  // }
104
64
  const content = (0, fs_1.readFileSync)(filePath, 'utf8');
65
+ // getSections() validera que l'ID est présent dans le matter
105
66
  const parsedDocument = (0, parser_1.getSections)(content, file);
106
67
  return parsedDocument;
107
68
  }
@@ -117,7 +78,7 @@ class Embeddings {
117
78
  */
118
79
  async loadDocumentUseCases(document) {
119
80
  const filename = path_1.default.basename(document.filename, path_1.default.extname(document.filename));
120
- return (0, usecase_1.loadUseCases)((0, utils_1.toSlug)(filename) + '.json', this.config);
81
+ return (0, usecase_1.loadUseCases)((0, utils_1.toSlug)(filename) + '.query.json', this.config);
121
82
  }
122
83
  async listDocumentsOnRAG() {
123
84
  const filesWithSection = Object.values(this.mapping?.mapping || {});
@@ -204,6 +165,81 @@ class Embeddings {
204
165
  }
205
166
  return this.vectorsIndex !== null && this.metadata !== null && this.mapping !== null;
206
167
  }
168
+ /**
169
+ * Met à jour l'embedding avec une nouvelle configuration
170
+ * Recharge l'index, les métadonnées et le mapping depuis les nouveaux fichiers
171
+ *
172
+ * Cette méthode est appelée par RAGManager.notifyUpdate() quand un RAG est modifié
173
+ *
174
+ * FIXME: Gérer le cas où l'embedding est en cours d'exécution (recherche/indexation)
175
+ * Actuellement, l'update est appliqué immédiatement sans vérifier si l'embedding est busy.
176
+ * Solutions possibles:
177
+ * - Ajouter un flag `isBusy` pour bloquer les updates pendant une recherche
178
+ * - Implémenter une queue d'updates avec retry
179
+ * - Utiliser un système de locks/mutex
180
+ *
181
+ * @param newConfig Nouvelle configuration RAG
182
+ *
183
+ * @example
184
+ * ```typescript
185
+ * // Appelé automatiquement par RAGManager après un build ou rename
186
+ * embedding.update(newConfig);
187
+ * ```
188
+ */
189
+ update(newConfig) {
190
+ // Sauvegarder l'ancienne config pour rollback en cas d'erreur
191
+ const oldConfig = this.config;
192
+ const oldVectorsFile = this.vectorsFile;
193
+ console.log(`\n 🔧 Embeddings.update() appelé`);
194
+ console.log(` Ancien baseDir: ${oldConfig.baseDir}`);
195
+ console.log(` Nouveau baseDir: ${newConfig.baseDir}`);
196
+ try {
197
+ // Mettre à jour la configuration
198
+ this.config = newConfig;
199
+ this.vectorsFile = path_1.default.join(newConfig.baseDir, types_1.RAG_FILES.VECTORS);
200
+ this.space = newConfig.dimensions || 1536;
201
+ this.distance = newConfig.distance || 'cosine';
202
+ console.log(` Nouveau vectorsFile: ${this.vectorsFile}`);
203
+ console.log(` Fichier existe: ${(0, fs_1.existsSync)(this.vectorsFile)}`);
204
+ // Recharger l'index si ce n'est pas en mode inmemory
205
+ if (!this.inmemory) {
206
+ // Vérifier que les fichiers existent
207
+ if (!(0, fs_1.existsSync)(this.vectorsFile)) {
208
+ throw new Error(`Fichier d'index manquant: ${this.vectorsFile}`);
209
+ }
210
+ console.log(` 📥 Rechargement de l'index...`);
211
+ // Recharger l'index
212
+ this.loadIndex();
213
+ console.log(` 📥 Rechargement des métadonnées et mapping...`);
214
+ // Recharger les métadonnées et le mapping
215
+ this.loadMetadata();
216
+ this.loadMapping();
217
+ console.log(` ✅ Embedding mis à jour avec nouvelle config: ${newConfig.baseDir}`);
218
+ }
219
+ }
220
+ catch (error) {
221
+ // Rollback en cas d'erreur
222
+ console.error('❌ Erreur lors de la mise à jour de l\'embedding, rollback:', error);
223
+ this.config = oldConfig;
224
+ this.vectorsFile = oldVectorsFile;
225
+ this.space = oldConfig.dimensions || 1536;
226
+ this.distance = oldConfig.distance || 'cosine';
227
+ // Essayer de recharger l'ancienne config
228
+ try {
229
+ if (!this.inmemory && (0, fs_1.existsSync)(this.vectorsFile)) {
230
+ this.loadIndex();
231
+ this.loadMetadata();
232
+ this.loadMapping();
233
+ }
234
+ }
235
+ catch (rollbackError) {
236
+ console.error('❌ Erreur critique lors du rollback:', rollbackError);
237
+ // Réinitialiser complètement en dernier recours
238
+ this.resetKnn();
239
+ }
240
+ throw new Error(`Impossible de mettre à jour l'embedding: ${error}`);
241
+ }
242
+ }
207
243
  /**
208
244
  * Réinitialise l'index
209
245
  */
@@ -215,13 +251,18 @@ class Embeddings {
215
251
  /**
216
252
  * Crée un nouvel index HierarchicalNSW avec documents parsés
217
253
  * ou met à jour l'index existant avec de nouveaux documents
254
+ *
255
+ * @returns IndexBuildResult contenant les données nécessaires pour créer les métadonnées RAG
256
+ *
257
+ * Note: Cette méthode ne sauvegarde plus les métadonnées directement.
258
+ * RAGManager est responsable de créer et sauvegarder les métadonnées
259
+ * à partir du résultat retourné.
218
260
  */
219
261
  async indexFromDocuments(documents, options) {
220
262
  const ef = options?.ef || this.config.hnswConfig?.ef || 200;
221
263
  const m = options?.m || this.config.hnswConfig?.m || 32;
222
264
  const isUpdate = options?.update || false;
223
265
  const prepare = options?.prepare || ((input) => input);
224
- let startId = this.config.startId || 1000;
225
266
  const openai = (0, utils_1.openaiInstance)();
226
267
  const vectors = {};
227
268
  const documentRefs = {};
@@ -230,19 +271,19 @@ class Embeddings {
230
271
  if (isUpdate && this.mapping && this.metadata) {
231
272
  Object.assign(documentRefs, this.mapping.mapping);
232
273
  Object.assign(documentReferences, this.metadata.documents);
233
- // Trouver le prochain ID disponible
234
- const existingIds = Object.keys(documentRefs).map(id => parseInt(id));
235
- startId = existingIds.length ? Math.max(...existingIds) + 1 : startId;
236
274
  }
237
- console.log(`Traitement de ${documents.length} documents...`);
275
+ if (this.debug)
276
+ console.log(`Traitement de ${documents.length} documents...`);
238
277
  for (const doc of documents) {
239
278
  const filename = path_1.default.basename(doc.filename, path_1.default.extname(doc.filename));
240
279
  process.stdout.write(`Traitement: ${filename}`);
241
- const { sections } = doc;
280
+ const { sections, matter } = doc;
242
281
  if (!sections.length) {
243
282
  console.log(`❌ Aucune section trouvée dans ${filename}`);
244
283
  continue;
245
284
  }
285
+ // ID de base du document
286
+ const baseId = matter.id;
246
287
  // Traiter chaque section
247
288
  for (let index = 0; index < sections.length; index++) {
248
289
  const section = sections[index];
@@ -250,10 +291,14 @@ class Embeddings {
250
291
  if (!hasEnoughContent) {
251
292
  continue;
252
293
  }
294
+ // ✅ NOUVEAU: ID calculé = matter.id * 100 + sectionIndex
295
+ // Permet de supprimer facilement toutes les sections d'un document
296
+ // en recherchant les IDs entre (matter.id * 100) et (matter.id * 100 + 99)
297
+ // Limite: 100 sections par document (0-99)
298
+ const vectorId = baseId * 100 + index;
253
299
  // Vérifier si cette section existe déjà (pour les mises à jour)
254
300
  const ref = `${filename}#section-${index}`;
255
- const existingId = Object.keys(documentRefs).find(id => documentRefs[id] === ref);
256
- if (isUpdate && existingId) {
301
+ if (isUpdate && documentRefs[vectorId]) {
257
302
  console.log(`Section ${ref} déjà indexée, ignorée`);
258
303
  continue;
259
304
  }
@@ -266,24 +311,19 @@ class Embeddings {
266
311
  });
267
312
  const normalizedVectors = (0, parser_1.l2Normalize)(embedding.data[0].embedding);
268
313
  // Stocker avec le nouveau format d'ID
269
- vectors[startId] = normalizedVectors;
270
- documentRefs[startId] = ref;
314
+ vectors[vectorId] = normalizedVectors;
315
+ documentRefs[vectorId] = ref;
271
316
  // Créer la référence de document
272
- documentReferences[startId] = {
317
+ documentReferences[vectorId] = {
273
318
  filename: filename + '.md',
274
319
  sectionIndex: index,
275
320
  ref,
276
321
  title: section.title || `Section ${index}`,
277
322
  content: section.content,
278
- metadata: doc.matter
323
+ metadata: matter
279
324
  };
280
- startId++;
281
325
  process.stdout.write(hasEnoughContent ? ':' : '.');
282
326
  }
283
- //
284
- // let enough room for new sections on future updates
285
- const pad = 20 - sections.length;
286
- startId += pad;
287
327
  console.log(' done');
288
328
  }
289
329
  // Créer ou mettre à jour l'index HierarchicalNSW
@@ -308,16 +348,13 @@ class Embeddings {
308
348
  }
309
349
  }
310
350
  else {
311
- //
312
- // FIXME this is not working, ids must be restored from de RAGMapping ids <=> documentRefs
313
- // Mettre à jour l'index existant
351
+ // Mettre à jour l'index existant avec de nouveaux vecteurs
314
352
  console.log(`Mise à jour de l'index avec ${newVectors.length} nouveaux vecteurs`);
315
- const replaceDeleted = true;
316
353
  for (const item of newVectors) {
317
354
  const id = parseInt(item);
318
- // le point existant n’apparaît plus
319
- this.vectorsIndex.markDelete(id);
320
- this.vectorsIndex.addPoint(vectors[item], id, replaceDeleted);
355
+ // Pour les nouveaux vecteurs, on les ajoute simplement sans markDelete
356
+ // car ils n'existaient pas auparavant dans l'index
357
+ this.vectorsIndex.addPoint(vectors[item], id);
321
358
  }
322
359
  }
323
360
  // Sauvegarder l'index
@@ -328,26 +365,14 @@ class Embeddings {
328
365
  // Créer le tag de version
329
366
  const tag = this.config.tag || (0, types_1.generateVersionTag)();
330
367
  const version = this.config.version || '1.0';
331
- // Créer et sauvegarder le mapping
332
- const mapping = {
333
- type: 'mapping',
334
- version,
335
- tag,
336
- mapping: documentRefs,
337
- createdAt: new Date().toISOString()
338
- };
339
- this.saveMapping(mapping);
340
- // Créer et sauvegarder les métadonnées
341
- const metadata = {
368
+ // Assigner les métadonnées en mémoire pour que les méthodes comme listDocumentsOnRAG() fonctionnent
369
+ // Même si on ne sauvegarde plus sur disque, les données doivent être en mémoire
370
+ this.metadata = {
342
371
  version,
343
372
  tag,
344
373
  createdAt: new Date().toISOString(),
345
374
  config: this.config,
346
375
  documents: documentReferences,
347
- checkpoint: {
348
- branch: options?.branch || '',
349
- hash: options?.lastCommit || ''
350
- },
351
376
  stats: {
352
377
  totalDocuments: documents.length,
353
378
  totalSections: totalVectors,
@@ -360,7 +385,22 @@ class Embeddings {
360
385
  queriesFile: types_1.RAG_FILES.QUERIES
361
386
  }
362
387
  };
363
- this.saveMetadata(metadata);
388
+ this.mapping = {
389
+ type: 'mapping',
390
+ version,
391
+ tag,
392
+ mapping: documentRefs,
393
+ createdAt: new Date().toISOString()
394
+ };
395
+ // ✅ Retourner les données pour que RAGManager gère les métadonnées sur disque
396
+ return {
397
+ totalVectors,
398
+ vectorDimensions: this.space,
399
+ documents: documentReferences,
400
+ mapping: documentRefs,
401
+ tag,
402
+ version
403
+ };
364
404
  }
365
405
  /**
366
406
  * Charge l'index HierarchicalNSW existant
@@ -414,46 +454,9 @@ class Embeddings {
414
454
  }
415
455
  }
416
456
  }
417
- /**
418
- * Sauvegarde les métadonnées dans rag-metadata.json
419
- */
420
- saveMetadata(metadata) {
421
- // Toujours assigner les métadonnées en mémoire
422
- this.metadata = metadata;
423
- // En mode inmemory, on ne sauvegarde pas sur disque
424
- if (this.inmemory)
425
- return;
426
- const metadataFile = path_1.default.join(this.config.baseDir, types_1.RAG_FILES.METADATA);
427
- try {
428
- (0, fs_1.writeFileSync)(metadataFile, JSON.stringify(metadata, null, 2), 'utf8');
429
- if (this.debug) {
430
- console.log('Métadonnées sauvegardées:', metadataFile);
431
- }
432
- }
433
- catch (error) {
434
- console.error('Erreur lors de la sauvegarde des métadonnées:', error);
435
- }
436
- }
437
- /**
438
- * Sauvegarde le mapping des IDs
439
- */
440
- saveMapping(mapping) {
441
- // Toujours assigner le mapping en mémoire
442
- this.mapping = mapping;
443
- // En mode inmemory, on ne sauvegarde pas sur disque
444
- if (this.inmemory)
445
- return;
446
- const mappingFile = path_1.default.join(this.config.baseDir, types_1.RAG_FILES.MAPPING);
447
- try {
448
- (0, fs_1.writeFileSync)(mappingFile, JSON.stringify(mapping, null, 2), 'utf8');
449
- if (this.debug) {
450
- console.log('Mapping sauvegardé:', mappingFile);
451
- }
452
- }
453
- catch (error) {
454
- console.error('Erreur lors de la sauvegarde du mapping:', error);
455
- }
456
- }
457
+ // ❌ SUPPRIMÉ : saveMetadata() et saveMapping()
458
+ // Ces méthodes ont été déplacées vers RAGManager pour une meilleure séparation des responsabilités
459
+ // RAGManager est maintenant responsable de la gestion complète du cycle de vie des métadonnées
457
460
  /**
458
461
  * Récupère un vecteur depuis l'index existant (pour les mises à jour)
459
462
  */
@@ -2,11 +2,11 @@ export * from './types';
2
2
  export * from './parser';
3
3
  export * from './embeddings';
4
4
  export * from './usecase';
5
+ export * from './rag.manager';
6
+ export * from './rag.examples';
7
+ import { RAGConfig } from './types';
5
8
  /**
6
9
  * Configuration par défaut pour le RAG
7
10
  */
8
- /**
9
- * Gestionnaire RAG principal
10
- */
11
- export declare class RAGManager {
12
- }
11
+ declare const DEFAULT_RAG_CONFIG: Partial<RAGConfig>;
12
+ export { DEFAULT_RAG_CONFIG };
@@ -14,27 +14,24 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.RAGManager = void 0;
17
+ exports.DEFAULT_RAG_CONFIG = void 0;
18
18
  __exportStar(require("./types"), exports);
19
19
  __exportStar(require("./parser"), exports);
20
20
  __exportStar(require("./embeddings"), exports);
21
21
  __exportStar(require("./usecase"), exports);
22
+ __exportStar(require("./rag.manager"), exports);
23
+ __exportStar(require("./rag.examples"), exports);
22
24
  /**
23
25
  * Configuration par défaut pour le RAG
24
26
  */
25
- // const DEFAULT_RAG_CONFIG: Partial<RAGConfig> = {
26
- // vectorsFile: 'hnsw-vectors',
27
- // dimensions: 1536,
28
- // distance: 'cosine',
29
- // filterInput: '',
30
- // hnswConfig: {
31
- // ef: 200,
32
- // m: 32
33
- // }
34
- // };
35
- /**
36
- * Gestionnaire RAG principal
37
- */
38
- class RAGManager {
39
- }
40
- exports.RAGManager = RAGManager;
27
+ const DEFAULT_RAG_CONFIG = {
28
+ dimensions: 1536,
29
+ distance: 'cosine',
30
+ version: '1.0',
31
+ startId: 1000,
32
+ hnswConfig: {
33
+ ef: 200,
34
+ m: 32
35
+ }
36
+ };
37
+ exports.DEFAULT_RAG_CONFIG = DEFAULT_RAG_CONFIG;
@@ -4,7 +4,8 @@ import { ParsedDocument, DocumentSection } from './types';
4
4
  *
5
5
  * @param content Contenu du document
6
6
  * @param filename Nom du fichier (pour le titre par défaut)
7
- * @returns Sections et header du document
7
+ * @returns Sections et header du document avec matter validé
8
+ * @throws Error si le matter est invalide après traitement
8
9
  */
9
10
  export declare function getSections(content: string, filename: string): ParsedDocument;
10
11
  /**
@@ -12,6 +12,7 @@ exports.sectionParseValues = sectionParseValues;
12
12
  exports.sectionParseKey = sectionParseKey;
13
13
  exports.removeThinkingBlocks = removeThinkingBlocks;
14
14
  const fs_1 = require("fs");
15
+ const types_1 = require("./types");
15
16
  const path_1 = __importDefault(require("path"));
16
17
  const rules_1 = require("../rules");
17
18
  /**
@@ -19,7 +20,8 @@ const rules_1 = require("../rules");
19
20
  *
20
21
  * @param content Contenu du document
21
22
  * @param filename Nom du fichier (pour le titre par défaut)
22
- * @returns Sections et header du document
23
+ * @returns Sections et header du document avec matter validé
24
+ * @throws Error si le matter est invalide après traitement
23
25
  */
24
26
  function getSections(content, filename) {
25
27
  // IMPORTANT: Cette fonction traite les fichiers transformés par RAGGenerator
@@ -27,16 +29,8 @@ function getSections(content, filename) {
27
29
  // Vérifier si le contenu contient un front-matter,
28
30
  // celui-ci contient le nom du fichier d'origine et le nom du service!
29
31
  let { matter, content: contentWithoutMatter } = (0, rules_1.matterParse)(content);
30
- // imprimer une alarm
31
- if (matter?.mergeBase && matter?.createdBy) {
32
- console.log('🔔 No standard matter found in file:', matter);
33
- }
34
- // S'assurer que matter contient au minimum filename et title
35
- matter = {
36
- ...matter,
37
- filename,
38
- title: matter.title || filename // Utiliser le filename comme titre par défaut
39
- };
32
+ // Valider le matter (throw si invalide)
33
+ (0, types_1.isValidRAGMatter)(matter);
40
34
  content = contentWithoutMatter || content;
41
35
  //
42
36
  // le contenu est toujours sans le front-matter!
@@ -58,8 +52,7 @@ function getSections(content, filename) {
58
52
  title: sectionParseKey('titre', content) || undefined
59
53
  }))
60
54
  .filter(section => section.lines > 2); // Filtrer les sections trop courtes
61
- //
62
- // le matter contient les informations du fichier d'origine! (service, responssable, fichier, etc.)
55
+ // Retourner le document parsé avec matter validé
63
56
  return {
64
57
  filename,
65
58
  sections,
@@ -84,7 +77,11 @@ const getDocumentBySection = (id, ids, prefix) => {
84
77
  throw new Error('Invalid document id :' + fullname);
85
78
  }
86
79
  const content = (0, fs_1.readFileSync)(path_1.default.join(prefix, filename), 'utf8');
87
- const { sections } = getSections(content, filename);
80
+ const { sections, matter } = getSections(content, filename);
81
+ // Vérifier que l'ID du matter correspond à l'ID demandé
82
+ if (matter.id !== id) {
83
+ console.warn(`❌ Document ID mismatch: ${matter.title} - expected ${id}, got ${matter.id}`);
84
+ }
88
85
  if (!sections.length) {
89
86
  return {
90
87
  source: fullname,
@@ -0,0 +1,27 @@
1
+ import { ParsedDocument, RAGConfig } from './types';
2
+ import { RAGManager } from './rag.manager';
3
+ /**
4
+ * Exemples d'utilisation du gestionnaire multi-RAG
5
+ */
6
+ /**
7
+ * Construit un RAG spécifique avec des documents
8
+ */
9
+ export declare function buildSpecificRAG(ragManager: RAGManager, ragName: string, documents: ParsedDocument[], ragConfig?: Partial<RAGConfig>): Promise<void>;
10
+ /**
11
+ * Recherche dans un RAG spécifique
12
+ */
13
+ export declare function searchInRAG(ragManager: RAGManager, ragName: string, query: string, options?: {
14
+ neighbors?: number;
15
+ debug?: boolean;
16
+ }): Promise<any>;
17
+ /**
18
+ * Recherche dans le RAG par défaut
19
+ */
20
+ export declare function searchInDefaultRAG(ragManager: RAGManager, query: string, options?: {
21
+ neighbors?: number;
22
+ debug?: boolean;
23
+ }): Promise<any>;
24
+ /**
25
+ * Exemple d'utilisation complète
26
+ */
27
+ export declare function exampleUsage(baseDir: string): Promise<void>;