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,138 @@
|
|
|
1
|
+
import * as assert from 'assert';
|
|
2
|
+
import * as sinon from 'sinon';
|
|
3
|
+
import { LocalEmbeddings } from './LocalEmbeddings';
|
|
4
|
+
|
|
5
|
+
describe('LocalEmbeddings', () => {
|
|
6
|
+
let requireStub: sinon.SinonStub;
|
|
7
|
+
let fakePipeline: sinon.SinonStub;
|
|
8
|
+
let fakePipelineFn: sinon.SinonStub;
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
// Create a fake pipeline function that returns tensor-like results
|
|
12
|
+
fakePipelineFn = sinon.stub();
|
|
13
|
+
fakePipeline = sinon.stub().resolves(fakePipelineFn);
|
|
14
|
+
|
|
15
|
+
// Stub require to intercept @huggingface/transformers
|
|
16
|
+
requireStub = sinon.stub(module.constructor.prototype, 'require');
|
|
17
|
+
requireStub.callThrough(); // Allow all other requires to pass through
|
|
18
|
+
requireStub.withArgs('@huggingface/transformers').returns({
|
|
19
|
+
pipeline: fakePipeline,
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
afterEach(() => {
|
|
24
|
+
sinon.restore();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
describe('constructor', () => {
|
|
28
|
+
it('should use default model and maxTokens', () => {
|
|
29
|
+
const embeddings = new LocalEmbeddings();
|
|
30
|
+
assert.strictEqual(embeddings.model, 'Xenova/all-MiniLM-L6-v2');
|
|
31
|
+
assert.strictEqual(embeddings.maxTokens, 256);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('should accept custom model name', () => {
|
|
35
|
+
const embeddings = new LocalEmbeddings({ model: 'custom/model' });
|
|
36
|
+
assert.strictEqual(embeddings.model, 'custom/model');
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('should accept custom maxTokens', () => {
|
|
40
|
+
const embeddings = new LocalEmbeddings({ maxTokens: 512 });
|
|
41
|
+
assert.strictEqual(embeddings.maxTokens, 512);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
describe('createEmbeddings', () => {
|
|
46
|
+
it('should create embeddings for a single string input', async () => {
|
|
47
|
+
const fakeVector = new Float32Array([0.1, 0.2, 0.3]);
|
|
48
|
+
fakePipelineFn.resolves({ data: fakeVector });
|
|
49
|
+
|
|
50
|
+
const embeddings = new LocalEmbeddings();
|
|
51
|
+
const result = await embeddings.createEmbeddings('hello world');
|
|
52
|
+
|
|
53
|
+
assert.strictEqual(result.status, 'success');
|
|
54
|
+
assert.ok(result.output);
|
|
55
|
+
assert.strictEqual(result.output!.length, 1);
|
|
56
|
+
assert.deepStrictEqual(result.output![0], [0.10000000149011612, 0.20000000298023224, 0.30000001192092896]);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('should create embeddings for an array of inputs', async () => {
|
|
60
|
+
const vec1 = new Float32Array([0.1, 0.2, 0.3]);
|
|
61
|
+
const vec2 = new Float32Array([0.4, 0.5, 0.6]);
|
|
62
|
+
fakePipelineFn.onFirstCall().resolves({ data: vec1 });
|
|
63
|
+
fakePipelineFn.onSecondCall().resolves({ data: vec2 });
|
|
64
|
+
|
|
65
|
+
const embeddings = new LocalEmbeddings();
|
|
66
|
+
const result = await embeddings.createEmbeddings(['hello', 'world']);
|
|
67
|
+
|
|
68
|
+
assert.strictEqual(result.status, 'success');
|
|
69
|
+
assert.ok(result.output);
|
|
70
|
+
assert.strictEqual(result.output!.length, 2);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('should call pipeline with mean pooling and normalize', async () => {
|
|
74
|
+
const fakeVector = new Float32Array([0.5, 0.5]);
|
|
75
|
+
fakePipelineFn.resolves({ data: fakeVector });
|
|
76
|
+
|
|
77
|
+
const embeddings = new LocalEmbeddings();
|
|
78
|
+
await embeddings.createEmbeddings('test');
|
|
79
|
+
|
|
80
|
+
assert.ok(fakePipelineFn.calledOnce);
|
|
81
|
+
const [input, options] = fakePipelineFn.firstCall.args;
|
|
82
|
+
assert.strictEqual(input, 'test');
|
|
83
|
+
assert.deepStrictEqual(options, { pooling: 'mean', normalize: true });
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('should initialize the pipeline with correct model name', async () => {
|
|
87
|
+
const fakeVector = new Float32Array([0.5]);
|
|
88
|
+
fakePipelineFn.resolves({ data: fakeVector });
|
|
89
|
+
|
|
90
|
+
const embeddings = new LocalEmbeddings({ model: 'my/model' });
|
|
91
|
+
await embeddings.createEmbeddings('test');
|
|
92
|
+
|
|
93
|
+
assert.ok(fakePipeline.calledOnce);
|
|
94
|
+
const [task, model] = fakePipeline.firstCall.args;
|
|
95
|
+
assert.strictEqual(task, 'feature-extraction');
|
|
96
|
+
assert.strictEqual(model, 'my/model');
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it('should reuse the pipeline across calls', async () => {
|
|
100
|
+
const fakeVector = new Float32Array([0.5]);
|
|
101
|
+
fakePipelineFn.resolves({ data: fakeVector });
|
|
102
|
+
|
|
103
|
+
const embeddings = new LocalEmbeddings();
|
|
104
|
+
await embeddings.createEmbeddings('first');
|
|
105
|
+
await embeddings.createEmbeddings('second');
|
|
106
|
+
|
|
107
|
+
// Pipeline should only be created once
|
|
108
|
+
assert.ok(fakePipeline.calledOnce);
|
|
109
|
+
// But the pipeline function should be called twice
|
|
110
|
+
assert.strictEqual(fakePipelineFn.callCount, 2);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it('should return error status when pipeline fails', async () => {
|
|
114
|
+
fakePipelineFn.rejects(new Error('Model not found'));
|
|
115
|
+
|
|
116
|
+
const embeddings = new LocalEmbeddings();
|
|
117
|
+
const result = await embeddings.createEmbeddings('test');
|
|
118
|
+
|
|
119
|
+
assert.strictEqual(result.status, 'error');
|
|
120
|
+
assert.ok(result.message);
|
|
121
|
+
assert.ok(result.message!.includes('Model not found'));
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
describe('optional dependency', () => {
|
|
126
|
+
it('should return error when @huggingface/transformers is not installed', async () => {
|
|
127
|
+
requireStub.withArgs('@huggingface/transformers').throws(new Error('Cannot find module'));
|
|
128
|
+
|
|
129
|
+
const embeddings = new LocalEmbeddings();
|
|
130
|
+
const result = await embeddings.createEmbeddings('test');
|
|
131
|
+
|
|
132
|
+
assert.strictEqual(result.status, 'error');
|
|
133
|
+
assert.ok(result.message);
|
|
134
|
+
assert.ok(result.message!.includes('@huggingface/transformers'));
|
|
135
|
+
assert.ok(result.message!.includes('npm install'));
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
});
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { EmbeddingsModel, EmbeddingsResponse } from "./types";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Options for configuring a `LocalEmbeddings` instance.
|
|
5
|
+
*/
|
|
6
|
+
export interface LocalEmbeddingsOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Optional. Model name to use for embeddings.
|
|
9
|
+
* @remarks
|
|
10
|
+
* Defaults to `Xenova/all-MiniLM-L6-v2`. Any model compatible with the
|
|
11
|
+
* `feature-extraction` pipeline from `@huggingface/transformers` can be used.
|
|
12
|
+
*/
|
|
13
|
+
model?: string;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Optional. Maximum number of tokens the model supports.
|
|
17
|
+
* @remarks
|
|
18
|
+
* Defaults to 256 for the default model. Adjust when using a model with a
|
|
19
|
+
* different context window.
|
|
20
|
+
*/
|
|
21
|
+
maxTokens?: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* An `EmbeddingsModel` that runs locally using `@huggingface/transformers`.
|
|
26
|
+
* @remarks
|
|
27
|
+
* Requires the `@huggingface/transformers` package to be installed.
|
|
28
|
+
* The pipeline is lazily initialized on the first call to `createEmbeddings()`.
|
|
29
|
+
* Models are downloaded and cached locally on first use.
|
|
30
|
+
*/
|
|
31
|
+
export class LocalEmbeddings implements EmbeddingsModel {
|
|
32
|
+
public readonly maxTokens: number;
|
|
33
|
+
|
|
34
|
+
private readonly _modelName: string;
|
|
35
|
+
private _pipeline: any = null;
|
|
36
|
+
private _pipelinePromise: Promise<any> | null = null;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Creates a new `LocalEmbeddings` instance.
|
|
40
|
+
* @param options Optional configuration.
|
|
41
|
+
*/
|
|
42
|
+
public constructor(options?: LocalEmbeddingsOptions) {
|
|
43
|
+
this._modelName = options?.model ?? 'Xenova/all-MiniLM-L6-v2';
|
|
44
|
+
this.maxTokens = options?.maxTokens ?? 256;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The model name used for embeddings.
|
|
49
|
+
*/
|
|
50
|
+
public get model(): string {
|
|
51
|
+
return this._modelName;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Creates embeddings for the given inputs.
|
|
56
|
+
* @param inputs Text inputs to create embeddings for.
|
|
57
|
+
* @returns A `EmbeddingsResponse` with a status and the generated embeddings or a message when an error occurs.
|
|
58
|
+
*/
|
|
59
|
+
public async createEmbeddings(inputs: string | string[]): Promise<EmbeddingsResponse> {
|
|
60
|
+
try {
|
|
61
|
+
const pipe = await this.getPipeline();
|
|
62
|
+
const inputArray = Array.isArray(inputs) ? inputs : [inputs];
|
|
63
|
+
const output: number[][] = [];
|
|
64
|
+
|
|
65
|
+
for (const input of inputArray) {
|
|
66
|
+
const result = await pipe(input, {
|
|
67
|
+
pooling: 'mean',
|
|
68
|
+
normalize: true,
|
|
69
|
+
});
|
|
70
|
+
output.push(Array.from(result.data as Float32Array));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return { status: 'success', output };
|
|
74
|
+
} catch (err: unknown) {
|
|
75
|
+
return {
|
|
76
|
+
status: 'error',
|
|
77
|
+
message: err instanceof Error ? err.message : String(err),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @private
|
|
84
|
+
* Lazily initializes and returns the transformer.js pipeline.
|
|
85
|
+
* Uses a singleton promise to prevent duplicate initialization.
|
|
86
|
+
*/
|
|
87
|
+
private async getPipeline(): Promise<any> {
|
|
88
|
+
if (this._pipeline) {
|
|
89
|
+
return this._pipeline;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (!this._pipelinePromise) {
|
|
93
|
+
this._pipelinePromise = this.initPipeline();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return this._pipelinePromise;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @private
|
|
101
|
+
*/
|
|
102
|
+
private async initPipeline(): Promise<any> {
|
|
103
|
+
let transformers: any;
|
|
104
|
+
try {
|
|
105
|
+
transformers = require('@huggingface/transformers');
|
|
106
|
+
} catch {
|
|
107
|
+
throw new Error(
|
|
108
|
+
'The @huggingface/transformers package is required for local embeddings. ' +
|
|
109
|
+
'Install it with: npm install @huggingface/transformers'
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
this._pipeline = await transformers.pipeline(
|
|
114
|
+
'feature-extraction',
|
|
115
|
+
this._modelName,
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
return this._pipeline;
|
|
119
|
+
}
|
|
120
|
+
}
|