@ixo/common 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 (328) hide show
  1. package/.eslintrc.js +9 -0
  2. package/.prettierignore +3 -0
  3. package/.prettierrc.cjs +4 -0
  4. package/.turbo/turbo-build.log +4 -0
  5. package/CHANGELOG.md +76 -0
  6. package/README.md +245 -0
  7. package/dist/ai/checkpointer/index.d.ts +2 -0
  8. package/dist/ai/checkpointer/index.d.ts.map +1 -0
  9. package/dist/ai/checkpointer/index.js +2 -0
  10. package/dist/ai/checkpointer/index.js.map +1 -0
  11. package/dist/ai/index.d.ts +9 -0
  12. package/dist/ai/index.d.ts.map +1 -0
  13. package/dist/ai/index.js +9 -0
  14. package/dist/ai/index.js.map +1 -0
  15. package/dist/ai/models/index.d.ts +2 -0
  16. package/dist/ai/models/index.d.ts.map +1 -0
  17. package/dist/ai/models/index.js +2 -0
  18. package/dist/ai/models/index.js.map +1 -0
  19. package/dist/ai/models/openai.d.ts +10 -0
  20. package/dist/ai/models/openai.d.ts.map +1 -0
  21. package/dist/ai/models/openai.js +38 -0
  22. package/dist/ai/models/openai.js.map +1 -0
  23. package/dist/ai/models/openai.test.d.ts +2 -0
  24. package/dist/ai/models/openai.test.d.ts.map +1 -0
  25. package/dist/ai/models/openai.test.js +58 -0
  26. package/dist/ai/models/openai.test.js.map +1 -0
  27. package/dist/ai/nodes/create-fake-node.d.ts +2 -0
  28. package/dist/ai/nodes/create-fake-node.d.ts.map +1 -0
  29. package/dist/ai/nodes/create-fake-node.js +2 -0
  30. package/dist/ai/nodes/create-fake-node.js.map +1 -0
  31. package/dist/ai/nodes/find-docs/find-docs.prompt.d.ts +3 -0
  32. package/dist/ai/nodes/find-docs/find-docs.prompt.d.ts.map +1 -0
  33. package/dist/ai/nodes/find-docs/find-docs.prompt.js +61 -0
  34. package/dist/ai/nodes/find-docs/find-docs.prompt.js.map +1 -0
  35. package/dist/ai/nodes/find-docs/index.d.ts +3 -0
  36. package/dist/ai/nodes/find-docs/index.d.ts.map +1 -0
  37. package/dist/ai/nodes/find-docs/index.js +3 -0
  38. package/dist/ai/nodes/find-docs/index.js.map +1 -0
  39. package/dist/ai/nodes/find-docs/node.d.ts +17 -0
  40. package/dist/ai/nodes/find-docs/node.d.ts.map +1 -0
  41. package/dist/ai/nodes/find-docs/node.js +46 -0
  42. package/dist/ai/nodes/find-docs/node.js.map +1 -0
  43. package/dist/ai/nodes/generic-chat/generic-chat.node.d.ts +12 -0
  44. package/dist/ai/nodes/generic-chat/generic-chat.node.d.ts.map +1 -0
  45. package/dist/ai/nodes/generic-chat/generic-chat.node.js +34 -0
  46. package/dist/ai/nodes/generic-chat/generic-chat.node.js.map +1 -0
  47. package/dist/ai/nodes/generic-chat/generic-chat.prompt.d.ts +10 -0
  48. package/dist/ai/nodes/generic-chat/generic-chat.prompt.d.ts.map +1 -0
  49. package/dist/ai/nodes/generic-chat/generic-chat.prompt.js +58 -0
  50. package/dist/ai/nodes/generic-chat/generic-chat.prompt.js.map +1 -0
  51. package/dist/ai/nodes/generic-chat/index.d.ts +2 -0
  52. package/dist/ai/nodes/generic-chat/index.d.ts.map +1 -0
  53. package/dist/ai/nodes/generic-chat/index.js +2 -0
  54. package/dist/ai/nodes/generic-chat/index.js.map +1 -0
  55. package/dist/ai/nodes/index.d.ts +4 -0
  56. package/dist/ai/nodes/index.d.ts.map +1 -0
  57. package/dist/ai/nodes/index.js +4 -0
  58. package/dist/ai/nodes/index.js.map +1 -0
  59. package/dist/ai/semantic-router-factory/create-semantic-router.d.ts +7 -0
  60. package/dist/ai/semantic-router-factory/create-semantic-router.d.ts.map +1 -0
  61. package/dist/ai/semantic-router-factory/create-semantic-router.js +71 -0
  62. package/dist/ai/semantic-router-factory/create-semantic-router.js.map +1 -0
  63. package/dist/ai/semantic-router-factory/create-semantic-router.test.d.ts +2 -0
  64. package/dist/ai/semantic-router-factory/create-semantic-router.test.d.ts.map +1 -0
  65. package/dist/ai/semantic-router-factory/create-semantic-router.test.js +68 -0
  66. package/dist/ai/semantic-router-factory/create-semantic-router.test.js.map +1 -0
  67. package/dist/ai/semantic-router-factory/index.d.ts +4 -0
  68. package/dist/ai/semantic-router-factory/index.d.ts.map +1 -0
  69. package/dist/ai/semantic-router-factory/index.js +4 -0
  70. package/dist/ai/semantic-router-factory/index.js.map +1 -0
  71. package/dist/ai/semantic-router-factory/semantic-router-prompt.d.ts +2 -0
  72. package/dist/ai/semantic-router-factory/semantic-router-prompt.d.ts.map +1 -0
  73. package/dist/ai/semantic-router-factory/semantic-router-prompt.js +169 -0
  74. package/dist/ai/semantic-router-factory/semantic-router-prompt.js.map +1 -0
  75. package/dist/ai/semantic-router-factory/validate-routes.d.ts +2 -0
  76. package/dist/ai/semantic-router-factory/validate-routes.d.ts.map +1 -0
  77. package/dist/ai/semantic-router-factory/validate-routes.js +16 -0
  78. package/dist/ai/semantic-router-factory/validate-routes.js.map +1 -0
  79. package/dist/ai/tools/action-caller.d.ts +14 -0
  80. package/dist/ai/tools/action-caller.d.ts.map +1 -0
  81. package/dist/ai/tools/action-caller.js +12 -0
  82. package/dist/ai/tools/action-caller.js.map +1 -0
  83. package/dist/ai/tools/ask-ixo-guru/ask-ixo-guru.d.ts +25 -0
  84. package/dist/ai/tools/ask-ixo-guru/ask-ixo-guru.d.ts.map +1 -0
  85. package/dist/ai/tools/ask-ixo-guru/ask-ixo-guru.js +46 -0
  86. package/dist/ai/tools/ask-ixo-guru/ask-ixo-guru.js.map +1 -0
  87. package/dist/ai/tools/ask-ixo-guru/index.d.ts +2 -0
  88. package/dist/ai/tools/ask-ixo-guru/index.d.ts.map +1 -0
  89. package/dist/ai/tools/ask-ixo-guru/index.js +2 -0
  90. package/dist/ai/tools/ask-ixo-guru/index.js.map +1 -0
  91. package/dist/ai/tools/browser-tool-caller.d.ts +14 -0
  92. package/dist/ai/tools/browser-tool-caller.d.ts.map +1 -0
  93. package/dist/ai/tools/browser-tool-caller.js +12 -0
  94. package/dist/ai/tools/browser-tool-caller.js.map +1 -0
  95. package/dist/ai/tools/frontend-tool-caller.d.ts +10 -0
  96. package/dist/ai/tools/frontend-tool-caller.d.ts.map +1 -0
  97. package/dist/ai/tools/frontend-tool-caller.js +50 -0
  98. package/dist/ai/tools/frontend-tool-caller.js.map +1 -0
  99. package/dist/ai/tools/index.d.ts +11 -0
  100. package/dist/ai/tools/index.d.ts.map +1 -0
  101. package/dist/ai/tools/index.js +11 -0
  102. package/dist/ai/tools/index.js.map +1 -0
  103. package/dist/ai/tools/log-action-to-matrix.d.ts +13 -0
  104. package/dist/ai/tools/log-action-to-matrix.d.ts.map +1 -0
  105. package/dist/ai/tools/log-action-to-matrix.js +14 -0
  106. package/dist/ai/tools/log-action-to-matrix.js.map +1 -0
  107. package/dist/ai/tools/parser-action-tool.d.ts +8 -0
  108. package/dist/ai/tools/parser-action-tool.d.ts.map +1 -0
  109. package/dist/ai/tools/parser-action-tool.js +40 -0
  110. package/dist/ai/tools/parser-action-tool.js.map +1 -0
  111. package/dist/ai/tools/parser-browser-tool.d.ts +8 -0
  112. package/dist/ai/tools/parser-browser-tool.d.ts.map +1 -0
  113. package/dist/ai/tools/parser-browser-tool.js +38 -0
  114. package/dist/ai/tools/parser-browser-tool.js.map +1 -0
  115. package/dist/ai/tools/retriever-tool/index.d.ts +2 -0
  116. package/dist/ai/tools/retriever-tool/index.d.ts.map +1 -0
  117. package/dist/ai/tools/retriever-tool/index.js +2 -0
  118. package/dist/ai/tools/retriever-tool/index.js.map +1 -0
  119. package/dist/ai/tools/retriever-tool/retriever-tool.d.ts +18 -0
  120. package/dist/ai/tools/retriever-tool/retriever-tool.d.ts.map +1 -0
  121. package/dist/ai/tools/retriever-tool/retriever-tool.js +62 -0
  122. package/dist/ai/tools/retriever-tool/retriever-tool.js.map +1 -0
  123. package/dist/ai/tools/retriever-tool/retriever-tool.test.d.ts +2 -0
  124. package/dist/ai/tools/retriever-tool/retriever-tool.test.d.ts.map +1 -0
  125. package/dist/ai/tools/retriever-tool/retriever-tool.test.js +119 -0
  126. package/dist/ai/tools/retriever-tool/retriever-tool.test.js.map +1 -0
  127. package/dist/ai/tools/scrape-web-page.d.ts +7 -0
  128. package/dist/ai/tools/scrape-web-page.d.ts.map +1 -0
  129. package/dist/ai/tools/scrape-web-page.js +65 -0
  130. package/dist/ai/tools/scrape-web-page.js.map +1 -0
  131. package/dist/ai/tools/web-search-tool.d.ts +10 -0
  132. package/dist/ai/tools/web-search-tool.d.ts.map +1 -0
  133. package/dist/ai/tools/web-search-tool.js +30 -0
  134. package/dist/ai/tools/web-search-tool.js.map +1 -0
  135. package/dist/ai/types.d.ts +4 -0
  136. package/dist/ai/types.d.ts.map +1 -0
  137. package/dist/ai/types.js +2 -0
  138. package/dist/ai/types.js.map +1 -0
  139. package/dist/ai/utils/__tests__/chunk-arr.test.d.ts +2 -0
  140. package/dist/ai/utils/__tests__/chunk-arr.test.d.ts.map +1 -0
  141. package/dist/ai/utils/__tests__/chunk-arr.test.js +37 -0
  142. package/dist/ai/utils/__tests__/chunk-arr.test.js.map +1 -0
  143. package/dist/ai/utils/__tests__/doc-relevance-checker.test.d.ts +2 -0
  144. package/dist/ai/utils/__tests__/doc-relevance-checker.test.d.ts.map +1 -0
  145. package/dist/ai/utils/__tests__/doc-relevance-checker.test.js +80 -0
  146. package/dist/ai/utils/__tests__/doc-relevance-checker.test.js.map +1 -0
  147. package/dist/ai/utils/__tests__/doc-splitter.test.d.ts +2 -0
  148. package/dist/ai/utils/__tests__/doc-splitter.test.d.ts.map +1 -0
  149. package/dist/ai/utils/__tests__/doc-splitter.test.js +35 -0
  150. package/dist/ai/utils/__tests__/doc-splitter.test.js.map +1 -0
  151. package/dist/ai/utils/__tests__/filter-similarity-search-results.test.d.ts +2 -0
  152. package/dist/ai/utils/__tests__/filter-similarity-search-results.test.d.ts.map +1 -0
  153. package/dist/ai/utils/__tests__/filter-similarity-search-results.test.js +47 -0
  154. package/dist/ai/utils/__tests__/filter-similarity-search-results.test.js.map +1 -0
  155. package/dist/ai/utils/__tests__/json-to-yaml.test.d.ts +2 -0
  156. package/dist/ai/utils/__tests__/json-to-yaml.test.d.ts.map +1 -0
  157. package/dist/ai/utils/__tests__/json-to-yaml.test.js +63 -0
  158. package/dist/ai/utils/__tests__/json-to-yaml.test.js.map +1 -0
  159. package/dist/ai/utils/__tests__/stringify-docs.test.d.ts +2 -0
  160. package/dist/ai/utils/__tests__/stringify-docs.test.d.ts.map +1 -0
  161. package/dist/ai/utils/__tests__/stringify-docs.test.js +54 -0
  162. package/dist/ai/utils/__tests__/stringify-docs.test.js.map +1 -0
  163. package/dist/ai/utils/chunk-arr.d.ts +3 -0
  164. package/dist/ai/utils/chunk-arr.d.ts.map +1 -0
  165. package/dist/ai/utils/chunk-arr.js +13 -0
  166. package/dist/ai/utils/chunk-arr.js.map +1 -0
  167. package/dist/ai/utils/doc-relevance-checker.d.ts +10 -0
  168. package/dist/ai/utils/doc-relevance-checker.d.ts.map +1 -0
  169. package/dist/ai/utils/doc-relevance-checker.js +37 -0
  170. package/dist/ai/utils/doc-relevance-checker.js.map +1 -0
  171. package/dist/ai/utils/doc-splitter.d.ts +3 -0
  172. package/dist/ai/utils/doc-splitter.d.ts.map +1 -0
  173. package/dist/ai/utils/doc-splitter.js +20 -0
  174. package/dist/ai/utils/doc-splitter.js.map +1 -0
  175. package/dist/ai/utils/filter-similarity-search-results.d.ts +4 -0
  176. package/dist/ai/utils/filter-similarity-search-results.d.ts.map +1 -0
  177. package/dist/ai/utils/filter-similarity-search-results.js +11 -0
  178. package/dist/ai/utils/filter-similarity-search-results.js.map +1 -0
  179. package/dist/ai/utils/generate-questions-from-chunks.d.ts +15 -0
  180. package/dist/ai/utils/generate-questions-from-chunks.d.ts.map +1 -0
  181. package/dist/ai/utils/generate-questions-from-chunks.js +101 -0
  182. package/dist/ai/utils/generate-questions-from-chunks.js.map +1 -0
  183. package/dist/ai/utils/index.d.ts +11 -0
  184. package/dist/ai/utils/index.d.ts.map +1 -0
  185. package/dist/ai/utils/index.js +11 -0
  186. package/dist/ai/utils/index.js.map +1 -0
  187. package/dist/ai/utils/json-to-yaml.d.ts +2 -0
  188. package/dist/ai/utils/json-to-yaml.d.ts.map +1 -0
  189. package/dist/ai/utils/json-to-yaml.js +25 -0
  190. package/dist/ai/utils/json-to-yaml.js.map +1 -0
  191. package/dist/ai/utils/load-file.d.ts +3 -0
  192. package/dist/ai/utils/load-file.d.ts.map +1 -0
  193. package/dist/ai/utils/load-file.js +133 -0
  194. package/dist/ai/utils/load-file.js.map +1 -0
  195. package/dist/ai/utils/stringify-docs.d.ts +3 -0
  196. package/dist/ai/utils/stringify-docs.d.ts.map +1 -0
  197. package/dist/ai/utils/stringify-docs.js +6 -0
  198. package/dist/ai/utils/stringify-docs.js.map +1 -0
  199. package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.d.ts +35 -0
  200. package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.d.ts.map +1 -0
  201. package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.js +55 -0
  202. package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.js.map +1 -0
  203. package/dist/ai/utils/verify-matrix-openId-token.d.ts +6 -0
  204. package/dist/ai/utils/verify-matrix-openId-token.d.ts.map +1 -0
  205. package/dist/ai/utils/verify-matrix-openId-token.js +36 -0
  206. package/dist/ai/utils/verify-matrix-openId-token.js.map +1 -0
  207. package/dist/index.d.ts +4 -0
  208. package/dist/index.d.ts.map +1 -0
  209. package/dist/index.js +4 -0
  210. package/dist/index.js.map +1 -0
  211. package/dist/services/env/env-service.test.d.ts +2 -0
  212. package/dist/services/env/env-service.test.d.ts.map +1 -0
  213. package/dist/services/env/env-service.test.js +99 -0
  214. package/dist/services/env/env-service.test.js.map +1 -0
  215. package/dist/services/env/env.service.d.ts +11 -0
  216. package/dist/services/env/env.service.d.ts.map +1 -0
  217. package/dist/services/env/env.service.js +42 -0
  218. package/dist/services/env/env.service.js.map +1 -0
  219. package/dist/services/env/index.d.ts +2 -0
  220. package/dist/services/env/index.d.ts.map +1 -0
  221. package/dist/services/env/index.js +2 -0
  222. package/dist/services/env/index.js.map +1 -0
  223. package/dist/services/index.d.ts +5 -0
  224. package/dist/services/index.d.ts.map +1 -0
  225. package/dist/services/index.js +5 -0
  226. package/dist/services/index.js.map +1 -0
  227. package/dist/services/memory-engine/memory-engine.service.d.ts +35 -0
  228. package/dist/services/memory-engine/memory-engine.service.d.ts.map +1 -0
  229. package/dist/services/memory-engine/memory-engine.service.js +295 -0
  230. package/dist/services/memory-engine/memory-engine.service.js.map +1 -0
  231. package/dist/services/memory-engine/types.d.ts +88 -0
  232. package/dist/services/memory-engine/types.d.ts.map +1 -0
  233. package/dist/services/memory-engine/types.js +2 -0
  234. package/dist/services/memory-engine/types.js.map +1 -0
  235. package/dist/services/session-manager/dto.d.ts +40 -0
  236. package/dist/services/session-manager/dto.d.ts.map +1 -0
  237. package/dist/services/session-manager/dto.js +170 -0
  238. package/dist/services/session-manager/dto.js.map +1 -0
  239. package/dist/services/session-manager/errors.d.ts +22 -0
  240. package/dist/services/session-manager/errors.d.ts.map +1 -0
  241. package/dist/services/session-manager/errors.js +41 -0
  242. package/dist/services/session-manager/errors.js.map +1 -0
  243. package/dist/services/session-manager/index.d.ts +4 -0
  244. package/dist/services/session-manager/index.d.ts.map +1 -0
  245. package/dist/services/session-manager/index.js +4 -0
  246. package/dist/services/session-manager/index.js.map +1 -0
  247. package/dist/services/session-manager/session-manager.service.d.ts +40 -0
  248. package/dist/services/session-manager/session-manager.service.d.ts.map +1 -0
  249. package/dist/services/session-manager/session-manager.service.js +251 -0
  250. package/dist/services/session-manager/session-manager.service.js.map +1 -0
  251. package/dist/utils/get-user-subscription.d.ts +21 -0
  252. package/dist/utils/get-user-subscription.d.ts.map +1 -0
  253. package/dist/utils/get-user-subscription.js +44 -0
  254. package/dist/utils/get-user-subscription.js.map +1 -0
  255. package/dist/utils/index.d.ts +2 -0
  256. package/dist/utils/index.d.ts.map +1 -0
  257. package/dist/utils/index.js +2 -0
  258. package/dist/utils/index.js.map +1 -0
  259. package/docs/ai-module.md +84 -0
  260. package/docs/services.md +168 -0
  261. package/docs/tools.md +325 -0
  262. package/jest.config.js +6 -0
  263. package/package.json +81 -0
  264. package/src/ai/checkpointer/index.ts +1 -0
  265. package/src/ai/index.ts +8 -0
  266. package/src/ai/models/index.ts +1 -0
  267. package/src/ai/models/openai.test.ts +72 -0
  268. package/src/ai/models/openai.ts +54 -0
  269. package/src/ai/nodes/create-fake-node.ts +1 -0
  270. package/src/ai/nodes/find-docs/find-docs.prompt.ts +61 -0
  271. package/src/ai/nodes/find-docs/index.ts +2 -0
  272. package/src/ai/nodes/find-docs/node.ts +83 -0
  273. package/src/ai/nodes/generic-chat/generic-chat.node.ts +58 -0
  274. package/src/ai/nodes/generic-chat/generic-chat.prompt.ts +66 -0
  275. package/src/ai/nodes/generic-chat/index.ts +1 -0
  276. package/src/ai/nodes/index.ts +3 -0
  277. package/src/ai/semantic-router-factory/create-semantic-router.test.ts +98 -0
  278. package/src/ai/semantic-router-factory/create-semantic-router.ts +136 -0
  279. package/src/ai/semantic-router-factory/index.ts +3 -0
  280. package/src/ai/semantic-router-factory/semantic-router-prompt.ts +168 -0
  281. package/src/ai/semantic-router-factory/validate-routes.ts +26 -0
  282. package/src/ai/tools/action-caller.ts +37 -0
  283. package/src/ai/tools/ask-ixo-guru/ask-ixo-guru.ts +73 -0
  284. package/src/ai/tools/ask-ixo-guru/index.ts +1 -0
  285. package/src/ai/tools/browser-tool-caller.ts +37 -0
  286. package/src/ai/tools/frontend-tool-caller.ts +86 -0
  287. package/src/ai/tools/index.ts +10 -0
  288. package/src/ai/tools/log-action-to-matrix.ts +30 -0
  289. package/src/ai/tools/parser-action-tool.ts +61 -0
  290. package/src/ai/tools/parser-browser-tool.ts +55 -0
  291. package/src/ai/tools/retriever-tool/index.ts +1 -0
  292. package/src/ai/tools/retriever-tool/retriever-tool.test.ts +156 -0
  293. package/src/ai/tools/retriever-tool/retriever-tool.ts +107 -0
  294. package/src/ai/tools/scrape-web-page.ts +75 -0
  295. package/src/ai/tools/web-search-tool.ts +38 -0
  296. package/src/ai/types.ts +6 -0
  297. package/src/ai/utils/__tests__/chunk-arr.test.ts +46 -0
  298. package/src/ai/utils/__tests__/doc-relevance-checker.test.ts +90 -0
  299. package/src/ai/utils/__tests__/doc-splitter.test.ts +42 -0
  300. package/src/ai/utils/__tests__/filter-similarity-search-results.test.ts +57 -0
  301. package/src/ai/utils/__tests__/json-to-yaml.test.ts +70 -0
  302. package/src/ai/utils/__tests__/stringify-docs.test.ts +61 -0
  303. package/src/ai/utils/chunk-arr.ts +13 -0
  304. package/src/ai/utils/doc-relevance-checker.ts +58 -0
  305. package/src/ai/utils/doc-splitter.ts +28 -0
  306. package/src/ai/utils/filter-similarity-search-results.ts +15 -0
  307. package/src/ai/utils/generate-questions-from-chunks.ts +114 -0
  308. package/src/ai/utils/index.ts +10 -0
  309. package/src/ai/utils/json-to-yaml.ts +32 -0
  310. package/src/ai/utils/load-file.ts +170 -0
  311. package/src/ai/utils/stringify-docs.ts +14 -0
  312. package/src/ai/utils/transformGraphStateMessageToListMessageResponse.ts +108 -0
  313. package/src/ai/utils/verify-matrix-openId-token.ts +46 -0
  314. package/src/index.ts +3 -0
  315. package/src/services/env/env-service.test.ts +153 -0
  316. package/src/services/env/env.service.ts +65 -0
  317. package/src/services/env/index.ts +1 -0
  318. package/src/services/index.ts +4 -0
  319. package/src/services/memory-engine/memory-engine.service.ts +486 -0
  320. package/src/services/memory-engine/types.ts +208 -0
  321. package/src/services/session-manager/dto.ts +120 -0
  322. package/src/services/session-manager/errors.ts +56 -0
  323. package/src/services/session-manager/index.ts +3 -0
  324. package/src/services/session-manager/session-manager.service.ts +405 -0
  325. package/src/utils/get-user-subscription.ts +84 -0
  326. package/src/utils/index.ts +1 -0
  327. package/tsconfig.json +16 -0
  328. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,54 @@
