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,529 @@
1
+ import { existsSync, statSync } from 'fs';
2
+ import { resolve } from 'path';
3
+ import { IngestionFactory } from '../factories/ingestion-factory.js';
4
+ import { withCLIDatabaseAccess, setupCLICleanup, isDatabaseBusy } from '../core/cli-database-utils.js';
5
+ import { EXIT_CODES, ConfigurationError } from '../core/config.js';
6
+ /**
7
+ * Validate mode-specific model and strategy combinations
8
+ * Ensures that the selected model is compatible with the chosen mode
9
+ * and that reranking strategies are valid for the mode
10
+ */
11
+ async function validateModeConfiguration(options) {
12
+ const mode = options.mode || 'text';
13
+ const model = options.embeddingModel;
14
+ // Define supported models for each mode
15
+ const textModels = [
16
+ 'sentence-transformers/all-MiniLM-L6-v2',
17
+ 'Xenova/all-mpnet-base-v2'
18
+ ];
19
+ const multimodalModels = [
20
+ 'Xenova/clip-vit-base-patch32',
21
+ 'Xenova/clip-vit-base-patch16'
22
+ ];
23
+ // Validate model compatibility with mode
24
+ if (model) {
25
+ if (mode === 'text' && !textModels.includes(model)) {
26
+ if (multimodalModels.includes(model)) {
27
+ throw new ConfigurationError(`Model '${model}' is a multimodal model but text mode was selected.\n` +
28
+ `\n` +
29
+ `To use this model, specify multimodal mode:\n` +
30
+ ` raglite ingest <path> --mode multimodal --model ${model}\n` +
31
+ `\n` +
32
+ `Or choose a text model for text mode:\n` +
33
+ ` ${textModels.map(m => `raglite ingest <path> --model ${m}`).join('\n ')}\n`, EXIT_CODES.INVALID_ARGUMENTS);
34
+ }
35
+ else {
36
+ throw new ConfigurationError(`Model '${model}' is not supported for text mode.\n` +
37
+ `\n` +
38
+ `Supported models for text mode:\n` +
39
+ ` ${textModels.join('\n ')}\n` +
40
+ `\n` +
41
+ `Examples:\n` +
42
+ ` raglite ingest <path> --model sentence-transformers/all-MiniLM-L6-v2\n` +
43
+ ` raglite ingest <path> --model Xenova/all-mpnet-base-v2\n`, EXIT_CODES.INVALID_ARGUMENTS);
44
+ }
45
+ }
46
+ if (mode === 'multimodal' && !multimodalModels.includes(model)) {
47
+ if (textModels.includes(model)) {
48
+ throw new ConfigurationError(`Model '${model}' is a text-only model but multimodal mode was selected.\n` +
49
+ `\n` +
50
+ `To use this model, specify text mode:\n` +
51
+ ` raglite ingest <path> --mode text --model ${model}\n` +
52
+ `\n` +
53
+ `Or choose a multimodal model for multimodal mode:\n` +
54
+ ` ${multimodalModels.map(m => `raglite ingest <path> --mode multimodal --model ${m}`).join('\n ')}\n`, EXIT_CODES.INVALID_ARGUMENTS);
55
+ }
56
+ else {
57
+ throw new ConfigurationError(`Model '${model}' is not supported for multimodal mode.\n` +
58
+ `\n` +
59
+ `Supported models for multimodal mode:\n` +
60
+ ` ${multimodalModels.join('\n ')}\n` +
61
+ `\n` +
62
+ `Example:\n` +
63
+ ` raglite ingest <path> --mode multimodal --model Xenova/clip-vit-base-patch32\n`, EXIT_CODES.INVALID_ARGUMENTS);
64
+ }
65
+ }
66
+ }
67
+ // Log the final configuration
68
+ console.log('✅ Mode configuration validated successfully');
69
+ if (mode !== 'text') {
70
+ console.log(` Mode: ${mode}`);
71
+ }
72
+ if (model) {
73
+ console.log(` Model: ${model}`);
74
+ }
75
+ }
76
+ /**
77
+ * Run document ingestion from CLI
78
+ * @param path - File or directory path to ingest
79
+ * @param options - CLI options including model selection
80
+ */
81
+ export async function runIngest(path, options = {}) {
82
+ try {
83
+ // Handle --force-rebuild flag immediately to prevent dimension mismatch errors
84
+ // Validate path exists
85
+ const resolvedPath = resolve(path);
86
+ if (!existsSync(resolvedPath)) {
87
+ console.error(`Error: Path does not exist: ${path}`);
88
+ console.error('');
89
+ console.error('Please check:');
90
+ console.error('- The path is spelled correctly');
91
+ console.error('- You have read permissions for the path');
92
+ console.error('- The file or directory exists');
93
+ console.error('');
94
+ console.error('Examples:');
95
+ console.error(' raglite ingest ./docs/ # Ingest directory');
96
+ console.error(' raglite ingest ./readme.md # Ingest single file');
97
+ process.exit(EXIT_CODES.FILE_NOT_FOUND);
98
+ }
99
+ // Check if it's a file or directory
100
+ let stats;
101
+ try {
102
+ stats = statSync(resolvedPath);
103
+ }
104
+ catch (error) {
105
+ console.error(`Error: Cannot access path: ${path}`);
106
+ console.error('');
107
+ if (error instanceof Error && error.message.includes('EACCES')) {
108
+ console.error('Permission denied. Please check that you have read permissions for this path.');
109
+ process.exit(EXIT_CODES.PERMISSION_ERROR);
110
+ }
111
+ else {
112
+ console.error('The path exists but cannot be accessed. Please check permissions.');
113
+ process.exit(EXIT_CODES.FILE_NOT_FOUND);
114
+ }
115
+ }
116
+ const pathType = stats.isDirectory() ? 'directory' : 'file';
117
+ // Validate file type for single files
118
+ if (stats.isFile()) {
119
+ const mode = options.mode || 'text';
120
+ // Only formats with actual processing implementations
121
+ const textExtensions = ['.md', '.txt', '.mdx', '.pdf', '.docx'];
122
+ const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp'];
123
+ const validExtensions = mode === 'multimodal'
124
+ ? [...textExtensions, ...imageExtensions]
125
+ : textExtensions;
126
+ const hasValidExtension = validExtensions.some(ext => path.toLowerCase().endsWith(ext));
127
+ if (!hasValidExtension) {
128
+ console.error(`Error: Unsupported file type: ${path}`);
129
+ console.error('');
130
+ if (mode === 'multimodal') {
131
+ console.error('Supported file types in multimodal mode:');
132
+ console.error(' Text: .md, .txt, .mdx');
133
+ console.error(' Documents: .pdf, .docx');
134
+ console.error(' Images: .jpg, .jpeg, .png, .gif, .webp, .bmp');
135
+ }
136
+ else {
137
+ console.error('Supported file types in text mode:');
138
+ console.error(' Text: .md, .txt, .mdx');
139
+ console.error(' Documents: .pdf, .docx');
140
+ console.error('');
141
+ console.error('For image files, use --mode multimodal:');
142
+ console.error(' raglite ingest <path> --mode multimodal');
143
+ }
144
+ console.error('');
145
+ console.error('If you want to ingest multiple files, provide a directory path instead.');
146
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
147
+ }
148
+ }
149
+ console.log(`Starting ingestion of ${pathType}: ${resolvedPath}`);
150
+ console.log('This may take a while for large document collections...');
151
+ console.log('');
152
+ // Prepare factory options
153
+ const factoryOptions = {};
154
+ if (options.model) {
155
+ factoryOptions.embeddingModel = options.model;
156
+ console.log(`Using embedding model: ${options.model}`);
157
+ }
158
+ if (options.mode) {
159
+ factoryOptions.mode = options.mode;
160
+ console.log(`Using processing mode: ${options.mode}`);
161
+ }
162
+ if (options.forceRebuild) {
163
+ factoryOptions.forceRebuild = true;
164
+ console.log('Force rebuild enabled (--force-rebuild)');
165
+ }
166
+ // Validate mode-specific model and strategy combinations
167
+ await validateModeConfiguration(factoryOptions);
168
+ const dbPath = process.env.RAG_DB_FILE || './db.sqlite';
169
+ const indexPath = process.env.RAG_INDEX_FILE || './vector-index.bin';
170
+ // --force-rebuild: Always delete DB (and sidecars) and index to guarantee a clean rebuild.
171
+ if (options.forceRebuild) {
172
+ try {
173
+ const { existsSync: fsExistsSync, unlinkSync } = await import('fs');
174
+ console.log('🗑️ Deleting existing database and index to perform a clean rebuild...');
175
+ // Remove WAL/SHM if present (common on SQLite with WAL journaling).
176
+ const sidecars = [`${dbPath}-wal`, `${dbPath}-shm`];
177
+ for (const p of sidecars) {
178
+ if (fsExistsSync(p)) {
179
+ try {
180
+ unlinkSync(p);
181
+ }
182
+ catch (e) {
183
+ console.warn(`⚠️ Could not remove SQLite sidecar file (${p}):`, e);
184
+ }
185
+ }
186
+ }
187
+ if (fsExistsSync(dbPath)) {
188
+ try {
189
+ unlinkSync(dbPath);
190
+ }
191
+ catch (e) {
192
+ console.warn(`⚠️ Could not remove database file (${dbPath}):`, e);
193
+ }
194
+ }
195
+ if (fsExistsSync(indexPath)) {
196
+ try {
197
+ unlinkSync(indexPath);
198
+ }
199
+ catch (e) {
200
+ console.warn(`⚠️ Could not remove index file (${indexPath}):`, e);
201
+ }
202
+ }
203
+ }
204
+ catch (error) {
205
+ console.warn('⚠️ Could not delete existing database/index for clean rebuild:', error instanceof Error ? error.message : String(error));
206
+ }
207
+ }
208
+ // Setup graceful cleanup
209
+ setupCLICleanup(dbPath);
210
+ // Check if database is busy before starting
211
+ const busyStatus = await isDatabaseBusy(dbPath);
212
+ if (busyStatus.isBusy) {
213
+ console.log('⚠️ Database appears to be in use by another process');
214
+ console.log(` Reason: ${busyStatus.reason}`);
215
+ console.log(' Attempting to proceed anyway...');
216
+ console.log('');
217
+ }
218
+ // Create ingestion pipeline using factory
219
+ let pipeline;
220
+ try {
221
+ // Create ingestion pipeline using IngestionFactory with database protection
222
+ pipeline = await withCLIDatabaseAccess(dbPath, () => IngestionFactory.create(dbPath, indexPath, factoryOptions), {
223
+ commandName: 'Ingestion command',
224
+ showProgress: true,
225
+ maxWaitMs: 15000 // Longer timeout for ingestion
226
+ });
227
+ const result = await pipeline.ingestPath(resolvedPath, { mode: factoryOptions.mode });
228
+ // Display final results
229
+ console.log('\n' + '='.repeat(50));
230
+ console.log('INGESTION SUMMARY');
231
+ console.log('='.repeat(50));
232
+ console.log(`Documents processed: ${result.documentsProcessed}`);
233
+ console.log(`Chunks created: ${result.chunksCreated}`);
234
+ console.log(`Embeddings generated: ${result.embeddingsGenerated}`);
235
+ if (result.documentErrors > 0) {
236
+ console.log(`Document errors: ${result.documentErrors}`);
237
+ }
238
+ if (result.embeddingErrors > 0) {
239
+ console.log(`Embedding errors: ${result.embeddingErrors}`);
240
+ }
241
+ console.log(`Total processing time: ${(result.processingTimeMs / 1000).toFixed(2)} seconds`);
242
+ if (result.chunksCreated > 0) {
243
+ const chunksPerSecond = (result.chunksCreated / (result.processingTimeMs / 1000)).toFixed(1);
244
+ console.log(`Processing rate: ${chunksPerSecond} chunks/second`);
245
+ }
246
+ console.log('\nIngestion completed successfully!');
247
+ // Run VACUUM to compact the SQLite database after ingestion
248
+ try {
249
+ const { openDatabase } = await import('../core/db.js');
250
+ const vacuumDb = await openDatabase(dbPath);
251
+ try {
252
+ console.log('Running VACUUM to optimize database size...');
253
+ await vacuumDb.run('VACUUM');
254
+ console.log('VACUUM completed successfully.');
255
+ }
256
+ finally {
257
+ await vacuumDb.close();
258
+ }
259
+ }
260
+ catch (vacuumError) {
261
+ console.warn('⚠️ VACUUM operation failed or was skipped:', vacuumError instanceof Error ? vacuumError.message : String(vacuumError));
262
+ }
263
+ // Display mode-specific information
264
+ const mode = options.mode || 'text';
265
+ if (mode === 'multimodal') {
266
+ console.log('✨ Multimodal mode enabled - you can now search across text and image content');
267
+ }
268
+ console.log('You can now search your documents using: raglite search "your query"');
269
+ console.log('');
270
+ console.log('💡 The search command will automatically detect and use the ingestion mode.');
271
+ }
272
+ finally {
273
+ if (pipeline) {
274
+ await pipeline.cleanup();
275
+ }
276
+ // Ensure clean exit for CLI commands
277
+ const { DatabaseConnectionManager } = await import('../core/database-connection-manager.js');
278
+ await DatabaseConnectionManager.closeAllConnections();
279
+ // Force exit for CLI commands to prevent hanging
280
+ setTimeout(() => {
281
+ process.exit(0);
282
+ }, 100);
283
+ }
284
+ }
285
+ catch (error) {
286
+ console.error('\n' + '='.repeat(50));
287
+ console.error('INGESTION FAILED');
288
+ console.error('='.repeat(50));
289
+ if (error instanceof ConfigurationError) {
290
+ console.error('Configuration Error:');
291
+ console.error(error.message);
292
+ process.exit(error.exitCode);
293
+ }
294
+ else if (error instanceof Error) {
295
+ console.error('Error:', error.message);
296
+ console.error('');
297
+ // Provide specific help for common error types
298
+ if (error.message.includes('ENOENT')) {
299
+ console.error('File/Directory Not Found:');
300
+ console.error('- Verify the path exists and is accessible');
301
+ console.error('- Check file and directory permissions');
302
+ console.error('- Ensure you have read access to the specified location');
303
+ process.exit(EXIT_CODES.FILE_NOT_FOUND);
304
+ }
305
+ else if (error.message.includes('EACCES') || error.message.includes('permission')) {
306
+ console.error('Permission Denied:');
307
+ console.error('- Check that you have read permissions for the files/directories');
308
+ console.error('- Ensure the database file is not locked by another process');
309
+ console.error('- Try running with appropriate permissions');
310
+ process.exit(EXIT_CODES.PERMISSION_ERROR);
311
+ }
312
+ else if (error.message.includes('SQLITE') || error.message.includes('database')) {
313
+ console.error('Database Error:');
314
+ console.error('- The database file may be corrupted or locked');
315
+ console.error('- Try running: raglite rebuild');
316
+ console.error('- Ensure no other RAG-lite processes are running');
317
+ console.error('- Check available disk space');
318
+ process.exit(EXIT_CODES.DATABASE_ERROR);
319
+ }
320
+ else if (error.message.includes('ONNX') || error.message.includes('model')) {
321
+ console.error('Model Loading Error:');
322
+ console.error('- The embedding model failed to load');
323
+ console.error('- This may happen on first run while downloading the model');
324
+ console.error('- Ensure you have internet connection for initial model download');
325
+ console.error('- Check available disk space in the models directory');
326
+ console.error('- Try running the command again');
327
+ process.exit(EXIT_CODES.MODEL_ERROR);
328
+ }
329
+ else if (error.message.includes('index') || error.message.includes('vector')) {
330
+ console.error('Vector Index Error:');
331
+ console.error('- The vector index may be corrupted');
332
+ console.error('- Try running: raglite rebuild');
333
+ console.error('- Check available disk space');
334
+ process.exit(EXIT_CODES.INDEX_ERROR);
335
+ }
336
+ else {
337
+ console.error('General Error:');
338
+ console.error('- An unexpected error occurred during ingestion');
339
+ console.error('- Check the error message above for more details');
340
+ console.error('- Try running the command again');
341
+ console.error('- If the problem persists, try: raglite rebuild');
342
+ process.exit(EXIT_CODES.GENERAL_ERROR);
343
+ }
344
+ }
345
+ else {
346
+ console.error('Unknown error:', String(error));
347
+ process.exit(EXIT_CODES.GENERAL_ERROR);
348
+ }
349
+ }
350
+ }
351
+ /**
352
+ * Run index rebuild from CLI
353
+ */
354
+ export async function runRebuild() {
355
+ try {
356
+ console.log('Starting index rebuild...');
357
+ console.log('This will regenerate all embeddings and rebuild the vector index.');
358
+ console.log('This may take a while depending on your document collection size.');
359
+ console.log('');
360
+ console.log('Progress will be shown below...');
361
+ console.log('');
362
+ // Detect mode from existing database for rebuild
363
+ const dbPath = process.env.RAG_DB_FILE || './db.sqlite';
364
+ const indexPath = process.env.RAG_INDEX_FILE || './vector-index.bin';
365
+ let rebuildOptions = { forceRebuild: true };
366
+ if (existsSync(dbPath)) {
367
+ try {
368
+ // Import mode detection service
369
+ const { ModeDetectionService } = await import('../core/mode-detection-service.js');
370
+ const modeService = new ModeDetectionService(dbPath);
371
+ const systemInfo = await modeService.detectMode();
372
+ console.log(`🎯 Detected existing configuration:`);
373
+ console.log(` Mode: ${systemInfo.mode}`);
374
+ console.log(` Model: ${systemInfo.modelName}`);
375
+ console.log(` Reranking: ${systemInfo.rerankingStrategy}`);
376
+ console.log('');
377
+ // Use the detected configuration for rebuild
378
+ rebuildOptions.mode = systemInfo.mode;
379
+ rebuildOptions.embeddingModel = systemInfo.modelName;
380
+ rebuildOptions.rerankingStrategy = systemInfo.rerankingStrategy;
381
+ }
382
+ catch (error) {
383
+ console.warn('⚠️ Could not detect existing mode configuration, using defaults');
384
+ console.warn(` Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
385
+ }
386
+ }
387
+ // Create ingestion pipeline with force rebuild using factory
388
+ const pipeline = await IngestionFactory.create(dbPath, indexPath, rebuildOptions);
389
+ try {
390
+ // Get all documents from database and re-ingest them
391
+ const { openDatabase } = await import('../core/db.js');
392
+ const db = await openDatabase(dbPath);
393
+ try {
394
+ const documents = await db.all('SELECT DISTINCT source FROM documents ORDER BY source');
395
+ if (documents.length === 0) {
396
+ throw new Error('No documents found in database. Nothing to rebuild.');
397
+ }
398
+ console.log(`Found ${documents.length} document${documents.length === 1 ? '' : 's'} to rebuild`);
399
+ let totalResult = {
400
+ documentsProcessed: 0,
401
+ chunksCreated: 0,
402
+ embeddingsGenerated: 0,
403
+ documentErrors: 0,
404
+ embeddingErrors: 0,
405
+ processingTimeMs: 0
406
+ };
407
+ // Re-ingest each document
408
+ for (const doc of documents) {
409
+ if (existsSync(doc.source)) {
410
+ console.log(`Rebuilding: ${doc.source}`);
411
+ const result = await pipeline.ingestFile(doc.source);
412
+ totalResult.documentsProcessed += result.documentsProcessed;
413
+ totalResult.chunksCreated += result.chunksCreated;
414
+ totalResult.embeddingsGenerated += result.embeddingsGenerated;
415
+ totalResult.documentErrors += result.documentErrors;
416
+ totalResult.embeddingErrors += result.embeddingErrors;
417
+ totalResult.processingTimeMs += result.processingTimeMs;
418
+ }
419
+ else {
420
+ console.warn(`⚠️ Document not found, skipping: ${doc.source}`);
421
+ totalResult.documentErrors++;
422
+ }
423
+ }
424
+ console.log('\n' + '='.repeat(50));
425
+ console.log('REBUILD COMPLETE');
426
+ console.log('='.repeat(50));
427
+ console.log(`Documents processed: ${totalResult.documentsProcessed}`);
428
+ console.log(`Chunks created: ${totalResult.chunksCreated}`);
429
+ console.log(`Embeddings generated: ${totalResult.embeddingsGenerated}`);
430
+ if (totalResult.documentErrors > 0) {
431
+ console.log(`Document errors: ${totalResult.documentErrors}`);
432
+ }
433
+ if (totalResult.embeddingErrors > 0) {
434
+ console.log(`Embedding errors: ${totalResult.embeddingErrors}`);
435
+ }
436
+ console.log(`Total processing time: ${(totalResult.processingTimeMs / 1000).toFixed(2)} seconds`);
437
+ console.log('');
438
+ console.log('The vector index has been successfully rebuilt.');
439
+ console.log('All embeddings have been regenerated with the current model.');
440
+ console.log('');
441
+ console.log('You can now search your documents using: raglite search "your query"');
442
+ // Run VACUUM to compact the SQLite database after rebuild
443
+ try {
444
+ const { openDatabase } = await import('../core/db.js');
445
+ const vacuumDb = await openDatabase(dbPath);
446
+ try {
447
+ console.log('Running VACUUM to optimize database size after rebuild...');
448
+ await vacuumDb.run('VACUUM');
449
+ console.log('VACUUM completed successfully.');
450
+ }
451
+ finally {
452
+ await vacuumDb.close();
453
+ }
454
+ }
455
+ catch (vacuumError) {
456
+ console.warn('⚠️ VACUUM operation failed or was skipped:', vacuumError instanceof Error ? vacuumError.message : String(vacuumError));
457
+ }
458
+ }
459
+ finally {
460
+ await db.close();
461
+ }
462
+ }
463
+ finally {
464
+ await pipeline.cleanup();
465
+ // Ensure clean exit for CLI commands
466
+ const { DatabaseConnectionManager } = await import('../core/database-connection-manager.js');
467
+ await DatabaseConnectionManager.closeAllConnections();
468
+ // Force exit for CLI commands to prevent hanging
469
+ setTimeout(() => {
470
+ process.exit(0);
471
+ }, 100);
472
+ }
473
+ }
474
+ catch (error) {
475
+ console.error('\n' + '='.repeat(50));
476
+ console.error('REBUILD FAILED');
477
+ console.error('='.repeat(50));
478
+ if (error instanceof ConfigurationError) {
479
+ console.error('Configuration Error:');
480
+ console.error(error.message);
481
+ process.exit(error.exitCode);
482
+ }
483
+ else if (error instanceof Error) {
484
+ console.error('Error:', error.message);
485
+ console.error('');
486
+ if (error.message.includes('No documents found') || error.message.includes('empty')) {
487
+ console.error('No Documents Found:');
488
+ console.error('- Make sure you have ingested documents first');
489
+ console.error('- Run: raglite ingest <path>');
490
+ console.error('- Check that your documents are in supported formats (.md, .txt)');
491
+ process.exit(EXIT_CODES.FILE_NOT_FOUND);
492
+ }
493
+ else if (error.message.includes('SQLITE') || error.message.includes('database')) {
494
+ console.error('Database Error:');
495
+ console.error('- The database file may be missing or corrupted');
496
+ console.error('- Try deleting db.sqlite and re-ingesting your documents');
497
+ console.error('- Ensure you have write permissions in the current directory');
498
+ process.exit(EXIT_CODES.DATABASE_ERROR);
499
+ }
500
+ else if (error.message.includes('model') || error.message.includes('ONNX')) {
501
+ console.error('Model Error:');
502
+ console.error('- The embedding model failed to load');
503
+ console.error('- Ensure you have internet connection for model download');
504
+ console.error('- Check available disk space');
505
+ console.error('- Try deleting the models directory and running again');
506
+ process.exit(EXIT_CODES.MODEL_ERROR);
507
+ }
508
+ else if (error.message.includes('index') || error.message.includes('vector')) {
509
+ console.error('Index Error:');
510
+ console.error('- Failed to rebuild the vector index');
511
+ console.error('- Try deleting vector-index.bin and running again');
512
+ console.error('- Check available disk space');
513
+ process.exit(EXIT_CODES.INDEX_ERROR);
514
+ }
515
+ else {
516
+ console.error('General Error:');
517
+ console.error('- An unexpected error occurred during rebuild');
518
+ console.error('- Try deleting db.sqlite and vector-index.bin, then re-ingest');
519
+ console.error('- Check available disk space and permissions');
520
+ process.exit(EXIT_CODES.GENERAL_ERROR);
521
+ }
522
+ }
523
+ else {
524
+ console.error('Unknown error:', String(error));
525
+ process.exit(EXIT_CODES.GENERAL_ERROR);
526
+ }
527
+ }
528
+ }
529
+ //# sourceMappingURL=indexer.js.map
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Run search from CLI
3
+ * @param query - Search query string or image file path
4
+ * @param options - CLI options including top-k and rerank settings
5
+ */
6
+ export declare function runSearch(query: string, options?: Record<string, any>): Promise<void>;
7
+ //# sourceMappingURL=search.d.ts.map