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