rag-lite-ts 2.1.1 → 2.3.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/README.md +88 -5
  2. package/dist/{cli → cjs/cli}/indexer.js +73 -15
  3. package/dist/cjs/cli/ui-server.d.ts +5 -0
  4. package/dist/cjs/cli/ui-server.js +152 -0
  5. package/dist/{cli.js → cjs/cli.js} +25 -6
  6. package/dist/{core → cjs/core}/binary-index-format.js +6 -3
  7. package/dist/{core → cjs/core}/db.d.ts +56 -0
  8. package/dist/{core → cjs/core}/db.js +105 -0
  9. package/dist/{core → cjs/core}/ingestion.js +3 -0
  10. package/dist/cjs/core/knowledge-base-manager.d.ts +109 -0
  11. package/dist/cjs/core/knowledge-base-manager.js +256 -0
  12. package/dist/{core → cjs/core}/model-validator.js +1 -1
  13. package/dist/{core → cjs/core}/search-pipeline.js +1 -1
  14. package/dist/{core → cjs/core}/search.js +1 -1
  15. package/dist/cjs/core/vector-index-messages.d.ts +52 -0
  16. package/dist/cjs/core/vector-index-messages.js +5 -0
  17. package/dist/cjs/core/vector-index-worker.d.ts +6 -0
  18. package/dist/cjs/core/vector-index-worker.js +304 -0
  19. package/dist/cjs/core/vector-index.d.ts +107 -0
  20. package/dist/cjs/core/vector-index.js +344 -0
  21. package/dist/{factories → cjs/factories}/ingestion-factory.js +3 -7
  22. package/dist/{factories → cjs/factories}/search-factory.js +11 -0
  23. package/dist/{index-manager.d.ts → cjs/index-manager.d.ts} +23 -3
  24. package/dist/{index-manager.js → cjs/index-manager.js} +84 -15
  25. package/dist/{index.d.ts → cjs/index.d.ts} +2 -1
  26. package/dist/{index.js → cjs/index.js} +3 -1
  27. package/dist/esm/api-errors.d.ts +90 -0
  28. package/dist/esm/api-errors.js +320 -0
  29. package/dist/esm/cli/indexer.d.ts +11 -0
  30. package/dist/esm/cli/indexer.js +529 -0
  31. package/dist/esm/cli/search.d.ts +7 -0
  32. package/dist/esm/cli/search.js +332 -0
  33. package/dist/esm/cli/ui-server.d.ts +5 -0
  34. package/dist/esm/cli/ui-server.js +152 -0
  35. package/dist/esm/cli.d.ts +3 -0
  36. package/dist/esm/cli.js +548 -0
  37. package/dist/esm/config.d.ts +51 -0
  38. package/dist/esm/config.js +79 -0
  39. package/dist/esm/core/abstract-embedder.d.ts +125 -0
  40. package/dist/esm/core/abstract-embedder.js +264 -0
  41. package/dist/esm/core/actionable-error-messages.d.ts +60 -0
  42. package/dist/esm/core/actionable-error-messages.js +397 -0
  43. package/dist/esm/core/adapters.d.ts +93 -0
  44. package/dist/esm/core/adapters.js +139 -0
  45. package/dist/esm/core/batch-processing-optimizer.d.ts +155 -0
  46. package/dist/esm/core/batch-processing-optimizer.js +536 -0
  47. package/dist/esm/core/binary-index-format.d.ts +78 -0
  48. package/dist/esm/core/binary-index-format.js +294 -0
  49. package/dist/esm/core/chunker.d.ts +119 -0
  50. package/dist/esm/core/chunker.js +73 -0
  51. package/dist/esm/core/cli-database-utils.d.ts +53 -0
  52. package/dist/esm/core/cli-database-utils.js +239 -0
  53. package/dist/esm/core/config.d.ts +102 -0
  54. package/dist/esm/core/config.js +247 -0
  55. package/dist/esm/core/content-errors.d.ts +111 -0
  56. package/dist/esm/core/content-errors.js +362 -0
  57. package/dist/esm/core/content-manager.d.ts +335 -0
  58. package/dist/esm/core/content-manager.js +1476 -0
  59. package/dist/esm/core/content-performance-optimizer.d.ts +150 -0
  60. package/dist/esm/core/content-performance-optimizer.js +516 -0
  61. package/dist/esm/core/content-resolver.d.ts +104 -0
  62. package/dist/esm/core/content-resolver.js +285 -0
  63. package/dist/esm/core/cross-modal-search.d.ts +164 -0
  64. package/dist/esm/core/cross-modal-search.js +342 -0
  65. package/dist/esm/core/database-connection-manager.d.ts +109 -0
  66. package/dist/esm/core/database-connection-manager.js +310 -0
  67. package/dist/esm/core/db.d.ts +269 -0
  68. package/dist/esm/core/db.js +1000 -0
  69. package/dist/esm/core/embedder-factory.d.ts +154 -0
  70. package/dist/esm/core/embedder-factory.js +311 -0
  71. package/dist/esm/core/error-handler.d.ts +112 -0
  72. package/dist/esm/core/error-handler.js +239 -0
  73. package/dist/esm/core/index.d.ts +59 -0
  74. package/dist/esm/core/index.js +69 -0
  75. package/dist/esm/core/ingestion.d.ts +202 -0
  76. package/dist/esm/core/ingestion.js +904 -0
  77. package/dist/esm/core/interfaces.d.ts +408 -0
  78. package/dist/esm/core/interfaces.js +106 -0
  79. package/dist/esm/core/knowledge-base-manager.d.ts +109 -0
  80. package/dist/esm/core/knowledge-base-manager.js +256 -0
  81. package/dist/esm/core/lazy-dependency-loader.d.ts +147 -0
  82. package/dist/esm/core/lazy-dependency-loader.js +435 -0
  83. package/dist/esm/core/mode-detection-service.d.ts +150 -0
  84. package/dist/esm/core/mode-detection-service.js +565 -0
  85. package/dist/esm/core/mode-model-validator.d.ts +92 -0
  86. package/dist/esm/core/mode-model-validator.js +203 -0
  87. package/dist/esm/core/model-registry.d.ts +116 -0
  88. package/dist/esm/core/model-registry.js +411 -0
  89. package/dist/esm/core/model-validator.d.ts +217 -0
  90. package/dist/esm/core/model-validator.js +782 -0
  91. package/dist/esm/core/path-manager.d.ts +47 -0
  92. package/dist/esm/core/path-manager.js +71 -0
  93. package/dist/esm/core/raglite-paths.d.ts +121 -0
  94. package/dist/esm/core/raglite-paths.js +145 -0
  95. package/dist/esm/core/reranking-config.d.ts +42 -0
  96. package/dist/esm/core/reranking-config.js +147 -0
  97. package/dist/esm/core/reranking-factory.d.ts +92 -0
  98. package/dist/esm/core/reranking-factory.js +410 -0
  99. package/dist/esm/core/reranking-strategies.d.ts +310 -0
  100. package/dist/esm/core/reranking-strategies.js +650 -0
  101. package/dist/esm/core/resource-cleanup.d.ts +163 -0
  102. package/dist/esm/core/resource-cleanup.js +371 -0
  103. package/dist/esm/core/resource-manager.d.ts +212 -0
  104. package/dist/esm/core/resource-manager.js +564 -0
  105. package/dist/esm/core/search-pipeline.d.ts +111 -0
  106. package/dist/esm/core/search-pipeline.js +287 -0
  107. package/dist/esm/core/search.d.ts +141 -0
  108. package/dist/esm/core/search.js +320 -0
  109. package/dist/esm/core/streaming-operations.d.ts +145 -0
  110. package/dist/esm/core/streaming-operations.js +409 -0
  111. package/dist/esm/core/types.d.ts +66 -0
  112. package/dist/esm/core/types.js +6 -0
  113. package/dist/esm/core/universal-embedder.d.ts +177 -0
  114. package/dist/esm/core/universal-embedder.js +139 -0
  115. package/dist/esm/core/validation-messages.d.ts +99 -0
  116. package/dist/esm/core/validation-messages.js +334 -0
  117. package/dist/esm/core/vector-index-messages.d.ts +52 -0
  118. package/dist/esm/core/vector-index-messages.js +5 -0
  119. package/dist/esm/core/vector-index-worker.d.ts +6 -0
  120. package/dist/esm/core/vector-index-worker.js +304 -0
  121. package/dist/esm/core/vector-index.d.ts +107 -0
  122. package/dist/esm/core/vector-index.js +344 -0
  123. package/dist/esm/dom-polyfills.d.ts +6 -0
  124. package/dist/esm/dom-polyfills.js +37 -0
  125. package/dist/esm/factories/index.d.ts +27 -0
  126. package/dist/esm/factories/index.js +29 -0
  127. package/dist/esm/factories/ingestion-factory.d.ts +200 -0
  128. package/dist/esm/factories/ingestion-factory.js +473 -0
  129. package/dist/esm/factories/search-factory.d.ts +154 -0
  130. package/dist/esm/factories/search-factory.js +355 -0
  131. package/dist/esm/file-processor.d.ts +147 -0
  132. package/dist/esm/file-processor.js +963 -0
  133. package/dist/esm/index-manager.d.ts +136 -0
  134. package/dist/esm/index-manager.js +667 -0
  135. package/dist/esm/index.d.ts +76 -0
  136. package/dist/esm/index.js +112 -0
  137. package/dist/esm/indexer.d.ts +7 -0
  138. package/dist/esm/indexer.js +54 -0
  139. package/dist/esm/ingestion.d.ts +63 -0
  140. package/dist/esm/ingestion.js +124 -0
  141. package/dist/esm/mcp-server.d.ts +46 -0
  142. package/dist/esm/mcp-server.js +1820 -0
  143. package/dist/esm/multimodal/clip-embedder.d.ts +327 -0
  144. package/dist/esm/multimodal/clip-embedder.js +996 -0
  145. package/dist/esm/multimodal/index.d.ts +6 -0
  146. package/dist/esm/multimodal/index.js +6 -0
  147. package/dist/esm/preprocess.d.ts +19 -0
  148. package/dist/esm/preprocess.js +203 -0
  149. package/dist/esm/preprocessors/index.d.ts +17 -0
  150. package/dist/esm/preprocessors/index.js +38 -0
  151. package/dist/esm/preprocessors/mdx.d.ts +25 -0
  152. package/dist/esm/preprocessors/mdx.js +101 -0
  153. package/dist/esm/preprocessors/mermaid.d.ts +68 -0
  154. package/dist/esm/preprocessors/mermaid.js +329 -0
  155. package/dist/esm/preprocessors/registry.d.ts +56 -0
  156. package/dist/esm/preprocessors/registry.js +179 -0
  157. package/dist/esm/run-error-recovery-tests.d.ts +7 -0
  158. package/dist/esm/run-error-recovery-tests.js +101 -0
  159. package/dist/esm/search-standalone.d.ts +7 -0
  160. package/dist/esm/search-standalone.js +117 -0
  161. package/dist/esm/search.d.ts +99 -0
  162. package/dist/esm/search.js +177 -0
  163. package/dist/esm/test-utils.d.ts +18 -0
  164. package/dist/esm/test-utils.js +27 -0
  165. package/dist/esm/text/chunker.d.ts +33 -0
  166. package/dist/esm/text/chunker.js +279 -0
  167. package/dist/esm/text/embedder.d.ts +111 -0
  168. package/dist/esm/text/embedder.js +386 -0
  169. package/dist/esm/text/index.d.ts +8 -0
  170. package/dist/esm/text/index.js +9 -0
  171. package/dist/esm/text/preprocessors/index.d.ts +17 -0
  172. package/dist/esm/text/preprocessors/index.js +38 -0
  173. package/dist/esm/text/preprocessors/mdx.d.ts +25 -0
  174. package/dist/esm/text/preprocessors/mdx.js +101 -0
  175. package/dist/esm/text/preprocessors/mermaid.d.ts +68 -0
  176. package/dist/esm/text/preprocessors/mermaid.js +330 -0
  177. package/dist/esm/text/preprocessors/registry.d.ts +56 -0
  178. package/dist/esm/text/preprocessors/registry.js +180 -0
  179. package/dist/esm/text/reranker.d.ts +49 -0
  180. package/dist/esm/text/reranker.js +274 -0
  181. package/dist/esm/text/sentence-transformer-embedder.d.ts +96 -0
  182. package/dist/esm/text/sentence-transformer-embedder.js +340 -0
  183. package/dist/esm/text/tokenizer.d.ts +22 -0
  184. package/dist/esm/text/tokenizer.js +64 -0
  185. package/dist/esm/types.d.ts +83 -0
  186. package/dist/esm/types.js +3 -0
  187. package/dist/esm/utils/vector-math.d.ts +31 -0
  188. package/dist/esm/utils/vector-math.js +70 -0
  189. package/package.json +39 -14
  190. package/dist/core/vector-index.d.ts +0 -72
  191. package/dist/core/vector-index.js +0 -331
  192. /package/dist/{api-errors.d.ts → cjs/api-errors.d.ts} +0 -0
  193. /package/dist/{api-errors.js → cjs/api-errors.js} +0 -0
  194. /package/dist/{cli → cjs/cli}/indexer.d.ts +0 -0
  195. /package/dist/{cli → cjs/cli}/search.d.ts +0 -0
  196. /package/dist/{cli → cjs/cli}/search.js +0 -0
  197. /package/dist/{cli.d.ts → cjs/cli.d.ts} +0 -0
  198. /package/dist/{config.d.ts → cjs/config.d.ts} +0 -0
  199. /package/dist/{config.js → cjs/config.js} +0 -0
  200. /package/dist/{core → cjs/core}/abstract-embedder.d.ts +0 -0
  201. /package/dist/{core → cjs/core}/abstract-embedder.js +0 -0
  202. /package/dist/{core → cjs/core}/actionable-error-messages.d.ts +0 -0
  203. /package/dist/{core → cjs/core}/actionable-error-messages.js +0 -0
  204. /package/dist/{core → cjs/core}/adapters.d.ts +0 -0
  205. /package/dist/{core → cjs/core}/adapters.js +0 -0
  206. /package/dist/{core → cjs/core}/batch-processing-optimizer.d.ts +0 -0
  207. /package/dist/{core → cjs/core}/batch-processing-optimizer.js +0 -0
  208. /package/dist/{core → cjs/core}/binary-index-format.d.ts +0 -0
  209. /package/dist/{core → cjs/core}/chunker.d.ts +0 -0
  210. /package/dist/{core → cjs/core}/chunker.js +0 -0
  211. /package/dist/{core → cjs/core}/cli-database-utils.d.ts +0 -0
  212. /package/dist/{core → cjs/core}/cli-database-utils.js +0 -0
  213. /package/dist/{core → cjs/core}/config.d.ts +0 -0
  214. /package/dist/{core → cjs/core}/config.js +0 -0
  215. /package/dist/{core → cjs/core}/content-errors.d.ts +0 -0
  216. /package/dist/{core → cjs/core}/content-errors.js +0 -0
  217. /package/dist/{core → cjs/core}/content-manager.d.ts +0 -0
  218. /package/dist/{core → cjs/core}/content-manager.js +0 -0
  219. /package/dist/{core → cjs/core}/content-performance-optimizer.d.ts +0 -0
  220. /package/dist/{core → cjs/core}/content-performance-optimizer.js +0 -0
  221. /package/dist/{core → cjs/core}/content-resolver.d.ts +0 -0
  222. /package/dist/{core → cjs/core}/content-resolver.js +0 -0
  223. /package/dist/{core → cjs/core}/cross-modal-search.d.ts +0 -0
  224. /package/dist/{core → cjs/core}/cross-modal-search.js +0 -0
  225. /package/dist/{core → cjs/core}/database-connection-manager.d.ts +0 -0
  226. /package/dist/{core → cjs/core}/database-connection-manager.js +0 -0
  227. /package/dist/{core → cjs/core}/embedder-factory.d.ts +0 -0
  228. /package/dist/{core → cjs/core}/embedder-factory.js +0 -0
  229. /package/dist/{core → cjs/core}/error-handler.d.ts +0 -0
  230. /package/dist/{core → cjs/core}/error-handler.js +0 -0
  231. /package/dist/{core → cjs/core}/index.d.ts +0 -0
  232. /package/dist/{core → cjs/core}/index.js +0 -0
  233. /package/dist/{core → cjs/core}/ingestion.d.ts +0 -0
  234. /package/dist/{core → cjs/core}/interfaces.d.ts +0 -0
  235. /package/dist/{core → cjs/core}/interfaces.js +0 -0
  236. /package/dist/{core → cjs/core}/lazy-dependency-loader.d.ts +0 -0
  237. /package/dist/{core → cjs/core}/lazy-dependency-loader.js +0 -0
  238. /package/dist/{core → cjs/core}/mode-detection-service.d.ts +0 -0
  239. /package/dist/{core → cjs/core}/mode-detection-service.js +0 -0
  240. /package/dist/{core → cjs/core}/mode-model-validator.d.ts +0 -0
  241. /package/dist/{core → cjs/core}/mode-model-validator.js +0 -0
  242. /package/dist/{core → cjs/core}/model-registry.d.ts +0 -0
  243. /package/dist/{core → cjs/core}/model-registry.js +0 -0
  244. /package/dist/{core → cjs/core}/model-validator.d.ts +0 -0
  245. /package/dist/{core → cjs/core}/path-manager.d.ts +0 -0
  246. /package/dist/{core → cjs/core}/path-manager.js +0 -0
  247. /package/dist/{core → cjs/core}/raglite-paths.d.ts +0 -0
  248. /package/dist/{core → cjs/core}/raglite-paths.js +0 -0
  249. /package/dist/{core → cjs/core}/reranking-config.d.ts +0 -0
  250. /package/dist/{core → cjs/core}/reranking-config.js +0 -0
  251. /package/dist/{core → cjs/core}/reranking-factory.d.ts +0 -0
  252. /package/dist/{core → cjs/core}/reranking-factory.js +0 -0
  253. /package/dist/{core → cjs/core}/reranking-strategies.d.ts +0 -0
  254. /package/dist/{core → cjs/core}/reranking-strategies.js +0 -0
  255. /package/dist/{core → cjs/core}/resource-cleanup.d.ts +0 -0
  256. /package/dist/{core → cjs/core}/resource-cleanup.js +0 -0
  257. /package/dist/{core → cjs/core}/resource-manager.d.ts +0 -0
  258. /package/dist/{core → cjs/core}/resource-manager.js +0 -0
  259. /package/dist/{core → cjs/core}/search-pipeline.d.ts +0 -0
  260. /package/dist/{core → cjs/core}/search.d.ts +0 -0
  261. /package/dist/{core → cjs/core}/streaming-operations.d.ts +0 -0
  262. /package/dist/{core → cjs/core}/streaming-operations.js +0 -0
  263. /package/dist/{core → cjs/core}/types.d.ts +0 -0
  264. /package/dist/{core → cjs/core}/types.js +0 -0
  265. /package/dist/{core → cjs/core}/universal-embedder.d.ts +0 -0
  266. /package/dist/{core → cjs/core}/universal-embedder.js +0 -0
  267. /package/dist/{core → cjs/core}/validation-messages.d.ts +0 -0
  268. /package/dist/{core → cjs/core}/validation-messages.js +0 -0
  269. /package/dist/{dom-polyfills.d.ts → cjs/dom-polyfills.d.ts} +0 -0
  270. /package/dist/{dom-polyfills.js → cjs/dom-polyfills.js} +0 -0
  271. /package/dist/{factories → cjs/factories}/index.d.ts +0 -0
  272. /package/dist/{factories → cjs/factories}/index.js +0 -0
  273. /package/dist/{factories → cjs/factories}/ingestion-factory.d.ts +0 -0
  274. /package/dist/{factories → cjs/factories}/search-factory.d.ts +0 -0
  275. /package/dist/{file-processor.d.ts → cjs/file-processor.d.ts} +0 -0
  276. /package/dist/{file-processor.js → cjs/file-processor.js} +0 -0
  277. /package/dist/{indexer.d.ts → cjs/indexer.d.ts} +0 -0
  278. /package/dist/{indexer.js → cjs/indexer.js} +0 -0
  279. /package/dist/{ingestion.d.ts → cjs/ingestion.d.ts} +0 -0
  280. /package/dist/{ingestion.js → cjs/ingestion.js} +0 -0
  281. /package/dist/{mcp-server.d.ts → cjs/mcp-server.d.ts} +0 -0
  282. /package/dist/{mcp-server.js → cjs/mcp-server.js} +0 -0
  283. /package/dist/{multimodal → cjs/multimodal}/clip-embedder.d.ts +0 -0
  284. /package/dist/{multimodal → cjs/multimodal}/clip-embedder.js +0 -0
  285. /package/dist/{multimodal → cjs/multimodal}/index.d.ts +0 -0
  286. /package/dist/{multimodal → cjs/multimodal}/index.js +0 -0
  287. /package/dist/{preprocess.d.ts → cjs/preprocess.d.ts} +0 -0
  288. /package/dist/{preprocess.js → cjs/preprocess.js} +0 -0
  289. /package/dist/{preprocessors → cjs/preprocessors}/index.d.ts +0 -0
  290. /package/dist/{preprocessors → cjs/preprocessors}/index.js +0 -0
  291. /package/dist/{preprocessors → cjs/preprocessors}/mdx.d.ts +0 -0
  292. /package/dist/{preprocessors → cjs/preprocessors}/mdx.js +0 -0
  293. /package/dist/{preprocessors → cjs/preprocessors}/mermaid.d.ts +0 -0
  294. /package/dist/{preprocessors → cjs/preprocessors}/mermaid.js +0 -0
  295. /package/dist/{preprocessors → cjs/preprocessors}/registry.d.ts +0 -0
  296. /package/dist/{preprocessors → cjs/preprocessors}/registry.js +0 -0
  297. /package/dist/{run-error-recovery-tests.d.ts → cjs/run-error-recovery-tests.d.ts} +0 -0
  298. /package/dist/{run-error-recovery-tests.js → cjs/run-error-recovery-tests.js} +0 -0
  299. /package/dist/{search-standalone.d.ts → cjs/search-standalone.d.ts} +0 -0
  300. /package/dist/{search-standalone.js → cjs/search-standalone.js} +0 -0
  301. /package/dist/{search.d.ts → cjs/search.d.ts} +0 -0
  302. /package/dist/{search.js → cjs/search.js} +0 -0
  303. /package/dist/{test-utils.d.ts → cjs/test-utils.d.ts} +0 -0
  304. /package/dist/{test-utils.js → cjs/test-utils.js} +0 -0
  305. /package/dist/{text → cjs/text}/chunker.d.ts +0 -0
  306. /package/dist/{text → cjs/text}/chunker.js +0 -0
  307. /package/dist/{text → cjs/text}/embedder.d.ts +0 -0
  308. /package/dist/{text → cjs/text}/embedder.js +0 -0
  309. /package/dist/{text → cjs/text}/index.d.ts +0 -0
  310. /package/dist/{text → cjs/text}/index.js +0 -0
  311. /package/dist/{text → cjs/text}/preprocessors/index.d.ts +0 -0
  312. /package/dist/{text → cjs/text}/preprocessors/index.js +0 -0
  313. /package/dist/{text → cjs/text}/preprocessors/mdx.d.ts +0 -0
  314. /package/dist/{text → cjs/text}/preprocessors/mdx.js +0 -0
  315. /package/dist/{text → cjs/text}/preprocessors/mermaid.d.ts +0 -0
  316. /package/dist/{text → cjs/text}/preprocessors/mermaid.js +0 -0
  317. /package/dist/{text → cjs/text}/preprocessors/registry.d.ts +0 -0
  318. /package/dist/{text → cjs/text}/preprocessors/registry.js +0 -0
  319. /package/dist/{text → cjs/text}/reranker.d.ts +0 -0
  320. /package/dist/{text → cjs/text}/reranker.js +0 -0
  321. /package/dist/{text → cjs/text}/sentence-transformer-embedder.d.ts +0 -0
  322. /package/dist/{text → cjs/text}/sentence-transformer-embedder.js +0 -0
  323. /package/dist/{text → cjs/text}/tokenizer.d.ts +0 -0
  324. /package/dist/{text → cjs/text}/tokenizer.js +0 -0
  325. /package/dist/{types.d.ts → cjs/types.d.ts} +0 -0
  326. /package/dist/{types.js → cjs/types.js} +0 -0
  327. /package/dist/{utils → cjs/utils}/vector-math.d.ts +0 -0
  328. /package/dist/{utils → cjs/utils}/vector-math.js +0 -0
