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 @@
|
|
|
1
|
+
{"version":3,"file":"LocalEmbeddings.js","sourceRoot":"","sources":["../src/LocalEmbeddings.ts"],"names":[],"mappings":";;;;;;;;;;;;AAuBA;;;;;;GAMG;AACH,MAAa,eAAe;IAOxB;;;OAGG;IACH,YAAmB,OAAgC;;QAP3C,cAAS,GAAQ,IAAI,CAAC;QACtB,qBAAgB,GAAwB,IAAI,CAAC;QAOjD,IAAI,CAAC,UAAU,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,mCAAI,yBAAyB,CAAC;QAC9D,IAAI,CAAC,SAAS,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,mCAAI,GAAG,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACU,gBAAgB,CAAC,MAAyB;;YACnD,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC7D,MAAM,MAAM,GAAe,EAAE,CAAC;gBAE9B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;oBAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE;wBAC7B,OAAO,EAAE,MAAM;wBACf,SAAS,EAAE,IAAI;qBAClB,CAAC,CAAC;oBACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAoB,CAAC,CAAC,CAAC;gBACzD,CAAC;gBAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;YACzC,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACpB,OAAO;oBACH,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBAC5D,CAAC;YACN,CAAC;QACL,CAAC;KAAA;IAED;;;;OAIG;IACW,WAAW;;YACrB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC,SAAS,CAAC;YAC1B,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAChD,CAAC;YAED,OAAO,IAAI,CAAC,gBAAgB,CAAC;QACjC,CAAC;KAAA;IAED;;OAEG;IACW,YAAY;;YACtB,IAAI,YAAiB,CAAC;YACtB,IAAI,CAAC;gBACD,YAAY,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;YACxD,CAAC;YAAC,WAAM,CAAC;gBACL,MAAM,IAAI,KAAK,CACX,0EAA0E;oBAC1E,wDAAwD,CAC3D,CAAC;YACN,CAAC;YAED,IAAI,CAAC,SAAS,GAAG,MAAM,YAAY,CAAC,QAAQ,CACxC,oBAAoB,EACpB,IAAI,CAAC,UAAU,CAClB,CAAC;YAEF,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;KAAA;CACJ;AAzFD,0CAyFC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalEmbeddings.spec.d.ts","sourceRoot":"","sources":["../src/LocalEmbeddings.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,155 @@
|
|
|
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 sinon = __importStar(require("sinon"));
|
|
47
|
+
const LocalEmbeddings_1 = require("./LocalEmbeddings");
|
|
48
|
+
describe('LocalEmbeddings', () => {
|
|
49
|
+
let requireStub;
|
|
50
|
+
let fakePipeline;
|
|
51
|
+
let fakePipelineFn;
|
|
52
|
+
beforeEach(() => {
|
|
53
|
+
// Create a fake pipeline function that returns tensor-like results
|
|
54
|
+
fakePipelineFn = sinon.stub();
|
|
55
|
+
fakePipeline = sinon.stub().resolves(fakePipelineFn);
|
|
56
|
+
// Stub require to intercept @huggingface/transformers
|
|
57
|
+
requireStub = sinon.stub(module.constructor.prototype, 'require');
|
|
58
|
+
requireStub.callThrough(); // Allow all other requires to pass through
|
|
59
|
+
requireStub.withArgs('@huggingface/transformers').returns({
|
|
60
|
+
pipeline: fakePipeline,
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
afterEach(() => {
|
|
64
|
+
sinon.restore();
|
|
65
|
+
});
|
|
66
|
+
describe('constructor', () => {
|
|
67
|
+
it('should use default model and maxTokens', () => {
|
|
68
|
+
const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
|
|
69
|
+
assert.strictEqual(embeddings.model, 'Xenova/all-MiniLM-L6-v2');
|
|
70
|
+
assert.strictEqual(embeddings.maxTokens, 256);
|
|
71
|
+
});
|
|
72
|
+
it('should accept custom model name', () => {
|
|
73
|
+
const embeddings = new LocalEmbeddings_1.LocalEmbeddings({ model: 'custom/model' });
|
|
74
|
+
assert.strictEqual(embeddings.model, 'custom/model');
|
|
75
|
+
});
|
|
76
|
+
it('should accept custom maxTokens', () => {
|
|
77
|
+
const embeddings = new LocalEmbeddings_1.LocalEmbeddings({ maxTokens: 512 });
|
|
78
|
+
assert.strictEqual(embeddings.maxTokens, 512);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('createEmbeddings', () => {
|
|
82
|
+
it('should create embeddings for a single string input', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
83
|
+
const fakeVector = new Float32Array([0.1, 0.2, 0.3]);
|
|
84
|
+
fakePipelineFn.resolves({ data: fakeVector });
|
|
85
|
+
const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
|
|
86
|
+
const result = yield embeddings.createEmbeddings('hello world');
|
|
87
|
+
assert.strictEqual(result.status, 'success');
|
|
88
|
+
assert.ok(result.output);
|
|
89
|
+
assert.strictEqual(result.output.length, 1);
|
|
90
|
+
assert.deepStrictEqual(result.output[0], [0.10000000149011612, 0.20000000298023224, 0.30000001192092896]);
|
|
91
|
+
}));
|
|
92
|
+
it('should create embeddings for an array of inputs', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
93
|
+
const vec1 = new Float32Array([0.1, 0.2, 0.3]);
|
|
94
|
+
const vec2 = new Float32Array([0.4, 0.5, 0.6]);
|
|
95
|
+
fakePipelineFn.onFirstCall().resolves({ data: vec1 });
|
|
96
|
+
fakePipelineFn.onSecondCall().resolves({ data: vec2 });
|
|
97
|
+
const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
|
|
98
|
+
const result = yield embeddings.createEmbeddings(['hello', 'world']);
|
|
99
|
+
assert.strictEqual(result.status, 'success');
|
|
100
|
+
assert.ok(result.output);
|
|
101
|
+
assert.strictEqual(result.output.length, 2);
|
|
102
|
+
}));
|
|
103
|
+
it('should call pipeline with mean pooling and normalize', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
104
|
+
const fakeVector = new Float32Array([0.5, 0.5]);
|
|
105
|
+
fakePipelineFn.resolves({ data: fakeVector });
|
|
106
|
+
const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
|
|
107
|
+
yield embeddings.createEmbeddings('test');
|
|
108
|
+
assert.ok(fakePipelineFn.calledOnce);
|
|
109
|
+
const [input, options] = fakePipelineFn.firstCall.args;
|
|
110
|
+
assert.strictEqual(input, 'test');
|
|
111
|
+
assert.deepStrictEqual(options, { pooling: 'mean', normalize: true });
|
|
112
|
+
}));
|
|
113
|
+
it('should initialize the pipeline with correct model name', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
114
|
+
const fakeVector = new Float32Array([0.5]);
|
|
115
|
+
fakePipelineFn.resolves({ data: fakeVector });
|
|
116
|
+
const embeddings = new LocalEmbeddings_1.LocalEmbeddings({ model: 'my/model' });
|
|
117
|
+
yield embeddings.createEmbeddings('test');
|
|
118
|
+
assert.ok(fakePipeline.calledOnce);
|
|
119
|
+
const [task, model] = fakePipeline.firstCall.args;
|
|
120
|
+
assert.strictEqual(task, 'feature-extraction');
|
|
121
|
+
assert.strictEqual(model, 'my/model');
|
|
122
|
+
}));
|
|
123
|
+
it('should reuse the pipeline across calls', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
124
|
+
const fakeVector = new Float32Array([0.5]);
|
|
125
|
+
fakePipelineFn.resolves({ data: fakeVector });
|
|
126
|
+
const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
|
|
127
|
+
yield embeddings.createEmbeddings('first');
|
|
128
|
+
yield embeddings.createEmbeddings('second');
|
|
129
|
+
// Pipeline should only be created once
|
|
130
|
+
assert.ok(fakePipeline.calledOnce);
|
|
131
|
+
// But the pipeline function should be called twice
|
|
132
|
+
assert.strictEqual(fakePipelineFn.callCount, 2);
|
|
133
|
+
}));
|
|
134
|
+
it('should return error status when pipeline fails', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
135
|
+
fakePipelineFn.rejects(new Error('Model not found'));
|
|
136
|
+
const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
|
|
137
|
+
const result = yield embeddings.createEmbeddings('test');
|
|
138
|
+
assert.strictEqual(result.status, 'error');
|
|
139
|
+
assert.ok(result.message);
|
|
140
|
+
assert.ok(result.message.includes('Model not found'));
|
|
141
|
+
}));
|
|
142
|
+
});
|
|
143
|
+
describe('optional dependency', () => {
|
|
144
|
+
it('should return error when @huggingface/transformers is not installed', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
145
|
+
requireStub.withArgs('@huggingface/transformers').throws(new Error('Cannot find module'));
|
|
146
|
+
const embeddings = new LocalEmbeddings_1.LocalEmbeddings();
|
|
147
|
+
const result = yield embeddings.createEmbeddings('test');
|
|
148
|
+
assert.strictEqual(result.status, 'error');
|
|
149
|
+
assert.ok(result.message);
|
|
150
|
+
assert.ok(result.message.includes('@huggingface/transformers'));
|
|
151
|
+
assert.ok(result.message.includes('npm install'));
|
|
152
|
+
}));
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=LocalEmbeddings.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalEmbeddings.spec.js","sourceRoot":"","sources":["../src/LocalEmbeddings.spec.ts"],"names":[],"mappings":"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"}
|
package/lib/LocalIndex.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { IndexItem, IndexStats, MetadataFilter, MetadataTypes, QueryResult } from './types';
|
|
2
|
+
import { FileStorage } from './storage';
|
|
3
|
+
import { IndexCodec } from './codecs';
|
|
2
4
|
export interface CreateIndexConfig {
|
|
3
5
|
version: number;
|
|
4
6
|
deleteIfExists?: boolean;
|
|
@@ -15,23 +17,33 @@ export interface CreateIndexConfig {
|
|
|
15
17
|
export declare class LocalIndex<TMetadata extends Record<string, MetadataTypes> = Record<string, MetadataTypes>> {
|
|
16
18
|
private readonly _folderPath;
|
|
17
19
|
private readonly _indexName;
|
|
20
|
+
private readonly _storage;
|
|
21
|
+
private readonly _codec;
|
|
18
22
|
private _data?;
|
|
19
23
|
private _update?;
|
|
20
24
|
private _bm25Engine;
|
|
25
|
+
private readonly _bm25Factory;
|
|
26
|
+
private readonly _docReader;
|
|
21
27
|
/**
|
|
22
28
|
* Creates a new instance of LocalIndex.
|
|
23
29
|
* @param folderPath Path to the index folder.
|
|
24
|
-
* @param indexName Optional
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
* @param indexName Optional index file name. Defaults to 'index' + codec.extension.
|
|
31
|
+
* @param storage Optional file storage instance. Defaults to LocalFileStorage.
|
|
32
|
+
* @param codec Optional codec for serialization. Defaults to JsonCodec.
|
|
33
|
+
* @param options Optional constructor options for dependency injection.
|
|
34
|
+
*/
|
|
35
|
+
constructor(folderPath: string, indexName?: string, storage?: FileStorage, codec?: IndexCodec, options?: {
|
|
36
|
+
bm25Factory?: () => any;
|
|
37
|
+
docReader?: (docId: string) => Promise<string>;
|
|
38
|
+
});
|
|
39
|
+
/** Path to the index folder. */
|
|
30
40
|
get folderPath(): string;
|
|
31
|
-
/**
|
|
32
|
-
* Optional name of the index file.
|
|
33
|
-
*/
|
|
41
|
+
/** Name of the index file. */
|
|
34
42
|
get indexName(): string;
|
|
43
|
+
/** Storage provider used to store the index. */
|
|
44
|
+
get storage(): FileStorage;
|
|
45
|
+
/** Codec used for serialization. */
|
|
46
|
+
get codec(): IndexCodec;
|
|
35
47
|
/**
|
|
36
48
|
* Begins an update to the index.
|
|
37
49
|
* @remarks
|
|
@@ -98,9 +110,7 @@ export declare class LocalIndex<TMetadata extends Record<string, MetadataTypes>
|
|
|
98
110
|
* @returns Inserted items.
|
|
99
111
|
*/
|
|
100
112
|
batchInsertItems<TItemMetadata extends TMetadata = TMetadata>(items: Partial<IndexItem<TItemMetadata>>[]): Promise<IndexItem[]>;
|
|
101
|
-
/**
|
|
102
|
-
* Returns true if the index exists.
|
|
103
|
-
*/
|
|
113
|
+
/** Returns true if the index exists. */
|
|
104
114
|
isIndexCreated(): Promise<boolean>;
|
|
105
115
|
/**
|
|
106
116
|
* Returns all items in the index.
|
|
@@ -124,10 +134,11 @@ export declare class LocalIndex<TMetadata extends Record<string, MetadataTypes>
|
|
|
124
134
|
* This method loads the index into memory and returns the top k items that are most similar.
|
|
125
135
|
* An optional filter can be applied to the metadata of the items.
|
|
126
136
|
* @param vector Vector to query against.
|
|
127
|
-
* @param query Query
|
|
137
|
+
* @param query Query string (used when isBm25=true).
|
|
128
138
|
* @param topK Number of items to return.
|
|
129
139
|
* @param filter Optional. Filter to apply.
|
|
130
|
-
* @
|
|
140
|
+
* @param isBm25 Optional. If true, append BM25 keyword results to semantic results.
|
|
141
|
+
* @returns Similar items to the vector that match the supplied filter.
|
|
131
142
|
*/
|
|
132
143
|
queryItems<TItemMetadata extends TMetadata = TMetadata>(vector: number[], query: string, topK: number, filter?: MetadataFilter, isBm25?: boolean): Promise<QueryResult<TItemMetadata>[]>;
|
|
133
144
|
/**
|
|
@@ -139,12 +150,10 @@ export declare class LocalIndex<TMetadata extends Record<string, MetadataTypes>
|
|
|
139
150
|
* @returns Upserted item.
|
|
140
151
|
*/
|
|
141
152
|
upsertItem<TItemMetadata extends TMetadata = TMetadata>(item: Partial<IndexItem<TItemMetadata>>): Promise<IndexItem<TItemMetadata>>;
|
|
142
|
-
/**
|
|
143
|
-
* Ensures that the index has been loaded into memory.
|
|
144
|
-
*/
|
|
153
|
+
/** Ensures that the index has been loaded into memory. */
|
|
145
154
|
protected loadIndexData(): Promise<void>;
|
|
146
155
|
private addItemToUpdate;
|
|
147
|
-
private
|
|
156
|
+
private setupBm25;
|
|
148
157
|
private bm25Search;
|
|
149
158
|
}
|
|
150
159
|
//# sourceMappingURL=LocalIndex.d.ts.map
|
package/lib/LocalIndex.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalIndex.d.ts","sourceRoot":"","sources":["../src/LocalIndex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LocalIndex.d.ts","sourceRoot":"","sources":["../src/LocalIndex.ts"],"names":[],"mappings":"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"}
|
package/lib/LocalIndex.js
CHANGED
|
@@ -1,37 +1,4 @@
|
|
|
1
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
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -46,14 +13,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
46
13
|
};
|
|
47
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
15
|
exports.LocalIndex = void 0;
|
|
49
|
-
const
|
|
50
|
-
const path = __importStar(require("path"));
|
|
16
|
+
const pathUtils_1 = require("./utils/pathUtils");
|
|
51
17
|
const uuid_1 = require("uuid");
|
|
52
18
|
const ItemSelector_1 = require("./ItemSelector");
|
|
53
19
|
const LocalDocument_1 = require("./LocalDocument");
|
|
54
20
|
const wink_bm25_text_search_1 = __importDefault(require("wink-bm25-text-search"));
|
|
55
21
|
const wink_nlp_1 = __importDefault(require("wink-nlp"));
|
|
56
22
|
const wink_eng_lite_web_model_1 = __importDefault(require("wink-eng-lite-web-model"));
|
|
23
|
+
const storage_1 = require("./storage");
|
|
24
|
+
const codecs_1 = require("./codecs");
|
|
57
25
|
/**
|
|
58
26
|
* Local vector index instance.
|
|
59
27
|
* @remarks
|
|
@@ -64,24 +32,44 @@ class LocalIndex {
|
|
|
64
32
|
/**
|
|
65
33
|
* Creates a new instance of LocalIndex.
|
|
66
34
|
* @param folderPath Path to the index folder.
|
|
67
|
-
* @param indexName Optional
|
|
35
|
+
* @param indexName Optional index file name. Defaults to 'index' + codec.extension.
|
|
36
|
+
* @param storage Optional file storage instance. Defaults to LocalFileStorage.
|
|
37
|
+
* @param codec Optional codec for serialization. Defaults to JsonCodec.
|
|
38
|
+
* @param options Optional constructor options for dependency injection.
|
|
68
39
|
*/
|
|
69
|
-
constructor(folderPath, indexName) {
|
|
40
|
+
constructor(folderPath, indexName, storage, codec, options) {
|
|
41
|
+
this._indexName = 'index.json';
|
|
70
42
|
this._folderPath = folderPath;
|
|
71
|
-
this.
|
|
43
|
+
this._codec = codec || new codecs_1.JsonCodec();
|
|
44
|
+
if (indexName) {
|
|
45
|
+
this._indexName = indexName;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this._indexName = `index${this._codec.extension}`;
|
|
49
|
+
}
|
|
50
|
+
this._storage = storage || new storage_1.LocalFileStorage();
|
|
51
|
+
this._bm25Factory = (options === null || options === void 0 ? void 0 : options.bm25Factory) || (() => (0, wink_bm25_text_search_1.default)());
|
|
52
|
+
this._docReader = (options === null || options === void 0 ? void 0 : options.docReader) || ((docId) => __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
const doc = new LocalDocument_1.LocalDocument(this, docId, '');
|
|
54
|
+
return yield doc.loadText();
|
|
55
|
+
}));
|
|
72
56
|
}
|
|
73
|
-
/**
|
|
74
|
-
* Path to the index folder.
|
|
75
|
-
*/
|
|
57
|
+
/** Path to the index folder. */
|
|
76
58
|
get folderPath() {
|
|
77
59
|
return this._folderPath;
|
|
78
60
|
}
|
|
79
|
-
/**
|
|
80
|
-
* Optional name of the index file.
|
|
81
|
-
*/
|
|
61
|
+
/** Name of the index file. */
|
|
82
62
|
get indexName() {
|
|
83
63
|
return this._indexName;
|
|
84
64
|
}
|
|
65
|
+
/** Storage provider used to store the index. */
|
|
66
|
+
get storage() {
|
|
67
|
+
return this._storage;
|
|
68
|
+
}
|
|
69
|
+
/** Codec used for serialization. */
|
|
70
|
+
get codec() {
|
|
71
|
+
return this._codec;
|
|
72
|
+
}
|
|
85
73
|
/**
|
|
86
74
|
* Begins an update to the index.
|
|
87
75
|
* @remarks
|
|
@@ -124,16 +112,16 @@ class LocalIndex {
|
|
|
124
112
|
}
|
|
125
113
|
try {
|
|
126
114
|
// Create folder for index
|
|
127
|
-
yield
|
|
115
|
+
yield this.storage.createFolder(this._folderPath);
|
|
128
116
|
// Initialize index.json file
|
|
129
117
|
this._data = {
|
|
130
118
|
version: config.version,
|
|
131
119
|
metadata_config: (_a = config.metadata_config) !== null && _a !== void 0 ? _a : {},
|
|
132
120
|
items: []
|
|
133
121
|
};
|
|
134
|
-
yield
|
|
122
|
+
yield this.storage.upsertFile(pathUtils_1.pathUtils.join(this._folderPath, this._indexName), this._codec.serializeIndex(this._data));
|
|
135
123
|
}
|
|
136
|
-
catch (
|
|
124
|
+
catch (_b) {
|
|
137
125
|
yield this.deleteIndex();
|
|
138
126
|
throw new Error('Error creating index');
|
|
139
127
|
}
|
|
@@ -145,10 +133,9 @@ class LocalIndex {
|
|
|
145
133
|
* This method deletes the index folder from disk.
|
|
146
134
|
*/
|
|
147
135
|
deleteIndex() {
|
|
148
|
-
this
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
maxRetries: 3
|
|
136
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
this._data = undefined;
|
|
138
|
+
return yield this.storage.deleteFolder(this._folderPath);
|
|
152
139
|
});
|
|
153
140
|
}
|
|
154
141
|
/**
|
|
@@ -185,7 +172,7 @@ class LocalIndex {
|
|
|
185
172
|
}
|
|
186
173
|
try {
|
|
187
174
|
// Save index
|
|
188
|
-
yield
|
|
175
|
+
yield this.storage.upsertFile(pathUtils_1.pathUtils.join(this._folderPath, this._indexName), this._codec.serializeIndex(this._update));
|
|
189
176
|
this._data = this._update;
|
|
190
177
|
this._update = undefined;
|
|
191
178
|
}
|
|
@@ -268,18 +255,10 @@ class LocalIndex {
|
|
|
268
255
|
}
|
|
269
256
|
});
|
|
270
257
|
}
|
|
271
|
-
/**
|
|
272
|
-
* Returns true if the index exists.
|
|
273
|
-
*/
|
|
258
|
+
/** Returns true if the index exists. */
|
|
274
259
|
isIndexCreated() {
|
|
275
260
|
return __awaiter(this, void 0, void 0, function* () {
|
|
276
|
-
|
|
277
|
-
yield fs.access(path.join(this._folderPath, this.indexName));
|
|
278
|
-
return true;
|
|
279
|
-
}
|
|
280
|
-
catch (err) {
|
|
281
|
-
return false;
|
|
282
|
-
}
|
|
261
|
+
return yield this.storage.pathExists(pathUtils_1.pathUtils.join(this._folderPath, this._indexName));
|
|
283
262
|
});
|
|
284
263
|
}
|
|
285
264
|
/**
|
|
@@ -314,13 +293,15 @@ class LocalIndex {
|
|
|
314
293
|
* This method loads the index into memory and returns the top k items that are most similar.
|
|
315
294
|
* An optional filter can be applied to the metadata of the items.
|
|
316
295
|
* @param vector Vector to query against.
|
|
317
|
-
* @param query Query
|
|
296
|
+
* @param query Query string (used when isBm25=true).
|
|
318
297
|
* @param topK Number of items to return.
|
|
319
298
|
* @param filter Optional. Filter to apply.
|
|
320
|
-
* @
|
|
299
|
+
* @param isBm25 Optional. If true, append BM25 keyword results to semantic results.
|
|
300
|
+
* @returns Similar items to the vector that match the supplied filter.
|
|
321
301
|
*/
|
|
322
302
|
queryItems(vector, query, topK, filter, isBm25) {
|
|
323
303
|
return __awaiter(this, void 0, void 0, function* () {
|
|
304
|
+
var _a, _b, _c, _d;
|
|
324
305
|
yield this.loadIndexData();
|
|
325
306
|
// Filter items
|
|
326
307
|
let items = this._data.items;
|
|
@@ -347,37 +328,56 @@ class LocalIndex {
|
|
|
347
328
|
// Load external metadata
|
|
348
329
|
for (const item of top) {
|
|
349
330
|
if (item.item.metadataFile) {
|
|
350
|
-
const metadataPath =
|
|
351
|
-
const
|
|
352
|
-
item.item.metadata =
|
|
331
|
+
const metadataPath = pathUtils_1.pathUtils.join(this._folderPath, item.item.metadataFile);
|
|
332
|
+
const metadataBuffer = yield this.storage.readFile(metadataPath);
|
|
333
|
+
item.item.metadata = this._codec.deserializeMetadata(metadataBuffer);
|
|
353
334
|
}
|
|
354
335
|
}
|
|
355
|
-
//
|
|
336
|
+
// Perform bm25 search only if enabled. Avoid duplicate chunks that are already selected during semantic search.
|
|
356
337
|
if (isBm25) {
|
|
357
338
|
const itemSet = new Set();
|
|
358
|
-
for (const
|
|
359
|
-
itemSet.add(
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
339
|
+
for (const r of top)
|
|
340
|
+
itemSet.add(r.item.id);
|
|
341
|
+
// Set up BM25 engine
|
|
342
|
+
yield this.setupBm25();
|
|
343
|
+
// Add docs if we have necessary metadata; guard everything to avoid crashes
|
|
363
344
|
for (let i = 0; i < items.length; i++) {
|
|
364
345
|
if (!itemSet.has(items[i].id)) {
|
|
365
346
|
const item = items[i];
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
347
|
+
const md = item.metadata || {};
|
|
348
|
+
if (md.documentId != undefined && md.startPos != undefined && md.endPos != undefined) {
|
|
349
|
+
try {
|
|
350
|
+
const currDocTxt = yield this._docReader(String(md.documentId));
|
|
351
|
+
const startPos = Number(md.startPos);
|
|
352
|
+
const endPos = Number(md.endPos);
|
|
353
|
+
const chunkText = currDocTxt.substring(startPos, endPos + 1);
|
|
354
|
+
(_b = (_a = this._bm25Engine).addDoc) === null || _b === void 0 ? void 0 : _b.call(_a, { body: chunkText }, i);
|
|
355
|
+
}
|
|
356
|
+
catch (_e) {
|
|
357
|
+
// Ignore load or engine errors for BM25 doc prep
|
|
358
|
+
}
|
|
359
|
+
}
|
|
372
360
|
}
|
|
373
361
|
}
|
|
374
|
-
this._bm25Engine.consolidate();
|
|
375
|
-
|
|
362
|
+
(_d = (_c = this._bm25Engine).consolidate) === null || _d === void 0 ? void 0 : _d.call(_c);
|
|
363
|
+
const results = yield this.bm25Search(query, items, topK);
|
|
376
364
|
results.forEach((res) => {
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
365
|
+
var _a;
|
|
366
|
+
// Support both [index, score] tuples and { item, score } objects
|
|
367
|
+
if (Array.isArray(res)) {
|
|
368
|
+
const idx = res[0];
|
|
369
|
+
const score = res[1];
|
|
370
|
+
if (items[idx]) {
|
|
371
|
+
top.push({
|
|
372
|
+
item: Object.assign({}, Object.assign(Object.assign({}, items[idx]), { metadata: Object.assign(Object.assign({}, items[idx].metadata), { isBm25: true }) })),
|
|
373
|
+
score
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
else if (res && typeof res === 'object' && 'item' in res && 'score' in res) {
|
|
378
|
+
const objItem = Object.assign({}, Object.assign(Object.assign({}, (res.item || {})), { metadata: Object.assign(Object.assign({}, (((_a = res.item) === null || _a === void 0 ? void 0 : _a.metadata) || {})), { isBm25: true }) }));
|
|
379
|
+
top.push({ item: objItem, score: res.score });
|
|
380
|
+
}
|
|
381
381
|
});
|
|
382
382
|
}
|
|
383
383
|
return top;
|
|
@@ -404,9 +404,7 @@ class LocalIndex {
|
|
|
404
404
|
}
|
|
405
405
|
});
|
|
406
406
|
}
|
|
407
|
-
/**
|
|
408
|
-
* Ensures that the index has been loaded into memory.
|
|
409
|
-
*/
|
|
407
|
+
/** Ensures that the index has been loaded into memory. */
|
|
410
408
|
loadIndexData() {
|
|
411
409
|
return __awaiter(this, void 0, void 0, function* () {
|
|
412
410
|
if (this._data) {
|
|
@@ -415,13 +413,13 @@ class LocalIndex {
|
|
|
415
413
|
if (!(yield this.isIndexCreated())) {
|
|
416
414
|
throw new Error('Index does not exist');
|
|
417
415
|
}
|
|
418
|
-
const data = yield
|
|
419
|
-
this._data =
|
|
416
|
+
const data = yield this.storage.readFile(pathUtils_1.pathUtils.join(this._folderPath, this.indexName));
|
|
417
|
+
this._data = this._codec.deserializeIndex(data);
|
|
420
418
|
});
|
|
421
419
|
}
|
|
422
420
|
addItemToUpdate(item, unique) {
|
|
423
421
|
return __awaiter(this, void 0, void 0, function* () {
|
|
424
|
-
var _a;
|
|
422
|
+
var _a, _b;
|
|
425
423
|
// Ensure vector is provided
|
|
426
424
|
if (!item.vector) {
|
|
427
425
|
throw new Error('Vector is required');
|
|
@@ -437,17 +435,25 @@ class LocalIndex {
|
|
|
437
435
|
// Check for indexed metadata
|
|
438
436
|
let metadata = {};
|
|
439
437
|
let metadataFile;
|
|
440
|
-
|
|
438
|
+
const indexedKeys = (_b = this._update.metadata_config.indexed) !== null && _b !== void 0 ? _b : [];
|
|
439
|
+
if (indexedKeys.length > 0 && item.metadata) {
|
|
441
440
|
// Copy only indexed metadata
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
441
|
+
const indexedOnly = {};
|
|
442
|
+
for (const key of indexedKeys) {
|
|
443
|
+
if (Object.prototype.hasOwnProperty.call(item.metadata, key)) {
|
|
444
|
+
indexedOnly[key] = item.metadata[key];
|
|
445
445
|
}
|
|
446
446
|
}
|
|
447
|
-
//
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
447
|
+
// Determine if there are any non-indexed keys
|
|
448
|
+
const hasNonIndexed = Object.keys(item.metadata).some(k => !indexedKeys.includes(k));
|
|
449
|
+
// Always store only indexed keys in the index
|
|
450
|
+
metadata = indexedOnly;
|
|
451
|
+
// Write full metadata externally only if there are non-indexed keys present
|
|
452
|
+
if (hasNonIndexed) {
|
|
453
|
+
metadataFile = `${(0, uuid_1.v4)()}${this._codec.extension}`;
|
|
454
|
+
const metadataPath = pathUtils_1.pathUtils.join(this._folderPath, metadataFile);
|
|
455
|
+
yield this.storage.upsertFile(metadataPath, this._codec.serializeMetadata(item.metadata));
|
|
456
|
+
}
|
|
451
457
|
}
|
|
452
458
|
else if (item.metadata) {
|
|
453
459
|
metadata = item.metadata;
|
|
@@ -482,9 +488,9 @@ class LocalIndex {
|
|
|
482
488
|
}
|
|
483
489
|
});
|
|
484
490
|
}
|
|
485
|
-
|
|
491
|
+
setupBm25() {
|
|
486
492
|
return __awaiter(this, void 0, void 0, function* () {
|
|
487
|
-
this._bm25Engine =
|
|
493
|
+
this._bm25Engine = this._bm25Factory();
|
|
488
494
|
const nlp = (0, wink_nlp_1.default)(wink_eng_lite_web_model_1.default);
|
|
489
495
|
const its = nlp.its;
|
|
490
496
|
const prepTask = function (text) {
|
|
@@ -502,11 +508,9 @@ class LocalIndex {
|
|
|
502
508
|
this._bm25Engine.definePrepTasks([prepTask]);
|
|
503
509
|
});
|
|
504
510
|
}
|
|
505
|
-
bm25Search(searchQuery,
|
|
511
|
+
bm25Search(searchQuery, _items, topK) {
|
|
506
512
|
return __awaiter(this, void 0, void 0, function* () {
|
|
507
|
-
|
|
508
|
-
// `results` is an array of [ doc-id, score ], sorted by score
|
|
509
|
-
var results = this._bm25Engine.search(query);
|
|
513
|
+
const results = this._bm25Engine.search(searchQuery);
|
|
510
514
|
return results.slice(0, topK);
|
|
511
515
|
});
|
|
512
516
|
}
|