1
+ import { Document } from '@langchain/core/documents';
2
+ import { stringifyDocs } from '../stringify-docs.js';
3
+ describe('stringifyDocs', () => {
4
+ it('should stringify a single document', () => {
5
+ const doc = new Document({
6
+ pageContent: 'Test content',
7
+ metadata: { id: '123' },
8
+ });
9
+ const result = stringifyDocs([doc]);
10
+ expect(result).toBe('#ID:123\n Document: Test content \n \n ');
11
+ });
12
+ it('should stringify multiple documents', () => {
13
+ const docs = [
14
+ new Document({
15
+ pageContent: 'First content',
16
+ metadata: { id: '1' },
17
+ }),
18
+ new Document({
19
+ pageContent: 'Second content',
20
+ metadata: { id: '2' },
21
+ }),
22
+ ];
23
+ const expected = '#ID:1\n Document: First content \n \n \n\n#ID:2\n Document: Second content \n \n ';
24
+ expect(stringifyDocs(docs)).toBe(expected);
25
+ });
26
+ it('should handle empty array', () => {
27
+ expect(stringifyDocs([])).toBe('');
28
+ });
29
+ it('should handle documents with special characters', () => {
30
+ const doc = new Document({
31
+ pageContent: 'Content with \n newline and \t tab',
32
+ metadata: { id: 'special' },
33
+ });
34
+ const expected = '#ID:special\n Document: Content with \n newline and \t tab \n \n ';
35
+ expect(stringifyDocs([doc])).toBe(expected);
36
+ });
37
+ it('should handle documents with empty content', () => {
38
+ const doc = new Document({
39
+ pageContent: '',
40
+ metadata: { id: 'empty' },
41
+ });
42
+ const expected = '#ID:empty\n Document: \n \n ';
43
+ expect(stringifyDocs([doc])).toBe(expected);
44
+ });
45
+ it('should handle documents with missing id in metadata', () => {
46
+ const doc = new Document({
47
+ pageContent: 'Test content',
48
+ metadata: {},
49
+ });
50
+ const expected = '#ID:undefined\n Document: Test content \n \n ';
51
+ expect(stringifyDocs([doc])).toBe(expected);
52
+ });
53
+ });
54
+ //# sourceMappingURL=stringify-docs.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify-docs.test.js","sourceRoot":"","sources":["../../../../src/ai/utils/__tests__/stringify-docs.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;YACvB,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;SACxB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG;YACX,IAAI,QAAQ,CAAC;gBACX,WAAW,EAAE,eAAe;gBAC5B,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;aACtB,CAAC;YACF,IAAI,QAAQ,CAAC;gBACX,WAAW,EAAE,gBAAgB;gBAC7B,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;aACtB,CAAC;SACH,CAAC;QACF,MAAM,QAAQ,GACZ,mFAAmF,CAAC;QACtF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;YACvB,WAAW,EAAE,oCAAoC;YACjD,QAAQ,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;SAC5B,CAAC,CAAC;QACH,MAAM,QAAQ,GACZ,mEAAmE,CAAC;QACtE,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;YACvB,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;SAC1B,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,+BAA+B,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;YACvB,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,+CAA+C,CAAC;QACjE,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare function chunkArr<T>(array: T[], chunkSize: number): T[][];
2
+ export { chunkArr };
3
+ //# sourceMappingURL=chunk-arr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-arr.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/chunk-arr.ts"],"names":[],"mappings":"AAAA,iBAAS,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAWzD;AACD,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ function chunkArr(array, chunkSize) {
2
+ if (chunkSize <= 0) {
3
+ throw new Error('Chunk size must be greater than 0');
4
+ }
5
+ const chunks = [];
6
+ for (let i = 0; i < array.length; i += chunkSize) {
7
+ const chunk = array.slice(i, i + chunkSize);
8
+ chunks.push(chunk);
9
+ }
10
+ return chunks;
11
+ }
12
+ export { chunkArr };
13
+ //# sourceMappingURL=chunk-arr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-arr.js","sourceRoot":"","sources":["../../../src/ai/utils/chunk-arr.ts"],"names":[],"mappings":"AAAA,SAAS,QAAQ,CAAI,KAAU,EAAE,SAAiB;IAChD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type Document } from '@langchain/core/documents';
2
+ import { type BaseLanguageModel } from '@langchain/core/language_models/base';
3
+ type TCheckDocRelevanceArgs = {
4
+ doc: Document | string;
5
+ query: string;
6
+ model?: BaseLanguageModel;
7
+ };
8
+ declare function checkDocRelevance({ doc, model, query, }: TCheckDocRelevanceArgs): Promise<boolean>;
9
+ export default checkDocRelevance;
10
+ //# sourceMappingURL=doc-relevance-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-relevance-checker.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/doc-relevance-checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAK9E,KAAK,sBAAsB,GAAG;IAC5B,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEF,iBAAe,iBAAiB,CAAC,EAC/B,GAAG,EACH,KAA4B,EAC5B,KAAK,GACN,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuC3C;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { ChatPromptTemplate } from '@langchain/core/prompts';
2
+ import z from 'zod';
3
+ import { getChatOpenAiModel } from '../models/openai.js';
4
+ async function checkDocRelevance({ doc, model = getChatOpenAiModel(), query, }) {
5
+ const prompt = ChatPromptTemplate.fromTemplate(`You are an AI agent responsible for determining the relevance of a document to a given query.
6
+
7
+ DOCUMENT: ${typeof doc === 'string' ? doc : doc.pageContent}
8
+ QUERY: ${query}
9
+
10
+ ### Acceptance Criteria
11
+ (1) Your goal is to identify DOCUMENTs that are completely unrelated to the QUERY.
12
+ (2) If the DOCUMENT contain any keywords or semantic meaning related to the QUERY, consider them relevant.
13
+ (3) It is acceptable if the DOCUMENT have some information that is unrelated to the QUERY, as long as (2) is met.
14
+
15
+ ### Instructions
16
+ (1) Review the DOCUMENT and determine if it is relevant to the QUERY.
17
+ (2) Provide a boolean answer indicating the relevance of the DOCUMENT to the QUERY.
18
+ (3) If the DOCUMENT is relevant, set the answer to true. Otherwise, set the answer to false.
19
+ `);
20
+ const zodSchema = z.object({
21
+ answer: z.boolean(),
22
+ });
23
+ if (!model) {
24
+ throw new Error('Model is not set');
25
+ }
26
+ if (!model.withStructuredOutput) {
27
+ throw new Error('Model does not support structured output');
28
+ }
29
+ const structuredLlm = model.withStructuredOutput(zodSchema);
30
+ const chain = prompt.pipe(structuredLlm);
31
+ const response = await chain.invoke({
32
+ query,
33
+ });
34
+ return response.answer;
35
+ }
36
+ export default checkDocRelevance;
37
+ //# sourceMappingURL=doc-relevance-checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-relevance-checker.js","sourceRoot":"","sources":["../../../src/ai/utils/doc-relevance-checker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQzD,KAAK,UAAU,iBAAiB,CAAC,EAC/B,GAAG,EACH,KAAK,GAAG,kBAAkB,EAAE,EAC5B,KAAK,GACkB;IACvB,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAC5C;;cAEU,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW;WAClD,KAAK;;;;;;;;;;;GAWb,CACA,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;QAClC,KAAK;KACN,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,MAAM,CAAC;AACzB,CAAC;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Document } from '@langchain/core/documents';
2
+ export declare const docSplitter: (text: string | string[]) => Promise<Document[]>;
3
+ //# sourceMappingURL=doc-splitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-splitter.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/doc-splitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAO1D,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,GAAG,MAAM,EAAE,KAAG,OAAO,CAAC,QAAQ,EAAE,CAOvE,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters';
2
+ import z from 'zod';
3
+ const splitter = new RecursiveCharacterTextSplitter();
4
+ export const docSplitter = (text) => {
5
+ if (!text)
6
+ throw new Error('No text provided');
7
+ const _text = typeof text === 'string' ? [text] : text;
8
+ arrSchema.parse(_text);
9
+ return splitter.createDocuments(_text);
10
+ };
11
+ const arrSchema = z
12
+ .array(z.string({
13
+ message: 'Invalid text provided',
14
+ }), {
15
+ message: 'Invalid text provided in array',
16
+ })
17
+ .nonempty({
18
+ message: 'Text array cannot be empty',
19
+ });
20
+ //# sourceMappingURL=doc-splitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-splitter.js","sourceRoot":"","sources":["../../../src/ai/utils/doc-splitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAQ,CAAC,MAAO,KAAK,CAAC;AAEtB,MAAM,QAAQ,GAAG,IAAI,8BAA8B,EAAE,CAAC;AAEtD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAuB,EAAuB,EAAE;IAC1E,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEvB,OAAO,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC;KAChB,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;IACP,OAAO,EAAE,uBAAuB;CACjC,CAAC,EACF;IACE,OAAO,EAAE,gCAAgC;CAC1C,CACF;KACA,QAAQ,CAAC;IACR,OAAO,EAAE,4BAA4B;CACtC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type Document } from '@langchain/core/documents';
2
+ declare function filterSimilaritySearchResults<Doc extends Document, Result extends [Doc, number][]>(results: Result, threshold: number): Doc[];
3
+ export { filterSimilaritySearchResults };
4
+ //# sourceMappingURL=filter-similarity-search-results.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-similarity-search-results.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/filter-similarity-search-results.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,iBAAS,6BAA6B,CACpC,GAAG,SAAS,QAAQ,EACpB,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAC9B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE,CAQ3C;AACD,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ function filterSimilaritySearchResults(results, threshold) {
2
+ const filteredResults = [];
3
+ for (const [doc, score] of results) {
4
+ if (score >= threshold) {
5
+ filteredResults.push(doc);
6
+ }
7
+ }
8
+ return filteredResults;
9
+ }
10
+ export { filterSimilaritySearchResults };
11
+ //# sourceMappingURL=filter-similarity-search-results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-similarity-search-results.js","sourceRoot":"","sources":["../../../src/ai/utils/filter-similarity-search-results.ts"],"names":[],"mappings":"AAEA,SAAS,6BAA6B,CAGpC,OAAe,EAAE,SAAiB;IAClC,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;YACvB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AACD,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Document } from 'langchain';
2
+ export declare const generateQuestionsFromChunks: (content: string, chunks: Document[]) => Promise<QuestionGeneratorOutput["json_output"]>;
3
+ type QuestionGeneratorOutput = {
4
+ thoughts: string;
5
+ json_output: {
6
+ chunkId: string;
7
+ qas: {
8
+ type: string;
9
+ question: string;
10
+ answer: string;
11
+ }[];
12
+ }[];
13
+ };
14
+ export {};
15
+ //# sourceMappingURL=generate-questions-from-chunks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-questions-from-chunks.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/generate-questions-from-chunks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,eAAO,MAAM,2BAA2B,GACtC,SAAS,MAAM,EACf,QAAQ,QAAQ,EAAE,KACjB,OAAO,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAmGhD,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KAC3D,EAAE,CAAC;CACL,CAAC"}
@@ -0,0 +1,101 @@
1
+ import { getOpenAiClient } from '../models/openai.js';
2
+ export const generateQuestionsFromChunks = async (content, chunks) => {
3
+ const openai = getOpenAiClient();
4
+ const response = await openai.chat.completions.parse({
5
+ model: 'gpt-4o-mini',
6
+ messages: [
7
+ {
8
+ role: 'system',
9
+ content: [
10
+ {
11
+ type: 'text',
12
+ text: '# SYSTEM — “Question Generator with Visible Chain-of-Thought”\n\nYou are an expert dataset-builder. \nYour mission: turn raw knowledge into high-quality Q-A pairs for semantic search **while showing your reasoning**.\n\n---\n## INPUTS\n- **chunks** – array → `{ "id": string, "text": string }` \n- **fullText** – the complete source document.\n\n---\n## TASK\nFor **each** chunk:\n\n1. **THINK (visible)** \n • Analyse the chunk’s content. \n • Note key facts, entities, dates, numbers, causal links, etc. \n • Decide which facts yield **Direct** vs **Derived** questions. \n • *Keep thoughts ≤ 120 words.*\n\n2. **GENERATE** \n • **Direct Q-A** – 1-3 questions whose full answer text appears **verbatim (or nearly so)** in the *same chunk*. \n • **Derived Q-A** – 1-2 questions that require light inference or synthesis; answers may use the chunk **or** *fullText*. \n • Ensure **at least two distinct sections** of the chunk are represented among the questions.\n\n---\n## OUTPUT FORMAT \nReturn **one valid JSON object** that matches the schema below. \nOutput **nothing** else.\n\n```json\n{\n "thoughts": "<your chain-of-thought here>",\n "json_output": [\n {\n "chunkId": "...",\n "qas": [\n { "type": "direct", "question": "...?", "answer": "..." },\n { "type": "derived", "question": "...?", "answer": "..." }\n // …\n ]\n }\n // …more chunks\n ]\n}\n',
13
+ },
14
+ ],
15
+ },
16
+ {
17
+ role: 'user',
18
+ content: [
19
+ {
20
+ type: 'text',
21
+ text: `## CHUNKS
22
+ ${chunks
23
+ .map((chunk) => {
24
+ return `### CHUNK ${chunk.id}
25
+ ${chunk.pageContent}`;
26
+ })
27
+ .join('\n')}
28
+ ## FULL TEXT
29
+ ${content}`,
30
+ },
31
+ ],
32
+ },
33
+ ],
34
+ response_format: {
35
+ type: 'json_schema',
36
+ json_schema: {
37
+ name: 'question_generator_output',
38
+ strict: true,
39
+ schema: {
40
+ type: 'object',
41
+ properties: {
42
+ thoughts: {
43
+ type: 'string',
44
+ description: 'Visible chain-of-thought reasoning.',
45
+ },
46
+ json_output: {
47
+ type: 'array',
48
+ description: 'Array of chunks with their generated Q&A pairs.',
49
+ items: {
50
+ type: 'object',
51
+ properties: {
52
+ chunkId: {
53
+ type: 'string',
54
+ description: 'Identifier of the chunk.',
55
+ },
56
+ qas: {
57
+ type: 'array',
58
+ items: {
59
+ type: 'object',
60
+ properties: {
61
+ type: {
62
+ type: 'string',
63
+ enum: ['direct', 'derived'],
64
+ description: 'Question type: direct (verbatim) or derived (inference).',
65
+ },
66
+ question: {
67
+ type: 'string',
68
+ description: 'The question text.',
69
+ },
70
+ answer: {
71
+ type: 'string',
72
+ description: 'The answer text.',
73
+ },
74
+ },
75
+ required: ['type', 'question', 'answer'],
76
+ additionalProperties: false,
77
+ },
78
+ },
79
+ },
80
+ required: ['chunkId', 'qas'],
81
+ additionalProperties: false,
82
+ },
83
+ },
84
+ },
85
+ required: ['thoughts', 'json_output'],
86
+ additionalProperties: false,
87
+ },
88
+ },
89
+ },
90
+ temperature: 0,
91
+ max_completion_tokens: 9957,
92
+ top_p: 0.28,
93
+ frequency_penalty: 0,
94
+ presence_penalty: 0,
95
+ store: false,
96
+ });
97
+ const json = response.choices[0]?.message
98
+ .parsed;
99
+ return json.json_output;
100
+ };
101
+ //# sourceMappingURL=generate-questions-from-chunks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-questions-from-chunks.js","sourceRoot":"","sources":["../../../src/ai/utils/generate-questions-from-chunks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAC9C,OAAe,EACf,MAAkB,EAC+B,EAAE;IACnD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACnD,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,25CAA25C;qBACl6C;iBACF;aACF;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;YACN,MAAM;6BACL,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;4BACb,OAAO,aAAa,KAAK,CAAC,EAAE;cAC5B,KAAK,CAAC,WAAW,EAAE,CAAC;wBACtB,CAAC,CAAC;6BACD,IAAI,CAAC,IAAI,CAAC;;YAEX,OAAO,EAAE;qBACV;iBACF;aACF;SACF;QACD,eAAe,EAAE;YACf,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE;gBACX,IAAI,EAAE,2BAA2B;gBACjC,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,qCAAqC;yBACnD;wBACD,WAAW,EAAE;4BACX,IAAI,EAAE,OAAO;4BACb,WAAW,EAAE,iDAAiD;4BAC9D,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;gCACd,UAAU,EAAE;oCACV,OAAO,EAAE;wCACP,IAAI,EAAE,QAAQ;wCACd,WAAW,EAAE,0BAA0B;qCACxC;oCACD,GAAG,EAAE;wCACH,IAAI,EAAE,OAAO;wCACb,KAAK,EAAE;4CACL,IAAI,EAAE,QAAQ;4CACd,UAAU,EAAE;gDACV,IAAI,EAAE;oDACJ,IAAI,EAAE,QAAQ;oDACd,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;oDAC3B,WAAW,EACT,0DAA0D;iDAC7D;gDACD,QAAQ,EAAE;oDACR,IAAI,EAAE,QAAQ;oDACd,WAAW,EAAE,oBAAoB;iDAClC;gDACD,MAAM,EAAE;oDACN,IAAI,EAAE,QAAQ;oDACd,WAAW,EAAE,kBAAkB;iDAChC;6CACF;4CACD,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;4CACxC,oBAAoB,EAAE,KAAK;yCAC5B;qCACF;iCACF;gCACD,QAAQ,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC;gCAC5B,oBAAoB,EAAE,KAAK;6BAC5B;yBACF;qBACF;oBACD,QAAQ,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC;oBACrC,oBAAoB,EAAE,KAAK;iBAC5B;aACF;SACF;QACD,WAAW,EAAE,CAAC;QACd,qBAAqB,EAAE,IAAI;QAC3B,KAAK,EAAE,IAAI;QACX,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO;SACtC,MAA4C,CAAC;IAChD,OAAO,IAAI,CAAC,WAAW,CAAC;AAC1B,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export * from './chunk-arr.js';
2
+ export * from './doc-relevance-checker.js';
3
+ export * from './doc-splitter.js';
4
+ export * from './filter-similarity-search-results.js';
5
+ export * from './generate-questions-from-chunks.js';
6
+ export * from './json-to-yaml.js';
7
+ export * from './load-file.js';
8
+ export * from './stringify-docs.js';
9
+ export * from './transformGraphStateMessageToListMessageResponse.js';
10
+ export * from './verify-matrix-openId-token.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sDAAsD,CAAC;AACrE,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export * from './chunk-arr.js';
2
+ export * from './doc-relevance-checker.js';
3
+ export * from './doc-splitter.js';
4
+ export * from './filter-similarity-search-results.js';
5
+ export * from './generate-questions-from-chunks.js';
6
+ export * from './json-to-yaml.js';
7
+ export * from './load-file.js';
8
+ export * from './stringify-docs.js';
9
+ export * from './transformGraphStateMessageToListMessageResponse.js';
10
+ export * from './verify-matrix-openId-token.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sDAAsD,CAAC;AACrE,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const jsonToYaml: <T extends object>(json: T, indentLevel?: number) => string;
2
+ //# sourceMappingURL=json-to-yaml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-to-yaml.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/json-to-yaml.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,EACzC,MAAM,CAAC,EACP,oBAAe,KACd,MA4BF,CAAC"}
@@ -0,0 +1,25 @@
1
+ export const jsonToYaml = (json, indentLevel = 0) => {
2
+ const indent = ' '.repeat(indentLevel);
3
+ const isArray = Array.isArray(json);
4
+ if (isArray) {
5
+ return json
6
+ .map((item) => {
7
+ if (item !== null && typeof item === 'object') {
8
+ const nestedYaml = jsonToYaml(item, indentLevel + 1);
9
+ return `${indent}- \n${nestedYaml}`;
10
+ }
11
+ return `${indent}- ${item}`;
12
+ })
13
+ .join('\n');
14
+ }
15
+ return Object.entries(json)
16
+ .map(([key, value]) => {
17
+ if (value !== null && typeof value === 'object') {
18
+ const nestedYaml = jsonToYaml(value, indentLevel + 1);
19
+ return `${indent}${key}:\n${nestedYaml}`;
20
+ }
21
+ return `${indent}${key}: ${value}`;
22
+ })
23
+ .join('\n');
24
+ };
25
+ //# sourceMappingURL=json-to-yaml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-to-yaml.js","sourceRoot":"","sources":["../../../src/ai/utils/json-to-yaml.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,IAAO,EACP,WAAW,GAAG,CAAC,EACP,EAAE;IACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAExC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAQ,IAAyB;aAC9B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAE9C,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;gBACrD,OAAO,GAAG,MAAM,OAAO,UAAU,EAAE,CAAC;YACtC,CAAC;YACD,OAAO,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC;QAC9B,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAEhD,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;YACtD,OAAO,GAAG,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,GAAG,MAAM,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC;IACrC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Document } from '@langchain/core/documents';
2
+ export declare const loadFile: (path: string, fetchOptions?: RequestInit) => Promise<Document[]>;
3
+ //# sourceMappingURL=load-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-file.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/load-file.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAoDrD,eAAO,MAAM,QAAQ,GACnB,MAAM,MAAM,EACZ,eAAe,WAAW,KACzB,OAAO,CAAC,QAAQ,EAAE,CAgDpB,CAAC"}
@@ -0,0 +1,133 @@
1
+ import { Logger } from '@ixo/logger';
2
+ import { DocxLoader } from '@langchain/community/document_loaders/fs/docx';
3
+ import { PDFLoader } from '@langchain/community/document_loaders/fs/pdf';
4
+ import { HtmlToTextTransformer } from '@langchain/community/document_transformers/html_to_text';
5
+ import { Document } from '@langchain/core/documents';
6
+ import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters';
7
+ import fs from 'node:fs/promises';
8
+ const splitter = new RecursiveCharacterTextSplitter({
9
+ chunkSize: 1000,
10
+ chunkOverlap: 200,
11
+ });
12
+ const determineFileType = (path, contentType) => {
13
+ const extension = path.split('.').pop()?.toLowerCase();
14
+ if (extension) {
15
+ if (['pdf'].includes(extension))
16
+ return 'pdf';
17
+ if (['md', 'markdown'].includes(extension))
18
+ return 'markdown';
19
+ if (['html', 'htm'].includes(extension))
20
+ return 'html';
21
+ if (['txt'].includes(extension))
22
+ return 'text';
23
+ if (['doc', 'docx'].includes(extension))
24
+ return 'doc';
25
+ }
26
+ if (contentType) {
27
+ if (contentType.includes('application/pdf'))
28
+ return 'pdf';
29
+ if (contentType.includes('text/markdown'))
30
+ return 'markdown';
31
+ if (contentType.includes('text/html'))
32
+ return 'html';
33
+ if (contentType.includes('text/plain'))
34
+ return 'text';
35
+ if (contentType.includes('application/msword') ||
36
+ contentType.includes('application/vnd.openxmlformats-officedocument.wordprocessingml.document')) {
37
+ return 'doc';
38
+ }
39
+ }
40
+ return null;
41
+ };
42
+ export const loadFile = async (path, fetchOptions) => {
43
+ const isUrl = path.startsWith('http');
44
+ if (isUrl) {
45
+ try {
46
+ const response = await fetch(path, fetchOptions);
47
+ if (!response.ok) {
48
+ const error = await getErrorFromResponse(response);
49
+ console.error(`Error fetching file from URL: ${path}`, error);
50
+ throw new Error(`Failed to fetch file from URL: ${path}`);
51
+ }
52
+ const contentType = response.headers.get('content-type') ?? '';
53
+ const fileType = determineFileType(path, contentType);
54
+ if (!fileType) {
55
+ throw new Error(`Unsupported file type. Content-Type: ${contentType}`);
56
+ }
57
+ const data = await response.arrayBuffer();
58
+ const blob = new Blob([data], {
59
+ type: contentType || 'application/octet-stream',
60
+ });
61
+ return processFile(blob, fileType);
62
+ }
63
+ catch (error) {
64
+ Logger.error(`Failed to load file from URL: ${path}`, error);
65
+ throw error;
66
+ }
67
+ }
68
+ try {
69
+ const buffer = await fs.readFile(path);
70
+ const blob = new Blob([buffer]);
71
+ const fileType = determineFileType(path);
72
+ if (!fileType) {
73
+ throw new Error(`Unsupported file type for file: ${path}`);
74
+ }
75
+ return processFile(blob, fileType);
76
+ }
77
+ catch (error) {
78
+ Logger.error(`Failed to load local file from path: ${path}`, error);
79
+ throw error;
80
+ }
81
+ };
82
+ const processFile = async (blob, fileType) => {
83
+ switch (fileType) {
84
+ case 'pdf': {
85
+ const pdfLoader = new PDFLoader(blob);
86
+ return pdfLoader.load();
87
+ }
88
+ case 'markdown': {
89
+ return loadMarkdown(blob);
90
+ }
91
+ case 'html': {
92
+ const html = await blobToString(blob);
93
+ const htmlSplitter = RecursiveCharacterTextSplitter.fromLanguage('html');
94
+ const transformer = new HtmlToTextTransformer();
95
+ const sequence = htmlSplitter.pipe(transformer);
96
+ const docs = await sequence.invoke([
97
+ new Document({
98
+ pageContent: html,
99
+ }),
100
+ ]);
101
+ return docs;
102
+ }
103
+ case 'text':
104
+ return splitter.createDocuments([await blobToString(blob)]);
105
+ case 'doc': {
106
+ const docxLoader = new DocxLoader(blob);
107
+ return docxLoader.load();
108
+ }
109
+ default:
110
+ throw new Error(`Unsupported file type: ${fileType}`);
111
+ }
112
+ };
113
+ const loadMarkdown = async (blob) => {
114
+ const markdown = await blobToString(blob);
115
+ return splitter.createDocuments([markdown]);
116
+ };
117
+ const blobToString = async (blob) => {
118
+ const buffer = await blob.arrayBuffer();
119
+ return Buffer.from(buffer).toString('utf-8');
120
+ };
121
+ const getErrorFromResponse = async (response) => {
122
+ try {
123
+ const json = await response.json();
124
+ return json;
125
+ }
126
+ catch (error) {
127
+ if (response.bodyUsed)
128
+ return 'Unknown error';
129
+ const errorMessage = await response.text();
130
+ return errorMessage;
131
+ }
132
+ };
133
+ //# sourceMappingURL=load-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-file.js","sourceRoot":"","sources":["../../../src/ai/utils/load-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type Document } from '@langchain/core/documents';
2
+ export declare const stringifyDocs: (docs: Document[]) => string;
3
+ //# sourceMappingURL=stringify-docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify-docs.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/stringify-docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAO1D,eAAO,MAAM,aAAa,GAAI,MAAM,QAAQ,EAAE,KAAG,MAMhD,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const stringifyDocs = (docs) => {
2
+ return docs
3
+ .map((doc) => `#ID:${doc.metadata.id}\n Document: ${doc.pageContent} \n \n `)
4
+ .join('\n\n');
5
+ };
6
+ //# sourceMappingURL=stringify-docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify-docs.js","sourceRoot":"","sources":["../../../src/ai/utils/stringify-docs.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAgB,EAAU,EAAE;IACxD,OAAO,IAAI;SACR,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,CAAC,WAAW,SAAS,CACxE;SACA,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { type BaseMessage } from '@langchain/core/messages';
2
+ interface ToolCall {
3
+ name: string;
4
+ id: string;
5
+ args: unknown;
6
+ status?: 'isRunning' | 'done';
7
+ output?: string;
8
+ }
9
+ interface MessageDto {
10
+ id: string;
11
+ type: 'ai' | 'human';
12
+ content: string;
13
+ toolCalls?: ToolCall[];
14
+ reasoning?: string;
15
+ isComplete?: boolean;
16
+ isReasoning?: boolean;
17
+ }
18
+ export interface ListOracleMessagesResponse {
19
+ messages: MessageDto[];
20
+ }
21
+ export interface CleanAdditionalKwargs {
22
+ msgFromMatrixRoom: boolean;
23
+ timestamp: string;
24
+ oracleName: string;
25
+ reasoning?: string;
26
+ reasoningDetails?: Array<{
27
+ type: string;
28
+ text: string;
29
+ }>;
30
+ [key: string]: unknown;
31
+ }
32
+ export declare function transformGraphStateMessageToListMessageResponse(messages: BaseMessage[]): ListOracleMessagesResponse;
33
+ export declare const uuidFromString: (str: string) => string;
34
+ export {};
35
+ //# sourceMappingURL=transformGraphStateMessageToListMessageResponse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformGraphStateMessageToListMessageResponse.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/transformGraphStateMessageToListMessageResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,0BAA0B,CAAC;AAIlC,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AACD,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAgB,+CAA+C,CAC7D,QAAQ,EAAE,WAAW,EAAE,GACtB,0BAA0B,CAuD5B;AAED,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,MAO5C,CAAC"}