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,354 @@
1
+ import assert from 'node:assert';
2
+ import sinon from 'sinon';
3
+ import {
4
+ OpenAIEmbeddings,
5
+ AzureOpenAIEmbeddingsOptions,
6
+ OSSEmbeddingsOptions,
7
+ OpenAIEmbeddingsOptions
8
+ } from './OpenAIEmbeddings';
9
+
10
+ describe('OpenAIEmbeddings', () => {
11
+ let sandbox: sinon.SinonSandbox;
12
+ let fetchStub: sinon.SinonStub;
13
+
14
+ function makeFetchResponse(status: number, data: any, statusText = ''): Response {
15
+ return {
16
+ status,
17
+ statusText,
18
+ ok: status >= 200 && status < 300,
19
+ headers: new Headers(),
20
+ json: async () => data,
21
+ text: async () => JSON.stringify(data),
22
+ } as Response;
23
+ }
24
+
25
+ const successData = {
26
+ object: 'list',
27
+ model: 'any',
28
+ data: [
29
+ { index: 0, object: 'embedding', embedding: [0.1, 0.2] }
30
+ ],
31
+ usage: { prompt_tokens: 1, total_tokens: 1 }
32
+ };
33
+
34
+ beforeEach(() => {
35
+ sandbox = sinon.createSandbox();
36
+ fetchStub = sandbox.stub(globalThis, 'fetch');
37
+ });
38
+
39
+ afterEach(() => {
40
+ sandbox.restore();
41
+ });
42
+
43
+ it('Azure: trims trailing slash, enforces https, defaults apiVersion and maxTokens', () => {
44
+ const inst = new OpenAIEmbeddings({
45
+ azureApiKey: 'key',
46
+ azureEndpoint: 'https://example.com/',
47
+ azureDeployment: 'dep'
48
+ } as AzureOpenAIEmbeddingsOptions);
49
+
50
+ const opts = (inst as any).options as AzureOpenAIEmbeddingsOptions;
51
+ assert.strictEqual(opts.azureEndpoint, 'https://example.com');
52
+ assert.strictEqual(opts.azureApiVersion, '2023-05-15');
53
+ assert.strictEqual(inst.maxTokens, 500);
54
+
55
+ // Private enum: ClientType.AzureOpenAI == 1
56
+ assert.strictEqual((inst as any)._clientType, 1);
57
+ });
58
+
59
+ it('Azure: throws for non-https endpoint', () => {
60
+ assert.throws(() => {
61
+ new OpenAIEmbeddings({
62
+ azureApiKey: 'key',
63
+ azureEndpoint: 'http://example.com',
64
+ azureDeployment: 'dep'
65
+ } as AzureOpenAIEmbeddingsOptions);
66
+ }, /Client created with an invalid endpoint of 'http:\/\/example.com'. The endpoint must be a valid HTTPS url\./);
67
+ });
68
+
69
+ it('OSS: selects OSS client type, defaults retryPolicy, respects maxTokens', () => {
70
+ const inst = new OpenAIEmbeddings({
71
+ ossModel: 'oss-emb',
72
+ ossEndpoint: 'https://oss.example.com',
73
+ maxTokens: 1234
74
+ } as OSSEmbeddingsOptions);
75
+
76
+ const opts = (inst as any).options as OSSEmbeddingsOptions;
77
+ assert.deepStrictEqual(opts.retryPolicy, [2000, 5000]);
78
+ assert.strictEqual(inst.maxTokens, 1234);
79
+
80
+ // Private enum: ClientType.OSS == 2
81
+ assert.strictEqual((inst as any)._clientType, 2);
82
+ });
83
+
84
+ it('OpenAI: selects OpenAI client type and defaults retryPolicy', () => {
85
+ const inst = new OpenAIEmbeddings({
86
+ apiKey: 'sk',
87
+ model: 'text-embedding-3-small'
88
+ } as OpenAIEmbeddingsOptions);
89
+
90
+ const opts = (inst as any).options as OpenAIEmbeddingsOptions;
91
+ assert.deepStrictEqual(opts.retryPolicy, [2000, 5000]);
92
+
93
+ // Private enum: ClientType.OpenAI == 0
94
+ assert.strictEqual((inst as any)._clientType, 0);
95
+ });
96
+
97
+ it('Azure: URL formation and dimensions passthrough', async () => {
98
+ fetchStub.resolves(makeFetchResponse(200, successData));
99
+
100
+ const inst = new OpenAIEmbeddings({
101
+ azureApiKey: 'key',
102
+ azureEndpoint: 'https://example.com/',
103
+ azureDeployment: 'dep',
104
+ dimensions: 256
105
+ } as AzureOpenAIEmbeddingsOptions);
106
+
107
+ await inst.createEmbeddings('hello');
108
+
109
+ const [url, init] = fetchStub.getCall(0).args;
110
+ assert.strictEqual(url, 'https://example.com/openai/deployments/dep/embeddings?api-version=2023-05-15');
111
+ const body = JSON.parse(init.body);
112
+ assert.strictEqual(body.input, 'hello');
113
+ assert.strictEqual(body.dimensions, 256);
114
+ });
115
+
116
+ it('OSS: URL formation and model injection', async () => {
117
+ fetchStub.resolves(makeFetchResponse(200, successData));
118
+
119
+ const inst = new OpenAIEmbeddings({
120
+ ossModel: 'oss-emb',
121
+ ossEndpoint: 'https://oss.example.com'
122
+ } as OSSEmbeddingsOptions);
123
+
124
+ await inst.createEmbeddings('text');
125
+ const [url, init] = fetchStub.getCall(0).args;
126
+ assert.strictEqual(url, 'https://oss.example.com/v1/embeddings');
127
+ const body = JSON.parse(init.body);
128
+ assert.strictEqual(body.input, 'text');
129
+ assert.strictEqual(body.model, 'oss-emb');
130
+ });
131
+
132
+ it('OpenAI: URL formation (default endpoint) and model injection', async () => {
133
+ fetchStub.resolves(makeFetchResponse(200, successData));
134
+
135
+ const inst = new OpenAIEmbeddings({
136
+ apiKey: 'sk',
137
+ model: 'm'
138
+ } as OpenAIEmbeddingsOptions);
139
+
140
+ await inst.createEmbeddings('x');
141
+ const [url, init] = fetchStub.getCall(0).args;
142
+ assert.strictEqual(url, 'https://api.openai.com/v1/embeddings');
143
+ const body = JSON.parse(init.body);
144
+ assert.strictEqual(body.model, 'm');
145
+ });
146
+
147
+ it('OpenAI: URL formation (custom endpoint)', async () => {
148
+ fetchStub.resolves(makeFetchResponse(200, successData));
149
+
150
+ const inst = new OpenAIEmbeddings({
151
+ apiKey: 'sk',
152
+ model: 'm',
153
+ endpoint: 'https://custom'
154
+ } as OpenAIEmbeddingsOptions);
155
+
156
+ await inst.createEmbeddings('x');
157
+ const [url] = fetchStub.getCall(0).args;
158
+ assert.strictEqual(url, 'https://custom/v1/embeddings');
159
+ });
160
+
161
+ it('Azure: headers include Content-Type, User-Agent, api-key', async () => {
162
+ fetchStub.resolves(makeFetchResponse(200, successData));
163
+
164
+ const inst = new OpenAIEmbeddings({
165
+ azureApiKey: 'key',
166
+ azureEndpoint: 'https://example.com/',
167
+ azureDeployment: 'dep'
168
+ } as AzureOpenAIEmbeddingsOptions);
169
+
170
+ await inst.createEmbeddings('x');
171
+ const [, init] = fetchStub.getCall(0).args;
172
+ const headers = new Headers(init.headers);
173
+ assert.strictEqual(headers.get('Content-Type'), 'application/json');
174
+ assert.strictEqual(headers.get('User-Agent'), 'AlphaWave');
175
+ assert.strictEqual(headers.get('api-key'), 'key');
176
+ });
177
+
178
+ it('OpenAI: headers include Authorization and OpenAI-Organization when provided', async () => {
179
+ fetchStub.resolves(makeFetchResponse(200, successData));
180
+
181
+ const inst = new OpenAIEmbeddings({
182
+ apiKey: 'sk',
183
+ model: 'm',
184
+ organization: 'org1'
185
+ } as OpenAIEmbeddingsOptions);
186
+
187
+ await inst.createEmbeddings('x');
188
+ const [, init] = fetchStub.getCall(0).args;
189
+ const headers = new Headers(init.headers);
190
+ assert.strictEqual(headers.get('Authorization'), 'Bearer sk');
191
+ assert.strictEqual(headers.get('OpenAI-Organization'), 'org1');
192
+ });
193
+
194
+ it('Respects pre-supplied headers from requestConfig and does not overwrite them', async () => {
195
+ fetchStub.resolves(makeFetchResponse(200, successData));
196
+
197
+ const inst = new OpenAIEmbeddings({
198
+ apiKey: 'sk',
199
+ model: 'm',
200
+ requestConfig: {
201
+ headers: {
202
+ 'Content-Type': 'application/x-custom',
203
+ 'User-Agent': 'MyUA',
204
+ 'X-Custom': '1'
205
+ }
206
+ }
207
+ } as OpenAIEmbeddingsOptions);
208
+
209
+ await inst.createEmbeddings('x');
210
+ const [, init] = fetchStub.getCall(0).args;
211
+ const headers = new Headers(init.headers);
212
+
213
+ assert.strictEqual(headers.get('Content-Type'), 'application/x-custom'); // preserved
214
+ assert.strictEqual(headers.get('User-Agent'), 'MyUA'); // preserved
215
+ assert.strictEqual(headers.get('X-Custom'), '1'); // preserved
216
+ assert.strictEqual(headers.get('Authorization'), 'Bearer sk'); // added
217
+ });
218
+
219
+ it('429 retry path obeys retryPolicy delays and eventually succeeds', async () => {
220
+ const clock = sandbox.useFakeTimers();
221
+
222
+ const resp429 = makeFetchResponse(429, {} as any);
223
+ const resp200 = makeFetchResponse(200, successData);
224
+
225
+ fetchStub.onCall(0).resolves(resp429);
226
+ fetchStub.onCall(1).resolves(resp429);
227
+ fetchStub.onCall(2).resolves(resp200);
228
+
229
+ const inst = new OpenAIEmbeddings({
230
+ apiKey: 'sk',
231
+ model: 'm',
232
+ retryPolicy: [10, 20]
233
+ } as OpenAIEmbeddingsOptions);
234
+
235
+ const p = inst.createEmbeddings('x');
236
+ await clock.tickAsync(10);
237
+ await clock.tickAsync(20);
238
+ const result = await p;
239
+
240
+ assert.strictEqual(fetchStub.callCount, 3);
241
+ assert.strictEqual(result.status, 'success');
242
+
243
+ clock.restore();
244
+ });
245
+
246
+ it('429 with empty retryPolicy returns rate_limited', async () => {
247
+ const resp429 = makeFetchResponse(429, {} as any);
248
+ fetchStub.resolves(resp429);
249
+
250
+ const inst = new OpenAIEmbeddings({
251
+ apiKey: 'sk',
252
+ model: 'm',
253
+ retryPolicy: []
254
+ } as OpenAIEmbeddingsOptions);
255
+
256
+ const result = await inst.createEmbeddings('x');
257
+ assert.strictEqual(result.status, 'rate_limited');
258
+ assert.ok((result.message || '').includes('rate limit'));
259
+ });
260
+
261
+ it('Success maps embeddings sorted by index', async () => {
262
+ const data = {
263
+ object: 'list',
264
+ model: 'any',
265
+ data: [
266
+ { index: 2, object: 'embedding', embedding: [3] },
267
+ { index: 0, object: 'embedding', embedding: [1] },
268
+ { index: 1, object: 'embedding', embedding: [2] }
269
+ ],
270
+ usage: { prompt_tokens: 1, total_tokens: 1 }
271
+ };
272
+ fetchStub.resolves(makeFetchResponse(200, data));
273
+
274
+ const inst = new OpenAIEmbeddings({
275
+ apiKey: 'sk',
276
+ model: 'm'
277
+ } as OpenAIEmbeddingsOptions);
278
+
279
+ const result = await inst.createEmbeddings(['a', 'b', 'c']);
280
+ assert.strictEqual(result.status, 'success');
281
+ assert.deepStrictEqual(result.output, [[1], [2], [3]]);
282
+ });
283
+
284
+ it('Non-429 error returns status error with message', async () => {
285
+ fetchStub.resolves(makeFetchResponse(500, {} as any, 'Internal Server Error'));
286
+
287
+ const inst = new OpenAIEmbeddings({
288
+ apiKey: 'sk',
289
+ model: 'm'
290
+ } as OpenAIEmbeddingsOptions);
291
+
292
+ const result = await inst.createEmbeddings('x');
293
+ assert.strictEqual(result.status, 'error');
294
+ assert.strictEqual(result.message, 'The embeddings API returned an error status of 500: Internal Server Error');
295
+ });
296
+
297
+ it('logRequests true logs request and response details', async () => {
298
+ fetchStub.resolves(makeFetchResponse(200, successData));
299
+ const logSpy = sandbox.stub(console, 'log');
300
+
301
+ const inst = new OpenAIEmbeddings({
302
+ apiKey: 'sk',
303
+ model: 'm',
304
+ logRequests: true
305
+ } as OpenAIEmbeddingsOptions);
306
+
307
+ await inst.createEmbeddings('x');
308
+
309
+ assert.ok(logSpy.callCount >= 4);
310
+ });
311
+
312
+ it('Input handling: string preserved in body', async () => {
313
+ fetchStub.resolves(makeFetchResponse(200, successData));
314
+
315
+ const inst = new OpenAIEmbeddings({
316
+ apiKey: 'sk',
317
+ model: 'm'
318
+ } as OpenAIEmbeddingsOptions);
319
+
320
+ await inst.createEmbeddings('hello');
321
+ const [, init] = fetchStub.getCall(0).args;
322
+ const body = JSON.parse(init.body);
323
+ assert.strictEqual(body.input, 'hello');
324
+ });
325
+
326
+ it('Input handling: string[] preserved in body', async () => {
327
+ fetchStub.resolves(makeFetchResponse(200, successData));
328
+
329
+ const inst = new OpenAIEmbeddings({
330
+ apiKey: 'sk',
331
+ model: 'm'
332
+ } as OpenAIEmbeddingsOptions);
333
+
334
+ await inst.createEmbeddings(['a', 'b']);
335
+ const [, init] = fetchStub.getCall(0).args;
336
+ const body = JSON.parse(init.body);
337
+ assert.deepStrictEqual(body.input, ['a', 'b']);
338
+ });
339
+
340
+ it('maxTokens default and override', () => {
341
+ const instDefault = new OpenAIEmbeddings({
342
+ apiKey: 'sk',
343
+ model: 'm'
344
+ } as OpenAIEmbeddingsOptions);
345
+ assert.strictEqual(instDefault.maxTokens, 500);
346
+
347
+ const instOverride = new OpenAIEmbeddings({
348
+ apiKey: 'sk',
349
+ model: 'm',
350
+ maxTokens: 1024
351
+ } as OpenAIEmbeddingsOptions);
352
+ assert.strictEqual(instOverride.maxTokens, 1024);
353
+ });
354
+ });
@@ -1,4 +1,3 @@
1
- import axios, { AxiosInstance, AxiosResponse, AxiosRequestConfig } from 'axios';
2
1
  import { EmbeddingsModel, EmbeddingsResponse } from "./types";
