vectra 0.12.2 → 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 (392) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +92 -100
  3. package/bin/vectra.js +3 -0
  4. package/lib/BrowserWebFetcher.d.ts +75 -0
  5. package/lib/BrowserWebFetcher.d.ts.map +1 -0
  6. package/lib/BrowserWebFetcher.js +290 -0
  7. package/lib/BrowserWebFetcher.js.map +1 -0
  8. package/lib/FileFetcher.d.ts +5 -0
  9. package/lib/FileFetcher.d.ts.map +1 -0
  10. package/lib/FileFetcher.js +89 -0
  11. package/lib/FileFetcher.js.map +1 -0
  12. package/lib/FileFetcher.spec.d.ts +2 -0
  13. package/lib/FileFetcher.spec.d.ts.map +1 -0
  14. package/lib/FileFetcher.spec.js +244 -0
  15. package/lib/FileFetcher.spec.js.map +1 -0
  16. package/lib/FolderWatcher.d.ts +91 -0
  17. package/lib/FolderWatcher.d.ts.map +1 -0
  18. package/lib/FolderWatcher.js +304 -0
  19. package/lib/FolderWatcher.js.map +1 -0
  20. package/lib/FolderWatcher.spec.d.ts +2 -0
  21. package/lib/FolderWatcher.spec.d.ts.map +1 -0
  22. package/lib/FolderWatcher.spec.js +308 -0
  23. package/lib/FolderWatcher.spec.js.map +1 -0
  24. package/lib/GPT3Tokenizer.d.ts +9 -0
  25. package/lib/GPT3Tokenizer.spec.d.ts +2 -0
  26. package/lib/GPT3Tokenizer.spec.d.ts.map +1 -0
  27. package/lib/GPT3Tokenizer.spec.js +45 -0
  28. package/lib/GPT3Tokenizer.spec.js.map +1 -0
  29. package/lib/ItemSelector.d.ts +41 -0
  30. package/lib/ItemSelector.d.ts.map +1 -0
  31. package/lib/ItemSelector.js +179 -0
  32. package/lib/ItemSelector.js.map +1 -0
  33. package/lib/ItemSelector.spec.d.ts +2 -0
  34. package/lib/ItemSelector.spec.d.ts.map +1 -0
  35. package/lib/ItemSelector.spec.js +204 -0
  36. package/lib/ItemSelector.spec.js.map +1 -0
  37. package/lib/LocalDocument.d.ts +54 -0
  38. package/lib/LocalDocument.d.ts.map +1 -1
  39. package/lib/LocalDocument.js +116 -0
  40. package/lib/LocalDocument.js.map +1 -0
  41. package/lib/LocalDocument.spec.d.ts +2 -0
  42. package/lib/LocalDocument.spec.d.ts.map +1 -0
  43. package/lib/LocalDocument.spec.js +214 -0
  44. package/lib/LocalDocument.spec.js.map +1 -0
  45. package/lib/LocalDocumentIndex.d.ts +152 -0
  46. package/lib/LocalDocumentIndex.d.ts.map +1 -1
  47. package/lib/LocalDocumentIndex.js +420 -0
  48. package/lib/LocalDocumentIndex.js.map +1 -0
  49. package/lib/LocalDocumentIndex.spec.d.ts +2 -0
  50. package/lib/LocalDocumentIndex.spec.d.ts.map +1 -0
  51. package/lib/LocalDocumentIndex.spec.js +494 -0
  52. package/lib/LocalDocumentIndex.spec.js.map +1 -0
  53. package/lib/LocalDocumentResult.d.ts +66 -0
  54. package/lib/LocalDocumentResult.d.ts.map +1 -1
  55. package/lib/LocalDocumentResult.js +376 -0
  56. package/lib/LocalDocumentResult.js.map +1 -0
  57. package/lib/LocalDocumentResult.spec.d.ts +2 -0
  58. package/lib/LocalDocumentResult.spec.d.ts.map +1 -0
  59. package/lib/LocalDocumentResult.spec.js +373 -0
  60. package/lib/LocalDocumentResult.spec.js.map +1 -0
  61. package/lib/LocalEmbeddings.d.ts +59 -0
  62. package/lib/LocalEmbeddings.d.ts.map +1 -0
  63. package/lib/LocalEmbeddings.js +101 -0
  64. package/lib/LocalEmbeddings.js.map +1 -0
  65. package/lib/LocalEmbeddings.spec.d.ts +2 -0
  66. package/lib/LocalEmbeddings.spec.d.ts.map +1 -0
  67. package/lib/LocalEmbeddings.spec.js +155 -0
  68. package/lib/LocalEmbeddings.spec.js.map +1 -0
  69. package/lib/LocalIndex.d.ts +159 -0
  70. package/lib/LocalIndex.d.ts.map +1 -1
  71. package/lib/LocalIndex.js +519 -0
  72. package/lib/LocalIndex.js.map +1 -0
  73. package/lib/LocalIndex.spec.d.ts +2 -0
  74. package/lib/LocalIndex.spec.js +611 -9
  75. package/lib/LocalIndex.spec.js.map +1 -1
  76. package/lib/OpenAIEmbeddings.d.ts +124 -0
  77. package/lib/OpenAIEmbeddings.d.ts.map +1 -0
  78. package/lib/OpenAIEmbeddings.js +166 -0
  79. package/lib/OpenAIEmbeddings.js.map +1 -0
  80. package/lib/OpenAIEmbeddings.spec.d.ts +2 -0
  81. package/lib/OpenAIEmbeddings.spec.d.ts.map +1 -0
  82. package/lib/OpenAIEmbeddings.spec.js +298 -0
  83. package/lib/OpenAIEmbeddings.spec.js.map +1 -0
  84. package/lib/TextSplitter.d.ts +21 -0
  85. package/lib/TextSplitter.d.ts.map +1 -1
  86. package/lib/TextSplitter.js +500 -0
  87. package/lib/TextSplitter.js.map +1 -0
  88. package/lib/TextSplitter.spec.d.ts +2 -0
  89. package/lib/TextSplitter.spec.d.ts.map +1 -0
  90. package/lib/TextSplitter.spec.js +337 -0
  91. package/lib/TextSplitter.spec.js.map +1 -0
  92. package/lib/TransformersEmbeddings.d.ts +121 -0
  93. package/lib/TransformersEmbeddings.d.ts.map +1 -0
  94. package/lib/TransformersEmbeddings.js +176 -0
  95. package/lib/TransformersEmbeddings.js.map +1 -0
  96. package/lib/TransformersEmbeddings.spec.d.ts +2 -0
  97. package/lib/TransformersEmbeddings.spec.d.ts.map +1 -0
  98. package/lib/TransformersEmbeddings.spec.js +198 -0
  99. package/lib/TransformersEmbeddings.spec.js.map +1 -0
  100. package/lib/TransformersTokenizer.d.ts +33 -0
  101. package/lib/TransformersTokenizer.d.ts.map +1 -0
  102. package/lib/TransformersTokenizer.js +44 -0
  103. package/lib/TransformersTokenizer.js.map +1 -0
  104. package/lib/TransformersTokenizer.spec.d.ts +2 -0
  105. package/lib/TransformersTokenizer.spec.d.ts.map +1 -0
  106. package/lib/TransformersTokenizer.spec.js +112 -0
  107. package/lib/TransformersTokenizer.spec.js.map +1 -0
  108. package/lib/WebFetcher.d.ts +14 -0
  109. package/lib/WebFetcher.d.ts.map +1 -0
  110. package/lib/WebFetcher.js +238 -0
  111. package/lib/WebFetcher.js.map +1 -0
  112. package/lib/WebFetcher.spec.d.ts +2 -0
  113. package/lib/WebFetcher.spec.d.ts.map +1 -0
  114. package/lib/WebFetcher.spec.js +263 -0
  115. package/lib/WebFetcher.spec.js.map +1 -0
  116. package/lib/browser.d.ts +30 -0
  117. package/lib/browser.d.ts.map +1 -0
  118. package/lib/browser.js +52 -0
  119. package/lib/browser.js.map +1 -0
  120. package/lib/codecs/IndexCodec.d.ts +37 -0
  121. package/lib/codecs/IndexCodec.d.ts.map +1 -0
  122. package/lib/codecs/IndexCodec.js +3 -0
  123. package/lib/codecs/IndexCodec.js.map +1 -0
  124. package/lib/codecs/JsonCodec.d.ts +19 -0
  125. package/lib/codecs/JsonCodec.d.ts.map +1 -0
  126. package/lib/codecs/JsonCodec.js +35 -0
  127. package/lib/codecs/JsonCodec.js.map +1 -0
  128. package/lib/codecs/JsonCodec.spec.d.ts +2 -0
  129. package/lib/codecs/JsonCodec.spec.d.ts.map +1 -0
  130. package/lib/codecs/JsonCodec.spec.js +66 -0
  131. package/lib/codecs/JsonCodec.spec.js.map +1 -0
  132. package/lib/codecs/LocalIndex.protobuf.spec.d.ts +2 -0
  133. package/lib/codecs/LocalIndex.protobuf.spec.d.ts.map +1 -0
  134. package/lib/codecs/LocalIndex.protobuf.spec.js +108 -0
  135. package/lib/codecs/LocalIndex.protobuf.spec.js.map +1 -0
  136. package/lib/codecs/ProtobufCodec.d.ts +20 -0
  137. package/lib/codecs/ProtobufCodec.d.ts.map +1 -0
  138. package/lib/codecs/ProtobufCodec.js +225 -0
  139. package/lib/codecs/ProtobufCodec.js.map +1 -0
  140. package/lib/codecs/ProtobufCodec.spec.d.ts +2 -0
  141. package/lib/codecs/ProtobufCodec.spec.d.ts.map +1 -0
  142. package/lib/codecs/ProtobufCodec.spec.js +155 -0
  143. package/lib/codecs/ProtobufCodec.spec.js.map +1 -0
  144. package/lib/codecs/index.d.ts +5 -0
  145. package/lib/codecs/index.d.ts.map +1 -0
  146. package/lib/codecs/index.js +21 -0
  147. package/lib/codecs/index.js.map +1 -0
  148. package/lib/codecs/migrateIndex.d.ts +24 -0
  149. package/lib/codecs/migrateIndex.d.ts.map +1 -0
  150. package/lib/codecs/migrateIndex.js +119 -0
  151. package/lib/codecs/migrateIndex.js.map +1 -0
  152. package/lib/codecs/migrateIndex.spec.d.ts +2 -0
  153. package/lib/codecs/migrateIndex.spec.d.ts.map +1 -0
  154. package/lib/codecs/migrateIndex.spec.js +151 -0
  155. package/lib/codecs/migrateIndex.spec.js.map +1 -0
  156. package/lib/codecs/schemas/index.proto +34 -0
  157. package/lib/index.d.ts +20 -0
  158. package/lib/index.d.ts.map +1 -1
  159. package/lib/index.js +36 -0
  160. package/lib/index.js.map +1 -0
  161. package/lib/internals/Colorize.d.ts +14 -0
  162. package/lib/internals/Colorize.d.ts.map +1 -0
  163. package/lib/internals/Colorize.js +69 -0
  164. package/lib/internals/Colorize.js.map +1 -0
  165. package/lib/internals/index.d.ts +3 -0
  166. package/lib/internals/index.d.ts.map +1 -0
  167. package/lib/internals/index.js +19 -0
  168. package/lib/internals/index.js.map +1 -0
  169. package/lib/internals/types.d.ts +43 -0
  170. package/lib/internals/types.d.ts.map +1 -0
  171. package/lib/internals/types.js +3 -0
  172. package/lib/internals/types.js.map +1 -0
  173. package/lib/server/IndexManager.d.ts +78 -0
  174. package/lib/server/IndexManager.d.ts.map +1 -0
  175. package/lib/server/IndexManager.js +259 -0
  176. package/lib/server/IndexManager.js.map +1 -0
  177. package/lib/server/VectraServer.d.ts +40 -0
  178. package/lib/server/VectraServer.d.ts.map +1 -0
  179. package/lib/server/VectraServer.js +151 -0
  180. package/lib/server/VectraServer.js.map +1 -0
  181. package/lib/server/VectraServer.spec.d.ts +2 -0
  182. package/lib/server/VectraServer.spec.d.ts.map +1 -0
  183. package/lib/server/VectraServer.spec.js +322 -0
  184. package/lib/server/VectraServer.spec.js.map +1 -0
  185. package/lib/server/handlers/documentHandlers.d.ts +15 -0
  186. package/lib/server/handlers/documentHandlers.d.ts.map +1 -0
  187. package/lib/server/handlers/documentHandlers.js +95 -0
  188. package/lib/server/handlers/documentHandlers.js.map +1 -0
  189. package/lib/server/handlers/helpers.d.ts +23 -0
  190. package/lib/server/handlers/helpers.d.ts.map +1 -0
  191. package/lib/server/handlers/helpers.js +138 -0
  192. package/lib/server/handlers/helpers.js.map +1 -0
  193. package/lib/server/handlers/index.d.ts +8 -0
  194. package/lib/server/handlers/index.d.ts.map +1 -0
  195. package/lib/server/handlers/index.js +22 -0
  196. package/lib/server/handlers/index.js.map +1 -0
  197. package/lib/server/handlers/indexHandlers.d.ts +14 -0
  198. package/lib/server/handlers/indexHandlers.d.ts.map +1 -0
  199. package/lib/server/handlers/indexHandlers.js +85 -0
  200. package/lib/server/handlers/indexHandlers.js.map +1 -0
  201. package/lib/server/handlers/itemHandlers.d.ts +34 -0
  202. package/lib/server/handlers/itemHandlers.d.ts.map +1 -0
  203. package/lib/server/handlers/itemHandlers.js +166 -0
  204. package/lib/server/handlers/itemHandlers.js.map +1 -0
  205. package/lib/server/handlers/lifecycleHandlers.d.ts +11 -0
  206. package/lib/server/handlers/lifecycleHandlers.d.ts.map +1 -0
  207. package/lib/server/handlers/lifecycleHandlers.js +31 -0
  208. package/lib/server/handlers/lifecycleHandlers.js.map +1 -0
  209. package/lib/server/handlers/queryHandlers.d.ts +27 -0
  210. package/lib/server/handlers/queryHandlers.d.ts.map +1 -0
  211. package/lib/server/handlers/queryHandlers.js +135 -0
  212. package/lib/server/handlers/queryHandlers.js.map +1 -0
  213. package/lib/server/handlers/statsHandlers.d.ts +17 -0
  214. package/lib/server/handlers/statsHandlers.d.ts.map +1 -0
  215. package/lib/server/handlers/statsHandlers.js +81 -0
  216. package/lib/server/handlers/statsHandlers.js.map +1 -0
  217. package/lib/server/index.d.ts +4 -0
  218. package/lib/server/index.d.ts.map +1 -0
  219. package/lib/server/index.js +23 -0
  220. package/lib/server/index.js.map +1 -0
  221. package/lib/storage/FileStorage.d.ts +92 -0
  222. package/lib/storage/FileStorage.d.ts.map +1 -0
  223. package/lib/storage/FileStorage.js +3 -0
  224. package/lib/storage/FileStorage.js.map +1 -0
  225. package/lib/storage/FileStorageUtilities.d.ts +36 -0
  226. package/lib/storage/FileStorageUtilities.d.ts.map +1 -0
  227. package/lib/storage/FileStorageUtilities.js +91 -0
  228. package/lib/storage/FileStorageUtilities.js.map +1 -0
  229. package/lib/storage/FileStorageUtilities.spec.d.ts +2 -0
  230. package/lib/storage/FileStorageUtilities.spec.d.ts.map +1 -0
  231. package/lib/storage/FileStorageUtilities.spec.js +98 -0
  232. package/lib/storage/FileStorageUtilities.spec.js.map +1 -0
  233. package/lib/storage/FileType.d.ts +29 -0
  234. package/lib/storage/FileType.d.ts.map +1 -0
  235. package/lib/storage/FileType.js +38 -0
  236. package/lib/storage/FileType.js.map +1 -0
  237. package/lib/storage/IndexedDBStorage.d.ts +47 -0
  238. package/lib/storage/IndexedDBStorage.d.ts.map +1 -0
  239. package/lib/storage/IndexedDBStorage.js +347 -0
  240. package/lib/storage/IndexedDBStorage.js.map +1 -0
  241. package/lib/storage/LocalFileStorage.browser.d.ts +19 -0
  242. package/lib/storage/LocalFileStorage.browser.d.ts.map +1 -0
  243. package/lib/storage/LocalFileStorage.browser.js +43 -0
  244. package/lib/storage/LocalFileStorage.browser.js.map +1 -0
  245. package/lib/storage/LocalFileStorage.d.ts +23 -0
  246. package/lib/storage/LocalFileStorage.d.ts.map +1 -0
  247. package/lib/storage/LocalFileStorage.js +152 -0
  248. package/lib/storage/LocalFileStorage.js.map +1 -0
  249. package/lib/storage/LocalFileStorage.spec.d.ts +2 -0
  250. package/lib/storage/LocalFileStorage.spec.d.ts.map +1 -0
  251. package/lib/storage/LocalFileStorage.spec.js +249 -0
  252. package/lib/storage/LocalFileStorage.spec.js.map +1 -0
  253. package/lib/storage/VirtualFileStorage.d.ts +18 -0
  254. package/lib/storage/VirtualFileStorage.d.ts.map +1 -0
  255. package/lib/storage/VirtualFileStorage.js +178 -0
  256. package/lib/storage/VirtualFileStorage.js.map +1 -0
  257. package/lib/storage/VirtualFileStorage.spec.d.ts +2 -0
  258. package/lib/storage/VirtualFileStorage.spec.d.ts.map +1 -0
  259. package/lib/storage/VirtualFileStorage.spec.js +302 -0
  260. package/lib/storage/VirtualFileStorage.spec.js.map +1 -0
  261. package/lib/storage/index.d.ts +6 -0
  262. package/lib/storage/index.d.ts.map +1 -0
  263. package/lib/storage/index.js +22 -0
  264. package/lib/storage/index.js.map +1 -0
  265. package/lib/templates/templates/csharp/README.md +48 -0
  266. package/lib/templates/templates/csharp/VectraClient.cs +234 -0
  267. package/lib/templates/templates/go/README.md +71 -0
  268. package/lib/templates/templates/go/vectra_client.go +322 -0
  269. package/lib/templates/templates/java/README.md +81 -0
  270. package/lib/templates/templates/java/VectraClient.java +232 -0
  271. package/lib/templates/templates/python/README.md +37 -0
  272. package/lib/templates/templates/python/vectra_client.py +279 -0
  273. package/lib/templates/templates/rust/Cargo.toml +14 -0
  274. package/lib/templates/templates/rust/README.md +39 -0
  275. package/lib/templates/templates/rust/build.rs +4 -0
  276. package/lib/templates/templates/rust/lib.rs +284 -0
  277. package/lib/templates/templates/typescript/README.md +96 -0
  278. package/lib/templates/templates/typescript/VectraClient.ts +374 -0
  279. package/lib/templates/typescript/VectraClient.d.ts +114 -0
  280. package/lib/templates/typescript/VectraClient.d.ts.map +1 -0
  281. package/lib/templates/typescript/VectraClient.js +328 -0
  282. package/lib/templates/typescript/VectraClient.js.map +1 -0
  283. package/lib/types.d.ts +153 -0
  284. package/lib/types.d.ts.map +1 -0
  285. package/lib/types.js +3 -0
  286. package/lib/types.js.map +1 -0
  287. package/lib/utils/index.d.ts +2 -0
  288. package/lib/utils/index.d.ts.map +1 -0
  289. package/lib/utils/index.js +18 -0
  290. package/lib/utils/index.js.map +1 -0
  291. package/lib/utils/pathUtils.d.ts +40 -0
  292. package/lib/utils/pathUtils.d.ts.map +1 -0
  293. package/lib/utils/pathUtils.js +98 -0
  294. package/lib/utils/pathUtils.js.map +1 -0
  295. package/lib/vectra-cli.d.ts +2 -0
  296. package/lib/vectra-cli.d.ts.map +1 -1
  297. package/lib/vectra-cli.generate.spec.d.ts +2 -0
  298. package/lib/vectra-cli.generate.spec.d.ts.map +1 -0
  299. package/lib/vectra-cli.generate.spec.js +112 -0
  300. package/lib/vectra-cli.generate.spec.js.map +1 -0
  301. package/lib/vectra-cli.js +760 -0
  302. package/lib/vectra-cli.js.map +1 -0
  303. package/lib/vectra-cli.spec.d.ts +1 -0
  304. package/lib/vectra-cli.spec.d.ts.map +1 -0
  305. package/lib/vectra-cli.spec.js +2 -0
  306. package/lib/vectra-cli.spec.js.map +1 -0
  307. package/package.json +91 -16
  308. package/proto/vectra_service.proto +276 -0
  309. package/src/BrowserWebFetcher.ts +345 -0
  310. package/src/FileFetcher.spec.ts +234 -0
  311. package/src/FileFetcher.ts +37 -25
  312. package/src/FolderWatcher.spec.ts +288 -0
  313. package/src/FolderWatcher.ts +304 -0
  314. package/src/GPT3Tokenizer.spec.ts +50 -0
  315. package/src/ItemSelector.spec.ts +252 -0
  316. package/src/ItemSelector.ts +163 -150
  317. package/src/LocalDocument.spec.ts +211 -0
  318. package/src/LocalDocument.ts +88 -94
  319. package/src/LocalDocumentIndex.spec.ts +481 -0
  320. package/src/LocalDocumentIndex.ts +39 -40
  321. package/src/LocalDocumentResult.spec.ts +373 -0
  322. package/src/LocalDocumentResult.ts +489 -319
  323. package/src/LocalEmbeddings.spec.ts +138 -0
  324. package/src/LocalEmbeddings.ts +120 -0
  325. package/src/LocalIndex.spec.ts +808 -66
  326. package/src/LocalIndex.ts +479 -429
  327. package/src/OpenAIEmbeddings.spec.ts +354 -0
  328. package/src/OpenAIEmbeddings.ts +26 -27
  329. package/src/TextSplitter.spec.ts +342 -0
  330. package/src/TextSplitter.ts +517 -532
  331. package/src/TransformersEmbeddings.spec.ts +188 -0
  332. package/src/TransformersEmbeddings.ts +232 -0
  333. package/src/TransformersTokenizer.spec.ts +143 -0
  334. package/src/TransformersTokenizer.ts +45 -0
  335. package/src/WebFetcher.spec.ts +288 -0
  336. package/src/WebFetcher.ts +184 -186
  337. package/src/browser.ts +69 -0
  338. package/src/codecs/IndexCodec.ts +40 -0
  339. package/src/codecs/JsonCodec.spec.ts +70 -0
  340. package/src/codecs/JsonCodec.ts +37 -0
  341. package/src/codecs/LocalIndex.protobuf.spec.ts +115 -0
  342. package/src/codecs/ProtobufCodec.spec.ts +166 -0
  343. package/src/codecs/ProtobufCodec.ts +193 -0
  344. package/src/codecs/index.ts +4 -0
  345. package/src/codecs/migrateIndex.spec.ts +176 -0
  346. package/src/codecs/migrateIndex.ts +125 -0
  347. package/src/codecs/schemas/index.proto +34 -0
  348. package/src/index.ts +9 -1
  349. package/src/internals/Colorize.ts +19 -16
  350. package/src/server/IndexManager.ts +243 -0
  351. package/src/server/VectraServer.spec.ts +303 -0
  352. package/src/server/VectraServer.ts +156 -0
  353. package/src/server/handlers/documentHandlers.ts +59 -0
  354. package/src/server/handlers/helpers.ts +93 -0
  355. package/src/server/handlers/index.ts +7 -0
  356. package/src/server/handlers/indexHandlers.ts +44 -0
  357. package/src/server/handlers/itemHandlers.ts +140 -0
  358. package/src/server/handlers/lifecycleHandlers.ts +26 -0
  359. package/src/server/handlers/queryHandlers.ts +96 -0
  360. package/src/server/handlers/statsHandlers.ts +38 -0
  361. package/src/server/index.ts +3 -0
  362. package/src/storage/FileStorage.ts +105 -0
  363. package/src/storage/FileStorageUtilities.spec.ts +106 -0
  364. package/src/storage/FileStorageUtilities.ts +77 -0
  365. package/src/storage/FileType.ts +61 -0
  366. package/src/storage/IndexedDBStorage.ts +365 -0
  367. package/src/storage/LocalFileStorage.browser.ts +52 -0
  368. package/src/storage/LocalFileStorage.spec.ts +292 -0
  369. package/src/storage/LocalFileStorage.ts +98 -0
  370. package/src/storage/VirtualFileStorage.spec.ts +307 -0
  371. package/src/storage/VirtualFileStorage.ts +169 -0
  372. package/src/storage/index.ts +5 -0
  373. package/src/templates/csharp/README.md +48 -0
  374. package/src/templates/csharp/VectraClient.cs +234 -0
  375. package/src/templates/go/README.md +71 -0
  376. package/src/templates/go/vectra_client.go +322 -0
  377. package/src/templates/java/README.md +81 -0
  378. package/src/templates/java/VectraClient.java +232 -0
  379. package/src/templates/python/README.md +37 -0
  380. package/src/templates/python/vectra_client.py +279 -0
  381. package/src/templates/rust/Cargo.toml +14 -0
  382. package/src/templates/rust/README.md +39 -0
  383. package/src/templates/rust/build.rs +4 -0
  384. package/src/templates/rust/lib.rs +284 -0
  385. package/src/templates/typescript/README.md +96 -0
  386. package/src/templates/typescript/VectraClient.ts +374 -0
  387. package/src/types.ts +131 -123
  388. package/src/utils/index.ts +1 -0
  389. package/src/utils/pathUtils.ts +106 -0
  390. package/src/vectra-cli.generate.spec.ts +72 -0
  391. package/src/vectra-cli.spec.ts +0 -0
  392. package/src/vectra-cli.ts +687 -246
