rag-lite-ts 2.1.0 → 2.2.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 (310) hide show
  1. package/dist/{cli → cjs/cli}/indexer.js +1 -1
  2. package/dist/{cli → cjs/cli}/search.js +5 -10
  3. package/dist/{core → cjs/core}/binary-index-format.d.ts +28 -2
  4. package/dist/cjs/core/binary-index-format.js +291 -0
  5. package/dist/{core → cjs/core}/ingestion.d.ts +5 -1
  6. package/dist/{core → cjs/core}/ingestion.js +76 -9
  7. package/dist/{core → cjs/core}/model-validator.js +1 -1
  8. package/dist/{core → cjs/core}/reranking-strategies.js +4 -5
  9. package/dist/{core → cjs/core}/search.js +2 -1
  10. package/dist/{core → cjs/core}/types.d.ts +1 -1
  11. package/dist/{core → cjs/core}/vector-index.d.ts +4 -0
  12. package/dist/{core → cjs/core}/vector-index.js +10 -2
  13. package/dist/{file-processor.d.ts → cjs/file-processor.d.ts} +2 -0
  14. package/dist/{file-processor.js → cjs/file-processor.js} +20 -0
  15. package/dist/{index-manager.d.ts → cjs/index-manager.d.ts} +17 -1
  16. package/dist/{index-manager.js → cjs/index-manager.js} +148 -7
  17. package/dist/{multimodal → cjs/multimodal}/clip-embedder.js +71 -66
  18. package/dist/esm/api-errors.d.ts +90 -0
  19. package/dist/esm/api-errors.js +320 -0
  20. package/dist/esm/cli/indexer.d.ts +11 -0
  21. package/dist/esm/cli/indexer.js +471 -0
  22. package/dist/esm/cli/search.d.ts +7 -0
  23. package/dist/esm/cli/search.js +332 -0
  24. package/dist/esm/cli.d.ts +3 -0
  25. package/dist/esm/cli.js +529 -0
  26. package/dist/esm/config.d.ts +51 -0
  27. package/dist/esm/config.js +79 -0
  28. package/dist/esm/core/abstract-embedder.d.ts +125 -0
  29. package/dist/esm/core/abstract-embedder.js +264 -0
  30. package/dist/esm/core/actionable-error-messages.d.ts +60 -0
  31. package/dist/esm/core/actionable-error-messages.js +397 -0
  32. package/dist/esm/core/adapters.d.ts +93 -0
  33. package/dist/esm/core/adapters.js +139 -0
  34. package/dist/esm/core/batch-processing-optimizer.d.ts +155 -0
  35. package/dist/esm/core/batch-processing-optimizer.js +536 -0
  36. package/dist/esm/core/binary-index-format.d.ts +78 -0
  37. package/dist/esm/core/binary-index-format.js +291 -0
  38. package/dist/esm/core/chunker.d.ts +119 -0
  39. package/dist/esm/core/chunker.js +73 -0
  40. package/dist/esm/core/cli-database-utils.d.ts +53 -0
  41. package/dist/esm/core/cli-database-utils.js +239 -0
  42. package/dist/esm/core/config.d.ts +102 -0
  43. package/dist/esm/core/config.js +247 -0
  44. package/dist/esm/core/content-errors.d.ts +111 -0
  45. package/dist/esm/core/content-errors.js +362 -0
  46. package/dist/esm/core/content-manager.d.ts +335 -0
  47. package/dist/esm/core/content-manager.js +1476 -0
  48. package/dist/esm/core/content-performance-optimizer.d.ts +150 -0
  49. package/dist/esm/core/content-performance-optimizer.js +516 -0
  50. package/dist/esm/core/content-resolver.d.ts +104 -0
  51. package/dist/esm/core/content-resolver.js +285 -0
  52. package/dist/esm/core/cross-modal-search.d.ts +164 -0
  53. package/dist/esm/core/cross-modal-search.js +342 -0
  54. package/dist/esm/core/database-connection-manager.d.ts +109 -0
  55. package/dist/esm/core/database-connection-manager.js +310 -0
  56. package/dist/esm/core/db.d.ts +213 -0
  57. package/dist/esm/core/db.js +895 -0
  58. package/dist/esm/core/embedder-factory.d.ts +154 -0
  59. package/dist/esm/core/embedder-factory.js +311 -0
  60. package/dist/esm/core/error-handler.d.ts +112 -0
  61. package/dist/esm/core/error-handler.js +239 -0
  62. package/dist/esm/core/index.d.ts +59 -0
  63. package/dist/esm/core/index.js +69 -0
  64. package/dist/esm/core/ingestion.d.ts +202 -0
  65. package/dist/esm/core/ingestion.js +901 -0
  66. package/dist/esm/core/interfaces.d.ts +408 -0
  67. package/dist/esm/core/interfaces.js +106 -0
  68. package/dist/esm/core/lazy-dependency-loader.d.ts +147 -0
  69. package/dist/esm/core/lazy-dependency-loader.js +435 -0
  70. package/dist/esm/core/mode-detection-service.d.ts +150 -0
  71. package/dist/esm/core/mode-detection-service.js +565 -0
  72. package/dist/esm/core/mode-model-validator.d.ts +92 -0
  73. package/dist/esm/core/mode-model-validator.js +203 -0
  74. package/dist/esm/core/model-registry.d.ts +116 -0
  75. package/dist/esm/core/model-registry.js +411 -0
  76. package/dist/esm/core/model-validator.d.ts +217 -0
  77. package/dist/esm/core/model-validator.js +782 -0
  78. package/dist/esm/core/path-manager.d.ts +47 -0
  79. package/dist/esm/core/path-manager.js +71 -0
  80. package/dist/esm/core/raglite-paths.d.ts +121 -0
  81. package/dist/esm/core/raglite-paths.js +145 -0
  82. package/dist/esm/core/reranking-config.d.ts +42 -0
  83. package/dist/esm/core/reranking-config.js +147 -0
  84. package/dist/esm/core/reranking-factory.d.ts +92 -0
  85. package/dist/esm/core/reranking-factory.js +410 -0
  86. package/dist/esm/core/reranking-strategies.d.ts +310 -0
  87. package/dist/esm/core/reranking-strategies.js +650 -0
  88. package/dist/esm/core/resource-cleanup.d.ts +163 -0
  89. package/dist/esm/core/resource-cleanup.js +371 -0
  90. package/dist/esm/core/resource-manager.d.ts +212 -0
  91. package/dist/esm/core/resource-manager.js +564 -0
  92. package/dist/esm/core/search-pipeline.d.ts +111 -0
  93. package/dist/esm/core/search-pipeline.js +287 -0
  94. package/dist/esm/core/search.d.ts +141 -0
  95. package/dist/esm/core/search.js +320 -0
  96. package/dist/esm/core/streaming-operations.d.ts +145 -0
  97. package/dist/esm/core/streaming-operations.js +409 -0
  98. package/dist/esm/core/types.d.ts +66 -0
  99. package/dist/esm/core/types.js +6 -0
  100. package/dist/esm/core/universal-embedder.d.ts +177 -0
  101. package/dist/esm/core/universal-embedder.js +139 -0
  102. package/dist/esm/core/validation-messages.d.ts +99 -0
  103. package/dist/esm/core/validation-messages.js +334 -0
  104. package/dist/esm/core/vector-index.d.ts +72 -0
  105. package/dist/esm/core/vector-index.js +333 -0
  106. package/dist/esm/dom-polyfills.d.ts +6 -0
  107. package/dist/esm/dom-polyfills.js +37 -0
  108. package/dist/esm/factories/index.d.ts +27 -0
  109. package/dist/esm/factories/index.js +29 -0
  110. package/dist/esm/factories/ingestion-factory.d.ts +200 -0
  111. package/dist/esm/factories/ingestion-factory.js +477 -0
  112. package/dist/esm/factories/search-factory.d.ts +154 -0
  113. package/dist/esm/factories/search-factory.js +344 -0
  114. package/dist/esm/file-processor.d.ts +147 -0
  115. package/dist/esm/file-processor.js +963 -0
  116. package/dist/esm/index-manager.d.ts +116 -0
  117. package/dist/esm/index-manager.js +598 -0
  118. package/dist/esm/index.d.ts +75 -0
  119. package/dist/esm/index.js +110 -0
  120. package/dist/esm/indexer.d.ts +7 -0
  121. package/dist/esm/indexer.js +54 -0
  122. package/dist/esm/ingestion.d.ts +63 -0
  123. package/dist/esm/ingestion.js +124 -0
  124. package/dist/esm/mcp-server.d.ts +46 -0
  125. package/dist/esm/mcp-server.js +1820 -0
  126. package/dist/esm/multimodal/clip-embedder.d.ts +327 -0
  127. package/dist/esm/multimodal/clip-embedder.js +996 -0
  128. package/dist/esm/multimodal/index.d.ts +6 -0
  129. package/dist/esm/multimodal/index.js +6 -0
  130. package/dist/esm/preprocess.d.ts +19 -0
  131. package/dist/esm/preprocess.js +203 -0
  132. package/dist/esm/preprocessors/index.d.ts +17 -0
  133. package/dist/esm/preprocessors/index.js +38 -0
  134. package/dist/esm/preprocessors/mdx.d.ts +25 -0
  135. package/dist/esm/preprocessors/mdx.js +101 -0
  136. package/dist/esm/preprocessors/mermaid.d.ts +68 -0
  137. package/dist/esm/preprocessors/mermaid.js +329 -0
  138. package/dist/esm/preprocessors/registry.d.ts +56 -0
  139. package/dist/esm/preprocessors/registry.js +179 -0
  140. package/dist/esm/run-error-recovery-tests.d.ts +7 -0
  141. package/dist/esm/run-error-recovery-tests.js +101 -0
  142. package/dist/esm/search-standalone.d.ts +7 -0
  143. package/dist/esm/search-standalone.js +117 -0
  144. package/dist/esm/search.d.ts +99 -0
  145. package/dist/esm/search.js +177 -0
  146. package/dist/esm/test-utils.d.ts +18 -0
  147. package/dist/esm/test-utils.js +27 -0
  148. package/dist/esm/text/chunker.d.ts +33 -0
  149. package/dist/esm/text/chunker.js +279 -0
  150. package/dist/esm/text/embedder.d.ts +111 -0
  151. package/dist/esm/text/embedder.js +386 -0
  152. package/dist/esm/text/index.d.ts +8 -0
  153. package/dist/esm/text/index.js +9 -0
  154. package/dist/esm/text/preprocessors/index.d.ts +17 -0
  155. package/dist/esm/text/preprocessors/index.js +38 -0
  156. package/dist/esm/text/preprocessors/mdx.d.ts +25 -0
  157. package/dist/esm/text/preprocessors/mdx.js +101 -0
  158. package/dist/esm/text/preprocessors/mermaid.d.ts +68 -0
  159. package/dist/esm/text/preprocessors/mermaid.js +330 -0
  160. package/dist/esm/text/preprocessors/registry.d.ts +56 -0
  161. package/dist/esm/text/preprocessors/registry.js +180 -0
  162. package/dist/esm/text/reranker.d.ts +49 -0
  163. package/dist/esm/text/reranker.js +274 -0
  164. package/dist/esm/text/sentence-transformer-embedder.d.ts +96 -0
  165. package/dist/esm/text/sentence-transformer-embedder.js +340 -0
  166. package/dist/esm/text/tokenizer.d.ts +22 -0
  167. package/dist/esm/text/tokenizer.js +64 -0
  168. package/dist/esm/types.d.ts +83 -0
  169. package/dist/esm/types.js +3 -0
  170. package/dist/esm/utils/vector-math.d.ts +31 -0
  171. package/dist/esm/utils/vector-math.js +70 -0
  172. package/package.json +30 -12
  173. package/dist/core/binary-index-format.js +0 -122
  174. /package/dist/{api-errors.d.ts → cjs/api-errors.d.ts} +0 -0
  175. /package/dist/{api-errors.js → cjs/api-errors.js} +0 -0
  176. /package/dist/{cli → cjs/cli}/indexer.d.ts +0 -0
  177. /package/dist/{cli → cjs/cli}/search.d.ts +0 -0
  178. /package/dist/{cli.d.ts → cjs/cli.d.ts} +0 -0
  179. /package/dist/{cli.js → cjs/cli.js} +0 -0
  180. /package/dist/{config.d.ts → cjs/config.d.ts} +0 -0
  181. /package/dist/{config.js → cjs/config.js} +0 -0
  182. /package/dist/{core → cjs/core}/abstract-embedder.d.ts +0 -0
  183. /package/dist/{core → cjs/core}/abstract-embedder.js +0 -0
  184. /package/dist/{core → cjs/core}/actionable-error-messages.d.ts +0 -0
  185. /package/dist/{core → cjs/core}/actionable-error-messages.js +0 -0
  186. /package/dist/{core → cjs/core}/adapters.d.ts +0 -0
  187. /package/dist/{core → cjs/core}/adapters.js +0 -0
  188. /package/dist/{core → cjs/core}/batch-processing-optimizer.d.ts +0 -0
  189. /package/dist/{core → cjs/core}/batch-processing-optimizer.js +0 -0
  190. /package/dist/{core → cjs/core}/chunker.d.ts +0 -0
  191. /package/dist/{core → cjs/core}/chunker.js +0 -0
  192. /package/dist/{core → cjs/core}/cli-database-utils.d.ts +0 -0
  193. /package/dist/{core → cjs/core}/cli-database-utils.js +0 -0
  194. /package/dist/{core → cjs/core}/config.d.ts +0 -0
  195. /package/dist/{core → cjs/core}/config.js +0 -0
  196. /package/dist/{core → cjs/core}/content-errors.d.ts +0 -0
  197. /package/dist/{core → cjs/core}/content-errors.js +0 -0
  198. /package/dist/{core → cjs/core}/content-manager.d.ts +0 -0
  199. /package/dist/{core → cjs/core}/content-manager.js +0 -0
  200. /package/dist/{core → cjs/core}/content-performance-optimizer.d.ts +0 -0
  201. /package/dist/{core → cjs/core}/content-performance-optimizer.js +0 -0
  202. /package/dist/{core → cjs/core}/content-resolver.d.ts +0 -0
  203. /package/dist/{core → cjs/core}/content-resolver.js +0 -0
  204. /package/dist/{core → cjs/core}/cross-modal-search.d.ts +0 -0
  205. /package/dist/{core → cjs/core}/cross-modal-search.js +0 -0
  206. /package/dist/{core → cjs/core}/database-connection-manager.d.ts +0 -0
  207. /package/dist/{core → cjs/core}/database-connection-manager.js +0 -0
  208. /package/dist/{core → cjs/core}/db.d.ts +0 -0
  209. /package/dist/{core → cjs/core}/db.js +0 -0
  210. /package/dist/{core → cjs/core}/embedder-factory.d.ts +0 -0
  211. /package/dist/{core → cjs/core}/embedder-factory.js +0 -0
  212. /package/dist/{core → cjs/core}/error-handler.d.ts +0 -0
  213. /package/dist/{core → cjs/core}/error-handler.js +0 -0
  214. /package/dist/{core → cjs/core}/index.d.ts +0 -0
  215. /package/dist/{core → cjs/core}/index.js +0 -0
  216. /package/dist/{core → cjs/core}/interfaces.d.ts +0 -0
  217. /package/dist/{core → cjs/core}/interfaces.js +0 -0
  218. /package/dist/{core → cjs/core}/lazy-dependency-loader.d.ts +0 -0
  219. /package/dist/{core → cjs/core}/lazy-dependency-loader.js +0 -0
  220. /package/dist/{core → cjs/core}/mode-detection-service.d.ts +0 -0
  221. /package/dist/{core → cjs/core}/mode-detection-service.js +0 -0
  222. /package/dist/{core → cjs/core}/mode-model-validator.d.ts +0 -0
  223. /package/dist/{core → cjs/core}/mode-model-validator.js +0 -0
  224. /package/dist/{core → cjs/core}/model-registry.d.ts +0 -0
  225. /package/dist/{core → cjs/core}/model-registry.js +0 -0
  226. /package/dist/{core → cjs/core}/model-validator.d.ts +0 -0
  227. /package/dist/{core → cjs/core}/path-manager.d.ts +0 -0
  228. /package/dist/{core → cjs/core}/path-manager.js +0 -0
  229. /package/dist/{core → cjs/core}/raglite-paths.d.ts +0 -0
  230. /package/dist/{core → cjs/core}/raglite-paths.js +0 -0
  231. /package/dist/{core → cjs/core}/reranking-config.d.ts +0 -0
  232. /package/dist/{core → cjs/core}/reranking-config.js +0 -0
  233. /package/dist/{core → cjs/core}/reranking-factory.d.ts +0 -0
  234. /package/dist/{core → cjs/core}/reranking-factory.js +0 -0
  235. /package/dist/{core → cjs/core}/reranking-strategies.d.ts +0 -0
  236. /package/dist/{core → cjs/core}/resource-cleanup.d.ts +0 -0
  237. /package/dist/{core → cjs/core}/resource-cleanup.js +0 -0
  238. /package/dist/{core → cjs/core}/resource-manager.d.ts +0 -0
  239. /package/dist/{core → cjs/core}/resource-manager.js +0 -0
  240. /package/dist/{core → cjs/core}/search-pipeline.d.ts +0 -0
  241. /package/dist/{core → cjs/core}/search-pipeline.js +0 -0
  242. /package/dist/{core → cjs/core}/search.d.ts +0 -0
  243. /package/dist/{core → cjs/core}/streaming-operations.d.ts +0 -0
  244. /package/dist/{core → cjs/core}/streaming-operations.js +0 -0
  245. /package/dist/{core → cjs/core}/types.js +0 -0
  246. /package/dist/{core → cjs/core}/universal-embedder.d.ts +0 -0
  247. /package/dist/{core → cjs/core}/universal-embedder.js +0 -0
  248. /package/dist/{core → cjs/core}/validation-messages.d.ts +0 -0
  249. /package/dist/{core → cjs/core}/validation-messages.js +0 -0
  250. /package/dist/{dom-polyfills.d.ts → cjs/dom-polyfills.d.ts} +0 -0
  251. /package/dist/{dom-polyfills.js → cjs/dom-polyfills.js} +0 -0
  252. /package/dist/{factories → cjs/factories}/index.d.ts +0 -0
  253. /package/dist/{factories → cjs/factories}/index.js +0 -0
  254. /package/dist/{factories → cjs/factories}/ingestion-factory.d.ts +0 -0
  255. /package/dist/{factories → cjs/factories}/ingestion-factory.js +0 -0
  256. /package/dist/{factories → cjs/factories}/search-factory.d.ts +0 -0
  257. /package/dist/{factories → cjs/factories}/search-factory.js +0 -0
  258. /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
  259. /package/dist/{index.js → cjs/index.js} +0 -0
  260. /package/dist/{indexer.d.ts → cjs/indexer.d.ts} +0 -0
  261. /package/dist/{indexer.js → cjs/indexer.js} +0 -0
  262. /package/dist/{ingestion.d.ts → cjs/ingestion.d.ts} +0 -0
  263. /package/dist/{ingestion.js → cjs/ingestion.js} +0 -0
  264. /package/dist/{mcp-server.d.ts → cjs/mcp-server.d.ts} +0 -0
  265. /package/dist/{mcp-server.js → cjs/mcp-server.js} +0 -0
  266. /package/dist/{multimodal → cjs/multimodal}/clip-embedder.d.ts +0 -0
  267. /package/dist/{multimodal → cjs/multimodal}/index.d.ts +0 -0
  268. /package/dist/{multimodal → cjs/multimodal}/index.js +0 -0
  269. /package/dist/{preprocess.d.ts → cjs/preprocess.d.ts} +0 -0
  270. /package/dist/{preprocess.js → cjs/preprocess.js} +0 -0
  271. /package/dist/{preprocessors → cjs/preprocessors}/index.d.ts +0 -0
  272. /package/dist/{preprocessors → cjs/preprocessors}/index.js +0 -0
  273. /package/dist/{preprocessors → cjs/preprocessors}/mdx.d.ts +0 -0
  274. /package/dist/{preprocessors → cjs/preprocessors}/mdx.js +0 -0
  275. /package/dist/{preprocessors → cjs/preprocessors}/mermaid.d.ts +0 -0
  276. /package/dist/{preprocessors → cjs/preprocessors}/mermaid.js +0 -0
  277. /package/dist/{preprocessors → cjs/preprocessors}/registry.d.ts +0 -0
  278. /package/dist/{preprocessors → cjs/preprocessors}/registry.js +0 -0
  279. /package/dist/{run-error-recovery-tests.d.ts → cjs/run-error-recovery-tests.d.ts} +0 -0
  280. /package/dist/{run-error-recovery-tests.js → cjs/run-error-recovery-tests.js} +0 -0
  281. /package/dist/{search-standalone.d.ts → cjs/search-standalone.d.ts} +0 -0
  282. /package/dist/{search-standalone.js → cjs/search-standalone.js} +0 -0
  283. /package/dist/{search.d.ts → cjs/search.d.ts} +0 -0
  284. /package/dist/{search.js → cjs/search.js} +0 -0
  285. /package/dist/{test-utils.d.ts → cjs/test-utils.d.ts} +0 -0
  286. /package/dist/{test-utils.js → cjs/test-utils.js} +0 -0
  287. /package/dist/{text → cjs/text}/chunker.d.ts +0 -0
  288. /package/dist/{text → cjs/text}/chunker.js +0 -0
  289. /package/dist/{text → cjs/text}/embedder.d.ts +0 -0
  290. /package/dist/{text → cjs/text}/embedder.js +0 -0
  291. /package/dist/{text → cjs/text}/index.d.ts +0 -0
  292. /package/dist/{text → cjs/text}/index.js +0 -0
  293. /package/dist/{text → cjs/text}/preprocessors/index.d.ts +0 -0
  294. /package/dist/{text → cjs/text}/preprocessors/index.js +0 -0
  295. /package/dist/{text → cjs/text}/preprocessors/mdx.d.ts +0 -0
  296. /package/dist/{text → cjs/text}/preprocessors/mdx.js +0 -0
  297. /package/dist/{text → cjs/text}/preprocessors/mermaid.d.ts +0 -0
  298. /package/dist/{text → cjs/text}/preprocessors/mermaid.js +0 -0
  299. /package/dist/{text → cjs/text}/preprocessors/registry.d.ts +0 -0
  300. /package/dist/{text → cjs/text}/preprocessors/registry.js +0 -0
  301. /package/dist/{text → cjs/text}/reranker.d.ts +0 -0
  302. /package/dist/{text → cjs/text}/reranker.js +0 -0
  303. /package/dist/{text → cjs/text}/sentence-transformer-embedder.d.ts +0 -0
  304. /package/dist/{text → cjs/text}/sentence-transformer-embedder.js +0 -0
  305. /package/dist/{text → cjs/text}/tokenizer.d.ts +0 -0
  306. /package/dist/{text → cjs/text}/tokenizer.js +0 -0
  307. /package/dist/{types.d.ts → cjs/types.d.ts} +0 -0
  308. /package/dist/{types.js → cjs/types.js} +0 -0
  309. /package/dist/{utils → cjs/utils}/vector-math.d.ts +0 -0
  310. /package/dist/{utils → cjs/utils}/vector-math.js +0 -0