3
2
  import { CreateEmbeddingRequest, CreateEmbeddingResponse, OpenAICreateEmbeddingRequest } from "./internals";
4
3
  import { Colorize } from "./internals";
@@ -32,7 +31,7 @@ export interface BaseOpenAIEmbeddingsOptions {
32
31
  /**
33
32
  * Optional. Request options to use when calling the OpenAI API.
34
33
  */
35
- requestConfig?: AxiosRequestConfig;
34
+ requestConfig?: RequestInit;
36
35
  }
37
36
 
38
37
 
@@ -112,13 +111,12 @@ export interface AzureOpenAIEmbeddingsOptions extends BaseOpenAIEmbeddingsOption
112
111
  * @remarks
113
112
  */
114
113
  export class OpenAIEmbeddings implements EmbeddingsModel {
115
- private readonly _httpClient: AxiosInstance;
116
114
  private readonly _clientType: ClientType;
117
115
 
118
116
  private readonly UserAgent = 'AlphaWave';
119
117
 
120
118
  public readonly maxTokens;
121
-
119
+
122
120
  /**
123
121
  * Options the client was configured with.
124
122
  */
@@ -161,11 +159,6 @@ export class OpenAIEmbeddings implements EmbeddingsModel {
161
159
  retryPolicy: [2000, 5000]
162
160
  }, options) as OpenAIEmbeddingsOptions;
