agentic-api 1.0.6 → 2.0.26

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 (103) hide show
  1. package/README.md +118 -22
  2. package/dist/src/agents/agents.example.d.ts +3 -0
  3. package/dist/src/agents/agents.example.js +38 -0
  4. package/dist/src/agents/authentication.js +2 -0
  5. package/dist/src/agents/prompts.d.ts +2 -2
  6. package/dist/src/agents/prompts.js +112 -49
  7. package/dist/src/agents/reducer.core.d.ts +12 -0
  8. package/dist/src/agents/reducer.core.js +207 -0
  9. package/dist/src/agents/reducer.d.ts +3 -0
  10. package/dist/src/agents/reducer.example.d.ts +28 -0
  11. package/dist/src/agents/reducer.example.js +118 -0
  12. package/dist/src/agents/reducer.js +19 -0
  13. package/dist/src/agents/reducer.loaders.d.ts +34 -0
  14. package/dist/src/agents/reducer.loaders.js +122 -0
  15. package/dist/src/agents/reducer.process.d.ts +16 -0
  16. package/dist/src/agents/reducer.process.js +143 -0
  17. package/dist/src/agents/reducer.tools.d.ts +29 -0
  18. package/dist/src/agents/reducer.tools.js +157 -0
  19. package/dist/src/agents/reducer.types.d.ts +50 -0
  20. package/dist/src/agents/reducer.types.js +5 -0
  21. package/dist/src/agents/simulator.d.ts +47 -0
  22. package/dist/src/agents/simulator.executor.d.ts +26 -0
  23. package/dist/src/agents/simulator.executor.js +132 -0
  24. package/dist/src/agents/simulator.js +205 -0
  25. package/dist/src/agents/simulator.prompts.d.ts +16 -0
  26. package/dist/src/agents/simulator.prompts.js +108 -0
  27. package/dist/src/agents/simulator.types.d.ts +42 -0
  28. package/dist/src/agents/simulator.types.js +2 -0
  29. package/dist/src/agents/simulator.utils.d.ts +20 -0
  30. package/dist/src/agents/simulator.utils.js +87 -0
  31. package/dist/src/execute.d.ts +13 -6
  32. package/dist/src/execute.js +351 -85
  33. package/dist/src/index.d.ts +9 -0
  34. package/dist/src/index.js +14 -0
  35. package/dist/src/princing.openai.d.ts +9 -2
  36. package/dist/src/princing.openai.js +15 -11
  37. package/dist/src/prompts.d.ts +3 -2
  38. package/dist/src/prompts.js +159 -19
  39. package/dist/src/rag/embeddings.d.ts +103 -0
  40. package/dist/src/rag/embeddings.js +466 -0
  41. package/dist/src/rag/index.d.ts +12 -0
  42. package/dist/src/rag/index.js +40 -0
  43. package/dist/src/rag/lucene.d.ts +45 -0
  44. package/dist/src/rag/lucene.js +227 -0
  45. package/dist/src/rag/parser.d.ts +68 -0
  46. package/dist/src/rag/parser.js +192 -0
  47. package/dist/src/rag/tools.d.ts +76 -0
  48. package/dist/src/rag/tools.js +196 -0
  49. package/dist/src/rag/types.d.ts +178 -0
  50. package/dist/src/rag/types.js +21 -0
  51. package/dist/src/rag/usecase.d.ts +16 -0
  52. package/dist/src/rag/usecase.js +79 -0
  53. package/dist/src/rules/errors.d.ts +60 -0
  54. package/dist/src/rules/errors.js +97 -0
  55. package/dist/src/rules/git/git.e2e.helper.d.ts +104 -0
  56. package/dist/src/rules/git/git.e2e.helper.js +488 -0
  57. package/dist/src/rules/git/git.health.d.ts +66 -0
  58. package/dist/src/rules/git/git.health.js +354 -0
  59. package/dist/src/rules/git/git.helper.d.ts +129 -0
  60. package/dist/src/rules/git/git.helper.js +53 -0
  61. package/dist/src/rules/git/index.d.ts +6 -0
  62. package/dist/src/rules/git/index.js +76 -0
  63. package/dist/src/rules/git/repo.d.ts +128 -0
  64. package/dist/src/rules/git/repo.js +900 -0
  65. package/dist/src/rules/git/repo.pr.d.ts +137 -0
  66. package/dist/src/rules/git/repo.pr.js +589 -0
  67. package/dist/src/rules/git/repo.tools.d.ts +134 -0
  68. package/dist/src/rules/git/repo.tools.js +730 -0
  69. package/dist/src/rules/index.d.ts +8 -0
  70. package/dist/src/rules/index.js +25 -0
  71. package/dist/src/rules/messages.d.ts +17 -0
  72. package/dist/src/rules/messages.js +21 -0
  73. package/dist/src/rules/types.ctrl.d.ts +28 -0
  74. package/dist/src/rules/types.ctrl.js +2 -0
  75. package/dist/src/rules/types.d.ts +510 -0
  76. package/dist/src/rules/types.helpers.d.ts +132 -0
  77. package/dist/src/rules/types.helpers.js +2 -0
  78. package/dist/src/rules/types.js +33 -0
  79. package/dist/src/rules/user.mapper.d.ts +61 -0
  80. package/dist/src/rules/user.mapper.js +160 -0
  81. package/dist/src/rules/utils/slug.d.ts +22 -0
  82. package/dist/src/rules/utils/slug.js +35 -0
  83. package/dist/src/rules/utils.matter.d.ts +66 -0
  84. package/dist/src/rules/utils.matter.js +208 -0
  85. package/dist/src/rules/utils.slug.d.ts +22 -0
  86. package/dist/src/rules/utils.slug.js +35 -0
  87. package/dist/src/scrapper.d.ts +3 -2
  88. package/dist/src/scrapper.js +33 -37
  89. package/dist/src/stategraph/index.d.ts +8 -0
  90. package/dist/src/stategraph/index.js +21 -0
  91. package/dist/src/stategraph/stategraph.d.ts +91 -0
  92. package/dist/src/stategraph/stategraph.js +241 -0
  93. package/dist/src/stategraph/stategraph.storage.d.ts +41 -0
  94. package/dist/src/stategraph/stategraph.storage.js +166 -0
  95. package/dist/src/stategraph/types.d.ts +139 -0
  96. package/dist/src/stategraph/types.js +19 -0
  97. package/dist/src/types.d.ts +62 -39
  98. package/dist/src/types.js +53 -89
  99. package/dist/src/usecase.d.ts +4 -0
  100. package/dist/src/usecase.js +44 -0
  101. package/dist/src/utils.d.ts +12 -5
  102. package/dist/src/utils.js +30 -13
  103. package/package.json +9 -3
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.modelPricing = void 0;
3
4
  exports.calculateCost = calculateCost;
4
5
  exports.accumulateCost = accumulateCost;
5
6
  //
6
7
  // get/update pricing from openai
7
8
  // - https://platform.openai.com/docs/pricing#latest-models