@@ -0,0 +1,435 @@
1
+ /**
2
+ * CORE MODULE — Lazy Dependency Loading System
3
+ * Implements dynamic imports for multimodal-specific dependencies
4
+ * Ensures text mode performance is not impacted by multimodal code
5
+ *
6
+ * Requirements: 9.2 - Lazy loading for multimodal dependencies
7
+ */
8
+ // Ensure DOM polyfills are set up before any transformers.js usage
9
+ import '../dom-polyfills.js';
10
+ import { handleError, ErrorCategory, ErrorSeverity, createError } from './error-handler.js';
11
+ // =============================================================================
12
+ // LAZY LOADING CACHE
13
+ // =============================================================================
14
+ /**
15
+ * Cache for loaded modules to avoid repeated imports
16
+ */
17
+ class LazyLoadingCache {
18
+ static instance;
19
+ loadedModules = new Map();
20
+ loadingPromises = new Map();
21
+ static getInstance() {
22
+ if (!LazyLoadingCache.instance) {
23
+ LazyLoadingCache.instance = new LazyLoadingCache();
24
+ }
25
+ return LazyLoadingCache.instance;
26
+ }
27
+ async getOrLoad(key, loader) {
28
+ // Return cached module if available
29
+ if (this.loadedModules.has(key)) {
30
+ return this.loadedModules.get(key);
31
+ }
32
+ // Return existing loading promise if in progress
33
+ if (this.loadingPromises.has(key)) {
34
+ return this.loadingPromises.get(key);
35
+ }
36
+ // Start loading and cache the promise
37
+ const loadingPromise = loader().then(module => {
38
+ this.loadedModules.set(key, module);
39
+ this.loadingPromises.delete(key);
40
+ return module;
41
+ }).catch(error => {
42
+ this.loadingPromises.delete(key);
43
+ throw error;
44
+ });
45
+ this.loadingPromises.set(key, loadingPromise);
46
+ return loadingPromise;
47
+ }
48
+ clear() {
49
+ this.loadedModules.clear();
50
+ this.loadingPromises.clear();
51
+ }
52
+ remove(key) {
53
+ this.loadedModules.delete(key);
54
+ this.loadingPromises.delete(key);
55
+ }
56
+ getLoadedModules() {
57
+ return Array.from(this.loadedModules.keys());
58
+ }
59
+ }
60
+ // =============================================================================
61
+ // LAZY EMBEDDER LOADING
62
+ // =============================================================================
63
+ /**
64
+ * Lazy loader for embedder implementations
65
+ * Only loads the specific embedder type when needed
66
+ */
67
+ export class LazyEmbedderLoader {
68
+ static cache = LazyLoadingCache.getInstance();
69
+ /**
70
+ * Lazily load and create a sentence transformer embedder
71
+ * Only imports the module when actually needed for text mode
72
+ */
73
+ static async loadSentenceTransformerEmbedder(modelName, options = {}) {
74
+ const cacheKey = `sentence-transformer:${modelName}`;
75
+ return this.cache.getOrLoad(cacheKey, async () => {
76
+ try {
77
+ console.log(`🔄 Lazy loading sentence transformer embedder: ${modelName}`);
78
+ // Dynamic import - only loaded when text mode is used
79
+ const { SentenceTransformerEmbedder } = await import('../text/sentence-transformer-embedder.js');
80
+ const embedder = new SentenceTransformerEmbedder(modelName, options);
81
+ await embedder.loadModel();
82
+ console.log(`✅ Sentence transformer embedder loaded: ${modelName}`);
83
+ return embedder;
84
+ }
85
+ catch (error) {
86
+ const enhancedError = createError.model(`Failed to lazy load sentence transformer embedder '${modelName}': ${error instanceof Error ? error.message : 'Unknown error'}`);
87
+ handleError(enhancedError, 'LazyEmbedderLoader', {
88
+ severity: ErrorSeverity.ERROR,
89
+ category: ErrorCategory.MODEL
90
+ });
91
+ throw enhancedError;
92
+ }
93
+ });
94
+ }
95
+ /**
96
+ * Lazily load and create a CLIP embedder
97
+ * Only imports the module when actually needed for multimodal mode
98
+ */
99
+ static async loadCLIPEmbedder(modelName, options = {}) {
100
+ const cacheKey = `clip:${modelName}`;
101
+ return this.cache.getOrLoad(cacheKey, async () => {
102
+ try {
103
+ console.log(`🔄 Lazy loading CLIP embedder: ${modelName}`);
104
+ // Dynamic import - only loaded when multimodal mode is used
105
+ const { CLIPEmbedder } = await import('../multimodal/clip-embedder.js');
106
+ const embedder = new CLIPEmbedder(modelName, options);
107
+ await embedder.loadModel();
108
+ console.log(`✅ CLIP embedder loaded: ${modelName}`);
109
+ return embedder;
110
+ }
111
+ catch (error) {
112
+ const enhancedError = createError.model(`Failed to lazy load CLIP embedder '${modelName}': ${error instanceof Error ? error.message : 'Unknown error'}`);
113
+ handleError(enhancedError, 'LazyEmbedderLoader', {
114
+ severity: ErrorSeverity.ERROR,
115
+ category: ErrorCategory.MODEL
116
+ });
117
+ throw enhancedError;
118
+ }
119
+ });
120
+ }
121
+ /**
122
+ * Check if an embedder is already loaded in cache
123
+ */
124
+ static isEmbedderLoaded(modelName, modelType) {
125
+ const cacheKey = `${modelType}:${modelName}`;
126
+ return this.cache.getLoadedModules().includes(cacheKey);
127
+ }
128
+ /**
129
+ * Remove an embedder from the cache (called when embedder is cleaned up)
130
+ */
131
+ static removeEmbedderFromCache(modelName, modelType) {
132
+ const cacheKey = `${modelType}:${modelName}`;
133
+ this.cache.remove(cacheKey);
134
+ console.log(`🧹 Removed embedder from cache: ${cacheKey}`);
135
+ }
136
+ /**
137
+ * Get statistics about loaded embedders
138
+ */
139
+ static getLoadingStats() {
140
+ const loadedModules = this.cache.getLoadedModules();
141
+ const textEmbedders = loadedModules.filter(key => key.startsWith('sentence-transformer:')).length;
142
+ const multimodalEmbedders = loadedModules.filter(key => key.startsWith('clip:')).length;
143
+ return {
144
+ loadedEmbedders: loadedModules,
145
+ totalLoaded: loadedModules.length,
146
+ textEmbedders,
147
+ multimodalEmbedders
148
+ };
149
+ }
150
+ }
151
+ // =============================================================================
152
+ // LAZY RERANKER LOADING
153
+ // =============================================================================
154
+ /**
155
+ * Lazy loader for reranking implementations
156
+ * Only loads the specific reranker type when needed
157
+ */
158
+ export class LazyRerankerLoader {
159
+ static cache = LazyLoadingCache.getInstance();
160
+ /**
161
+ * Lazily load text reranker (cross-encoder)
162
+ * Always available for both text and multimodal modes
163
+ */
164
+ static async loadTextReranker() {
165
+ const cacheKey = 'reranker:text';
166
+ return this.cache.getOrLoad(cacheKey, async () => {
167
+ try {
168
+ console.log('🔄 Lazy loading text reranker (cross-encoder)');
169
+ // Dynamic import - loaded when reranking is needed
170
+ const { createTextRerankFunction } = await import('../text/reranker.js');
171
+ const rerankFn = createTextRerankFunction();
172
+ console.log('✅ Text reranker loaded');
173
+ return rerankFn;
174
+ }
175
+ catch (error) {
176
+ const enhancedError = createError.model(`Failed to lazy load text reranker: ${error instanceof Error ? error.message : 'Unknown error'}`);
177
+ handleError(enhancedError, 'LazyRerankerLoader', {
178
+ severity: ErrorSeverity.WARNING,
179
+ category: ErrorCategory.MODEL
180
+ });
181
+ throw enhancedError;
182
+ }
183
+ });
184
+ }
185
+ /**
186
+ * Lazily load text-derived reranker for multimodal mode
187
+ * Only imports multimodal-specific dependencies when needed
188
+ */
189
+ static async loadTextDerivedReranker() {
190
+ const cacheKey = 'reranker:text-derived';
191
+ return this.cache.getOrLoad(cacheKey, async () => {
192
+ console.log('🔄 Lazy loading text-derived reranker (multimodal)');
193
+ // Dynamic import - only loaded when multimodal mode uses text-derived reranking
194
+ const { TextDerivedRerankingStrategy } = await import('./reranking-strategies.js');
195
+ const reranker = new TextDerivedRerankingStrategy();
196
+ console.log('✅ Text-derived reranker loaded');
197
+ return reranker.rerank.bind(reranker);
198
+ });
199
+ }
200
+ /**
201
+ * Lazily load CLIP AutoProcessor for consistent image preprocessing
202
+ * Shares processor instances across embedder instances to ensure identical preprocessing
203
+ */
204
+ static async loadCLIPAutoProcessor(modelName) {
205
+ const cacheKey = `processor:clip:${modelName}`;
206
+ return this.cache.getOrLoad(cacheKey, async () => {
207
+ console.log(`🔄 Lazy loading CLIP AutoProcessor: ${modelName}`);
208
+ // Dynamic import - only loaded when CLIP models are used
209
+ const { AutoProcessor } = await import('@huggingface/transformers');
210
+ const processor = await AutoProcessor.from_pretrained(modelName);
211
+ console.log(`✅ CLIP AutoProcessor loaded: ${modelName}`);
212
+ return processor;
213
+ });
214
+ }
215
+ /**
216
+ * Check if a reranker is already loaded in cache
217
+ */
218
+ static isRerankerLoaded(strategy) {
219
+ const cacheKey = `reranker:${strategy}`;
220
+ return this.cache.getLoadedModules().includes(cacheKey);
221
+ }
222
+ /**
223
+ * Get statistics about loaded rerankers
224
+ */
225
+ static getLoadingStats() {
226
+ const loadedModules = this.cache.getLoadedModules().filter(key => key.startsWith('reranker:'));
227
+ const textRerankers = loadedModules.filter(key => key === 'reranker:text').length;
228
+ const multimodalRerankers = loadedModules.filter(key => key.includes('text-derived') || key.includes('metadata') || key.includes('hybrid')).length;
229
+ return {
230
+ loadedRerankers: loadedModules,
231
+ totalLoaded: loadedModules.length,
232
+ textRerankers,
233
+ multimodalRerankers
234
+ };
235
+ }
236
+ }
237
+ // =============================================================================
238
+ // LAZY MULTIMODAL PROCESSING LOADING
239
+ // =============================================================================
240
+ /**
241
+ * Lazy loader for multimodal content processing
242
+ * Only loads image processing dependencies when needed
243
+ */
244
+ export class LazyMultimodalLoader {
245
+ static cache = LazyLoadingCache.getInstance();
246
+ /**
247
+ * Lazily load image-to-text processing capabilities
248
+ * Only imports when multimodal content processing is needed
249
+ */
250
+ static async loadImageToTextProcessor(modelName = 'Xenova/vit-gpt2-image-captioning') {
251
+ const cacheKey = `image-to-text:${modelName}`;
252
+ return this.cache.getOrLoad(cacheKey, async () => {
253
+ try {
254
+ console.log(`🔄 Lazy loading image-to-text processor: ${modelName}`);
255
+ // Dynamic import - only loaded when multimodal content processing is needed
256
+ const { pipeline } = await import('@huggingface/transformers');
257
+ const processor = await pipeline('image-to-text', modelName, {
258
+ progress_callback: (progress) => {
259
+ if (progress.status === 'downloading') {
260
+ console.log(`📥 Downloading image-to-text model: ${Math.round(progress.progress || 0)}%`);
261
+ }
262
+ }
263
+ });
264
+ console.log(`✅ Image-to-text processor loaded: ${modelName}`);
265
+ return processor;
266
+ }
267
+ catch (error) {
268
+ const enhancedError = createError.model(`Failed to lazy load image-to-text processor '${modelName}': ${error instanceof Error ? error.message : 'Unknown error'}`);
269
+ handleError(enhancedError, 'LazyMultimodalLoader', {
270
+ severity: ErrorSeverity.ERROR,
271
+ category: ErrorCategory.MODEL
272
+ });
273
+ throw enhancedError;
274
+ }
275
+ });
276
+ }
277
+ /**
278
+ * Lazily load image metadata extraction capabilities
279
+ * Only imports Sharp when image metadata processing is needed
280
+ */
281
+ static async loadImageMetadataExtractor() {
282
+ const cacheKey = 'image-metadata-extractor';
283
+ return this.cache.getOrLoad(cacheKey, async () => {
284
+ try {
285
+ console.log('🔄 Lazy loading image metadata extractor (Sharp)');
286
+ // Dynamic import - only loaded when image metadata extraction is needed
287
+ // Sharp is an optional dependency for image metadata extraction
288
+ let sharp;
289
+ try {
290
+ // Use dynamic import with string to avoid TypeScript checking
291
+ sharp = await import('sharp');
292
+ }
293
+ catch (error) {
294
+ // Sharp is not available, will use fallback
295
+ throw new Error('Sharp not available for image metadata extraction');
296
+ }
297
+ console.log('✅ Image metadata extractor loaded (Sharp)');
298
+ return sharp.default || sharp;
299
+ }
300
+ catch (error) {
301
+ console.warn(`Failed to load Sharp for image metadata extraction: ${error instanceof Error ? error.message : 'Unknown error'}`);
302
+ console.log('📊 Image metadata extraction will be limited without Sharp');
303
+ // Return a fallback metadata extractor
304
+ return {
305
+ metadata: async () => ({
306
+ width: 0,
307
+ height: 0,
308
+ format: 'unknown',
309
+ size: 0
310
+ })
311
+ };
312
+ }
313
+ });
314
+ }
315
+ /**
316
+ * Check if multimodal processing capabilities are loaded
317
+ */
318
+ static getMultimodalLoadingStatus() {
319
+ const loadedModules = this.cache.getLoadedModules();
320
+ return {
321
+ imageToTextLoaded: loadedModules.some(key => key.startsWith('image-to-text:')),
322
+ metadataExtractorLoaded: loadedModules.includes('image-metadata-extractor'),
323
+ loadedProcessors: loadedModules.filter(key => key.startsWith('image-to-text:') || key === 'image-metadata-extractor')
324
+ };
325
+ }
326
+ }
327
+ // =============================================================================
328
+ // UNIFIED LAZY LOADING INTERFACE
329
+ // =============================================================================
330
+ /**
331
+ * Unified interface for all lazy loading operations
332
+ * Provides a single entry point for dependency management
333
+ */
334
+ export class LazyDependencyManager {
335
+ /**
336
+ * Load embedder based on model type with lazy loading
337
+ */
338
+ static async loadEmbedder(modelName, modelType, options = {}) {
339
+ switch (modelType) {
340
+ case 'sentence-transformer':
341
+ return LazyEmbedderLoader.loadSentenceTransformerEmbedder(modelName, options);
342
+ case 'clip':
343
+ return LazyEmbedderLoader.loadCLIPEmbedder(modelName, options);
344
+ default:
345
+ throw createError.validation(`Unsupported model type for lazy loading: ${modelType}`);
346
+ }
347
+ }
348
+ /**
349
+ * Load reranker based on strategy with lazy loading
350
+ */
351
+ static async loadReranker(strategy) {
352
+ if (strategy === 'disabled') {
353
+ return undefined;
354
+ }
355
+ switch (strategy) {
356
+ case 'cross-encoder':
357
+ return LazyRerankerLoader.loadTextReranker();
358
+ case 'text-derived':
359
+ return LazyRerankerLoader.loadTextDerivedReranker();
360
+ default:
361
+ throw new Error(`Unknown reranking strategy '${strategy}'. Supported strategies: cross-encoder, text-derived, disabled`);
362
+ }
363
+ }
364
+ /**
365
+ * Get comprehensive loading statistics
366
+ */
367
+ static getLoadingStatistics() {
368
+ const embedderStats = LazyEmbedderLoader.getLoadingStats();
369
+ const rerankerStats = LazyRerankerLoader.getLoadingStats();
370
+ const multimodalStats = LazyMultimodalLoader.getMultimodalLoadingStatus();
371
+ const totalModules = embedderStats.totalLoaded + rerankerStats.totalLoaded + multimodalStats.loadedProcessors.length;
372
+ // Estimate memory impact based on loaded modules
373
+ let memoryImpact = 'low';
374
+ if (embedderStats.multimodalEmbedders > 0 || multimodalStats.imageToTextLoaded) {
375
+ memoryImpact = 'high';
376
+ }
377
+ else if (totalModules > 2) {
378
+ memoryImpact = 'medium';
379
+ }
380
+ return {
381
+ embedders: embedderStats,
382
+ rerankers: rerankerStats,
383
+ multimodal: multimodalStats,
384
+ totalModulesLoaded: totalModules,
385
+ memoryImpact
386
+ };
387
+ }
388
+ /**
389
+ * Clear all cached modules (for testing or memory management)
390
+ */
391
+ static clearCache() {
392
+ LazyLoadingCache.getInstance().clear();
393
+ console.log('🧹 Lazy loading cache cleared');
394
+ }
395
+ /**
396
+ * Check if system is running in text-only mode (no multimodal dependencies loaded)
397
+ */
398
+ static isTextOnlyMode() {
399
+ const stats = this.getLoadingStatistics();
400
+ return stats.embedders.multimodalEmbedders === 0 &&
401
+ stats.rerankers.multimodalRerankers === 0 &&
402
+ !stats.multimodal.imageToTextLoaded;
403
+ }
404
+ /**
405
+ * Get performance impact assessment
406
+ */
407
+ static getPerformanceImpact() {
408
+ const stats = this.getLoadingStatistics();
409
+ const isTextOnly = this.isTextOnlyMode();
410
+ const recommendations = [];
411
+ if (isTextOnly) {
412
+ recommendations.push('Optimal performance: Only text dependencies loaded');
413
+ }
414
+ else {
415
+ recommendations.push('Multimodal mode: Additional dependencies loaded as needed');
416
+ if (stats.embedders.multimodalEmbedders > 1) {
417
+ recommendations.push('Consider using a single multimodal model to reduce memory usage');
418
+ }
419
+ if (stats.multimodal.imageToTextLoaded && stats.multimodal.metadataExtractorLoaded) {
420
+ recommendations.push('Full multimodal processing active - expect higher memory usage');
421
+ }
422
+ }
423
+ return {
424
+ mode: isTextOnly ? 'text-only' : 'multimodal',
425
+ startupTime: stats.totalModulesLoaded === 0 ? 'fast' : stats.totalModulesLoaded < 3 ? 'medium' : 'slow',
426
+ memoryUsage: stats.memoryImpact,
427
+ recommendations
428
+ };
429
+ }
430
+ }
431
+ // =============================================================================
432
+ // DEFAULT EXPORT
433
+ // =============================================================================
434
+ export default LazyDependencyManager;
435
+ //# sourceMappingURL=lazy-dependency-loader.js.map
@@ -0,0 +1,150 @@
1
+ /**
2
+ * CORE MODULE — Mode Detection Service for Chameleon Architecture
3
+ * Handles automatic mode detection from database and provides default configurations
4
+ * Supports graceful error handling and fallback to text mode
5
+ * Enhanced with shared database connection management to prevent locking issues
6
+ */
7
+ import type { DatabaseConnection } from './db.js';
8
+ import type { SystemInfo, ModeType, ModelType } from '../types.js';
9
+ /**
10
+ * Service for detecting and storing system mode configuration
11
+ * Provides automatic mode detection from database with graceful error handling
12
+ * Uses shared database connections to prevent locking issues
13
+ */
14
+ export declare class ModeDetectionService {
15
+ private dbPath;
16
+ constructor(dbPath: string);
17
+ /**
18
+ * Detects the current system mode from the database
19
+ * Falls back to default text mode configuration for new installations
20
+ * Enhanced with comprehensive error handling and recovery mechanisms
21
+ * Uses shared database connections to prevent locking issues
22
+ *
23
+ * @param existingConnection - Optional existing connection to reuse
24
+ * @returns Promise resolving to SystemInfo with current or default configuration
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * const modeService = new ModeDetectionService('./db.sqlite');
29
+ * const systemInfo = await modeService.detectMode();
30
+ * console.log(`Current mode: ${systemInfo.mode}`);
31
+ * ```
32
+ */
33
+ detectMode(existingConnection?: DatabaseConnection): Promise<SystemInfo>;
34
+ /**
35
+ * Stores system mode configuration in the database
36
+ * Creates or updates the system_info table with the provided configuration
37
+ * Uses shared database connections to prevent locking issues
38
+ *
39
+ * @param systemInfo - SystemInfo object to store (can be partial for updates)
40
+ * @param existingConnection - Optional existing connection to reuse
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const modeService = new ModeDetectionService('./db.sqlite');
45
+ * await modeService.storeMode({
46
+ * mode: 'multimodal',
47
+ * modelName: 'Xenova/clip-vit-base-patch32',
48
+ * modelType: 'clip',
49
+ * modelDimensions: 512,
50
+ * supportedContentTypes: ['text', 'image'],
51
+ * rerankingStrategy: 'text-derived'
52
+ * });
53
+ * ```
54
+ */
55
+ storeMode(systemInfo: Partial<SystemInfo>, existingConnection?: DatabaseConnection): Promise<void>;
56
+ /**
57
+ * Gets the current mode from the database (convenience method)
58
+ * @returns Promise resolving to the current mode string
59
+ */
60
+ getCurrentMode(): Promise<ModeType>;
61
+ /**
62
+ * Checks if the system is in multimodal mode
63
+ * @returns Promise resolving to boolean indicating multimodal mode
64
+ */
65
+ isMultimodalMode(): Promise<boolean>;
66
+ /**
67
+ * Gets complete model information from the database
68
+ * @returns Promise resolving to current model configuration
69
+ */
70
+ getCurrentModelInfo(): Promise<{
71
+ modelName: string;
72
+ modelType: ModelType;
73
+ dimensions: number;
74
+ supportedContentTypes: string[];
75
+ }>;
76
+ /**
77
+ * Get default system info for new installations
78
+ * @private
79
+ */
80
+ private getDefaultSystemInfo;
81
+ /**
82
+ * Check database file accessibility
83
+ * @private
84
+ */
85
+ private checkDatabaseAccessibility;
86
+ /**
87
+ * Verify database schema integrity
88
+ * @private
89
+ */
90
+ private verifySchemaIntegrity;
91
+ /**
92
+ * Ensure database schema exists
93
+ * @private
94
+ */
95
+ private ensureSchemaExists;
96
+ /**
97
+ * Handle detection errors with fallback to default configuration
98
+ * @private
99
+ */
100
+ private handleDetectionError;
101
+ /**
102
+ * Log error-specific guidance for users
103
+ * @private
104
+ */
105
+ private logErrorGuidance;
106
+ /**
107
+ * Enhances storage errors with more context and helpful suggestions
108
+ * @private
109
+ */
110
+ private enhanceStorageError;
111
+ /**
112
+ * Validate complete system info object
113
+ * @private
114
+ */
115
+ private validateSystemInfo;
116
+ /**
117
+ * Validate mode value
118
+ * @private
119
+ */
120
+ private validateMode;
121
+ /**
122
+ * Validate model type value
123
+ * @private
124
+ */
125
+ private validateModelType;
126
+ /**
127
+ * Validate reranking strategy value
128
+ * @private
129
+ */
130
+ private validateRerankingStrategy;
131
+ }
132
+ /**
133
+ * Quick function to detect mode from database
134
+ * @param dbPath - Path to database file
135
+ * @returns Promise resolving to SystemInfo
136
+ */
137
+ export declare function detectSystemMode(dbPath: string): Promise<SystemInfo>;
138
+ /**
139
+ * Quick function to store mode configuration
140
+ * @param dbPath - Path to database file
141
+ * @param systemInfo - System configuration to store
142
+ */
143
+ export declare function storeSystemMode(dbPath: string, systemInfo: Partial<SystemInfo>): Promise<void>;
144
+ /**
145
+ * Quick function to check if system is in multimodal mode
146
+ * @param dbPath - Path to database file
147
+ * @returns Promise resolving to boolean
148
+ */
149
+ export declare function isMultimodalMode(dbPath: string): Promise<boolean>;
150
+ //# sourceMappingURL=mode-detection-service.d.ts.map