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,397 @@
1
+ /**
2
+ * CORE MODULE — Actionable Error Messages
3
+ * Provides user-friendly, actionable error messages with specific guidance
4
+ * Replaces technical error messages with helpful troubleshooting steps
5
+ */
6
+ import { dirname, basename } from 'path';
7
+ /**
8
+ * Default configuration for error messages
9
+ */
10
+ const DEFAULT_CONFIG = {
11
+ includeExamples: true,
12
+ includeTroubleshooting: true,
13
+ operationContext: 'operation'
14
+ };
15
+ // =============================================================================
16
+ // FILE AND PATH ERROR MESSAGES
17
+ // =============================================================================
18
+ /**
19
+ * Create actionable error message for missing files
20
+ */
21
+ export function createMissingFileError(filePath, fileType, config = {}) {
22
+ const cfg = { ...DEFAULT_CONFIG, ...config };
23
+ const fileName = basename(filePath);
24
+ const dirName = dirname(filePath);
25
+ const messages = [];
26
+ // Main error message
27
+ switch (fileType) {
28
+ case 'index':
29
+ messages.push(`❌ Vector index file not found: ${filePath}`);
30
+ messages.push('');
31
+ messages.push('🔍 This usually means you need to run ingestion first to create the search index.');
32
+ break;
33
+ case 'database':
34
+ messages.push(`❌ Database file not found: ${filePath}`);
35
+ messages.push('');
36
+ messages.push('🔍 This usually means you need to run ingestion first to create the database.');
37
+ break;
38
+ case 'config':
39
+ messages.push(`❌ Configuration file not found: ${filePath}`);
40
+ messages.push('');
41
+ messages.push('🔍 The configuration file is missing or in the wrong location.');
42
+ break;
43
+ case 'content':
44
+ messages.push(`❌ Content file not found: ${filePath}`);
45
+ messages.push('');
46
+ messages.push('🔍 The content file may have been moved, deleted, or the path is incorrect.');
47
+ break;
48
+ }
49
+ if (cfg.includeTroubleshooting) {
50
+ messages.push('');
51
+ messages.push('🛠️ How to fix this:');
52
+ if (fileType === 'index' || fileType === 'database') {
53
+ messages.push(' 1. Run ingestion to create the required files:');
54
+ messages.push(' raglite ingest <your-documents-directory>');
55
+ messages.push('');
56
+ messages.push(' 2. Or create an ingestion pipeline programmatically:');
57
+ if (cfg.includeExamples) {
58
+ messages.push(' ```typescript');
59
+ messages.push(' import { IngestionFactory } from "rag-lite-ts";');
60
+ messages.push(' const pipeline = await IngestionFactory.create(');
61
+ messages.push(` "${filePath.endsWith('.bin') ? filePath.replace('.bin', '.sqlite') : filePath}",`);
62
+ messages.push(` "${filePath.endsWith('.sqlite') ? filePath.replace('.sqlite', '.bin') : filePath}"`);
63
+ messages.push(' );');
64
+ messages.push(' await pipeline.ingestDirectory("./your-documents");');
65
+ messages.push(' ```');
66
+ }
67
+ messages.push('');
68
+ messages.push(' 3. Verify the file paths are correct');
69
+ messages.push(` Expected directory: ${dirName}`);
70
+ messages.push(` Expected filename: ${fileName}`);
71
+ }
72
+ else {
73
+ messages.push(` 1. Check if the file exists at: ${filePath}`);
74
+ messages.push(' 2. Verify the file path is correct');
75
+ messages.push(' 3. Check file permissions');
76
+ }
77
+ }
78
+ return new Error(messages.join('\n'));
79
+ }
80
+ /**
81
+ * Create actionable error message for invalid paths
82
+ */
83
+ export function createInvalidPathError(paths, config = {}) {
84
+ const cfg = { ...DEFAULT_CONFIG, ...config };
85
+ const messages = [];
86
+ messages.push('❌ Invalid file paths provided');
87
+ messages.push('');
88
+ const missingPaths = paths.filter(p => !p.value || p.value.trim() === '');
89
+ if (missingPaths.length > 0) {
90
+ messages.push('🔍 Missing required paths:');
91
+ missingPaths.forEach(p => messages.push(` • ${p.name}: not provided`));
92
+ messages.push('');
93
+ }
94
+ if (cfg.includeTroubleshooting) {
95
+ messages.push('🛠️ How to fix this:');
96
+ messages.push(' 1. Provide all required file paths:');
97
+ if (cfg.includeExamples) {
98
+ messages.push(' ```typescript');
99
+ messages.push(' // ✅ Correct usage');
100
+ messages.push(' const search = await TextSearchFactory.create(');
101
+ messages.push(' "./my-index.bin", // Vector index path');
102
+ messages.push(' "./my-database.sqlite" // Database path');
103
+ messages.push(' );');
104
+ messages.push(' ```');
105
+ messages.push('');
106
+ messages.push(' ```typescript');
107
+ messages.push(' // ❌ Incorrect - missing paths');
108
+ messages.push(' const search = await TextSearchFactory.create("", "");');
109
+ messages.push(' ```');
110
+ }
111
+ }
112
+ return new Error(messages.join('\n'));
113
+ }
114
+ // =============================================================================
115
+ // MODEL AND CONFIGURATION ERROR MESSAGES
116
+ // =============================================================================
117
+ /**
118
+ * Create actionable error message for model loading failures
119
+ */
120
+ export function createModelLoadingError(modelName, originalError, config = {}) {
121
+ const cfg = { ...DEFAULT_CONFIG, ...config };
122
+ const messages = [];
123
+ messages.push(`❌ Failed to load embedding model: ${modelName}`);
124
+ messages.push('');
125
+ messages.push(`🔍 Original error: ${originalError}`);
126
+ messages.push('');
127
+ if (cfg.includeTroubleshooting) {
128
+ messages.push('🛠️ How to fix this:');
129
+ if (originalError.includes('network') || originalError.includes('download') || originalError.includes('fetch')) {
130
+ messages.push(' 📡 Network/Download Issues:');
131
+ messages.push(' 1. Check your internet connection');
132
+ messages.push(' 2. Try again in a few minutes (temporary server issues)');
133
+ messages.push(' 3. Check if you\'re behind a firewall or proxy');
134
+ messages.push('');
135
+ }
136
+ if (originalError.includes('memory') || originalError.includes('OOM')) {
137
+ messages.push(' 💾 Memory Issues:');
138
+ messages.push(' 1. Close other applications to free up memory');
139
+ messages.push(' 2. Try a smaller model:');
140
+ messages.push(' • sentence-transformers/all-MiniLM-L6-v2 (lightweight)');
141
+ messages.push(' • Xenova/clip-vit-base-patch32 (for multimodal)');
142
+ messages.push('');
143
+ }
144
+ messages.push(' 🔧 General Solutions:');
145
+ messages.push(' 1. Verify the model name is correct');
146
+ messages.push(' 2. Check available models:');
147
+ if (cfg.includeExamples) {
148
+ messages.push(' ```typescript');
149
+ messages.push(' import { listAvailableModels } from "rag-lite-ts";');
150
+ messages.push(' const models = listAvailableModels();');
151
+ messages.push(' console.log("Available models:", models);');
152
+ messages.push(' ```');
153
+ }
154
+ messages.push(' 3. Try a different model if the current one is problematic');
155
+ }
156
+ return new Error(messages.join('\n'));
157
+ }
158
+ /**
159
+ * Create actionable error message for dimension mismatches
160
+ */
161
+ export function createDimensionMismatchError(expected, actual, context, config = {}) {
162
+ const cfg = { ...DEFAULT_CONFIG, ...config };
163
+ const messages = [];
164
+ messages.push(`❌ Vector dimension mismatch in ${context}`);
165
+ messages.push('');
166
+ messages.push(`🔍 Expected: ${expected} dimensions`);
167
+ messages.push(`🔍 Actual: ${actual} dimensions`);
168
+ messages.push('');
169
+ messages.push('This usually means the model used to create the index is different from the current model.');
170
+ if (cfg.includeTroubleshooting) {
171
+ messages.push('');
172
+ messages.push('🛠️ How to fix this:');
173
+ messages.push(' 1. Rebuild the index with the current model:');
174
+ messages.push(' raglite ingest <directory> --force-rebuild');
175
+ messages.push('');
176
+ messages.push(' 2. Or use the same model that was used to create the index');
177
+ messages.push('');
178
+ messages.push(' 3. Check which model was used originally:');
179
+ if (cfg.includeExamples) {
180
+ messages.push(' ```typescript');
181
+ messages.push(' import { getSearchEngineInfo } from "rag-lite-ts";');
182
+ messages.push(' const info = await getSearchEngineInfo("./database.sqlite");');
183
+ messages.push(' console.log("Original model:", info.modelName);');
184
+ messages.push(' console.log("Original dimensions:", info.modelDimensions);');
185
+ messages.push(' ```');
186
+ }
187
+ }
188
+ return new Error(messages.join('\n'));
189
+ }
190
+ /**
191
+ * Create actionable error message for mode mismatches
192
+ */
193
+ export function createModeMismatchError(expectedMode, actualMode, config = {}) {
194
+ const cfg = { ...DEFAULT_CONFIG, ...config };
195
+ const messages = [];
196
+ messages.push(`❌ Mode mismatch detected`);
197
+ messages.push('');
198
+ messages.push(`🔍 Database is configured for: ${expectedMode} mode`);
199
+ messages.push(`🔍 You requested: ${actualMode} mode`);
200
+ messages.push('');
201
+ messages.push('Each database can only be used with one mode consistently.');
202
+ if (cfg.includeTroubleshooting) {
203
+ messages.push('');
204
+ messages.push('🛠️ How to fix this:');
205
+ messages.push(' 1. Use the existing mode (recommended):');
206
+ if (cfg.includeExamples) {
207
+ messages.push(' ```typescript');
208
+ messages.push(' // Let the system auto-detect the mode');
209
+ messages.push(' const search = await TextSearchFactory.create("./index.bin", "./db.sqlite");');
210
+ messages.push(' ```');
211
+ }
212
+ messages.push('');
213
+ messages.push(' 2. Or rebuild with the new mode:');
214
+ messages.push(` raglite ingest <directory> --mode ${actualMode} --force-rebuild`);
215
+ messages.push('');
216
+ messages.push(' 3. Or create a new database for the different mode:');
217
+ if (cfg.includeExamples) {
218
+ messages.push(' ```typescript');
219
+ messages.push(' const pipeline = await IngestionFactory.create(');
220
+ messages.push(' "./new-database.sqlite",');
221
+ messages.push(' "./new-index.bin",');
222
+ messages.push(` { mode: "${actualMode}" }`);
223
+ messages.push(' );');
224
+ messages.push(' ```');
225
+ }
226
+ }
227
+ return new Error(messages.join('\n'));
228
+ }
229
+ // =============================================================================
230
+ // CONTENT AND PROCESSING ERROR MESSAGES
231
+ // =============================================================================
232
+ /**
233
+ * Create actionable error message for empty or invalid content
234
+ */
235
+ export function createInvalidContentError(contentType, issue, config = {}) {
236
+ const cfg = { ...DEFAULT_CONFIG, ...config };
237
+ const messages = [];
238
+ switch (issue) {
239
+ case 'empty':
240
+ messages.push(`❌ Empty ${contentType} content provided`);
241
+ messages.push('');
242
+ messages.push('🔍 Content cannot be empty or contain only whitespace.');
243
+ break;
244
+ case 'invalid_format':
245
+ messages.push(`❌ Invalid ${contentType} format`);
246
+ messages.push('');
247
+ messages.push('🔍 The content format is not supported or is corrupted.');
248
+ break;
249
+ case 'too_large':
250
+ messages.push(`❌ ${contentType} content is too large`);
251
+ messages.push('');
252
+ messages.push('🔍 Content exceeds the maximum allowed size.');
253
+ break;
254
+ case 'unsupported':
255
+ messages.push(`❌ Unsupported ${contentType} content type`);
256
+ messages.push('');
257
+ messages.push('🔍 This content type is not supported in the current mode.');
258
+ break;
259
+ }
260
+ if (cfg.includeTroubleshooting) {
261
+ messages.push('');
262
+ messages.push('🛠️ How to fix this:');
263
+ switch (issue) {
264
+ case 'empty':
265
+ messages.push(' 1. Provide non-empty content');
266
+ messages.push(' 2. Check that your content source is working correctly');
267
+ messages.push(' 3. Verify file reading/processing is working');
268
+ break;
269
+ case 'invalid_format':
270
+ messages.push(' 1. Check the file format is supported');
271
+ messages.push(' 2. Verify the file is not corrupted');
272
+ messages.push(' 3. Try with a different file');
273
+ break;
274
+ case 'too_large':
275
+ messages.push(' 1. Split large content into smaller chunks');
276
+ messages.push(' 2. Increase the maximum content size limit');
277
+ messages.push(' 3. Process content in batches');
278
+ break;
279
+ case 'unsupported':
280
+ messages.push(' 1. Check if you\'re using the right mode:');
281
+ messages.push(' • Text mode: supports text content');
282
+ messages.push(' • Multimodal mode: supports text and images');
283
+ messages.push(' 2. Convert content to a supported format');
284
+ break;
285
+ }
286
+ }
287
+ return new Error(messages.join('\n'));
288
+ }
289
+ // =============================================================================
290
+ // INITIALIZATION AND DEPENDENCY ERROR MESSAGES
291
+ // =============================================================================
292
+ /**
293
+ * Create actionable error message for missing dependencies
294
+ */
295
+ export function createMissingDependencyError(dependencyName, dependencyType, config = {}) {
296
+ const cfg = { ...DEFAULT_CONFIG, ...config };
297
+ const messages = [];
298
+ messages.push(`❌ Missing required ${dependencyType}: ${dependencyName}`);
299
+ messages.push('');
300
+ messages.push(`🔍 The ${dependencyName} ${dependencyType} is required but was not provided or is invalid.`);
301
+ if (cfg.includeTroubleshooting) {
302
+ messages.push('');
303
+ messages.push('🛠️ How to fix this:');
304
+ messages.push(` 1. Ensure ${dependencyName} is properly initialized`);
305
+ messages.push(' 2. Check the initialization order of your components');
306
+ messages.push(' 3. Verify all required parameters are provided');
307
+ if (cfg.includeExamples) {
308
+ messages.push('');
309
+ messages.push(' Example of correct initialization:');
310
+ messages.push(' ```typescript');
311
+ messages.push(' // Make sure all dependencies are created first');
312
+ messages.push(' const embedder = await createEmbedder("model-name");');
313
+ messages.push(' const indexManager = new IndexManager(...);');
314
+ messages.push(' const db = await openDatabase(...);');
315
+ messages.push(' ');
316
+ messages.push(' // Then create the main component');
317
+ messages.push(' const searchEngine = new SearchEngine(embedder, indexManager, db);');
318
+ messages.push(' ```');
319
+ }
320
+ }
321
+ return new Error(messages.join('\n'));
322
+ }
323
+ /**
324
+ * Create actionable error message for factory creation failures
325
+ */
326
+ export function createFactoryCreationError(factoryName, originalError, config = {}) {
327
+ const cfg = { ...DEFAULT_CONFIG, ...config };
328
+ const messages = [];
329
+ messages.push(`❌ ${factoryName} creation failed`);
330
+ messages.push('');
331
+ messages.push(`🔍 Original error: ${originalError}`);
332
+ messages.push('');
333
+ if (cfg.includeTroubleshooting) {
334
+ messages.push('🛠️ Common solutions:');
335
+ messages.push(' 1. Check that all required files exist');
336
+ messages.push(' 2. Verify file paths are correct');
337
+ messages.push(' 3. Ensure you have proper file permissions');
338
+ messages.push(' 4. Check that the model name is valid');
339
+ messages.push(' 5. Verify network connectivity (for model downloads)');
340
+ messages.push('');
341
+ messages.push('🔍 For detailed troubleshooting:');
342
+ messages.push(' 1. Check the original error message above');
343
+ messages.push(' 2. Look for specific error patterns (file not found, network issues, etc.)');
344
+ messages.push(' 3. Try the operation with simpler parameters first');
345
+ }
346
+ return new Error(messages.join('\n'));
347
+ }
348
+ // =============================================================================
349
+ // UTILITY FUNCTIONS
350
+ // =============================================================================
351
+ /**
352
+ * Enhance an existing error with actionable information
353
+ */
354
+ export function enhanceError(originalError, context, suggestions = [], config = {}) {
355
+ const cfg = { ...DEFAULT_CONFIG, ...config };
356
+ const messages = [];
357
+ messages.push(`❌ Error in ${context}`);
358
+ messages.push('');
359
+ messages.push(`🔍 ${originalError.message}`);
360
+ if (suggestions.length > 0) {
361
+ messages.push('');
362
+ messages.push('🛠️ Suggestions:');
363
+ suggestions.forEach((suggestion, index) => {
364
+ messages.push(` ${index + 1}. ${suggestion}`);
365
+ });
366
+ }
367
+ const enhancedError = new Error(messages.join('\n'));
368
+ enhancedError.name = originalError.name;
369
+ enhancedError.stack = originalError.stack;
370
+ return enhancedError;
371
+ }
372
+ /**
373
+ * Create a user-friendly error message with context
374
+ */
375
+ export function createContextualError(message, context, suggestions = [], examples = [], config = {}) {
376
+ const cfg = { ...DEFAULT_CONFIG, ...config };
377
+ const messages = [];
378
+ messages.push(`❌ ${message}`);
379
+ messages.push('');
380
+ messages.push(`🔍 Context: ${context}`);
381
+ if (suggestions.length > 0) {
382
+ messages.push('');
383
+ messages.push('🛠️ How to fix this:');
384
+ suggestions.forEach((suggestion, index) => {
385
+ messages.push(` ${index + 1}. ${suggestion}`);
386
+ });
387
+ }
388
+ if (cfg.includeExamples && examples.length > 0) {
389
+ messages.push('');
390
+ messages.push('💡 Examples:');
391
+ examples.forEach(example => {
392
+ messages.push(` ${example}`);
393
+ });
394
+ }
395
+ return new Error(messages.join('\n'));
396
+ }
397
+ //# sourceMappingURL=actionable-error-messages.js.map
@@ -0,0 +1,93 @@
1
+ /**
2
+ * CORE MODULE — Shared between text-only (rag-lite-ts) and future multimodal (rag-lite-mm)
3
+ * Model-agnostic. No transformer or modality-specific logic.
4
+ *
5
+ * This module provides adapter utilities to convert existing implementations to the new
6
+ * dependency injection interfaces. These adapters enable:
7
+ *
8
+ * 1. Integration with existing embedding and reranking implementations
9
+ * 2. Support for dependency injection patterns
10
+ * 3. Wrapping of third-party libraries to match core interfaces
11
+ * 4. Testing with mock implementations
12
+ *
13
+ * ADAPTER PATTERN USAGE:
14
+ * ```typescript
15
+ * // Convert embedder to dependency injection
16
+ * const embedder = new TextEmbeddingEngine();
17
+ * const embedFn = EmbeddingAdapter.fromEmbedder(embedder);
18
+ * const search = new SearchEngine(embedFn, indexManager, db);
19
+ *
20
+ * // Convert reranker to dependency injection
21
+ * const reranker = new CrossEncoderReranker();
22
+ * const rerankFn = RerankingAdapter.fromReranker(reranker);
23
+ * const search = new SearchEngine(embedFn, indexManager, db, rerankFn);
24
+ *
25
+ * // Create full interfaces for advanced usage
26
+ * const embeddingInterface = EmbeddingAdapter.createInterface(
27
+ * embedder,
28
+ * ['text'],
29
+ * 384,
30
+ * 'all-MiniLM-L6-v2'
31
+ * );
32
+ * ```
33
+ */
34
+ import type { EmbedFunction, RerankFunction, EmbeddingQueryInterface, RerankingInterface } from './interfaces.js';
35
+ /**
36
+ * Adapter to convert embedding engines to core EmbedFunction
37
+ * Enables integration while supporting dependency injection
38
+ *
39
+ * USAGE EXAMPLES:
40
+ * ```typescript
41
+ * // Basic adapter usage
42
+ * const embedder = new TextEmbeddingEngine();
43
+ * const embedFn = EmbeddingAdapter.fromEmbedder(embedder);
44
+ *
45
+ * // Use in SearchEngine
46
+ * const search = new SearchEngine(embedFn, indexManager, db);
47
+ *
48
+ * // Create full interface for advanced features
49
+ * const embeddingInterface = EmbeddingAdapter.createInterface(
50
+ * embedder,
51
+ * ['text', 'code'], // Supported content types
52
+ * 384, // Embedding dimensions
53
+ * 'all-MiniLM-L6-v2' // Model identifier
54
+ * );
55
+ *
56
+ * // Use interface for validation and metadata
57
+ * if (embeddingInterface.supportedContentTypes.includes('text')) {
58
+ * const result = await embeddingInterface.embedQuery('test query');
59
+ * }
60
+ * ```
61
+ */
62
+ export declare class EmbeddingAdapter {
63
+ /**
64
+ * Convert an embedding engine to an EmbedFunction
65
+ * @param embedder - Embedder with embedSingle method
66
+ * @returns EmbedFunction compatible with core dependency injection
67
+ */
68
+ static fromEmbedder(embedder: any): EmbedFunction;
69
+ /**
70
+ * Create an EmbeddingQueryInterface from an embedder
71
+ * @param embedder - Embedder with embedSingle method
72
+ * @param supportedContentTypes - Content types this embedder supports
73
+ * @param embeddingDimensions - Dimensions of embedding vectors
74
+ * @param modelIdentifier - Model name or identifier
75
+ * @returns Full EmbeddingQueryInterface with metadata
76
+ */
77
+ static createInterface(embedder: any, supportedContentTypes?: string[], embeddingDimensions?: number, modelIdentifier?: string): EmbeddingQueryInterface;
78
+ }
79
+ /**
80
+ * Adapter to convert rerankers to core RerankFunction
81
+ * Enables integration while supporting dependency injection
82
+ */
83
+ export declare class RerankingAdapter {
84
+ /**
85
+ * Convert a reranker to a RerankFunction
86
+ */
87
+ static fromReranker(reranker: any): RerankFunction;
88
+ /**
89
+ * Create a RerankingInterface from a reranker
90
+ */
91
+ static createInterface(reranker: any, supportedContentTypes?: string[], modelIdentifier?: string): RerankingInterface;
92
+ }
93
+ //# sourceMappingURL=adapters.d.ts.map
@@ -0,0 +1,139 @@
1
+ /**
2
+ * CORE MODULE — Shared between text-only (rag-lite-ts) and future multimodal (rag-lite-mm)
3
+ * Model-agnostic. No transformer or modality-specific logic.
4
+ *
5
+ * This module provides adapter utilities to convert existing implementations to the new
6
+ * dependency injection interfaces. These adapters enable:
7
+ *
8
+ * 1. Integration with existing embedding and reranking implementations
9
+ * 2. Support for dependency injection patterns
10
+ * 3. Wrapping of third-party libraries to match core interfaces
11
+ * 4. Testing with mock implementations
12
+ *
13
+ * ADAPTER PATTERN USAGE:
14
+ * ```typescript
15
+ * // Convert embedder to dependency injection
16
+ * const embedder = new TextEmbeddingEngine();
17
+ * const embedFn = EmbeddingAdapter.fromEmbedder(embedder);
18
+ * const search = new SearchEngine(embedFn, indexManager, db);
19
+ *
20
+ * // Convert reranker to dependency injection
21
+ * const reranker = new CrossEncoderReranker();
22
+ * const rerankFn = RerankingAdapter.fromReranker(reranker);
23
+ * const search = new SearchEngine(embedFn, indexManager, db, rerankFn);
24
+ *
25
+ * // Create full interfaces for advanced usage
26
+ * const embeddingInterface = EmbeddingAdapter.createInterface(
27
+ * embedder,
28
+ * ['text'],
29
+ * 384,
30
+ * 'all-MiniLM-L6-v2'
31
+ * );
32
+ * ```
33
+ */
34
+ /**
35
+ * Adapter to convert embedding engines to core EmbedFunction
36
+ * Enables integration while supporting dependency injection
37
+ *
38
+ * USAGE EXAMPLES:
39
+ * ```typescript
40
+ * // Basic adapter usage
41
+ * const embedder = new TextEmbeddingEngine();
42
+ * const embedFn = EmbeddingAdapter.fromEmbedder(embedder);
43
+ *
44
+ * // Use in SearchEngine
45
+ * const search = new SearchEngine(embedFn, indexManager, db);
46
+ *
47
+ * // Create full interface for advanced features
48
+ * const embeddingInterface = EmbeddingAdapter.createInterface(
49
+ * embedder,
50
+ * ['text', 'code'], // Supported content types
51
+ * 384, // Embedding dimensions
52
+ * 'all-MiniLM-L6-v2' // Model identifier
53
+ * );
54
+ *
55
+ * // Use interface for validation and metadata
56
+ * if (embeddingInterface.supportedContentTypes.includes('text')) {
57
+ * const result = await embeddingInterface.embedQuery('test query');
58
+ * }
59
+ * ```
60
+ */
61
+ export class EmbeddingAdapter {
62
+ /**
63
+ * Convert an embedding engine to an EmbedFunction
64
+ * @param embedder - Embedder with embedSingle method
65
+ * @returns EmbedFunction compatible with core dependency injection
66
+ */
67
+ static fromEmbedder(embedder) {
68
+ return async (query, contentType) => {
69
+ // Call the embedSingle method
70
+ return await embedder.embedSingle(query);
71
+ };
72
+ }
73
+ /**
74
+ * Create an EmbeddingQueryInterface from an embedder
75
+ * @param embedder - Embedder with embedSingle method
76
+ * @param supportedContentTypes - Content types this embedder supports
77
+ * @param embeddingDimensions - Dimensions of embedding vectors
78
+ * @param modelIdentifier - Model name or identifier
79
+ * @returns Full EmbeddingQueryInterface with metadata
80
+ */
81
+ static createInterface(embedder, supportedContentTypes = ['text'], embeddingDimensions = 384, modelIdentifier = 'unknown') {
82
+ return {
83
+ embedQuery: this.fromEmbedder(embedder),
84
+ supportedContentTypes,
85
+ embeddingDimensions,
86
+ modelIdentifier
87
+ };
88
+ }
89
+ }
90
+ /**
91
+ * Adapter to convert rerankers to core RerankFunction
92
+ * Enables integration while supporting dependency injection
93
+ */
94
+ export class RerankingAdapter {
95
+ /**
96
+ * Convert a reranker to a RerankFunction
97
+ */
98
+ static fromReranker(reranker) {
99
+ return async (query, results, contentType) => {
100
+ // Convert core SearchResult format to reranker format
101
+ const rerankResults = results.map(result => ({
102
+ text: result.content,
103
+ score: result.score,
104
+ document: {
105
+ id: result.document.id,
106
+ source: result.document.source,
107
+ title: result.document.title
108
+ }
109
+ }));
110
+ // Call rerank method
111
+ const reranked = await reranker.rerank(query, rerankResults);
112
+ // Convert back to core SearchResult format
113
+ return reranked.map((result, index) => ({
114
+ content: result.text,
115
+ score: result.score,
116
+ contentType: results[index]?.contentType || 'text',
117
+ document: {
118
+ id: result.document.id,
119
+ source: result.document.source,
120
+ title: result.document.title,
121
+ contentType: results[index]?.document.contentType || 'text'
122
+ },
123
+ metadata: results[index]?.metadata
124
+ }));
125
+ };
126
+ }
127
+ /**
128
+ * Create a RerankingInterface from a reranker
129
+ */
130
+ static createInterface(reranker, supportedContentTypes = ['text'], modelIdentifier = 'unknown') {
131
+ return {
132
+ rerankResults: this.fromReranker(reranker),
133
+ supportedContentTypes,
134
+ isEnabled: reranker && reranker.isLoaded && reranker.isLoaded(),
135
+ modelIdentifier
136
+ };
137
+ }
138
+ }
139
+ //# sourceMappingURL=adapters.js.map