@@ -0,0 +1,232 @@
1
+ // Vectra gRPC client — thin idiomatic wrapper over generated stubs.
2
+ //
3
+ // Usage:
4
+ // try (VectraClient client = new VectraClient()) {
5
+ // List<DocumentResult> results = client.queryDocuments("my-index", "search query");
6
+ // }
7
+ //
8
+ // Generate stubs first (see README.md).
9
+
10
+ package io.github.vectra.client;
11
+
12
+ import com.google.protobuf.util.JsonFormat;
13
+ import io.grpc.ManagedChannel;
14
+ import io.grpc.ManagedChannelBuilder;
15
+ import vectra.VectraServiceGrpc;
16
+ import vectra.VectraServiceProto.*;
17
+
18
+ import java.util.*;
19
+ import java.util.concurrent.TimeUnit;
20
+ import java.util.stream.Collectors;
21
+
22
+ /**
23
+ * Idiomatic Java client for the Vectra gRPC server.
24
+ */
25
+ public class VectraClient implements AutoCloseable {
26
+ private final ManagedChannel channel;
27
+ private final VectraServiceGrpc.VectraServiceBlockingStub stub;
28
+
29
+ public VectraClient() {
30
+ this("127.0.0.1", 50051);
31
+ }
32
+
33
+ public VectraClient(String host, int port) {
34
+ this.channel = ManagedChannelBuilder.forAddress(host, port)
35
+ .usePlaintext()
36
+ .build();
37
+ this.stub = VectraServiceGrpc.newBlockingStub(channel);
38
+ }
39
+
40
+ @Override
41
+ public void close() {
42
+ try {
43
+ channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
44
+ } catch (InterruptedException e) {
45
+ channel.shutdownNow();
46
+ Thread.currentThread().interrupt();
47
+ }
48
+ }
49
+
50
+ // ── Index Management ──────────────────────────────────
51
+
52
+ public void createIndex(String name) {
53
+ createIndex(name, "json", false, 512, 0);
54
+ }
55
+
56
+ public void createIndex(String name, String format, boolean isDocumentIndex,
57
+ int chunkSize, int chunkOverlap) {
58
+ CreateIndexRequest.Builder req = CreateIndexRequest.newBuilder()
59
+ .setIndexName(name)
60
+ .setFormat(format)
61
+ .setIsDocumentIndex(isDocumentIndex);
62
+ if (isDocumentIndex) {
63
+ req.setDocumentConfig(DocumentIndexConfig.newBuilder()
64
+ .setVersion(1)
65
+ .setChunkSize(chunkSize)
66
+ .setChunkOverlap(chunkOverlap)
67
+ .build());
68
+ }
69
+ stub.createIndex(req.build());
70
+ }
71
+
72
+ public void deleteIndex(String name) {
73
+ stub.deleteIndex(DeleteIndexRequest.newBuilder().setIndexName(name).build());
74
+ }
75
+
76
+ public List<IndexInfo> listIndexes() {
77
+ ListIndexesResponse resp = stub.listIndexes(ListIndexesRequest.getDefaultInstance());
78
+ return resp.getIndexesList();
79
+ }
80
+
81
+ // ── Item Operations ───────────────────────────────────
82
+
83
+ public String insertItem(String index, String text) {
84
+ return insertItem(index, text, null, null, "");
85
+ }
86
+
87
+ public String insertItem(String index, String text, List<Float> vector,
88
+ Map<String, MetadataValue> metadata, String id) {
89
+ InsertItemRequest.Builder req = InsertItemRequest.newBuilder()
90
+ .setIndexName(index)
91
+ .setText(text)
92
+ .setId(id != null ? id : "");
93
+ if (vector != null) req.addAllVector(vector);
94
+ if (metadata != null) req.putAllMetadata(metadata);
95
+ return stub.insertItem(req.build()).getId();
96
+ }
97
+
98
+ public String upsertItem(String index, String id, String text, List<Float> vector,
99
+ Map<String, MetadataValue> metadata) {
100
+ UpsertItemRequest.Builder req = UpsertItemRequest.newBuilder()
101
+ .setIndexName(index)
102
+ .setId(id)
103
+ .setText(text);
104
+ if (vector != null) req.addAllVector(vector);
105
+ if (metadata != null) req.putAllMetadata(metadata);
106
+ return stub.upsertItem(req.build()).getId();
107
+ }
108
+
109
+ public ItemResult getItem(String index, String id) {
110
+ GetItemResponse resp = stub.getItem(
111
+ GetItemRequest.newBuilder().setIndexName(index).setId(id).build());
112
+ return resp.hasItem() ? resp.getItem() : null;
113
+ }
114
+
115
+ public void deleteItem(String index, String id) {
116
+ stub.deleteItem(DeleteItemRequest.newBuilder().setIndexName(index).setId(id).build());
117
+ }
118
+
119
+ public List<ItemResult> listItems(String index) {
120
+ return listItems(index, null);
121
+ }
122
+
123
+ public List<ItemResult> listItems(String index, String filterJson) {
124
+ ListItemsRequest.Builder req = ListItemsRequest.newBuilder().setIndexName(index);
125
+ if (filterJson != null && !filterJson.isEmpty()) {
126
+ req.setFilter(MetadataFilter.newBuilder().setFilterJson(filterJson).build());
127
+ }
128
+ return stub.listItems(req.build()).getItemsList();
129
+ }
130
+
131
+ // ── Query ─────────────────────────────────────────────
132
+
133
+ public List<ItemResult> queryItems(String index, String text, int topK) {
134
+ return queryItems(index, text, topK, null);
135
+ }
136
+
137
+ public List<ItemResult> queryItems(String index, String text, int topK, String filterJson) {
138
+ QueryItemsRequest.Builder req = QueryItemsRequest.newBuilder()
139
+ .setIndexName(index)
140
+ .setText(text)
141
+ .setTopK(topK);
142
+ if (filterJson != null && !filterJson.isEmpty()) {
143
+ req.setFilter(MetadataFilter.newBuilder().setFilterJson(filterJson).build());
144
+ }
145
+ return stub.queryItems(req.build()).getResultsList();
146
+ }
147
+
148
+ public List<DocumentResult> queryDocuments(String index, String query) {
149
+ return queryDocuments(index, query, 10, 50, null, false);
150
+ }
151
+
152
+ public List<DocumentResult> queryDocuments(String index, String query,
153
+ int maxDocuments, int maxChunks,
154
+ String filterJson, boolean useBm25) {
155
+ QueryDocumentsRequest.Builder req = QueryDocumentsRequest.newBuilder()
156
+ .setIndexName(index)
157
+ .setQuery(query)
158
+ .setMaxDocuments(maxDocuments)
159
+ .setMaxChunks(maxChunks)
160
+ .setUseBm25(useBm25);
161
+ if (filterJson != null && !filterJson.isEmpty()) {
162
+ req.setFilter(MetadataFilter.newBuilder().setFilterJson(filterJson).build());
163
+ }
164
+ return stub.queryDocuments(req.build()).getResultsList();
165
+ }
166
+
167
+ // ── Document Operations ───────────────────────────────
168
+
169
+ public String upsertDocument(String index, String uri, String text) {
170
+ return upsertDocument(index, uri, text, "", null);
171
+ }
172
+
173
+ public String upsertDocument(String index, String uri, String text,
174
+ String docType, Map<String, MetadataValue> metadata) {
175
+ UpsertDocumentRequest.Builder req = UpsertDocumentRequest.newBuilder()
176
+ .setIndexName(index)
177
+ .setUri(uri)
178
+ .setText(text)
179
+ .setDocType(docType != null ? docType : "");
180
+ if (metadata != null) req.putAllMetadata(metadata);
181
+ return stub.upsertDocument(req.build()).getDocumentId();
182
+ }
183
+
184
+ public void deleteDocument(String index, String uri) {
185
+ stub.deleteDocument(DeleteDocumentRequest.newBuilder()
186
+ .setIndexName(index).setUri(uri).build());
187
+ }
188
+
189
+ public List<DocumentInfo> listDocuments(String index) {
190
+ return stub.listDocuments(ListDocumentsRequest.newBuilder()
191
+ .setIndexName(index).build()).getDocumentsList();
192
+ }
193
+
194
+ // ── Stats ─────────────────────────────────────────────
195
+
196
+ public GetIndexStatsResponse getIndexStats(String index) {
197
+ return stub.getIndexStats(
198
+ GetIndexStatsRequest.newBuilder().setIndexName(index).build());
199
+ }
200
+
201
+ public GetCatalogStatsResponse getCatalogStats(String index) {
202
+ return stub.getCatalogStats(
203
+ GetCatalogStatsRequest.newBuilder().setIndexName(index).build());
204
+ }
205
+
206
+ // ── Lifecycle ─────────────────────────────────────────
207
+
208
+ public HealthcheckResponse healthcheck() {
209
+ return stub.healthcheck(HealthcheckRequest.getDefaultInstance());
210
+ }
211
+
212
+ public void shutdown() {
213
+ stub.shutdown(ShutdownRequest.getDefaultInstance());
214
+ }
215
+
216
+ // ── Helpers ───────────────────────────────────────────
217
+
218
+ /** Create a string metadata value. */
219
+ public static MetadataValue metaString(String s) {
220
+ return MetadataValue.newBuilder().setStringValue(s).build();
221
+ }
222
+
223
+ /** Create a numeric metadata value. */
224
+ public static MetadataValue metaNumber(double n) {
225
+ return MetadataValue.newBuilder().setNumberValue(n).build();
226
+ }
227
+
228
+ /** Create a boolean metadata value. */
229
+ public static MetadataValue metaBool(boolean b) {
230
+ return MetadataValue.newBuilder().setBoolValue(b).build();
231
+ }
232
+ }
@@ -0,0 +1,37 @@
1
+ # Vectra Python Client
2
+
3
+ Thin idiomatic Python wrapper over the Vectra gRPC service.
4
+
5
+ ## Prerequisites
6
+
7
+ ```bash
8
+ pip install grpcio grpcio-tools
9
+ ```
10
+
11
+ ## Generate gRPC stubs
12
+
13
+ ```bash
14
+ python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. vectra_service.proto
15
+ ```
16
+
17
+ This produces `vectra_service_pb2.py` and `vectra_service_pb2_grpc.py`.
18
+
19
+ ## Usage
20
+
21
+ ```python
22
+ from vectra_client import VectraClient
23
+
24
+ with VectraClient() as client:
25
+ # Create a document index
26
+ client.create_index("my-index", is_document_index=True)
27
+
28
+ # Add a document
29
+ client.upsert_document("my-index", "doc1.txt", "Hello world...")
30
+
31
+ # Query
32
+ results = client.query_documents("my-index", "hello")
33
+ for doc in results:
34
+ print(f"{doc['uri']} (score: {doc['score']:.3f})")
35
+ for chunk in doc["chunks"]:
36
+ print(f" {chunk['text'][:80]}...")
37
+ ```
@@ -0,0 +1,279 @@
1
+ """Vectra gRPC client — thin idiomatic wrapper over generated stubs.
2
+
3
+ Usage:
4
+ from vectra_client import VectraClient
5
+
6
+ client = VectraClient() # localhost:50051
7
+ results = client.query_documents("my-index", "search query")
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import json
13
+ from typing import Any
14
+
15
+ import grpc
16
+
17
+ # Generated stubs — run `python -m grpc_tools.protoc` to produce these:
18
+ # python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. vectra_service.proto
19
+ import vectra_service_pb2 as pb2
20
+ import vectra_service_pb2_grpc as pb2_grpc
21
+
22
+
23
+ class VectraClient:
24
+ """Idiomatic Python client for the Vectra gRPC server."""
25
+
26
+ def __init__(self, host: str = "127.0.0.1", port: int = 50051):
27
+ self._channel = grpc.insecure_channel(f"{host}:{port}")
28
+ self._stub = pb2_grpc.VectraServiceStub(self._channel)
29
+
30
+ def close(self) -> None:
31
+ self._channel.close()
32
+
33
+ def __enter__(self) -> VectraClient:
34
+ return self
35
+
36
+ def __exit__(self, *_: Any) -> None:
37
+ self.close()
38
+
39
+ # ── Index Management ──────────────────────────────────
40
+
41
+ def create_index(
42
+ self,
43
+ name: str,
44
+ *,
45
+ format: str = "json",
46
+ is_document_index: bool = False,
47
+ chunk_size: int = 512,
48
+ chunk_overlap: int = 0,
49
+ ) -> None:
50
+ doc_config = pb2.DocumentIndexConfig(
51
+ version=1,
52
+ chunk_size=chunk_size,
53
+ chunk_overlap=chunk_overlap,
54
+ ) if is_document_index else None
55
+ self._stub.CreateIndex(pb2.CreateIndexRequest(
56
+ index_name=name,
57
+ format=format,
58
+ is_document_index=is_document_index,
59
+ document_config=doc_config,
60
+ ))
61
+
62
+ def delete_index(self, name: str) -> None:
63
+ self._stub.DeleteIndex(pb2.DeleteIndexRequest(index_name=name))
64
+
65
+ def list_indexes(self) -> list[dict[str, Any]]:
66
+ resp = self._stub.ListIndexes(pb2.ListIndexesRequest())
67
+ return [
68
+ {"name": idx.name, "format": idx.format, "is_document_index": idx.is_document_index}
69
+ for idx in resp.indexes
70
+ ]
71
+
72
+ # ── Item Operations ───────────────────────────────────
73
+
74
+ def insert_item(
75
+ self,
76
+ index: str,
77
+ *,
78
+ text: str = "",
79
+ vector: list[float] | None = None,
80
+ metadata: dict[str, Any] | None = None,
81
+ id: str = "",
82
+ ) -> str:
83
+ req = pb2.InsertItemRequest(
84
+ index_name=index,
85
+ text=text,
86
+ id=id,
87
+ )
88
+ if vector:
89
+ req.vector.extend(vector)
90
+ if metadata:
91
+ _set_metadata(req.metadata, metadata)
92
+ return self._stub.InsertItem(req).id
93
+
94
+ def upsert_item(
95
+ self,
96
+ index: str,
97
+ id: str,
98
+ *,
99
+ text: str = "",
100
+ vector: list[float] | None = None,
101
+ metadata: dict[str, Any] | None = None,
102
+ ) -> str:
103
+ req = pb2.UpsertItemRequest(
104
+ index_name=index,
105
+ id=id,
106
+ text=text,
107
+ )
108
+ if vector:
109
+ req.vector.extend(vector)
110
+ if metadata:
111
+ _set_metadata(req.metadata, metadata)
112
+ return self._stub.UpsertItem(req).id
113
+
114
+ def get_item(self, index: str, id: str) -> dict[str, Any] | None:
115
+ resp = self._stub.GetItem(pb2.GetItemRequest(index_name=index, id=id))
116
+ return _item_to_dict(resp.item) if resp.HasField("item") else None
117
+
118
+ def delete_item(self, index: str, id: str) -> None:
119
+ self._stub.DeleteItem(pb2.DeleteItemRequest(index_name=index, id=id))
120
+
121
+ def list_items(
122
+ self, index: str, *, filter: dict[str, Any] | None = None
123
+ ) -> list[dict[str, Any]]:
124
+ req = pb2.ListItemsRequest(index_name=index)
125
+ if filter:
126
+ req.filter.CopyFrom(pb2.MetadataFilter(filter_json=json.dumps(filter)))
127
+ resp = self._stub.ListItems(req)
128
+ return [_item_to_dict(item) for item in resp.items]
129
+
130
+ # ── Query ─────────────────────────────────────────────
131
+
132
+ def query_items(
133
+ self,
134
+ index: str,
135
+ *,
136
+ text: str = "",
137
+ vector: list[float] | None = None,
138
+ top_k: int = 10,
139
+ filter: dict[str, Any] | None = None,
140
+ ) -> list[dict[str, Any]]:
141
+ req = pb2.QueryItemsRequest(
142
+ index_name=index,
143
+ text=text,
144
+ top_k=top_k,
145
+ )
146
+ if vector:
147
+ req.vector.extend(vector)
148
+ if filter:
149
+ req.filter.CopyFrom(pb2.MetadataFilter(filter_json=json.dumps(filter)))
150
+ resp = self._stub.QueryItems(req)
151
+ return [_item_to_dict(r) for r in resp.results]
152
+
153
+ def query_documents(
154
+ self,
155
+ index: str,
156
+ query: str,
157
+ *,
158
+ max_documents: int = 10,
159
+ max_chunks: int = 50,
160
+ filter: dict[str, Any] | None = None,
161
+ use_bm25: bool = False,
162
+ ) -> list[dict[str, Any]]:
163
+ req = pb2.QueryDocumentsRequest(
164
+ index_name=index,
165
+ query=query,
166
+ max_documents=max_documents,
167
+ max_chunks=max_chunks,
168
+ use_bm25=use_bm25,
169
+ )
170
+ if filter:
171
+ req.filter.CopyFrom(pb2.MetadataFilter(filter_json=json.dumps(filter)))
172
+ resp = self._stub.QueryDocuments(req)
173
+ return [
174
+ {
175
+ "uri": doc.uri,
176
+ "document_id": doc.document_id,
177
+ "score": doc.score,
178
+ "chunks": [
179
+ {"text": c.text, "score": c.score, "token_count": c.token_count}
180
+ for c in doc.chunks
181
+ ],
182
+ }
183
+ for doc in resp.results
184
+ ]
185
+
186
+ # ── Document Operations ───────────────────────────────
187
+
188
+ def upsert_document(
189
+ self,
190
+ index: str,
191
+ uri: str,
192
+ text: str,
193
+ *,
194
+ doc_type: str = "",
195
+ metadata: dict[str, Any] | None = None,
196
+ ) -> str:
197
+ req = pb2.UpsertDocumentRequest(
198
+ index_name=index,
199
+ uri=uri,
200
+ text=text,
201
+ doc_type=doc_type,
202
+ )
203
+ if metadata:
204
+ _set_metadata(req.metadata, metadata)
205
+ return self._stub.UpsertDocument(req).document_id
206
+
207
+ def delete_document(self, index: str, uri: str) -> None:
208
+ self._stub.DeleteDocument(pb2.DeleteDocumentRequest(index_name=index, uri=uri))
209
+
210
+ def list_documents(self, index: str) -> list[dict[str, Any]]:
211
+ resp = self._stub.ListDocuments(pb2.ListDocumentsRequest(index_name=index))
212
+ return [{"uri": d.uri, "document_id": d.document_id} for d in resp.documents]
213
+
214
+ # ── Stats ─────────────────────────────────────────────
215
+
216
+ def get_index_stats(self, index: str) -> dict[str, Any]:
217
+ resp = self._stub.GetIndexStats(pb2.GetIndexStatsRequest(index_name=index))
218
+ return {
219
+ "version": resp.version,
220
+ "format": resp.format,
221
+ "item_count": resp.item_count,
222
+ "metadata_config_count": resp.metadata_config_count,
223
+ }
224
+
225
+ def get_catalog_stats(self, index: str) -> dict[str, Any]:
226
+ resp = self._stub.GetCatalogStats(pb2.GetCatalogStatsRequest(index_name=index))
227
+ return {
228
+ "version": resp.version,
229
+ "document_count": resp.document_count,
230
+ "chunk_count": resp.chunk_count,
231
+ "metadata_counts": dict(resp.metadata_counts),
232
+ }
233
+
234
+ # ── Lifecycle ─────────────────────────────────────────
235
+
236
+ def healthcheck(self) -> dict[str, Any]:
237
+ resp = self._stub.Healthcheck(pb2.HealthcheckRequest())
238
+ return {
239
+ "status": resp.status,
240
+ "uptime_seconds": resp.uptime_seconds,
241
+ "loaded_indexes": resp.loaded_indexes,
242
+ }
243
+
244
+ def shutdown(self) -> None:
245
+ self._stub.Shutdown(pb2.ShutdownRequest())
246
+
247
+
248
+ # ── Helpers ───────────────────────────────────────────────
249
+
250
+
251
+ def _set_metadata(
252
+ proto_map: Any, metadata: dict[str, Any]
253
+ ) -> None:
254
+ for key, value in metadata.items():
255
+ if isinstance(value, bool):
256
+ proto_map[key].CopyFrom(pb2.MetadataValue(bool_value=value))
257
+ elif isinstance(value, (int, float)):
258
+ proto_map[key].CopyFrom(pb2.MetadataValue(number_value=value))
259
+ else:
260
+ proto_map[key].CopyFrom(pb2.MetadataValue(string_value=str(value)))
261
+
262
+
263
+ def _item_to_dict(item: Any) -> dict[str, Any]:
264
+ metadata: dict[str, Any] = {}
265
+ for key, val in item.metadata.items():
266
+ which = val.WhichOneof("value")
267
+ if which == "string_value":
268
+ metadata[key] = val.string_value
269
+ elif which == "number_value":
270
+ metadata[key] = val.number_value
271
+ elif which == "bool_value":
272
+ metadata[key] = val.bool_value
273
+ return {
274
+ "id": item.id,
275
+ "metadata": metadata,
276
+ "vector": list(item.vector),
277
+ "norm": item.norm,
278
+ "score": item.score,
279
+ }
@@ -0,0 +1,14 @@
1
+ [package]
2
+ name = "vectra-client"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+ description = "Vectra gRPC client for Rust"
6
+ license = "MIT"
7
+
8
+ [dependencies]
9
+ tonic = "0.12"
10
+ prost = "0.13"
11
+ tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
12
+
13
+ [build-dependencies]
14
+ tonic-build = "0.12"
@@ -0,0 +1,39 @@
1
+ # Vectra Rust Client
2
+
3
+ Thin idiomatic Rust wrapper over the Vectra gRPC service.
4
+
5
+ ## Prerequisites
6
+
7
+ - Rust toolchain (`rustup`)
8
+ - `protoc` (Protocol Buffers compiler) — install via your package manager
9
+
10
+ ## Setup
11
+
12
+ 1. Copy the generated files (`vectra_service.proto`, `build.rs`, `Cargo.toml`, `lib.rs`) into your project.
13
+ 2. Place `vectra_service.proto` in the crate root (next to `Cargo.toml`).
14
+ 3. `tonic-build` in `build.rs` generates the stubs at compile time.
15
+
16
+ ## Usage
17
+
18
+ ```rust
19
+ use vectra_client::VectraClient;
20
+
21
+ #[tokio::main]
22
+ async fn main() -> Result<(), Box<dyn std::error::Error>> {
23
+ let mut client = VectraClient::connect("http://127.0.0.1:50051").await?;
24
+
25
+ // Create a document index
26
+ client.create_index("my-index", "json", true).await?;
27
+
28
+ // Add a document
29
+ client.upsert_document("my-index", "doc1.txt", "Hello world...", None, None).await?;
30
+
31
+ // Query
32
+ let results = client.query_documents("my-index", "hello", None).await?;
33
+ for doc in &results {
34
+ println!("{} (score: {:.3})", doc.uri, doc.score);
35
+ }
36
+
37
+ Ok(())
38
+ }
39
+ ```
@@ -0,0 +1,4 @@
1
+ fn main() -> Result<(), Box<dyn std::error::Error>> {
2
+ tonic_build::compile_protos("vectra_service.proto")?;
3
+ Ok(())
4
+ }