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.
- package/LICENSE +1 -1
- package/README.md +92 -100
- package/bin/vectra.js +3 -0
- 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 +5 -0
- package/lib/FileFetcher.d.ts.map +1 -0
- package/lib/FileFetcher.js +89 -0
- package/lib/FileFetcher.js.map +1 -0
- 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.d.ts +9 -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 +41 -0
- package/lib/ItemSelector.d.ts.map +1 -0
- package/lib/ItemSelector.js +179 -0
- package/lib/ItemSelector.js.map +1 -0
- 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 +54 -0
- package/lib/LocalDocument.d.ts.map +1 -1
- package/lib/LocalDocument.js +116 -0
- package/lib/LocalDocument.js.map +1 -0
- 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 +152 -0
- package/lib/LocalDocumentIndex.d.ts.map +1 -1
- package/lib/LocalDocumentIndex.js +420 -0
- package/lib/LocalDocumentIndex.js.map +1 -0
- 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 +66 -0
- package/lib/LocalDocumentResult.d.ts.map +1 -1
- package/lib/LocalDocumentResult.js +376 -0
- package/lib/LocalDocumentResult.js.map +1 -0
- 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 +159 -0
- package/lib/LocalIndex.d.ts.map +1 -1
- package/lib/LocalIndex.js +519 -0
- package/lib/LocalIndex.js.map +1 -0
- package/lib/LocalIndex.spec.d.ts +2 -0
- package/lib/LocalIndex.spec.js +611 -9
- package/lib/LocalIndex.spec.js.map +1 -1
- package/lib/OpenAIEmbeddings.d.ts +124 -0
- package/lib/OpenAIEmbeddings.d.ts.map +1 -0
- package/lib/OpenAIEmbeddings.js +166 -0
- package/lib/OpenAIEmbeddings.js.map +1 -0
- 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 +21 -0
- package/lib/TextSplitter.d.ts.map +1 -1
- package/lib/TextSplitter.js +500 -0
- package/lib/TextSplitter.js.map +1 -0
- package/lib/TextSplitter.spec.d.ts +2 -0
- package/lib/TextSplitter.spec.d.ts.map +1 -0
- package/lib/TextSplitter.spec.js +337 -0
- package/lib/TextSplitter.spec.js.map +1 -0
- 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 +14 -0
- package/lib/WebFetcher.d.ts.map +1 -0
- package/lib/WebFetcher.js +238 -0
- package/lib/WebFetcher.js.map +1 -0
- 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 +20 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +36 -0
- package/lib/index.js.map +1 -0
- package/lib/internals/Colorize.d.ts +14 -0
- package/lib/internals/Colorize.d.ts.map +1 -0
- package/lib/internals/Colorize.js +69 -0
- package/lib/internals/Colorize.js.map +1 -0
- package/lib/internals/index.d.ts +3 -0
- package/lib/internals/index.d.ts.map +1 -0
- package/lib/internals/index.js +19 -0
- package/lib/internals/index.js.map +1 -0
- package/lib/internals/types.d.ts +43 -0
- package/lib/internals/types.d.ts.map +1 -0
- package/lib/internals/types.js +3 -0
- package/lib/internals/types.js.map +1 -0
- 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 +153 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- 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 +2 -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 +760 -0
- package/lib/vectra-cli.js.map +1 -0
- 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 +91 -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 -66
- package/src/LocalIndex.ts +479 -429
- package/src/OpenAIEmbeddings.spec.ts +354 -0
- package/src/OpenAIEmbeddings.ts +26 -27
- package/src/TextSplitter.spec.ts +342 -0
- package/src/TextSplitter.ts +517 -532
- 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
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const pathUtils_1 = __importDefault(require("./utils/pathUtils"));
|
|
16
|
+
const node_assert_1 = require("node:assert");
|
|
17
|
+
const mocha_1 = require("mocha");
|
|
18
|
+
const LocalDocumentIndex_1 = require("./LocalDocumentIndex");
|
|
19
|
+
class FakeEmbeddings {
|
|
20
|
+
constructor() {
|
|
21
|
+
this.maxTokens = 10;
|
|
22
|
+
this.createEmbeddingsCalls = [];
|
|
23
|
+
this.createEmbeddingsResponses = [];
|
|
24
|
+
}
|
|
25
|
+
createEmbeddings(inputs) {
|
|
26
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
this.createEmbeddingsCalls.push(inputs);
|
|
28
|
+
if (this.createEmbeddingsResponses.length > 0) {
|
|
29
|
+
return this.createEmbeddingsResponses.shift();
|
|
30
|
+
}
|
|
31
|
+
const arr = Array.isArray(inputs) ? inputs : [inputs];
|
|
32
|
+
return { status: 'success', output: arr.map(() => [0.1, 0.2]) };
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
class SimpleTokenizer {
|
|
37
|
+
encode(text) {
|
|
38
|
+
return Array.from(text).map(ch => ch.charCodeAt(0));
|
|
39
|
+
}
|
|
40
|
+
decode(tokens) {
|
|
41
|
+
return tokens.map(t => String.fromCharCode(t)).join('');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
class FakeStorage {
|
|
45
|
+
constructor() {
|
|
46
|
+
this.files = new Map();
|
|
47
|
+
this.folders = new Set();
|
|
48
|
+
this.pathExistsCalls = [];
|
|
49
|
+
this.readFileCalls = [];
|
|
50
|
+
this.upsertFileCalls = [];
|
|
51
|
+
this.deleteFileCalls = [];
|
|
52
|
+
this.createdFolders = [];
|
|
53
|
+
this.deletedFolders = [];
|
|
54
|
+
this.createdFiles = [];
|
|
55
|
+
}
|
|
56
|
+
createFile(filePath, content) {
|
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
if (this.files.has(filePath))
|
|
59
|
+
throw new Error('File already exists');
|
|
60
|
+
this.createdFiles.push(filePath);
|
|
61
|
+
const text = Buffer.isBuffer(content) ? content.toString('utf8') : content;
|
|
62
|
+
this.files.set(filePath, text);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
createFolder(folderPath) {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
this.createdFolders.push(folderPath);
|
|
68
|
+
this.folders.add(folderPath);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
deleteFile(filePath) {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
this.deleteFileCalls.push(filePath);
|
|
74
|
+
if (!this.files.has(filePath)) {
|
|
75
|
+
throw new Error('File not found');
|
|
76
|
+
}
|
|
77
|
+
this.files.delete(filePath);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
deleteFolder(folderPath) {
|
|
81
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
82
|
+
this.deletedFolders.push(folderPath);
|
|
83
|
+
for (const key of [...this.files.keys()]) {
|
|
84
|
+
if (key.startsWith(folderPath))
|
|
85
|
+
this.files.delete(key);
|
|
86
|
+
}
|
|
87
|
+
this.folders.delete(folderPath);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
getDetails(fileOrFolderPath) {
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
if (this.folders.has(fileOrFolderPath)) {
|
|
93
|
+
return { name: pathUtils_1.default.basename(fileOrFolderPath), path: fileOrFolderPath, isFolder: true };
|
|
94
|
+
}
|
|
95
|
+
if (this.files.has(fileOrFolderPath)) {
|
|
96
|
+
return { name: pathUtils_1.default.basename(fileOrFolderPath), path: fileOrFolderPath, isFolder: false };
|
|
97
|
+
}
|
|
98
|
+
throw new Error('Path not found');
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
listFiles(folderPath_1) {
|
|
102
|
+
return __awaiter(this, arguments, void 0, function* (folderPath, filter = 'all') {
|
|
103
|
+
const results = [];
|
|
104
|
+
for (const f of this.folders) {
|
|
105
|
+
const parent = pathUtils_1.default.dirname(f);
|
|
106
|
+
if (parent === folderPath) {
|
|
107
|
+
if (filter === 'all' || filter === 'folders') {
|
|
108
|
+
results.push({ name: pathUtils_1.default.basename(f), path: f, isFolder: true });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
for (const f of this.files.keys()) {
|
|
113
|
+
const parent = pathUtils_1.default.dirname(f);
|
|
114
|
+
if (parent === folderPath) {
|
|
115
|
+
if (filter === 'all' || filter === 'files') {
|
|
116
|
+
results.push({ name: pathUtils_1.default.basename(f), path: f, isFolder: false });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return results;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
pathExists(fileOrFolderPath) {
|
|
124
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
this.pathExistsCalls.push(fileOrFolderPath);
|
|
126
|
+
return this.files.has(fileOrFolderPath) || this.folders.has(fileOrFolderPath);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
readFile(filePath) {
|
|
130
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
this.readFileCalls.push(filePath);
|
|
132
|
+
if (!this.files.has(filePath))
|
|
133
|
+
throw new Error('File not found');
|
|
134
|
+
return Buffer.from(this.files.get(filePath), 'utf8');
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
upsertFile(filePath, content) {
|
|
138
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
139
|
+
const text = Buffer.isBuffer(content) ? content.toString('utf8') : content;
|
|
140
|
+
this.upsertFileCalls.push({ path: filePath, content: text });
|
|
141
|
+
this.files.set(filePath, text);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
(0, mocha_1.describe)('LocalDocumentIndex', () => {
|
|
146
|
+
let storage;
|
|
147
|
+
let embeddings;
|
|
148
|
+
let tokenizer;
|
|
149
|
+
let index;
|
|
150
|
+
const folderPath = '/fake/path';
|
|
151
|
+
const indexJsonPath = pathUtils_1.default.join(folderPath, 'index.json');
|
|
152
|
+
(0, mocha_1.beforeEach)(() => {
|
|
153
|
+
storage = new FakeStorage();
|
|
154
|
+
embeddings = new FakeEmbeddings();
|
|
155
|
+
tokenizer = new SimpleTokenizer();
|
|
156
|
+
storage.files.set(indexJsonPath, JSON.stringify({ version: 1, metadata_config: {}, items: [] }));
|
|
157
|
+
const config = { folderPath, embeddings, tokenizer, storage };
|
|
158
|
+
index = new LocalDocumentIndex_1.LocalDocumentIndex(config);
|
|
159
|
+
});
|
|
160
|
+
(0, mocha_1.describe)('constructor and getters', () => {
|
|
161
|
+
(0, mocha_1.it)('uses defaults when not provided (GPT3Tokenizer, undefined embeddings)', () => {
|
|
162
|
+
const idx = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath });
|
|
163
|
+
node_assert_1.strict.equal(idx.tokenizer.constructor.name, 'GPT3Tokenizer');
|
|
164
|
+
node_assert_1.strict.equal(idx.embeddings, undefined);
|
|
165
|
+
});
|
|
166
|
+
(0, mocha_1.it)('uses provided tokenizer and embeddings', () => {
|
|
167
|
+
const fakeTok = new SimpleTokenizer();
|
|
168
|
+
const idx = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath, tokenizer: fakeTok, embeddings, storage });
|
|
169
|
+
node_assert_1.strict.equal(idx.tokenizer, fakeTok);
|
|
170
|
+
node_assert_1.strict.equal(idx.embeddings, embeddings);
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
(0, mocha_1.describe)('isCatalogCreated', () => {
|
|
174
|
+
(0, mocha_1.it)('returns true if catalog.json exists at correct path', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
175
|
+
const catalogPath = pathUtils_1.default.join(folderPath, 'catalog.json');
|
|
176
|
+
storage.files.set(catalogPath, '{}');
|
|
177
|
+
const exists = yield index.isCatalogCreated();
|
|
178
|
+
node_assert_1.strict.equal(exists, true);
|
|
179
|
+
node_assert_1.strict.equal(storage.pathExistsCalls[0], catalogPath);
|
|
180
|
+
}));
|
|
181
|
+
(0, mocha_1.it)('returns false if catalog.json does not exist', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
182
|
+
const exists = yield index.isCatalogCreated();
|
|
183
|
+
node_assert_1.strict.equal(exists, false);
|
|
184
|
+
}));
|
|
185
|
+
});
|
|
186
|
+
(0, mocha_1.describe)('loadIndexData', () => {
|
|
187
|
+
(0, mocha_1.it)('early returns if catalog already loaded (no catalog read)', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
188
|
+
index._catalog = { version: 1, count: 0, uriToId: {}, idToUri: {} };
|
|
189
|
+
yield index.loadIndexData(); // base will read index.json; catalog should not be read
|
|
190
|
+
const catalogPath = pathUtils_1.default.join(folderPath, 'catalog.json');
|
|
191
|
+
const catalogReads = storage.readFileCalls.filter(p => p === catalogPath).length;
|
|
192
|
+
node_assert_1.strict.equal(catalogReads, 0);
|
|
193
|
+
}));
|
|
194
|
+
(0, mocha_1.it)('loads existing catalog from storage', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
195
|
+
const catalogPath = pathUtils_1.default.join(folderPath, 'catalog.json');
|
|
196
|
+
const catalogData = JSON.stringify({ version: 1, count: 2, uriToId: { a: 'id1' }, idToUri: { id1: 'a' } });
|
|
197
|
+
storage.files.set(catalogPath, catalogData);
|
|
198
|
+
const loaded = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath, storage, tokenizer });
|
|
199
|
+
(storage.files).set(indexJsonPath, JSON.stringify({ version: 1, metadata_config: {}, items: [] }));
|
|
200
|
+
yield loaded.loadIndexData();
|
|
201
|
+
node_assert_1.strict.deepEqual(loaded._catalog, JSON.parse(catalogData));
|
|
202
|
+
}));
|
|
203
|
+
(0, mocha_1.it)('creates new catalog if none exists and persists it', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
204
|
+
const newIndex = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath, storage, tokenizer });
|
|
205
|
+
yield newIndex.loadIndexData();
|
|
206
|
+
const catalogPath = pathUtils_1.default.join(folderPath, 'catalog.json');
|
|
207
|
+
(0, node_assert_1.strict)(storage.upsertFileCalls.some(c => c.path === catalogPath));
|
|
208
|
+
const catalog = newIndex._catalog;
|
|
209
|
+
node_assert_1.strict.equal(catalog.version, 1);
|
|
210
|
+
node_assert_1.strict.equal(catalog.count, 0);
|
|
211
|
+
node_assert_1.strict.deepEqual(catalog.uriToId, {});
|
|
212
|
+
node_assert_1.strict.deepEqual(catalog.idToUri, {});
|
|
213
|
+
}));
|
|
214
|
+
(0, mocha_1.it)('wraps error when failing to create catalog', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
215
|
+
const failing = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath, storage, tokenizer });
|
|
216
|
+
const orig = storage.upsertFile.bind(storage);
|
|
217
|
+
storage.upsertFile = (p, c) => __awaiter(void 0, void 0, void 0, function* () {
|
|
218
|
+
if (p.endsWith('catalog.json'))
|
|
219
|
+
throw new Error('disk error');
|
|
220
|
+
return orig(p, c);
|
|
221
|
+
});
|
|
222
|
+
yield node_assert_1.strict.rejects(failing.loadIndexData(), /Error creating document catalog: Error: disk error/);
|
|
223
|
+
}));
|
|
224
|
+
});
|
|
225
|
+
(0, mocha_1.describe)('getDocumentId and getDocumentUri', () => {
|
|
226
|
+
(0, mocha_1.beforeEach)(() => {
|
|
227
|
+
index._catalog = { version: 1, count: 1, uriToId: { doc1: 'id1' }, idToUri: { id1: 'doc1' } };
|
|
228
|
+
});
|
|
229
|
+
(0, mocha_1.it)('returns id for known uri', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
230
|
+
node_assert_1.strict.equal(yield index.getDocumentId('doc1'), 'id1');
|
|
231
|
+
}));
|
|
232
|
+
(0, mocha_1.it)('returns undefined for unknown uri', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
233
|
+
node_assert_1.strict.equal(yield index.getDocumentId('nope'), undefined);
|
|
234
|
+
}));
|
|
235
|
+
(0, mocha_1.it)('returns uri for known id', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
236
|
+
node_assert_1.strict.equal(yield index.getDocumentUri('id1'), 'doc1');
|
|
237
|
+
}));
|
|
238
|
+
(0, mocha_1.it)('returns undefined for unknown id', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
239
|
+
node_assert_1.strict.equal(yield index.getDocumentUri('nope'), undefined);
|
|
240
|
+
}));
|
|
241
|
+
});
|
|
242
|
+
(0, mocha_1.describe)('getCatalogStats', () => {
|
|
243
|
+
(0, mocha_1.it)('returns catalog stats merged with index stats', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
244
|
+
index._catalog = { version: 1, count: 2, uriToId: {}, idToUri: {} };
|
|
245
|
+
index.getIndexStats = () => __awaiter(void 0, void 0, void 0, function* () { return ({ items: 5, metadata_config: { indexed: ['a'] } }); });
|
|
246
|
+
const stats = yield index.getCatalogStats();
|
|
247
|
+
node_assert_1.strict.equal(stats.version, 1);
|
|
248
|
+
node_assert_1.strict.equal(stats.documents, 2);
|
|
249
|
+
node_assert_1.strict.equal(stats.chunks, 5);
|
|
250
|
+
node_assert_1.strict.deepEqual(stats.metadata_config, { indexed: ['a'] });
|
|
251
|
+
}));
|
|
252
|
+
});
|
|
253
|
+
(0, mocha_1.describe)('deleteDocument', () => {
|
|
254
|
+
(0, mocha_1.it)('returns early if document not found', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
255
|
+
const result = yield index.deleteDocument('missing');
|
|
256
|
+
node_assert_1.strict.equal(result, undefined);
|
|
257
|
+
}));
|
|
258
|
+
(0, mocha_1.it)('successfully deletes chunks, updates catalog, and removes files', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
259
|
+
const uri = 'doc://one';
|
|
260
|
+
const documentId = 'id-1';
|
|
261
|
+
index._catalog = { version: 1, count: 1, uriToId: { [uri]: documentId }, idToUri: { [documentId]: uri } };
|
|
262
|
+
storage.files.set(pathUtils_1.default.join(folderPath, `${documentId}.txt`), 'hello');
|
|
263
|
+
storage.files.set(pathUtils_1.default.join(folderPath, `${documentId}.json`), '{"k":"v"}');
|
|
264
|
+
index.listItemsByMetadata = () => __awaiter(void 0, void 0, void 0, function* () { return [{ id: 'chunk-1', metadata: { documentId } }]; });
|
|
265
|
+
index.deleteItem = () => __awaiter(void 0, void 0, void 0, function* () { });
|
|
266
|
+
yield index.deleteDocument(uri);
|
|
267
|
+
(0, node_assert_1.strict)(!storage.files.has(pathUtils_1.default.join(folderPath, `${documentId}.txt`)));
|
|
268
|
+
(0, node_assert_1.strict)(!storage.files.has(pathUtils_1.default.join(folderPath, `${documentId}.json`)));
|
|
269
|
+
node_assert_1.strict.equal(index._catalog.count, 0);
|
|
270
|
+
node_assert_1.strict.equal(index._catalog.uriToId[uri], undefined);
|
|
271
|
+
node_assert_1.strict.equal(index._catalog.idToUri[documentId], undefined);
|
|
272
|
+
}));
|
|
273
|
+
(0, mocha_1.it)('cancels update and throws when deleteItem fails', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
274
|
+
const uri = 'doc://err';
|
|
275
|
+
const documentId = 'id-err';
|
|
276
|
+
index._catalog = { version: 1, count: 1, uriToId: { [uri]: documentId }, idToUri: { [documentId]: uri } };
|
|
277
|
+
index.listItemsByMetadata = () => __awaiter(void 0, void 0, void 0, function* () { return [{ id: 'chunk-1', metadata: { documentId } }]; });
|
|
278
|
+
index.deleteItem = () => __awaiter(void 0, void 0, void 0, function* () { throw new Error('delete error'); });
|
|
279
|
+
yield node_assert_1.strict.rejects(index.deleteDocument(uri), /Error deleting document "doc:\/\/err": Error: delete error/);
|
|
280
|
+
}));
|
|
281
|
+
(0, mocha_1.it)('wraps error when deleting text file fails and ignores metadata deletion failures', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
282
|
+
const uri = 'doc://bad-delete';
|
|
283
|
+
const documentId = 'id-text-err';
|
|
284
|
+
index._catalog = { version: 1, count: 1, uriToId: { [uri]: documentId }, idToUri: { [documentId]: uri } };
|
|
285
|
+
index.listItemsByMetadata = () => __awaiter(void 0, void 0, void 0, function* () { return []; });
|
|
286
|
+
index.deleteItem = () => __awaiter(void 0, void 0, void 0, function* () { });
|
|
287
|
+
const originalDelete = storage.deleteFile.bind(storage);
|
|
288
|
+
storage.deleteFile = (filePath) => __awaiter(void 0, void 0, void 0, function* () {
|
|
289
|
+
if (filePath.endsWith('.txt'))
|
|
290
|
+
throw new Error('delete text error');
|
|
291
|
+
return originalDelete(filePath);
|
|
292
|
+
});
|
|
293
|
+
yield node_assert_1.strict.rejects(index.deleteDocument(uri), /Error removing text file for document "doc:\/\/bad-delete" from disk: Error: delete text error/);
|
|
294
|
+
index._catalog = { version: 1, count: 1, uriToId: { [uri]: documentId }, idToUri: { [documentId]: uri } };
|
|
295
|
+
storage.files.set(pathUtils_1.default.join(folderPath, `${documentId}.txt`), 'x');
|
|
296
|
+
storage.files.set(pathUtils_1.default.join(folderPath, `${documentId}.json`), '{}');
|
|
297
|
+
storage.deleteFile = (filePath) => __awaiter(void 0, void 0, void 0, function* () {
|
|
298
|
+
if (filePath.endsWith('.json'))
|
|
299
|
+
throw new Error('delete json error');
|
|
300
|
+
return originalDelete(filePath);
|
|
301
|
+
});
|
|
302
|
+
yield index.deleteDocument(uri);
|
|
303
|
+
(0, node_assert_1.strict)(!storage.files.has(pathUtils_1.default.join(folderPath, `${documentId}.txt`)));
|
|
304
|
+
}));
|
|
305
|
+
});
|
|
306
|
+
(0, mocha_1.describe)('upsertDocument', () => {
|
|
307
|
+
(0, mocha_1.it)('throws if embeddings not configured', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
308
|
+
const idx = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath, storage, tokenizer });
|
|
309
|
+
yield node_assert_1.strict.rejects(idx.upsertDocument('uri', 'text'), /Embeddings model not configured/);
|
|
310
|
+
}));
|
|
311
|
+
(0, mocha_1.it)('deletes existing document when re-inserting same uri', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
312
|
+
const uri = 'doc://exists';
|
|
313
|
+
const existingId = 'doc-1';
|
|
314
|
+
index._catalog = { version: 1, count: 1, uriToId: { [uri]: existingId }, idToUri: { [existingId]: uri } };
|
|
315
|
+
let deleteCalled = false;
|
|
316
|
+
index.deleteDocument = () => __awaiter(void 0, void 0, void 0, function* () { deleteCalled = true; });
|
|
317
|
+
index.insertItem = () => __awaiter(void 0, void 0, void 0, function* () { });
|
|
318
|
+
embeddings.createEmbeddingsResponses.push({ status: 'success', output: [[0.01, 0.02]] });
|
|
319
|
+
const doc = yield index.upsertDocument(uri, 'hello world');
|
|
320
|
+
(0, node_assert_1.strict)(deleteCalled);
|
|
321
|
+
node_assert_1.strict.equal(doc.uri, uri);
|
|
322
|
+
}));
|
|
323
|
+
(0, mocha_1.it)('infers docType from uri when not provided and writes files, updates catalog', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
324
|
+
index.insertItem = () => __awaiter(void 0, void 0, void 0, function* () { });
|
|
325
|
+
embeddings.createEmbeddingsResponses.push({ status: 'success', output: [[0.1, 0.2]] });
|
|
326
|
+
const metadata = { author: 'test' };
|
|
327
|
+
const doc = yield index.upsertDocument('file.md', 'content here', undefined, metadata);
|
|
328
|
+
const textPath = pathUtils_1.default.join(folderPath, `${doc.id}.txt`);
|
|
329
|
+
const metaPath = pathUtils_1.default.join(folderPath, `${doc.id}.json`);
|
|
330
|
+
(0, node_assert_1.strict)(storage.files.has(textPath));
|
|
331
|
+
(0, node_assert_1.strict)(storage.files.has(metaPath));
|
|
332
|
+
node_assert_1.strict.equal(index._catalog.count, 1);
|
|
333
|
+
node_assert_1.strict.equal(index._catalog.idToUri[doc.id], 'file.md');
|
|
334
|
+
node_assert_1.strict.equal(index._catalog.uriToId['file.md'], doc.id);
|
|
335
|
+
}));
|
|
336
|
+
(0, mocha_1.it)('batches chunk embeddings using embeddings.maxTokens and calls createEmbeddings per batch', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
337
|
+
const longText = 'a '.repeat(30);
|
|
338
|
+
const calls = [];
|
|
339
|
+
embeddings.createEmbeddings = (inputs) => __awaiter(void 0, void 0, void 0, function* () {
|
|
340
|
+
calls.push(inputs);
|
|
341
|
+
const arr = Array.isArray(inputs) ? inputs : [inputs];
|
|
342
|
+
return { status: 'success', output: arr.map(() => [0.1, 0.2]) };
|
|
343
|
+
});
|
|
344
|
+
index.insertItem = () => __awaiter(void 0, void 0, void 0, function* () { });
|
|
345
|
+
yield index.upsertDocument('file.txt', longText);
|
|
346
|
+
(0, node_assert_1.strict)(calls.length > 1);
|
|
347
|
+
}));
|
|
348
|
+
(0, mocha_1.it)('wraps embedding generation errors and non-success statuses', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
349
|
+
embeddings.createEmbeddings = () => __awaiter(void 0, void 0, void 0, function* () { throw new Error('fail'); });
|
|
350
|
+
yield node_assert_1.strict.rejects(index.upsertDocument('u', 't'), /Error generating embeddings: Error: fail/);
|
|
351
|
+
embeddings.createEmbeddings = () => __awaiter(void 0, void 0, void 0, function* () { return ({ status: 'error', message: 'bad' }); });
|
|
352
|
+
yield node_assert_1.strict.rejects(index.upsertDocument('u', 't'), /Error generating embeddings: bad/);
|
|
353
|
+
}));
|
|
354
|
+
(0, mocha_1.it)('cancels update and throws when insertItem fails', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
355
|
+
embeddings.createEmbeddingsResponses.push({ status: 'success', output: [[0.1, 0.2]] });
|
|
356
|
+
index.insertItem = () => __awaiter(void 0, void 0, void 0, function* () { throw new Error('insert error'); });
|
|
357
|
+
yield node_assert_1.strict.rejects(index.upsertDocument('u', 't'), /Error adding document "u": Error: insert error/);
|
|
358
|
+
}));
|
|
359
|
+
});
|
|
360
|
+
(0, mocha_1.describe)('listDocuments', () => {
|
|
361
|
+
(0, mocha_1.it)('returns empty list when no chunks', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
362
|
+
index.listItems = () => __awaiter(void 0, void 0, void 0, function* () { return []; });
|
|
363
|
+
const docs = yield index.listDocuments();
|
|
364
|
+
node_assert_1.strict.deepEqual(docs, []);
|
|
365
|
+
}));
|
|
366
|
+
(0, mocha_1.it)('groups chunks per document and produces LocalDocumentResult', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
367
|
+
const docId = 'idx-1';
|
|
368
|
+
const uri = 'doc://1';
|
|
369
|
+
index._catalog = { version: 1, count: 1, uriToId: { [uri]: docId }, idToUri: { [docId]: uri } };
|
|
370
|
+
index.listItems = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
371
|
+
return [
|
|
372
|
+
{ id: 'c1', metadata: { documentId: docId, startPos: 0, endPos: 9 }, vector: [0], norm: 1 },
|
|
373
|
+
{ id: 'c2', metadata: { documentId: docId, startPos: 10, endPos: 19 }, vector: [0], norm: 1 },
|
|
374
|
+
];
|
|
375
|
+
});
|
|
376
|
+
const docs = yield index.listDocuments();
|
|
377
|
+
node_assert_1.strict.equal(docs.length, 1);
|
|
378
|
+
node_assert_1.strict.equal(docs[0].id, docId);
|
|
379
|
+
node_assert_1.strict.equal(docs[0].uri, uri);
|
|
380
|
+
node_assert_1.strict.ok(docs[0].score >= 0);
|
|
381
|
+
}));
|
|
382
|
+
});
|
|
383
|
+
(0, mocha_1.describe)('queryDocuments', () => {
|
|
384
|
+
(0, mocha_1.it)('throws if embeddings not configured', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
385
|
+
const idx = new LocalDocumentIndex_1.LocalDocumentIndex({ folderPath, storage, tokenizer });
|
|
386
|
+
yield node_assert_1.strict.rejects(idx.queryDocuments('q'), /Embeddings model not configured/);
|
|
387
|
+
}));
|
|
388
|
+
(0, mocha_1.it)('uses default options, normalizes query for embeddings, and forwards to queryItems', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
389
|
+
let received;
|
|
390
|
+
embeddings.createEmbeddingsResponses.push({ status: 'success', output: [[0.5, 0.6]] });
|
|
391
|
+
index.queryItems = (emb, q, maxChunks, filter, isBm25) => __awaiter(void 0, void 0, void 0, function* () {
|
|
392
|
+
received = { emb, query: q, maxChunks, filter, isBm25 };
|
|
393
|
+
return [];
|
|
394
|
+
});
|
|
395
|
+
yield index.queryDocuments('a\nb\nc');
|
|
396
|
+
(0, node_assert_1.strict)(received);
|
|
397
|
+
node_assert_1.strict.equal(received.query, 'a\nb\nc');
|
|
398
|
+
node_assert_1.strict.equal(received.maxChunks, 50);
|
|
399
|
+
node_assert_1.strict.equal(received.filter, undefined);
|
|
400
|
+
node_assert_1.strict.equal(received.isBm25, undefined);
|
|
401
|
+
const lastEmbCall = embeddings.createEmbeddingsCalls.pop().toString();
|
|
402
|
+
node_assert_1.strict.equal(lastEmbCall, 'a b c');
|
|
403
|
+
}));
|
|
404
|
+
(0, mocha_1.it)('wraps errors in query embedding generation and non-success status', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
405
|
+
embeddings.createEmbeddings = () => __awaiter(void 0, void 0, void 0, function* () { throw new Error('fail'); });
|
|
406
|
+
yield node_assert_1.strict.rejects(index.queryDocuments('q'), /Error generating embeddings for query: Error: fail/);
|
|
407
|
+
embeddings.createEmbeddings = () => __awaiter(void 0, void 0, void 0, function* () { return ({ status: 'error', message: 'bad' }); });
|
|
408
|
+
yield node_assert_1.strict.rejects(index.queryDocuments('q'), /Error generating embeddings for query: bad/);
|
|
409
|
+
}));
|
|
410
|
+
(0, mocha_1.it)('groups results by document, sorts by score, returns top N, and forwards filter/isBm25', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
411
|
+
embeddings.createEmbeddingsResponses.push({ status: 'success', output: [[0.9, 0.8]] });
|
|
412
|
+
const docId1 = 'd1', docId2 = 'd2';
|
|
413
|
+
index._catalog = { version: 1, count: 2, uriToId: {}, idToUri: { [docId1]: 'u1', [docId2]: 'u2' } };
|
|
414
|
+
let forwarded = { filter: undefined, isBm25: undefined };
|
|
415
|
+
index.queryItems = (_e, q, k, f, isBm25) => __awaiter(void 0, void 0, void 0, function* () {
|
|
416
|
+
forwarded.filter = f;
|
|
417
|
+
forwarded.isBm25 = isBm25;
|
|
418
|
+
return [
|
|
419
|
+
{ item: { id: 'c1', metadata: { documentId: docId1 }, vector: [0], norm: 1 }, score: 0.85 },
|
|
420
|
+
{ item: { id: 'c2', metadata: { documentId: docId2 }, vector: [0], norm: 1 }, score: 0.95 },
|
|
421
|
+
{ item: { id: 'c3', metadata: { documentId: docId1 }, vector: [0], norm: 1 }, score: 0.8 },
|
|
422
|
+
];
|
|
423
|
+
});
|
|
424
|
+
const results = yield index.queryDocuments('q', { maxDocuments: 1, filter: { key: 'v' }, isBm25: true });
|
|
425
|
+
node_assert_1.strict.equal(results.length, 1);
|
|
426
|
+
node_assert_1.strict.equal(results[0].id, docId2);
|
|
427
|
+
node_assert_1.strict.deepEqual(forwarded.filter, { key: 'v' });
|
|
428
|
+
node_assert_1.strict.equal(forwarded.isBm25, true);
|
|
429
|
+
}));
|
|
430
|
+
});
|
|
431
|
+
(0, mocha_1.describe)('update transaction overrides', () => {
|
|
432
|
+
(0, mocha_1.it)('beginUpdate clones catalog; cancelUpdate clears; endUpdate persists and clears new catalog', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
433
|
+
index._catalog = { version: 1, count: 0, uriToId: {}, idToUri: {} };
|
|
434
|
+
yield index.beginUpdate();
|
|
435
|
+
node_assert_1.strict.notEqual(index._newCatalog, index._catalog);
|
|
436
|
+
node_assert_1.strict.deepEqual(index._newCatalog, index._catalog);
|
|
437
|
+
index.cancelUpdate();
|
|
438
|
+
node_assert_1.strict.equal(index._newCatalog, undefined);
|
|
439
|
+
yield index.beginUpdate();
|
|
440
|
+
index._newCatalog.count = 1;
|
|
441
|
+
yield index.endUpdate();
|
|
442
|
+
const catalogPath = pathUtils_1.default.join(folderPath, 'catalog.json');
|
|
443
|
+
(0, node_assert_1.strict)(storage.upsertFileCalls.some(c => c.path === catalogPath));
|
|
444
|
+
node_assert_1.strict.equal(index._newCatalog, undefined);
|
|
445
|
+
node_assert_1.strict.equal(index._catalog.count, 1);
|
|
446
|
+
}));
|
|
447
|
+
(0, mocha_1.it)('endUpdate wraps storage errors when saving catalog', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
448
|
+
index._catalog = { version: 1, count: 0, uriToId: {}, idToUri: {} };
|
|
449
|
+
yield index.beginUpdate();
|
|
450
|
+
const orig = storage.upsertFile.bind(storage);
|
|
451
|
+
storage.upsertFile = (p, c) => __awaiter(void 0, void 0, void 0, function* () {
|
|
452
|
+
if (p.endsWith('index.json'))
|
|
453
|
+
return orig(p, c);
|
|
454
|
+
if (p.endsWith('catalog.json'))
|
|
455
|
+
throw new Error('fail');
|
|
456
|
+
return orig(p, c);
|
|
457
|
+
});
|
|
458
|
+
yield node_assert_1.strict.rejects(index.endUpdate(), /Error saving document catalog: Error: fail/);
|
|
459
|
+
(0, node_assert_1.strict)(index._newCatalog);
|
|
460
|
+
}));
|
|
461
|
+
(0, mocha_1.it)('createIndex calls super then loads catalog', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
462
|
+
let loadCalled = false;
|
|
463
|
+
index.loadIndexData = () => __awaiter(void 0, void 0, void 0, function* () { loadCalled = true; });
|
|
464
|
+
yield index.createIndex({ version: 1, deleteIfExists: true }); // ensure we don't fail if index.json exists [[2]]
|
|
465
|
+
(0, node_assert_1.strict)(loadCalled);
|
|
466
|
+
}));
|
|
467
|
+
});
|
|
468
|
+
(0, mocha_1.describe)('file path correctness across operations', () => {
|
|
469
|
+
(0, mocha_1.it)('uses correct joined paths for catalog, text, and metadata files', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
470
|
+
const uri = 'doc://paths.txt';
|
|
471
|
+
const docId = 'id-paths';
|
|
472
|
+
index._catalog = { version: 1, count: 1, uriToId: { [uri]: docId }, idToUri: { [docId]: uri } };
|
|
473
|
+
storage.files.set(pathUtils_1.default.join(folderPath, `${docId}.txt`), 'text');
|
|
474
|
+
storage.files.set(pathUtils_1.default.join(folderPath, `${docId}.json`), '{}');
|
|
475
|
+
index.listItemsByMetadata = () => __awaiter(void 0, void 0, void 0, function* () { return []; });
|
|
476
|
+
index.deleteItem = () => __awaiter(void 0, void 0, void 0, function* () { });
|
|
477
|
+
yield index.deleteDocument(uri);
|
|
478
|
+
(0, node_assert_1.strict)(storage.deleteFileCalls.includes(pathUtils_1.default.join(folderPath, `${docId}.txt`)));
|
|
479
|
+
(0, node_assert_1.strict)(storage.deleteFileCalls.includes(pathUtils_1.default.join(folderPath, `${docId}.json`)));
|
|
480
|
+
index.insertItem = () => __awaiter(void 0, void 0, void 0, function* () { });
|
|
481
|
+
embeddings.createEmbeddingsResponses.push({ status: 'success', output: [[0.1, 0.2]] });
|
|
482
|
+
const newDoc = yield index.upsertDocument(uri, 'text', 'txt', { key: 'value' });
|
|
483
|
+
const metaPath = pathUtils_1.default.join(folderPath, `${newDoc.id}.json`);
|
|
484
|
+
const textPath = pathUtils_1.default.join(folderPath, `${newDoc.id}.txt`);
|
|
485
|
+
(0, node_assert_1.strict)(storage.upsertFileCalls.some(c => c.path === metaPath));
|
|
486
|
+
(0, node_assert_1.strict)(storage.upsertFileCalls.some(c => c.path === textPath));
|
|
487
|
+
yield index.beginUpdate();
|
|
488
|
+
yield index.endUpdate();
|
|
489
|
+
const catalogPath = pathUtils_1.default.join(folderPath, 'catalog.json');
|
|
490
|
+
(0, node_assert_1.strict)(storage.upsertFileCalls.some(c => c.path === catalogPath));
|
|
491
|
+
}));
|
|
492
|
+
});
|
|
493
|
+
});
|
|
494
|
+
//# sourceMappingURL=LocalDocumentIndex.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalDocumentIndex.spec.js","sourceRoot":"","sources":["../src/LocalDocumentIndex.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { LocalDocument } from "./LocalDocument";
|
|
2
|
+
import { LocalDocumentIndex } from "./LocalDocumentIndex";
|
|
3
|
+
import { QueryResult, DocumentChunkMetadata, Tokenizer, DocumentTextSection } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* Represents a search result for a document stored on disk.
|
|
6
|
+
*/
|
|
7
|
+
export declare class LocalDocumentResult extends LocalDocument {
|
|
8
|
+
private readonly _chunks;
|
|
9
|
+
private readonly _tokenizer;
|
|
10
|
+
private readonly _score;
|
|
11
|
+
static readonly CONNECTOR = "\n\n...\n\n";
|
|
12
|
+
/**
|
|
13
|
+
* @private
|
|
14
|
+
* Internal constructor for `LocalDocumentResult` instances.
|
|
15
|
+
*/
|
|
16
|
+
constructor(index: LocalDocumentIndex, id: string, uri: string, chunks: QueryResult<DocumentChunkMetadata>[], tokenizer: Tokenizer);
|
|
17
|
+
/**
|
|
18
|
+
* Returns the chunks of the document that matched the query.
|
|
19
|
+
*/
|
|
20
|
+
get chunks(): QueryResult<DocumentChunkMetadata>[];
|
|
21
|
+
/**
|
|
22
|
+
* Returns the average score of the document result.
|
|
23
|
+
*/
|
|
24
|
+
get score(): number;
|
|
25
|
+
/**
|
|
26
|
+
* Helper: robust check for BM25-marked chunks.
|
|
27
|
+
*/
|
|
28
|
+
protected isBm25Chunk(chunk: QueryResult<DocumentChunkMetadata>): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* A small, testable packer that mimics the old `renderAllSections()` behavior
|
|
31
|
+
* but exposes the internal flush logic so all branches are coverable.
|
|
32
|
+
*/
|
|
33
|
+
protected createAllSectionsPacker(): {
|
|
34
|
+
flush: () => void;
|
|
35
|
+
pushChunkTokens: (tokens: number[], score: number, isBm25Chunk: boolean) => void;
|
|
36
|
+
getSections: () => DocumentTextSection[];
|
|
37
|
+
__testSetState: (state: {
|
|
38
|
+
currentTokens?: number[];
|
|
39
|
+
currentScores?: number[];
|
|
40
|
+
currentIsBm25AllTrue?: boolean;
|
|
41
|
+
}) => void;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Renders all of the results chunks as spans of text (sections.)
|
|
45
|
+
* @remarks
|
|
46
|
+
* - Chunks are sorted by document order.
|
|
47
|
+
* - Multiple small chunks are packed into a single section up to maxTokens.
|
|
48
|
+
* - Oversized chunks are split into multiple sections, each carrying the chunk's score.
|
|
49
|
+
* - When multiple chunks are packed, section score is the arithmetic mean of packed chunks' scores.
|
|
50
|
+
*/
|
|
51
|
+
renderAllSections(maxTokens: number): Promise<DocumentTextSection[]>;
|
|
52
|
+
/**
|
|
53
|
+
* Testable helper: build a single fallback section from the top-scoring chunk,
|
|
54
|
+
* truncated to exactly maxTokens tokens.
|
|
55
|
+
*/
|
|
56
|
+
protected buildFallbackTopChunkSection(docText: string, chunks: QueryResult<DocumentChunkMetadata>[], isBm25: boolean, maxTokens: number): DocumentTextSection[];
|
|
57
|
+
/**
|
|
58
|
+
* Internal helper: builds sections for either semantic or BM25 chunk lists using a heatmap.
|
|
59
|
+
*/
|
|
60
|
+
protected buildSectionsFor(docText: string, chunks: QueryResult<DocumentChunkMetadata>[], isBm25: boolean, maxTokens: number, maxSections: number, overlappingChunks: boolean): DocumentTextSection[];
|
|
61
|
+
/**
|
|
62
|
+
* Renders the top spans of text (sections) of the document based on the query result.
|
|
63
|
+
*/
|
|
64
|
+
renderSections(maxTokens: number, maxSections: number, overlappingChunks?: boolean): Promise<DocumentTextSection[]>;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=LocalDocumentResult.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalDocumentResult.d.ts","sourceRoot":"","sources":["../src/LocalDocumentResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"LocalDocumentResult.d.ts","sourceRoot":"","sources":["../src/LocalDocumentResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,SAAS,EACT,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,gBAAuB,SAAS,iBAAiB;IAEjD;;;OAGG;gBAED,KAAK,EAAE,kBAAkB,EACzB,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,WAAW,CAAC,qBAAqB,CAAC,EAAE,EAC5C,SAAS,EAAE,SAAS;IAYtB;;OAEG;IACH,IAAW,MAAM,IAAI,WAAW,CAAC,qBAAqB,CAAC,EAAE,CAExD;IAED;;OAEG;IACH,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,qBAAqB,CAAC,GAAG,OAAO;IAKzE;;;OAGG;IACH,SAAS,CAAC,uBAAuB;;kCAkCrB,MAAM,EAAE,SACT,MAAM,eACA,OAAO;;gCAWS;YAC7B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;YACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;YACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;SAChC;;IAaH;;;;;;;OAOG;IACU,iBAAiB,CAC5B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAiEjC;;;OAGG;IACH,SAAS,CAAC,4BAA4B,CACpC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,CAAC,qBAAqB,CAAC,EAAE,EAC5C,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,MAAM,GAChB,mBAAmB,EAAE;IAyBxB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CACxB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,CAAC,qBAAqB,CAAC,EAAE,EAC5C,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,OAAO,GACzB,mBAAmB,EAAE;IAwOxB;;OAEG;IACU,cAAc,CACzB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,iBAAiB,UAAO,GACvB,OAAO,CAAC,mBAAmB,EAAE,CAAC;CAuClC"}
|