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,355 @@
1
+ /**
2
+ * CORE MODULE — Polymorphic Search Factory for Chameleon Architecture
3
+ *
4
+ * Automatically detects mode from database and creates the appropriate search engine.
5
+ * No fallback mechanisms - each mode uses its optimal implementation reliably.
6
+ *
7
+ * Mode Behavior:
8
+ * - Text Mode: Uses sentence-transformer models for fast text-only search
9
+ * - Multimodal Mode: Uses CLIP models for cross-modal text/image search
10
+ *
11
+ * The mode is determined during ingestion and stored in the database, then
12
+ * automatically detected during search - no manual configuration needed.
13
+ */
14
+ // Ensure DOM polyfills are set up before any transformers.js usage
15
+ import '../dom-polyfills.js';
16
+ import { SearchEngine } from '../core/search.js';
17
+ import { ModeDetectionService } from '../core/mode-detection-service.js';
18
+ import { IndexManager } from '../index-manager.js';
19
+ import { DatabaseConnectionManager } from '../core/database-connection-manager.js';
20
+ import { createEmbedder } from '../core/embedder-factory.js';
21
+ import { ContentResolver } from '../core/content-resolver.js';
22
+ import { validateModeModelCompatibilityOrThrow } from '../core/mode-model-validator.js';
23
+ import { createMissingFileError } from '../core/actionable-error-messages.js';
24
+ import { handleError, ErrorCategory, ErrorSeverity, createError } from '../core/error-handler.js';
25
+ import { existsSync } from 'fs';
26
+ // =============================================================================
27
+ // POLYMORPHIC SEARCH FACTORY
28
+ // =============================================================================
29
+ /**
30
+ * Factory for creating search engines with automatic mode detection
31
+ *
32
+ * Detects the mode from database configuration and creates the appropriate
33
+ * search engine without fallback mechanisms. Each mode uses its optimal
34
+ * implementation for predictable, reliable behavior.
35
+ *
36
+ * Mode Selection (configured during ingestion):
37
+ * - Text Mode: Optimized for text-only content
38
+ * - Uses sentence-transformer models
39
+ * - Fast text similarity search
40
+ * - Images converted to text descriptions
41
+ *
42
+ * - Multimodal Mode: Optimized for mixed text/image content
43
+ * - Uses CLIP models
44
+ * - Unified embedding space for text and images
45
+ * - True cross-modal search capabilities
46
+ * - Text queries find images, image queries find text
47
+ */
48
+ export class SearchFactory {
49
+ /**
50
+ * Create a SearchEngine with automatic mode detection and configuration
51
+ *
52
+ * Automatically detects the mode from database configuration and creates
53
+ * the appropriate search engine. No fallback mechanisms - each mode works
54
+ * reliably with its optimal implementation.
55
+ *
56
+ * Process:
57
+ * 1. Detects mode from database (text or multimodal)
58
+ * 2. Validates mode-model compatibility
59
+ * 3. Creates appropriate embedder (sentence-transformer or CLIP)
60
+ * 4. Creates appropriate reranker based on mode and strategy
61
+ * 5. Initializes SearchEngine with proper dependency injection
62
+ *
63
+ * Mode Behavior:
64
+ * - Text Mode: Fast text-only search with sentence-transformers
65
+ * - Optimized for text similarity
66
+ * - Optional cross-encoder reranking
67
+ *
68
+ * - Multimodal Mode: Cross-modal search with CLIP
69
+ * - Unified embedding space for text and images
70
+ * - Text queries find images, image queries find text
71
+ * - Optional text-derived or metadata reranking
72
+ *
73
+ * @param indexPath - Path to the vector index file (must exist)
74
+ * @param dbPath - Path to the SQLite database file (must exist)
75
+ * @returns Promise resolving to configured SearchEngine
76
+ * @throws {Error} If files don't exist, mode-model incompatible, or initialization fails
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * // Automatic mode detection and engine creation
81
+ * const search = await SearchFactory.create('./index.bin', './db.sqlite');
82
+ *
83
+ * // Search works based on detected mode:
84
+ * // Text mode: fast text similarity search
85
+ * const textResults = await search.search('machine learning');
86
+ *
87
+ * // Multimodal mode: cross-modal search
88
+ * const imageResults = await search.search('red sports car'); // Finds images
89
+ * ```
90
+ */
91
+ static async create(indexPath, dbPath) {
92
+ try {
93
+ console.log('🎭 SearchFactory: Initializing search engine with mode detection...');
94
+ // Step 1: Validate input paths
95
+ if (!indexPath || !dbPath) {
96
+ throw createError.validation('Both indexPath and dbPath are required');
97
+ }
98
+ // Step 2: Validate that required files exist
99
+ this.validateRequiredFiles(indexPath, dbPath);
100
+ // Step 3: Get shared database connection
101
+ const db = await DatabaseConnectionManager.getConnection(dbPath);
102
+ // Step 4: Detect mode from database using shared connection
103
+ const modeService = new ModeDetectionService(dbPath);
104
+ const systemInfo = await modeService.detectMode(db);
105
+ console.log(`🎯 Detected mode: ${systemInfo.mode} (model: ${systemInfo.modelName})`);
106
+ // Step 4.5: Validate mode-model compatibility at creation time
107
+ console.log('🔍 Validating mode-model compatibility...');
108
+ validateModeModelCompatibilityOrThrow(systemInfo.mode, systemInfo.modelName);
109
+ console.log('✓ Mode-model compatibility validated');
110
+ // Step 5: Create search engine based on detected mode
111
+ switch (systemInfo.mode) {
112
+ case 'text':
113
+ return await this.createTextSearchEngine(indexPath, dbPath, systemInfo, db);
114
+ case 'multimodal':
115
+ return await this.createMultimodalSearchEngine(indexPath, dbPath, systemInfo, db);
116
+ default:
117
+ throw createError.validation(`Unsupported mode: ${systemInfo.mode}`);
118
+ }
119
+ }
120
+ catch (error) {
121
+ const enhancedError = this.enhanceCreationError(error, indexPath, dbPath);
122
+ handleError(enhancedError, 'Polymorphic Search Factory', {
123
+ severity: ErrorSeverity.ERROR,
124
+ category: ErrorCategory.GENERAL
125
+ });
126
+ throw enhancedError;
127
+ }
128
+ }
129
+ // =============================================================================
130
+ // MODE-SPECIFIC ENGINE CREATION
131
+ // =============================================================================
132
+ /**
133
+ * Create a search engine configured for text mode
134
+ * @private
135
+ */
136
+ static async createTextSearchEngine(indexPath, dbPath, systemInfo, db) {
137
+ console.log('📝 Creating text search engine...');
138
+ try {
139
+ // Step 1: Create text embedder
140
+ const embedder = await createEmbedder(systemInfo.modelName);
141
+ console.log(`✓ Text embedder created: ${systemInfo.modelName} (${systemInfo.modelDimensions}D)`);
142
+ // Step 2: Create reranker based on strategy
143
+ const rerankFn = await this.createTextReranker(systemInfo.rerankingStrategy);
144
+ if (rerankFn) {
145
+ console.log(`✓ Text reranker created: ${systemInfo.rerankingStrategy}`);
146
+ }
147
+ else {
148
+ console.log('ℹ️ Reranking disabled');
149
+ }
150
+ // Step 3: Initialize core components (using shared connection)
151
+ const indexManager = new IndexManager(indexPath, dbPath, systemInfo.modelDimensions, systemInfo.modelName);
152
+ await indexManager.initialize();
153
+ // Step 4: Create ContentResolver for unified content system
154
+ const contentResolver = new ContentResolver(db);
155
+ // Step 5: Create search engine with dependency injection
156
+ const searchEngine = new SearchEngine(embedder.embedText.bind(embedder), indexManager, db, rerankFn, contentResolver);
157
+ console.log('✅ Text search engine initialized successfully');
158
+ return searchEngine;
159
+ }
160
+ catch (error) {
161
+ throw createError.model(`Failed to create text search engine: ${error instanceof Error ? error.message : 'Unknown error'}`);
162
+ }
163
+ }
164
+ /**
165
+ * Create a search engine configured for multimodal mode
166
+ * @private
167
+ */
168
+ static async createMultimodalSearchEngine(indexPath, dbPath, systemInfo, db) {
169
+ console.log('🖼️ Creating multimodal search engine...');
170
+ try {
171
+ // Step 1: Create multimodal embedder (CLIP)
172
+ const embedder = await createEmbedder(systemInfo.modelName);
173
+ console.log(`✓ Multimodal embedder created: ${systemInfo.modelName} (${systemInfo.modelDimensions}D)`);
174
+ // Step 2: Create multimodal reranker based on strategy
175
+ const rerankFn = await this.createMultimodalReranker(systemInfo.rerankingStrategy);
176
+ if (rerankFn) {
177
+ console.log(`✓ Multimodal reranker created: ${systemInfo.rerankingStrategy}`);
178
+ }
179
+ else {
180
+ console.log('ℹ️ Reranking disabled');
181
+ }
182
+ // Step 3: Initialize core components (using shared connection)
183
+ const indexManager = new IndexManager(indexPath, dbPath, systemInfo.modelDimensions, systemInfo.modelName);
184
+ await indexManager.initialize();
185
+ // Step 4: Create ContentResolver for unified content system
186
+ const contentResolver = new ContentResolver(db);
187
+ // Step 5: Create search engine with dependency injection
188
+ const searchEngine = new SearchEngine(embedder.embedText.bind(embedder), indexManager, db, rerankFn, contentResolver);
189
+ console.log('✅ Multimodal search engine initialized successfully');
190
+ return searchEngine;
191
+ }
192
+ catch (error) {
193
+ throw createError.model(`Failed to create multimodal search engine: ${error instanceof Error ? error.message : 'Unknown error'}`);
194
+ }
195
+ }
196
+ // =============================================================================
197
+ // RERANKER CREATION FUNCTIONS
198
+ // =============================================================================
199
+ /**
200
+ * Create reranker for text mode using lazy loading
201
+ * @private
202
+ */
203
+ static async createTextReranker(strategy) {
204
+ try {
205
+ if (strategy === 'disabled') {
206
+ return undefined;
207
+ }
208
+ // Use lazy loading to avoid loading reranking dependencies unless needed
209
+ const { LazyRerankerLoader } = await import('../core/lazy-dependency-loader.js');
210
+ // For text mode, use cross-encoder reranking
211
+ if (strategy === 'cross-encoder') {
212
+ return LazyRerankerLoader.loadTextReranker();
213
+ }
214
+ // Fail clearly for unknown strategies in text mode
215
+ throw createError.validation(`Unknown text reranking strategy '${strategy}'. Supported strategies: cross-encoder, disabled`);
216
+ }
217
+ catch (error) {
218
+ throw createError.model(`Failed to create text reranker with strategy '${strategy}': ${error instanceof Error ? error.message : 'Unknown error'}`);
219
+ }
220
+ }
221
+ /**
222
+ * Create reranker for multimodal mode using lazy loading
223
+ * @private
224
+ */
225
+ static async createMultimodalReranker(strategy) {
226
+ try {
227
+ if (strategy === 'disabled') {
228
+ return undefined;
229
+ }
230
+ // Use lazy loading to avoid loading multimodal dependencies unless needed
231
+ const { LazyDependencyManager } = await import('../core/lazy-dependency-loader.js');
232
+ // Load the appropriate reranker based on strategy
233
+ return LazyDependencyManager.loadReranker(strategy);
234
+ }
235
+ catch (error) {
236
+ throw createError.model(`Failed to create multimodal reranker with strategy '${strategy}': ${error instanceof Error ? error.message : 'Unknown error'}`);
237
+ }
238
+ }
239
+ // =============================================================================
240
+ // VALIDATION AND ERROR HANDLING
241
+ // =============================================================================
242
+ /**
243
+ * Validate that required files exist
244
+ * @private
245
+ */
246
+ static validateRequiredFiles(indexPath, dbPath) {
247
+ if (!existsSync(indexPath)) {
248
+ throw createMissingFileError(indexPath, 'index', {
249
+ operationContext: 'SearchFactory.create'
250
+ });
251
+ }
252
+ if (!existsSync(dbPath)) {
253
+ throw createMissingFileError(dbPath, 'database', {
254
+ operationContext: 'SearchFactory.create'
255
+ });
256
+ }
257
+ }
258
+ /**
259
+ * Enhance creation errors with helpful context
260
+ * @private
261
+ */
262
+ static enhanceCreationError(error, indexPath, dbPath) {
263
+ if (error instanceof Error) {
264
+ // Add context about the operation that failed
265
+ let enhancedMessage = `SearchFactory.create failed: ${error.message}`;
266
+ // Provide specific guidance based on error type
267
+ if (error.message.includes('ENOENT')) {
268
+ enhancedMessage += '\n\n💡 Make sure both the vector index and database files exist.';
269
+ enhancedMessage += '\n Run ingestion first: raglite ingest <directory>';
270
+ }
271
+ else if (error.message.includes('SQLITE_CORRUPT')) {
272
+ enhancedMessage += '\n\n💡 Database appears to be corrupted.';
273
+ enhancedMessage += '\n Try deleting the database and re-running ingestion.';
274
+ }
275
+ else if (error.message.includes('Model') && error.message.includes('not found')) {
276
+ enhancedMessage += '\n\n💡 The model specified in the database is not supported.';
277
+ enhancedMessage += '\n Check the model name or re-run ingestion with a supported model.';
278
+ }
279
+ else if (error.message.includes('dimensions')) {
280
+ enhancedMessage += '\n\n💡 Vector dimension mismatch detected.';
281
+ enhancedMessage += '\n The index was created with a different model. Rebuild the index:';
282
+ enhancedMessage += '\n raglite ingest <directory> --force-rebuild';
283
+ }
284
+ else if (error.message.includes('Cannot enlarge memory') ||
285
+ error.message.includes('WebAssembly memory limit') ||
286
+ error.message.includes('memory limit exceeded')) {
287
+ enhancedMessage += '\n\n💡 WebAssembly memory limit exceeded.';
288
+ enhancedMessage += '\n Your vector index is too large for the 2GB WebAssembly memory limit.';
289
+ enhancedMessage += '\n Solutions:';
290
+ enhancedMessage += '\n 1. Increase Node.js memory: node --max-old-space-size=4096 ...';
291
+ enhancedMessage += '\n 2. Split your data into smaller indexes';
292
+ enhancedMessage += '\n 3. Use a smaller embedding model (fewer dimensions)';
293
+ enhancedMessage += '\n 4. Rebuild the index with fewer vectors';
294
+ }
295
+ return new Error(enhancedMessage);
296
+ }
297
+ return new Error(`SearchFactory.create failed: Unknown error`);
298
+ }
299
+ }
300
+ // =============================================================================
301
+ // CONVENIENCE FUNCTIONS
302
+ // =============================================================================
303
+ /**
304
+ * Quick function to create a search engine with automatic mode detection
305
+ * Convenience wrapper around SearchFactory.create
306
+ *
307
+ * @param indexPath - Path to the vector index file
308
+ * @param dbPath - Path to the database file
309
+ * @returns Promise resolving to configured SearchEngine
310
+ *
311
+ * @example
312
+ * ```typescript
313
+ * const search = await createSearchEngine('./index.bin', './db.sqlite');
314
+ * const results = await search.search('query');
315
+ * ```
316
+ */
317
+ export async function createSearchEngine(indexPath, dbPath) {
318
+ return SearchFactory.create(indexPath, dbPath);
319
+ }
320
+ /**
321
+ * Check what mode a database is configured for
322
+ * Convenience function for inspecting database configuration
323
+ *
324
+ * @param dbPath - Path to the database file
325
+ * @returns Promise resolving to the detected mode
326
+ *
327
+ * @example
328
+ * ```typescript
329
+ * const mode = await detectSearchEngineMode('./db.sqlite');
330
+ * console.log(`Database is configured for ${mode} mode`);
331
+ * ```
332
+ */
333
+ export async function detectSearchEngineMode(dbPath) {
334
+ const modeService = new ModeDetectionService(dbPath);
335
+ const systemInfo = await modeService.detectMode();
336
+ return systemInfo.mode;
337
+ }
338
+ /**
339
+ * Get system information for a database
340
+ * Convenience function for inspecting complete database configuration
341
+ *
342
+ * @param dbPath - Path to the database file
343
+ * @returns Promise resolving to complete SystemInfo
344
+ *
345
+ * @example
346
+ * ```typescript
347
+ * const info = await getSearchEngineInfo('./db.sqlite');
348
+ * console.log(`Mode: ${info.mode}, Model: ${info.modelName}, Dimensions: ${info.modelDimensions}`);
349
+ * ```
350
+ */
351
+ export async function getSearchEngineInfo(dbPath) {
352
+ const modeService = new ModeDetectionService(dbPath);
353
+ return modeService.detectMode();
354
+ }
355
+ //# sourceMappingURL=search-factory.js.map
@@ -0,0 +1,147 @@
1
+ import { DocumentPathManager } from './core/path-manager.js';
2
+ import type { Document } from './core/types.js';
3
+ /**
4
+ * Options for file discovery and processing
5
+ */
6
+ export interface FileProcessorOptions {
7
+ /** Whether to process files recursively in subdirectories */
8
+ recursive?: boolean;
9
+ /** Maximum file size in bytes (default: 10MB) */
10
+ maxFileSize?: number;
11
+ /** Processing mode to filter compatible files */
12
+ mode?: 'text' | 'multimodal';
13
+ }
14
+ /**
15
+ * Default options for file processing
16
+ */
17
+ export declare const DEFAULT_FILE_PROCESSOR_OPTIONS: FileProcessorOptions;
18
+ /**
19
+ * Default options for image-to-text processing
20
+ */
21
+ export declare const DEFAULT_IMAGE_TO_TEXT_OPTIONS: ImageToTextOptions;
22
+ /**
23
+ * Result of file discovery operation
24
+ */
25
+ export interface FileDiscoveryResult {
26
+ /** Successfully discovered files */
27
+ files: string[];
28
+ /** Files that were skipped due to errors */
29
+ skipped: Array<{
30
+ path: string;
31
+ reason: string;
32
+ }>;
33
+ }
34
+ /**
35
+ * Result of document processing operation
36
+ */
37
+ export interface DocumentProcessingResult {
38
+ /** Successfully processed documents */
39
+ documents: Document[];
40
+ /** Files that failed to process */
41
+ errors: Array<{
42
+ path: string;
43
+ error: string;
44
+ }>;
45
+ }
46
+ /**
47
+ * Image description generation result
48
+ */
49
+ export interface ImageDescriptionResult {
50
+ /** Generated text description */
51
+ description: string;
52
+ /** Confidence score (0-1) */
53
+ confidence?: number;
54
+ /** Model used for generation */
55
+ model: string;
56
+ }
57
+ /**
58
+ * Options for image-to-text processing
59
+ */
60
+ export interface ImageToTextOptions {
61
+ /** Model to use for image captioning */
62
+ model?: string;
63
+ /** Maximum description length */
64
+ maxLength?: number;
65
+ /** Batch size for processing multiple images */
66
+ batchSize?: number;
67
+ /** Whether to include confidence scores */
68
+ includeConfidence?: boolean;
69
+ }
70
+ /**
71
+ * Image metadata extracted from image files
72
+ */
73
+ export interface ImageMetadata {
74
+ /** Original file path */
75
+ originalPath: string;
76
+ /** Image dimensions */
77
+ dimensions: {
78
+ width: number;
79
+ height: number;
80
+ };
81
+ /** File size in bytes */
82
+ fileSize: number;
83
+ /** Image format (jpeg, png, gif, webp, bmp) */
84
+ format: string;
85
+ /** File creation date */
86
+ createdAt?: Date;
87
+ /** Generated text description (if available) */
88
+ description?: string;
89
+ /** Model used for description generation */
90
+ descriptionModel?: string;
91
+ /** Confidence score for description */
92
+ descriptionConfidence?: number;
93
+ }
94
+ /**
95
+ * Discover files for ingestion
96
+ * Supports both single files and directories (with optional recursion)
97
+ */
98
+ export declare function discoverFiles(path: string, options?: FileProcessorOptions): Promise<FileDiscoveryResult>;
99
+ /**
100
+ * Process multiple files into Documents
101
+ * Handles errors gracefully by skipping problematic files
102
+ */
103
+ export declare function processFiles(filePaths: string[], pathManager: DocumentPathManager, imageToTextOptions?: ImageToTextOptions): Promise<DocumentProcessingResult>;
104
+ /**
105
+ * Complete file discovery and processing pipeline
106
+ * Discovers files and processes them into Documents
107
+ */
108
+ export declare function discoverAndProcessFiles(path: string, options?: FileProcessorOptions, pathManager?: DocumentPathManager, imageToTextOptions?: ImageToTextOptions): Promise<{
109
+ documents: Document[];
110
+ discoveryResult: FileDiscoveryResult;
111
+ processingResult: DocumentProcessingResult;
112
+ }>;
113
+ /**
114
+ * Clean up image processing resources
115
+ * Call this when shutting down the application to free memory
116
+ */
117
+ export declare function cleanupImageProcessingResources(): Promise<void>;
118
+ /**
119
+ * Clean up image-to-text pipeline resources (legacy function for backward compatibility)
120
+ * @deprecated Use cleanupImageProcessingResources() instead
121
+ */
122
+ export declare function cleanupImageToTextPipeline(): Promise<void>;
123
+ /**
124
+ * Generate description for a single image (exported for external use)
125
+ */
126
+ export declare function generateImageDescriptionForFile(imagePath: string, options?: ImageToTextOptions): Promise<ImageDescriptionResult>;
127
+ /**
128
+ * Generate descriptions for multiple images (exported for external use)
129
+ */
130
+ export declare function generateImageDescriptionsForFiles(imagePaths: string[], options?: ImageToTextOptions): Promise<Array<{
131
+ path: string;
132
+ result?: ImageDescriptionResult;
133
+ error?: string;
134
+ }>>;
135
+ /**
136
+ * Extract metadata from a single image file (exported for external use)
137
+ */
138
+ export declare function extractImageMetadataForFile(imagePath: string): Promise<ImageMetadata>;
139
+ /**
140
+ * Extract metadata from multiple image files (exported for external use)
141
+ */
142
+ export declare function extractImageMetadataForFiles(imagePaths: string[]): Promise<Array<{
143
+ path: string;
144
+ metadata?: ImageMetadata;
145
+ error?: string;
146
+ }>>;
147
+ //# sourceMappingURL=file-processor.d.ts.map