8
- const modelPricing = {
9
+ exports.modelPricing = {
9
10
  "gpt-4.5-preview": { input: 0.000075, cachedInput: 0.0000325, output: 0.000125 },
10
11
  "gpt-4.1": { input: 0.000002, cachedInput: 0.0000005, output: 0.000008 },
11
12
  "gpt-4.1-mini": { input: 0.0000004, cachedInput: 0.0000001, output: 0.0000016 },
@@ -18,6 +19,10 @@ const modelPricing = {
18
19
  "gpt-4o-mini-audio-preview": { input: 0.00000015, output: 0.0000006 },
19
20
  "gpt-4o-mini-realtime-preview": { input: 0.0000006, cachedInput: 0.0000003, output: 0.0000024 },
20
21
  "gpt-4o-mini-search-preview": { input: 0.0000015, cachedInput: 0.00000075, output: 0.000006 },
22
+ // GPT-5 family
23
+ "gpt-5": { input: 0.00000125, output: 0.00001 },
24
+ "gpt-5-mini": { input: 0.00000025, output: 0.000002 },
25
+ "gpt-5-nano": { input: 0.00000005, output: 0.0000004 },
21
26
  "o1": { input: 0.000015, cachedInput: 0.0000075, output: 0.00006 },
22
27
  "o4-mini": { input: 0.0000011, cachedInput: 0.00000055, output: 0.0000044 },
23
28
  "o3-mini": { input: 0.0000011, cachedInput: 0.00000055, output: 0.0000044 },
@@ -27,24 +32,23 @@ function calculateCost(model, usage) {
27
32
  if (!usage) {
28
33
  return 0;
29
34
  }
30
- if (!modelPricing[model]) {
35
+ if (!exports.modelPricing[model]) {
31
36
  throw new Error("Unknown model");
32
37
  }
33
- const pricing = modelPricing[model];
38
+ const pricing = exports.modelPricing[model];
34
39
  const cost = usage.prompt_tokens * pricing.input +
35
40
  // usage.completion_tokens * (pricing.cachedInput || 0) +
36
41
  usage.completion_tokens * pricing.output;
37
42
  return cost;
38
43
  }
39
- function accumulateCost(memory, model, usage) {
44
+ function accumulateCost(currentUsage, model, usage) {
40
45
  if (!usage) {
41
46
  return 0;
42
47
  }
43
- let _usage = memory.usage;
44
- _usage.prompt += usage.prompt_tokens;
45
- _usage.completion += usage.completion_tokens;
46
- _usage.total += usage.total_tokens;
47
- _usage.cost += calculateCost(model, usage);
48
- memory.usage = _usage;
49
- return _usage.cost;
48
+ currentUsage.prompt += usage.prompt_tokens || 0;
49
+ currentUsage.completion += usage.completion_tokens || 0;
50
+ currentUsage.total += usage.total_tokens || 0;
51
+ const cost = calculateCost(model, usage);
52
+ currentUsage.cost += cost;
53
+ return currentUsage.cost;
50
54
  }
@@ -1,5 +1,6 @@
1
1
  export declare const transferAgentPrompt_ = "Triggers a transfer of the user to a more specialized agent. \n Calls escalate to a more specialized LLM agent or to a human agent, with additional context. \n Only call this function if one of the available agents is appropriate. Don't transfer to your own agent type.\n \n Let the user know you're about to transfer them before doing so.\n\nAvailable Agents:";
2
2
  export declare const transferAgentPrompt = "\nTriggers a transfer of the user to a specialized agent, for one task.\nOnly call this function if one of the available agents is more appropriate (as destination_agent). Don't transfer to your own agent name \"__AGENT_NAME__\".\n\n\u26A0\uFE0F Rules:\n- NEVER call this function for requests that match your own specialization.\n\n\nAvailable Agents:";
3
3
  export declare const defaultOutputPrompt = "\n# OUTPUT INSTRUCTIONS\n- Only output CoT and Markdown.\n- Do not output the markdown code syntax, only the content.\n- Use the name of the document on top of the markdown.\n- You use bulleted lists for output, not numbered lists.\n- Do not output the main index as a section.\n- Do not output the images which are not relevant in section.\n- Ensure you follow ALL these instructions when creating your output.\n- EXAMPLE OF SECTION: `# {{page name}} - {{titre}}\n{{content}}`\n";
4
- export declare const textToMarkdownPrompt = "# R\u00D4LE:\n- Tu es un expert en transformation de documents proc\u00E9duraux pour un RAG (Retrieval-Augmented Generation).\n- Ton r\u00F4le est de d\u00E9composer une proc\u00E9dure en plusieurs unit\u00E9s de connaissance atomiques, optimis\u00E9es pour la recherche s\u00E9mantique avec HNSW (cosine).\n- Tu agis comme un moteur de \"reader view\" capable de construire une version fluide et lisible du document original.\n\n# MISSION:\n- Tu dois analyser le document fourni (texte brut ou HTML) et le d\u00E9couper en plusieurs unit\u00E9s de connaissance distinctes.\n- Chaque unit\u00E9 doit commencer par \"Titre:\" et \u00EAtre s\u00E9par\u00E9e de la suivante par \"---\".\n- Tu dois suivre rigoureusement le format de sortie et les r\u00E8gles de structuration.\n- Tu utilises le DICTIONNAIRE pour comprendre le jargon de l'entreprise.\n\n# R\u00C8GLES DE STRUCTURATION D'UNE UNIT\u00C9\n\n1. **Titre (Obligatoire)**\n - Le champ \"Titre:\" doit suivre ce format : \"{Objectif proc\u00E9dure} via {action de la section} incluant {\u00E9l\u00E9ments cl\u00E9s} et {responsables/outils}\".\n - Il sert de r\u00E9sum\u00E9 dense et contextualis\u00E9 pour l'embedding.\n\n2. **Section (Obligatoire)**\n - Le champ \"Section:\" contient le contenu d\u00E9taill\u00E9 de l'unit\u00E9, incluant le contexte, les \u00E9tapes, les actions et les responsables.\n\n3. **Champs Optionnels (\u00E0 omettre si vides)**\n - **Exemple:** : Uniquement si un cas d'usage concret ou une situation illustrative est mentionn\u00E9.\n - **Template:** : Uniquement si un mod\u00E8le de lettre, d'e-mail ou de formulaire est d\u00E9crit.\n - **Exception:** : Uniquement si une variante \u00E0 la r\u00E8gle g\u00E9n\u00E9rale est sp\u00E9cifi\u00E9e.\n - **Si un champ est vide, tu ne dois PAS l'inclure dans la sortie.**\n\n# FORMAT DE SORTIE\n- La sortie ne doit contenir AUCUN titre Markdown (pas de \"##\") ni de frontmatter.\n- Chaque unit\u00E9 de connaissance est un bloc de texte.\n- Le s\u00E9parateur \"---\" est utilis\u00E9 exclusivement entre chaque unit\u00E9.\n\n## EXEMPLE DE SORTIE ATTENDUE\nTitre: {Objectif proc\u00E9dure} via {action} incluant {\u00E9l\u00E9ments cl\u00E9s} et {responsables}\nSection: Contenu d\u00E9taill\u00E9, contexte, \u00E9tapes, actions\nExemple: Cas d'usage illustratif (omis si vide)\nTemplate: Mod\u00E8le de document r\u00E9utilisable (omis si vide)\nException: Variante \u00E0 la r\u00E8gle g\u00E9n\u00E9rale (omis si vide)\n---\nTitre: Un autre objectif via une autre action\nSection: Le contenu de la deuxi\u00E8me unit\u00E9.\n---\nTitre: Un troisi\u00E8me objectif via une troisi\u00E8me action\nSection: Le contenu de la troisi\u00E8me unit\u00E9.\nTemplate: Un mod\u00E8le de lettre est d\u00E9crit ici.\n\n\n# DIRECTIVES DE NETTOYAGE\n- Analyser **chaque ligne du document** pour identifier sa structure logique (paragraphes, listes, tableaux).\n- Supprimer les caract\u00E8res invisibles ou parasites fr\u00E9quents issus d'une conversion PDF (ex : saut de page \"\\f\").\n- Masquer toute information sensible li\u00E9e \u00E0 une authentification avec des ast\u00E9risques (ex : `jo***3`).\n- \u26A0\uFE0F Les sections qui contiennent uniquement des liens relatifs \u00E0 des proc\u00E9dures sont supprim\u00E9es du r\u00E9sultat final.\n\n# DIRECTIVES PRIORITAIRES POUR CAS COMPLEXES\n- Ne jamais r\u00E9sumer les sections comportant des sc\u00E9narios conditionnels (\"Si... alors...\"). Tous les cas doivent \u00EAtre explicitement d\u00E9velopp\u00E9s.\n- Toute **logique de d\u00E9cision op\u00E9rationnelle** doit \u00EAtre repr\u00E9sent\u00E9e avec une structure claire : **liste num\u00E9rot\u00E9e, liste imbriqu\u00E9e ou tableau de d\u00E9cision**.\n- Lorsque le document mentionne une situation **urgente** (mots cl\u00E9s : \"URGENT\", \"imm\u00E9diat\"), ajouter une ic\u00F4ne \"\u26A0\uFE0F\" au d\u00E9but de l'\u00E9tape.\n\n# DICTIONNAIRE:\n- Logiciels Sp\u00E9cifiques: Quorum, MFiles, Base de connaissance, Teams, HomePad, Todoist, Mammutt, E-banking, INCH, Ecopartage, Immowise.\n- SGC: Service de Gestion de la Client\u00E8le\n- GED: service qui g\u00E8re le scan des documents, la mise sous plis, l'\u00E9conomat, le r\u00E9assort des salles de pauses, la saisie des donn\u00E9es pour orienter les documents dans M-Files\n- MED: Mise en demeure.\n- WC: Toilettes.\n- M-Files: logiciel de gestion de documents\n- PR ou PRSA: Pilet-Renaud SA\n- PPE: Service qui g\u00E8re les copropri\u00E9t\u00E9s.\n- GP: Garantie Bancaire\n- WC: Toilettes.\n- BAL: Boite \u00E0 Lettre\n- DD: Arrangement de paiement pour facture due mais qui n'est pas du loyer.\n- copro: copropri\u00E9taire (attention \u00E0 ne pas confondre avec gopros)\n- un bon (bons): ordre d'intervention pour travaux (ex, bon de travail, cr\u00E9ation de bons, bons, etc).\n- La Date \u00E0 jour Locataire: le dernier mois qui a \u00E9t\u00E9 pay\u00E9 par le locataire.\n\n# APPROCHE CoT (Chain of Thought):\n- Utilise un processus de r\u00E9flexion structur\u00E9 encadr\u00E9 par les balises <thinking></thinking> avant de g\u00E9n\u00E9rer le r\u00E9sultat final. \n- Dans cette section de raisonnement tu DOIS:\n 1. Analyse toutes les DIRECTIVES et instructions qui sont \u00E0 utiliser conjointement avec la question.\n 2. D\u00E9compose la solution en \u00E9tapes claires, avec des mots-cl\u00E9s non format\u00E9s et en utilisant des balises <step> \u00E0 l'int\u00E9rieur de la r\u00E9flexion <thinking>.\n 3. Ajuste continuellement ton raisonnement en fonction des r\u00E9sultats interm\u00E9diaires et des r\u00E9flexions.\n\n\n# OUTPUT INSTRUCTIONS\n- Only output CoT and Markdown.\n- Do not output the markdown code syntax, only the content.\n- Use the name of the document on top of the markdown.\n- You use bulleted lists for output, not numbered lists.\n- Do not output the main index as a section.\n- Do not output the images which are not relevant in section.\n- Ensure you follow ALL these instructions when creating your output.\n- EXAMPLE OF SECTION: `# {{page name}} - {{titre}}\n{{content}}`\n\n";
5
- export declare const htmlToMarkdownPrompt = "\n# R\u00D4LE:\nTu es un expert pour analyser des documents HTML.\n\n# MISSION:\nTu es un expert mondial pour analyser des documents HTML.\nTa mission est de convertir un document HTML en markdown correctement structur\u00E9 (tableau, liste, paragraphe, titre, image, lien).\nRespires profond\u00E9ment et r\u00E9fl\u00E9chis \u00E9tape-par-\u00E9tape \u00E0 la meilleure fa\u00E7on d'atteindre ton objectif.\n\n# DIRECTIVES:\nAppliques un Chain of Thought (CoT) avec les balises XML <thinking></thinking> avant de g\u00E9n\u00E9rer le r\u00E9sultat en markdown.\n - Analyses le contenu HTML ligne par ligne.\n - G\u00E9n\u00E8res le contenu markdown de mani\u00E8re fid\u00E8le au texte original et les listes ne sont jamais num\u00E9rot\u00E9es.\n - Supprimes l'ent\u00EAte en d\u00E9but de document qui ne participe pas \u00E0 sa valeur ajout\u00E9e (Microsoft, Pilet-Renaud, Hide header and navigation, Share)\n - N'ajoutes pas de commentaires suppl\u00E9mentaires.\n\n\n# OUTPUT INSTRUCTIONS\n- Only output CoT and Markdown.\n- Do not output the markdown code syntax, only the content.\n- Use the name of the document on top of the markdown.\n- You use bulleted lists for output, not numbered lists.\n- Do not output the main index as a section.\n- Do not output the images which are not relevant in section.\n- Ensure you follow ALL these instructions when creating your output.\n- EXAMPLE OF SECTION: `# {{page name}} - {{titre}}\n{{content}}`\n\n";
4
+ export declare const textToMarkdownPrompt = "# R\u00D4LE:\n- Tu es un expert en transformation de documents proc\u00E9duraux pour un RAG (Retrieval-Augmented Generation).\n- Ton r\u00F4le est de d\u00E9composer une proc\u00E9dure en plusieurs unit\u00E9s de connaissance atomiques, optimis\u00E9es pour la recherche s\u00E9mantique avec HNSW (cosine).\n- Tu agis comme un moteur de \"reader view\" capable de construire une version fluide et lisible du document original.\n\n# MISSION:\n- Tu dois analyser le document fourni (texte brut ou HTML) et le d\u00E9couper en plusieurs unit\u00E9s de connaissance distinctes.\n- Chaque unit\u00E9 doit commencer par \"Titre:\" et \u00EAtre s\u00E9par\u00E9e de la suivante par \"---\".\n- Tu dois suivre rigoureusement le format de sortie et les r\u00E8gles de structuration.\n- Tu utilises le DICTIONNAIRE pour comprendre le jargon de l'entreprise.\n\n# R\u00C8GLES DE STRUCTURATION D'UNE UNIT\u00C9\n\n1. **Titre (Obligatoire)**\n - Le champ \"Titre:\" Une phrase sp\u00E9cifique \u00E0 la section qui contient l'objectif, l'action, le p\u00E9rim\u00E8tre et le b\u00E9n\u00E9ficiaire.\n - Il sert de r\u00E9sum\u00E9 dense unique et contextualis\u00E9 pour l'embedding.\n\n2. **Section (Obligatoire)**\n - Le champ \"Section:\" contient le contenu d\u00E9taill\u00E9 et exhaustif de l'unit\u00E9, incluant le contexte, les \u00E9tapes et les actions.\n\n3. **Champs Optionnels (\u00E0 omettre si vides)**\n - **Exemple:** : Uniquement si un cas d'usage concret ou une situation illustrative est mentionn\u00E9.\n - **Template:** : Uniquement si un mod\u00E8le de lettre, d'e-mail ou de formulaire est d\u00E9crit.\n - **Exception:** : Uniquement si une variante \u00E0 la r\u00E8gle g\u00E9n\u00E9rale est sp\u00E9cifi\u00E9e.\n - **Si un champ est vide, tu ne dois PAS l'inclure dans la sortie.**\n\n# FORMAT DE SORTIE\n- La sortie ne doit contenir AUCUN titre Markdown (pas de \"##\") ni de frontmatter.\n- Chaque unit\u00E9 de connaissance est un bloc de texte.\n- Le s\u00E9parateur \"---\" est utilis\u00E9 exclusivement entre chaque unit\u00E9.\n\n## EXEMPLE DE SORTIE ATTENDUE\nTitre: {Objectif proc\u00E9dure} via {action} incluant {p\u00E9rim\u00E8tre} et {b\u00E9n\u00E9ficiaire}\nSection: Contenu d\u00E9taill\u00E9, contexte, \u00E9tapes, actions\nExemple: Cas d'usage illustratif (omis si vide)\nTemplate: Mod\u00E8le de document r\u00E9utilisable (omis si vide)\nException: Variante \u00E0 la r\u00E8gle g\u00E9n\u00E9rale (omis si vide)\n---\nTitre: Un autre objectif via une autre action\nSection: Le contenu de la deuxi\u00E8me unit\u00E9.\n---\nTitre: Un troisi\u00E8me objectif via une troisi\u00E8me action\nSection: Le contenu de la troisi\u00E8me unit\u00E9.\nTemplate: Un mod\u00E8le de lettre est d\u00E9crit ici.\n\n\n# DIRECTIVES DE NETTOYAGE\n- Analyser **chaque ligne du document** pour identifier sa structure logique (paragraphes, listes, tableaux).\n- Supprimer les caract\u00E8res invisibles ou parasites fr\u00E9quents issus d'une conversion PDF (ex : saut de page \"\\f\").\n- Masquer toute information sensible li\u00E9e \u00E0 une authentification avec des ast\u00E9risques (ex : `jo***3`).\n- \u26A0\uFE0F Les sections qui contiennent uniquement des liens relatifs \u00E0 des proc\u00E9dures sont supprim\u00E9es du r\u00E9sultat final.\n\n# DIRECTIVES PRIORITAIRES POUR CAS COMPLEXES\n- Ne jamais r\u00E9sumer les sections comportant des sc\u00E9narios conditionnels (\"Si... alors...\"). Tous les cas doivent \u00EAtre explicitement d\u00E9velopp\u00E9s.\n- Toute **logique de d\u00E9cision op\u00E9rationnelle** doit \u00EAtre repr\u00E9sent\u00E9e avec une structure claire : **liste num\u00E9rot\u00E9e, liste imbriqu\u00E9e ou tableau de d\u00E9cision**.\n- Lorsque le document mentionne une situation **urgente** (mots cl\u00E9s : \"URGENT\", \"imm\u00E9diat\"), ajouter une ic\u00F4ne \"\u26A0\uFE0F\" au d\u00E9but de l'\u00E9tape.\n\n# DICTIONNAIRE:\n- Logiciels Sp\u00E9cifiques: Quorum, MFiles, Base de connaissance, Teams, HomePad, Todoist, Mammutt, E-banking, INCH, Ecopartage, Immowise.\n- SGC: Service de Gestion de la Client\u00E8le\n- GED: service qui g\u00E8re le scan des documents, la mise sous plis, l'\u00E9conomat, le r\u00E9assort des salles de pauses, la saisie des donn\u00E9es pour orienter les documents dans M-Files\n- MED: Mise en demeure.\n- WC: Toilettes.\n- M-Files: logiciel de gestion de documents\n- PR ou PRSA: Pilet & Renaud SA\n- PPE: Service qui g\u00E8re les copropri\u00E9t\u00E9s.\n- GP: Garantie Bancaire\n- WC: Toilettes.\n- BAL: Boite \u00E0 Lettre\n- DD: Arrangement de paiement pour facture due mais qui n'est pas du loyer.\n- copro: copropri\u00E9taire (attention \u00E0 ne pas confondre avec gopros)\n- un bon (bons): ordre d'intervention pour travaux (ex, bon de travail, cr\u00E9ation de bons, bons, etc).\n- La Date \u00E0 jour Locataire: le dernier mois qui a \u00E9t\u00E9 pay\u00E9 par le locataire.\n\n# APPROCHE CoT (Chain of Thought):\n- Utilise un processus de r\u00E9flexion structur\u00E9 encadr\u00E9 par les balises <thinking></thinking> avant de g\u00E9n\u00E9rer le r\u00E9sultat final. \n- Dans cette section de raisonnement tu DOIS:\n 1. Analyse toutes les DIRECTIVES et instructions qui sont \u00E0 utiliser conjointement avec la question.\n 2. D\u00E9compose la solution en \u00E9tapes claires, avec des mots-cl\u00E9s non format\u00E9s et en utilisant des balises <step> \u00E0 l'int\u00E9rieur de la r\u00E9flexion <thinking>.\n 3. Ajuste continuellement ton raisonnement en fonction des r\u00E9sultats interm\u00E9diaires et des r\u00E9flexions.\n\n\n# OUTPUT INSTRUCTIONS\n- Only output CoT and Markdown.\n- Do not output the markdown code syntax, only the content.\n- Use the name of the document on top of the markdown.\n- You use bulleted lists for output, not numbered lists.\n- Do not output the main index as a section.\n- Do not output the images which are not relevant in section.\n- Ensure you follow ALL these instructions when creating your output.\n- EXAMPLE OF SECTION: `# {{page name}} - {{titre}}\n{{content}}`\n\n";
5
+ export declare const htmlToMarkdownPrompt = "\nVous \u00EAtes *MarkdownPDF-Pro*, un assistant expert charg\u00E9 de transformer un texte brut issu d\u2019un PDF en un fichier Markdown clair et minimaliste, sans mise en page complexe.\nTu travailles dans le contexte de l'entreprise Pilet & Renaud SA. Tu sais que les proc\u00E9dures proviennent des services suivants: SGC (Gestion de la Client\u00E8le), RH, PPE (copropri\u00E9t\u00E9), g\u00E9rance locataire, direction, comptabilit\u00E9, contentieux, IT.\n\n\n**But :**\nStructurer le contenu pour qu\u2019il soit imm\u00E9diatement lisible dans n\u2019importe quel \u00E9diteur Markdown, tout en pr\u00E9servant la hi\u00E9rarchie logique (titres, listes, tableaux simples).\n\n**Contraintes globales (IMP\u00C9RATIF) :**\n1. Aucune syntaxe HTML, pas de balises <div>, <span>, etc. \n2. Pas de styles CSS ni de code LaTeX. \n3. Utiliser exclusivement les \u00E9l\u00E9ments Markdown suivants : \n * `#` \u2026 `######` pour les titres \n * listes \u00E0 puces `-` ou num\u00E9rot\u00E9es `1.` \n * blocs de citation `>` si n\u00E9cessaire \n * tableaux au format pipe `| Col 1 | Col 2 |` \n * emphase `*italique*` et `**gras**` \n * Front\u2011matter YAML `---\n ...\n---\n` pour les m\u00E9tadonn\u00E9es.\n4. Ne pas ajouter d\u2019analyse ou de commentaires personnels.\n5. Si le service n\u2019est pas d\u00E9duit du texte, laisser service: unknown.\n6. les tableaux sont copi\u00E9s telles-quelles \u00E0 l'identique ligne par ligne.\n\n\nRemplir automatiquement le champ title sous la forme \"{service} - {action} {object} {b\u00E9n\u00E9ficiaire}\" en minuscules.\n\n**Heuristique de structuration :**\n1. **D\u00E9tection des titres** \n * Ligne en MAJUSCULES \u2192 `## Titre 2` \n * Ligne qui finit par \u00AB : \u00BB \u2192 `### Titre 3` \n * Saut de ligne double + mot initial capitalis\u00E9 \u2192 `##` si > 3 mots sinon `###`.\n\n2. **Paragraphes** : regrouper les lignes cons\u00E9cutives jusqu\u2019au prochain saut de ligne vide.\n\n3. **Listes** \n * Trouver les puces d\u2019origine (`\u2022`, `-`, `*`, chiffres suivis de `)` ou `.`) et convertir. \n * Conserver l\u2019imbrication (quatre espaces par niveau).\n\n4. **D\u00E9tection de Table** \n * Si plusieurs lignes cons\u00E9cutives contiennent des colonnes align\u00E9es par espaces ou tabulations ou un m\u00EAme s\u00E9parateur, c'est un tableau \u00E0 convertir en Markdown.\n\n5. **Sp\u00E9cifique \u00E0 l'entreprise**: \n * Les informations importantes doivent \u00EAtre converties avec l'icone \u26A0\uFE0F et le texte en gras.\n * Un document fait toujours r\u00E9f\u00E9rence \u00E0 un service de l'entreprise.\n **Mentionner par inf\u00E9rence le service uniquement dans le front-matter; le corps du document doit rester fid\u00E8le \u00E0 la source**\n * Un document fait r\u00E9f\u00E9rence \u00E0 un B\u00E9n\u00E9ficiaire (ex: locataire, copropri\u00E9taire, fournisseur, collaborateur, directeur, etc) dans un contexte de \"use-case\". Si tu ne le trouves pas, laisser b\u00E9n\u00E9ficiaire: unknown.\n * Un document fait r\u00E9f\u00E9rence \u00E0 un Destinataire, qui est un collaborateur de l'entreprise. Si tu ne le trouves pas, laisser destinataire: unknown.\n * Le jargon de l'entreprise:\n - BAL: Boite \u00E0 Lettre\n - DD: Arrangement de paiement pour facture due mais qui n'est pas du loyer.\n - FVGLS: fondation de la ville de Gen\u00E8ve pour le logement social (terme discriminant).\n - GB/GP: Garantie bancaire\n - GED: service qui g\u00E8re le scan des documents, l'\u00E9conomat, le r\u00E9assort des salles de pauses, la saisie des donn\u00E9es pour M-Files\n - MED: Mise en demeure.\n - Logiciels Sp\u00E9cialis\u00E9s: Quorum, Teams, HomePad, Todoist, Mammutt, E-banking, INCH, Ecopartage, Immowise.\n - M-Files: logiciel de gestion de documents (ou MFiles)\n - MyAbacus: logiciel pour les ressources humaines.\n\n6. **\u00C9l\u00E9ments hors-texte** \n * Images : placer `![Img page-X-Y](IMAGE_PLACEHOLDER_X_Y)` \u00E0 l\u2019endroit d\u2019origine (une ligne par image). \n * Notes de bas de page : convertir en liens `[^{n}]` et regrouper \u00E0 la fin sous `## Notes`.\n\n6. **Nettoyage final** \n * Supprimer les en-t\u00EAtes/pieds de page r\u00E9p\u00E9titifs (m\u00EAme s\u00E9quence sur \u2265 3 pages). \n * R\u00E9duire les blancs multiples \u00E0 un seul. \n * Conserver un seul saut de ligne vide entre blocs.\n * Supprimer la section compl\u00E8te du \"rapport de r\u00E9vision de la proc\u00E9dure\"\n\n---\n\n### Format d\u2019entr\u00E9e attendu\n\n**Proc\u00E9dure :**\n1. Lis attentivement le bloc `<<PDF_TEXT>>`. \n2. Applique les heuristiques ci-dessus, \u00E9tape par \u00E9tape (\u00AB chain-of-thought \u00BB interne, ne pas afficher). \n3. Ajoutes un MATTER en ent\u00EAte puis le Markdown final brut sans d\u00E9limiteurs et sans commentaires.\n\n*(Prends le temps n\u00E9cessaire et v\u00E9rifie ta sortie avant de r\u00E9pondre.)*\n\nMATTER : format du matter \u00E0 ajouter dans l'ent\u00EAte du markdown.\n`\n---\ntitle: {service} - {action} {object} {b\u00E9n\u00E9ficiaire}\nservice: {service}\nrole: rule,\nowner: {owner}\n---`\n\n";
6
+ export declare const usecaseExtractionPrompt: (file: string) => string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.htmlToMarkdownPrompt = exports.textToMarkdownPrompt = exports.defaultOutputPrompt = exports.transferAgentPrompt = exports.transferAgentPrompt_ = void 0;
3
+ exports.usecaseExtractionPrompt = exports.htmlToMarkdownPrompt = exports.textToMarkdownPrompt = exports.defaultOutputPrompt = exports.transferAgentPrompt = exports.transferAgentPrompt_ = void 0;
4
4
  exports.transferAgentPrompt_ = `Triggers a transfer of the user to a more specialized agent.
5
5
  Calls escalate to a more specialized LLM agent or to a human agent, with additional context.
6
6
  Only call this function if one of the available agents is appropriate. Don't transfer to your own agent type.
@@ -28,6 +28,7 @@ exports.defaultOutputPrompt = `
28
28
  - Ensure you follow ALL these instructions when creating your output.
29
29
  - EXAMPLE OF SECTION: \`# {{page name}} - {{titre}}\n{{content}}\`
30
30
  `;
31
+ // DEPRECATED: use htmlToMarkdownPrompt instead
31
32
  exports.textToMarkdownPrompt = `# RÔLE:
32
33
  - Tu es un expert en transformation de documents procéduraux pour un RAG (Retrieval-Augmented Generation).
33
34
  - Ton rôle est de décomposer une procédure en plusieurs unités de connaissance atomiques, optimisées pour la recherche sémantique avec HNSW (cosine).
@@ -42,11 +43,11 @@ exports.textToMarkdownPrompt = `# RÔLE:
42
43
  # RÈGLES DE STRUCTURATION D'UNE UNITÉ
43
44
 
44
45
  1. **Titre (Obligatoire)**
45
- - Le champ "Titre:" doit suivre ce format : "{Objectif procédure} via {action de la section} incluant {éléments clés} et {responsables/outils}".
46
- - Il sert de résumé dense et contextualisé pour l'embedding.
46
+ - Le champ "Titre:" Une phrase spécifique à la section qui contient l'objectif, l'action, le périmètre et le bénéficiaire.
47
+ - Il sert de résumé dense unique et contextualisé pour l'embedding.
47
48
 
48
49
  2. **Section (Obligatoire)**
49
- - Le champ "Section:" contient le contenu détaillé de l'unité, incluant le contexte, les étapes, les actions et les responsables.
50
+ - Le champ "Section:" contient le contenu détaillé et exhaustif de l'unité, incluant le contexte, les étapes et les actions.
50
51
 
51
52
  3. **Champs Optionnels (à omettre si vides)**
52
53
  - **Exemple:** : Uniquement si un cas d'usage concret ou une situation illustrative est mentionné.
@@ -60,7 +61,7 @@ exports.textToMarkdownPrompt = `# RÔLE:
60
61
  - Le séparateur "---" est utilisé exclusivement entre chaque unité.
61
62
 
62
63
  ## EXEMPLE DE SORTIE ATTENDUE
63
- Titre: {Objectif procédure} via {action} incluant {éléments clés} et {responsables}
64
+ Titre: {Objectif procédure} via {action} incluant {périmètre} et {bénéficiaire}
64
65
  Section: Contenu détaillé, contexte, étapes, actions
65
66
  Exemple: Cas d'usage illustratif (omis si vide)
66
67
  Template: Modèle de document réutilisable (omis si vide)
@@ -92,7 +93,7 @@ Template: Un modèle de lettre est décrit ici.
92
93
  - MED: Mise en demeure.
93
94
  - WC: Toilettes.
94
95
  - M-Files: logiciel de gestion de documents
95
- - PR ou PRSA: Pilet-Renaud SA
96
+ - PR ou PRSA: Pilet & Renaud SA
96
97
  - PPE: Service qui gère les copropriétés.
97
98
  - GP: Garantie Bancaire
98
99
  - WC: Toilettes.
@@ -112,20 +113,159 @@ Template: Un modèle de lettre est décrit ici.
112
113
  ${exports.defaultOutputPrompt}
113
114
  `;
114
115
  exports.htmlToMarkdownPrompt = `
115
- # RÔLE:
116
- Tu es un expert pour analyser des documents HTML.
116
+ Vous êtes *MarkdownPDF-Pro*, un assistant expert chargé de transformer un texte brut issu d’un PDF en un fichier Markdown clair et minimaliste, sans mise en page complexe.
117
+ Tu travailles dans le contexte de l'entreprise Pilet & Renaud SA. Tu sais que les procédures proviennent des services suivants: SGC (Gestion de la Clientèle), RH, PPE (copropriété), gérance locataire, direction, comptabilité, contentieux, IT.
117
118
 
118
- # MISSION:
119
- Tu es un expert mondial pour analyser des documents HTML.
120
- Ta mission est de convertir un document HTML en markdown correctement structuré (tableau, liste, paragraphe, titre, image, lien).
121
- Respires profondément et réfléchis étape-par-étape à la meilleure façon d'atteindre ton objectif.
122
119
 
123
- # DIRECTIVES:
124
- Appliques un Chain of Thought (CoT) avec les balises XML <thinking></thinking> avant de générer le résultat en markdown.
125
- - Analyses le contenu HTML ligne par ligne.
126
- - Génères le contenu markdown de manière fidèle au texte original et les listes ne sont jamais numérotées.
127
- - Supprimes l'entête en début de document qui ne participe pas à sa valeur ajoutée (Microsoft, Pilet-Renaud, Hide header and navigation, Share)
128
- - N'ajoutes pas de commentaires supplémentaires.
120
+ **But :**
121
+ Structurer le contenu pour qu’il soit immédiatement lisible dans n’importe quel éditeur Markdown, tout en préservant la hiérarchie logique (titres, listes, tableaux simples).
129
122
 
130
- ${exports.defaultOutputPrompt}
123
+ **Contraintes globales (IMPÉRATIF) :**
124
+ 1. Aucune syntaxe HTML, pas de balises <div>, <span>, etc.
125
+ 2. Pas de styles CSS ni de code LaTeX.
126
+ 3. Utiliser exclusivement les éléments Markdown suivants :
127
+ * \`#\` … \`######\` pour les titres
128
+ * listes à puces \`-\` ou numérotées \`1.\`
129
+ * blocs de citation \`>\` si nécessaire
130
+ * tableaux au format pipe \`| Col 1 | Col 2 |\`
131
+ * emphase \`*italique*\` et \`**gras**\`
132
+ * Front‑matter YAML \`---\n ...\n---\n\` pour les métadonnées.
133
+ 4. Ne pas ajouter d’analyse ou de commentaires personnels.
134
+ 5. Si le service n’est pas déduit du texte, laisser service: unknown.
135
+ 6. les tableaux sont copiés telles-quelles à l'identique ligne par ligne.
136
+
137
+
138
+ Remplir automatiquement le champ title sous la forme "{service} - {action} {object} {bénéficiaire}" en minuscules.
139
+
140
+ **Heuristique de structuration :**
141
+ 1. **Détection des titres**
142
+ * Ligne en MAJUSCULES → \`## Titre 2\`
143
+ * Ligne qui finit par « : » → \`### Titre 3\`
144
+ * Saut de ligne double + mot initial capitalisé → \`##\` si > 3 mots sinon \`###\`.
145
+
146
+ 2. **Paragraphes** : regrouper les lignes consécutives jusqu’au prochain saut de ligne vide.
147
+
148
+ 3. **Listes**
149
+ * Trouver les puces d’origine (\`•\`, \`-\`, \`*\`, chiffres suivis de \`)\` ou \`.\`) et convertir.
150
+ * Conserver l’imbrication (quatre espaces par niveau).
151
+
152
+ 4. **Détection de Table**
153
+ * Si plusieurs lignes consécutives contiennent des colonnes alignées par espaces ou tabulations ou un même séparateur, c'est un tableau à convertir en Markdown.
154
+
155
+ 5. **Spécifique à l'entreprise**:
156
+ * Les informations importantes doivent être converties avec l'icone ⚠️ et le texte en gras.
157
+ * Un document fait toujours référence à un service de l'entreprise.
158
+ **Mentionner par inférence le service uniquement dans le front-matter; le corps du document doit rester fidèle à la source**
159
+ * Un document fait référence à un Bénéficiaire (ex: locataire, copropriétaire, fournisseur, collaborateur, directeur, etc) dans un contexte de "use-case". Si tu ne le trouves pas, laisser bénéficiaire: unknown.
160
+ * Un document fait référence à un Destinataire, qui est un collaborateur de l'entreprise. Si tu ne le trouves pas, laisser destinataire: unknown.
161
+ * Le jargon de l'entreprise:
162
+ - BAL: Boite à Lettre
163
+ - DD: Arrangement de paiement pour facture due mais qui n'est pas du loyer.
164
+ - FVGLS: fondation de la ville de Genève pour le logement social (terme discriminant).
165
+ - GB/GP: Garantie bancaire
166
+ - GED: service qui gère le scan des documents, l'économat, le réassort des salles de pauses, la saisie des données pour M-Files
167
+ - MED: Mise en demeure.
168
+ - Logiciels Spécialisés: Quorum, Teams, HomePad, Todoist, Mammutt, E-banking, INCH, Ecopartage, Immowise.
169
+ - M-Files: logiciel de gestion de documents (ou MFiles)
170
+ - MyAbacus: logiciel pour les ressources humaines.
171
+
172
+ 6. **Éléments hors-texte**
173
+ * Images : placer \`![Img page-X-Y](IMAGE_PLACEHOLDER_X_Y)\` à l’endroit d’origine (une ligne par image).
174
+ * Notes de bas de page : convertir en liens \`[^{n}]\` et regrouper à la fin sous \`## Notes\`.
175
+
176
+ 6. **Nettoyage final**
177
+ * Supprimer les en-têtes/pieds de page répétitifs (même séquence sur ≥ 3 pages).
178
+ * Réduire les blancs multiples à un seul.
179
+ * Conserver un seul saut de ligne vide entre blocs.
180
+ * Supprimer la section complète du "rapport de révision de la procédure"
181
+
182
+ ---
183
+
184
+ ### Format d’entrée attendu
185
+
186
+ **Procédure :**
187
+ 1. Lis attentivement le bloc \`<<PDF_TEXT>>\`.
188
+ 2. Applique les heuristiques ci-dessus, étape par étape (« chain-of-thought » interne, ne pas afficher).
189
+ 3. Ajoutes un MATTER en entête puis le Markdown final brut sans délimiteurs et sans commentaires.
190
+
191
+ *(Prends le temps nécessaire et vérifie ta sortie avant de répondre.)*
192
+
193
+ MATTER : format du matter à ajouter dans l'entête du markdown.
194
+ \`
195
+ ---
196
+ title: {service} - {action} {object} {bénéficiaire}
197
+ service: {service}
198
+ role: rule,
199
+ owner: {owner}
200
+ ---\`
201
+
202
+ `;
203
+ const usecaseExtractionPrompt = (file) => `# RÔLE:
204
+ - Tu es un expert en développement de test unitaires avec nodejs et jtest.
205
+ - Tu as développé un RAG avec openai et "hnswlib-node" qui contient toutes les Procédures de l'entreprise Pilet et Renaud SA.
206
+ - Ta mission est de créer une série de tests exhaustifs pour valider que le RAG couvre à 100% le contenu des procédures de l'entreprise.
207
+ - Produire des questions à un coût important, tu dois être efficace, tu dois capturer un maximum de détails ( action, objet, bénéficiaire, contexte) avec un minimum de questions (maximum 4):
208
+ Une question peut concerner l'utilisation précise d'un logiciel ou un article précis de réglementation.
209
+ Chaque question doit satisfaire ces critères: clairement identifier le problème à résoudre ou l'action souhaitée dans le domaine précis du document fourni, doit être spécifique et ne peut pas être ambiguë.
210
+ Tu DOIS supprimer du résultat les questions génériques qui non spécifiques au contexte métier du document.
211
+ Toutes les questions que tu vas créer concernent précisément le document fourni en INPUT ci-dessous.
212
+ - Pour orienter la formulation des questions, je te fournis quelques exemples de questions réelles.
213
+ - En moyenne, chaque question doit être au maximum de 15 mots, mais tu peux en produire aussi des plus courtes (20%) pour élargir le champ des tests.
214
+ - La réponse contient la liste de mots très spécifiques pour chaque section de la procédure séparés par des virgules.
215
+ - Si la réponse concerne un schéma, une procédure ou l'utilisation d'un logiciel, tu dois décrire le besoin spécifique.
216
+
217
+
218
+ # EXEMPLES de formulation utilisées par les collaborateurs l'entreprise (attention à ne pas utiliser ces exemples si le sujet du INPUT´est différent).
219
+ - Écoulement bouché, que faire ?
220
+ - J’ai une fuite depuis le plafond de ma chambre, j’aimerais un sanitaire
221
+ - Mon frigo ne fonctionne pas, pouvez-vous mandater quelqu’un ?
222
+ - Mon store est resté bloqué, pouvez-vous faire quelque chose ?
223
+ - J’aimerais faire reproduire des clés, comment faire ? combien ça coûte ?
224
+ - Je suis fournisseur, ma facture n’est toujours pas payée par Pilet et Renaud.
225
+ - J’ai payé mon loyer, mais j’ai reçu un rappel, pourquoi ?
226
+ - Je paie toujours bien mon loyer, pouvez-vous supprimer les frais de rappel c’est la première fois que j’ai du retard.
227
+ - Est-ce que cet appartement est toujours disponible ? Comment déposer un dossier?
228
+ - Est-ce que mon dossier de candidature est retenu ? j’aimerais des infos.
229
+ - Inscription de korkmaz?
230
+ - J’ai reçu un appel manqué de la régie mais je ne sais pas qui a tenté de me joindre.
231
+ - Un fournisseur me dit que sa facture n’est toujours pas payée par Pilet et Renaud. Comment je vérifie ça?
232
+ - Comment créer un bon ?
233
+ - Quelles sont les tâches à faire après avoir conclu un contrat d’entretien ?
234
+ - Une entreprise souhaite travailler avec nous, que dois-je faire ?
235
+
236
+ # QUESTIONS A EVITER: Les exemples qui ne sont pas pertinents pour le RAG (les documents sont tous concernés par ces questions, c'est donc inutile de les inclure dans les tests).
237
+ - Ce document contient-il des liens externes ?
238
+ - Cette absence de liens affecte-t-elle la validité du document ?
239
+ - Qui doit valider les changements dans la procédure ?
240
+ - Comment valider une modification de procédure ?
241
+
242
+ # DICTIONNAIRE (jargon de l'entreprise):
243
+ - Logiciels Spécifiques: Quorum, MFiles, Base de connaissance, Teams, HomePad, Todoist, Mammutt, E-banking, INCH, Ecopartage, Immowise.
244
+ - SGC: Service de Gestion de la Clientèle
245
+ - GED: service qui gère le scan des documents, la mise sous plis, l’économat, le réassort des salles de pauses, la saisie des données pour orienter les documents dans M-Files
246
+ - MED: Mise en demeure.
247
+ - WC: Toilettes.
248
+ - M-Files: logiciel de gestion de documents
249
+ - PR ou PRSA: Pilet & Renaud SA
250
+ - PPE: Service qui gère les copropriétés.
251
+ - GP: Garantie Bancaire
252
+ - BAL: Boite à Lettre
253
+ - DD: Arrangement de paiement pour facture due mais qui n’est pas du loyer.
254
+ - copro: copropriétaire (attention à ne pas confondre avec gopros)
255
+ - un bon (bons): ordre d'intervention pour travaux (ex, bon de travail, création de bons, bons, etc).
256
+ - La Date à jour Locataire: le dernier mois qui a été payé par le locataire.
257
+
258
+
259
+ # OUTPUT INSTRUCTIONS
260
+ - Tu dois produire un JSON strict avec les champs suivants:
261
+ \`\`\`JSON
262
+ {
263
+ "source": "string",
264
+ "file": "${file}",
265
+ "queries": [{ "question": "string", "answer": "string" }, ...]
266
+ }
267
+ \`\`\`
268
+
269
+ INPUT:
131
270
  `;
271
+ exports.usecaseExtractionPrompt = usecaseExtractionPrompt;
@@ -0,0 +1,103 @@
1
+ import { RAGConfig, RAGMetadata, RAGSearchResult, RAGMapping, ParsedDocument, DocumentQueries } from './types';
2
+ export interface EmbeddingsSearchOptions {
3
+ /** Nombre de voisins à retourner */
4
+ neighbors?: number;
5
+ /** Paramètre ef pour la recherche */
6
+ ef?: number;
7
+ /** Retourner les informations de debug */
8
+ debug?: boolean;
9
+ }
10
+ export declare class Embeddings {
11
+ private config;
12
+ private vectorsFile;
13
+ private space;
14
+ private distance;
15
+ private vectorsIndex;
16
+ private inmemory;
17
+ private debug;
18
+ private metadata;
19
+ private mapping;
20
+ constructor(config: RAGConfig);
21
+ /**
22
+ * Retourne le prochain ID documentaire stable et met à jour metadata.docLastID.
23
+ * Pré-conditions: this.mapping et this.metadata sont chargés.
24
+ */
25
+ getNextID(): number;
26
+ /**
27
+ * Retourne l'ID documentaire pour un fichier. Si non trouvé, attribue un nouvel ID.
28
+ * Stratégie: utiliser le mapping id -> "filename#section-0".
29
+ */
30
+ getOrAssignDocumentID(file: string): number;
31
+ extractAndSaveDocumentUseCases(document: ParsedDocument): Promise<DocumentQueries>;
32
+ /**
33
+ * Charge les documents du RAG
34
+ * IMPORTANT: C'est le document produit pour le RAG, ce n'est pas le document source!
35
+ * @param file Le fichier à charger depuis git
36
+ */
37
+ loadDocumentOnRAG(file: string): Promise<ParsedDocument>;
38
+ /**
39
+ * Charge les use cases d'un document
40
+ * @param document Le document de référence pour le RAG `loadDocumentOnRAG(file)`
41
+ * @returns Les use cases du document
42
+ */
43
+ loadDocumentUseCases(document: ParsedDocument): Promise<DocumentQueries>;
44
+ listDocumentsOnRAG(): Promise<string[]>;
45
+ /**
46
+ * Recherche par similarité dans l'index
47
+ */
48
+ searchKnn(vectors: number[], options?: EmbeddingsSearchOptions): RAGSearchResult;
49
+ /**
50
+ * Recherche sémantique avec OpenAI
51
+ */
52
+ semanticSearch(question: string, options?: EmbeddingsSearchOptions): Promise<RAGSearchResult>;
53
+ /**
54
+ * Obtient les métadonnées du RAG
55
+ * @returns Les métadonnées du RAG
56
+ */
57
+ getMetadata(): RAGMetadata;
58
+ getMapping(): RAGMapping;
59
+ /**
60
+ * Vérifie si l'index est prêt
61
+ */
62
+ isReady(): boolean;
63
+ /**
64
+ * Réinitialise l'index
65
+ */
66
+ resetKnn(): void;
67
+ /**
68
+ * Crée un nouvel index HierarchicalNSW avec documents parsés
69
+ * ou met à jour l'index existant avec de nouveaux documents
70
+ */
71
+ indexFromDocuments(documents: ParsedDocument[], options?: {
72
+ ef?: number;
73
+ m?: number;
74
+ lastCommit?: string;
75
+ branch?: string;
76
+ update?: boolean;
77
+ prepare?: (input: string) => string;
78
+ }): Promise<void>;
79
+ /**
80
+ * Charge l'index HierarchicalNSW existant
81
+ */
82
+ private loadIndex;
83
+ /**
84
+ * Charge les métadonnées du fichier rag-metadata.json
85
+ */
86
+ private loadMetadata;
87
+ /**
88
+ * Charge le mapping des IDs
89
+ */
90
+ private loadMapping;
91
+ /**
92
+ * Sauvegarde les métadonnées dans rag-metadata.json
93
+ */
94
+ private saveMetadata;
95
+ /**
96
+ * Sauvegarde le mapping des IDs
97
+ */
98
+ private saveMapping;
99
+ /**
100
+ * Récupère un vecteur depuis l'index existant (pour les mises à jour)
101
+ */
102
+ private getVectorFromExistingIndex;
103
+ }