163
161
  }
164
-
165
- // Create client
166
- this._httpClient = axios.create({
167
- validateStatus: (status) => status < 400 || status == 429
168
- });
169
162
  }
170
163
 
171
164
  /**
@@ -185,17 +178,19 @@ export class OpenAIEmbeddings implements EmbeddingsModel {
185
178
  input: inputs,
186
179
  });
187
180
 
181
+ const data = await response.json() as CreateEmbeddingResponse;
182
+
188
183
  if (this.options.logRequests) {
189
184
  console.log(Colorize.title('RESPONSE:'));
190
185
  console.log(Colorize.value('status', response.status));
191
186
  console.log(Colorize.value('duration', Date.now() - startTime, 'ms'));
192
- console.log(Colorize.output(response.data));
187
+ console.log(Colorize.output(data));
193
188
  }
194
189
 
195
190
 
196
191
  // Process response
197
192
  if (response.status < 300) {
198
- return { status: 'success', output: response.data.data.sort((a, b) => a.index - b.index).map((item) => item.embedding) };
193
+ return { status: 'success', output: data.data.sort((a, b) => a.index - b.index).map((item) => item.embedding) };
199
194
  } else if (response.status == 429) {
200
195
  return { status: 'rate_limited', message: `The embeddings API returned a rate limit error.` }
201
196
  } else {
@@ -206,7 +201,7 @@ export class OpenAIEmbeddings implements EmbeddingsModel {
206
201
  /**
207
202
  * @private
208
203
  */
