@ai.ntellect/core 0.8.3 → 1.1.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.
Files changed (460) hide show
  1. package/.mocharc.json +2 -1
  2. package/AGENTS.md +50 -0
  3. package/ARCHITECTURE.md +58 -0
  4. package/BENCHMARK.md +38 -0
  5. package/CHANGELOG.md +224 -0
  6. package/README.md +413 -199
  7. package/agent/agent-workflow.ts +569 -0
  8. package/agent/agent.ts +183 -0
  9. package/{modules/agent → agent}/base/executor.ts +11 -8
  10. package/{modules/agent → agent}/base/index.ts +2 -14
  11. package/agent/entity-resolver/confidence.ts +54 -0
  12. package/agent/entity-resolver/entity-index.ts +241 -0
  13. package/agent/entity-resolver/explore-strategy.ts +82 -0
  14. package/agent/entity-resolver/index.ts +22 -0
  15. package/agent/entity-resolver/resolver.ts +193 -0
  16. package/agent/entity-resolver/scorer.ts +211 -0
  17. package/agent/entity-resolver/types.ts +98 -0
  18. package/agent/generic-executor.ts +713 -0
  19. package/agent/handlers/cognitive-handler.ts +197 -0
  20. package/agent/handlers/index.ts +1 -0
  21. package/agent/handoff.ts +58 -0
  22. package/agent/llm-factory.ts +343 -0
  23. package/agent/orchestrator.ts +45 -0
  24. package/{modules/agent → agent}/prompt-builder.ts +1 -1
  25. package/agent/registry.ts +64 -0
  26. package/agent/tools/file-system.ts +471 -0
  27. package/agent/tools/index.ts +23 -0
  28. package/agent/tools/logger.ts +105 -0
  29. package/agent/tools/tool-resolver.ts +104 -0
  30. package/benchmark/cortexflow-workflow.ts +182 -0
  31. package/benchmark/langgraph-workflow.ts +201 -0
  32. package/benchmark/llm-client.ts +76 -0
  33. package/benchmark/run-benchmark.ts +222 -0
  34. package/cli-dev.ts +419 -0
  35. package/dist/agent/agent-workflow.d.ts +41 -0
  36. package/dist/agent/agent-workflow.d.ts.map +1 -0
  37. package/dist/agent/agent-workflow.js +560 -0
  38. package/dist/agent/agent-workflow.js.map +1 -0
  39. package/dist/agent/agent.d.ts +38 -0
  40. package/dist/agent/agent.d.ts.map +1 -0
  41. package/dist/agent/agent.js +149 -0
  42. package/dist/agent/agent.js.map +1 -0
  43. package/dist/{modules/agent → agent}/base/executor.d.ts +3 -3
  44. package/dist/agent/base/executor.d.ts.map +1 -0
  45. package/dist/{modules/agent → agent}/base/executor.js +8 -5
  46. package/dist/agent/base/executor.js.map +1 -0
  47. package/dist/{modules/agent → agent}/base/index.d.ts +1 -1
  48. package/dist/agent/base/index.d.ts.map +1 -0
  49. package/dist/{modules/agent → agent}/base/index.js +0 -12
  50. package/dist/agent/base/index.js.map +1 -0
  51. package/dist/agent/entity-resolver/confidence.d.ts +4 -0
  52. package/dist/agent/entity-resolver/confidence.d.ts.map +1 -0
  53. package/dist/agent/entity-resolver/confidence.js +47 -0
  54. package/dist/agent/entity-resolver/confidence.js.map +1 -0
  55. package/dist/agent/entity-resolver/entity-index.d.ts +40 -0
  56. package/dist/agent/entity-resolver/entity-index.d.ts.map +1 -0
  57. package/dist/agent/entity-resolver/entity-index.js +244 -0
  58. package/dist/agent/entity-resolver/entity-index.js.map +1 -0
  59. package/dist/agent/entity-resolver/explore-strategy.d.ts +13 -0
  60. package/dist/agent/entity-resolver/explore-strategy.d.ts.map +1 -0
  61. package/dist/agent/entity-resolver/explore-strategy.js +109 -0
  62. package/dist/agent/entity-resolver/explore-strategy.js.map +1 -0
  63. package/dist/agent/entity-resolver/index.d.ts +8 -0
  64. package/dist/agent/entity-resolver/index.d.ts.map +1 -0
  65. package/dist/agent/entity-resolver/index.js +16 -0
  66. package/dist/agent/entity-resolver/index.js.map +1 -0
  67. package/dist/agent/entity-resolver/resolver.d.ts +18 -0
  68. package/dist/agent/entity-resolver/resolver.d.ts.map +1 -0
  69. package/dist/agent/entity-resolver/resolver.js +158 -0
  70. package/dist/agent/entity-resolver/resolver.js.map +1 -0
  71. package/dist/agent/entity-resolver/scorer.d.ts +3 -0
  72. package/dist/agent/entity-resolver/scorer.d.ts.map +1 -0
  73. package/dist/agent/entity-resolver/scorer.js +182 -0
  74. package/dist/agent/entity-resolver/scorer.js.map +1 -0
  75. package/dist/agent/entity-resolver/types.d.ts +89 -0
  76. package/dist/agent/entity-resolver/types.d.ts.map +1 -0
  77. package/dist/agent/entity-resolver/types.js +3 -0
  78. package/dist/agent/entity-resolver/types.js.map +1 -0
  79. package/dist/{modules/agent → agent}/generic-executor.d.ts +37 -27
  80. package/dist/agent/generic-executor.d.ts.map +1 -0
  81. package/dist/agent/generic-executor.js +620 -0
  82. package/dist/agent/generic-executor.js.map +1 -0
  83. package/dist/agent/handlers/cognitive-handler.d.ts +44 -0
  84. package/dist/agent/handlers/cognitive-handler.d.ts.map +1 -0
  85. package/dist/agent/handlers/cognitive-handler.js +172 -0
  86. package/dist/agent/handlers/cognitive-handler.js.map +1 -0
  87. package/dist/agent/handlers/index.d.ts +2 -0
  88. package/dist/agent/handlers/index.d.ts.map +1 -0
  89. package/dist/agent/handlers/index.js +7 -0
  90. package/dist/agent/handlers/index.js.map +1 -0
  91. package/dist/agent/handoff.d.ts +12 -0
  92. package/dist/agent/handoff.d.ts.map +1 -0
  93. package/dist/agent/handoff.js +62 -0
  94. package/dist/agent/handoff.js.map +1 -0
  95. package/dist/agent/llm-factory.d.ts.map +1 -0
  96. package/dist/agent/llm-factory.js +297 -0
  97. package/dist/agent/llm-factory.js.map +1 -0
  98. package/dist/agent/orchestrator.d.ts +18 -0
  99. package/dist/agent/orchestrator.d.ts.map +1 -0
  100. package/dist/agent/orchestrator.js +44 -0
  101. package/dist/agent/orchestrator.js.map +1 -0
  102. package/dist/{modules/agent → agent}/prompt-builder.d.ts +1 -1
  103. package/dist/agent/prompt-builder.d.ts.map +1 -0
  104. package/dist/agent/prompt-builder.js.map +1 -0
  105. package/dist/agent/registry.d.ts +19 -0
  106. package/dist/agent/registry.d.ts.map +1 -0
  107. package/dist/agent/registry.js +48 -0
  108. package/dist/agent/registry.js.map +1 -0
  109. package/dist/agent/tools/file-system.d.ts +11 -0
  110. package/dist/agent/tools/file-system.d.ts.map +1 -0
  111. package/dist/agent/tools/file-system.js +528 -0
  112. package/dist/agent/tools/file-system.js.map +1 -0
  113. package/dist/agent/tools/index.d.ts +4 -0
  114. package/dist/agent/tools/index.d.ts.map +1 -0
  115. package/dist/agent/tools/index.js +20 -0
  116. package/dist/agent/tools/index.js.map +1 -0
  117. package/dist/agent/tools/logger.d.ts +33 -0
  118. package/dist/agent/tools/logger.d.ts.map +1 -0
  119. package/dist/agent/tools/logger.js +86 -0
  120. package/dist/agent/tools/logger.js.map +1 -0
  121. package/dist/agent/tools/tool-resolver.d.ts +7 -0
  122. package/dist/agent/tools/tool-resolver.d.ts.map +1 -0
  123. package/dist/agent/tools/tool-resolver.js +122 -0
  124. package/dist/agent/tools/tool-resolver.js.map +1 -0
  125. package/dist/execution/adapters/in-memory-checkpoint.d.ts +11 -0
  126. package/dist/execution/adapters/in-memory-checkpoint.d.ts.map +1 -0
  127. package/dist/execution/adapters/in-memory-checkpoint.js +54 -0
  128. package/dist/execution/adapters/in-memory-checkpoint.js.map +1 -0
  129. package/dist/execution/compiler.d.ts +8 -0
  130. package/dist/execution/compiler.d.ts.map +1 -0
  131. package/dist/execution/compiler.js +50 -0
  132. package/dist/execution/compiler.js.map +1 -0
  133. package/dist/execution/controller.d.ts.map +1 -0
  134. package/dist/execution/controller.js.map +1 -0
  135. package/dist/execution/event-manager.d.ts +29 -0
  136. package/dist/execution/event-manager.d.ts.map +1 -0
  137. package/dist/{graph → execution}/event-manager.js +4 -114
  138. package/dist/execution/event-manager.js.map +1 -0
  139. package/dist/{graph → execution}/index.d.ts +50 -2
  140. package/dist/execution/index.d.ts.map +1 -0
  141. package/dist/execution/index.js +638 -0
  142. package/dist/execution/index.js.map +1 -0
  143. package/dist/execution/logger.d.ts.map +1 -0
  144. package/dist/execution/logger.js.map +1 -0
  145. package/dist/{graph → execution}/node.d.ts +6 -1
  146. package/dist/execution/node.d.ts.map +1 -0
  147. package/dist/{graph → execution}/node.js +83 -10
  148. package/dist/execution/node.js.map +1 -0
  149. package/dist/execution/observer.d.ts.map +1 -0
  150. package/dist/execution/observer.js.map +1 -0
  151. package/dist/execution/planner.d.ts +14 -0
  152. package/dist/execution/planner.d.ts.map +1 -0
  153. package/dist/execution/planner.js +43 -0
  154. package/dist/execution/planner.js.map +1 -0
  155. package/dist/execution/reducer.d.ts +19 -0
  156. package/dist/execution/reducer.d.ts.map +1 -0
  157. package/dist/execution/reducer.js +61 -0
  158. package/dist/execution/reducer.js.map +1 -0
  159. package/dist/execution/registry.d.ts +38 -0
  160. package/dist/execution/registry.d.ts.map +1 -0
  161. package/dist/execution/registry.js +63 -0
  162. package/dist/execution/registry.js.map +1 -0
  163. package/dist/execution/send-api.d.ts +24 -0
  164. package/dist/execution/send-api.d.ts.map +1 -0
  165. package/dist/execution/send-api.js +52 -0
  166. package/dist/execution/send-api.js.map +1 -0
  167. package/dist/execution/types.parallel.d.ts +61 -0
  168. package/dist/execution/types.parallel.d.ts.map +1 -0
  169. package/dist/execution/types.parallel.js +3 -0
  170. package/dist/execution/types.parallel.js.map +1 -0
  171. package/dist/execution/visualizer.d.ts.map +1 -0
  172. package/dist/execution/visualizer.js.map +1 -0
  173. package/dist/index.d.ts +27 -8
  174. package/dist/index.d.ts.map +1 -1
  175. package/dist/index.js +42 -8
  176. package/dist/index.js.map +1 -1
  177. package/dist/interfaces/index.d.ts +32 -1
  178. package/dist/interfaces/index.d.ts.map +1 -1
  179. package/dist/interfaces/index.js.map +1 -1
  180. package/dist/modules/cli/index.d.ts +13 -0
  181. package/dist/modules/cli/index.d.ts.map +1 -0
  182. package/dist/modules/cli/index.js +672 -0
  183. package/dist/modules/cli/index.js.map +1 -0
  184. package/dist/modules/nlp/engine.d.ts.map +1 -1
  185. package/dist/modules/nlp/engine.js +0 -1
  186. package/dist/modules/nlp/engine.js.map +1 -1
  187. package/dist/persistence/index.d.ts +12 -0
  188. package/dist/persistence/index.d.ts.map +1 -0
  189. package/dist/persistence/index.js +24 -0
  190. package/dist/persistence/index.js.map +1 -0
  191. package/dist/persistence/neo4j/driver.d.ts +26 -0
  192. package/dist/persistence/neo4j/driver.d.ts.map +1 -0
  193. package/dist/persistence/neo4j/driver.js +64 -0
  194. package/dist/persistence/neo4j/driver.js.map +1 -0
  195. package/dist/persistence/neo4j/entity-store.d.ts +15 -0
  196. package/dist/persistence/neo4j/entity-store.d.ts.map +1 -0
  197. package/dist/persistence/neo4j/entity-store.js +136 -0
  198. package/dist/persistence/neo4j/entity-store.js.map +1 -0
  199. package/dist/persistence/neo4j/execution-tracer.d.ts +19 -0
  200. package/dist/persistence/neo4j/execution-tracer.d.ts.map +1 -0
  201. package/dist/persistence/neo4j/execution-tracer.js +166 -0
  202. package/dist/persistence/neo4j/execution-tracer.js.map +1 -0
  203. package/dist/persistence/neo4j/memory-adapter.d.ts +35 -0
  204. package/dist/persistence/neo4j/memory-adapter.d.ts.map +1 -0
  205. package/dist/persistence/neo4j/memory-adapter.js +252 -0
  206. package/dist/persistence/neo4j/memory-adapter.js.map +1 -0
  207. package/dist/persistence/neo4j/petri-checkpoint-adapter.d.ts +22 -0
  208. package/dist/persistence/neo4j/petri-checkpoint-adapter.d.ts.map +1 -0
  209. package/dist/persistence/neo4j/petri-checkpoint-adapter.js +141 -0
  210. package/dist/persistence/neo4j/petri-checkpoint-adapter.js.map +1 -0
  211. package/dist/pipeline/agent-pipeline.d.ts +99 -0
  212. package/dist/pipeline/agent-pipeline.d.ts.map +1 -0
  213. package/dist/pipeline/agent-pipeline.js +356 -0
  214. package/dist/pipeline/agent-pipeline.js.map +1 -0
  215. package/dist/routing/checkpoint-adapter.d.ts +30 -0
  216. package/dist/routing/checkpoint-adapter.d.ts.map +1 -0
  217. package/dist/routing/checkpoint-adapter.js +83 -0
  218. package/dist/routing/checkpoint-adapter.js.map +1 -0
  219. package/dist/routing/documentation-generator.d.ts +47 -0
  220. package/dist/routing/documentation-generator.d.ts.map +1 -0
  221. package/dist/routing/documentation-generator.js +320 -0
  222. package/dist/routing/documentation-generator.js.map +1 -0
  223. package/dist/routing/index.d.ts +38 -0
  224. package/dist/routing/index.d.ts.map +1 -0
  225. package/dist/routing/index.js +375 -0
  226. package/dist/routing/index.js.map +1 -0
  227. package/dist/routing/intent-classifier.d.ts +206 -0
  228. package/dist/routing/intent-classifier.d.ts.map +1 -0
  229. package/dist/routing/intent-classifier.js +267 -0
  230. package/dist/routing/intent-classifier.js.map +1 -0
  231. package/dist/routing/matrix.d.ts +6 -0
  232. package/dist/routing/matrix.d.ts.map +1 -0
  233. package/dist/routing/matrix.js +131 -0
  234. package/dist/routing/matrix.js.map +1 -0
  235. package/dist/routing/orchestrator.d.ts +87 -0
  236. package/dist/routing/orchestrator.d.ts.map +1 -0
  237. package/dist/routing/orchestrator.js +425 -0
  238. package/dist/routing/orchestrator.js.map +1 -0
  239. package/dist/routing/postgres-checkpoint-adapter.d.ts +32 -0
  240. package/dist/routing/postgres-checkpoint-adapter.d.ts.map +1 -0
  241. package/dist/routing/postgres-checkpoint-adapter.js +167 -0
  242. package/dist/routing/postgres-checkpoint-adapter.js.map +1 -0
  243. package/dist/routing/redis-checkpoint-adapter.d.ts +34 -0
  244. package/dist/routing/redis-checkpoint-adapter.d.ts.map +1 -0
  245. package/dist/routing/redis-checkpoint-adapter.js +170 -0
  246. package/dist/routing/redis-checkpoint-adapter.js.map +1 -0
  247. package/dist/routing/types.d.ts +49 -0
  248. package/dist/routing/types.d.ts.map +1 -0
  249. package/dist/routing/types.js +3 -0
  250. package/dist/routing/types.js.map +1 -0
  251. package/dist/types/agent.d.ts +144 -88
  252. package/dist/types/agent.d.ts.map +1 -1
  253. package/dist/types/agent.js +49 -0
  254. package/dist/types/agent.js.map +1 -1
  255. package/dist/types/index.d.ts +46 -4
  256. package/dist/types/index.d.ts.map +1 -1
  257. package/dist/utils/generate-action-schema.d.ts +2 -3
  258. package/dist/utils/generate-action-schema.d.ts.map +1 -1
  259. package/dist/utils/generate-action-schema.js +3 -1
  260. package/dist/utils/generate-action-schema.js.map +1 -1
  261. package/dist/utils/logger.d.ts +27 -0
  262. package/dist/utils/logger.d.ts.map +1 -0
  263. package/dist/utils/logger.js +45 -0
  264. package/dist/utils/logger.js.map +1 -0
  265. package/docs/.gitbook/assets/image (1).png +0 -0
  266. package/docs/.gitbook/assets/image (2).png +0 -0
  267. package/docs/.gitbook/assets/image (3).png +0 -0
  268. package/docs/.gitbook/assets/image (4).png +0 -0
  269. package/docs/.gitbook/assets/image (5).png +0 -0
  270. package/docs/.gitbook/assets/image (6).png +0 -0
  271. package/docs/.gitbook/assets/image.png +0 -0
  272. package/docs/README.md +57 -0
  273. package/docs/SUMMARY.md +34 -0
  274. package/docs/cas-dusages.md +69 -0
  275. package/docs/cli/README.md +65 -0
  276. package/docs/concepts-cles.md +50 -0
  277. package/docs/core/architecture.md +87 -0
  278. package/docs/core/benchmark.md +59 -0
  279. package/docs/core/checkpoint.md +72 -0
  280. package/docs/core/documentation.md +55 -0
  281. package/docs/core/graphcontroller.md +63 -0
  282. package/docs/core/graphflow.md +137 -0
  283. package/docs/core/introduction.md +41 -0
  284. package/docs/core/les-evenements.md +95 -0
  285. package/docs/modules/agenda/README.md +63 -0
  286. package/docs/modules/agenda/interface-iagenda.md +170 -0
  287. package/docs/modules/agenda/les-adaptateurs/README.md +237 -0
  288. package/docs/modules/agenda/les-adaptateurs/nodecronadapter.md +91 -0
  289. package/docs/modules/introduction.md +55 -0
  290. package/docs/modules/les-adaptateurs.md +52 -0
  291. package/docs/modules/memoire/README.md +68 -0
  292. package/docs/modules/memoire/interface-imemory.md +183 -0
  293. package/docs/modules/memoire/les-adaptateurs/README.md +209 -0
  294. package/docs/modules/memoire/les-adaptateurs/inmemoryadapter.md +110 -0
  295. package/docs/modules/memoire/les-adaptateurs/meilisearchadapter.md +147 -0
  296. package/docs/modules/memoire/les-adaptateurs/redisadapter.md +212 -0
  297. package/docs/modules/nlp/README.md +44 -0
  298. package/docs/philosophie.md +51 -0
  299. package/docs/tutoriels/ajouter-des-conditions.md +150 -0
  300. package/docs/tutoriels/branching.md +194 -0
  301. package/docs/tutoriels/checkpoint-usage.md +99 -0
  302. package/docs/tutoriels/creer-agent-onchain.md +1041 -0
  303. package/docs/tutoriels/creer-un-agent.md +108 -0
  304. package/docs/tutoriels/creer-un-graphe-simple.md +92 -0
  305. package/docs/tutoriels/gerer-les-erreurs.md +124 -0
  306. package/docs/tutoriels/pour-commencer.md +73 -0
  307. package/docs/tutoriels/retry.md +166 -0
  308. package/execution/adapters/in-memory-checkpoint.ts +35 -0
  309. package/execution/compiler.ts +47 -0
  310. package/{graph → execution}/event-manager.ts +4 -117
  311. package/{graph → execution}/index.ts +376 -8
  312. package/{graph → execution}/node.ts +116 -12
  313. package/execution/planner.ts +40 -0
  314. package/execution/reducer.ts +73 -0
  315. package/execution/registry.ts +86 -0
  316. package/execution/send-api.ts +58 -0
  317. package/execution/types.parallel.ts +81 -0
  318. package/index.ts +35 -8
  319. package/interfaces/index.ts +37 -0
  320. package/modules/cli/index.ts +580 -0
  321. package/modules/nlp/engine.ts +0 -1
  322. package/package.json +50 -16
  323. package/persistence/index.ts +27 -0
  324. package/persistence/neo4j/driver.ts +34 -0
  325. package/persistence/neo4j/entity-store.ts +141 -0
  326. package/persistence/neo4j/execution-tracer.ts +194 -0
  327. package/persistence/neo4j/memory-adapter.ts +281 -0
  328. package/persistence/neo4j/petri-checkpoint-adapter.ts +153 -0
  329. package/pipeline/agent-pipeline.ts +426 -0
  330. package/routing/checkpoint-adapter.ts +79 -0
  331. package/routing/documentation-generator.ts +358 -0
  332. package/routing/index.ts +459 -0
  333. package/routing/intent-classifier.ts +360 -0
  334. package/routing/matrix.ts +138 -0
  335. package/routing/orchestrator.ts +498 -0
  336. package/routing/patterns/data-extraction.json +79 -0
  337. package/routing/patterns/human-approval.json +64 -0
  338. package/routing/patterns/rag-search.json +68 -0
  339. package/routing/postgres-checkpoint-adapter.ts +172 -0
  340. package/routing/redis-checkpoint-adapter.ts +187 -0
  341. package/routing/types.ts +59 -0
  342. package/routing/web-server.ts +260 -0
  343. package/scripts/generate-petri-docs.ts +70 -0
  344. package/scripts/get-gmail-token.js +65 -0
  345. package/scripts/get-gmail-token.ts +65 -0
  346. package/test/agent/agent.test.ts +92 -0
  347. package/test/agent/clone.test.ts +143 -0
  348. package/test/agent/cognitive-handler.test.ts +78 -0
  349. package/test/agent/entity-store.test.ts +80 -0
  350. package/test/agent/generic-executor.test.ts +230 -0
  351. package/test/agent/handoff.test.ts +163 -0
  352. package/test/agent/llm-factory.test.ts +40 -0
  353. package/test/agent/orchestrator.test.ts +156 -0
  354. package/test/agent/registry.test.ts +97 -0
  355. package/test/agent/tools.test.ts +267 -0
  356. package/test/execution/checkpoint.test.ts +811 -0
  357. package/test/{graph → execution}/controller.test.ts +2 -2
  358. package/test/{graph → execution}/event-manager.test.ts +1 -1
  359. package/test/{graph → execution}/index.test.ts +24 -15
  360. package/test/{graph → execution}/node.test.ts +3 -3
  361. package/test/{graph → execution}/observer.test.ts +2 -2
  362. package/test/execution/parallel.test.ts +135 -0
  363. package/test/execution/plan-llm-integration.test.ts +290 -0
  364. package/test/execution/plan-real-onchain.test.ts +226 -0
  365. package/test/execution/send-api.test.ts +121 -0
  366. package/test/modules/cli/index.test.ts +125 -0
  367. package/test/persistence/neo4j-execution-tracer.test.ts +96 -0
  368. package/test/persistence/neo4j-memory-adapter.test.ts +107 -0
  369. package/test/persistence/neo4j-petri-checkpoint.test.ts +89 -0
  370. package/test/pipeline/agent-pipeline.test.ts +118 -0
  371. package/test/routing/checkpoint-persistence.test.ts +58 -0
  372. package/test/routing/documentation-generator.test.ts +76 -0
  373. package/test/routing/integration.test.ts +261 -0
  374. package/test/routing/intent-classifier.test.ts +102 -0
  375. package/test/routing/petri.test.ts +156 -0
  376. package/test/routing/real-llm.test.ts +260 -0
  377. package/test-petri-features.ts +218 -0
  378. package/test-pipeline-api.ts +163 -0
  379. package/tsconfig.json +5 -2
  380. package/types/agent.ts +126 -4
  381. package/types/index.ts +66 -5
  382. package/utils/generate-action-schema.ts +5 -4
  383. package/utils/logger.ts +40 -0
  384. package/dist/graph/controller.d.ts.map +0 -1
  385. package/dist/graph/controller.js.map +0 -1
  386. package/dist/graph/event-manager.d.ts +0 -101
  387. package/dist/graph/event-manager.d.ts.map +0 -1
  388. package/dist/graph/event-manager.js.map +0 -1
  389. package/dist/graph/index.d.ts.map +0 -1
  390. package/dist/graph/index.js +0 -340
  391. package/dist/graph/index.js.map +0 -1
  392. package/dist/graph/logger.d.ts.map +0 -1
  393. package/dist/graph/logger.js.map +0 -1
  394. package/dist/graph/node.d.ts.map +0 -1
  395. package/dist/graph/node.js.map +0 -1
  396. package/dist/graph/observer.d.ts.map +0 -1
  397. package/dist/graph/observer.js.map +0 -1
  398. package/dist/graph/visualizer.d.ts.map +0 -1
  399. package/dist/graph/visualizer.js.map +0 -1
  400. package/dist/modules/agent/agent.d.ts +0 -35
  401. package/dist/modules/agent/agent.d.ts.map +0 -1
  402. package/dist/modules/agent/agent.js +0 -103
  403. package/dist/modules/agent/agent.js.map +0 -1
  404. package/dist/modules/agent/base/executor.d.ts.map +0 -1
  405. package/dist/modules/agent/base/executor.js.map +0 -1
  406. package/dist/modules/agent/base/index.d.ts.map +0 -1
  407. package/dist/modules/agent/base/index.js.map +0 -1
  408. package/dist/modules/agent/generic-assistant.d.ts +0 -20
  409. package/dist/modules/agent/generic-assistant.d.ts.map +0 -1
  410. package/dist/modules/agent/generic-assistant.js +0 -89
  411. package/dist/modules/agent/generic-assistant.js.map +0 -1
  412. package/dist/modules/agent/generic-executor.d.ts.map +0 -1
  413. package/dist/modules/agent/generic-executor.js +0 -189
  414. package/dist/modules/agent/generic-executor.js.map +0 -1
  415. package/dist/modules/agent/llm-factory.d.ts.map +0 -1
  416. package/dist/modules/agent/llm-factory.js +0 -56
  417. package/dist/modules/agent/llm-factory.js.map +0 -1
  418. package/dist/modules/agent/prompt-builder.d.ts.map +0 -1
  419. package/dist/modules/agent/prompt-builder.js.map +0 -1
  420. package/dist/modules/memory/adapters/in-memory/index.d.ts +0 -120
  421. package/dist/modules/memory/adapters/in-memory/index.d.ts.map +0 -1
  422. package/dist/modules/memory/adapters/in-memory/index.js +0 -212
  423. package/dist/modules/memory/adapters/in-memory/index.js.map +0 -1
  424. package/dist/modules/memory/adapters/meilisearch/index.d.ts +0 -110
  425. package/dist/modules/memory/adapters/meilisearch/index.d.ts.map +0 -1
  426. package/dist/modules/memory/adapters/meilisearch/index.js +0 -324
  427. package/dist/modules/memory/adapters/meilisearch/index.js.map +0 -1
  428. package/dist/modules/memory/adapters/redis/index.d.ts +0 -82
  429. package/dist/modules/memory/adapters/redis/index.d.ts.map +0 -1
  430. package/dist/modules/memory/adapters/redis/index.js +0 -160
  431. package/dist/modules/memory/adapters/redis/index.js.map +0 -1
  432. package/dist/modules/memory/index.d.ts +0 -67
  433. package/dist/modules/memory/index.d.ts.map +0 -1
  434. package/dist/modules/memory/index.js +0 -104
  435. package/dist/modules/memory/index.js.map +0 -1
  436. package/modules/agent/agent.ts +0 -107
  437. package/modules/agent/generic-assistant.ts +0 -92
  438. package/modules/agent/generic-executor.ts +0 -252
  439. package/modules/agent/llm-factory.ts +0 -47
  440. package/modules/memory/adapters/in-memory/index.ts +0 -208
  441. package/modules/memory/adapters/meilisearch/index.ts +0 -364
  442. package/modules/memory/adapters/redis/index.ts +0 -165
  443. package/modules/memory/index.ts +0 -93
  444. package/test/modules/memory/adapters/in-memory.test.ts +0 -153
  445. package/test/modules/memory/adapters/meilisearch.test.ts +0 -287
  446. package/test/modules/memory/base.test.ts +0 -230
  447. /package/dist/{modules/agent → agent}/llm-factory.d.ts +0 -0
  448. /package/dist/{modules/agent → agent}/prompt-builder.js +0 -0
  449. /package/dist/{graph → execution}/controller.d.ts +0 -0
  450. /package/dist/{graph → execution}/controller.js +0 -0
  451. /package/dist/{graph → execution}/logger.d.ts +0 -0
  452. /package/dist/{graph → execution}/logger.js +0 -0
  453. /package/dist/{graph → execution}/observer.d.ts +0 -0
  454. /package/dist/{graph → execution}/observer.js +0 -0
  455. /package/dist/{graph → execution}/visualizer.d.ts +0 -0
  456. /package/dist/{graph → execution}/visualizer.js +0 -0
  457. /package/{graph → execution}/controller.ts +0 -0
  458. /package/{graph → execution}/logger.ts +0 -0
  459. /package/{graph → execution}/observer.ts +0 -0
  460. /package/{graph → execution}/visualizer.ts +0 -0
