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,575 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { rerankWithAPI, isAPIRerankingConfigured } from '../ranking/api-reranker.js';
|
|
4
|
+
// Save original env vars
|
|
5
|
+
const originalEnv = {
|
|
6
|
+
CODEVAULT_RERANK_API_URL: process.env.CODEVAULT_RERANK_API_URL,
|
|
7
|
+
CODEVAULT_RERANK_API_KEY: process.env.CODEVAULT_RERANK_API_KEY,
|
|
8
|
+
CODEVAULT_RERANK_MODEL: process.env.CODEVAULT_RERANK_MODEL,
|
|
9
|
+
CODEVAULT_RERANK_TIMEOUT_MS: process.env.CODEVAULT_RERANK_TIMEOUT_MS,
|
|
10
|
+
CODEVAULT_RERANKER_MAX: process.env.CODEVAULT_RERANKER_MAX,
|
|
11
|
+
CODEVAULT_RERANKER_MAX_TOKENS: process.env.CODEVAULT_RERANKER_MAX_TOKENS,
|
|
12
|
+
};
|
|
13
|
+
function restoreEnv() {
|
|
14
|
+
for (const [key, value] of Object.entries(originalEnv)) {
|
|
15
|
+
if (value === undefined) {
|
|
16
|
+
delete process.env[key];
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
process.env[key] = value;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function clearEnv() {
|
|
24
|
+
delete process.env.CODEVAULT_RERANK_API_URL;
|
|
25
|
+
delete process.env.CODEVAULT_RERANK_API_KEY;
|
|
26
|
+
delete process.env.CODEVAULT_RERANK_MODEL;
|
|
27
|
+
delete process.env.CODEVAULT_RERANK_TIMEOUT_MS;
|
|
28
|
+
delete process.env.CODEVAULT_RERANKER_MAX;
|
|
29
|
+
delete process.env.CODEVAULT_RERANKER_MAX_TOKENS;
|
|
30
|
+
}
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// isAPIRerankingConfigured Tests
|
|
33
|
+
// ============================================================================
|
|
34
|
+
test('isAPIRerankingConfigured returns false when neither URL nor KEY is set', () => {
|
|
35
|
+
clearEnv();
|
|
36
|
+
const result = isAPIRerankingConfigured();
|
|
37
|
+
assert.equal(result, false);
|
|
38
|
+
restoreEnv();
|
|
39
|
+
});
|
|
40
|
+
test('isAPIRerankingConfigured returns false when only URL is set', () => {
|
|
41
|
+
clearEnv();
|
|
42
|
+
process.env.CODEVAULT_RERANK_API_URL = 'https://api.example.com/rerank';
|
|
43
|
+
const result = isAPIRerankingConfigured();
|
|
44
|
+
assert.equal(result, false);
|
|
45
|
+
restoreEnv();
|
|
46
|
+
});
|
|
47
|
+
test('isAPIRerankingConfigured returns false when only KEY is set', () => {
|
|
48
|
+
clearEnv();
|
|
49
|
+
process.env.CODEVAULT_RERANK_API_KEY = 'test-api-key';
|
|
50
|
+
const result = isAPIRerankingConfigured();
|
|
51
|
+
assert.equal(result, false);
|
|
52
|
+
restoreEnv();
|
|
53
|
+
});
|
|
54
|
+
test('isAPIRerankingConfigured returns true when both URL and KEY are set', () => {
|
|
55
|
+
clearEnv();
|
|
56
|
+
process.env.CODEVAULT_RERANK_API_URL = 'https://api.example.com/rerank';
|
|
57
|
+
process.env.CODEVAULT_RERANK_API_KEY = 'test-api-key';
|
|
58
|
+
const result = isAPIRerankingConfigured();
|
|
59
|
+
assert.equal(result, true);
|
|
60
|
+
restoreEnv();
|
|
61
|
+
});
|
|
62
|
+
test('isAPIRerankingConfigured returns false for empty URL string', () => {
|
|
63
|
+
clearEnv();
|
|
64
|
+
process.env.CODEVAULT_RERANK_API_URL = '';
|
|
65
|
+
process.env.CODEVAULT_RERANK_API_KEY = 'test-api-key';
|
|
66
|
+
const result = isAPIRerankingConfigured();
|
|
67
|
+
assert.equal(result, false);
|
|
68
|
+
restoreEnv();
|
|
69
|
+
});
|
|
70
|
+
test('isAPIRerankingConfigured returns false for empty KEY string', () => {
|
|
71
|
+
clearEnv();
|
|
72
|
+
process.env.CODEVAULT_RERANK_API_URL = 'https://api.example.com/rerank';
|
|
73
|
+
process.env.CODEVAULT_RERANK_API_KEY = '';
|
|
74
|
+
const result = isAPIRerankingConfigured();
|
|
75
|
+
assert.equal(result, false);
|
|
76
|
+
restoreEnv();
|
|
77
|
+
});
|
|
78
|
+
// ============================================================================
|
|
79
|
+
// rerankWithAPI - Edge Cases for Empty/Invalid Input
|
|
80
|
+
// ============================================================================
|
|
81
|
+
test('rerankWithAPI returns empty array for empty candidates', async () => {
|
|
82
|
+
const result = await rerankWithAPI('test query', []);
|
|
83
|
+
assert.deepEqual(result, []);
|
|
84
|
+
});
|
|
85
|
+
test('rerankWithAPI returns candidates unchanged for single candidate', async () => {
|
|
86
|
+
const candidates = [{ id: 'chunk1', score: 0.5 }];
|
|
87
|
+
const result = await rerankWithAPI('test query', candidates);
|
|
88
|
+
assert.deepEqual(result, candidates);
|
|
89
|
+
});
|
|
90
|
+
test('rerankWithAPI returns candidates unchanged for non-array input', async () => {
|
|
91
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
92
|
+
const result = await rerankWithAPI('test query', null);
|
|
93
|
+
assert.deepEqual(result, null);
|
|
94
|
+
});
|
|
95
|
+
test('rerankWithAPI returns candidates when max is 0', async () => {
|
|
96
|
+
const candidates = [
|
|
97
|
+
{ id: 'chunk1', score: 0.8 },
|
|
98
|
+
{ id: 'chunk2', score: 0.6 },
|
|
99
|
+
];
|
|
100
|
+
const result = await rerankWithAPI('test query', candidates, { max: 0 });
|
|
101
|
+
assert.deepEqual(result, candidates);
|
|
102
|
+
});
|
|
103
|
+
test('rerankWithAPI returns candidates when max is negative', async () => {
|
|
104
|
+
const candidates = [
|
|
105
|
+
{ id: 'chunk1', score: 0.8 },
|
|
106
|
+
{ id: 'chunk2', score: 0.6 },
|
|
107
|
+
];
|
|
108
|
+
const result = await rerankWithAPI('test query', candidates, { max: -5 });
|
|
109
|
+
assert.deepEqual(result, candidates);
|
|
110
|
+
});
|
|
111
|
+
test('rerankWithAPI returns candidates when max is 1', async () => {
|
|
112
|
+
const candidates = [
|
|
113
|
+
{ id: 'chunk1', score: 0.8 },
|
|
114
|
+
{ id: 'chunk2', score: 0.6 },
|
|
115
|
+
];
|
|
116
|
+
const result = await rerankWithAPI('test query', candidates, { max: 1 });
|
|
117
|
+
assert.deepEqual(result, candidates);
|
|
118
|
+
});
|
|
119
|
+
// ============================================================================
|
|
120
|
+
// rerankWithAPI - Fallback Behavior on API Error
|
|
121
|
+
// ============================================================================
|
|
122
|
+
test('rerankWithAPI gracefully falls back when API URL is not configured', async () => {
|
|
123
|
+
clearEnv();
|
|
124
|
+
const candidates = [
|
|
125
|
+
{ id: 'chunk1', score: 0.8 },
|
|
126
|
+
{ id: 'chunk2', score: 0.6 },
|
|
127
|
+
];
|
|
128
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
129
|
+
getText: (c) => String(c.id),
|
|
130
|
+
});
|
|
131
|
+
// Should return original candidates without throwing
|
|
132
|
+
assert.deepEqual(result, candidates);
|
|
133
|
+
restoreEnv();
|
|
134
|
+
});
|
|
135
|
+
test('rerankWithAPI gracefully falls back when API KEY is not configured', async () => {
|
|
136
|
+
clearEnv();
|
|
137
|
+
process.env.CODEVAULT_RERANK_API_URL = 'https://api.example.com/rerank';
|
|
138
|
+
const candidates = [
|
|
139
|
+
{ id: 'chunk1', score: 0.8 },
|
|
140
|
+
{ id: 'chunk2', score: 0.6 },
|
|
141
|
+
];
|
|
142
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
143
|
+
getText: (c) => String(c.id),
|
|
144
|
+
});
|
|
145
|
+
// Should return original candidates without throwing
|
|
146
|
+
assert.deepEqual(result, candidates);
|
|
147
|
+
restoreEnv();
|
|
148
|
+
});
|
|
149
|
+
test('rerankWithAPI gracefully falls back on network error', async () => {
|
|
150
|
+
clearEnv();
|
|
151
|
+
process.env.CODEVAULT_RERANK_API_URL = 'https://invalid-host-that-does-not-exist.example.com/rerank';
|
|
152
|
+
process.env.CODEVAULT_RERANK_API_KEY = 'test-key';
|
|
153
|
+
process.env.CODEVAULT_RERANK_TIMEOUT_MS = '100';
|
|
154
|
+
const candidates = [
|
|
155
|
+
{ id: 'chunk1', score: 0.8 },
|
|
156
|
+
{ id: 'chunk2', score: 0.6 },
|
|
157
|
+
];
|
|
158
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
159
|
+
getText: (c) => String(c.id),
|
|
160
|
+
});
|
|
161
|
+
// Should return original candidates without throwing
|
|
162
|
+
assert.deepEqual(result, candidates);
|
|
163
|
+
restoreEnv();
|
|
164
|
+
});
|
|
165
|
+
// ============================================================================
|
|
166
|
+
// rerankWithAPI - getText/getTextAsync Handlers
|
|
167
|
+
// ============================================================================
|
|
168
|
+
test('rerankWithAPI uses getText function when provided', async () => {
|
|
169
|
+
clearEnv();
|
|
170
|
+
let getTextCalled = false;
|
|
171
|
+
const candidates = [
|
|
172
|
+
{ id: 'chunk1', content: 'hello world', score: 0.8 },
|
|
173
|
+
{ id: 'chunk2', content: 'foo bar', score: 0.6 },
|
|
174
|
+
];
|
|
175
|
+
await rerankWithAPI('test query', candidates, {
|
|
176
|
+
getText: (c) => {
|
|
177
|
+
getTextCalled = true;
|
|
178
|
+
return String(c.content);
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
assert.ok(getTextCalled, 'getText should have been called');
|
|
182
|
+
restoreEnv();
|
|
183
|
+
});
|
|
184
|
+
test('rerankWithAPI uses getTextAsync function when provided', async () => {
|
|
185
|
+
clearEnv();
|
|
186
|
+
let getTextAsyncCalled = false;
|
|
187
|
+
const candidates = [
|
|
188
|
+
{ id: 'chunk1', content: 'hello world', score: 0.8 },
|
|
189
|
+
{ id: 'chunk2', content: 'foo bar', score: 0.6 },
|
|
190
|
+
];
|
|
191
|
+
await rerankWithAPI('test query', candidates, {
|
|
192
|
+
getTextAsync: async (c) => {
|
|
193
|
+
getTextAsyncCalled = true;
|
|
194
|
+
return String(c.content);
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
assert.ok(getTextAsyncCalled, 'getTextAsync should have been called');
|
|
198
|
+
restoreEnv();
|
|
199
|
+
});
|
|
200
|
+
test('rerankWithAPI prefers getTextAsync over getText when both provided', async () => {
|
|
201
|
+
clearEnv();
|
|
202
|
+
let getTextCalled = false;
|
|
203
|
+
let getTextAsyncCalled = false;
|
|
204
|
+
const candidates = [
|
|
205
|
+
{ id: 'chunk1', content: 'hello world', score: 0.8 },
|
|
206
|
+
{ id: 'chunk2', content: 'foo bar', score: 0.6 },
|
|
207
|
+
];
|
|
208
|
+
await rerankWithAPI('test query', candidates, {
|
|
209
|
+
getText: () => {
|
|
210
|
+
getTextCalled = true;
|
|
211
|
+
return 'from getText';
|
|
212
|
+
},
|
|
213
|
+
getTextAsync: async () => {
|
|
214
|
+
getTextAsyncCalled = true;
|
|
215
|
+
return 'from getTextAsync';
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
assert.ok(getTextAsyncCalled, 'getTextAsync should have been called');
|
|
219
|
+
assert.ok(!getTextCalled, 'getText should not have been called when getTextAsync is present');
|
|
220
|
+
restoreEnv();
|
|
221
|
+
});
|
|
222
|
+
test('rerankWithAPI handles getText returning non-string', async () => {
|
|
223
|
+
clearEnv();
|
|
224
|
+
const candidates = [
|
|
225
|
+
{ id: 'chunk1', score: 0.8 },
|
|
226
|
+
{ id: 'chunk2', score: 0.6 },
|
|
227
|
+
];
|
|
228
|
+
// Should not throw
|
|
229
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
230
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
231
|
+
getText: () => 12345,
|
|
232
|
+
});
|
|
233
|
+
assert.deepEqual(result, candidates);
|
|
234
|
+
restoreEnv();
|
|
235
|
+
});
|
|
236
|
+
test('rerankWithAPI returns empty string when no getText provided', async () => {
|
|
237
|
+
clearEnv();
|
|
238
|
+
const candidates = [
|
|
239
|
+
{ id: 'chunk1', score: 0.8 },
|
|
240
|
+
{ id: 'chunk2', score: 0.6 },
|
|
241
|
+
];
|
|
242
|
+
// Should not throw, falls back gracefully
|
|
243
|
+
const result = await rerankWithAPI('test query', candidates);
|
|
244
|
+
assert.deepEqual(result, candidates);
|
|
245
|
+
restoreEnv();
|
|
246
|
+
});
|
|
247
|
+
// ============================================================================
|
|
248
|
+
// rerankWithAPI - maxCandidates Limiting
|
|
249
|
+
// ============================================================================
|
|
250
|
+
test('rerankWithAPI respects max option to limit candidates', async () => {
|
|
251
|
+
clearEnv();
|
|
252
|
+
const candidates = [
|
|
253
|
+
{ id: 'chunk1', score: 0.9 },
|
|
254
|
+
{ id: 'chunk2', score: 0.8 },
|
|
255
|
+
{ id: 'chunk3', score: 0.7 },
|
|
256
|
+
{ id: 'chunk4', score: 0.6 },
|
|
257
|
+
{ id: 'chunk5', score: 0.5 },
|
|
258
|
+
];
|
|
259
|
+
// Even if API fails, it should still process max candidates
|
|
260
|
+
const result = await rerankWithAPI('test query', candidates, { max: 3 });
|
|
261
|
+
// Fallback returns all candidates in original order
|
|
262
|
+
assert.equal(result.length, 5);
|
|
263
|
+
restoreEnv();
|
|
264
|
+
});
|
|
265
|
+
test('rerankWithAPI handles max larger than candidates length', async () => {
|
|
266
|
+
clearEnv();
|
|
267
|
+
const candidates = [
|
|
268
|
+
{ id: 'chunk1', score: 0.9 },
|
|
269
|
+
{ id: 'chunk2', score: 0.8 },
|
|
270
|
+
];
|
|
271
|
+
const result = await rerankWithAPI('test query', candidates, { max: 100 });
|
|
272
|
+
assert.equal(result.length, 2);
|
|
273
|
+
restoreEnv();
|
|
274
|
+
});
|
|
275
|
+
test('rerankWithAPI handles fractional max value', async () => {
|
|
276
|
+
clearEnv();
|
|
277
|
+
const candidates = [
|
|
278
|
+
{ id: 'chunk1', score: 0.9 },
|
|
279
|
+
{ id: 'chunk2', score: 0.8 },
|
|
280
|
+
{ id: 'chunk3', score: 0.7 },
|
|
281
|
+
];
|
|
282
|
+
// Should floor to 2
|
|
283
|
+
const result = await rerankWithAPI('test query', candidates, { max: 2.7 });
|
|
284
|
+
assert.equal(result.length, 3); // Falls back, returns all
|
|
285
|
+
restoreEnv();
|
|
286
|
+
});
|
|
287
|
+
test('rerankWithAPI handles NaN max value', async () => {
|
|
288
|
+
clearEnv();
|
|
289
|
+
const candidates = [
|
|
290
|
+
{ id: 'chunk1', score: 0.9 },
|
|
291
|
+
{ id: 'chunk2', score: 0.8 },
|
|
292
|
+
];
|
|
293
|
+
const result = await rerankWithAPI('test query', candidates, { max: NaN });
|
|
294
|
+
assert.equal(result.length, 2);
|
|
295
|
+
restoreEnv();
|
|
296
|
+
});
|
|
297
|
+
test('rerankWithAPI handles Infinity max value', async () => {
|
|
298
|
+
clearEnv();
|
|
299
|
+
const candidates = [
|
|
300
|
+
{ id: 'chunk1', score: 0.9 },
|
|
301
|
+
{ id: 'chunk2', score: 0.8 },
|
|
302
|
+
];
|
|
303
|
+
const result = await rerankWithAPI('test query', candidates, { max: Infinity });
|
|
304
|
+
assert.equal(result.length, 2);
|
|
305
|
+
restoreEnv();
|
|
306
|
+
});
|
|
307
|
+
// ============================================================================
|
|
308
|
+
// rerankWithAPI - maxTokens Handling
|
|
309
|
+
// ============================================================================
|
|
310
|
+
test('rerankWithAPI handles maxTokens option', async () => {
|
|
311
|
+
clearEnv();
|
|
312
|
+
const candidates = [
|
|
313
|
+
{ id: 'chunk1', content: 'a'.repeat(10000), score: 0.8 },
|
|
314
|
+
{ id: 'chunk2', content: 'b'.repeat(10000), score: 0.6 },
|
|
315
|
+
];
|
|
316
|
+
// Should not throw even with truncation
|
|
317
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
318
|
+
maxTokens: 100,
|
|
319
|
+
getText: (c) => String(c.content),
|
|
320
|
+
});
|
|
321
|
+
assert.equal(result.length, 2);
|
|
322
|
+
restoreEnv();
|
|
323
|
+
});
|
|
324
|
+
test('rerankWithAPI handles zero maxTokens', async () => {
|
|
325
|
+
clearEnv();
|
|
326
|
+
const candidates = [
|
|
327
|
+
{ id: 'chunk1', content: 'hello', score: 0.8 },
|
|
328
|
+
{ id: 'chunk2', content: 'world', score: 0.6 },
|
|
329
|
+
];
|
|
330
|
+
// Should use default (at least 1)
|
|
331
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
332
|
+
maxTokens: 0,
|
|
333
|
+
getText: (c) => String(c.content),
|
|
334
|
+
});
|
|
335
|
+
assert.equal(result.length, 2);
|
|
336
|
+
restoreEnv();
|
|
337
|
+
});
|
|
338
|
+
test('rerankWithAPI handles negative maxTokens', async () => {
|
|
339
|
+
clearEnv();
|
|
340
|
+
const candidates = [
|
|
341
|
+
{ id: 'chunk1', content: 'hello', score: 0.8 },
|
|
342
|
+
{ id: 'chunk2', content: 'world', score: 0.6 },
|
|
343
|
+
];
|
|
344
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
345
|
+
maxTokens: -100,
|
|
346
|
+
getText: (c) => String(c.content),
|
|
347
|
+
});
|
|
348
|
+
assert.equal(result.length, 2);
|
|
349
|
+
restoreEnv();
|
|
350
|
+
});
|
|
351
|
+
// ============================================================================
|
|
352
|
+
// rerankWithAPI - Custom API Configuration
|
|
353
|
+
// ============================================================================
|
|
354
|
+
test('rerankWithAPI uses custom apiUrl from options', async () => {
|
|
355
|
+
clearEnv();
|
|
356
|
+
process.env.CODEVAULT_RERANK_API_KEY = 'test-key';
|
|
357
|
+
const candidates = [
|
|
358
|
+
{ id: 'chunk1', score: 0.8 },
|
|
359
|
+
{ id: 'chunk2', score: 0.6 },
|
|
360
|
+
];
|
|
361
|
+
// Should attempt to use custom URL (will fail, fallback)
|
|
362
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
363
|
+
apiUrl: 'https://custom-api.example.com/rerank',
|
|
364
|
+
getText: (c) => String(c.id),
|
|
365
|
+
});
|
|
366
|
+
assert.deepEqual(result, candidates);
|
|
367
|
+
restoreEnv();
|
|
368
|
+
});
|
|
369
|
+
test('rerankWithAPI uses custom apiKey from options', async () => {
|
|
370
|
+
clearEnv();
|
|
371
|
+
process.env.CODEVAULT_RERANK_API_URL = 'https://api.example.com/rerank';
|
|
372
|
+
const candidates = [
|
|
373
|
+
{ id: 'chunk1', score: 0.8 },
|
|
374
|
+
{ id: 'chunk2', score: 0.6 },
|
|
375
|
+
];
|
|
376
|
+
// Should attempt to use custom key (will fail, fallback)
|
|
377
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
378
|
+
apiKey: 'custom-api-key',
|
|
379
|
+
getText: (c) => String(c.id),
|
|
380
|
+
});
|
|
381
|
+
assert.deepEqual(result, candidates);
|
|
382
|
+
restoreEnv();
|
|
383
|
+
});
|
|
384
|
+
test('rerankWithAPI uses custom model from options', async () => {
|
|
385
|
+
clearEnv();
|
|
386
|
+
process.env.CODEVAULT_RERANK_API_URL = 'https://api.example.com/rerank';
|
|
387
|
+
process.env.CODEVAULT_RERANK_API_KEY = 'test-key';
|
|
388
|
+
const candidates = [
|
|
389
|
+
{ id: 'chunk1', score: 0.8 },
|
|
390
|
+
{ id: 'chunk2', score: 0.6 },
|
|
391
|
+
];
|
|
392
|
+
// Should not throw when custom model is provided
|
|
393
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
394
|
+
model: 'custom-rerank-model',
|
|
395
|
+
getText: (c) => String(c.id),
|
|
396
|
+
});
|
|
397
|
+
assert.deepEqual(result, candidates);
|
|
398
|
+
restoreEnv();
|
|
399
|
+
});
|
|
400
|
+
// ============================================================================
|
|
401
|
+
// rerankWithAPI - Environment Variable Parsing
|
|
402
|
+
// ============================================================================
|
|
403
|
+
test('rerankWithAPI respects CODEVAULT_RERANKER_MAX env var', async () => {
|
|
404
|
+
clearEnv();
|
|
405
|
+
process.env.CODEVAULT_RERANKER_MAX = '2';
|
|
406
|
+
const candidates = [
|
|
407
|
+
{ id: 'chunk1', score: 0.9 },
|
|
408
|
+
{ id: 'chunk2', score: 0.8 },
|
|
409
|
+
{ id: 'chunk3', score: 0.7 },
|
|
410
|
+
];
|
|
411
|
+
const result = await rerankWithAPI('test query', candidates);
|
|
412
|
+
assert.equal(result.length, 3);
|
|
413
|
+
restoreEnv();
|
|
414
|
+
});
|
|
415
|
+
test('rerankWithAPI handles invalid CODEVAULT_RERANKER_MAX env var', async () => {
|
|
416
|
+
clearEnv();
|
|
417
|
+
process.env.CODEVAULT_RERANKER_MAX = 'invalid';
|
|
418
|
+
const candidates = [
|
|
419
|
+
{ id: 'chunk1', score: 0.9 },
|
|
420
|
+
{ id: 'chunk2', score: 0.8 },
|
|
421
|
+
];
|
|
422
|
+
// Should use default value, not throw
|
|
423
|
+
const result = await rerankWithAPI('test query', candidates);
|
|
424
|
+
assert.equal(result.length, 2);
|
|
425
|
+
restoreEnv();
|
|
426
|
+
});
|
|
427
|
+
test('rerankWithAPI respects CODEVAULT_RERANKER_MAX_TOKENS env var', async () => {
|
|
428
|
+
clearEnv();
|
|
429
|
+
process.env.CODEVAULT_RERANKER_MAX_TOKENS = '100';
|
|
430
|
+
const candidates = [
|
|
431
|
+
{ id: 'chunk1', content: 'a'.repeat(10000), score: 0.8 },
|
|
432
|
+
{ id: 'chunk2', content: 'b'.repeat(10000), score: 0.6 },
|
|
433
|
+
];
|
|
434
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
435
|
+
getText: (c) => String(c.content),
|
|
436
|
+
});
|
|
437
|
+
assert.equal(result.length, 2);
|
|
438
|
+
restoreEnv();
|
|
439
|
+
});
|
|
440
|
+
test('rerankWithAPI handles invalid CODEVAULT_RERANKER_MAX_TOKENS env var', async () => {
|
|
441
|
+
clearEnv();
|
|
442
|
+
process.env.CODEVAULT_RERANKER_MAX_TOKENS = 'not-a-number';
|
|
443
|
+
const candidates = [
|
|
444
|
+
{ id: 'chunk1', score: 0.8 },
|
|
445
|
+
{ id: 'chunk2', score: 0.6 },
|
|
446
|
+
];
|
|
447
|
+
// Should use default, not throw
|
|
448
|
+
const result = await rerankWithAPI('test query', candidates);
|
|
449
|
+
assert.equal(result.length, 2);
|
|
450
|
+
restoreEnv();
|
|
451
|
+
});
|
|
452
|
+
test('rerankWithAPI handles negative CODEVAULT_RERANK_TIMEOUT_MS env var', async () => {
|
|
453
|
+
clearEnv();
|
|
454
|
+
process.env.CODEVAULT_RERANK_TIMEOUT_MS = '-1000';
|
|
455
|
+
process.env.CODEVAULT_RERANK_API_URL = 'https://api.example.com/rerank';
|
|
456
|
+
process.env.CODEVAULT_RERANK_API_KEY = 'test-key';
|
|
457
|
+
const candidates = [
|
|
458
|
+
{ id: 'chunk1', score: 0.8 },
|
|
459
|
+
{ id: 'chunk2', score: 0.6 },
|
|
460
|
+
];
|
|
461
|
+
// Should use default timeout, fallback gracefully
|
|
462
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
463
|
+
getText: (c) => String(c.id),
|
|
464
|
+
});
|
|
465
|
+
assert.deepEqual(result, candidates);
|
|
466
|
+
restoreEnv();
|
|
467
|
+
});
|
|
468
|
+
test('rerankWithAPI handles zero CODEVAULT_RERANK_TIMEOUT_MS env var', async () => {
|
|
469
|
+
clearEnv();
|
|
470
|
+
process.env.CODEVAULT_RERANK_TIMEOUT_MS = '0';
|
|
471
|
+
process.env.CODEVAULT_RERANK_API_URL = 'https://api.example.com/rerank';
|
|
472
|
+
process.env.CODEVAULT_RERANK_API_KEY = 'test-key';
|
|
473
|
+
const candidates = [
|
|
474
|
+
{ id: 'chunk1', score: 0.8 },
|
|
475
|
+
{ id: 'chunk2', score: 0.6 },
|
|
476
|
+
];
|
|
477
|
+
// Should use default timeout
|
|
478
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
479
|
+
getText: (c) => String(c.id),
|
|
480
|
+
});
|
|
481
|
+
assert.deepEqual(result, candidates);
|
|
482
|
+
restoreEnv();
|
|
483
|
+
});
|
|
484
|
+
// ============================================================================
|
|
485
|
+
// rerankWithAPI - Candidate Mutation Verification
|
|
486
|
+
// ============================================================================
|
|
487
|
+
test('rerankWithAPI does not mutate original candidates on fallback', async () => {
|
|
488
|
+
clearEnv();
|
|
489
|
+
const original = [
|
|
490
|
+
{ id: 'chunk1', score: 0.8 },
|
|
491
|
+
{ id: 'chunk2', score: 0.6 },
|
|
492
|
+
];
|
|
493
|
+
const candidates = [...original];
|
|
494
|
+
await rerankWithAPI('test query', candidates);
|
|
495
|
+
assert.deepEqual(candidates[0], original[0]);
|
|
496
|
+
assert.deepEqual(candidates[1], original[1]);
|
|
497
|
+
restoreEnv();
|
|
498
|
+
});
|
|
499
|
+
// ============================================================================
|
|
500
|
+
// rerankWithAPI - Multiple Candidates Ordering
|
|
501
|
+
// ============================================================================
|
|
502
|
+
test('rerankWithAPI preserves order on fallback for multiple candidates', async () => {
|
|
503
|
+
clearEnv();
|
|
504
|
+
const candidates = [
|
|
505
|
+
{ id: 'chunk1', score: 0.9 },
|
|
506
|
+
{ id: 'chunk2', score: 0.7 },
|
|
507
|
+
{ id: 'chunk3', score: 0.5 },
|
|
508
|
+
{ id: 'chunk4', score: 0.3 },
|
|
509
|
+
{ id: 'chunk5', score: 0.1 },
|
|
510
|
+
];
|
|
511
|
+
const result = await rerankWithAPI('test query', candidates);
|
|
512
|
+
assert.equal(result[0].id, 'chunk1');
|
|
513
|
+
assert.equal(result[1].id, 'chunk2');
|
|
514
|
+
assert.equal(result[2].id, 'chunk3');
|
|
515
|
+
assert.equal(result[3].id, 'chunk4');
|
|
516
|
+
assert.equal(result[4].id, 'chunk5');
|
|
517
|
+
restoreEnv();
|
|
518
|
+
});
|
|
519
|
+
// ============================================================================
|
|
520
|
+
// rerankWithAPI - Undefined/Null Handling in Candidates
|
|
521
|
+
// ============================================================================
|
|
522
|
+
test('rerankWithAPI handles candidates with undefined properties', async () => {
|
|
523
|
+
clearEnv();
|
|
524
|
+
const candidates = [
|
|
525
|
+
{ id: 'chunk1', score: undefined },
|
|
526
|
+
{ id: 'chunk2' },
|
|
527
|
+
];
|
|
528
|
+
const result = await rerankWithAPI('test query', candidates);
|
|
529
|
+
assert.equal(result.length, 2);
|
|
530
|
+
restoreEnv();
|
|
531
|
+
});
|
|
532
|
+
test('rerankWithAPI handles empty getText result', async () => {
|
|
533
|
+
clearEnv();
|
|
534
|
+
const candidates = [
|
|
535
|
+
{ id: 'chunk1', score: 0.8 },
|
|
536
|
+
{ id: 'chunk2', score: 0.6 },
|
|
537
|
+
];
|
|
538
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
539
|
+
getText: () => '',
|
|
540
|
+
});
|
|
541
|
+
assert.equal(result.length, 2);
|
|
542
|
+
restoreEnv();
|
|
543
|
+
});
|
|
544
|
+
// ============================================================================
|
|
545
|
+
// rerankWithAPI - Async getText Error Handling
|
|
546
|
+
// ============================================================================
|
|
547
|
+
test('rerankWithAPI handles getTextAsync throwing error', async () => {
|
|
548
|
+
clearEnv();
|
|
549
|
+
const candidates = [
|
|
550
|
+
{ id: 'chunk1', score: 0.8 },
|
|
551
|
+
{ id: 'chunk2', score: 0.6 },
|
|
552
|
+
];
|
|
553
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
554
|
+
getTextAsync: async () => {
|
|
555
|
+
throw new Error('Async text retrieval failed');
|
|
556
|
+
},
|
|
557
|
+
});
|
|
558
|
+
// Should fallback gracefully
|
|
559
|
+
assert.deepEqual(result, candidates);
|
|
560
|
+
restoreEnv();
|
|
561
|
+
});
|
|
562
|
+
test('rerankWithAPI handles getTextAsync returning rejected promise', async () => {
|
|
563
|
+
clearEnv();
|
|
564
|
+
const candidates = [
|
|
565
|
+
{ id: 'chunk1', score: 0.8 },
|
|
566
|
+
{ id: 'chunk2', score: 0.6 },
|
|
567
|
+
];
|
|
568
|
+
const result = await rerankWithAPI('test query', candidates, {
|
|
569
|
+
getTextAsync: () => Promise.reject(new Error('Promise rejected')),
|
|
570
|
+
});
|
|
571
|
+
// Should fallback gracefully
|
|
572
|
+
assert.deepEqual(result, candidates);
|
|
573
|
+
restoreEnv();
|
|
574
|
+
});
|
|
575
|
+
//# sourceMappingURL=api-reranker.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-reranker.test.js","sourceRoot":"","sources":["../../src/tests/api-reranker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bm25.test.d.ts","sourceRoot":"","sources":["../../src/tests/bm25.test.ts"],"names":[],"mappings":""}
|