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,322 @@
1
+ // Package vectra provides an idiomatic Go client for the Vectra gRPC server.
2
+ //
3
+ // Usage:
4
+ //
5
+ // client, err := vectra.NewClient("127.0.0.1:50051")
6
+ // if err != nil {
7
+ // log.Fatal(err)
8
+ // }
9
+ // defer client.Close()
10
+ //
11
+ // results, err := client.QueryDocuments(ctx, "my-index", "search query", nil)
12
+ package vectra
13
+
14
+ import (
15
+ "context"
16
+ "encoding/json"
17
+ "fmt"
18
+
19
+ pb "your_module/vectra_service" // replace with your actual module path
20
+
21
+ "google.golang.org/grpc"
22
+ "google.golang.org/grpc/credentials/insecure"
23
+ )
24
+
25
+ // Client is an idiomatic Go client for the Vectra gRPC server.
26
+ type Client struct {
27
+ conn *grpc.ClientConn
28
+ stub pb.VectraServiceClient
29
+ }
30
+
31
+ // NewClient connects to a Vectra gRPC server at the given address.
32
+ func NewClient(addr string) (*Client, error) {
33
+ conn, err := grpc.NewClient(addr, grpc.WithTransportCredentials(insecure.NewCredentials()))
34
+ if err != nil {
35
+ return nil, fmt.Errorf("vectra: dial %s: %w", addr, err)
36
+ }
37
+ return &Client{conn: conn, stub: pb.NewVectraServiceClient(conn)}, nil
38
+ }
39
+
40
+ // Close releases the underlying gRPC connection.
41
+ func (c *Client) Close() error {
42
+ return c.conn.Close()
43
+ }
44
+
45
+ // ── Index Management ──────────────────────────────────
46
+
47
+ // CreateIndex creates a new index on the server.
48
+ func (c *Client) CreateIndex(ctx context.Context, name, format string, isDocumentIndex bool) error {
49
+ req := &pb.CreateIndexRequest{
50
+ IndexName: name,
51
+ Format: format,
52
+ IsDocumentIndex: isDocumentIndex,
53
+ }
54
+ if isDocumentIndex {
55
+ req.DocumentConfig = &pb.DocumentIndexConfig{
56
+ Version: 1,
57
+ ChunkSize: 512,
58
+ }
59
+ }
60
+ _, err := c.stub.CreateIndex(ctx, req)
61
+ return err
62
+ }
63
+
64
+ // DeleteIndex deletes an index from the server.
65
+ func (c *Client) DeleteIndex(ctx context.Context, name string) error {
66
+ _, err := c.stub.DeleteIndex(ctx, &pb.DeleteIndexRequest{IndexName: name})
67
+ return err
68
+ }
69
+
70
+ // IndexInfo holds summary information about an index.
71
+ type IndexInfo struct {
72
+ Name string
73
+ Format string
74
+ IsDocumentIndex bool
75
+ }
76
+
77
+ // ListIndexes returns all indexes managed by the server.
78
+ func (c *Client) ListIndexes(ctx context.Context) ([]IndexInfo, error) {
79
+ resp, err := c.stub.ListIndexes(ctx, &pb.ListIndexesRequest{})
80
+ if err != nil {
81
+ return nil, err
82
+ }
83
+ out := make([]IndexInfo, len(resp.Indexes))
84
+ for i, idx := range resp.Indexes {
85
+ out[i] = IndexInfo{Name: idx.Name, Format: idx.Format, IsDocumentIndex: idx.IsDocumentIndex}
86
+ }
87
+ return out, nil
88
+ }
89
+
90
+ // ── Item Operations ───────────────────────────────────
91
+
92
+ // InsertItem adds a new item to an index. Returns the assigned ID.
93
+ func (c *Client) InsertItem(ctx context.Context, index, text string, vector []float32, metadata map[string]*pb.MetadataValue, id string) (string, error) {
94
+ req := &pb.InsertItemRequest{
95
+ IndexName: index,
96
+ Text: text,
97
+ Vector: vector,
98
+ Metadata: metadata,
99
+ Id: id,
100
+ }
101
+ resp, err := c.stub.InsertItem(ctx, req)
102
+ if err != nil {
103
+ return "", err
104
+ }
105
+ return resp.Id, nil
106
+ }
107
+
108
+ // UpsertItem inserts or updates an item. Returns the ID.
109
+ func (c *Client) UpsertItem(ctx context.Context, index, id, text string, vector []float32, metadata map[string]*pb.MetadataValue) (string, error) {
110
+ req := &pb.UpsertItemRequest{
111
+ IndexName: index,
112
+ Id: id,
113
+ Text: text,
114
+ Vector: vector,
115
+ Metadata: metadata,
116
+ }
117
+ resp, err := c.stub.UpsertItem(ctx, req)
118
+ if err != nil {
119
+ return "", err
120
+ }
121
+ return resp.Id, nil
122
+ }
123
+
124
+ // GetItem retrieves a single item by ID.
125
+ func (c *Client) GetItem(ctx context.Context, index, id string) (*pb.ItemResult, error) {
126
+ resp, err := c.stub.GetItem(ctx, &pb.GetItemRequest{IndexName: index, Id: id})
127
+ if err != nil {
128
+ return nil, err
129
+ }
130
+ return resp.Item, nil
131
+ }
132
+
133
+ // DeleteItem removes an item by ID.
134
+ func (c *Client) DeleteItem(ctx context.Context, index, id string) error {
135
+ _, err := c.stub.DeleteItem(ctx, &pb.DeleteItemRequest{IndexName: index, Id: id})
136
+ return err
137
+ }
138
+
139
+ // ListItems returns items in an index, optionally filtered.
140
+ // filterJSON should be a JSON string with MongoDB-style filter operators, or empty.
141
+ func (c *Client) ListItems(ctx context.Context, index, filterJSON string) ([]*pb.ItemResult, error) {
142
+ req := &pb.ListItemsRequest{IndexName: index}
143
+ if filterJSON != "" {
144
+ req.Filter = &pb.MetadataFilter{FilterJson: filterJSON}
145
+ }
146
+ resp, err := c.stub.ListItems(ctx, req)
147
+ if err != nil {
148
+ return nil, err
149
+ }
150
+ return resp.Items, nil
151
+ }
152
+
153
+ // ── Query ─────────────────────────────────────────────
154
+
155
+ // QueryItems performs a vector similarity query. Returns ranked results.
156
+ func (c *Client) QueryItems(ctx context.Context, index, text string, topK uint32, filterJSON string) ([]*pb.ItemResult, error) {
157
+ req := &pb.QueryItemsRequest{
158
+ IndexName: index,
159
+ Text: text,
160
+ TopK: topK,
161
+ }
162
+ if filterJSON != "" {
163
+ req.Filter = &pb.MetadataFilter{FilterJson: filterJSON}
164
+ }
165
+ resp, err := c.stub.QueryItems(ctx, req)
166
+ if err != nil {
167
+ return nil, err
168
+ }
169
+ return resp.Results, nil
170
+ }
171
+
172
+ // QueryDocumentsOpts holds optional parameters for QueryDocuments.
173
+ type QueryDocumentsOpts struct {
174
+ MaxDocuments uint32
175
+ MaxChunks uint32
176
+ FilterJSON string
177
+ UseBM25 bool
178
+ }
179
+
180
+ // QueryDocuments performs a document-level semantic search.
181
+ func (c *Client) QueryDocuments(ctx context.Context, index, query string, opts *QueryDocumentsOpts) ([]*pb.DocumentResult, error) {
182
+ req := &pb.QueryDocumentsRequest{
183
+ IndexName: index,
184
+ Query: query,
185
+ MaxDocuments: 10,
186
+ MaxChunks: 50,
187
+ }
188
+ if opts != nil {
189
+ if opts.MaxDocuments > 0 {
190
+ req.MaxDocuments = opts.MaxDocuments
191
+ }
192
+ if opts.MaxChunks > 0 {
193
+ req.MaxChunks = opts.MaxChunks
194
+ }
195
+ if opts.FilterJSON != "" {
196
+ req.Filter = &pb.MetadataFilter{FilterJson: opts.FilterJSON}
197
+ }
198
+ req.UseBm25 = opts.UseBM25
199
+ }
200
+ resp, err := c.stub.QueryDocuments(ctx, req)
201
+ if err != nil {
202
+ return nil, err
203
+ }
204
+ return resp.Results, nil
205
+ }
206
+
207
+ // ── Document Operations ───────────────────────────────
208
+
209
+ // UpsertDocument inserts or updates a document. Returns the document ID.
210
+ func (c *Client) UpsertDocument(ctx context.Context, index, uri, text, docType string, metadata map[string]*pb.MetadataValue) (string, error) {
211
+ req := &pb.UpsertDocumentRequest{
212
+ IndexName: index,
213
+ Uri: uri,
214
+ Text: text,
215
+ DocType: docType,
216
+ Metadata: metadata,
217
+ }
218
+ resp, err := c.stub.UpsertDocument(ctx, req)
219
+ if err != nil {
220
+ return "", err
221
+ }
222
+ return resp.DocumentId, nil
223
+ }
224
+
225
+ // DeleteDocument removes a document by URI.
226
+ func (c *Client) DeleteDocument(ctx context.Context, index, uri string) error {
227
+ _, err := c.stub.DeleteDocument(ctx, &pb.DeleteDocumentRequest{IndexName: index, Uri: uri})
228
+ return err
229
+ }
230
+
231
+ // DocumentInfo holds summary information about a document.
232
+ type DocumentInfo struct {
233
+ URI string
234
+ DocumentID string
235
+ }
236
+
237
+ // ListDocuments returns all documents in a document index.
238
+ func (c *Client) ListDocuments(ctx context.Context, index string) ([]DocumentInfo, error) {
239
+ resp, err := c.stub.ListDocuments(ctx, &pb.ListDocumentsRequest{IndexName: index})
240
+ if err != nil {
241
+ return nil, err
242
+ }
243
+ out := make([]DocumentInfo, len(resp.Documents))
244
+ for i, d := range resp.Documents {
245
+ out[i] = DocumentInfo{URI: d.Uri, DocumentID: d.DocumentId}
246
+ }
247
+ return out, nil
248
+ }
249
+
250
+ // ── Stats ─────────────────────────────────────────────
251
+
252
+ // GetIndexStats returns statistics for an index.
253
+ func (c *Client) GetIndexStats(ctx context.Context, index string) (*pb.GetIndexStatsResponse, error) {
254
+ resp, err := c.stub.GetIndexStats(ctx, &pb.GetIndexStatsRequest{IndexName: index})
255
+ if err != nil {
256
+ return nil, err
257
+ }
258
+ return resp, nil
259
+ }
260
+
261
+ // GetCatalogStats returns catalog statistics for a document index.
262
+ func (c *Client) GetCatalogStats(ctx context.Context, index string) (*pb.GetCatalogStatsResponse, error) {
263
+ resp, err := c.stub.GetCatalogStats(ctx, &pb.GetCatalogStatsRequest{IndexName: index})
264
+ if err != nil {
265
+ return nil, err
266
+ }
267
+ return resp, nil
268
+ }
269
+
270
+ // ── Lifecycle ─────────────────────────────────────────
271
+
272
+ // HealthcheckResult holds the server health status.
273
+ type HealthcheckResult struct {
274
+ Status string
275
+ UptimeSeconds float64
276
+ LoadedIndexes int32
277
+ }
278
+
279
+ // Healthcheck returns the server's health status.
280
+ func (c *Client) Healthcheck(ctx context.Context) (*HealthcheckResult, error) {
281
+ resp, err := c.stub.Healthcheck(ctx, &pb.HealthcheckRequest{})
282
+ if err != nil {
283
+ return nil, err
284
+ }
285
+ return &HealthcheckResult{
286
+ Status: resp.Status,
287
+ UptimeSeconds: resp.UptimeSeconds,
288
+ LoadedIndexes: resp.LoadedIndexes,
289
+ }, nil
290
+ }
291
+
292
+ // Shutdown requests a graceful server shutdown.
293
+ func (c *Client) Shutdown(ctx context.Context) error {
294
+ _, err := c.stub.Shutdown(ctx, &pb.ShutdownRequest{})
295
+ return err
296
+ }
297
+
298
+ // ── Helpers ───────────────────────────────────────────
299
+
300
+ // MetaString creates a string metadata value.
301
+ func MetaString(s string) *pb.MetadataValue {
302
+ return &pb.MetadataValue{Value: &pb.MetadataValue_StringValue{StringValue: s}}
303
+ }
304
+
305
+ // MetaNumber creates a numeric metadata value.
306
+ func MetaNumber(n float64) *pb.MetadataValue {
307
+ return &pb.MetadataValue{Value: &pb.MetadataValue_NumberValue{NumberValue: n}}
308
+ }
309
+
310
+ // MetaBool creates a boolean metadata value.
311
+ func MetaBool(b bool) *pb.MetadataValue {
312
+ return &pb.MetadataValue{Value: &pb.MetadataValue_BoolValue{BoolValue: b}}
313
+ }
314
+
315
+ // FilterJSON marshals a map into a JSON string suitable for filter parameters.
316
+ func FilterJSON(filter map[string]interface{}) (string, error) {
317
+ b, err := json.Marshal(filter)
318
+ if err != nil {
319
+ return "", fmt.Errorf("vectra: marshal filter: %w", err)
320
+ }
321
+ return string(b), nil
322
+ }
@@ -0,0 +1,81 @@
1
+ # Vectra Java Client
2
+
3
+ Thin idiomatic Java wrapper over the Vectra gRPC service.
4
+
5
+ ## Prerequisites
6
+
7
+ Add gRPC dependencies to your build tool.
8
+
9
+ ### Gradle
10
+
11
+ ```groovy
12
+ plugins {
13
+ id 'com.google.protobuf' version '0.9.4'
14
+ }
15
+
16
+ dependencies {
17
+ implementation 'io.grpc:grpc-netty-shaded:1.65.0'
18
+ implementation 'io.grpc:grpc-protobuf:1.65.0'
19
+ implementation 'io.grpc:grpc-stub:1.65.0'
20
+ compileOnly 'javax.annotation:javax.annotation-api:1.3.2'
21
+ }
22
+
23
+ protobuf {
24
+ protoc { artifact = 'com.google.protobuf:protoc:3.25.3' }
25
+ plugins {
26
+ grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.65.0' }
27
+ }
28
+ generateProtoTasks {
29
+ all()*.plugins { grpc {} }
30
+ }
31
+ }
32
+ ```
33
+
34
+ ### Maven
35
+
36
+ ```xml
37
+ <dependencies>
38
+ <dependency>
39
+ <groupId>io.grpc</groupId>
40
+ <artifactId>grpc-netty-shaded</artifactId>
41
+ <version>1.65.0</version>
42
+ </dependency>
43
+ <dependency>
44
+ <groupId>io.grpc</groupId>
45
+ <artifactId>grpc-protobuf</artifactId>
46
+ <version>1.65.0</version>
47
+ </dependency>
48
+ <dependency>
49
+ <groupId>io.grpc</groupId>
50
+ <artifactId>grpc-stub</artifactId>
51
+ <version>1.65.0</version>
52
+ </dependency>
53
+ </dependencies>
54
+ ```
55
+
56
+ ## Generate gRPC stubs
57
+
58
+ Place `vectra_service.proto` in `src/main/proto/`. With the Gradle protobuf plugin or Maven gRPC plugin, stubs are generated automatically at build time.
59
+
60
+ ## Usage
61
+
62
+ ```java
63
+ import io.github.vectra.client.VectraClient;
64
+
65
+ try (VectraClient client = new VectraClient()) {
66
+ // Create a document index
67
+ client.createIndex("my-index", "json", true, 512, 0);
68
+
69
+ // Add a document
70
+ client.upsertDocument("my-index", "doc1.txt", "Hello world...");
71
+
72
+ // Query
73
+ var results = client.queryDocuments("my-index", "hello");
74
+ for (var doc : results) {
75
+ System.out.printf("%s (score: %.3f)%n", doc.getUri(), doc.getScore());
76
+ for (var chunk : doc.getChunksList()) {
77
+ System.out.printf(" %s...%n", chunk.getText().substring(0, Math.min(80, chunk.getText().length())));
78
+ }
79
+ }
80
+ }
81
+ ```
@@ -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
+ ```