vectra 0.12.3 → 0.14.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 (375) hide show
  1. package/README.md +92 -100
  2. package/lib/BrowserWebFetcher.d.ts +75 -0
  3. package/lib/BrowserWebFetcher.d.ts.map +1 -0
  4. package/lib/BrowserWebFetcher.js +290 -0
  5. package/lib/BrowserWebFetcher.js.map +1 -0
  6. package/lib/FileFetcher.d.ts.map +1 -1
  7. package/lib/FileFetcher.js +25 -15
  8. package/lib/FileFetcher.js.map +1 -1
  9. package/lib/FileFetcher.spec.d.ts +2 -0
  10. package/lib/FileFetcher.spec.d.ts.map +1 -0
  11. package/lib/FileFetcher.spec.js +244 -0
  12. package/lib/FileFetcher.spec.js.map +1 -0
  13. package/lib/FolderWatcher.d.ts +91 -0
  14. package/lib/FolderWatcher.d.ts.map +1 -0
  15. package/lib/FolderWatcher.js +304 -0
  16. package/lib/FolderWatcher.js.map +1 -0
  17. package/lib/FolderWatcher.spec.d.ts +2 -0
  18. package/lib/FolderWatcher.spec.d.ts.map +1 -0
  19. package/lib/FolderWatcher.spec.js +308 -0
  20. package/lib/FolderWatcher.spec.js.map +1 -0
  21. package/lib/GPT3Tokenizer.spec.d.ts +2 -0
  22. package/lib/GPT3Tokenizer.spec.d.ts.map +1 -0
  23. package/lib/GPT3Tokenizer.spec.js +45 -0
  24. package/lib/GPT3Tokenizer.spec.js.map +1 -0
  25. package/lib/ItemSelector.d.ts.map +1 -1
  26. package/lib/ItemSelector.js +19 -8
  27. package/lib/ItemSelector.js.map +1 -1
  28. package/lib/ItemSelector.spec.d.ts +2 -0
  29. package/lib/ItemSelector.spec.d.ts.map +1 -0
  30. package/lib/ItemSelector.spec.js +204 -0
  31. package/lib/ItemSelector.spec.js.map +1 -0
  32. package/lib/LocalDocument.d.ts +1 -1
  33. package/lib/LocalDocument.d.ts.map +1 -1
  34. package/lib/LocalDocument.js +5 -45
  35. package/lib/LocalDocument.js.map +1 -1
  36. package/lib/LocalDocument.spec.d.ts +2 -0
  37. package/lib/LocalDocument.spec.d.ts.map +1 -0
  38. package/lib/LocalDocument.spec.js +214 -0
  39. package/lib/LocalDocument.spec.js.map +1 -0
  40. package/lib/LocalDocumentIndex.d.ts +20 -0
  41. package/lib/LocalDocumentIndex.d.ts.map +1 -1
  42. package/lib/LocalDocumentIndex.js +16 -52
  43. package/lib/LocalDocumentIndex.js.map +1 -1
  44. package/lib/LocalDocumentIndex.spec.d.ts +2 -0
  45. package/lib/LocalDocumentIndex.spec.d.ts.map +1 -0
  46. package/lib/LocalDocumentIndex.spec.js +494 -0
  47. package/lib/LocalDocumentIndex.spec.js.map +1 -0
  48. package/lib/LocalDocumentResult.d.ts +32 -11
  49. package/lib/LocalDocumentResult.d.ts.map +1 -1
  50. package/lib/LocalDocumentResult.js +305 -257
  51. package/lib/LocalDocumentResult.js.map +1 -1
  52. package/lib/LocalDocumentResult.spec.d.ts +2 -0
  53. package/lib/LocalDocumentResult.spec.d.ts.map +1 -0
  54. package/lib/LocalDocumentResult.spec.js +373 -0
  55. package/lib/LocalDocumentResult.spec.js.map +1 -0
  56. package/lib/LocalEmbeddings.d.ts +59 -0
  57. package/lib/LocalEmbeddings.d.ts.map +1 -0
  58. package/lib/LocalEmbeddings.js +101 -0
  59. package/lib/LocalEmbeddings.js.map +1 -0
  60. package/lib/LocalEmbeddings.spec.d.ts +2 -0
  61. package/lib/LocalEmbeddings.spec.d.ts.map +1 -0
  62. package/lib/LocalEmbeddings.spec.js +155 -0
  63. package/lib/LocalEmbeddings.spec.js.map +1 -0
  64. package/lib/LocalIndex.d.ts +27 -18
  65. package/lib/LocalIndex.d.ts.map +1 -1
  66. package/lib/LocalIndex.js +109 -105
  67. package/lib/LocalIndex.js.map +1 -1
  68. package/lib/LocalIndex.spec.js +434 -43
  69. package/lib/LocalIndex.spec.js.map +1 -1
  70. package/lib/OpenAIEmbeddings.d.ts +4 -6
  71. package/lib/OpenAIEmbeddings.d.ts.map +1 -1
  72. package/lib/OpenAIEmbeddings.js +16 -24
  73. package/lib/OpenAIEmbeddings.js.map +1 -1
  74. package/lib/OpenAIEmbeddings.spec.d.ts +2 -0
  75. package/lib/OpenAIEmbeddings.spec.d.ts.map +1 -0
  76. package/lib/OpenAIEmbeddings.spec.js +298 -0
  77. package/lib/OpenAIEmbeddings.spec.js.map +1 -0
  78. package/lib/TextSplitter.d.ts +2 -0
  79. package/lib/TextSplitter.d.ts.map +1 -1
  80. package/lib/TextSplitter.js +154 -111
  81. package/lib/TextSplitter.js.map +1 -1
  82. package/lib/TextSplitter.spec.js +289 -61
  83. package/lib/TextSplitter.spec.js.map +1 -1
  84. package/lib/TransformersEmbeddings.d.ts +121 -0
  85. package/lib/TransformersEmbeddings.d.ts.map +1 -0
  86. package/lib/TransformersEmbeddings.js +176 -0
  87. package/lib/TransformersEmbeddings.js.map +1 -0
  88. package/lib/TransformersEmbeddings.spec.d.ts +2 -0
  89. package/lib/TransformersEmbeddings.spec.d.ts.map +1 -0
  90. package/lib/TransformersEmbeddings.spec.js +198 -0
  91. package/lib/TransformersEmbeddings.spec.js.map +1 -0
  92. package/lib/TransformersTokenizer.d.ts +33 -0
  93. package/lib/TransformersTokenizer.d.ts.map +1 -0
  94. package/lib/TransformersTokenizer.js +44 -0
  95. package/lib/TransformersTokenizer.js.map +1 -0
  96. package/lib/TransformersTokenizer.spec.d.ts +2 -0
  97. package/lib/TransformersTokenizer.spec.d.ts.map +1 -0
  98. package/lib/TransformersTokenizer.spec.js +112 -0
  99. package/lib/TransformersTokenizer.spec.js.map +1 -0
  100. package/lib/WebFetcher.d.ts +1 -2
  101. package/lib/WebFetcher.d.ts.map +1 -1
  102. package/lib/WebFetcher.js +58 -54
  103. package/lib/WebFetcher.js.map +1 -1
  104. package/lib/WebFetcher.spec.d.ts +2 -0
  105. package/lib/WebFetcher.spec.d.ts.map +1 -0
  106. package/lib/WebFetcher.spec.js +263 -0
  107. package/lib/WebFetcher.spec.js.map +1 -0
  108. package/lib/browser.d.ts +30 -0
  109. package/lib/browser.d.ts.map +1 -0
  110. package/lib/browser.js +52 -0
  111. package/lib/browser.js.map +1 -0
  112. package/lib/codecs/IndexCodec.d.ts +37 -0
  113. package/lib/codecs/IndexCodec.d.ts.map +1 -0
  114. package/lib/codecs/IndexCodec.js +3 -0
  115. package/lib/codecs/IndexCodec.js.map +1 -0
  116. package/lib/codecs/JsonCodec.d.ts +19 -0
  117. package/lib/codecs/JsonCodec.d.ts.map +1 -0
  118. package/lib/codecs/JsonCodec.js +35 -0
  119. package/lib/codecs/JsonCodec.js.map +1 -0
  120. package/lib/codecs/JsonCodec.spec.d.ts +2 -0
  121. package/lib/codecs/JsonCodec.spec.d.ts.map +1 -0
  122. package/lib/codecs/JsonCodec.spec.js +66 -0
  123. package/lib/codecs/JsonCodec.spec.js.map +1 -0
  124. package/lib/codecs/LocalIndex.protobuf.spec.d.ts +2 -0
  125. package/lib/codecs/LocalIndex.protobuf.spec.d.ts.map +1 -0
  126. package/lib/codecs/LocalIndex.protobuf.spec.js +108 -0
  127. package/lib/codecs/LocalIndex.protobuf.spec.js.map +1 -0
  128. package/lib/codecs/ProtobufCodec.d.ts +20 -0
  129. package/lib/codecs/ProtobufCodec.d.ts.map +1 -0
  130. package/lib/codecs/ProtobufCodec.js +225 -0
  131. package/lib/codecs/ProtobufCodec.js.map +1 -0
  132. package/lib/codecs/ProtobufCodec.spec.d.ts +2 -0
  133. package/lib/codecs/ProtobufCodec.spec.d.ts.map +1 -0
  134. package/lib/codecs/ProtobufCodec.spec.js +155 -0
  135. package/lib/codecs/ProtobufCodec.spec.js.map +1 -0
  136. package/lib/codecs/index.d.ts +5 -0
  137. package/lib/codecs/index.d.ts.map +1 -0
  138. package/lib/codecs/index.js +21 -0
  139. package/lib/codecs/index.js.map +1 -0
  140. package/lib/codecs/migrateIndex.d.ts +24 -0
  141. package/lib/codecs/migrateIndex.d.ts.map +1 -0
  142. package/lib/codecs/migrateIndex.js +119 -0
  143. package/lib/codecs/migrateIndex.js.map +1 -0
  144. package/lib/codecs/migrateIndex.spec.d.ts +2 -0
  145. package/lib/codecs/migrateIndex.spec.d.ts.map +1 -0
  146. package/lib/codecs/migrateIndex.spec.js +151 -0
  147. package/lib/codecs/migrateIndex.spec.js.map +1 -0
  148. package/lib/codecs/schemas/index.proto +34 -0
  149. package/lib/index.d.ts +9 -1
  150. package/lib/index.d.ts.map +1 -1
  151. package/lib/index.js +9 -1
  152. package/lib/index.js.map +1 -1
  153. package/lib/internals/Colorize.d.ts.map +1 -1
  154. package/lib/internals/Colorize.js +20 -15
  155. package/lib/internals/Colorize.js.map +1 -1
  156. package/lib/server/IndexManager.d.ts +78 -0
  157. package/lib/server/IndexManager.d.ts.map +1 -0
  158. package/lib/server/IndexManager.js +259 -0
  159. package/lib/server/IndexManager.js.map +1 -0
  160. package/lib/server/VectraServer.d.ts +40 -0
  161. package/lib/server/VectraServer.d.ts.map +1 -0
  162. package/lib/server/VectraServer.js +151 -0
  163. package/lib/server/VectraServer.js.map +1 -0
  164. package/lib/server/VectraServer.spec.d.ts +2 -0
  165. package/lib/server/VectraServer.spec.d.ts.map +1 -0
  166. package/lib/server/VectraServer.spec.js +322 -0
  167. package/lib/server/VectraServer.spec.js.map +1 -0
  168. package/lib/server/handlers/documentHandlers.d.ts +15 -0
  169. package/lib/server/handlers/documentHandlers.d.ts.map +1 -0
  170. package/lib/server/handlers/documentHandlers.js +95 -0
  171. package/lib/server/handlers/documentHandlers.js.map +1 -0
  172. package/lib/server/handlers/helpers.d.ts +23 -0
  173. package/lib/server/handlers/helpers.d.ts.map +1 -0
  174. package/lib/server/handlers/helpers.js +138 -0
  175. package/lib/server/handlers/helpers.js.map +1 -0
  176. package/lib/server/handlers/index.d.ts +8 -0
  177. package/lib/server/handlers/index.d.ts.map +1 -0
  178. package/lib/server/handlers/index.js +22 -0
  179. package/lib/server/handlers/index.js.map +1 -0
  180. package/lib/server/handlers/indexHandlers.d.ts +14 -0
  181. package/lib/server/handlers/indexHandlers.d.ts.map +1 -0
  182. package/lib/server/handlers/indexHandlers.js +85 -0
  183. package/lib/server/handlers/indexHandlers.js.map +1 -0
  184. package/lib/server/handlers/itemHandlers.d.ts +34 -0
  185. package/lib/server/handlers/itemHandlers.d.ts.map +1 -0
  186. package/lib/server/handlers/itemHandlers.js +166 -0
  187. package/lib/server/handlers/itemHandlers.js.map +1 -0
  188. package/lib/server/handlers/lifecycleHandlers.d.ts +11 -0
  189. package/lib/server/handlers/lifecycleHandlers.d.ts.map +1 -0
  190. package/lib/server/handlers/lifecycleHandlers.js +31 -0
  191. package/lib/server/handlers/lifecycleHandlers.js.map +1 -0
  192. package/lib/server/handlers/queryHandlers.d.ts +27 -0
  193. package/lib/server/handlers/queryHandlers.d.ts.map +1 -0
  194. package/lib/server/handlers/queryHandlers.js +135 -0
  195. package/lib/server/handlers/queryHandlers.js.map +1 -0
  196. package/lib/server/handlers/statsHandlers.d.ts +17 -0
  197. package/lib/server/handlers/statsHandlers.d.ts.map +1 -0
  198. package/lib/server/handlers/statsHandlers.js +81 -0
  199. package/lib/server/handlers/statsHandlers.js.map +1 -0
  200. package/lib/server/index.d.ts +4 -0
  201. package/lib/server/index.d.ts.map +1 -0
  202. package/lib/server/index.js +23 -0
  203. package/lib/server/index.js.map +1 -0
  204. package/lib/storage/FileStorage.d.ts +92 -0
  205. package/lib/storage/FileStorage.d.ts.map +1 -0
  206. package/lib/storage/FileStorage.js +3 -0
  207. package/lib/storage/FileStorage.js.map +1 -0
  208. package/lib/storage/FileStorageUtilities.d.ts +36 -0
  209. package/lib/storage/FileStorageUtilities.d.ts.map +1 -0
  210. package/lib/storage/FileStorageUtilities.js +91 -0
  211. package/lib/storage/FileStorageUtilities.js.map +1 -0
  212. package/lib/storage/FileStorageUtilities.spec.d.ts +2 -0
  213. package/lib/storage/FileStorageUtilities.spec.d.ts.map +1 -0
  214. package/lib/storage/FileStorageUtilities.spec.js +98 -0
  215. package/lib/storage/FileStorageUtilities.spec.js.map +1 -0
  216. package/lib/storage/FileType.d.ts +29 -0
  217. package/lib/storage/FileType.d.ts.map +1 -0
  218. package/lib/storage/FileType.js +38 -0
  219. package/lib/storage/FileType.js.map +1 -0
  220. package/lib/storage/IndexedDBStorage.d.ts +47 -0
  221. package/lib/storage/IndexedDBStorage.d.ts.map +1 -0
  222. package/lib/storage/IndexedDBStorage.js +347 -0
  223. package/lib/storage/IndexedDBStorage.js.map +1 -0
  224. package/lib/storage/LocalFileStorage.browser.d.ts +19 -0
  225. package/lib/storage/LocalFileStorage.browser.d.ts.map +1 -0
  226. package/lib/storage/LocalFileStorage.browser.js +43 -0
  227. package/lib/storage/LocalFileStorage.browser.js.map +1 -0
  228. package/lib/storage/LocalFileStorage.d.ts +23 -0
  229. package/lib/storage/LocalFileStorage.d.ts.map +1 -0
  230. package/lib/storage/LocalFileStorage.js +152 -0
  231. package/lib/storage/LocalFileStorage.js.map +1 -0
  232. package/lib/storage/LocalFileStorage.spec.d.ts +2 -0
  233. package/lib/storage/LocalFileStorage.spec.d.ts.map +1 -0
  234. package/lib/storage/LocalFileStorage.spec.js +249 -0
  235. package/lib/storage/LocalFileStorage.spec.js.map +1 -0
  236. package/lib/storage/VirtualFileStorage.d.ts +18 -0
  237. package/lib/storage/VirtualFileStorage.d.ts.map +1 -0
  238. package/lib/storage/VirtualFileStorage.js +178 -0
  239. package/lib/storage/VirtualFileStorage.js.map +1 -0
  240. package/lib/storage/VirtualFileStorage.spec.d.ts +2 -0
  241. package/lib/storage/VirtualFileStorage.spec.d.ts.map +1 -0
  242. package/lib/storage/VirtualFileStorage.spec.js +302 -0
  243. package/lib/storage/VirtualFileStorage.spec.js.map +1 -0
  244. package/lib/storage/index.d.ts +6 -0
  245. package/lib/storage/index.d.ts.map +1 -0
  246. package/lib/storage/index.js +22 -0
  247. package/lib/storage/index.js.map +1 -0
  248. package/lib/templates/templates/csharp/README.md +48 -0
  249. package/lib/templates/templates/csharp/VectraClient.cs +234 -0
  250. package/lib/templates/templates/go/README.md +71 -0
  251. package/lib/templates/templates/go/vectra_client.go +322 -0
  252. package/lib/templates/templates/java/README.md +81 -0
  253. package/lib/templates/templates/java/VectraClient.java +232 -0
  254. package/lib/templates/templates/python/README.md +37 -0
  255. package/lib/templates/templates/python/vectra_client.py +279 -0
  256. package/lib/templates/templates/rust/Cargo.toml +14 -0
  257. package/lib/templates/templates/rust/README.md +39 -0
  258. package/lib/templates/templates/rust/build.rs +4 -0
  259. package/lib/templates/templates/rust/lib.rs +284 -0
  260. package/lib/templates/templates/typescript/README.md +96 -0
  261. package/lib/templates/templates/typescript/VectraClient.ts +374 -0
  262. package/lib/templates/typescript/VectraClient.d.ts +114 -0
  263. package/lib/templates/typescript/VectraClient.d.ts.map +1 -0
  264. package/lib/templates/typescript/VectraClient.js +328 -0
  265. package/lib/templates/typescript/VectraClient.js.map +1 -0
  266. package/lib/types.d.ts +7 -0
  267. package/lib/types.d.ts.map +1 -1
  268. package/lib/utils/index.d.ts +2 -0
  269. package/lib/utils/index.d.ts.map +1 -0
  270. package/lib/utils/index.js +18 -0
  271. package/lib/utils/index.js.map +1 -0
  272. package/lib/utils/pathUtils.d.ts +40 -0
  273. package/lib/utils/pathUtils.d.ts.map +1 -0
  274. package/lib/utils/pathUtils.js +98 -0
  275. package/lib/utils/pathUtils.js.map +1 -0
  276. package/lib/vectra-cli.d.ts.map +1 -1
  277. package/lib/vectra-cli.generate.spec.d.ts +2 -0
  278. package/lib/vectra-cli.generate.spec.d.ts.map +1 -0
  279. package/lib/vectra-cli.generate.spec.js +112 -0
  280. package/lib/vectra-cli.generate.spec.js.map +1 -0
  281. package/lib/vectra-cli.js +446 -9
  282. package/lib/vectra-cli.js.map +1 -1
  283. package/lib/vectra-cli.spec.d.ts +1 -0
  284. package/lib/vectra-cli.spec.d.ts.map +1 -0
  285. package/lib/vectra-cli.spec.js +2 -0
  286. package/lib/vectra-cli.spec.js.map +1 -0
  287. package/package.json +89 -16
  288. package/proto/vectra_service.proto +276 -0
  289. package/src/BrowserWebFetcher.ts +345 -0
  290. package/src/FileFetcher.spec.ts +234 -0
  291. package/src/FileFetcher.ts +37 -25
  292. package/src/FolderWatcher.spec.ts +288 -0
  293. package/src/FolderWatcher.ts +304 -0
  294. package/src/GPT3Tokenizer.spec.ts +50 -0
  295. package/src/ItemSelector.spec.ts +252 -0
  296. package/src/ItemSelector.ts +163 -150
  297. package/src/LocalDocument.spec.ts +211 -0
  298. package/src/LocalDocument.ts +88 -94
  299. package/src/LocalDocumentIndex.spec.ts +481 -0
  300. package/src/LocalDocumentIndex.ts +39 -40
  301. package/src/LocalDocumentResult.spec.ts +373 -0
  302. package/src/LocalDocumentResult.ts +489 -319
  303. package/src/LocalEmbeddings.spec.ts +138 -0
  304. package/src/LocalEmbeddings.ts +120 -0
  305. package/src/LocalIndex.spec.ts +808 -323
  306. package/src/LocalIndex.ts +479 -430
  307. package/src/OpenAIEmbeddings.spec.ts +354 -0
  308. package/src/OpenAIEmbeddings.ts +26 -27
  309. package/src/TextSplitter.spec.ts +320 -65
  310. package/src/TextSplitter.ts +172 -115
  311. package/src/TransformersEmbeddings.spec.ts +188 -0
  312. package/src/TransformersEmbeddings.ts +232 -0
  313. package/src/TransformersTokenizer.spec.ts +143 -0
  314. package/src/TransformersTokenizer.ts +45 -0
  315. package/src/WebFetcher.spec.ts +288 -0
  316. package/src/WebFetcher.ts +184 -186
  317. package/src/browser.ts +69 -0
  318. package/src/codecs/IndexCodec.ts +40 -0
  319. package/src/codecs/JsonCodec.spec.ts +70 -0
  320. package/src/codecs/JsonCodec.ts +37 -0
  321. package/src/codecs/LocalIndex.protobuf.spec.ts +115 -0
  322. package/src/codecs/ProtobufCodec.spec.ts +166 -0
  323. package/src/codecs/ProtobufCodec.ts +193 -0
  324. package/src/codecs/index.ts +4 -0
  325. package/src/codecs/migrateIndex.spec.ts +176 -0
  326. package/src/codecs/migrateIndex.ts +125 -0
  327. package/src/codecs/schemas/index.proto +34 -0
  328. package/src/index.ts +9 -1
  329. package/src/internals/Colorize.ts +19 -16
  330. package/src/server/IndexManager.ts +243 -0
  331. package/src/server/VectraServer.spec.ts +303 -0
  332. package/src/server/VectraServer.ts +156 -0
  333. package/src/server/handlers/documentHandlers.ts +59 -0
  334. package/src/server/handlers/helpers.ts +93 -0
  335. package/src/server/handlers/index.ts +7 -0
  336. package/src/server/handlers/indexHandlers.ts +44 -0
  337. package/src/server/handlers/itemHandlers.ts +140 -0
  338. package/src/server/handlers/lifecycleHandlers.ts +26 -0
  339. package/src/server/handlers/queryHandlers.ts +96 -0
  340. package/src/server/handlers/statsHandlers.ts +38 -0
  341. package/src/server/index.ts +3 -0
  342. package/src/storage/FileStorage.ts +105 -0
  343. package/src/storage/FileStorageUtilities.spec.ts +106 -0
  344. package/src/storage/FileStorageUtilities.ts +77 -0
  345. package/src/storage/FileType.ts +61 -0
  346. package/src/storage/IndexedDBStorage.ts +365 -0
  347. package/src/storage/LocalFileStorage.browser.ts +52 -0
  348. package/src/storage/LocalFileStorage.spec.ts +292 -0
  349. package/src/storage/LocalFileStorage.ts +98 -0
  350. package/src/storage/VirtualFileStorage.spec.ts +307 -0
  351. package/src/storage/VirtualFileStorage.ts +169 -0
  352. package/src/storage/index.ts +5 -0
  353. package/src/templates/csharp/README.md +48 -0
  354. package/src/templates/csharp/VectraClient.cs +234 -0
  355. package/src/templates/go/README.md +71 -0
  356. package/src/templates/go/vectra_client.go +322 -0
  357. package/src/templates/java/README.md +81 -0
  358. package/src/templates/java/VectraClient.java +232 -0
  359. package/src/templates/python/README.md +37 -0
  360. package/src/templates/python/vectra_client.py +279 -0
  361. package/src/templates/rust/Cargo.toml +14 -0
  362. package/src/templates/rust/README.md +39 -0
  363. package/src/templates/rust/build.rs +4 -0
  364. package/src/templates/rust/lib.rs +284 -0
  365. package/src/templates/typescript/README.md +96 -0
  366. package/src/templates/typescript/VectraClient.ts +374 -0
  367. package/src/types.ts +131 -123
  368. package/src/utils/index.ts +1 -0
  369. package/src/utils/pathUtils.ts +106 -0
  370. package/src/vectra-cli.generate.spec.ts +72 -0
  371. package/src/vectra-cli.spec.ts +0 -0
  372. package/src/vectra-cli.ts +687 -246
  373. package/README.draft.md +0 -499
  374. package/README.draft.outline.md +0 -160
  375. package/README.research.md +0 -2159
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalEmbeddings.js","sourceRoot":"","sources":["../src/LocalEmbeddings.ts"],"names":[],"mappings":";;;;;;;;;;;;AAuBA;;;;;;GAMG;AACH,MAAa,eAAe;IAOxB;;;OAGG;IACH,YAAmB,OAAgC;;QAP3C,cAAS,GAAQ,IAAI,CAAC;QACtB,qBAAgB,GAAwB,IAAI,CAAC;QAOjD,IAAI,CAAC,UAAU,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,mCAAI,yBAAyB,CAAC;QAC9D,IAAI,CAAC,SAAS,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,mCAAI,GAAG,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACU,gBAAgB,CAAC,MAAyB;;YACnD,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC7D,MAAM,MAAM,GAAe,EAAE,CAAC;gBAE9B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;oBAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE;wBAC7B,OAAO,EAAE,MAAM;wBACf,SAAS,EAAE,IAAI;qBAClB,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAoB,CAAC,CAAC,CAAC;gBACzD,CAAC;gBAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;YACzC,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACpB,OAAO;oBACH,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBAC5D,CAAC;YACN,CAAC;QACL,CAAC;KAAA;IAED;;;;OAIG;IACW,WAAW;;YACrB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC,SAAS,CAAC;YAC1B,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAChD,CAAC;YAED,OAAO,IAAI,CAAC,gBAAgB,CAAC;QACjC,CAAC;KAAA;IAED;;OAEG;IACW,YAAY;;YACtB,IAAI,YAAiB,CAAC;YACtB,IAAI,CAAC;gBACD,YAAY,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;YACxD,CAAC;YAAC,WAAM,CAAC;gBACL,MAAM,IAAI,KAAK,CACX,0EAA0E;oBAC1E,wDAAwD,CAC3D,CAAC;YACN,CAAC;YAED,IAAI,CAAC,SAAS,GAAG,MAAM,YAAY,CAAC,QAAQ,CACxC,oBAAoB,EACpB,IAAI,CAAC,UAAU,CAClB,CAAC;YAEF,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;KAAA;CACJ;AAzFD,0CAyFC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LocalEmbeddings.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalEmbeddings.spec.d.ts","sourceRoot":"","sources":["../src/LocalEmbeddings.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ const assert = __importStar(require("assert"));
46
+ const sinon = __importStar(require("sinon"));
47
+ const LocalEmbeddings_1 = require("./LocalEmbeddings");
48
+ describe('LocalEmbeddings', () => {
49
+ let requireStub;
50
+ let fakePipeline;
51
+ let fakePipelineFn;
52
+ beforeEach(() => {
53
+ // Create a fake pipeline function that returns tensor-like results
54
+ fakePipelineFn = sinon.stub();
55
+ fakePipeline = sinon.stub().resolves(fakePipelineFn);
56
+ // Stub require to intercept @huggingface/transformers
57
+ requireStub = sinon.stub(module.constructor.prototype, 'require');
58
+ requireStub.callThrough(); // Allow all other requires to pass through
59
+ requireStub.withArgs('@huggingface/transformers').returns({
60
+ pipeline: fakePipeline,
61
+ });
62
+ });
63
+ afterEach(() => {
64
+ sinon.restore();
65
+ });
66
+ describe('constructor', () => {
67
+ it('should use default model and maxTokens', () => {
68
+ const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
69
+ assert.strictEqual(embeddings.model, 'Xenova/all-MiniLM-L6-v2');
70
+ assert.strictEqual(embeddings.maxTokens, 256);
71
+ });
72
+ it('should accept custom model name', () => {
73
+ const embeddings = new LocalEmbeddings_1.LocalEmbeddings({ model: 'custom/model' });
74
+ assert.strictEqual(embeddings.model, 'custom/model');
75
+ });
76
+ it('should accept custom maxTokens', () => {
77
+ const embeddings = new LocalEmbeddings_1.LocalEmbeddings({ maxTokens: 512 });
78
+ assert.strictEqual(embeddings.maxTokens, 512);
79
+ });
80
+ });
81
+ describe('createEmbeddings', () => {
82
+ it('should create embeddings for a single string input', () => __awaiter(void 0, void 0, void 0, function* () {
83
+ const fakeVector = new Float32Array([0.1, 0.2, 0.3]);
84
+ fakePipelineFn.resolves({ data: fakeVector });
85
+ const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
86
+ const result = yield embeddings.createEmbeddings('hello world');
87
+ assert.strictEqual(result.status, 'success');
88
+ assert.ok(result.output);
89
+ assert.strictEqual(result.output.length, 1);
90
+ assert.deepStrictEqual(result.output[0], [0.10000000149011612, 0.20000000298023224, 0.30000001192092896]);
91
+ }));
92
+ it('should create embeddings for an array of inputs', () => __awaiter(void 0, void 0, void 0, function* () {
93
+ const vec1 = new Float32Array([0.1, 0.2, 0.3]);
94
+ const vec2 = new Float32Array([0.4, 0.5, 0.6]);
95
+ fakePipelineFn.onFirstCall().resolves({ data: vec1 });
96
+ fakePipelineFn.onSecondCall().resolves({ data: vec2 });
97
+ const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
98
+ const result = yield embeddings.createEmbeddings(['hello', 'world']);
99
+ assert.strictEqual(result.status, 'success');
100
+ assert.ok(result.output);
101
+ assert.strictEqual(result.output.length, 2);
102
+ }));
103
+ it('should call pipeline with mean pooling and normalize', () => __awaiter(void 0, void 0, void 0, function* () {
104
+ const fakeVector = new Float32Array([0.5, 0.5]);
105
+ fakePipelineFn.resolves({ data: fakeVector });
106
+ const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
107
+ yield embeddings.createEmbeddings('test');
108
+ assert.ok(fakePipelineFn.calledOnce);
109
+ const [input, options] = fakePipelineFn.firstCall.args;
110
+ assert.strictEqual(input, 'test');
111
+ assert.deepStrictEqual(options, { pooling: 'mean', normalize: true });
112
+ }));
113
+ it('should initialize the pipeline with correct model name', () => __awaiter(void 0, void 0, void 0, function* () {
114
+ const fakeVector = new Float32Array([0.5]);
115
+ fakePipelineFn.resolves({ data: fakeVector });
116
+ const embeddings = new LocalEmbeddings_1.LocalEmbeddings({ model: 'my/model' });
117
+ yield embeddings.createEmbeddings('test');
118
+ assert.ok(fakePipeline.calledOnce);
119
+ const [task, model] = fakePipeline.firstCall.args;
120
+ assert.strictEqual(task, 'feature-extraction');
121
+ assert.strictEqual(model, 'my/model');
122
+ }));
123
+ it('should reuse the pipeline across calls', () => __awaiter(void 0, void 0, void 0, function* () {
124
+ const fakeVector = new Float32Array([0.5]);
125
+ fakePipelineFn.resolves({ data: fakeVector });
126
+ const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
127
+ yield embeddings.createEmbeddings('first');
128
+ yield embeddings.createEmbeddings('second');
129
+ // Pipeline should only be created once
130
+ assert.ok(fakePipeline.calledOnce);
131
+ // But the pipeline function should be called twice
132
+ assert.strictEqual(fakePipelineFn.callCount, 2);
133
+ }));
134
+ it('should return error status when pipeline fails', () => __awaiter(void 0, void 0, void 0, function* () {
135
+ fakePipelineFn.rejects(new Error('Model not found'));
136
+ const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
137
+ const result = yield embeddings.createEmbeddings('test');
138
+ assert.strictEqual(result.status, 'error');
139
+ assert.ok(result.message);
140
+ assert.ok(result.message.includes('Model not found'));
141
+ }));
142
+ });
143
+ describe('optional dependency', () => {
144
+ it('should return error when @huggingface/transformers is not installed', () => __awaiter(void 0, void 0, void 0, function* () {
145
+ requireStub.withArgs('@huggingface/transformers').throws(new Error('Cannot find module'));
146
+ const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
147
+ const result = yield embeddings.createEmbeddings('test');
148
+ assert.strictEqual(result.status, 'error');
149
+ assert.ok(result.message);
150
+ assert.ok(result.message.includes('@huggingface/transformers'));
151
+ assert.ok(result.message.includes('npm install'));
152
+ }));
153
+ });
154
+ });
155
+ //# sourceMappingURL=LocalEmbeddings.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalEmbeddings.spec.js","sourceRoot":"","sources":["../src/LocalEmbeddings.spec.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import { IndexItem, IndexStats, MetadataFilter, MetadataTypes, QueryResult } from './types';
2
+ import { FileStorage } from './storage';
3
+ import { IndexCodec } from './codecs';
2
4
  export interface CreateIndexConfig {
3
5
  version: number;
4
6
  deleteIfExists?: boolean;
@@ -15,23 +17,33 @@ export interface CreateIndexConfig {
15
17
  export declare class LocalIndex<TMetadata extends Record<string, MetadataTypes> = Record<string, MetadataTypes>> {
16
18
  private readonly _folderPath;
17
19
  private readonly _indexName;
20
+ private readonly _storage;
21
+ private readonly _codec;
18
22
  private _data?;
19
23
  private _update?;
20
24
  private _bm25Engine;
25
+ private readonly _bm25Factory;
26
+ private readonly _docReader;
21
27
  /**
22
28
  * Creates a new instance of LocalIndex.
23
29
  * @param folderPath Path to the index folder.
24
- * @param indexName Optional name of the index file. Defaults to index.json.
25
- */
26
- constructor(folderPath: string, indexName?: string);
27
- /**
28
- * Path to the index folder.
29
- */
30
+ * @param indexName Optional index file name. Defaults to 'index' + codec.extension.
31
+ * @param storage Optional file storage instance. Defaults to LocalFileStorage.
32
+ * @param codec Optional codec for serialization. Defaults to JsonCodec.
33
+ * @param options Optional constructor options for dependency injection.
34
+ */
35
+ constructor(folderPath: string, indexName?: string, storage?: FileStorage, codec?: IndexCodec, options?: {
36
+ bm25Factory?: () => any;
37
+ docReader?: (docId: string) => Promise<string>;
38
+ });
39
+ /** Path to the index folder. */
30
40
  get folderPath(): string;
31
- /**
32
- * Optional name of the index file.
33
- */
41
+ /** Name of the index file. */
34
42
  get indexName(): string;
43
+ /** Storage provider used to store the index. */
44
+ get storage(): FileStorage;
45
+ /** Codec used for serialization. */
46
+ get codec(): IndexCodec;
35
47
  /**
36
48
  * Begins an update to the index.
37
49
  * @remarks
@@ -98,9 +110,7 @@ export declare class LocalIndex<TMetadata extends Record<string, MetadataTypes>
98
110
  * @returns Inserted items.
99
111
  */
100
112
  batchInsertItems<TItemMetadata extends TMetadata = TMetadata>(items: Partial<IndexItem<TItemMetadata>>[]): Promise<IndexItem[]>;
101
- /**
102
- * Returns true if the index exists.
103
- */
113
+ /** Returns true if the index exists. */
104
114
  isIndexCreated(): Promise<boolean>;
105
115
  /**
106
116
  * Returns all items in the index.
@@ -124,10 +134,11 @@ export declare class LocalIndex<TMetadata extends Record<string, MetadataTypes>
124
134
  * This method loads the index into memory and returns the top k items that are most similar.
125
135
  * An optional filter can be applied to the metadata of the items.
126
136
  * @param vector Vector to query against.
127
- * @param query Query text used for BM25 keyword search.
137
+ * @param query Query string (used when isBm25=true).
128
138
  * @param topK Number of items to return.
129
139
  * @param filter Optional. Filter to apply.
130
- * @returns Similar items to the vector that matche the supplied filter.
140
+ * @param isBm25 Optional. If true, append BM25 keyword results to semantic results.
141
+ * @returns Similar items to the vector that match the supplied filter.
131
142
  */
132
143
  queryItems<TItemMetadata extends TMetadata = TMetadata>(vector: number[], query: string, topK: number, filter?: MetadataFilter, isBm25?: boolean): Promise<QueryResult<TItemMetadata>[]>;
133
144
  /**
@@ -139,12 +150,10 @@ export declare class LocalIndex<TMetadata extends Record<string, MetadataTypes>
139
150
  * @returns Upserted item.
140
151
  */
141
152
  upsertItem<TItemMetadata extends TMetadata = TMetadata>(item: Partial<IndexItem<TItemMetadata>>): Promise<IndexItem<TItemMetadata>>;
142
- /**
143
- * Ensures that the index has been loaded into memory.
144
- */
153
+ /** Ensures that the index has been loaded into memory. */
145
154
  protected loadIndexData(): Promise<void>;
146
155
  private addItemToUpdate;
147
- private setupbm25;
156
+ private setupBm25;
148
157
  private bm25Search;
149
158
  }
150
159
  //# sourceMappingURL=LocalIndex.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LocalIndex.d.ts","sourceRoot":"","sources":["../src/LocalIndex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LocalIndex.d.ts","sourceRoot":"","sources":["../src/LocalIndex.ts"],"names":[],"mappings":"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"}
package/lib/LocalIndex.js CHANGED
@@ -1,37 +1,4 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -46,14 +13,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
46
13
  };
47
14
  Object.defineProperty(exports, "__esModule", { value: true });
48
15
  exports.LocalIndex = void 0;
49
- const fs = __importStar(require("fs/promises"));
50
- const path = __importStar(require("path"));
16
+ const pathUtils_1 = require("./utils/pathUtils");
51
17
  const uuid_1 = require("uuid");
52
18
  const ItemSelector_1 = require("./ItemSelector");
53
19
  const LocalDocument_1 = require("./LocalDocument");
54
20
  const wink_bm25_text_search_1 = __importDefault(require("wink-bm25-text-search"));
55
21
  const wink_nlp_1 = __importDefault(require("wink-nlp"));
56
22
  const wink_eng_lite_web_model_1 = __importDefault(require("wink-eng-lite-web-model"));
23
+ const storage_1 = require("./storage");
24
+ const codecs_1 = require("./codecs");
57
25
  /**
58
26
  * Local vector index instance.
59
27
  * @remarks
@@ -64,24 +32,44 @@ class LocalIndex {
64
32
  /**
65
33
  * Creates a new instance of LocalIndex.
66
34
  * @param folderPath Path to the index folder.
67
- * @param indexName Optional name of the index file. Defaults to index.json.
35
+ * @param indexName Optional index file name. Defaults to 'index' + codec.extension.
36
+ * @param storage Optional file storage instance. Defaults to LocalFileStorage.
37
+ * @param codec Optional codec for serialization. Defaults to JsonCodec.
38
+ * @param options Optional constructor options for dependency injection.
68
39
  */
69
- constructor(folderPath, indexName) {
40
+ constructor(folderPath, indexName, storage, codec, options) {
41
+ this._indexName = 'index.json';
70
42
  this._folderPath = folderPath;
71
- this._indexName = indexName || "index.json";
43
+ this._codec = codec || new codecs_1.JsonCodec();
44
+ if (indexName) {
45
+ this._indexName = indexName;
46
+ }
47
+ else {
48
+ this._indexName = `index${this._codec.extension}`;
49
+ }
50
+ this._storage = storage || new storage_1.LocalFileStorage();
51
+ this._bm25Factory = (options === null || options === void 0 ? void 0 : options.bm25Factory) || (() => (0, wink_bm25_text_search_1.default)());
52
+ this._docReader = (options === null || options === void 0 ? void 0 : options.docReader) || ((docId) => __awaiter(this, void 0, void 0, function* () {
53
+ const doc = new LocalDocument_1.LocalDocument(this, docId, '');
54
+ return yield doc.loadText();
55
+ }));
72
56
  }
73
- /**
74
- * Path to the index folder.
75
- */
57
+ /** Path to the index folder. */
76
58
  get folderPath() {
77
59
  return this._folderPath;
78
60
  }
79
- /**
80
- * Optional name of the index file.
81
- */
61
+ /** Name of the index file. */
82
62
  get indexName() {
83
63
  return this._indexName;
84
64
  }
65
+ /** Storage provider used to store the index. */
66
+ get storage() {
67
+ return this._storage;
68
+ }
69
+ /** Codec used for serialization. */
70
+ get codec() {
71
+ return this._codec;
72
+ }
85
73
  /**
86
74
  * Begins an update to the index.
87
75
  * @remarks
@@ -124,16 +112,16 @@ class LocalIndex {
124
112
  }
125
113
  try {
126
114
  // Create folder for index
127
- yield fs.mkdir(this._folderPath, { recursive: true });
115
+ yield this.storage.createFolder(this._folderPath);
128
116
  // Initialize index.json file
129
117
  this._data = {
130
118
  version: config.version,
131
119
  metadata_config: (_a = config.metadata_config) !== null && _a !== void 0 ? _a : {},
132
120
  items: []
133
121
  };
134
- yield fs.writeFile(path.join(this._folderPath, this._indexName), JSON.stringify(this._data));
122
+ yield this.storage.upsertFile(pathUtils_1.pathUtils.join(this._folderPath, this._indexName), this._codec.serializeIndex(this._data));
135
123
  }
136
- catch (err) {
124
+ catch (_b) {
137
125
  yield this.deleteIndex();
138
126
  throw new Error('Error creating index');
139
127
  }
@@ -145,10 +133,9 @@ class LocalIndex {
145
133
  * This method deletes the index folder from disk.
146
134
  */
147
135
  deleteIndex() {
148
- this._data = undefined;
149
- return fs.rm(this._folderPath, {
150
- recursive: true,
151
- maxRetries: 3
136
+ return __awaiter(this, void 0, void 0, function* () {
137
+ this._data = undefined;
138
+ return yield this.storage.deleteFolder(this._folderPath);
152
139
  });
153
140
  }
154
141
  /**
@@ -185,7 +172,7 @@ class LocalIndex {
185
172
  }
186
173
  try {
187
174
  // Save index
188
- yield fs.writeFile(path.join(this._folderPath, this._indexName), JSON.stringify(this._update));
175
+ yield this.storage.upsertFile(pathUtils_1.pathUtils.join(this._folderPath, this._indexName), this._codec.serializeIndex(this._update));
189
176
  this._data = this._update;
190
177
  this._update = undefined;
191
178
  }
@@ -268,18 +255,10 @@ class LocalIndex {
268
255
  }
269
256
  });
270
257
  }
271
- /**
272
- * Returns true if the index exists.
273
- */
258
+ /** Returns true if the index exists. */
274
259
  isIndexCreated() {
275
260
  return __awaiter(this, void 0, void 0, function* () {
276
- try {
277
- yield fs.access(path.join(this._folderPath, this.indexName));
278
- return true;
279
- }
280
- catch (err) {
281
- return false;
282
- }
261
+ return yield this.storage.pathExists(pathUtils_1.pathUtils.join(this._folderPath, this._indexName));
283
262
  });
284
263
  }
285
264
  /**
@@ -314,13 +293,15 @@ class LocalIndex {
314
293
  * This method loads the index into memory and returns the top k items that are most similar.
315
294
  * An optional filter can be applied to the metadata of the items.
316
295
  * @param vector Vector to query against.
317
- * @param query Query text used for BM25 keyword search.
296
+ * @param query Query string (used when isBm25=true).
318
297
  * @param topK Number of items to return.
319
298
  * @param filter Optional. Filter to apply.
320
- * @returns Similar items to the vector that matche the supplied filter.
299
+ * @param isBm25 Optional. If true, append BM25 keyword results to semantic results.
300
+ * @returns Similar items to the vector that match the supplied filter.
321
301
  */
322
302
  queryItems(vector, query, topK, filter, isBm25) {
323
303
  return __awaiter(this, void 0, void 0, function* () {
304
+ var _a, _b, _c, _d;
324
305
  yield this.loadIndexData();
325
306
  // Filter items
326
307
  let items = this._data.items;
@@ -347,37 +328,56 @@ class LocalIndex {
347
328
  // Load external metadata
348
329
  for (const item of top) {
349
330
  if (item.item.metadataFile) {
350
- const metadataPath = path.join(this._folderPath, item.item.metadataFile);
351
- const metadata = yield fs.readFile(metadataPath);
352
- item.item.metadata = JSON.parse(metadata.toString());
331
+ const metadataPath = pathUtils_1.pathUtils.join(this._folderPath, item.item.metadataFile);
332
+ const metadataBuffer = yield this.storage.readFile(metadataPath);
333
+ item.item.metadata = this._codec.deserializeMetadata(metadataBuffer);
353
334
  }
354
335
  }
355
- //Peform bm25 search only if enabled. Avoid duplicate chunks, which are already selected during semantic search.
336
+ // Perform bm25 search only if enabled. Avoid duplicate chunks that are already selected during semantic search.
356
337
  if (isBm25) {
357
338
  const itemSet = new Set();
358
- for (const item of top)
359
- itemSet.add(item.item.id);
360
- this.setupbm25();
361
- let currDoc;
362
- let currDocTxt;
339
+ for (const r of top)
340
+ itemSet.add(r.item.id);
341
+ // Set up BM25 engine
342
+ yield this.setupBm25();
343
+ // Add docs if we have necessary metadata; guard everything to avoid crashes
363
344
  for (let i = 0; i < items.length; i++) {
364
345
  if (!itemSet.has(items[i].id)) {
365
346
  const item = items[i];
366
- currDoc = new LocalDocument_1.LocalDocument(this, item.metadata.documentId.toString(), '');
367
- currDocTxt = yield currDoc.loadText();
368
- const startPos = item.metadata.startPos;
369
- const endPos = item.metadata.endPos;
370
- const chunkText = currDocTxt.substring(Number(startPos), Number(endPos) + 1);
371
- this._bm25Engine.addDoc({ body: chunkText }, i);
347
+ const md = item.metadata || {};
348
+ if (md.documentId != undefined && md.startPos != undefined && md.endPos != undefined) {
349
+ try {
350
+ const currDocTxt = yield this._docReader(String(md.documentId));
351
+ const startPos = Number(md.startPos);
352
+ const endPos = Number(md.endPos);
353
+ const chunkText = currDocTxt.substring(startPos, endPos + 1);
354
+ (_b = (_a = this._bm25Engine).addDoc) === null || _b === void 0 ? void 0 : _b.call(_a, { body: chunkText }, i);
355
+ }
356
+ catch (_e) {
357
+ // Ignore load or engine errors for BM25 doc prep
358
+ }
359
+ }
372
360
  }
373
361
  }
374
- this._bm25Engine.consolidate();
375
- var results = yield this.bm25Search(query, items, topK);
362
+ (_d = (_c = this._bm25Engine).consolidate) === null || _d === void 0 ? void 0 : _d.call(_c);
363
+ const results = yield this.bm25Search(query, items, topK);
376
364
  results.forEach((res) => {
377
- top.push({
378
- item: Object.assign({}, Object.assign(Object.assign({}, items[res[0]]), { metadata: Object.assign(Object.assign({}, items[res[0]].metadata), { isBm25: true }) })),
379
- score: res[1]
380
- });
365
+ var _a;
366
+ // Support both [index, score] tuples and { item, score } objects
367
+ if (Array.isArray(res)) {
368
+ const idx = res[0];
369
+ const score = res[1];
370
+ if (items[idx]) {
371
+ top.push({
372
+ item: Object.assign({}, Object.assign(Object.assign({}, items[idx]), { metadata: Object.assign(Object.assign({}, items[idx].metadata), { isBm25: true }) })),
373
+ score
374
+ });
375
+ }
376
+ }
377
+ else if (res && typeof res === 'object' && 'item' in res && 'score' in res) {
378
+ const objItem = Object.assign({}, Object.assign(Object.assign({}, (res.item || {})), { metadata: Object.assign(Object.assign({}, (((_a = res.item) === null || _a === void 0 ? void 0 : _a.metadata) || {})), { isBm25: true }) }));
379
+ top.push({ item: objItem, score: res.score });
380
+ }
381
381
  });
382
382
  }
383
383
  return top;
@@ -404,9 +404,7 @@ class LocalIndex {
404
404
  }
405
405
  });
406
406
  }
407
- /**
408
- * Ensures that the index has been loaded into memory.
409
- */
407
+ /** Ensures that the index has been loaded into memory. */
410
408
  loadIndexData() {
411
409
  return __awaiter(this, void 0, void 0, function* () {
412
410
  if (this._data) {
@@ -415,13 +413,13 @@ class LocalIndex {
415
413
  if (!(yield this.isIndexCreated())) {
416
414
  throw new Error('Index does not exist');
417
415
  }
418
- const data = yield fs.readFile(path.join(this._folderPath, this.indexName));
419
- this._data = JSON.parse(data.toString());
416
+ const data = yield this.storage.readFile(pathUtils_1.pathUtils.join(this._folderPath, this.indexName));
417
+ this._data = this._codec.deserializeIndex(data);
420
418
  });
421
419
  }
422
420
  addItemToUpdate(item, unique) {
423
421
  return __awaiter(this, void 0, void 0, function* () {
424
- var _a;
422
+ var _a, _b;
425
423
  // Ensure vector is provided
426
424
  if (!item.vector) {
427
425
  throw new Error('Vector is required');
@@ -437,17 +435,25 @@ class LocalIndex {
437
435
  // Check for indexed metadata
438
436
  let metadata = {};
439
437
  let metadataFile;
440
- if (this._update.metadata_config.indexed && this._update.metadata_config.indexed.length > 0 && item.metadata) {
438
+ const indexedKeys = (_b = this._update.metadata_config.indexed) !== null && _b !== void 0 ? _b : [];
439
+ if (indexedKeys.length > 0 && item.metadata) {
441
440
  // Copy only indexed metadata
442
- for (const key of this._update.metadata_config.indexed) {
443
- if (item.metadata && item.metadata[key]) {
444
- metadata[key] = item.metadata[key];
441
+ const indexedOnly = {};
442
+ for (const key of indexedKeys) {
443
+ if (Object.prototype.hasOwnProperty.call(item.metadata, key)) {
444
+ indexedOnly[key] = item.metadata[key];
445
445
  }
446
446
  }
447
- // Save remaining metadata to disk
448
- metadataFile = `${(0, uuid_1.v4)()}.json`;
449
- const metadataPath = path.join(this._folderPath, metadataFile);
450
- yield fs.writeFile(metadataPath, JSON.stringify(item.metadata));
447
+ // Determine if there are any non-indexed keys
448
+ const hasNonIndexed = Object.keys(item.metadata).some(k => !indexedKeys.includes(k));
449
+ // Always store only indexed keys in the index
450
+ metadata = indexedOnly;
451
+ // Write full metadata externally only if there are non-indexed keys present
452
+ if (hasNonIndexed) {
453
+ metadataFile = `${(0, uuid_1.v4)()}${this._codec.extension}`;
454
+ const metadataPath = pathUtils_1.pathUtils.join(this._folderPath, metadataFile);
455
+ yield this.storage.upsertFile(metadataPath, this._codec.serializeMetadata(item.metadata));
456
+ }
451
457
  }
452
458
  else if (item.metadata) {
453
459
  metadata = item.metadata;
@@ -482,9 +488,9 @@ class LocalIndex {
482
488
  }
483
489
  });
484
490
  }
485
- setupbm25() {
491
+ setupBm25() {
486
492
  return __awaiter(this, void 0, void 0, function* () {
487
- this._bm25Engine = (0, wink_bm25_text_search_1.default)();
493
+ this._bm25Engine = this._bm25Factory();
488
494
  const nlp = (0, wink_nlp_1.default)(wink_eng_lite_web_model_1.default);
489
495
  const its = nlp.its;
490
496
  const prepTask = function (text) {
@@ -502,11 +508,9 @@ class LocalIndex {
502
508
  this._bm25Engine.definePrepTasks([prepTask]);
503
509
  });
504
510
  }
505
- bm25Search(searchQuery, items, topK) {
511
+ bm25Search(searchQuery, _items, topK) {
506
512
  return __awaiter(this, void 0, void 0, function* () {
507
- var query = searchQuery;
508
- // `results` is an array of [ doc-id, score ], sorted by score
509
- var results = this._bm25Engine.search(query);
513
+ const results = this._bm25Engine.search(searchQuery);
510
514
  return results.slice(0, topK);
511
515
  });
512
516
  }