@@ -0,0 +1,529 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from 'fs';
3
+ import { fileURLToPath } from 'url';
4
+ import { dirname, join } from 'path';
5
+ import { EXIT_CODES, ConfigurationError } from './core/config.js';
6
+ // Get package.json for version info
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = dirname(__filename);
9
+ const packageJsonPath = join(__dirname, '..', 'package.json');
10
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
11
+ /**
12
+ * Display version information
13
+ */
14
+ function showVersion() {
15
+ console.log(`RAG-lite TS v${packageJson.version}`);
16
+ }
17
+ /**
18
+ * Display help information
19
+ */
20
+ function showHelp() {
21
+ console.log(`
22
+ RAG-lite TS v${packageJson.version}
23
+ Local-first TypeScript retrieval engine for semantic search
24
+
25
+ Usage:
26
+ raglite <command> [options]
27
+
28
+ Commands:
29
+ ingest <path> Ingest documents from file or directory
30
+ search <query> Search indexed documents (text or image)
31
+ rebuild Rebuild the vector index
32
+ version Show version information
33
+ help Show this help message
34
+
35
+ Examples:
36
+ raglite ingest ./docs/ # Ingest all .md/.txt/.docx/.pdf files in docs/
37
+ raglite ingest ./readme.md # Ingest single file
38
+ raglite ingest ./docs/ --model Xenova/all-mpnet-base-v2 # Use higher quality model
39
+ raglite ingest ./docs/ --mode multimodal # Enable multimodal processing
40
+ raglite ingest ./docs/ --path-strategy relative --path-base /project # Use relative paths
41
+ raglite search "machine learning" # Search for documents about machine learning
42
+ raglite search "API documentation" --top-k 10 # Get top 10 results
43
+ raglite search "red car" --content-type image # Search only image results
44
+ raglite search ./photo.jpg # Search with image (multimodal mode only)
45
+ raglite search ./image.png --top-k 5 # Find similar images
46
+
47
+ raglite rebuild # Rebuild the entire index
48
+
49
+ Options for search:
50
+ --top-k <number> Number of results to return (default: 10)
51
+ --rerank Enable reranking for better results
52
+ --no-rerank Disable reranking
53
+ --content-type <type> Filter results by content type: 'text', 'image', or 'all' (default: all)
54
+
55
+ Options for ingest:
56
+ --model <name> Use specific embedding model
57
+ --mode <mode> Processing mode: 'text' (default) or 'multimodal'
58
+ --rebuild-if-needed Automatically rebuild if model mismatch detected (WARNING: rebuilds entire index)
59
+ --path-strategy <strategy> Path storage strategy: 'relative' (default) or 'absolute'
60
+ --path-base <path> Base directory for relative paths (defaults to current directory)
61
+
62
+ Available models:
63
+ Text mode:
64
+ sentence-transformers/all-MiniLM-L6-v2 (384 dim, fast, default)
65
+ Xenova/all-mpnet-base-v2 (768 dim, higher quality)
66
+ Multimodal mode:
67
+ Xenova/clip-vit-base-patch32 (512 dim, faster, default)
68
+ Xenova/clip-vit-base-patch16 (512 dim, more accurate, slower)
69
+
70
+ Available reranking strategies (multimodal mode):
71
+ text-derived Use image-to-text conversion + cross-encoder (default)
72
+ disabled No reranking, use vector similarity only
73
+
74
+ For more information, visit: https://github.com/your-repo/rag-lite-ts
75
+ `);
76
+ }
77
+ /**
78
+ * Parse command line arguments
79
+ */
80
+ function parseArgs() {
81
+ const args = process.argv.slice(2);
82
+ if (args.length === 0) {
83
+ return { command: 'help', args: [], options: {} };
84
+ }
85
+ // Handle --version and --help flags at the top level
86
+ if (args[0] === '--version' || args[0] === '-v') {
87
+ return { command: 'version', args: [], options: {} };
88
+ }
89
+ if (args[0] === '--help' || args[0] === '-h') {
90
+ return { command: 'help', args: [], options: {} };
91
+ }
92
+ const command = args[0];
93
+ const remainingArgs = [];
94
+ const options = {};
95
+ // Parse arguments and options
96
+ for (let i = 1; i < args.length; i++) {
97
+ const arg = args[i];
98
+ if (arg.startsWith('--')) {
99
+ const optionName = arg.slice(2);
100
+ // Handle boolean flags with optional values
101
+ if (optionName === 'rerank') {
102
+ const nextArg = args[i + 1];
103
+ if (nextArg && (nextArg === 'true' || nextArg === 'false')) {
104
+ options.rerank = nextArg === 'true';
105
+ i++; // Skip the next argument as it's the value
106
+ }
107
+ else {
108
+ options.rerank = true;
109
+ }
110
+ }
111
+ else if (optionName === 'no-rerank') {
112
+ options.rerank = false;
113
+ }
114
+ else if (optionName === 'rebuild-if-needed') {
115
+ options.rebuildIfNeeded = true;
116
+ }
117
+ else if (optionName === 'help') {
118
+ return { command: 'help', args: [], options: {} };
119
+ }
120
+ else if (optionName === 'version') {
121
+ return { command: 'version', args: [], options: {} };
122
+ }
123
+ else {
124
+ // Handle options with values
125
+ const nextArg = args[i + 1];
126
+ if (nextArg && !nextArg.startsWith('--')) {
127
+ options[optionName] = nextArg;
128
+ i++; // Skip the next argument as it's the value
129
+ }
130
+ else {
131
+ options[optionName] = true;
132
+ }
133
+ }
134
+ }
135
+ else {
136
+ remainingArgs.push(arg);
137
+ }
138
+ }
139
+ return { command, args: remainingArgs, options };
140
+ }
141
+ /**
142
+ * Validate command line arguments
143
+ */
144
+ function validateArgs(command, args, options) {
145
+ // Phase 3: Reject the removed --rerank-strategy option
146
+ if (options['rerank-strategy'] !== undefined) {
147
+ console.error('Error: --rerank-strategy option has been removed in this version');
148
+ console.error('');
149
+ console.error('Reranking strategy is now automatically selected based on mode:');
150
+ console.error(' Text mode: cross-encoder (or disabled)');
151
+ console.error(' Multimodal mode: text-derived (or disabled)');
152
+ console.error('');
153
+ console.error('Use --rerank or --no-rerank to control reranking instead.');
154
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
155
+ }
156
+ switch (command) {
157
+ case 'ingest':
158
+ if (args.length === 0) {
159
+ console.error('Error: ingest command requires a path argument');
160
+ console.error('');
161
+ console.error('Usage: raglite ingest <path>');
162
+ console.error('');
163
+ console.error('Examples:');
164
+ console.error(' raglite ingest ./docs/ # Ingest all .md/.txt/.docx/.pdf files in docs/');
165
+ console.error(' raglite ingest ./readme.md # Ingest single file');
166
+ console.error(' raglite ingest ./docs/ --model Xenova/all-mpnet-base-v2 # Use higher quality model');
167
+ console.error(' raglite ingest ./docs/ --mode multimodal # Enable multimodal processing');
168
+ console.error('');
169
+ console.error('Options:');
170
+ console.error(' --model <name> Use specific embedding model');
171
+ console.error(' --mode <mode> Processing mode: text (default) or multimodal');
172
+ console.error(' --rebuild-if-needed Automatically rebuild if model mismatch detected');
173
+ console.error('');
174
+ console.error('The path can be either a file (.md or .txt) or a directory.');
175
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
176
+ }
177
+ break;
178
+ case 'search':
179
+ if (args.length === 0) {
180
+ console.error('Error: search command requires a query argument');
181
+ console.error('');
182
+ console.error('Usage: raglite search <query> [options]');
183
+ console.error(' raglite search <image-path> [options]');
184
+ console.error('');
185
+ console.error('Examples:');
186
+ console.error(' raglite search "machine learning"');
187
+ console.error(' raglite search "API documentation" --top-k 10');
188
+ console.error(' raglite search "tutorial" --rerank');
189
+ console.error(' raglite search "red car" --content-type image');
190
+ console.error(' raglite search ./photo.jpg # Image search (multimodal mode)');
191
+ console.error(' raglite search ./image.png --top-k 5 # Find similar images');
192
+ console.error('');
193
+ console.error('Options:');
194
+ console.error(' --top-k <number> Number of results to return (default: 10)');
195
+ console.error(' --rerank Enable reranking for better results');
196
+ console.error(' --no-rerank Disable reranking');
197
+ console.error(' --content-type <type> Filter by content type: text, image, or all (default: all)');
198
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
199
+ }
200
+ break;
201
+ case 'rebuild':
202
+ // No arguments required
203
+ break;
204
+ case 'version':
205
+ // No validation needed
206
+ break;
207
+ case 'help':
208
+ // No validation needed
209
+ break;
210
+ default:
211
+ console.error(`Error: Unknown command '${command}'`);
212
+ console.error('');
213
+ console.error('Available commands: ingest, search, rebuild, version, help');
214
+ console.error('Run "raglite help" for detailed usage information');
215
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
216
+ }
217
+ // Validate numeric options
218
+ if (options['top-k'] !== undefined) {
219
+ const topK = parseInt(options['top-k'], 10);
220
+ if (isNaN(topK) || topK <= 0) {
221
+ console.error('Error: --top-k must be a positive number');
222
+ console.error('');
223
+ console.error('Examples:');
224
+ console.error(' --top-k 5 # Return 5 results');
225
+ console.error(' --top-k 20 # Return 20 results');
226
+ console.error('');
227
+ console.error('Valid range: 1-100 results');
228
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
229
+ }
230
+ if (topK > 100) {
231
+ console.warn(`Warning: Large --top-k value (${topK}) may impact performance. Consider using a smaller value.`);
232
+ }
233
+ options['top-k'] = topK;
234
+ }
235
+ // Validate content-type option (only for search command)
236
+ if (options['content-type'] !== undefined) {
237
+ if (command !== 'search') {
238
+ console.error(`Error: --content-type option is only available for the 'search' command`);
239
+ console.error('');
240
+ console.error('Use this option to filter search results by content type.');
241
+ console.error('');
242
+ console.error('Examples:');
243
+ console.error(' raglite search "query" --content-type text # Only text results');
244
+ console.error(' raglite search "query" --content-type image # Only image results');
245
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
246
+ }
247
+ const supportedTypes = ['text', 'image', 'all'];
248
+ if (!supportedTypes.includes(options['content-type'])) {
249
+ console.error(`Error: Unsupported content type '${options['content-type']}'`);
250
+ console.error('');
251
+ console.error('Supported content types:');
252
+ console.error(' text Filter to show only text results');
253
+ console.error(' image Filter to show only image results');
254
+ console.error(' all Show all results (default)');
255
+ console.error('');
256
+ console.error('Examples:');
257
+ console.error(' --content-type text');
258
+ console.error(' --content-type image');
259
+ console.error(' --content-type all');
260
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
261
+ }
262
+ }
263
+ // Validate mode option (only for ingest command)
264
+ if (options.mode !== undefined) {
265
+ if (command !== 'ingest') {
266
+ console.error(`Error: --mode option is only available for the 'ingest' command`);
267
+ console.error('');
268
+ console.error('The search command automatically detects the mode from the database.');
269
+ console.error('Mode is set once during ingestion and persists for all searches.');
270
+ console.error('');
271
+ console.error('Examples:');
272
+ console.error(' raglite ingest ./docs/ --mode multimodal');
273
+ console.error(' raglite search "your query" # Uses mode from ingestion');
274
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
275
+ }
276
+ const supportedModes = ['text', 'multimodal'];
277
+ if (!supportedModes.includes(options.mode)) {
278
+ console.error(`Error: Unsupported mode '${options.mode}'`);
279
+ console.error('');
280
+ console.error('Supported modes:');
281
+ console.error(' text Process text documents only (default)');
282
+ console.error(' multimodal Process text and image documents');
283
+ console.error('');
284
+ console.error('Examples:');
285
+ console.error(' --mode text');
286
+ console.error(' --mode multimodal');
287
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
288
+ }
289
+ }
290
+ // Validate model option (only for ingest command)
291
+ if (options.model !== undefined) {
292
+ if (command !== 'ingest') {
293
+ console.error(`Error: --model option is only available for the 'ingest' command`);
294
+ console.error('');
295
+ console.error('The search command automatically uses the model that was used during ingestion.');
296
+ console.error('To search with a different model, you need to re-ingest with that model first.');
297
+ console.error('');
298
+ console.error('Examples:');
299
+ console.error(' raglite ingest ./docs/ --model Xenova/all-mpnet-base-v2');
300
+ console.error(' raglite search "your query" # Uses the model from ingestion');
301
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
302
+ }
303
+ const mode = options.mode || 'text';
304
+ const textModels = [
305
+ 'sentence-transformers/all-MiniLM-L6-v2',
306
+ 'Xenova/all-mpnet-base-v2'
307
+ ];
308
+ const multimodalModels = [
309
+ 'Xenova/clip-vit-base-patch32',
310
+ 'Xenova/clip-vit-base-patch16'
311
+ ];
312
+ let supportedModels;
313
+ let modelTypeDescription;
314
+ if (mode === 'multimodal') {
315
+ supportedModels = multimodalModels;
316
+ modelTypeDescription = 'multimodal models';
317
+ }
318
+ else {
319
+ supportedModels = textModels;
320
+ modelTypeDescription = 'text models';
321
+ }
322
+ if (!supportedModels.includes(options.model)) {
323
+ console.error(`Error: Model '${options.model}' is not supported for ${mode} mode`);
324
+ console.error('');
325
+ if (mode === 'text') {
326
+ console.error('Supported models for text mode:');
327
+ console.error(' sentence-transformers/all-MiniLM-L6-v2 (384 dim, fast, default)');
328
+ console.error(' Xenova/all-mpnet-base-v2 (768 dim, higher quality)');
329
+ }
330
+ else {
331
+ console.error('Supported models for multimodal mode:');
332
+ console.error(' Xenova/clip-vit-base-patch32 (512 dim, faster, default)');
333
+ console.error(' Xenova/clip-vit-base-patch16 (512 dim, more accurate, slower)');
334
+ }
335
+ console.error('');
336
+ console.error('Examples:');
337
+ if (mode === 'text') {
338
+ console.error(' --model sentence-transformers/all-MiniLM-L6-v2');
339
+ console.error(' --model Xenova/all-mpnet-base-v2');
340
+ }
341
+ else {
342
+ console.error(' --model Xenova/clip-vit-base-patch32 --mode multimodal');
343
+ console.error(' --model Xenova/clip-vit-base-patch16 --mode multimodal');
344
+ }
345
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
346
+ }
347
+ }
348
+ // Validate path-strategy option (only for ingest command)
349
+ if (options['path-strategy'] !== undefined) {
350
+ if (command !== 'ingest') {
351
+ console.error(`Error: --path-strategy option is only available for the 'ingest' command`);
352
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
353
+ }
354
+ const supportedStrategies = ['absolute', 'relative'];
355
+ if (!supportedStrategies.includes(options['path-strategy'])) {
356
+ console.error(`Error: Unsupported path strategy '${options['path-strategy']}'`);
357
+ console.error('');
358
+ console.error('Supported strategies:');
359
+ console.error(' relative Store paths relative to base directory (default, portable)');
360
+ console.error(' absolute Store absolute paths');
361
+ console.error('');
362
+ console.error('Examples:');
363
+ console.error(' --path-strategy relative');
364
+ console.error(' --path-strategy absolute');
365
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
366
+ }
367
+ }
368
+ // Validate path-base option (only for ingest command)
369
+ if (options['path-base'] !== undefined) {
370
+ if (command !== 'ingest') {
371
+ console.error(`Error: --path-base option is only available for the 'ingest' command`);
372
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
373
+ }
374
+ if (typeof options['path-base'] !== 'string' || options['path-base'].trim() === '') {
375
+ console.error('Error: --path-base must be a non-empty directory path');
376
+ console.error('');
377
+ console.error('Examples:');
378
+ console.error(' --path-base /project/docs');
379
+ console.error(' --path-base ./my-docs');
380
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
381
+ }
382
+ }
383
+ }
384
+ /**
385
+ * Main CLI entry point
386
+ */
387
+ async function main() {
388
+ // Set CLI mode to prevent database connection manager from starting timers
389
+ process.env.RAG_CLI_MODE = 'true';
390
+ try {
391
+ const { command, args, options } = parseArgs();
392
+ // Validate arguments
393
+ validateArgs(command, args, options);
394
+ // Handle commands
395
+ switch (command) {
396
+ case 'version':
397
+ showVersion();
398
+ break;
399
+ case 'help':
400
+ showHelp();
401
+ break;
402
+ case 'ingest':
403
+ const { runIngest } = await import('./cli/indexer.js');
404
+ await runIngest(args[0], options);
405
+ break;
406
+ case 'search':
407
+ const { runSearch } = await import('./cli/search.js');
408
+ const query = args.join(' '); // Join all args as query
409
+ await runSearch(query, options);
410
+ break;
411
+ case 'rebuild':
412
+ const { runRebuild } = await import('./cli/indexer.js');
413
+ await runRebuild();
414
+ break;
415
+ default:
416
+ console.error(`Error: Unknown command '${command}'`);
417
+ process.exit(1);
418
+ }
419
+ }
420
+ catch (error) {
421
+ // Handle different error types with appropriate exit codes
422
+ if (error instanceof ConfigurationError) {
423
+ console.error('Configuration Error:');
424
+ console.error(error.message);
425
+ process.exit(error.exitCode);
426
+ }
427
+ else if (error instanceof Error) {
428
+ console.error('Error:', error.message);
429
+ // Provide context-specific help for common errors
430
+ if (error.message.includes('ENOENT')) {
431
+ console.error('');
432
+ console.error('This usually means a file or directory was not found.');
433
+ console.error('Please check that the path exists and you have read permissions.');
434
+ process.exit(EXIT_CODES.FILE_NOT_FOUND);
435
+ }
436
+ else if (error.message.includes('EACCES') || error.message.includes('permission')) {
437
+ console.error('');
438
+ console.error('Permission denied. Please check file/directory permissions.');
439
+ process.exit(EXIT_CODES.PERMISSION_ERROR);
440
+ }
441
+ else if (error.message.includes('SQLITE') || error.message.includes('database')) {
442
+ console.error('');
443
+ console.error('Database error. Try running "raglite rebuild" to fix index issues.');
444
+ process.exit(EXIT_CODES.DATABASE_ERROR);
445
+ }
446
+ else if (error.message.includes('model') || error.message.includes('ONNX')) {
447
+ console.error('');
448
+ console.error('Model loading error. The embedding model will be downloaded automatically on first run.');
449
+ process.exit(EXIT_CODES.MODEL_ERROR);
450
+ }
451
+ else {
452
+ process.exit(EXIT_CODES.GENERAL_ERROR);
453
+ }
454
+ }
455
+ else {
456
+ console.error('Unknown error:', String(error));
457
+ process.exit(EXIT_CODES.GENERAL_ERROR);
458
+ }
459
+ }
460
+ }
461
+ // Handle unhandled promise rejections
462
+ process.on('unhandledRejection', (reason, promise) => {
463
+ console.error('🚨 Unhandled Promise Rejection:');
464
+ console.error('Reason:', reason);
465
+ console.error('Promise:', promise);
466
+ console.error('');
467
+ console.error('This is usually caused by an async operation that failed without proper error handling.');
468
+ console.error('The system will exit to prevent undefined behavior.');
469
+ console.error('');
470
+ console.error('If this error persists, please report it with the above details.');
471
+ process.exit(EXIT_CODES.GENERAL_ERROR);
472
+ });
473
+ // Handle uncaught exceptions
474
+ process.on('uncaughtException', (error) => {
475
+ console.error('🚨 Uncaught Exception:');
476
+ console.error('Error:', error.message);
477
+ console.error('');
478
+ if (error.stack) {
479
+ console.error('Stack trace:');
480
+ console.error(error.stack);
481
+ console.error('');
482
+ }
483
+ console.error('This indicates a serious error in the application.');
484
+ console.error('The system will exit immediately to prevent data corruption.');
485
+ console.error('');
486
+ console.error('Please report this issue with the above details.');
487
+ process.exit(EXIT_CODES.GENERAL_ERROR);
488
+ });
489
+ // Handle process termination signals gracefully
490
+ process.on('SIGINT', async () => {
491
+ console.log('\n\nReceived SIGINT (Ctrl+C). Shutting down gracefully...');
492
+ console.log('If you need to force quit, press Ctrl+C again.');
493
+ // Clean up database connections before exit
494
+ try {
495
+ const { DatabaseConnectionManager } = await import('./core/database-connection-manager.js');
496
+ await DatabaseConnectionManager.closeAllConnections();
497
+ }
498
+ catch (error) {
499
+ // Ignore cleanup errors during shutdown
500
+ }
501
+ process.exit(EXIT_CODES.SUCCESS);
502
+ });
503
+ process.on('SIGTERM', async () => {
504
+ console.log('\n\nReceived SIGTERM. Shutting down gracefully...');
505
+ // Clean up database connections before exit
506
+ try {
507
+ const { DatabaseConnectionManager } = await import('./core/database-connection-manager.js');
508
+ await DatabaseConnectionManager.closeAllConnections();
509
+ }
510
+ catch (error) {
511
+ // Ignore cleanup errors during shutdown
512
+ }
513
+ process.exit(EXIT_CODES.SUCCESS);
514
+ });
515
+ // Run the CLI only if this file is executed directly
516
+ // In ES modules, we need to check import.meta.url instead of require.main
517
+ // Check if this file is being run directly
518
+ if (process.argv[1] === __filename || process.argv[1].endsWith('cli.js')) {
519
+ main().catch((error) => {
520
+ console.error('Fatal error:', error instanceof Error ? error.message : String(error));
521
+ if (error instanceof ConfigurationError) {
522
+ process.exit(error.exitCode);
523
+ }
524
+ else {
525
+ process.exit(EXIT_CODES.GENERAL_ERROR);
526
+ }
527
+ });
528
+ }
529
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Main configuration file with text-specific settings
3
+ * Extends core configuration with implementation-specific properties
4
+ */
5
+ import { CoreConfig } from './core/config.js';
6
+ /**
7
+ * Text-specific configuration properties
8
+ */
9
+ export interface TextConfig {
10
+ embedding_model: string;
11
+ rerank_enabled: boolean;
12
+ rerank_model: string;
13
+ preprocessing: {
14
+ enabled: boolean;
15
+ mdx: boolean;
16
+ mermaid: boolean;
17
+ code_blocks: boolean;
18
+ };
19
+ }
20
+ /**
21
+ * Complete configuration interface combining core and text-specific settings
22
+ */
23
+ export interface Config extends CoreConfig {
24
+ embedding_model: string;
25
+ rerank_enabled: boolean;
26
+ rerank_model: string;
27
+ preprocessing: {
28
+ enabled: boolean;
29
+ mdx: boolean;
30
+ mermaid: boolean;
31
+ code_blocks: boolean;
32
+ };
33
+ }
34
+ /**
35
+ * Default configuration object with both core and text-specific settings
36
+ */
37
+ export declare const config: Config;
38
+ export * from './core/config.js';
39
+ /**
40
+ * Validate complete configuration including text-specific settings
41
+ */
42
+ export declare function validateConfig(config: any): asserts config is Config;
43
+ /**
44
+ * Validate preprocessing configuration
45
+ */
46
+ export declare function validatePreprocessingConfig(config: any): boolean;
47
+ /**
48
+ * Merge preprocessing configurations
49
+ */
50
+ export declare function mergePreprocessingConfig(base: any, override: any): any;
51
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Main configuration file with text-specific settings
3
+ * Extends core configuration with implementation-specific properties
4
+ */
5
+ import { getDefaultModelCachePath } from './core/config.js';
6
+ import { createRequire } from 'module';
7
+ // Create require for CommonJS modules in ES module context
8
+ const require = createRequire(import.meta.url);
9
+ /**
10
+ * Default configuration object with both core and text-specific settings
11
+ */
12
+ export const config = {
13
+ // Core settings
14
+ chunk_size: parseInt(process.env.RAG_CHUNK_SIZE || '250', 10),
15
+ chunk_overlap: parseInt(process.env.RAG_CHUNK_OVERLAP || '50', 10),
16
+ batch_size: parseInt(process.env.RAG_BATCH_SIZE || '16', 10),
17
+ top_k: parseInt(process.env.RAG_TOP_K || '10', 10),
18
+ db_file: process.env.RAG_DB_FILE || 'db.sqlite',
19
+ index_file: process.env.RAG_INDEX_FILE || 'vector-index.bin',
20
+ model_cache_path: process.env.RAG_MODEL_CACHE_PATH || getDefaultModelCachePath(),
21
+ path_storage_strategy: process.env.RAG_PATH_STORAGE_STRATEGY || 'relative',
22
+ // Text-specific settings
23
+ embedding_model: process.env.RAG_EMBEDDING_MODEL || 'sentence-transformers/all-MiniLM-L6-v2',
24
+ rerank_enabled: process.env.RAG_RERANK_ENABLED !== 'false', // Default to true unless explicitly disabled
25
+ rerank_model: process.env.RAG_RERANK_MODEL || 'cross-encoder/ms-marco-MiniLM-L-6-v2',
26
+ // Preprocessing settings
27
+ preprocessing: {
28
+ enabled: process.env.RAG_PREPROCESSING_ENABLED !== 'false',
29
+ mdx: process.env.RAG_PREPROCESSING_MDX !== 'false',
30
+ mermaid: process.env.RAG_PREPROCESSING_MERMAID !== 'false',
31
+ code_blocks: process.env.RAG_PREPROCESSING_CODE_BLOCKS !== 'false'
32
+ }
33
+ };
34
+ // Re-export everything from core config
35
+ export * from './core/config.js';
36
+ /**
37
+ * Validate complete configuration including text-specific settings
38
+ */
39
+ export function validateConfig(config) {
40
+ // First validate core config
41
+ const { validateCoreConfig } = require('./core/config.js');
42
+ validateCoreConfig(config);
43
+ // Validate text-specific settings
44
+ if (!config.embedding_model || typeof config.embedding_model !== 'string') {
45
+ throw new Error('embedding_model must be a non-empty string');
46
+ }
47
+ if (typeof config.rerank_enabled !== 'boolean') {
48
+ throw new Error('rerank_enabled must be a boolean');
49
+ }
50
+ if (!config.rerank_model || typeof config.rerank_model !== 'string') {
51
+ throw new Error('rerank_model must be a non-empty string');
52
+ }
53
+ if (!config.preprocessing || typeof config.preprocessing !== 'object') {
54
+ throw new Error('preprocessing must be an object');
55
+ }
56
+ }
57
+ /**
58
+ * Validate preprocessing configuration
59
+ */
60
+ export function validatePreprocessingConfig(config) {
61
+ return config &&
62
+ typeof config === 'object' &&
63
+ typeof config.enabled === 'boolean' &&
64
+ typeof config.mdx === 'boolean' &&
65
+ typeof config.mermaid === 'boolean' &&
66
+ typeof config.code_blocks === 'boolean';
67
+ }
68
+ /**
69
+ * Merge preprocessing configurations
70
+ */
71
+ export function mergePreprocessingConfig(base, override) {
72
+ return {
73
+ enabled: override.enabled !== undefined ? override.enabled : base.enabled,
74
+ mdx: override.mdx !== undefined ? override.mdx : base.mdx,
75
+ mermaid: override.mermaid !== undefined ? override.mermaid : base.mermaid,
76
+ code_blocks: override.code_blocks !== undefined ? override.code_blocks : base.code_blocks
77
+ };
78
+ }
79
+ //# sourceMappingURL=config.js.map