codevault 1.8.4 → 1.8.5
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 +3 -2
- package/dist/chunking/token-counter.d.ts.map +1 -1
- package/dist/chunking/token-counter.js +16 -10
- package/dist/chunking/token-counter.js.map +1 -1
- package/dist/cli/commands/index-cmd.d.ts.map +1 -1
- package/dist/cli/commands/index-cmd.js +108 -97
- package/dist/cli/commands/index-cmd.js.map +1 -1
- package/dist/cli/commands/interactive-config.d.ts.map +1 -1
- package/dist/cli/commands/interactive-config.js +40 -3
- package/dist/cli/commands/interactive-config.js.map +1 -1
- package/dist/cli/commands/search-cmd.d.ts.map +1 -1
- package/dist/cli/commands/search-cmd.js +11 -7
- package/dist/cli/commands/search-cmd.js.map +1 -1
- package/dist/cli/commands/search-with-code-cmd.d.ts.map +1 -1
- package/dist/cli/commands/search-with-code-cmd.js +3 -1
- package/dist/cli/commands/search-with-code-cmd.js.map +1 -1
- package/dist/cli/utils.d.ts +56 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +98 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/config/constants.d.ts +4 -0
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +2 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/context/packs.d.ts.map +1 -1
- package/dist/context/packs.js +3 -1
- package/dist/context/packs.js.map +1 -1
- package/dist/core/IndexerEngine.d.ts +2 -0
- package/dist/core/IndexerEngine.d.ts.map +1 -1
- package/dist/core/IndexerEngine.js +34 -26
- package/dist/core/IndexerEngine.js.map +1 -1
- package/dist/core/SearchService.d.ts +1 -0
- package/dist/core/SearchService.d.ts.map +1 -1
- package/dist/core/SearchService.js +18 -12
- package/dist/core/SearchService.js.map +1 -1
- package/dist/core/batch-indexer.d.ts.map +1 -1
- package/dist/core/batch-indexer.js +5 -13
- package/dist/core/batch-indexer.js.map +1 -1
- package/dist/core/indexing/IndexFinalizationStage.d.ts.map +1 -1
- package/dist/core/indexing/IndexFinalizationStage.js +21 -2
- package/dist/core/indexing/IndexFinalizationStage.js.map +1 -1
- package/dist/core/indexing/IndexState.d.ts +3 -8
- package/dist/core/indexing/IndexState.d.ts.map +1 -1
- package/dist/core/indexing/IndexState.js.map +1 -1
- package/dist/core/indexing/PersistManager.d.ts +1 -1
- package/dist/core/indexing/PersistManager.d.ts.map +1 -1
- package/dist/core/indexing/PersistManager.js +17 -17
- package/dist/core/indexing/PersistManager.js.map +1 -1
- package/dist/core/search/HybridFusion.d.ts +0 -1
- package/dist/core/search/HybridFusion.d.ts.map +1 -1
- package/dist/core/search/HybridFusion.js +2 -14
- package/dist/core/search/HybridFusion.js.map +1 -1
- package/dist/core/search/ResultMapper.d.ts +0 -1
- package/dist/core/search/ResultMapper.d.ts.map +1 -1
- package/dist/core/search/ResultMapper.js +2 -13
- package/dist/core/search/ResultMapper.js.map +1 -1
- package/dist/core/search/SearchContextManager.d.ts +3 -0
- package/dist/core/search/SearchContextManager.d.ts.map +1 -1
- package/dist/core/search/SearchContextManager.js +15 -2
- package/dist/core/search/SearchContextManager.js.map +1 -1
- package/dist/core/search.d.ts.map +1 -1
- package/dist/core/search.js +9 -4
- package/dist/core/search.js.map +1 -1
- package/dist/languages/rules.d.ts.map +1 -1
- package/dist/languages/rules.js +14 -5
- package/dist/languages/rules.js.map +1 -1
- package/dist/mcp/schemas.d.ts +2 -2
- package/dist/mcp-server.d.ts +1 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +32 -21
- package/dist/mcp-server.js.map +1 -1
- package/dist/providers/base.d.ts +3 -2
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js +3 -1
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/chat-llm.d.ts +2 -2
- package/dist/providers/chat-llm.d.ts.map +1 -1
- package/dist/providers/chat-llm.js +4 -1
- package/dist/providers/chat-llm.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +4 -1
- package/dist/providers/openai.js.map +1 -1
- package/dist/ranking/api-reranker.d.ts.map +1 -1
- package/dist/ranking/api-reranker.js +27 -8
- package/dist/ranking/api-reranker.js.map +1 -1
- package/dist/ranking/symbol-boost.d.ts.map +1 -1
- package/dist/ranking/symbol-boost.js +4 -11
- package/dist/ranking/symbol-boost.js.map +1 -1
- package/dist/search/bm25.d.ts +10 -0
- package/dist/search/bm25.d.ts.map +1 -1
- package/dist/search/bm25.js +16 -0
- package/dist/search/bm25.js.map +1 -1
- package/dist/storage/encrypted-chunks.d.ts +3 -0
- package/dist/storage/encrypted-chunks.d.ts.map +1 -1
- package/dist/storage/encrypted-chunks.js +108 -16
- package/dist/storage/encrypted-chunks.js.map +1 -1
- package/dist/synthesis/conversational-synthesizer.d.ts +2 -1
- package/dist/synthesis/conversational-synthesizer.d.ts.map +1 -1
- package/dist/synthesis/conversational-synthesizer.js +6 -1
- package/dist/synthesis/conversational-synthesizer.js.map +1 -1
- package/dist/synthesis/prompt-builder.d.ts.map +1 -1
- package/dist/synthesis/prompt-builder.js +40 -13
- package/dist/synthesis/prompt-builder.js.map +1 -1
- package/dist/synthesis/synthesizer.d.ts.map +1 -1
- package/dist/synthesis/synthesizer.js +14 -2
- package/dist/synthesis/synthesizer.js.map +1 -1
- package/dist/tests/api-reranker.test.d.ts +2 -0
- package/dist/tests/api-reranker.test.d.ts.map +1 -0
- package/dist/tests/api-reranker.test.js +575 -0
- package/dist/tests/api-reranker.test.js.map +1 -0
- package/dist/tests/bm25.test.d.ts +2 -0
- package/dist/tests/bm25.test.d.ts.map +1 -0
- package/dist/tests/bm25.test.js +340 -0
- package/dist/tests/bm25.test.js.map +1 -0
- package/dist/tests/chunking/file-grouper.test.d.ts +2 -0
- package/dist/tests/chunking/file-grouper.test.d.ts.map +1 -0
- package/dist/tests/chunking/file-grouper.test.js +495 -0
- package/dist/tests/chunking/file-grouper.test.js.map +1 -0
- package/dist/tests/chunking/semantic-chunker.test.d.ts +2 -0
- package/dist/tests/chunking/semantic-chunker.test.d.ts.map +1 -0
- package/dist/tests/chunking/semantic-chunker.test.js +509 -0
- package/dist/tests/chunking/semantic-chunker.test.js.map +1 -0
- package/dist/tests/chunking/token-counter.test.d.ts +2 -0
- package/dist/tests/chunking/token-counter.test.d.ts.map +1 -0
- package/dist/tests/chunking/token-counter.test.js +441 -0
- package/dist/tests/chunking/token-counter.test.js.map +1 -0
- package/dist/tests/cli/ask-cmd.test.d.ts +2 -0
- package/dist/tests/cli/ask-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/ask-cmd.test.js +152 -0
- package/dist/tests/cli/ask-cmd.test.js.map +1 -0
- package/dist/tests/cli/chat-cmd.test.d.ts +2 -0
- package/dist/tests/cli/chat-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/chat-cmd.test.js +118 -0
- package/dist/tests/cli/chat-cmd.test.js.map +1 -0
- package/dist/tests/cli/config-cmd.test.d.ts +2 -0
- package/dist/tests/cli/config-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/config-cmd.test.js +226 -0
- package/dist/tests/cli/config-cmd.test.js.map +1 -0
- package/dist/tests/cli/context.test.d.ts +2 -0
- package/dist/tests/cli/context.test.d.ts.map +1 -0
- package/dist/tests/cli/context.test.js +158 -0
- package/dist/tests/cli/context.test.js.map +1 -0
- package/dist/tests/cli/index-cmd.test.d.ts +2 -0
- package/dist/tests/cli/index-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/index-cmd.test.js +89 -0
- package/dist/tests/cli/index-cmd.test.js.map +1 -0
- package/dist/tests/cli/index.test.d.ts +2 -0
- package/dist/tests/cli/index.test.d.ts.map +1 -0
- package/dist/tests/cli/index.test.js +167 -0
- package/dist/tests/cli/index.test.js.map +1 -0
- package/dist/tests/cli/info-cmd.test.d.ts +2 -0
- package/dist/tests/cli/info-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/info-cmd.test.js +47 -0
- package/dist/tests/cli/info-cmd.test.js.map +1 -0
- package/dist/tests/cli/interactive-config.test.d.ts +2 -0
- package/dist/tests/cli/interactive-config.test.d.ts.map +1 -0
- package/dist/tests/cli/interactive-config.test.js +30 -0
- package/dist/tests/cli/interactive-config.test.js.map +1 -0
- package/dist/tests/cli/mcp-cmd.test.d.ts +2 -0
- package/dist/tests/cli/mcp-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/mcp-cmd.test.js +47 -0
- package/dist/tests/cli/mcp-cmd.test.js.map +1 -0
- package/dist/tests/cli/search-cmd.test.d.ts +2 -0
- package/dist/tests/cli/search-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/search-cmd.test.js +120 -0
- package/dist/tests/cli/search-cmd.test.js.map +1 -0
- package/dist/tests/cli/search-with-code-cmd.test.d.ts +2 -0
- package/dist/tests/cli/search-with-code-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/search-with-code-cmd.test.js +140 -0
- package/dist/tests/cli/search-with-code-cmd.test.js.map +1 -0
- package/dist/tests/cli/update-cmd.test.d.ts +2 -0
- package/dist/tests/cli/update-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/update-cmd.test.js +75 -0
- package/dist/tests/cli/update-cmd.test.js.map +1 -0
- package/dist/tests/cli/utils.test.d.ts +2 -0
- package/dist/tests/cli/utils.test.d.ts.map +1 -0
- package/dist/tests/cli/utils.test.js +119 -0
- package/dist/tests/cli/utils.test.js.map +1 -0
- package/dist/tests/cli/watch-cmd.test.d.ts +2 -0
- package/dist/tests/cli/watch-cmd.test.d.ts.map +1 -0
- package/dist/tests/cli/watch-cmd.test.js +84 -0
- package/dist/tests/cli/watch-cmd.test.js.map +1 -0
- package/dist/tests/cli-ui.test.d.ts +2 -0
- package/dist/tests/cli-ui.test.d.ts.map +1 -0
- package/dist/tests/cli-ui.test.js +608 -0
- package/dist/tests/cli-ui.test.js.map +1 -0
- package/dist/tests/codemap-io.test.d.ts +2 -0
- package/dist/tests/codemap-io.test.d.ts.map +1 -0
- package/dist/tests/codemap-io.test.js +992 -0
- package/dist/tests/codemap-io.test.js.map +1 -0
- package/dist/tests/config/apply-env.test.d.ts +2 -0
- package/dist/tests/config/apply-env.test.d.ts.map +1 -0
- package/dist/tests/config/apply-env.test.js +717 -0
- package/dist/tests/config/apply-env.test.js.map +1 -0
- package/dist/tests/config/constants.test.d.ts +2 -0
- package/dist/tests/config/constants.test.d.ts.map +1 -0
- package/dist/tests/config/constants.test.js +406 -0
- package/dist/tests/config/constants.test.js.map +1 -0
- package/dist/tests/config/loader.test.d.ts +2 -0
- package/dist/tests/config/loader.test.d.ts.map +1 -0
- package/dist/tests/config/loader.test.js +716 -0
- package/dist/tests/config/loader.test.js.map +1 -0
- package/dist/tests/config/resolver.test.d.ts +2 -0
- package/dist/tests/config/resolver.test.d.ts.map +1 -0
- package/dist/tests/config/resolver.test.js +402 -0
- package/dist/tests/config/resolver.test.js.map +1 -0
- package/dist/tests/config/types.test.d.ts +2 -0
- package/dist/tests/config/types.test.d.ts.map +1 -0
- package/dist/tests/config/types.test.js +460 -0
- package/dist/tests/config/types.test.js.map +1 -0
- package/dist/tests/context-packs.test.d.ts +2 -0
- package/dist/tests/context-packs.test.d.ts.map +1 -0
- package/dist/tests/context-packs.test.js +826 -0
- package/dist/tests/context-packs.test.js.map +1 -0
- package/dist/tests/conversational-synthesizer.test.d.ts +2 -0
- package/dist/tests/conversational-synthesizer.test.d.ts.map +1 -0
- package/dist/tests/conversational-synthesizer.test.js +595 -0
- package/dist/tests/conversational-synthesizer.test.js.map +1 -0
- package/dist/tests/database.test.d.ts +2 -0
- package/dist/tests/database.test.d.ts.map +1 -0
- package/dist/tests/database.test.js +965 -0
- package/dist/tests/database.test.js.map +1 -0
- package/dist/tests/encrypted-chunks.test.d.ts +2 -0
- package/dist/tests/encrypted-chunks.test.d.ts.map +1 -0
- package/dist/tests/encrypted-chunks.test.js +1470 -0
- package/dist/tests/encrypted-chunks.test.js.map +1 -0
- package/dist/tests/hybrid.test.d.ts +2 -0
- package/dist/tests/hybrid.test.d.ts.map +1 -0
- package/dist/tests/hybrid.test.js +456 -0
- package/dist/tests/hybrid.test.js.map +1 -0
- package/dist/tests/indexer/ChangeQueue.test.d.ts +12 -0
- package/dist/tests/indexer/ChangeQueue.test.d.ts.map +1 -0
- package/dist/tests/indexer/ChangeQueue.test.js +441 -0
- package/dist/tests/indexer/ChangeQueue.test.js.map +1 -0
- package/dist/tests/indexer/ProviderManager.test.d.ts +12 -0
- package/dist/tests/indexer/ProviderManager.test.d.ts.map +1 -0
- package/dist/tests/indexer/ProviderManager.test.js +290 -0
- package/dist/tests/indexer/ProviderManager.test.js.map +1 -0
- package/dist/tests/indexer/WatchService.test.d.ts +14 -0
- package/dist/tests/indexer/WatchService.test.d.ts.map +1 -0
- package/dist/tests/indexer/WatchService.test.js +667 -0
- package/dist/tests/indexer/WatchService.test.js.map +1 -0
- package/dist/tests/indexer/merkle.test.d.ts +11 -0
- package/dist/tests/indexer/merkle.test.d.ts.map +1 -0
- package/dist/tests/indexer/merkle.test.js +497 -0
- package/dist/tests/indexer/merkle.test.js.map +1 -0
- package/dist/tests/indexer/update.test.d.ts +10 -0
- package/dist/tests/indexer/update.test.d.ts.map +1 -0
- package/dist/tests/indexer/update.test.js +317 -0
- package/dist/tests/indexer/update.test.js.map +1 -0
- package/dist/tests/indexer/watch.test.d.ts +8 -0
- package/dist/tests/indexer/watch.test.d.ts.map +1 -0
- package/dist/tests/indexer/watch.test.js +95 -0
- package/dist/tests/indexer/watch.test.js.map +1 -0
- package/dist/tests/integration/index-search.integration.test.js +1 -0
- package/dist/tests/integration/index-search.integration.test.js.map +1 -1
- package/dist/tests/languages.test.d.ts +2 -0
- package/dist/tests/languages.test.d.ts.map +1 -0
- package/dist/tests/languages.test.js +575 -0
- package/dist/tests/languages.test.js.map +1 -0
- package/dist/tests/logger-redaction.test.d.ts +2 -0
- package/dist/tests/logger-redaction.test.d.ts.map +1 -0
- package/dist/tests/logger-redaction.test.js +48 -0
- package/dist/tests/logger-redaction.test.js.map +1 -0
- package/dist/tests/logger.test.d.ts +2 -0
- package/dist/tests/logger.test.d.ts.map +1 -0
- package/dist/tests/logger.test.js +468 -0
- package/dist/tests/logger.test.js.map +1 -0
- package/dist/tests/markdown-formatter.test.d.ts +2 -0
- package/dist/tests/markdown-formatter.test.d.ts.map +1 -0
- package/dist/tests/markdown-formatter.test.js +453 -0
- package/dist/tests/markdown-formatter.test.js.map +1 -0
- package/dist/tests/mcp/tools/use-context-pack.test.d.ts +7 -0
- package/dist/tests/mcp/tools/use-context-pack.test.d.ts.map +1 -0
- package/dist/tests/mcp/tools/use-context-pack.test.js +505 -0
- package/dist/tests/mcp/tools/use-context-pack.test.js.map +1 -0
- package/dist/tests/mutex.test.d.ts +2 -0
- package/dist/tests/mutex.test.d.ts.map +1 -0
- package/dist/tests/mutex.test.js +489 -0
- package/dist/tests/mutex.test.js.map +1 -0
- package/dist/tests/path-helpers.test.d.ts +2 -0
- package/dist/tests/path-helpers.test.d.ts.map +1 -0
- package/dist/tests/path-helpers.test.js +332 -0
- package/dist/tests/path-helpers.test.js.map +1 -0
- package/dist/tests/prompt-builder.test.d.ts +2 -0
- package/dist/tests/prompt-builder.test.d.ts.map +1 -0
- package/dist/tests/prompt-builder.test.js +417 -0
- package/dist/tests/prompt-builder.test.js.map +1 -0
- package/dist/tests/providers/base.test.d.ts +2 -0
- package/dist/tests/providers/base.test.d.ts.map +1 -0
- package/dist/tests/providers/base.test.js +299 -0
- package/dist/tests/providers/base.test.js.map +1 -0
- package/dist/tests/providers/chat-llm.test.d.ts +2 -0
- package/dist/tests/providers/chat-llm.test.d.ts.map +1 -0
- package/dist/tests/providers/chat-llm.test.js +435 -0
- package/dist/tests/providers/chat-llm.test.js.map +1 -0
- package/dist/tests/providers/index.test.d.ts +2 -0
- package/dist/tests/providers/index.test.d.ts.map +1 -0
- package/dist/tests/providers/index.test.js +204 -0
- package/dist/tests/providers/index.test.js.map +1 -0
- package/dist/tests/providers/mock.test.d.ts +2 -0
- package/dist/tests/providers/mock.test.d.ts.map +1 -0
- package/dist/tests/providers/mock.test.js +225 -0
- package/dist/tests/providers/mock.test.js.map +1 -0
- package/dist/tests/providers/openai.test.d.ts +2 -0
- package/dist/tests/providers/openai.test.d.ts.map +1 -0
- package/dist/tests/providers/openai.test.js +408 -0
- package/dist/tests/providers/openai.test.js.map +1 -0
- package/dist/tests/providers/token-counter.test.d.ts +2 -0
- package/dist/tests/providers/token-counter.test.d.ts.map +1 -0
- package/dist/tests/providers/token-counter.test.js +247 -0
- package/dist/tests/providers/token-counter.test.js.map +1 -0
- package/dist/tests/rate-limiter.test.js +392 -1
- package/dist/tests/rate-limiter.test.js.map +1 -1
- package/dist/tests/scope.test.d.ts +2 -0
- package/dist/tests/scope.test.d.ts.map +1 -0
- package/dist/tests/scope.test.js +529 -0
- package/dist/tests/scope.test.js.map +1 -0
- package/dist/tests/simple-lru.test.js +377 -0
- package/dist/tests/simple-lru.test.js.map +1 -1
- package/dist/tests/symbol-boost.test.js +730 -10
- package/dist/tests/symbol-boost.test.js.map +1 -1
- package/dist/tests/symbols-extract.test.d.ts +2 -0
- package/dist/tests/symbols-extract.test.d.ts.map +1 -0
- package/dist/tests/symbols-extract.test.js +536 -0
- package/dist/tests/symbols-extract.test.js.map +1 -0
- package/dist/tests/symbols-graph.test.d.ts +2 -0
- package/dist/tests/symbols-graph.test.d.ts.map +1 -0
- package/dist/tests/symbols-graph.test.js +656 -0
- package/dist/tests/symbols-graph.test.js.map +1 -0
- package/dist/tests/synthesizer.test.d.ts +2 -0
- package/dist/tests/synthesizer.test.d.ts.map +1 -0
- package/dist/tests/synthesizer.test.js +381 -0
- package/dist/tests/synthesizer.test.js.map +1 -0
- package/dist/types/context-pack.d.ts +3 -3
- package/dist/utils/logger.d.ts +5 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +149 -4
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/mutex.d.ts +7 -2
- package/dist/utils/mutex.d.ts.map +1 -1
- package/dist/utils/mutex.js +31 -7
- package/dist/utils/mutex.js.map +1 -1
- package/dist/utils/path-helpers.d.ts.map +1 -1
- package/dist/utils/path-helpers.js +5 -2
- package/dist/utils/path-helpers.js.map +1 -1
- package/dist/utils/simple-lru.d.ts +6 -0
- package/dist/utils/simple-lru.d.ts.map +1 -1
- package/dist/utils/simple-lru.js +26 -0
- package/dist/utils/simple-lru.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { OpenAIProvider } from '../../providers/openai.js';
|
|
4
|
+
import { MAX_BATCH_TOKENS, MAX_ITEM_TOKENS, estimateTokens } from '../../providers/base.js';
|
|
5
|
+
function createMockOpenAI(dimensions = 1536) {
|
|
6
|
+
const mock = {
|
|
7
|
+
createCalls: [],
|
|
8
|
+
embeddings: {
|
|
9
|
+
create: async (params) => {
|
|
10
|
+
mock.createCalls.push(params);
|
|
11
|
+
const typedParams = params;
|
|
12
|
+
const inputs = Array.isArray(typedParams.input) ? typedParams.input : [typedParams.input];
|
|
13
|
+
return {
|
|
14
|
+
data: inputs.map((_, i) => ({
|
|
15
|
+
embedding: new Array(dimensions).fill(0).map((_, j) => (j + 1) / dimensions),
|
|
16
|
+
index: i
|
|
17
|
+
})),
|
|
18
|
+
model: typedParams.model,
|
|
19
|
+
usage: { prompt_tokens: 10, total_tokens: 10 }
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
return mock;
|
|
25
|
+
}
|
|
26
|
+
function createErrorMockOpenAI(error) {
|
|
27
|
+
return {
|
|
28
|
+
createCalls: [],
|
|
29
|
+
embeddings: {
|
|
30
|
+
create: async () => {
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function createInvalidResponseMockOpenAI(response) {
|
|
37
|
+
return {
|
|
38
|
+
createCalls: [],
|
|
39
|
+
embeddings: {
|
|
40
|
+
create: async () => {
|
|
41
|
+
return response;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Helper to inject mock OpenAI client
|
|
47
|
+
function injectMockClient(provider, mockClient) {
|
|
48
|
+
// Access private openai property via any
|
|
49
|
+
provider.openai = mockClient;
|
|
50
|
+
}
|
|
51
|
+
// ============= Constructor tests =============
|
|
52
|
+
test('OpenAIProvider uses default model when no options provided', () => {
|
|
53
|
+
// Clear environment to test defaults
|
|
54
|
+
const originalModel = process.env.CODEVAULT_EMBEDDING_MODEL;
|
|
55
|
+
delete process.env.CODEVAULT_EMBEDDING_MODEL;
|
|
56
|
+
delete process.env.CODEVAULT_OPENAI_EMBEDDING_MODEL;
|
|
57
|
+
delete process.env.OPENAI_MODEL;
|
|
58
|
+
try {
|
|
59
|
+
const provider = new OpenAIProvider();
|
|
60
|
+
assert.equal(provider.getModelName(), 'text-embedding-3-large');
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
if (originalModel)
|
|
64
|
+
process.env.CODEVAULT_EMBEDDING_MODEL = originalModel;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
test('OpenAIProvider uses model from options', () => {
|
|
68
|
+
const provider = new OpenAIProvider({ model: 'text-embedding-3-small' });
|
|
69
|
+
assert.equal(provider.getModelName(), 'text-embedding-3-small');
|
|
70
|
+
});
|
|
71
|
+
test('OpenAIProvider respects dimensions override', () => {
|
|
72
|
+
const provider = new OpenAIProvider({ dimensions: 512 });
|
|
73
|
+
assert.equal(provider.getDimensions(), 512);
|
|
74
|
+
});
|
|
75
|
+
test('OpenAIProvider uses rate limiter from config when provided', () => {
|
|
76
|
+
const provider = new OpenAIProvider({ rpm: 100, tpm: 50000 });
|
|
77
|
+
const stats = provider.rateLimiter.getStats();
|
|
78
|
+
assert.equal(stats.rpm, 100);
|
|
79
|
+
assert.equal(stats.tpm, 50000);
|
|
80
|
+
});
|
|
81
|
+
test('OpenAIProvider creates default rate limiter when no limits provided', () => {
|
|
82
|
+
const provider = new OpenAIProvider();
|
|
83
|
+
assert.ok(provider.rateLimiter, 'Rate limiter should exist');
|
|
84
|
+
});
|
|
85
|
+
// ============= getName tests =============
|
|
86
|
+
test('OpenAIProvider.getName returns "OpenAI"', () => {
|
|
87
|
+
const provider = new OpenAIProvider();
|
|
88
|
+
assert.equal(provider.getName(), 'OpenAI');
|
|
89
|
+
});
|
|
90
|
+
// ============= getModelName tests =============
|
|
91
|
+
test('OpenAIProvider.getModelName returns configured model', () => {
|
|
92
|
+
const provider = new OpenAIProvider({ model: 'custom-model' });
|
|
93
|
+
assert.equal(provider.getModelName(), 'custom-model');
|
|
94
|
+
});
|
|
95
|
+
// ============= getDimensions tests =============
|
|
96
|
+
test('OpenAIProvider.getDimensions returns 3072 for text-embedding-3-large', () => {
|
|
97
|
+
// Clear dimension overrides
|
|
98
|
+
const originalDims = process.env.CODEVAULT_EMBEDDING_DIMENSIONS;
|
|
99
|
+
delete process.env.CODEVAULT_EMBEDDING_DIMENSIONS;
|
|
100
|
+
delete process.env.CODEVAULT_DIMENSIONS;
|
|
101
|
+
try {
|
|
102
|
+
const provider = new OpenAIProvider({ model: 'text-embedding-3-large' });
|
|
103
|
+
assert.equal(provider.getDimensions(), 3072);
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
if (originalDims)
|
|
107
|
+
process.env.CODEVAULT_EMBEDDING_DIMENSIONS = originalDims;
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
test('OpenAIProvider.getDimensions returns 1536 for text-embedding-3-small', () => {
|
|
111
|
+
const originalDims = process.env.CODEVAULT_EMBEDDING_DIMENSIONS;
|
|
112
|
+
delete process.env.CODEVAULT_EMBEDDING_DIMENSIONS;
|
|
113
|
+
delete process.env.CODEVAULT_DIMENSIONS;
|
|
114
|
+
try {
|
|
115
|
+
const provider = new OpenAIProvider({ model: 'text-embedding-3-small' });
|
|
116
|
+
assert.equal(provider.getDimensions(), 1536);
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
if (originalDims)
|
|
120
|
+
process.env.CODEVAULT_EMBEDDING_DIMENSIONS = originalDims;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
test('OpenAIProvider.getDimensions returns 1536 for unknown models', () => {
|
|
124
|
+
const originalDims = process.env.CODEVAULT_EMBEDDING_DIMENSIONS;
|
|
125
|
+
delete process.env.CODEVAULT_EMBEDDING_DIMENSIONS;
|
|
126
|
+
delete process.env.CODEVAULT_DIMENSIONS;
|
|
127
|
+
try {
|
|
128
|
+
const provider = new OpenAIProvider({ model: 'unknown-model' });
|
|
129
|
+
assert.equal(provider.getDimensions(), 1536);
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
if (originalDims)
|
|
133
|
+
process.env.CODEVAULT_EMBEDDING_DIMENSIONS = originalDims;
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
test('OpenAIProvider.getDimensions respects dimensionsOverride', () => {
|
|
137
|
+
const provider = new OpenAIProvider({
|
|
138
|
+
model: 'text-embedding-3-large',
|
|
139
|
+
dimensions: 256
|
|
140
|
+
});
|
|
141
|
+
assert.equal(provider.getDimensions(), 256);
|
|
142
|
+
});
|
|
143
|
+
// ============= init tests =============
|
|
144
|
+
test('OpenAIProvider.init initializes OpenAI client', async () => {
|
|
145
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key' });
|
|
146
|
+
// init should not throw
|
|
147
|
+
await assert.doesNotReject(async () => {
|
|
148
|
+
await provider.init();
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
test('OpenAIProvider.init is idempotent (can call multiple times)', async () => {
|
|
152
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key' });
|
|
153
|
+
await provider.init();
|
|
154
|
+
await provider.init();
|
|
155
|
+
await provider.init();
|
|
156
|
+
// Should not throw
|
|
157
|
+
assert.ok(true);
|
|
158
|
+
});
|
|
159
|
+
// ============= generateEmbedding tests =============
|
|
160
|
+
test('OpenAIProvider.generateEmbedding returns embedding from API', async () => {
|
|
161
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key' });
|
|
162
|
+
await provider.init();
|
|
163
|
+
const mockClient = createMockOpenAI(3072);
|
|
164
|
+
injectMockClient(provider, mockClient);
|
|
165
|
+
const embedding = await provider.generateEmbedding('test text');
|
|
166
|
+
assert.equal(embedding.length, 3072);
|
|
167
|
+
assert.equal(mockClient.createCalls.length, 1);
|
|
168
|
+
});
|
|
169
|
+
test('OpenAIProvider.generateEmbedding truncates text to maxChars', async () => {
|
|
170
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key', model: 'text-embedding-3-large' });
|
|
171
|
+
await provider.init();
|
|
172
|
+
const mockClient = createMockOpenAI(3072);
|
|
173
|
+
injectMockClient(provider, mockClient);
|
|
174
|
+
// Create text longer than typical maxChars
|
|
175
|
+
const longText = 'a'.repeat(50000);
|
|
176
|
+
await provider.generateEmbedding(longText);
|
|
177
|
+
const call = mockClient.createCalls[0];
|
|
178
|
+
// Should be truncated (exact limit depends on model profile maxChunkChars)
|
|
179
|
+
assert.ok(call.input.length <= 24000, `Input should be truncated, got ${call.input.length}`);
|
|
180
|
+
});
|
|
181
|
+
test('OpenAIProvider.generateEmbedding adds provider routing for OpenRouter', async () => {
|
|
182
|
+
const provider = new OpenAIProvider({
|
|
183
|
+
apiKey: 'test-key',
|
|
184
|
+
baseUrl: 'https://openrouter.ai/api/v1',
|
|
185
|
+
routing: { order: ['first'] }
|
|
186
|
+
});
|
|
187
|
+
await provider.init();
|
|
188
|
+
const mockClient = createMockOpenAI(1536);
|
|
189
|
+
injectMockClient(provider, mockClient);
|
|
190
|
+
await provider.generateEmbedding('test');
|
|
191
|
+
const call = mockClient.createCalls[0];
|
|
192
|
+
assert.ok(call.provider, 'Provider routing should be included');
|
|
193
|
+
assert.deepEqual(call.provider.order, ['first']);
|
|
194
|
+
});
|
|
195
|
+
test('OpenAIProvider.generateEmbedding throws on invalid API response (no data)', async () => {
|
|
196
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key' });
|
|
197
|
+
await provider.init();
|
|
198
|
+
const mockClient = createInvalidResponseMockOpenAI({ data: null });
|
|
199
|
+
injectMockClient(provider, mockClient);
|
|
200
|
+
await assert.rejects(async () => provider.generateEmbedding('test'), /Invalid API response/);
|
|
201
|
+
});
|
|
202
|
+
test('OpenAIProvider.generateEmbedding throws on invalid API response (empty data)', async () => {
|
|
203
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key' });
|
|
204
|
+
await provider.init();
|
|
205
|
+
const mockClient = createInvalidResponseMockOpenAI({ data: [] });
|
|
206
|
+
injectMockClient(provider, mockClient);
|
|
207
|
+
await assert.rejects(async () => provider.generateEmbedding('test'), /Invalid API response/);
|
|
208
|
+
});
|
|
209
|
+
test('OpenAIProvider.generateEmbedding throws on invalid embedding format', async () => {
|
|
210
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key' });
|
|
211
|
+
await provider.init();
|
|
212
|
+
const mockClient = createInvalidResponseMockOpenAI({
|
|
213
|
+
data: [{ embedding: 'not an array' }]
|
|
214
|
+
});
|
|
215
|
+
injectMockClient(provider, mockClient);
|
|
216
|
+
await assert.rejects(async () => provider.generateEmbedding('test'), /Invalid embedding/);
|
|
217
|
+
});
|
|
218
|
+
test('OpenAIProvider.generateEmbedding throws if client not initialized', async () => {
|
|
219
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key' });
|
|
220
|
+
// Inject mock first, then null it out after init to test the guard
|
|
221
|
+
await provider.init();
|
|
222
|
+
const mockClient = createMockOpenAI(3072);
|
|
223
|
+
injectMockClient(provider, mockClient);
|
|
224
|
+
// Now null it to simulate an edge case where client becomes null
|
|
225
|
+
provider.openai = null;
|
|
226
|
+
// The generateEmbedding calls init() again which will recreate the client
|
|
227
|
+
// So this test verifies the guard inside rateLimiter.execute callback
|
|
228
|
+
// We need to mock init to not recreate the client
|
|
229
|
+
const originalInit = provider.init.bind(provider);
|
|
230
|
+
provider.init = async () => {
|
|
231
|
+
// Do nothing - don't recreate the client
|
|
232
|
+
await Promise.resolve();
|
|
233
|
+
};
|
|
234
|
+
await assert.rejects(async () => provider.generateEmbedding('test'), /OpenAI client not initialized/);
|
|
235
|
+
// Restore init
|
|
236
|
+
provider.init = originalInit;
|
|
237
|
+
});
|
|
238
|
+
// ============= generateEmbeddings (batch) tests =============
|
|
239
|
+
test('OpenAIProvider.generateEmbeddings processes batch correctly', async () => {
|
|
240
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key' });
|
|
241
|
+
await provider.init();
|
|
242
|
+
const mockClient = createMockOpenAI(3072);
|
|
243
|
+
injectMockClient(provider, mockClient);
|
|
244
|
+
const texts = ['text1', 'text2', 'text3'];
|
|
245
|
+
const embeddings = await provider.generateEmbeddings(texts);
|
|
246
|
+
assert.equal(embeddings.length, 3);
|
|
247
|
+
embeddings.forEach(emb => {
|
|
248
|
+
assert.equal(emb.length, 3072);
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
test('OpenAIProvider.generateEmbeddings handles empty array', async () => {
|
|
252
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key' });
|
|
253
|
+
await provider.init();
|
|
254
|
+
const mockClient = createMockOpenAI(3072);
|
|
255
|
+
injectMockClient(provider, mockClient);
|
|
256
|
+
const embeddings = await provider.generateEmbeddings([]);
|
|
257
|
+
assert.equal(embeddings.length, 0);
|
|
258
|
+
assert.equal(mockClient.createCalls.length, 0);
|
|
259
|
+
});
|
|
260
|
+
test('OpenAIProvider.generateEmbeddings respects MAX_BATCH_TOKENS limit', async () => {
|
|
261
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key', model: 'text-embedding-3-large' });
|
|
262
|
+
await provider.init();
|
|
263
|
+
const mockClient = createMockOpenAI(3072);
|
|
264
|
+
injectMockClient(provider, mockClient);
|
|
265
|
+
// Create texts that would exceed MAX_BATCH_TOKENS in total
|
|
266
|
+
// Each text is ~1000 tokens (4000 chars), so 200 texts = ~200k tokens > 100k limit
|
|
267
|
+
const texts = Array.from({ length: 50 }, () => 'a'.repeat(4000));
|
|
268
|
+
await provider.generateEmbeddings(texts);
|
|
269
|
+
// Should have made multiple API calls due to token limits
|
|
270
|
+
assert.ok(mockClient.createCalls.length >= 1, 'Should make at least one API call');
|
|
271
|
+
});
|
|
272
|
+
test('OpenAIProvider.generateEmbeddings text is truncated to maxChars before token check', async () => {
|
|
273
|
+
// This test verifies that text is truncated before token counting
|
|
274
|
+
// For text-embedding-3-large: maxChars=24000, maxTokens=8191
|
|
275
|
+
// 24000 chars / 4 = 6000 estimated tokens, which is < 8191
|
|
276
|
+
// So even very long texts won't trigger the token limit error after truncation
|
|
277
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key', model: 'text-embedding-3-large' });
|
|
278
|
+
await provider.init();
|
|
279
|
+
const mockClient = createMockOpenAI(3072);
|
|
280
|
+
injectMockClient(provider, mockClient);
|
|
281
|
+
// Create a very long text that would exceed token limits if not truncated
|
|
282
|
+
const oversizedText = 'a'.repeat(100000); // 25000 estimated tokens before truncation
|
|
283
|
+
const texts = [oversizedText];
|
|
284
|
+
// Should NOT throw because text is truncated to maxChars (24000) first
|
|
285
|
+
// 24000 / 4 = 6000 tokens, which is < 8191
|
|
286
|
+
await assert.doesNotReject(async () => provider.generateEmbeddings(texts));
|
|
287
|
+
// Verify the text was truncated
|
|
288
|
+
const call = mockClient.createCalls[0];
|
|
289
|
+
assert.ok(call.input[0].length <= 24000, 'Text should be truncated to maxChars');
|
|
290
|
+
});
|
|
291
|
+
test('OpenAIProvider.generateEmbeddings validates response length matches input', async () => {
|
|
292
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key' });
|
|
293
|
+
await provider.init();
|
|
294
|
+
// Mock that returns wrong number of embeddings
|
|
295
|
+
const mockClient = {
|
|
296
|
+
createCalls: [],
|
|
297
|
+
embeddings: {
|
|
298
|
+
create: async () => ({
|
|
299
|
+
data: [{ embedding: [1, 2, 3], index: 0 }], // Only 1 embedding
|
|
300
|
+
model: 'test',
|
|
301
|
+
usage: { prompt_tokens: 10, total_tokens: 10 }
|
|
302
|
+
})
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
injectMockClient(provider, mockClient);
|
|
306
|
+
await assert.rejects(async () => provider.generateEmbeddings(['text1', 'text2', 'text3']), // 3 texts
|
|
307
|
+
/expected 3/);
|
|
308
|
+
});
|
|
309
|
+
test('OpenAIProvider.generateEmbeddings handles single item batch', async () => {
|
|
310
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key' });
|
|
311
|
+
await provider.init();
|
|
312
|
+
const mockClient = createMockOpenAI(3072);
|
|
313
|
+
injectMockClient(provider, mockClient);
|
|
314
|
+
const embeddings = await provider.generateEmbeddings(['single text']);
|
|
315
|
+
assert.equal(embeddings.length, 1);
|
|
316
|
+
assert.equal(embeddings[0].length, 3072);
|
|
317
|
+
});
|
|
318
|
+
// ============= Token estimation tests =============
|
|
319
|
+
test('estimateTokens function is used for batch size calculation', () => {
|
|
320
|
+
// Test that estimateTokens is consistent with provider expectations
|
|
321
|
+
const text = 'hello world test';
|
|
322
|
+
const estimate = estimateTokens(text);
|
|
323
|
+
assert.equal(estimate, Math.ceil(text.length / 4));
|
|
324
|
+
});
|
|
325
|
+
test('MAX_BATCH_TOKENS constant is correct', () => {
|
|
326
|
+
assert.equal(MAX_BATCH_TOKENS, 100000);
|
|
327
|
+
});
|
|
328
|
+
test('MAX_ITEM_TOKENS constant is correct', () => {
|
|
329
|
+
assert.equal(MAX_ITEM_TOKENS, 8191);
|
|
330
|
+
});
|
|
331
|
+
// ============= Rate limiting integration tests =============
|
|
332
|
+
test('OpenAIProvider uses rate limiter for generateEmbedding', async () => {
|
|
333
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key', rpm: 100 });
|
|
334
|
+
await provider.init();
|
|
335
|
+
const mockClient = createMockOpenAI(3072);
|
|
336
|
+
injectMockClient(provider, mockClient);
|
|
337
|
+
await provider.generateEmbedding('test');
|
|
338
|
+
const stats = provider.rateLimiter.getStats();
|
|
339
|
+
assert.ok(stats.requestsInLastMinute >= 0);
|
|
340
|
+
});
|
|
341
|
+
test('OpenAIProvider uses rate limiter for generateEmbeddings', async () => {
|
|
342
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key', rpm: 100 });
|
|
343
|
+
await provider.init();
|
|
344
|
+
const mockClient = createMockOpenAI(3072);
|
|
345
|
+
injectMockClient(provider, mockClient);
|
|
346
|
+
await provider.generateEmbeddings(['text1', 'text2']);
|
|
347
|
+
const stats = provider.rateLimiter.getStats();
|
|
348
|
+
assert.ok(stats.requestsInLastMinute >= 0);
|
|
349
|
+
});
|
|
350
|
+
// ============= Error handling tests =============
|
|
351
|
+
test('OpenAIProvider.generateEmbedding propagates API errors', async () => {
|
|
352
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key' });
|
|
353
|
+
await provider.init();
|
|
354
|
+
const mockClient = createErrorMockOpenAI(new Error('API unavailable'));
|
|
355
|
+
injectMockClient(provider, mockClient);
|
|
356
|
+
await assert.rejects(async () => provider.generateEmbedding('test'), /API unavailable/);
|
|
357
|
+
});
|
|
358
|
+
test('OpenAIProvider.generateEmbeddings validates each embedding in batch', async () => {
|
|
359
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key' });
|
|
360
|
+
await provider.init();
|
|
361
|
+
// Mock that returns invalid embedding at index 1
|
|
362
|
+
const mockClient = {
|
|
363
|
+
createCalls: [],
|
|
364
|
+
embeddings: {
|
|
365
|
+
create: async () => ({
|
|
366
|
+
data: [
|
|
367
|
+
{ embedding: [1, 2, 3], index: 0 },
|
|
368
|
+
{ embedding: null, index: 1 } // Invalid
|
|
369
|
+
],
|
|
370
|
+
model: 'test',
|
|
371
|
+
usage: { prompt_tokens: 10, total_tokens: 10 }
|
|
372
|
+
})
|
|
373
|
+
}
|
|
374
|
+
};
|
|
375
|
+
injectMockClient(provider, mockClient);
|
|
376
|
+
await assert.rejects(async () => provider.generateEmbeddings(['text1', 'text2']), /Invalid embedding at index 1/);
|
|
377
|
+
});
|
|
378
|
+
// ============= OpenRouter detection tests =============
|
|
379
|
+
test('OpenAIProvider does not add routing for non-OpenRouter URLs', async () => {
|
|
380
|
+
const provider = new OpenAIProvider({
|
|
381
|
+
apiKey: 'test-key',
|
|
382
|
+
baseUrl: 'https://api.openai.com/v1',
|
|
383
|
+
routing: { order: ['first'] }
|
|
384
|
+
});
|
|
385
|
+
await provider.init();
|
|
386
|
+
const mockClient = createMockOpenAI(1536);
|
|
387
|
+
injectMockClient(provider, mockClient);
|
|
388
|
+
await provider.generateEmbedding('test');
|
|
389
|
+
const call = mockClient.createCalls[0];
|
|
390
|
+
assert.equal(call.provider, undefined, 'Provider routing should not be included for non-OpenRouter');
|
|
391
|
+
});
|
|
392
|
+
// ============= Concurrent access tests =============
|
|
393
|
+
test('OpenAIProvider handles concurrent generateEmbedding calls', async () => {
|
|
394
|
+
const provider = new OpenAIProvider({ apiKey: 'test-key', rpm: 1000 });
|
|
395
|
+
await provider.init();
|
|
396
|
+
const mockClient = createMockOpenAI(3072);
|
|
397
|
+
injectMockClient(provider, mockClient);
|
|
398
|
+
const results = await Promise.all([
|
|
399
|
+
provider.generateEmbedding('text1'),
|
|
400
|
+
provider.generateEmbedding('text2'),
|
|
401
|
+
provider.generateEmbedding('text3')
|
|
402
|
+
]);
|
|
403
|
+
assert.equal(results.length, 3);
|
|
404
|
+
results.forEach(emb => {
|
|
405
|
+
assert.equal(emb.length, 3072);
|
|
406
|
+
});
|
|
407
|
+
});
|
|
408
|
+
//# sourceMappingURL=openai.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.test.js","sourceRoot":"","sources":["../../../src/tests/providers/openai.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-counter.test.d.ts","sourceRoot":"","sources":["../../../src/tests/providers/token-counter.test.ts"],"names":[],"mappings":""}
|