209
- protected createEmbeddingRequest(request: CreateEmbeddingRequest): Promise<AxiosResponse<CreateEmbeddingResponse>> {
204
+ protected createEmbeddingRequest(request: CreateEmbeddingRequest): Promise<Response> {
210
205
  if (this.options.dimensions) {
211
206
  request.dimensions = this.options.dimensions;
212
207
  }
@@ -230,33 +225,37 @@ export class OpenAIEmbeddings implements EmbeddingsModel {
230
225
  /**
231
226
  * @private
232
227
  */
233
- protected async post<TData>(url: string, body: object, retryCount = 0): Promise<AxiosResponse<TData>> {
234
- // Initialize request config
235
- const requestConfig: AxiosRequestConfig = Object.assign({}, this.options.requestConfig);
228
+ protected async post(url: string, body: object, retryCount = 0): Promise<Response> {
229
+ // Initialize headers from requestConfig
230
+ const baseHeaders = new Headers((this.options.requestConfig?.headers as Record<string, string>) ?? {});
236
231
 
237
- // Initialize request headers
238
- if (!requestConfig.headers) {
239
- requestConfig.headers = {};
232
+ // Set defaults if not already provided
233
+ if (!baseHeaders.has('Content-Type')) {
234
+ baseHeaders.set('Content-Type', 'application/json');
240
235
  }
241
- if (!requestConfig.headers['Content-Type']) {
242
- requestConfig.headers['Content-Type'] = 'application/json';
243
- }
244
- if (!requestConfig.headers['User-Agent']) {
245
- requestConfig.headers['User-Agent'] = this.UserAgent;
236
+ if (!baseHeaders.has('User-Agent')) {
237
+ baseHeaders.set('User-Agent', this.UserAgent);
246
238
  }
239
+
240
+ // Set auth headers
247
241
  if (this._clientType == ClientType.AzureOpenAI) {
248
242
  const options = this.options as AzureOpenAIEmbeddingsOptions;
249
- requestConfig.headers['api-key'] = options.azureApiKey;
243
+ baseHeaders.set('api-key', options.azureApiKey);
250
244
  } else if (this._clientType == ClientType.OpenAI) {
251
245
  const options = this.options as OpenAIEmbeddingsOptions;
252
- requestConfig.headers['Authorization'] = `Bearer ${options.apiKey}`;
246
+ baseHeaders.set('Authorization', `Bearer ${options.apiKey}`);
253
247
  if (options.organization) {
254
- requestConfig.headers['OpenAI-Organization'] = options.organization;
248
+ baseHeaders.set('OpenAI-Organization', options.organization);
255
249
  }
256
250
  }
257
251
 
258
252
  // Send request
259
- const response = await this._httpClient.post(url, body, requestConfig);
253
+ const response = await fetch(url, {
254
+ ...this.options.requestConfig,
255
+ method: 'POST',
256
+ headers: baseHeaders,
257
+ body: JSON.stringify(body),
258
+ });
260
259
 
261
260
  // Check for rate limit error
262
261
  if (response.status == 429 && Array.isArray(this.options.retryPolicy) && retryCount < this.options.retryPolicy.length) {