vectra 0.12.3 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -100
- package/lib/BrowserWebFetcher.d.ts +75 -0
- package/lib/BrowserWebFetcher.d.ts.map +1 -0
- package/lib/BrowserWebFetcher.js +290 -0
- package/lib/BrowserWebFetcher.js.map +1 -0
- package/lib/FileFetcher.d.ts.map +1 -1
- package/lib/FileFetcher.js +25 -15
- package/lib/FileFetcher.js.map +1 -1
- package/lib/FileFetcher.spec.d.ts +2 -0
- package/lib/FileFetcher.spec.d.ts.map +1 -0
- package/lib/FileFetcher.spec.js +244 -0
- package/lib/FileFetcher.spec.js.map +1 -0
- package/lib/FolderWatcher.d.ts +91 -0
- package/lib/FolderWatcher.d.ts.map +1 -0
- package/lib/FolderWatcher.js +304 -0
- package/lib/FolderWatcher.js.map +1 -0
- package/lib/FolderWatcher.spec.d.ts +2 -0
- package/lib/FolderWatcher.spec.d.ts.map +1 -0
- package/lib/FolderWatcher.spec.js +308 -0
- package/lib/FolderWatcher.spec.js.map +1 -0
- package/lib/GPT3Tokenizer.spec.d.ts +2 -0
- package/lib/GPT3Tokenizer.spec.d.ts.map +1 -0
- package/lib/GPT3Tokenizer.spec.js +45 -0
- package/lib/GPT3Tokenizer.spec.js.map +1 -0
- package/lib/ItemSelector.d.ts.map +1 -1
- package/lib/ItemSelector.js +19 -8
- package/lib/ItemSelector.js.map +1 -1
- package/lib/ItemSelector.spec.d.ts +2 -0
- package/lib/ItemSelector.spec.d.ts.map +1 -0
- package/lib/ItemSelector.spec.js +204 -0
- package/lib/ItemSelector.spec.js.map +1 -0
- package/lib/LocalDocument.d.ts +1 -1
- package/lib/LocalDocument.d.ts.map +1 -1
- package/lib/LocalDocument.js +5 -45
- package/lib/LocalDocument.js.map +1 -1
- package/lib/LocalDocument.spec.d.ts +2 -0
- package/lib/LocalDocument.spec.d.ts.map +1 -0
- package/lib/LocalDocument.spec.js +214 -0
- package/lib/LocalDocument.spec.js.map +1 -0
- package/lib/LocalDocumentIndex.d.ts +20 -0
- package/lib/LocalDocumentIndex.d.ts.map +1 -1
- package/lib/LocalDocumentIndex.js +16 -52
- package/lib/LocalDocumentIndex.js.map +1 -1
- package/lib/LocalDocumentIndex.spec.d.ts +2 -0
- package/lib/LocalDocumentIndex.spec.d.ts.map +1 -0
- package/lib/LocalDocumentIndex.spec.js +494 -0
- package/lib/LocalDocumentIndex.spec.js.map +1 -0
- package/lib/LocalDocumentResult.d.ts +32 -11
- package/lib/LocalDocumentResult.d.ts.map +1 -1
- package/lib/LocalDocumentResult.js +305 -257
- package/lib/LocalDocumentResult.js.map +1 -1
- package/lib/LocalDocumentResult.spec.d.ts +2 -0
- package/lib/LocalDocumentResult.spec.d.ts.map +1 -0
- package/lib/LocalDocumentResult.spec.js +373 -0
- package/lib/LocalDocumentResult.spec.js.map +1 -0
- package/lib/LocalEmbeddings.d.ts +59 -0
- package/lib/LocalEmbeddings.d.ts.map +1 -0
- package/lib/LocalEmbeddings.js +101 -0
- package/lib/LocalEmbeddings.js.map +1 -0
- package/lib/LocalEmbeddings.spec.d.ts +2 -0
- package/lib/LocalEmbeddings.spec.d.ts.map +1 -0
- package/lib/LocalEmbeddings.spec.js +155 -0
- package/lib/LocalEmbeddings.spec.js.map +1 -0
- package/lib/LocalIndex.d.ts +27 -18
- package/lib/LocalIndex.d.ts.map +1 -1
- package/lib/LocalIndex.js +109 -105
- package/lib/LocalIndex.js.map +1 -1
- package/lib/LocalIndex.spec.js +434 -43
- package/lib/LocalIndex.spec.js.map +1 -1
- package/lib/OpenAIEmbeddings.d.ts +4 -6
- package/lib/OpenAIEmbeddings.d.ts.map +1 -1
- package/lib/OpenAIEmbeddings.js +16 -24
- package/lib/OpenAIEmbeddings.js.map +1 -1
- package/lib/OpenAIEmbeddings.spec.d.ts +2 -0
- package/lib/OpenAIEmbeddings.spec.d.ts.map +1 -0
- package/lib/OpenAIEmbeddings.spec.js +298 -0
- package/lib/OpenAIEmbeddings.spec.js.map +1 -0
- package/lib/TextSplitter.d.ts +2 -0
- package/lib/TextSplitter.d.ts.map +1 -1
- package/lib/TextSplitter.js +154 -111
- package/lib/TextSplitter.js.map +1 -1
- package/lib/TextSplitter.spec.js +289 -61
- package/lib/TextSplitter.spec.js.map +1 -1
- package/lib/TransformersEmbeddings.d.ts +121 -0
- package/lib/TransformersEmbeddings.d.ts.map +1 -0
- package/lib/TransformersEmbeddings.js +176 -0
- package/lib/TransformersEmbeddings.js.map +1 -0
- package/lib/TransformersEmbeddings.spec.d.ts +2 -0
- package/lib/TransformersEmbeddings.spec.d.ts.map +1 -0
- package/lib/TransformersEmbeddings.spec.js +198 -0
- package/lib/TransformersEmbeddings.spec.js.map +1 -0
- package/lib/TransformersTokenizer.d.ts +33 -0
- package/lib/TransformersTokenizer.d.ts.map +1 -0
- package/lib/TransformersTokenizer.js +44 -0
- package/lib/TransformersTokenizer.js.map +1 -0
- package/lib/TransformersTokenizer.spec.d.ts +2 -0
- package/lib/TransformersTokenizer.spec.d.ts.map +1 -0
- package/lib/TransformersTokenizer.spec.js +112 -0
- package/lib/TransformersTokenizer.spec.js.map +1 -0
- package/lib/WebFetcher.d.ts +1 -2
- package/lib/WebFetcher.d.ts.map +1 -1
- package/lib/WebFetcher.js +58 -54
- package/lib/WebFetcher.js.map +1 -1
- package/lib/WebFetcher.spec.d.ts +2 -0
- package/lib/WebFetcher.spec.d.ts.map +1 -0
- package/lib/WebFetcher.spec.js +263 -0
- package/lib/WebFetcher.spec.js.map +1 -0
- package/lib/browser.d.ts +30 -0
- package/lib/browser.d.ts.map +1 -0
- package/lib/browser.js +52 -0
- package/lib/browser.js.map +1 -0
- package/lib/codecs/IndexCodec.d.ts +37 -0
- package/lib/codecs/IndexCodec.d.ts.map +1 -0
- package/lib/codecs/IndexCodec.js +3 -0
- package/lib/codecs/IndexCodec.js.map +1 -0
- package/lib/codecs/JsonCodec.d.ts +19 -0
- package/lib/codecs/JsonCodec.d.ts.map +1 -0
- package/lib/codecs/JsonCodec.js +35 -0
- package/lib/codecs/JsonCodec.js.map +1 -0
- package/lib/codecs/JsonCodec.spec.d.ts +2 -0
- package/lib/codecs/JsonCodec.spec.d.ts.map +1 -0
- package/lib/codecs/JsonCodec.spec.js +66 -0
- package/lib/codecs/JsonCodec.spec.js.map +1 -0
- package/lib/codecs/LocalIndex.protobuf.spec.d.ts +2 -0
- package/lib/codecs/LocalIndex.protobuf.spec.d.ts.map +1 -0
- package/lib/codecs/LocalIndex.protobuf.spec.js +108 -0
- package/lib/codecs/LocalIndex.protobuf.spec.js.map +1 -0
- package/lib/codecs/ProtobufCodec.d.ts +20 -0
- package/lib/codecs/ProtobufCodec.d.ts.map +1 -0
- package/lib/codecs/ProtobufCodec.js +225 -0
- package/lib/codecs/ProtobufCodec.js.map +1 -0
- package/lib/codecs/ProtobufCodec.spec.d.ts +2 -0
- package/lib/codecs/ProtobufCodec.spec.d.ts.map +1 -0
- package/lib/codecs/ProtobufCodec.spec.js +155 -0
- package/lib/codecs/ProtobufCodec.spec.js.map +1 -0
- package/lib/codecs/index.d.ts +5 -0
- package/lib/codecs/index.d.ts.map +1 -0
- package/lib/codecs/index.js +21 -0
- package/lib/codecs/index.js.map +1 -0
- package/lib/codecs/migrateIndex.d.ts +24 -0
- package/lib/codecs/migrateIndex.d.ts.map +1 -0
- package/lib/codecs/migrateIndex.js +119 -0
- package/lib/codecs/migrateIndex.js.map +1 -0
- package/lib/codecs/migrateIndex.spec.d.ts +2 -0
- package/lib/codecs/migrateIndex.spec.d.ts.map +1 -0
- package/lib/codecs/migrateIndex.spec.js +151 -0
- package/lib/codecs/migrateIndex.spec.js.map +1 -0
- package/lib/codecs/schemas/index.proto +34 -0
- package/lib/index.d.ts +9 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +9 -1
- package/lib/index.js.map +1 -1
- package/lib/internals/Colorize.d.ts.map +1 -1
- package/lib/internals/Colorize.js +20 -15
- package/lib/internals/Colorize.js.map +1 -1
- package/lib/server/IndexManager.d.ts +78 -0
- package/lib/server/IndexManager.d.ts.map +1 -0
- package/lib/server/IndexManager.js +259 -0
- package/lib/server/IndexManager.js.map +1 -0
- package/lib/server/VectraServer.d.ts +40 -0
- package/lib/server/VectraServer.d.ts.map +1 -0
- package/lib/server/VectraServer.js +151 -0
- package/lib/server/VectraServer.js.map +1 -0
- package/lib/server/VectraServer.spec.d.ts +2 -0
- package/lib/server/VectraServer.spec.d.ts.map +1 -0
- package/lib/server/VectraServer.spec.js +322 -0
- package/lib/server/VectraServer.spec.js.map +1 -0
- package/lib/server/handlers/documentHandlers.d.ts +15 -0
- package/lib/server/handlers/documentHandlers.d.ts.map +1 -0
- package/lib/server/handlers/documentHandlers.js +95 -0
- package/lib/server/handlers/documentHandlers.js.map +1 -0
- package/lib/server/handlers/helpers.d.ts +23 -0
- package/lib/server/handlers/helpers.d.ts.map +1 -0
- package/lib/server/handlers/helpers.js +138 -0
- package/lib/server/handlers/helpers.js.map +1 -0
- package/lib/server/handlers/index.d.ts +8 -0
- package/lib/server/handlers/index.d.ts.map +1 -0
- package/lib/server/handlers/index.js +22 -0
- package/lib/server/handlers/index.js.map +1 -0
- package/lib/server/handlers/indexHandlers.d.ts +14 -0
- package/lib/server/handlers/indexHandlers.d.ts.map +1 -0
- package/lib/server/handlers/indexHandlers.js +85 -0
- package/lib/server/handlers/indexHandlers.js.map +1 -0
- package/lib/server/handlers/itemHandlers.d.ts +34 -0
- package/lib/server/handlers/itemHandlers.d.ts.map +1 -0
- package/lib/server/handlers/itemHandlers.js +166 -0
- package/lib/server/handlers/itemHandlers.js.map +1 -0
- package/lib/server/handlers/lifecycleHandlers.d.ts +11 -0
- package/lib/server/handlers/lifecycleHandlers.d.ts.map +1 -0
- package/lib/server/handlers/lifecycleHandlers.js +31 -0
- package/lib/server/handlers/lifecycleHandlers.js.map +1 -0
- package/lib/server/handlers/queryHandlers.d.ts +27 -0
- package/lib/server/handlers/queryHandlers.d.ts.map +1 -0
- package/lib/server/handlers/queryHandlers.js +135 -0
- package/lib/server/handlers/queryHandlers.js.map +1 -0
- package/lib/server/handlers/statsHandlers.d.ts +17 -0
- package/lib/server/handlers/statsHandlers.d.ts.map +1 -0
- package/lib/server/handlers/statsHandlers.js +81 -0
- package/lib/server/handlers/statsHandlers.js.map +1 -0
- package/lib/server/index.d.ts +4 -0
- package/lib/server/index.d.ts.map +1 -0
- package/lib/server/index.js +23 -0
- package/lib/server/index.js.map +1 -0
- package/lib/storage/FileStorage.d.ts +92 -0
- package/lib/storage/FileStorage.d.ts.map +1 -0
- package/lib/storage/FileStorage.js +3 -0
- package/lib/storage/FileStorage.js.map +1 -0
- package/lib/storage/FileStorageUtilities.d.ts +36 -0
- package/lib/storage/FileStorageUtilities.d.ts.map +1 -0
- package/lib/storage/FileStorageUtilities.js +91 -0
- package/lib/storage/FileStorageUtilities.js.map +1 -0
- package/lib/storage/FileStorageUtilities.spec.d.ts +2 -0
- package/lib/storage/FileStorageUtilities.spec.d.ts.map +1 -0
- package/lib/storage/FileStorageUtilities.spec.js +98 -0
- package/lib/storage/FileStorageUtilities.spec.js.map +1 -0
- package/lib/storage/FileType.d.ts +29 -0
- package/lib/storage/FileType.d.ts.map +1 -0
- package/lib/storage/FileType.js +38 -0
- package/lib/storage/FileType.js.map +1 -0
- package/lib/storage/IndexedDBStorage.d.ts +47 -0
- package/lib/storage/IndexedDBStorage.d.ts.map +1 -0
- package/lib/storage/IndexedDBStorage.js +347 -0
- package/lib/storage/IndexedDBStorage.js.map +1 -0
- package/lib/storage/LocalFileStorage.browser.d.ts +19 -0
- package/lib/storage/LocalFileStorage.browser.d.ts.map +1 -0
- package/lib/storage/LocalFileStorage.browser.js +43 -0
- package/lib/storage/LocalFileStorage.browser.js.map +1 -0
- package/lib/storage/LocalFileStorage.d.ts +23 -0
- package/lib/storage/LocalFileStorage.d.ts.map +1 -0
- package/lib/storage/LocalFileStorage.js +152 -0
- package/lib/storage/LocalFileStorage.js.map +1 -0
- package/lib/storage/LocalFileStorage.spec.d.ts +2 -0
- package/lib/storage/LocalFileStorage.spec.d.ts.map +1 -0
- package/lib/storage/LocalFileStorage.spec.js +249 -0
- package/lib/storage/LocalFileStorage.spec.js.map +1 -0
- package/lib/storage/VirtualFileStorage.d.ts +18 -0
- package/lib/storage/VirtualFileStorage.d.ts.map +1 -0
- package/lib/storage/VirtualFileStorage.js +178 -0
- package/lib/storage/VirtualFileStorage.js.map +1 -0
- package/lib/storage/VirtualFileStorage.spec.d.ts +2 -0
- package/lib/storage/VirtualFileStorage.spec.d.ts.map +1 -0
- package/lib/storage/VirtualFileStorage.spec.js +302 -0
- package/lib/storage/VirtualFileStorage.spec.js.map +1 -0
- package/lib/storage/index.d.ts +6 -0
- package/lib/storage/index.d.ts.map +1 -0
- package/lib/storage/index.js +22 -0
- package/lib/storage/index.js.map +1 -0
- package/lib/templates/templates/csharp/README.md +48 -0
- package/lib/templates/templates/csharp/VectraClient.cs +234 -0
- package/lib/templates/templates/go/README.md +71 -0
- package/lib/templates/templates/go/vectra_client.go +322 -0
- package/lib/templates/templates/java/README.md +81 -0
- package/lib/templates/templates/java/VectraClient.java +232 -0
- package/lib/templates/templates/python/README.md +37 -0
- package/lib/templates/templates/python/vectra_client.py +279 -0
- package/lib/templates/templates/rust/Cargo.toml +14 -0
- package/lib/templates/templates/rust/README.md +39 -0
- package/lib/templates/templates/rust/build.rs +4 -0
- package/lib/templates/templates/rust/lib.rs +284 -0
- package/lib/templates/templates/typescript/README.md +96 -0
- package/lib/templates/templates/typescript/VectraClient.ts +374 -0
- package/lib/templates/typescript/VectraClient.d.ts +114 -0
- package/lib/templates/typescript/VectraClient.d.ts.map +1 -0
- package/lib/templates/typescript/VectraClient.js +328 -0
- package/lib/templates/typescript/VectraClient.js.map +1 -0
- package/lib/types.d.ts +7 -0
- package/lib/types.d.ts.map +1 -1
- package/lib/utils/index.d.ts +2 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +18 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/pathUtils.d.ts +40 -0
- package/lib/utils/pathUtils.d.ts.map +1 -0
- package/lib/utils/pathUtils.js +98 -0
- package/lib/utils/pathUtils.js.map +1 -0
- package/lib/vectra-cli.d.ts.map +1 -1
- package/lib/vectra-cli.generate.spec.d.ts +2 -0
- package/lib/vectra-cli.generate.spec.d.ts.map +1 -0
- package/lib/vectra-cli.generate.spec.js +112 -0
- package/lib/vectra-cli.generate.spec.js.map +1 -0
- package/lib/vectra-cli.js +446 -9
- package/lib/vectra-cli.js.map +1 -1
- package/lib/vectra-cli.spec.d.ts +1 -0
- package/lib/vectra-cli.spec.d.ts.map +1 -0
- package/lib/vectra-cli.spec.js +2 -0
- package/lib/vectra-cli.spec.js.map +1 -0
- package/package.json +89 -16
- package/proto/vectra_service.proto +276 -0
- package/src/BrowserWebFetcher.ts +345 -0
- package/src/FileFetcher.spec.ts +234 -0
- package/src/FileFetcher.ts +37 -25
- package/src/FolderWatcher.spec.ts +288 -0
- package/src/FolderWatcher.ts +304 -0
- package/src/GPT3Tokenizer.spec.ts +50 -0
- package/src/ItemSelector.spec.ts +252 -0
- package/src/ItemSelector.ts +163 -150
- package/src/LocalDocument.spec.ts +211 -0
- package/src/LocalDocument.ts +88 -94
- package/src/LocalDocumentIndex.spec.ts +481 -0
- package/src/LocalDocumentIndex.ts +39 -40
- package/src/LocalDocumentResult.spec.ts +373 -0
- package/src/LocalDocumentResult.ts +489 -319
- package/src/LocalEmbeddings.spec.ts +138 -0
- package/src/LocalEmbeddings.ts +120 -0
- package/src/LocalIndex.spec.ts +808 -323
- package/src/LocalIndex.ts +479 -430
- package/src/OpenAIEmbeddings.spec.ts +354 -0
- package/src/OpenAIEmbeddings.ts +26 -27
- package/src/TextSplitter.spec.ts +320 -65
- package/src/TextSplitter.ts +172 -115
- package/src/TransformersEmbeddings.spec.ts +188 -0
- package/src/TransformersEmbeddings.ts +232 -0
- package/src/TransformersTokenizer.spec.ts +143 -0
- package/src/TransformersTokenizer.ts +45 -0
- package/src/WebFetcher.spec.ts +288 -0
- package/src/WebFetcher.ts +184 -186
- package/src/browser.ts +69 -0
- package/src/codecs/IndexCodec.ts +40 -0
- package/src/codecs/JsonCodec.spec.ts +70 -0
- package/src/codecs/JsonCodec.ts +37 -0
- package/src/codecs/LocalIndex.protobuf.spec.ts +115 -0
- package/src/codecs/ProtobufCodec.spec.ts +166 -0
- package/src/codecs/ProtobufCodec.ts +193 -0
- package/src/codecs/index.ts +4 -0
- package/src/codecs/migrateIndex.spec.ts +176 -0
- package/src/codecs/migrateIndex.ts +125 -0
- package/src/codecs/schemas/index.proto +34 -0
- package/src/index.ts +9 -1
- package/src/internals/Colorize.ts +19 -16
- package/src/server/IndexManager.ts +243 -0
- package/src/server/VectraServer.spec.ts +303 -0
- package/src/server/VectraServer.ts +156 -0
- package/src/server/handlers/documentHandlers.ts +59 -0
- package/src/server/handlers/helpers.ts +93 -0
- package/src/server/handlers/index.ts +7 -0
- package/src/server/handlers/indexHandlers.ts +44 -0
- package/src/server/handlers/itemHandlers.ts +140 -0
- package/src/server/handlers/lifecycleHandlers.ts +26 -0
- package/src/server/handlers/queryHandlers.ts +96 -0
- package/src/server/handlers/statsHandlers.ts +38 -0
- package/src/server/index.ts +3 -0
- package/src/storage/FileStorage.ts +105 -0
- package/src/storage/FileStorageUtilities.spec.ts +106 -0
- package/src/storage/FileStorageUtilities.ts +77 -0
- package/src/storage/FileType.ts +61 -0
- package/src/storage/IndexedDBStorage.ts +365 -0
- package/src/storage/LocalFileStorage.browser.ts +52 -0
- package/src/storage/LocalFileStorage.spec.ts +292 -0
- package/src/storage/LocalFileStorage.ts +98 -0
- package/src/storage/VirtualFileStorage.spec.ts +307 -0
- package/src/storage/VirtualFileStorage.ts +169 -0
- package/src/storage/index.ts +5 -0
- package/src/templates/csharp/README.md +48 -0
- package/src/templates/csharp/VectraClient.cs +234 -0
- package/src/templates/go/README.md +71 -0
- package/src/templates/go/vectra_client.go +322 -0
- package/src/templates/java/README.md +81 -0
- package/src/templates/java/VectraClient.java +232 -0
- package/src/templates/python/README.md +37 -0
- package/src/templates/python/vectra_client.py +279 -0
- package/src/templates/rust/Cargo.toml +14 -0
- package/src/templates/rust/README.md +39 -0
- package/src/templates/rust/build.rs +4 -0
- package/src/templates/rust/lib.rs +284 -0
- package/src/templates/typescript/README.md +96 -0
- package/src/templates/typescript/VectraClient.ts +374 -0
- package/src/types.ts +131 -123
- package/src/utils/index.ts +1 -0
- package/src/utils/pathUtils.ts +106 -0
- package/src/vectra-cli.generate.spec.ts +72 -0
- package/src/vectra-cli.spec.ts +0 -0
- package/src/vectra-cli.ts +687 -246
- package/README.draft.md +0 -499
- package/README.draft.outline.md +0 -160
- package/README.research.md +0 -2159
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
const assert = __importStar(require("assert"));
|
|
46
|
+
const fs = __importStar(require("fs/promises"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const os = __importStar(require("os"));
|
|
49
|
+
const child_process_1 = require("child_process");
|
|
50
|
+
describe('vectra generate', () => {
|
|
51
|
+
let tmpDir;
|
|
52
|
+
const projectRoot = process.cwd();
|
|
53
|
+
beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
+
tmpDir = yield fs.mkdtemp(path.join(os.tmpdir(), 'vectra-gen-'));
|
|
55
|
+
}));
|
|
56
|
+
afterEach(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
+
yield fs.rm(tmpDir, { recursive: true, force: true });
|
|
58
|
+
}));
|
|
59
|
+
const languages = ['python', 'csharp', 'rust', 'go', 'java', 'typescript'];
|
|
60
|
+
for (const lang of languages) {
|
|
61
|
+
it(`should generate ${lang} bindings`, () => __awaiter(void 0, void 0, void 0, function* () {
|
|
62
|
+
const outputDir = path.join(tmpDir, lang);
|
|
63
|
+
const binPath = path.join(projectRoot, 'bin', 'vectra.js');
|
|
64
|
+
(0, child_process_1.execSync)(`node "${binPath}" generate --language ${lang} --output "${outputDir}"`, {
|
|
65
|
+
cwd: projectRoot,
|
|
66
|
+
timeout: 15000,
|
|
67
|
+
});
|
|
68
|
+
// Verify proto file was copied
|
|
69
|
+
const protoPath = path.join(outputDir, 'vectra_service.proto');
|
|
70
|
+
const protoStat = yield fs.stat(protoPath);
|
|
71
|
+
assert.ok(protoStat.isFile(), 'vectra_service.proto should exist');
|
|
72
|
+
// Verify README was copied
|
|
73
|
+
const readmePath = path.join(outputDir, 'README.md');
|
|
74
|
+
const readmeStat = yield fs.stat(readmePath);
|
|
75
|
+
assert.ok(readmeStat.isFile(), 'README.md should exist');
|
|
76
|
+
// Language-specific checks
|
|
77
|
+
const files = yield fs.readdir(outputDir);
|
|
78
|
+
if (lang === 'python') {
|
|
79
|
+
assert.ok(files.includes('vectra_client.py'), 'should have vectra_client.py');
|
|
80
|
+
}
|
|
81
|
+
else if (lang === 'csharp') {
|
|
82
|
+
assert.ok(files.includes('VectraClient.cs'), 'should have VectraClient.cs');
|
|
83
|
+
}
|
|
84
|
+
else if (lang === 'rust') {
|
|
85
|
+
assert.ok(files.includes('lib.rs'), 'should have lib.rs');
|
|
86
|
+
assert.ok(files.includes('Cargo.toml'), 'should have Cargo.toml');
|
|
87
|
+
assert.ok(files.includes('build.rs'), 'should have build.rs');
|
|
88
|
+
}
|
|
89
|
+
else if (lang === 'go') {
|
|
90
|
+
assert.ok(files.includes('vectra_client.go'), 'should have vectra_client.go');
|
|
91
|
+
}
|
|
92
|
+
else if (lang === 'java') {
|
|
93
|
+
assert.ok(files.includes('VectraClient.java'), 'should have VectraClient.java');
|
|
94
|
+
}
|
|
95
|
+
else if (lang === 'typescript') {
|
|
96
|
+
assert.ok(files.includes('VectraClient.ts'), 'should have VectraClient.ts');
|
|
97
|
+
}
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
it('should create output directory if it does not exist', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
101
|
+
const outputDir = path.join(tmpDir, 'nested', 'deep', 'dir');
|
|
102
|
+
const binPath = path.join(projectRoot, 'bin', 'vectra.js');
|
|
103
|
+
(0, child_process_1.execSync)(`node "${binPath}" generate --language python --output "${outputDir}"`, {
|
|
104
|
+
cwd: projectRoot,
|
|
105
|
+
timeout: 15000,
|
|
106
|
+
});
|
|
107
|
+
const files = yield fs.readdir(outputDir);
|
|
108
|
+
assert.ok(files.includes('vectra_service.proto'));
|
|
109
|
+
assert.ok(files.includes('vectra_client.py'));
|
|
110
|
+
}));
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=vectra-cli.generate.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vectra-cli.generate.spec.js","sourceRoot":"","sources":["../src/vectra-cli.generate.spec.ts"],"names":[],"mappings":"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"}
|
package/lib/vectra-cli.js
CHANGED
|
@@ -47,6 +47,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
47
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
48
|
exports.run = run;
|
|
49
49
|
const fs = __importStar(require("fs/promises"));
|
|
50
|
+
const fsSync = __importStar(require("fs"));
|
|
51
|
+
const path = __importStar(require("path"));
|
|
50
52
|
const yargs_1 = __importDefault(require("yargs/yargs"));
|
|
51
53
|
const helpers_1 = require("yargs/helpers");
|
|
52
54
|
const LocalDocumentIndex_1 = require("./LocalDocumentIndex");
|
|
@@ -54,21 +56,61 @@ const WebFetcher_1 = require("./WebFetcher");
|
|
|
54
56
|
const OpenAIEmbeddings_1 = require("./OpenAIEmbeddings");
|
|
55
57
|
const internals_1 = require("./internals");
|
|
56
58
|
const FileFetcher_1 = require("./FileFetcher");
|
|
59
|
+
const LocalFileStorage_1 = require("./storage/LocalFileStorage");
|
|
60
|
+
const VirtualFileStorage_1 = require("./storage/VirtualFileStorage");
|
|
61
|
+
const codecs_1 = require("./codecs");
|
|
62
|
+
const VectraServer_1 = require("./server/VectraServer");
|
|
63
|
+
const FolderWatcher_1 = require("./FolderWatcher");
|
|
64
|
+
function getStorage(args) {
|
|
65
|
+
if (args.storage === 'virtual') {
|
|
66
|
+
return new VirtualFileStorage_1.VirtualFileStorage();
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
return new LocalFileStorage_1.LocalFileStorage(args.storageRoot);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function getCodecFromFormat(format) {
|
|
73
|
+
if (format === 'protobuf')
|
|
74
|
+
return new codecs_1.ProtobufCodec();
|
|
75
|
+
if (format === 'json')
|
|
76
|
+
return new codecs_1.JsonCodec();
|
|
77
|
+
return undefined; // default
|
|
78
|
+
}
|
|
57
79
|
function run() {
|
|
58
80
|
return __awaiter(this, void 0, void 0, function* () {
|
|
59
81
|
// prettier-ignore
|
|
60
82
|
const args = yield (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
|
|
61
83
|
.scriptName('vectra')
|
|
62
|
-
.
|
|
84
|
+
.option('storage', {
|
|
85
|
+
describe: 'storage backend to use',
|
|
86
|
+
choices: ['local', 'virtual'],
|
|
87
|
+
default: 'local'
|
|
88
|
+
})
|
|
89
|
+
.option('storage-root', {
|
|
90
|
+
describe: 'root folder for local storage (only applies if storage=local)',
|
|
91
|
+
type: 'string'
|
|
92
|
+
})
|
|
93
|
+
.command('create <index>', `create a new local index`, (yargs) => {
|
|
94
|
+
return yargs.option('format', {
|
|
95
|
+
describe: 'serialization format for the index',
|
|
96
|
+
choices: ['json', 'protobuf'],
|
|
97
|
+
default: 'json'
|
|
98
|
+
});
|
|
99
|
+
}, (args) => __awaiter(this, void 0, void 0, function* () {
|
|
63
100
|
const folderPath = args.index;
|
|
64
|
-
const
|
|
65
|
-
|
|
101
|
+
const storage = getStorage(args);
|
|
102
|
+
const codec = getCodecFromFormat(args.format);
|
|
103
|
+
const index = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath, storage, codec });
|
|
104
|
+
const formatLabel = args.format === 'protobuf' ? 'protobuf' : 'json';
|
|
105
|
+
console.log(internals_1.Colorize.output(`creating ${formatLabel} index at ${folderPath}`));
|
|
66
106
|
yield index.createIndex({ version: 1, deleteIfExists: true });
|
|
67
107
|
}))
|
|
68
108
|
.command('delete <index>', `delete an existing local index`, {}, (args) => __awaiter(this, void 0, void 0, function* () {
|
|
69
109
|
const folderPath = args.index;
|
|
70
110
|
console.log(internals_1.Colorize.output(`deleting index at ${folderPath}`));
|
|
71
|
-
const
|
|
111
|
+
const storage = getStorage(args);
|
|
112
|
+
const codec = yield (0, codecs_1.detectCodec)(folderPath, storage).catch(() => undefined);
|
|
113
|
+
const index = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath, storage, codec });
|
|
72
114
|
yield index.deleteIndex();
|
|
73
115
|
}))
|
|
74
116
|
.command('add <index>', `adds one or more web pages to an index`, (yargs) => {
|
|
@@ -124,12 +166,16 @@ function run() {
|
|
|
124
166
|
const embeddings = new OpenAIEmbeddings_1.OpenAIEmbeddings(options);
|
|
125
167
|
// Initialize index
|
|
126
168
|
const folderPath = args.index;
|
|
169
|
+
const storage = getStorage(args);
|
|
170
|
+
const codec = yield (0, codecs_1.detectCodec)(folderPath, storage).catch(() => undefined);
|
|
127
171
|
const index = new LocalDocumentIndex_1.LocalDocumentIndex({
|
|
128
172
|
folderPath,
|
|
129
173
|
embeddings,
|
|
130
174
|
chunkingConfig: {
|
|
131
175
|
chunkSize: args.chunkSize
|
|
132
|
-
}
|
|
176
|
+
},
|
|
177
|
+
storage,
|
|
178
|
+
codec
|
|
133
179
|
});
|
|
134
180
|
// Get list of url's
|
|
135
181
|
const uris = yield getItemList(args.uri, args.list, 'web page');
|
|
@@ -179,7 +225,9 @@ function run() {
|
|
|
179
225
|
}, (args) => __awaiter(this, void 0, void 0, function* () {
|
|
180
226
|
// Initialize index
|
|
181
227
|
const folderPath = args.index;
|
|
182
|
-
const
|
|
228
|
+
const storage = getStorage(args);
|
|
229
|
+
const codec = yield (0, codecs_1.detectCodec)(folderPath, storage).catch(() => undefined);
|
|
230
|
+
const index = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath, storage, codec });
|
|
183
231
|
// Get list of uri's
|
|
184
232
|
const uris = yield getItemList(args.uri, args.list, 'document');
|
|
185
233
|
// Remove documents
|
|
@@ -188,12 +236,31 @@ function run() {
|
|
|
188
236
|
yield index.deleteDocument(uri);
|
|
189
237
|
}
|
|
190
238
|
}))
|
|
191
|
-
.command('stats <index>', `prints the stats for a local index`,
|
|
239
|
+
.command('stats <index>', `prints the stats for a local index`, (yargs) => {
|
|
240
|
+
return yargs;
|
|
241
|
+
}, (args) => __awaiter(this, void 0, void 0, function* () {
|
|
192
242
|
const folderPath = args.index;
|
|
193
|
-
const
|
|
243
|
+
const storage = getStorage(args);
|
|
244
|
+
// Auto-detect format from files on disk
|
|
245
|
+
const codec = yield (0, codecs_1.detectCodec)(folderPath, storage);
|
|
246
|
+
const index = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath, storage, codec });
|
|
194
247
|
const stats = yield index.getCatalogStats();
|
|
195
248
|
console.log(internals_1.Colorize.title('Index Stats'));
|
|
196
249
|
console.log(internals_1.Colorize.output(stats));
|
|
250
|
+
}))
|
|
251
|
+
.command('migrate <index>', `migrate an index between serialization formats`, (yargs) => {
|
|
252
|
+
return yargs.option('to', {
|
|
253
|
+
describe: 'target format',
|
|
254
|
+
choices: ['json', 'protobuf'],
|
|
255
|
+
demandOption: true
|
|
256
|
+
});
|
|
257
|
+
}, (args) => __awaiter(this, void 0, void 0, function* () {
|
|
258
|
+
const folderPath = args.index;
|
|
259
|
+
const storage = getStorage(args);
|
|
260
|
+
const to = args.to;
|
|
261
|
+
console.log(internals_1.Colorize.output(`migrating index at ${folderPath} to ${to} format`));
|
|
262
|
+
yield (0, codecs_1.migrateIndex)(folderPath, { to, storage });
|
|
263
|
+
console.log(internals_1.Colorize.output(`migration complete`));
|
|
197
264
|
}))
|
|
198
265
|
.command('query <index> <query>', `queries a local index`, (yargs) => {
|
|
199
266
|
return yargs
|
|
@@ -256,9 +323,13 @@ function run() {
|
|
|
256
323
|
const embeddings = new OpenAIEmbeddings_1.OpenAIEmbeddings(options);
|
|
257
324
|
// Initialize index
|
|
258
325
|
const folderPath = args.index;
|
|
326
|
+
const storage = getStorage(args);
|
|
327
|
+
const codec = yield (0, codecs_1.detectCodec)(folderPath, storage).catch(() => undefined);
|
|
259
328
|
const index = new LocalDocumentIndex_1.LocalDocumentIndex({
|
|
260
329
|
folderPath,
|
|
261
|
-
embeddings
|
|
330
|
+
embeddings,
|
|
331
|
+
storage,
|
|
332
|
+
codec
|
|
262
333
|
});
|
|
263
334
|
// Query index
|
|
264
335
|
const query = args.query;
|
|
@@ -300,6 +371,372 @@ function run() {
|
|
|
300
371
|
}
|
|
301
372
|
}
|
|
302
373
|
}
|
|
374
|
+
}))
|
|
375
|
+
.command('watch <index>', 'watch folders and automatically sync file changes into the index', (yargs) => {
|
|
376
|
+
return yargs
|
|
377
|
+
.option('keys', {
|
|
378
|
+
alias: 'k',
|
|
379
|
+
describe: 'path of a JSON file containing the model keys to use for generating embeddings',
|
|
380
|
+
type: 'string'
|
|
381
|
+
})
|
|
382
|
+
.option('uri', {
|
|
383
|
+
alias: 'u',
|
|
384
|
+
array: true,
|
|
385
|
+
describe: 'folder or file path to watch',
|
|
386
|
+
type: 'string'
|
|
387
|
+
})
|
|
388
|
+
.option('list', {
|
|
389
|
+
alias: 'l',
|
|
390
|
+
describe: 'path to a file containing a list of folders/files to watch',
|
|
391
|
+
type: 'string'
|
|
392
|
+
})
|
|
393
|
+
.option('extensions', {
|
|
394
|
+
alias: 'e',
|
|
395
|
+
array: true,
|
|
396
|
+
describe: 'file extensions to include (e.g., .txt .md .html)',
|
|
397
|
+
type: 'string'
|
|
398
|
+
})
|
|
399
|
+
.option('chunk-size', {
|
|
400
|
+
alias: 'cs',
|
|
401
|
+
describe: 'size of the generated chunks in tokens (defaults to 512)',
|
|
402
|
+
type: 'number',
|
|
403
|
+
default: 512
|
|
404
|
+
})
|
|
405
|
+
.option('debounce', {
|
|
406
|
+
describe: 'debounce interval in milliseconds (defaults to 500)',
|
|
407
|
+
type: 'number',
|
|
408
|
+
default: 500
|
|
409
|
+
})
|
|
410
|
+
.check((argv) => {
|
|
411
|
+
if (Array.isArray(argv.uri) && argv.uri.length > 0) {
|
|
412
|
+
return true;
|
|
413
|
+
}
|
|
414
|
+
else if (typeof argv.list == 'string' && argv.list.trim().length > 0) {
|
|
415
|
+
return true;
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
throw new Error(`you must specify either one or more "--uri <path>" for the folders/files to watch or a "--list <file path>" for a file containing the paths.`);
|
|
419
|
+
}
|
|
420
|
+
})
|
|
421
|
+
.demandOption(['keys']);
|
|
422
|
+
}, (args) => __awaiter(this, void 0, void 0, function* () {
|
|
423
|
+
console.log(internals_1.Colorize.title('Vectra Watch Mode'));
|
|
424
|
+
// Get embedding options
|
|
425
|
+
const options = JSON.parse(yield fs.readFile(args.keys, 'utf-8'));
|
|
426
|
+
if (options.apiKey && !options.model) {
|
|
427
|
+
options.model = 'text-embedding-ada-002';
|
|
428
|
+
options.maxTokens = 8000;
|
|
429
|
+
}
|
|
430
|
+
// Create embeddings
|
|
431
|
+
const embeddings = new OpenAIEmbeddings_1.OpenAIEmbeddings(options);
|
|
432
|
+
// Initialize index
|
|
433
|
+
const folderPath = args.index;
|
|
434
|
+
const storage = getStorage(args);
|
|
435
|
+
const codec = yield (0, codecs_1.detectCodec)(folderPath, storage).catch(() => undefined);
|
|
436
|
+
const index = new LocalDocumentIndex_1.LocalDocumentIndex({
|
|
437
|
+
folderPath,
|
|
438
|
+
embeddings,
|
|
439
|
+
chunkingConfig: {
|
|
440
|
+
chunkSize: args.chunkSize
|
|
441
|
+
},
|
|
442
|
+
storage,
|
|
443
|
+
codec
|
|
444
|
+
});
|
|
445
|
+
// Get list of paths to watch
|
|
446
|
+
const watchPaths = yield getItemList(args.uri, args.list, 'path');
|
|
447
|
+
// Create watcher
|
|
448
|
+
const watcher = new FolderWatcher_1.FolderWatcher({
|
|
449
|
+
index,
|
|
450
|
+
paths: watchPaths,
|
|
451
|
+
extensions: args.extensions,
|
|
452
|
+
debounceMs: args.debounce
|
|
453
|
+
});
|
|
454
|
+
// Wire up events
|
|
455
|
+
watcher.on('sync', (uri, action) => {
|
|
456
|
+
if (action === 'deleted') {
|
|
457
|
+
console.log(internals_1.Colorize.warning(`removed ${uri}`));
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
console.log(internals_1.Colorize.success(`${action} ${uri}`));
|
|
461
|
+
}
|
|
462
|
+
});
|
|
463
|
+
watcher.on('error', (err, uri) => {
|
|
464
|
+
console.log(internals_1.Colorize.error(`Error syncing ${uri}: ${err.message}`));
|
|
465
|
+
});
|
|
466
|
+
// Start watching
|
|
467
|
+
console.log(internals_1.Colorize.progress(`performing initial sync...`));
|
|
468
|
+
yield watcher.start();
|
|
469
|
+
console.log(internals_1.Colorize.success(`initial sync complete (${watcher.trackedFileCount} files tracked)`));
|
|
470
|
+
console.log(internals_1.Colorize.output(`watching for changes... (press Ctrl+C to stop)`));
|
|
471
|
+
// Handle graceful shutdown
|
|
472
|
+
const handleSignal = () => __awaiter(this, void 0, void 0, function* () {
|
|
473
|
+
console.log(internals_1.Colorize.output('\nStopping watcher...'));
|
|
474
|
+
yield watcher.stop();
|
|
475
|
+
process.exit(0);
|
|
476
|
+
});
|
|
477
|
+
process.on('SIGINT', handleSignal);
|
|
478
|
+
process.on('SIGTERM', handleSignal);
|
|
479
|
+
}))
|
|
480
|
+
.command('generate', 'generate language bindings for the gRPC service', (yargs) => {
|
|
481
|
+
return yargs
|
|
482
|
+
.option('language', {
|
|
483
|
+
alias: 'l',
|
|
484
|
+
describe: 'target language for the generated bindings',
|
|
485
|
+
choices: ['python', 'csharp', 'rust', 'go', 'java', 'typescript'],
|
|
486
|
+
demandOption: true
|
|
487
|
+
})
|
|
488
|
+
.option('output', {
|
|
489
|
+
alias: 'o',
|
|
490
|
+
describe: 'output directory for the generated files',
|
|
491
|
+
type: 'string',
|
|
492
|
+
demandOption: true
|
|
493
|
+
});
|
|
494
|
+
}, (args) => __awaiter(this, void 0, void 0, function* () {
|
|
495
|
+
const language = args.language;
|
|
496
|
+
const outputDir = path.resolve(args.output);
|
|
497
|
+
// Locate the proto file — check lib/ first (installed package), then project root
|
|
498
|
+
const protoSearchPaths = [
|
|
499
|
+
path.join(__dirname, '..', 'proto', 'vectra_service.proto'),
|
|
500
|
+
path.join(__dirname, '..', '..', 'proto', 'vectra_service.proto'),
|
|
501
|
+
];
|
|
502
|
+
let protoSource;
|
|
503
|
+
for (const p of protoSearchPaths) {
|
|
504
|
+
if (fsSync.existsSync(p)) {
|
|
505
|
+
protoSource = p;
|
|
506
|
+
break;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
if (!protoSource) {
|
|
510
|
+
console.error(internals_1.Colorize.error('Could not locate vectra_service.proto'));
|
|
511
|
+
process.exit(1);
|
|
512
|
+
}
|
|
513
|
+
// Locate the template directory
|
|
514
|
+
const templateSearchPaths = [
|
|
515
|
+
path.join(__dirname, '..', 'src', 'templates', language),
|
|
516
|
+
path.join(__dirname, 'templates', language),
|
|
517
|
+
];
|
|
518
|
+
let templateDir;
|
|
519
|
+
for (const p of templateSearchPaths) {
|
|
520
|
+
if (fsSync.existsSync(p)) {
|
|
521
|
+
templateDir = p;
|
|
522
|
+
break;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
if (!templateDir) {
|
|
526
|
+
console.error(internals_1.Colorize.error(`Could not locate template for language: ${language}`));
|
|
527
|
+
process.exit(1);
|
|
528
|
+
}
|
|
529
|
+
// Create output directory
|
|
530
|
+
yield fs.mkdir(outputDir, { recursive: true });
|
|
531
|
+
// Copy proto file
|
|
532
|
+
const protoDest = path.join(outputDir, 'vectra_service.proto');
|
|
533
|
+
yield fs.copyFile(protoSource, protoDest);
|
|
534
|
+
console.log(internals_1.Colorize.success(`copied vectra_service.proto`));
|
|
535
|
+
// Copy all template files
|
|
536
|
+
const templateFiles = yield fs.readdir(templateDir);
|
|
537
|
+
for (const file of templateFiles) {
|
|
538
|
+
const src = path.join(templateDir, file);
|
|
539
|
+
const stat = yield fs.stat(src);
|
|
540
|
+
if (stat.isFile()) {
|
|
541
|
+
const dest = path.join(outputDir, file);
|
|
542
|
+
yield fs.copyFile(src, dest);
|
|
543
|
+
console.log(internals_1.Colorize.success(`copied ${file}`));
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
console.log(internals_1.Colorize.output(`\nGenerated ${language} bindings in ${outputDir}`));
|
|
547
|
+
// Print next steps
|
|
548
|
+
const nextSteps = {
|
|
549
|
+
python: [
|
|
550
|
+
'Next steps:',
|
|
551
|
+
' pip install grpcio grpcio-tools',
|
|
552
|
+
' python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. vectra_service.proto',
|
|
553
|
+
].join('\n'),
|
|
554
|
+
csharp: [
|
|
555
|
+
'Next steps:',
|
|
556
|
+
' dotnet add package Grpc.Net.Client',
|
|
557
|
+
' dotnet add package Google.Protobuf',
|
|
558
|
+
' dotnet add package Grpc.Tools',
|
|
559
|
+
' Add <Protobuf Include="vectra_service.proto" GrpcServices="Client" /> to your .csproj',
|
|
560
|
+
].join('\n'),
|
|
561
|
+
rust: [
|
|
562
|
+
'Next steps:',
|
|
563
|
+
' Ensure protoc is installed (apt install protobuf-compiler / brew install protobuf)',
|
|
564
|
+
' cargo build (tonic-build generates stubs automatically)',
|
|
565
|
+
].join('\n'),
|
|
566
|
+
go: [
|
|
567
|
+
'Next steps:',
|
|
568
|
+
' go install google.golang.org/protobuf/cmd/protoc-gen-go@latest',
|
|
569
|
+
' go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest',
|
|
570
|
+
' protoc --go_out=. --go-grpc_out=. vectra_service.proto',
|
|
571
|
+
' Update the import path in vectra_client.go to match your module',
|
|
572
|
+
].join('\n'),
|
|
573
|
+
java: [
|
|
574
|
+
'Next steps:',
|
|
575
|
+
' Place vectra_service.proto in src/main/proto/',
|
|
576
|
+
' Add gRPC dependencies to your build tool (see README.md for Gradle/Maven)',
|
|
577
|
+
' Build to generate stubs automatically',
|
|
578
|
+
].join('\n'),
|
|
579
|
+
typescript: [
|
|
580
|
+
'Next steps:',
|
|
581
|
+
' npm install @grpc/grpc-js @grpc/proto-loader',
|
|
582
|
+
' No codegen needed — proto is loaded dynamically at runtime',
|
|
583
|
+
' import { VectraClient } from \'./VectraClient\';',
|
|
584
|
+
].join('\n'),
|
|
585
|
+
};
|
|
586
|
+
console.log(internals_1.Colorize.output(nextSteps[language]));
|
|
587
|
+
}))
|
|
588
|
+
.command('serve [index]', 'start the gRPC server to serve indexes', (yargs) => {
|
|
589
|
+
return yargs
|
|
590
|
+
.positional('index', {
|
|
591
|
+
describe: 'path to a single index directory (mutually exclusive with --root)',
|
|
592
|
+
type: 'string'
|
|
593
|
+
})
|
|
594
|
+
.option('root', {
|
|
595
|
+
describe: 'directory containing multiple index subdirectories',
|
|
596
|
+
type: 'string'
|
|
597
|
+
})
|
|
598
|
+
.option('port', {
|
|
599
|
+
alias: 'p',
|
|
600
|
+
describe: 'port to bind the gRPC server on',
|
|
601
|
+
type: 'number',
|
|
602
|
+
default: 50051
|
|
603
|
+
})
|
|
604
|
+
.option('daemon', {
|
|
605
|
+
describe: 'fork to background as a daemon process',
|
|
606
|
+
type: 'boolean',
|
|
607
|
+
default: false
|
|
608
|
+
})
|
|
609
|
+
.option('pid-file', {
|
|
610
|
+
describe: 'path to PID file (daemon mode only)',
|
|
611
|
+
type: 'string'
|
|
612
|
+
})
|
|
613
|
+
.option('keys', {
|
|
614
|
+
alias: 'k',
|
|
615
|
+
describe: 'path to a JSON file containing the model keys for embeddings',
|
|
616
|
+
type: 'string'
|
|
617
|
+
})
|
|
618
|
+
.check((argv) => {
|
|
619
|
+
if (!argv.index && !argv.root) {
|
|
620
|
+
throw new Error('You must provide either an <index> path or --root <dir>');
|
|
621
|
+
}
|
|
622
|
+
if (argv.index && argv.root) {
|
|
623
|
+
throw new Error('<index> and --root are mutually exclusive');
|
|
624
|
+
}
|
|
625
|
+
return true;
|
|
626
|
+
});
|
|
627
|
+
}, (args) => __awaiter(this, void 0, void 0, function* () {
|
|
628
|
+
// Load embeddings if keys provided
|
|
629
|
+
let embeddings;
|
|
630
|
+
if (args.keys) {
|
|
631
|
+
const options = JSON.parse(yield fs.readFile(args.keys, 'utf-8'));
|
|
632
|
+
if (options.apiKey && !options.model) {
|
|
633
|
+
options.model = 'text-embedding-ada-002';
|
|
634
|
+
options.maxTokens = 8000;
|
|
635
|
+
}
|
|
636
|
+
embeddings = new OpenAIEmbeddings_1.OpenAIEmbeddings(options);
|
|
637
|
+
}
|
|
638
|
+
const server = new VectraServer_1.VectraServer({
|
|
639
|
+
port: args.port,
|
|
640
|
+
indexPath: args.index,
|
|
641
|
+
rootDir: args.root,
|
|
642
|
+
embeddings,
|
|
643
|
+
});
|
|
644
|
+
if (args.daemon) {
|
|
645
|
+
// Daemon mode: fork a child process
|
|
646
|
+
const { spawn } = require('child_process');
|
|
647
|
+
const cliArgs = process.argv.slice(2).filter(a => a !== '--daemon');
|
|
648
|
+
const child = spawn(process.execPath, [process.argv[1], ...cliArgs], {
|
|
649
|
+
detached: true,
|
|
650
|
+
stdio: 'ignore',
|
|
651
|
+
});
|
|
652
|
+
child.unref();
|
|
653
|
+
// Write PID file
|
|
654
|
+
const pidFile = args.pidFile || path.join(args.root || path.dirname(args.index), '.vectra.pid');
|
|
655
|
+
yield fs.writeFile(pidFile, String(child.pid));
|
|
656
|
+
console.log(internals_1.Colorize.output(`Vectra server started as daemon (PID: ${child.pid})`));
|
|
657
|
+
console.log(internals_1.Colorize.output(`PID file: ${pidFile}`));
|
|
658
|
+
process.exit(0);
|
|
659
|
+
}
|
|
660
|
+
else {
|
|
661
|
+
// Foreground mode
|
|
662
|
+
const port = yield server.start();
|
|
663
|
+
console.log(internals_1.Colorize.output(`Vectra gRPC server listening on 127.0.0.1:${port}`));
|
|
664
|
+
const loaded = server.indexManager.listIndexes();
|
|
665
|
+
if (loaded.length > 0) {
|
|
666
|
+
console.log(internals_1.Colorize.output(`Loaded indexes:`));
|
|
667
|
+
for (const idx of loaded) {
|
|
668
|
+
console.log(internals_1.Colorize.output(` - ${idx.name} (${idx.format}, ${idx.isDocumentIndex ? 'document' : 'item'})`));
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
else {
|
|
672
|
+
console.log(internals_1.Colorize.output(`No indexes loaded yet. Use CreateIndex RPC or add index directories.`));
|
|
673
|
+
}
|
|
674
|
+
// Handle graceful shutdown
|
|
675
|
+
const handleSignal = () => __awaiter(this, void 0, void 0, function* () {
|
|
676
|
+
console.log(internals_1.Colorize.output('\nShutting down...'));
|
|
677
|
+
yield server.shutdown();
|
|
678
|
+
process.exit(0);
|
|
679
|
+
});
|
|
680
|
+
process.on('SIGINT', handleSignal);
|
|
681
|
+
process.on('SIGTERM', handleSignal);
|
|
682
|
+
}
|
|
683
|
+
}))
|
|
684
|
+
.command('stop', 'stop a running Vectra daemon', (yargs) => {
|
|
685
|
+
return yargs.option('pid-file', {
|
|
686
|
+
describe: 'path to PID file',
|
|
687
|
+
type: 'string',
|
|
688
|
+
demandOption: true
|
|
689
|
+
});
|
|
690
|
+
}, (args) => __awaiter(this, void 0, void 0, function* () {
|
|
691
|
+
const pidFile = args.pidFile;
|
|
692
|
+
if (!fsSync.existsSync(pidFile)) {
|
|
693
|
+
console.log(internals_1.Colorize.error(`PID file not found: ${pidFile}`));
|
|
694
|
+
process.exit(1);
|
|
695
|
+
}
|
|
696
|
+
const pid = parseInt(yield fs.readFile(pidFile, 'utf-8'), 10);
|
|
697
|
+
if (isNaN(pid)) {
|
|
698
|
+
console.log(internals_1.Colorize.error(`Invalid PID in file: ${pidFile}`));
|
|
699
|
+
process.exit(1);
|
|
700
|
+
}
|
|
701
|
+
try {
|
|
702
|
+
// Send SIGTERM for graceful shutdown
|
|
703
|
+
process.kill(pid, 'SIGTERM');
|
|
704
|
+
console.log(internals_1.Colorize.output(`Sent SIGTERM to PID ${pid}`));
|
|
705
|
+
// Wait up to 10s for process to exit
|
|
706
|
+
const deadline = Date.now() + 10000;
|
|
707
|
+
while (Date.now() < deadline) {
|
|
708
|
+
try {
|
|
709
|
+
process.kill(pid, 0); // check if process exists
|
|
710
|
+
yield new Promise(r => setTimeout(r, 500));
|
|
711
|
+
}
|
|
712
|
+
catch (_a) {
|
|
713
|
+
// Process no longer exists
|
|
714
|
+
break;
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
// Check if still alive and force kill
|
|
718
|
+
try {
|
|
719
|
+
process.kill(pid, 0);
|
|
720
|
+
process.kill(pid, 'SIGKILL');
|
|
721
|
+
console.log(internals_1.Colorize.output(`Force-killed PID ${pid}`));
|
|
722
|
+
}
|
|
723
|
+
catch (_b) {
|
|
724
|
+
// Already dead
|
|
725
|
+
}
|
|
726
|
+
// Remove PID file
|
|
727
|
+
yield fs.unlink(pidFile).catch(() => { });
|
|
728
|
+
console.log(internals_1.Colorize.output('Vectra server stopped'));
|
|
729
|
+
}
|
|
730
|
+
catch (err) {
|
|
731
|
+
if (err.code === 'ESRCH') {
|
|
732
|
+
console.log(internals_1.Colorize.output(`Process ${pid} not running. Cleaning up PID file.`));
|
|
733
|
+
yield fs.unlink(pidFile).catch(() => { });
|
|
734
|
+
}
|
|
735
|
+
else {
|
|
736
|
+
console.log(internals_1.Colorize.error(`Failed to stop server: ${err.message}`));
|
|
737
|
+
process.exit(1);
|
|
738
|
+
}
|
|
739
|
+
}
|
|
303
740
|
}))
|
|
304
741
|
.help()
|
|
305
742
|
.demandCommand()
|