@@ -0,0 +1,183 @@
1
+ ---
2
+ description: >-
3
+ L'interface IMemory définit une abstraction pour stocker, rechercher et gérer
4
+ des entrées mémorielles
5
+ ---
6
+
7
+ # Interface IMemory
8
+
9
+ L'interface `IMemory` définit une abstraction pour **stocker, rechercher et gérer des entrées mémorielles** dans un environnement où un agent doit retenir des informations sur le long terme ou pour des sessions temporaires.
10
+
11
+ Ce module suit une **approche modulaire et agnostique** du backend, permettant d’être implémenté avec différents moteurs de stockage :
12
+
13
+ * **Stockage en mémoire** (`InMemoryAdapter`)
14
+ * **Base de données** (`MeilisearchAdapter`, `RedisAdapter`, `PostgreSQLAdapter`)
15
+ * **Stockage distribué** (`VectorDBAdapter`, `PineconeAdapter`)
16
+
17
+ ***
18
+
19
+ ### **Objectif de l'interface**
20
+
21
+ L'interface `IMemory` doit permettre :
22
+
23
+ * **Le stockage structuré et sécurisé d'informations** persistantes ou temporaires.
24
+ * **Une récupération rapide** avec support des **requêtes sémantiques** (recherche par similarité).
25
+ * **La gestion dynamique du cycle de vie des mémoires** (création, expiration, suppression).
26
+ * **L’adaptabilité à différents backends**, grâce aux `IMemoryAdapter` interchangeables.
27
+
28
+ ***
29
+
30
+ ### **Définition de l’interface**
31
+
32
+ ```typescript
33
+ /**
34
+ * Interface pour la gestion de la mémoire d'un agent
35
+ */
36
+ export interface IMemory {
37
+ /**
38
+ * Initialise le service mémoire avec les configurations requises
39
+ * @returns {Promise<void>}
40
+ */
41
+ init(): Promise<void>;
42
+
43
+ /**
44
+ * Crée une nouvelle entrée mémoire.
45
+ * @param {MemoryInput} input - Données de la mémoire à enregistrer.
46
+ * @returns {Promise<MemoryEntry | undefined>} Retourne l’entrée créée, ou `undefined` en cas d’échec.
47
+ */
48
+ createMemory(input: MemoryInput): Promise<MemoryEntry | undefined>;
49
+
50
+ /**
51
+ * Récupère une entrée mémoire par son identifiant.
52
+ * @param {string} id - Identifiant unique de la mémoire.
53
+ * @param {string} roomId - Identifiant de la session ou du contexte.
54
+ * @returns {Promise<MemoryEntry | null>} Retourne l'entrée mémoire si trouvée, sinon `null`.
55
+ */
56
+ getMemoryById(id: string, roomId: string): Promise<MemoryEntry | null>;
57
+
58
+ /**
59
+ * Effectue une recherche d’entrées mémoire selon une requête textuelle.
60
+ * @param {string} query - Texte de la requête.
61
+ * @param {MemorySearchOptions} options - Options de recherche.
62
+ * @returns {Promise<MemoryEntry[]>} Retourne une liste d'entrées mémorielles correspondantes.
63
+ */
64
+ searchMemory(
65
+ query: string,
66
+ options: MemorySearchOptions
67
+ ): Promise<MemoryEntry[]>;
68
+
69
+ /**
70
+ * Récupère toutes les mémoires associées à un `roomId`.
71
+ * @param {string} roomId - Identifiant de la session.
72
+ * @returns {Promise<MemoryEntry[]>} Liste des entrées mémorielles.
73
+ */
74
+ getAllMemories(roomId: string): Promise<MemoryEntry[]>;
75
+
76
+ /**
77
+ * Supprime une entrée mémoire spécifique.
78
+ * @param {string} id - Identifiant de la mémoire.
79
+ * @param {string} roomId - Identifiant de la session.
80
+ * @returns {Promise<void>}
81
+ */
82
+ deleteMemoryById(id: string, roomId: string): Promise<void>;
83
+
84
+ /**
85
+ * Supprime toutes les entrées mémorielles d'un `roomId`.
86
+ * @param {string} roomId - Identifiant de la session.
87
+ * @returns {Promise<void>}
88
+ */
89
+ clearMemories(roomId: string): Promise<void>;
90
+ }
91
+ ```
92
+
93
+ ***
94
+
95
+ ### **Interfaces associées**
96
+
97
+ #### **1. `MemoryInput` : Données pour une nouvelle entrée mémoire**
98
+
99
+ Lorsqu’une nouvelle mémoire est créée, elle doit suivre une structure bien définie.
100
+
101
+ ```typescript
102
+ /**
103
+ * Données nécessaires pour créer une mémoire
104
+ */
105
+ export interface MemoryInput {
106
+ /** Identifiant unique de la mémoire (optionnel, généré si absent) */
107
+ id?: string;
108
+ /** Contenu textuel de la mémoire */
109
+ data: string;
110
+ /** Identifiant de la session ou du contexte */
111
+ roomId: string;
112
+ /** (Optionnel) Vecteur d’embedding pour recherche sémantique */
113
+ embedding?: number[];
114
+ /** Date d’expiration (TTL) */
115
+ expiresAt?: Date;
116
+ }
117
+ ```
118
+
119
+ #### **2. `MemoryEntry` : Représentation d’une mémoire stockée**
120
+
121
+ Une mémoire active stockée doit être représentée sous cette forme.
122
+
123
+ ```typescript
124
+ /**
125
+ * Représentation d'une mémoire stockée
126
+ */
127
+ export interface MemoryEntry extends MemoryInput {
128
+ /** Identifiant unique attribué à la mémoire */
129
+ id: string;
130
+ /** Date de création de la mémoire */
131
+ createdAt: Date;
132
+ }
133
+ ```
134
+
135
+ #### **3. `MemorySearchOptions` : Options de recherche avancées**
136
+
137
+ La recherche mémoire peut inclure des critères supplémentaires pour affiner les résultats.
138
+
139
+ ```typescript
140
+ /**
141
+ * Options de recherche pour requêtes mémoire
142
+ */
143
+ export interface MemorySearchOptions {
144
+ /** Identifiant du contexte de recherche */
145
+ roomId: string;
146
+ /** Nombre maximal de résultats */
147
+ limit?: number;
148
+ /** Score minimal de similarité si une recherche sémantique est utilisée */
149
+ minSimilarity?: number;
150
+ }
151
+ ```
152
+
153
+ ***
154
+
155
+ ### **Pourquoi cette interface ?**
156
+
157
+ L’interface `IMemory` permet une **gestion optimisée et évolutive** des données mémoire :
158
+
159
+ 1. **Abstraction complète du moteur de stockage**
160
+ * Permet d’implémenter `IMemory` avec **n’importe quel backend** (`Redis`, `PostgreSQL`, `VectorDB`, etc.).
161
+ * Découple la **logique métier** de la **logique de persistance**.
162
+ 2. **Support des recherches sémantiques**
163
+ * Les données peuvent être indexées sous forme de **vecteurs** (`embedding`).
164
+ * Permet des recherches avancées **par similarité** et non uniquement par mots-clés.
165
+ 3. **Modèle flexible et dynamique**
166
+ * Gestion **multi-sessions (`roomId`)** pour segmenter la mémoire selon les contextes.
167
+ * Prise en charge d’un **TTL** (`expiresAt`) pour éviter l’accumulation inutile de données.
168
+ 4. **Extensibilité via des adaptateurs (`IMemoryAdapter`)**
169
+ * Compatible avec **des moteurs de stockage externes** (`Meilisearch`, `Pinecone`, etc.).
170
+ * Possibilité d’intégrer **plusieurs sources de mémoire** (ex: mémoire immédiate + historique long-terme).
171
+
172
+ ***
173
+
174
+ ### **Cas d’usage**
175
+
176
+ L’interface `IMemory` peut être utilisée dans plusieurs scénarios :
177
+
178
+ | **Cas d'usage** | **Exemple** |
179
+ | --------------------------------- | ---------------------------------------------------------------- |
180
+ | Stockage d’historique utilisateur | Mémorisation des interactions d’un chatbot avec un utilisateur. |
181
+ | Recherche sémantique | Trouver des documents ou réponses similaires à une requête. |
182
+ | Maintien du contexte | Conserver un état conversationnel pour un agent autonome. |
183
+ | Mémoire dynamique | Stocker temporairement des informations utiles dans un `roomId`. |
@@ -0,0 +1,209 @@
1
+ ---
2
+ description: >-
3
+ Un adaptateur mémoire est un composant permettant de gérer la persistance et
4
+ la récupération des données de l'agent en fonction du moteur sous-jacent.
5
+ ---
6
+
7
+ # Les adaptateurs
8
+
9
+ ### **Qu’est-ce qu’un adaptateur mémoire ?**
10
+
11
+ Un **adaptateur mémoire** est un composant permettant de gérer la **persistance et la récupération** des données de l'agent en fonction du moteur sous-jacent.
12
+
13
+ Il sert d'interface entre le système et le stockage, en encapsulant les spécificités d’un moteur (base de données, cache, indexation…).
14
+
15
+ Grâce aux adaptateurs, **le système peut changer de moteur de stockage sans modifier son code**.
16
+
17
+ ***
18
+
19
+ ### **Fonctionnement des adaptateurs mémoire**
20
+
21
+ Tous les adaptateurs doivent implémenter une interface commune **`IMemoryAdapter`**, garantissant une API standardisée.
22
+
23
+ #### **Méthodes essentielles d’un adaptateur**
24
+
25
+ | Méthode | Description |
26
+ | ------------------------------------------------------------------------------ | -------------------------------------------- |
27
+ | `init(roomId: string)` | Initialise le stockage pour une salle donnée |
28
+ | `createMemory(input: CreateMemoryInput)` | Stocke une nouvelle mémoire |
29
+ | `getMemoryById(id: string, roomId: string)` | Récupère une mémoire spécifique |
30
+ | `getMemoryByIndex(query: string, options: { roomId: string; limit?: number })` | Recherche des mémoires par indexation |
31
+ | `getAllMemories(roomId: string)` | Récupère toutes les mémoires d’une salle |
32
+ | `clearMemoryById(id: string, roomId: string)` | Supprime une mémoire spécifique |
33
+ | `clearAllMemories()` | Vide toutes les mémoires |
34
+
35
+ Ainsi, un adaptateur peut être **changé ou ajouté dynamiquement**, sans modifier l'agent.
36
+
37
+ ***
38
+
39
+ ### **Adaptateurs intégrés (par défaut)**
40
+
41
+ Le framework propose **plusieurs adaptateurs intégrés** :
42
+
43
+ | Adaptateur | Type de stockage | Cas d’usage |
44
+ | ---------------------- | -------------------- | ------------------------------- |
45
+ | **InMemoryAdapter** | RAM (non persistant) | Cache rapide, temporaire |
46
+ | **MeilisearchAdapter** | Moteur de recherche | Recherche avancée et indexation |
47
+ | **RedisAdapter** | Stockage clé-valeur | Cache persistant avec TTL |
48
+
49
+ ***
50
+
51
+ ### **Créer un nouvel adaptateur : Exemple avec SQLite**
52
+
53
+ Si on veut utiliser **SQLite** comme moteur de stockage mémoire, on doit créer un nouvel adaptateur.
54
+
55
+ #### **1. Installer la dépendance**
56
+
57
+ On utilise [BetterSQLite3](https://github.com/WiseLibs/better-sqlite3) pour des accès rapides et synchrones.
58
+
59
+ ```sh
60
+ npm install better-sqlite3
61
+ ```
62
+
63
+ #### **2. Implémenter l’adaptateur**
64
+
65
+ On crée un fichier `BetterSQLiteAdapter.ts` qui respecte l’interface `IMemoryAdapter`.
66
+
67
+ ```typescript
68
+ import Database from "better-sqlite3";
69
+ import { IMemoryAdapter } from "../interfaces";
70
+ import { BaseMemoryType, CreateMemoryInput } from "../types";
71
+
72
+ /**
73
+ * @module BetterSQLiteAdapter
74
+ * @description Adaptateur SQLite pour le stockage persistant des mémoires.
75
+ */
76
+ export class BetterSQLiteAdapter implements IMemoryAdapter {
77
+ private db: Database.Database;
78
+
79
+ /**
80
+ * Initialise l'adaptateur avec une base SQLite.
81
+ * @param {string} dbPath - Chemin vers le fichier SQLite
82
+ */
83
+ constructor(dbPath: string = "./memory.db") {
84
+ this.db = new Database(dbPath);
85
+ this.initSchema();
86
+ }
87
+
88
+ /**
89
+ * Initialise la table SQLite si elle n'existe pas
90
+ */
91
+ private initSchema(): void {
92
+ this.db.exec(`
93
+ CREATE TABLE IF NOT EXISTS memories (
94
+ id TEXT PRIMARY KEY,
95
+ roomId TEXT,
96
+ data TEXT,
97
+ createdAt TEXT
98
+ )
99
+ `);
100
+ }
101
+
102
+ /**
103
+ * Initialise le stockage pour une salle spécifique (non nécessaire pour SQLite).
104
+ */
105
+ async init(_roomId: string): Promise<void> {
106
+ return;
107
+ }
108
+
109
+ /**
110
+ * Stocke une nouvelle mémoire dans la base SQLite.
111
+ * @param {CreateMemoryInput} input - Données de la mémoire
112
+ * @returns {Promise<BaseMemoryType>} - Mémoire créée
113
+ */
114
+ async createMemory(input: CreateMemoryInput): Promise<BaseMemoryType> {
115
+ const memory: BaseMemoryType = {
116
+ id: input.id || crypto.randomUUID(),
117
+ data: input.data,
118
+ roomId: input.roomId,
119
+ createdAt: new Date(),
120
+ };
121
+
122
+ const stmt = this.db.prepare(`
123
+ INSERT INTO memories (id, roomId, data, createdAt)
124
+ VALUES (?, ?, ?, ?)
125
+ `);
126
+ stmt.run(memory.id, memory.roomId, memory.data, memory.createdAt.toISOString());
127
+
128
+ return memory;
129
+ }
130
+
131
+ /**
132
+ * Récupère une mémoire par ID et salle.
133
+ * @param {string} id - Identifiant de la mémoire
134
+ * @param {string} roomId - Identifiant de la salle
135
+ * @returns {Promise<BaseMemoryType | null>} - Mémoire trouvée ou null
136
+ */
137
+ async getMemoryById(id: string, roomId: string): Promise<BaseMemoryType | null> {
138
+ const stmt = this.db.prepare(`
139
+ SELECT * FROM memories WHERE id = ? AND roomId = ?
140
+ `);
141
+ const row = stmt.get(id, roomId);
142
+ return row ? { ...row, createdAt: new Date(row.createdAt) } : null;
143
+ }
144
+
145
+ /**
146
+ * Recherche des mémoires contenant un mot-clé.
147
+ */
148
+ async getMemoryByIndex(query: string, options: { roomId: string; limit?: number }): Promise<BaseMemoryType[]> {
149
+ const stmt = this.db.prepare(`
150
+ SELECT * FROM memories WHERE roomId = ? AND data LIKE ? LIMIT ?
151
+ `);
152
+ return stmt.all(options.roomId, `%${query}%`, options.limit || 10);
153
+ }
154
+
155
+ /**
156
+ * Récupère toutes les mémoires d'une salle.
157
+ */
158
+ async getAllMemories(roomId: string): Promise<BaseMemoryType[]> {
159
+ const stmt = this.db.prepare(`
160
+ SELECT * FROM memories WHERE roomId = ?
161
+ `);
162
+ return stmt.all(roomId);
163
+ }
164
+
165
+ /**
166
+ * Supprime une mémoire spécifique.
167
+ */
168
+ async clearMemoryById(id: string, roomId: string): Promise<void> {
169
+ const stmt = this.db.prepare(`
170
+ DELETE FROM memories WHERE id = ? AND roomId = ?
171
+ `);
172
+ stmt.run(id, roomId);
173
+ }
174
+
175
+ /**
176
+ * Supprime toutes les mémoires.
177
+ */
178
+ async clearAllMemories(): Promise<void> {
179
+ this.db.exec(`DELETE FROM memories`);
180
+ }
181
+ }
182
+ ```
183
+
184
+ ***
185
+
186
+ ### **Intégrer le nouvel adaptateur**
187
+
188
+ Une fois le nouvel adaptateur implémenté, on peut l’intégrer dans l’agent :
189
+
190
+ ```typescript
191
+ import { BetterSQLiteAdapter } from "./BetterSQLiteAdapter";
192
+ import { Memory } from "../modules/memory";
193
+
194
+ // Initialisation avec SQLite
195
+ const memoryAdapter = new BetterSQLiteAdapter("./agent-memory.db");
196
+ const memoryModule = new Memory(memoryAdapter);
197
+
198
+ async function run() {
199
+ await memoryModule.createMemory({
200
+ data: "Ceci est un test",
201
+ roomId: "chat-session-1",
202
+ });
203
+
204
+ const memories = await memoryModule.getAllMemories("chat-session-1");
205
+ console.log("Mémoires récupérées :", memories);
206
+ }
207
+
208
+ run();
209
+ ```
@@ -0,0 +1,110 @@
1
+ ---
2
+ description: >-
3
+ InMemoryAdapter est l'implémentation la plus simple d'un adaptateur mémoire.
4
+ Il stocke les données en RAM.
5
+ ---
6
+
7
+ # InMemoryAdapter
8
+
9
+ `InMemoryAdapter` est une implémentation simple et efficace de l’interface **IMemoryAdapter**. Il repose sur une structure **Map** pour stocker des entrées mémoire **en RAM** et ne conserve aucune donnée une fois le processus arrêté.
10
+
11
+ Ce type d’adaptateur est particulièrement adapté aux cas où la mémoire doit être temporaire, avec un accès très rapide, sans nécessiter de persistance durable.
12
+
13
+ ***
14
+
15
+ ### **Spécificités techniques de l’InMemoryAdapter**
16
+
17
+ #### **Stockage en mémoire via une Map**
18
+
19
+ L’adaptateur utilise une **Map TypeScript**, qui associe un `roomId` à une liste de mémoires. Contrairement à une base de données, les opérations de lecture et d’écriture sont exécutées en **temps constant O(1)** pour l’insertion et l’accès direct par clé.
20
+
21
+ ```typescript
22
+ private storage: Map<string, BaseMemoryType[]> = new Map();
23
+ ```
24
+
25
+ Chaque **room** représente une instance de mémoire séparée. Cela permet d’isoler les données par contexte, tout en bénéficiant d’une récupération rapide.
26
+
27
+ ***
28
+
29
+ #### **Initialisation et création dynamique des rooms**
30
+
31
+ Lorsqu’un système accède à la mémoire pour la première fois, une **vérification est effectuée** afin de s’assurer que le `roomId` existe bien dans la **Map**. Si ce n’est pas le cas, un espace de stockage est créé dynamiquement.
32
+
33
+ ```typescript
34
+ async init(roomId: string): Promise<void> {
35
+ if (!this.storage.has(roomId)) {
36
+ this.storage.set(roomId, []);
37
+ }
38
+ }
39
+ ```
40
+
41
+ Ce mécanisme permet une allocation **à la demande**, évitant tout stockage inutile en mémoire.
42
+
43
+ ***
44
+
45
+ #### **Optimisation des recherches**
46
+
47
+ `InMemoryAdapter` ne permet pas d’indexation avancée comme une base de données. La recherche est effectuée **par filtrage séquentiel** dans la liste des mémoires associées à une room.
48
+
49
+ ```typescript
50
+ async getMemoryByIndex(query: string, options: { roomId: string; limit?: number })
51
+ : Promise<BaseMemoryType[]> {
52
+ const memories = this.storage.get(options.roomId) || [];
53
+ return memories.filter((m) => m.data.includes(query)).slice(0, options.limit || 10);
54
+ }
55
+ ```
56
+
57
+ Ce type de recherche est suffisant pour un usage **temporaire ou de prototypage**, mais il devient inefficace sur **de grands volumes de données**.
58
+
59
+ ***
60
+
61
+ #### **Effacement ciblé et suppression totale**
62
+
63
+ `InMemoryAdapter` permet de supprimer des entrées individuelles ou de réinitialiser l’ensemble des données en **effaçant directement les références stockées**.
64
+
65
+ **Suppression d’une mémoire spécifique**
66
+
67
+ ```typescript
68
+ async clearMemoryById(id: string, roomId: string): Promise<void> {
69
+ const memories = this.storage.get(roomId) || [];
70
+ this.storage.set(roomId, memories.filter((m) => m.id !== id));
71
+ }
72
+ ```
73
+
74
+ **Réinitialisation complète de toutes les rooms**
75
+
76
+ ```typescript
77
+ async clearAllMemories(): Promise<void> {
78
+ this.storage.clear();
79
+ }
80
+ ```
81
+
82
+ Ces opérations sont **instantanées**, mais elles **ne permettent pas d’annulation** (contrairement à une base de données transactionnelle).
83
+
84
+ ***
85
+
86
+ ### **Limitations et considérations**
87
+
88
+ #### **Absence de persistance**
89
+
90
+ `InMemoryAdapter` est **volatile** : les données disparaissent dès l’arrêt du processus. Pour des systèmes nécessitant un historique persistant, un adaptateur basé sur un stockage externe (comme **Redis**, **SQLite**, ou **Meilisearch**) est recommandé.
91
+
92
+ #### **Consommation mémoire**
93
+
94
+ Le stockage en **RAM** signifie que la quantité de mémoire disponible limite la capacité de stockage. **Une accumulation non contrôlée peut entraîner des fuites mémoire et un crash de l’application**.
95
+
96
+ #### **Performances sur de gros volumes**
97
+
98
+ Les accès directs via `roomId` sont rapides, mais la **recherche textuelle est inefficace** sur de grands ensembles de données, car elle repose sur une **parcours linéaire**.
99
+
100
+ ***
101
+
102
+ ### **Cas d’usage**&#x20;
103
+
104
+ `InMemoryAdapter` est une solution pertinente pour :
105
+
106
+ * **Stockage temporaire d’interactions utilisateur** dans des agents conversationnels.
107
+ * **Tests et prototypage rapide** sans configurer de base de données.
108
+ * **Cache léger** pour éviter des appels répétés à des services externes.
109
+
110
+ Pour une application en production ou nécessitant des recherches complexes, une alternative **persistance** est nécessaire.&#x20;
@@ -0,0 +1,147 @@
1
+ ---
2
+ description: >-
3
+ L'adaptateur Meilisearch est conçu pour offrir une indexation rapide et une
4
+ recherche avancée sur les données en mémoire.
5
+ ---
6
+
7
+ # MeiliSearchAdapter
8
+
9
+ `MeilisearchAdapter` intègre Meilisearch comme moteur de stockage et de recherche pour la mémoire des systèmes.&#x20;
10
+
11
+ Ce type d’adaptateur est particulièrement adapté aux cas où un système doit retrouver rapidement des informations contextuelles à partir d’une **grande quantité de données**.
12
+
13
+ ***
14
+
15
+ ### **Spécificités techniques du MeilisearchAdapter**
16
+
17
+ #### **Stockage sous forme d’index dans Meilisearch**
18
+
19
+ L’adaptateur crée un index distinct pour chaque `roomId`. Un index est l’équivalent d’une **collection de documents** dans une base NoSQL, permettant une **recherche optimisée**.
20
+
21
+ ```typescript
22
+ private async initializeStorage(roomId: string): Promise<void> {
23
+ try {
24
+ await this.makeRequest(`/indexes/${roomId}`);
25
+ } catch {
26
+ await this.makeRequest("/indexes", {
27
+ method: "POST",
28
+ body: JSON.stringify({ uid: roomId, primaryKey: "id" }),
29
+ });
30
+ }
31
+ }
32
+ ```
33
+
34
+ Si l’index n’existe pas encore, il est automatiquement créé, évitant toute configuration manuelle.
35
+
36
+ ***
37
+
38
+ #### **Indexation et recherche avancée**
39
+
40
+ Meilisearch permet des **requêtes de recherche floues** avec un **scoring** de pertinence. Les résultats sont classés en fonction de leur **similarité avec la requête**, ce qui est idéal pour une mémoire adaptative.
41
+
42
+ **Indexation d’une nouvelle mémoire**
43
+
44
+ ```typescript
45
+ async createMemory(input: CreateMemoryInput & { embedding?: number[] }): Promise<BaseMemoryType | undefined> {
46
+ await this.initializeStorage(input.roomId);
47
+
48
+ const existingMemory = await this.search(input.data, input.roomId, { limit: 1 });
49
+ if (existingMemory.length > 0) {
50
+ return existingMemory[0].document;
51
+ }
52
+
53
+ const memory: BaseMemoryType = {
54
+ id: input.id || crypto.randomUUID(),
55
+ data: input.data,
56
+ embedding: input.embedding,
57
+ roomId: input.roomId,
58
+ createdAt: new Date(),
59
+ };
60
+
61
+ await this.addDocuments([memory], input.roomId);
62
+ return memory;
63
+ }
64
+ ```
65
+
66
+ Chaque mémoire ajoutée est immédiatement indexée et accessible via **une recherche contextuelle rapide**.
67
+
68
+ ***
69
+
70
+ #### **Optimisation de la recherche et scoring de pertinence**
71
+
72
+ Contrairement à une recherche brute basée sur une correspondance exacte, Meilisearch évalue **le degré de similarité** des documents avec la requête. Cela permet d’améliorer la compréhension contextuelle du système.
73
+
74
+ ```typescript
75
+ private async search(query: string, roomId: string, options?: { limit?: number; threshold?: number }): Promise<SearchResult[]> {
76
+ const searchResults = await this.makeRequest(`/indexes/${roomId}/search`, {
77
+ method: "POST",
78
+ body: JSON.stringify({
79
+ q: query,
80
+ limit: options?.limit || 10,
81
+ }),
82
+ });
83
+
84
+ if (!searchResults.hits) return [];
85
+
86
+ return searchResults.hits.map((hit: any) => ({
87
+ document: {
88
+ id: hit.id,
89
+ data: hit.data,
90
+ embedding: hit.embedding,
91
+ roomId: hit.roomId,
92
+ createdAt: hit.createdAt,
93
+ },
94
+ score: hit._score || 0,
95
+ }));
96
+ }
97
+ ```
98
+
99
+ Les résultats retournés sont **triés par pertinence**, avec un score de similarité permettant d'ajuster dynamiquement les réponses du système.
100
+
101
+ ***
102
+
103
+ #### **Suppression et nettoyage d’index**
104
+
105
+ L’adaptateur permet d’effacer **sélectivement** une mémoire spécifique ou **de supprimer un index complet**, ce qui est utile lorsque la mémoire devient obsolète ou que l’on veut réinitialiser un contexte.
106
+
107
+ **Suppression d’une mémoire spécifique**
108
+
109
+ ```typescript
110
+ async clearMemoryById(id: string, roomId: string): Promise<void> {
111
+ await this.makeRequest(`/indexes/${roomId}/documents/${id}`, { method: "DELETE" });
112
+ }
113
+ ```
114
+
115
+ **Suppression de toutes les mémoires d’un index**
116
+
117
+ ```typescript
118
+ private async deleteStorage(roomId: string): Promise<void> {
119
+ await this.makeRequest(`/indexes/${roomId}`, { method: "DELETE" });
120
+ }
121
+ ```
122
+
123
+ ***
124
+
125
+ ### **Limitations et considérations**
126
+
127
+ #### **Dépendance à un service externe**
128
+
129
+ Meilisearch nécessite une instance serveur active. Un système exécuté localement doit donc **se connecter à une base distante** ou à **une instance en auto-hébergement**.
130
+
131
+ #### **Latence réseau**
132
+
133
+ Les performances dépendent de la latence du serveur Meilisearch. Pour des besoins de faible latence, une solution comme **Redis** peut être plus adaptée.
134
+
135
+ #### **Consommation mémoire et stockage**
136
+
137
+ Les index doivent être **nettoyés régulièrement**, en particulier si l’agent génère un **grand volume de données**.
138
+
139
+ ***
140
+
141
+ ### **Cas d’usage**&#x20;
142
+
143
+ **`MeilisearchAdapter`** est idéal pour :
144
+
145
+ * **La recherche avancée en langage naturel** dans les logs de l’agent.
146
+ * **L’historisation et la récupération d’interactions** sur le long terme.
147
+ * **La gestion d’une base de connaissances structurée** pour un agent conversationnel.