codevault 1.7.5 → 1.8.1
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/dist/chunking/semantic-chunker.d.ts.map +1 -1
- package/dist/chunking/semantic-chunker.js +16 -13
- package/dist/chunking/semantic-chunker.js.map +1 -1
- package/dist/chunking/token-counter.d.ts.map +1 -1
- package/dist/chunking/token-counter.js +12 -11
- 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 +9 -3
- package/dist/cli/commands/index-cmd.js.map +1 -1
- package/dist/cli/commands/update-cmd.d.ts.map +1 -1
- package/dist/cli/commands/update-cmd.js +7 -1
- package/dist/cli/commands/update-cmd.js.map +1 -1
- package/dist/cli/commands/watch-cmd.d.ts.map +1 -1
- package/dist/cli/commands/watch-cmd.js +2 -0
- package/dist/cli/commands/watch-cmd.js.map +1 -1
- package/dist/cli.js +0 -0
- package/dist/codemap/io.d.ts +1 -0
- package/dist/codemap/io.d.ts.map +1 -1
- package/dist/codemap/io.js +8 -0
- package/dist/codemap/io.js.map +1 -1
- package/dist/config/constants.d.ts +8 -6
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +6 -4
- package/dist/config/constants.js.map +1 -1
- package/dist/config/loader.js +6 -6
- package/dist/config/loader.js.map +1 -1
- package/dist/config/resolver.d.ts +3 -0
- package/dist/config/resolver.d.ts.map +1 -1
- package/dist/config/resolver.js +4 -2
- package/dist/config/resolver.js.map +1 -1
- package/dist/config/types.d.ts +20 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/core/IndexerEngine.d.ts +1 -0
- package/dist/core/IndexerEngine.d.ts.map +1 -1
- package/dist/core/IndexerEngine.js +33 -7
- package/dist/core/IndexerEngine.js.map +1 -1
- package/dist/core/SearchService.js +3 -3
- package/dist/core/SearchService.js.map +1 -1
- package/dist/core/batch-indexer.d.ts +5 -4
- package/dist/core/batch-indexer.d.ts.map +1 -1
- package/dist/core/batch-indexer.js +185 -40
- package/dist/core/batch-indexer.js.map +1 -1
- package/dist/core/indexing/FileProcessor.d.ts +5 -1
- package/dist/core/indexing/FileProcessor.d.ts.map +1 -1
- package/dist/core/indexing/FileProcessor.js +37 -4
- package/dist/core/indexing/FileProcessor.js.map +1 -1
- package/dist/core/indexing/IndexFinalizationStage.d.ts +7 -1
- package/dist/core/indexing/IndexFinalizationStage.d.ts.map +1 -1
- package/dist/core/indexing/IndexFinalizationStage.js +55 -8
- package/dist/core/indexing/IndexFinalizationStage.js.map +1 -1
- package/dist/core/indexing/PersistManager.d.ts +18 -0
- package/dist/core/indexing/PersistManager.d.ts.map +1 -0
- package/dist/core/indexing/PersistManager.js +67 -0
- package/dist/core/indexing/PersistManager.js.map +1 -0
- package/dist/core/indexing/chunk-pipeline.d.ts.map +1 -1
- package/dist/core/indexing/chunk-pipeline.js +12 -8
- package/dist/core/indexing/chunk-pipeline.js.map +1 -1
- package/dist/core/metadata.d.ts +3 -2
- package/dist/core/metadata.d.ts.map +1 -1
- package/dist/core/metadata.js +2 -2
- package/dist/core/metadata.js.map +1 -1
- package/dist/core/search/HybridFusion.d.ts +4 -4
- package/dist/core/search/HybridFusion.d.ts.map +1 -1
- package/dist/core/search/HybridFusion.js +8 -8
- package/dist/core/search/HybridFusion.js.map +1 -1
- package/dist/core/search/ResultMapper.d.ts.map +1 -1
- package/dist/core/search/ResultMapper.js +4 -4
- package/dist/core/search/ResultMapper.js.map +1 -1
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/unified-metadata.d.ts +23 -0
- package/dist/core/unified-metadata.d.ts.map +1 -0
- package/dist/core/unified-metadata.js +58 -0
- package/dist/core/unified-metadata.js.map +1 -0
- package/dist/database/db.d.ts +4 -0
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +22 -0
- package/dist/database/db.js.map +1 -1
- package/dist/indexer/ChangeQueue.d.ts +1 -0
- package/dist/indexer/ChangeQueue.d.ts.map +1 -1
- package/dist/indexer/ChangeQueue.js +2 -1
- package/dist/indexer/ChangeQueue.js.map +1 -1
- package/dist/indexer/WatchService.d.ts +1 -0
- package/dist/indexer/WatchService.d.ts.map +1 -1
- package/dist/indexer/WatchService.js +1 -0
- package/dist/indexer/WatchService.js.map +1 -1
- package/dist/indexer/merkle.d.ts +1 -0
- package/dist/indexer/merkle.d.ts.map +1 -1
- package/dist/indexer/merkle.js +8 -0
- package/dist/indexer/merkle.js.map +1 -1
- package/dist/indexer/update.d.ts +2 -1
- package/dist/indexer/update.d.ts.map +1 -1
- package/dist/indexer/update.js +3 -2
- package/dist/indexer/update.js.map +1 -1
- package/dist/mcp-server.js +0 -0
- package/dist/providers/base.d.ts +1 -1
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js +9 -4
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/chat-llm.d.ts +2 -0
- package/dist/providers/chat-llm.d.ts.map +1 -1
- package/dist/providers/chat-llm.js +21 -6
- package/dist/providers/chat-llm.js.map +1 -1
- package/dist/providers/openai.d.ts +2 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +71 -10
- package/dist/providers/openai.js.map +1 -1
- package/dist/storage/encrypted-chunks.d.ts +3 -3
- package/dist/storage/encrypted-chunks.d.ts.map +1 -1
- package/dist/storage/encrypted-chunks.js +28 -22
- package/dist/storage/encrypted-chunks.js.map +1 -1
- package/dist/symbols/extract.d.ts +7 -0
- package/dist/symbols/extract.d.ts.map +1 -1
- package/dist/symbols/extract.js +3 -3
- package/dist/symbols/extract.js.map +1 -1
- package/dist/synthesis/conversational-synthesizer.js +1 -1
- package/dist/synthesis/conversational-synthesizer.js.map +1 -1
- package/dist/synthesis/synthesizer.js +1 -1
- package/dist/synthesis/synthesizer.js.map +1 -1
- package/dist/tests/semantic-chunker.test.js +18 -0
- package/dist/tests/semantic-chunker.test.js.map +1 -1
- package/dist/utils/cli-ui.d.ts +1 -1
- package/dist/utils/cli-ui.d.ts.map +1 -1
- package/dist/utils/cli-ui.js +32 -5
- package/dist/utils/cli-ui.js.map +1 -1
- package/dist/utils/indexer-with-progress.d.ts +2 -1
- package/dist/utils/indexer-with-progress.d.ts.map +1 -1
- package/dist/utils/indexer-with-progress.js +56 -23
- package/dist/utils/indexer-with-progress.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ProviderRoutingConfig } from './types.js';
|
|
1
2
|
export interface EmbeddingOptions {
|
|
2
3
|
apiKey?: string;
|
|
3
4
|
baseUrl?: string;
|
|
@@ -6,6 +7,7 @@ export interface EmbeddingOptions {
|
|
|
6
7
|
maxTokens?: number;
|
|
7
8
|
rpm?: number | null;
|
|
8
9
|
tpm?: number | null;
|
|
10
|
+
routing?: ProviderRoutingConfig;
|
|
9
11
|
}
|
|
10
12
|
export interface ChatOptions {
|
|
11
13
|
apiKey?: string;
|
|
@@ -13,6 +15,7 @@ export interface ChatOptions {
|
|
|
13
15
|
model?: string;
|
|
14
16
|
maxTokens?: number;
|
|
15
17
|
temperature?: number;
|
|
18
|
+
routing?: ProviderRoutingConfig;
|
|
16
19
|
}
|
|
17
20
|
export interface RerankerOptions {
|
|
18
21
|
apiUrl?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/config/resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/config/resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,SAAM,GAAG,eAAe,CAgCtE"}
|
package/dist/config/resolver.js
CHANGED
|
@@ -8,14 +8,16 @@ export function resolveProviderContext(basePath = '.') {
|
|
|
8
8
|
dimensions: config.providers?.openai?.dimensions,
|
|
9
9
|
maxTokens: config.maxTokens,
|
|
10
10
|
rpm: config.rateLimit?.rpm ?? null,
|
|
11
|
-
tpm: config.rateLimit?.tpm ?? null
|
|
11
|
+
tpm: config.rateLimit?.tpm ?? null,
|
|
12
|
+
routing: config.providers?.openai?.routing
|
|
12
13
|
};
|
|
13
14
|
const chat = {
|
|
14
15
|
apiKey: config.chatLLM?.openai?.apiKey,
|
|
15
16
|
baseUrl: config.chatLLM?.openai?.baseUrl,
|
|
16
17
|
model: config.chatLLM?.openai?.model,
|
|
17
18
|
maxTokens: config.chatLLM?.openai?.maxTokens,
|
|
18
|
-
temperature: config.chatLLM?.openai?.temperature
|
|
19
|
+
temperature: config.chatLLM?.openai?.temperature,
|
|
20
|
+
routing: config.chatLLM?.openai?.routing
|
|
19
21
|
};
|
|
20
22
|
const reranker = {
|
|
21
23
|
apiUrl: config.reranker?.apiUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/config/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/config/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqCzC,MAAM,UAAU,sBAAsB,CAAC,QAAQ,GAAG,GAAG;IACnD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEpC,MAAM,SAAS,GAAqB;QAClC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM;QACxC,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO;QAC1C,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK;QACtC,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU;QAChD,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,IAAI;QAClC,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,IAAI;QAClC,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO;KAC3C,CAAC;IAEF,MAAM,IAAI,GAAgB;QACxB,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM;QACtC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO;QACxC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK;QACpC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS;QAC5C,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW;QAChD,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO;KACzC,CAAC;IAEF,MAAM,QAAQ,GAAoB;QAChC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM;QAC/B,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM;QAC/B,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK;QAC7B,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa;QAC7C,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS;KACtC,CAAC;IAEF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -1,8 +1,27 @@
|
|
|
1
|
+
export interface ProviderRoutingConfig {
|
|
2
|
+
order?: string[];
|
|
3
|
+
allow_fallbacks?: boolean;
|
|
4
|
+
require_parameters?: boolean;
|
|
5
|
+
data_collection?: 'allow' | 'deny';
|
|
6
|
+
zdr?: boolean;
|
|
7
|
+
enforce_distillable_text?: boolean;
|
|
8
|
+
only?: string[];
|
|
9
|
+
ignore?: string[];
|
|
10
|
+
quantizations?: string[];
|
|
11
|
+
sort?: 'price' | 'throughput' | 'latency';
|
|
12
|
+
max_price?: {
|
|
13
|
+
prompt?: number;
|
|
14
|
+
completion?: number;
|
|
15
|
+
request?: number;
|
|
16
|
+
image?: number;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
1
19
|
export interface ProviderConfig {
|
|
2
20
|
apiKey?: string;
|
|
3
21
|
model?: string;
|
|
4
22
|
baseUrl?: string;
|
|
5
23
|
dimensions?: number;
|
|
24
|
+
routing?: ProviderRoutingConfig;
|
|
6
25
|
}
|
|
7
26
|
export interface RateLimitConfig {
|
|
8
27
|
rpm?: number;
|
|
@@ -18,6 +37,7 @@ export interface ChatLLMConfig {
|
|
|
18
37
|
model?: string;
|
|
19
38
|
maxTokens?: number;
|
|
20
39
|
temperature?: number;
|
|
40
|
+
routing?: ProviderRoutingConfig;
|
|
21
41
|
}
|
|
22
42
|
export interface CodevaultConfig {
|
|
23
43
|
defaultProvider?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACnC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAAC;IAC1C,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,cAAc,CAAC;KACzB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,aAAa,CAAC;KACxB,CAAC;IACF,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,GAAG,EAAE,eAAe,CAAC;CACtB"}
|
|
@@ -11,6 +11,7 @@ export declare class IndexerEngine {
|
|
|
11
11
|
constructor(options?: IndexProjectOptions);
|
|
12
12
|
index(): Promise<IndexProjectResult>;
|
|
13
13
|
private resolveConcurrency;
|
|
14
|
+
private computeDynamicDefault;
|
|
14
15
|
private runWithConcurrency;
|
|
15
16
|
}
|
|
16
17
|
//# sourceMappingURL=IndexerEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexerEngine.d.ts","sourceRoot":"","sources":["../../src/core/IndexerEngine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"IndexerEngine.d.ts","sourceRoot":"","sources":["../../src/core/IndexerEngine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAS1E;;;;;;GAMG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,mBAAwB;IAExC,KAAK,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAmFjD,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,qBAAqB;YAMf,kBAAkB;CAuBjC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
|
+
import os from 'node:os';
|
|
2
3
|
import { normalizeToProjectPath } from '../indexer/merkle.js';
|
|
3
4
|
import { FileScanner } from './indexing/file-scanner.js';
|
|
4
5
|
import { IndexContext } from './indexing/IndexContext.js';
|
|
@@ -6,6 +7,7 @@ import { IndexState } from './indexing/IndexState.js';
|
|
|
6
7
|
import { FileProcessor } from './indexing/FileProcessor.js';
|
|
7
8
|
import { IndexFinalizationStage } from './indexing/IndexFinalizationStage.js';
|
|
8
9
|
import { INDEXING_CONSTANTS } from '../config/constants.js';
|
|
10
|
+
import { PersistManager } from './indexing/PersistManager.js';
|
|
9
11
|
/**
|
|
10
12
|
* IndexerEngine orchestrates the code indexing process using a stage-based architecture:
|
|
11
13
|
* - IndexContext: Setup and initialization
|
|
@@ -34,14 +36,27 @@ export class IndexerEngine {
|
|
|
34
36
|
// Scan for files to process
|
|
35
37
|
const scanner = new FileScanner();
|
|
36
38
|
const { files, toDelete } = await scanner.scan(repo, normalizedChanged);
|
|
39
|
+
if (onProgress) {
|
|
40
|
+
onProgress({
|
|
41
|
+
type: 'scan_complete',
|
|
42
|
+
fileCount: files.length,
|
|
43
|
+
totalFiles: files.length
|
|
44
|
+
});
|
|
45
|
+
}
|
|
37
46
|
for (const file of toDelete) {
|
|
38
47
|
deletedSet.add(file);
|
|
39
48
|
}
|
|
40
49
|
const isPartialUpdate = normalizedChanged !== null;
|
|
41
50
|
// Stage 1: Setup and initialization
|
|
42
51
|
const context = await IndexContext.prepare(this.options);
|
|
52
|
+
if (onProgress && context.batchProcessor.setOnChunkEmbedded) {
|
|
53
|
+
context.batchProcessor.setOnChunkEmbedded(({ file, chunkId }) => {
|
|
54
|
+
onProgress({ type: 'chunk_embedded', file, chunkId });
|
|
55
|
+
});
|
|
56
|
+
}
|
|
43
57
|
const state = new IndexState(context.codemap, context.updatedMerkle);
|
|
44
|
-
const
|
|
58
|
+
const persistManager = new PersistManager(context, state, 1500);
|
|
59
|
+
const fileProcessor = new FileProcessor(context, state, onProgress, persistManager);
|
|
45
60
|
// Stage 2: Process files
|
|
46
61
|
const concurrency = this.resolveConcurrency();
|
|
47
62
|
await this.runWithConcurrency(files, concurrency, async (rel) => {
|
|
@@ -62,17 +77,28 @@ export class IndexerEngine {
|
|
|
62
77
|
}
|
|
63
78
|
}
|
|
64
79
|
// Stage 4: Finalization
|
|
65
|
-
const finalizer = new IndexFinalizationStage(context, state, onProgress);
|
|
80
|
+
const finalizer = new IndexFinalizationStage(context, state, onProgress, persistManager);
|
|
66
81
|
return await finalizer.finalize();
|
|
67
82
|
}
|
|
68
83
|
resolveConcurrency() {
|
|
84
|
+
const { DEFAULT_CONCURRENCY, MAX_CONCURRENCY } = INDEXING_CONSTANTS;
|
|
69
85
|
const requested = this.options.concurrency;
|
|
70
|
-
const
|
|
71
|
-
const
|
|
86
|
+
const envValue = process.env.CODEVAULT_INDEXING_CONCURRENCY;
|
|
87
|
+
const parsedEnv = envValue ? Number.parseInt(envValue, 10) : null;
|
|
88
|
+
const optionValue = typeof requested === 'number' && Number.isFinite(requested)
|
|
72
89
|
? requested
|
|
73
|
-
:
|
|
74
|
-
const
|
|
75
|
-
|
|
90
|
+
: null;
|
|
91
|
+
const dynamicDefault = this.computeDynamicDefault(MAX_CONCURRENCY);
|
|
92
|
+
const fallbackDefault = Number.isFinite(DEFAULT_CONCURRENCY) ? DEFAULT_CONCURRENCY : dynamicDefault;
|
|
93
|
+
const rawValue = optionValue ?? parsedEnv ?? dynamicDefault ?? fallbackDefault;
|
|
94
|
+
const safeValue = Number.isFinite(rawValue) ? rawValue : 1;
|
|
95
|
+
const bounded = Math.min(MAX_CONCURRENCY, Math.max(1, Math.floor(safeValue)));
|
|
96
|
+
return bounded;
|
|
97
|
+
}
|
|
98
|
+
computeDynamicDefault(maxConcurrency) {
|
|
99
|
+
const cpuCount = typeof os.cpus === 'function' ? os.cpus().length : 1;
|
|
100
|
+
const calculated = Math.max(1, cpuCount * 2);
|
|
101
|
+
return Math.min(calculated, maxConcurrency);
|
|
76
102
|
}
|
|
77
103
|
async runWithConcurrency(items, concurrency, worker) {
|
|
78
104
|
if (!items.length)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexerEngine.js","sourceRoot":"","sources":["../../src/core/IndexerEngine.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"IndexerEngine.js","sourceRoot":"","sources":["../../src/core/IndexerEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,7 +88,7 @@ export class SearchService {
|
|
|
88
88
|
let bm25PrefilterResults;
|
|
89
89
|
let vectorCandidates = scopedChunks;
|
|
90
90
|
if (hybridEnabled && bm25Enabled) {
|
|
91
|
-
const prefilter = this.fusion.prefilterCandidates({
|
|
91
|
+
const prefilter = await this.fusion.prefilterCandidates({
|
|
92
92
|
hybridEnabled,
|
|
93
93
|
bm25Enabled,
|
|
94
94
|
query: normalizedQuery,
|
|
@@ -124,7 +124,7 @@ export class SearchService {
|
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
// Hybrid fusion
|
|
127
|
-
const { fusedResults, bm25Fused, bm25CandidateCount: fusedBm25CandidateCount } = this.fusion.fuseResults({
|
|
127
|
+
const { fusedResults, bm25Fused, bm25CandidateCount: fusedBm25CandidateCount } = await this.fusion.fuseResults({
|
|
128
128
|
hybridEnabled,
|
|
129
129
|
bm25Enabled,
|
|
130
130
|
selectionBudget,
|
|
@@ -228,7 +228,7 @@ export class SearchService {
|
|
|
228
228
|
const basePath = path.resolve(workingPath);
|
|
229
229
|
const chunkDir = path.join(basePath, '.codevault/chunks');
|
|
230
230
|
try {
|
|
231
|
-
const result = readChunkFromDisk({ chunkDir, sha });
|
|
231
|
+
const result = await readChunkFromDisk({ chunkDir, sha });
|
|
232
232
|
if (!result) {
|
|
233
233
|
return { success: false, error: 'Chunk not found' };
|
|
234
234
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchService.js","sourceRoot":"","sources":["../../src/core/SearchService.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SearchService.js","sourceRoot":"","sources":["../../src/core/SearchService.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,7 +27,12 @@ export declare class BatchEmbeddingProcessor {
|
|
|
27
27
|
private batch;
|
|
28
28
|
private batchSize;
|
|
29
29
|
private mutex;
|
|
30
|
+
private onChunkEmbedded?;
|
|
30
31
|
constructor(embeddingProvider: EmbeddingProvider, db: Database, batchSize?: number);
|
|
32
|
+
setOnChunkEmbedded(cb: (info: {
|
|
33
|
+
file: string;
|
|
34
|
+
chunkId: string;
|
|
35
|
+
}) => void): void;
|
|
31
36
|
/**
|
|
32
37
|
* Add a chunk to the batch queue
|
|
33
38
|
*/
|
|
@@ -36,10 +41,6 @@ export declare class BatchEmbeddingProcessor {
|
|
|
36
41
|
* Process any remaining chunks in the batch
|
|
37
42
|
*/
|
|
38
43
|
flush(): Promise<void>;
|
|
39
|
-
/**
|
|
40
|
-
* Process the current batch (with mutex protection)
|
|
41
|
-
*/
|
|
42
|
-
private processBatch;
|
|
43
44
|
/**
|
|
44
45
|
* Process a batch with smart error handling and retry logic
|
|
45
46
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-indexer.d.ts","sourceRoot":"","sources":["../../src/core/batch-indexer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"batch-indexer.d.ts","sourceRoot":"","sources":["../../src/core/batch-indexer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AA8FlD,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,GAAG,CAAC;QACvB,kBAAkB,EAAE,GAAG,EAAE,CAAC;QAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,WAAW,EAAE,GAAG,CAAC;KAClB,CAAC;CACH;AAED;;;;GAIG;AACH,qBAAa,uBAAuB;IAOhC,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,EAAE;IAPZ,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,eAAe,CAAC,CAAoD;gBAGlE,iBAAiB,EAAE,iBAAiB,EACpC,EAAE,EAAE,QAAQ,EACpB,SAAS,GAAE,MAAmB;IAKhC,kBAAkB,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;IAI/E;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBlD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B;;OAEG;YACW,qBAAqB;IAoHnC;;OAEG;YACW,oBAAoB;IA6DlC;;OAEG;YACW,8BAA8B;IA4C5C;;OAEG;IACH,aAAa,IAAI,MAAM;CAGxB"}
|
|
@@ -2,7 +2,18 @@ import { BATCH_SIZE } from '../providers/base.js';
|
|
|
2
2
|
import { Mutex } from '../utils/mutex.js';
|
|
3
3
|
import { log } from '../utils/logger.js';
|
|
4
4
|
const MAX_BATCH_RETRIES = 3;
|
|
5
|
+
const MAX_TRANSIENT_RETRIES = 3;
|
|
5
6
|
const INITIAL_RETRY_DELAY_MS = 1000;
|
|
7
|
+
const JITTER_FACTOR = 0.2; // ±20% jitter to avoid thundering herd
|
|
8
|
+
const MAX_SUBDIVISION_DEPTH = 2; // Stop splitting after this depth and fallback to per-chunk
|
|
9
|
+
const MIN_BATCH_BEFORE_FALLBACK = 8; // If below this size, go straight to per-chunk instead of more splits
|
|
10
|
+
const MAX_FATAL_SUBDIVISION_DEPTH = 1; // After a fatal API response, only split once before fallback
|
|
11
|
+
const MAX_FATAL_RETRIES = 1; // Try fatal batch once more, then per-chunk
|
|
12
|
+
const MAX_ANY_RETRIES = 6; // Upper cap for repeated full-batch retries on transient/provider errors
|
|
13
|
+
const backoffWithCap = (attempt) => {
|
|
14
|
+
const base = INITIAL_RETRY_DELAY_MS * Math.pow(2, attempt);
|
|
15
|
+
return Math.min(base, 30000); // cap at 30s
|
|
16
|
+
};
|
|
6
17
|
function isRateLimitError(error) {
|
|
7
18
|
const message = error?.message || String(error);
|
|
8
19
|
return (error?.status === 429 ||
|
|
@@ -20,6 +31,51 @@ function isBatchSizeError(error) {
|
|
|
20
31
|
message.includes('request size') ||
|
|
21
32
|
message.includes('token limit'));
|
|
22
33
|
}
|
|
34
|
+
function isTransientApiError(error) {
|
|
35
|
+
const status = error?.status || error?.statusCode;
|
|
36
|
+
const message = error?.message || String(error);
|
|
37
|
+
// Upstream 5xx/gateway and common flaky transport signals
|
|
38
|
+
return ((typeof status === 'number' && status >= 500 && status < 600) ||
|
|
39
|
+
message.includes('Invalid API response') ||
|
|
40
|
+
message.includes('Bad Gateway') ||
|
|
41
|
+
message.includes('Service Unavailable') ||
|
|
42
|
+
message.includes('Gateway Timeout') ||
|
|
43
|
+
message.includes('socket hang up') ||
|
|
44
|
+
message.includes('ECONNRESET') ||
|
|
45
|
+
message.includes('ETIMEDOUT') ||
|
|
46
|
+
message.includes('EAI_AGAIN'));
|
|
47
|
+
}
|
|
48
|
+
const withJitter = (base) => {
|
|
49
|
+
const factor = 1 + (Math.random() * 2 - 1) * JITTER_FACTOR; // 0.8–1.2
|
|
50
|
+
return Math.max(0, Math.floor(base * factor));
|
|
51
|
+
};
|
|
52
|
+
// Backoff helper (unique name to avoid duplicate definitions on reload)
|
|
53
|
+
const backoffWithCapEmbed = (attempt) => {
|
|
54
|
+
const base = INITIAL_RETRY_DELAY_MS * Math.pow(2, attempt);
|
|
55
|
+
return Math.min(base, 20000); // cap at 20s
|
|
56
|
+
};
|
|
57
|
+
function serializeErrorForLog(error) {
|
|
58
|
+
const info = {};
|
|
59
|
+
if (!error)
|
|
60
|
+
return { message: 'unknown error' };
|
|
61
|
+
const candidates = ['message', 'name', 'code', 'status', 'statusCode', 'type'];
|
|
62
|
+
for (const key of candidates) {
|
|
63
|
+
if (error[key] !== undefined)
|
|
64
|
+
info[key] = String(error[key]);
|
|
65
|
+
}
|
|
66
|
+
// OpenAI SDK sometimes nests response data on error.response or error.error
|
|
67
|
+
const responseData = error?.response?.data ?? error?.error?.data;
|
|
68
|
+
if (responseData !== undefined) {
|
|
69
|
+
try {
|
|
70
|
+
const json = typeof responseData === 'string' ? responseData : JSON.stringify(responseData);
|
|
71
|
+
info.responseData = json.slice(0, 500); // cap to avoid huge logs
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
info.responseData = '[unserializable responseData]';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return info;
|
|
78
|
+
}
|
|
23
79
|
/**
|
|
24
80
|
* Batches chunk embeddings for efficiency and handles retry/backoff with a SQLite sink.
|
|
25
81
|
*
|
|
@@ -31,69 +87,121 @@ export class BatchEmbeddingProcessor {
|
|
|
31
87
|
batch = [];
|
|
32
88
|
batchSize;
|
|
33
89
|
mutex = new Mutex();
|
|
90
|
+
onChunkEmbedded;
|
|
34
91
|
constructor(embeddingProvider, db, batchSize = BATCH_SIZE) {
|
|
35
92
|
this.embeddingProvider = embeddingProvider;
|
|
36
93
|
this.db = db;
|
|
37
94
|
this.batchSize = batchSize;
|
|
38
95
|
}
|
|
96
|
+
setOnChunkEmbedded(cb) {
|
|
97
|
+
this.onChunkEmbedded = cb;
|
|
98
|
+
}
|
|
39
99
|
/**
|
|
40
100
|
* Add a chunk to the batch queue
|
|
41
101
|
*/
|
|
42
102
|
async addChunk(chunk) {
|
|
43
|
-
|
|
44
|
-
// Process batch when it reaches the threshold
|
|
45
|
-
if (this.batch.length >= this.batchSize) {
|
|
46
|
-
await this.processBatch();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Process any remaining chunks in the batch
|
|
51
|
-
*/
|
|
52
|
-
async flush() {
|
|
103
|
+
let batchToProcess = null;
|
|
53
104
|
await this.mutex.runExclusive(async () => {
|
|
54
|
-
|
|
55
|
-
|
|
105
|
+
this.batch.push(chunk);
|
|
106
|
+
// Snapshot the batch when it reaches the threshold; process it outside the lock
|
|
107
|
+
if (this.batch.length >= this.batchSize) {
|
|
108
|
+
batchToProcess = this.batch;
|
|
56
109
|
this.batch = [];
|
|
57
110
|
}
|
|
58
111
|
});
|
|
112
|
+
if (batchToProcess) {
|
|
113
|
+
await this.processBatchWithRetry(batchToProcess);
|
|
114
|
+
}
|
|
59
115
|
}
|
|
60
116
|
/**
|
|
61
|
-
* Process
|
|
117
|
+
* Process any remaining chunks in the batch
|
|
62
118
|
*/
|
|
63
|
-
async
|
|
119
|
+
async flush() {
|
|
120
|
+
let batchToProcess = null;
|
|
64
121
|
await this.mutex.runExclusive(async () => {
|
|
65
122
|
if (this.batch.length > 0) {
|
|
66
|
-
|
|
123
|
+
batchToProcess = this.batch;
|
|
67
124
|
this.batch = [];
|
|
68
125
|
}
|
|
69
126
|
});
|
|
127
|
+
if (batchToProcess) {
|
|
128
|
+
await this.processBatchWithRetry(batchToProcess);
|
|
129
|
+
}
|
|
70
130
|
}
|
|
71
131
|
/**
|
|
72
132
|
* Process a batch with smart error handling and retry logic
|
|
73
133
|
*/
|
|
74
|
-
async processBatchWithRetry(currentBatch,
|
|
134
|
+
async processBatchWithRetry(currentBatch, retryState = { rate: 0, transient: 0 }, depth = 0, fatalSeen = false) {
|
|
75
135
|
try {
|
|
76
136
|
await this.processBatchInternal(currentBatch);
|
|
77
137
|
}
|
|
78
138
|
catch (error) {
|
|
139
|
+
log.debug('Batch processing error', {
|
|
140
|
+
batchSize: currentBatch.length,
|
|
141
|
+
depth,
|
|
142
|
+
retryRate: retryState.rate,
|
|
143
|
+
retryTransient: retryState.transient,
|
|
144
|
+
retryFatal: retryState.fatal ?? 0,
|
|
145
|
+
fatalSeen,
|
|
146
|
+
provider: this.embeddingProvider.getName?.() ?? 'unknown',
|
|
147
|
+
error: serializeErrorForLog(error),
|
|
148
|
+
sampleChunks: currentBatch.slice(0, 3).map(c => c.chunkId)
|
|
149
|
+
});
|
|
150
|
+
const fatalApi = isFatalApiResponse(error);
|
|
79
151
|
// Smart error handling based on error type
|
|
80
|
-
if (isBatchSizeError(error) && currentBatch.length > 1) {
|
|
152
|
+
if (!fatalApi && isBatchSizeError(error) && currentBatch.length > 1) {
|
|
81
153
|
// Batch too large - split in half and retry
|
|
82
154
|
log.warn(`Batch size too large (${currentBatch.length} chunks), splitting and retrying`);
|
|
83
155
|
const mid = Math.floor(currentBatch.length / 2);
|
|
84
156
|
const firstHalf = currentBatch.slice(0, mid);
|
|
85
157
|
const secondHalf = currentBatch.slice(mid);
|
|
86
158
|
// Process both halves recursively
|
|
87
|
-
await this.processBatchWithRetry(firstHalf,
|
|
88
|
-
await this.processBatchWithRetry(secondHalf,
|
|
159
|
+
await this.processBatchWithRetry(firstHalf, retryState, depth + 1, fatalSeen);
|
|
160
|
+
await this.processBatchWithRetry(secondHalf, retryState, depth + 1, fatalSeen);
|
|
89
161
|
return;
|
|
90
162
|
}
|
|
91
|
-
else if (isRateLimitError(error) &&
|
|
163
|
+
else if (!fatalApi && isRateLimitError(error) && retryState.rate < MAX_BATCH_RETRIES) {
|
|
92
164
|
// Rate limit error - exponential backoff
|
|
93
|
-
const delay = INITIAL_RETRY_DELAY_MS * Math.pow(2,
|
|
94
|
-
log.warn(`Rate limit hit, retrying batch in ${delay}ms (attempt ${
|
|
165
|
+
const delay = INITIAL_RETRY_DELAY_MS * Math.pow(2, retryState.rate);
|
|
166
|
+
log.warn(`Rate limit hit, retrying batch in ${delay}ms (attempt ${retryState.rate + 1}/${MAX_BATCH_RETRIES})`);
|
|
167
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
168
|
+
await this.processBatchWithRetry(currentBatch, { ...retryState, rate: retryState.rate + 1 }, depth, fatalSeen);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
else if (!fatalApi && isTransientApiError(error) && retryState.transient < MAX_TRANSIENT_RETRIES) {
|
|
172
|
+
const baseDelay = INITIAL_RETRY_DELAY_MS * Math.pow(2, retryState.transient);
|
|
173
|
+
const delay = withJitter(baseDelay);
|
|
174
|
+
log.warn(`Transient API error, retrying batch in ${delay}ms (attempt ${retryState.transient + 1}/${MAX_TRANSIENT_RETRIES})`);
|
|
175
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
176
|
+
await this.processBatchWithRetry(currentBatch, { ...retryState, transient: retryState.transient + 1 }, depth, fatalSeen);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
else if (fatalApi) {
|
|
180
|
+
const fatalAttempt = retryState.fatal ?? 0;
|
|
181
|
+
if (fatalAttempt < MAX_FATAL_RETRIES) {
|
|
182
|
+
const delay = backoffWithCapEmbed(fatalAttempt);
|
|
183
|
+
log.debug(`Fatal API response. Retrying full batch after ${delay}ms (fatal attempt ${fatalAttempt + 1}/${MAX_FATAL_RETRIES})`);
|
|
184
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
185
|
+
await this.processBatchWithRetry(currentBatch, { ...retryState, fatal: fatalAttempt + 1 }, depth, true);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
log.debug(`Fatal API response persisted after ${MAX_FATAL_RETRIES} retry. Falling back to per-chunk.`);
|
|
189
|
+
await this.fallbackToIndividualProcessing(currentBatch);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// Transient but non-fatal provider errors: retry whole batch with capped backoff
|
|
194
|
+
const attempt = retryState.any ?? 0;
|
|
195
|
+
const delay = backoffWithCapEmbed(attempt);
|
|
196
|
+
const nextAttempt = attempt + 1;
|
|
197
|
+
if (nextAttempt > MAX_ANY_RETRIES) {
|
|
198
|
+
log.debug(`Batch retry cap reached (${nextAttempt - 1}). Continuing to retry with capped backoff; investigate provider errors.`, { batchSize: currentBatch.length });
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
log.debug(`Batch will be retried after backoff (${delay}ms) (attempt ${nextAttempt}/${MAX_ANY_RETRIES})`);
|
|
202
|
+
}
|
|
95
203
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
96
|
-
await this.processBatchWithRetry(currentBatch,
|
|
204
|
+
await this.processBatchWithRetry(currentBatch, { ...retryState, any: nextAttempt }, depth, fatalApi || fatalSeen);
|
|
97
205
|
return;
|
|
98
206
|
}
|
|
99
207
|
// Other errors or max retries reached - fall back to individual processing
|
|
@@ -118,23 +226,44 @@ export class BatchEmbeddingProcessor {
|
|
|
118
226
|
const embeddings = await this.embeddingProvider.generateEmbeddings(texts);
|
|
119
227
|
log.debug(`Batch complete (${texts.length} embeddings generated)`);
|
|
120
228
|
// Store all embeddings in database within a transaction
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
229
|
+
const dbParams = batch.map((chunk, i) => {
|
|
230
|
+
const embedding = embeddings[i];
|
|
231
|
+
// Validate each embedding before insertion
|
|
232
|
+
if (!embedding || !Array.isArray(embedding) || embedding.length === 0) {
|
|
233
|
+
log.error(`Invalid embedding at index ${i} for chunk ${chunk.chunkId}`, {
|
|
234
|
+
embeddingType: typeof embedding,
|
|
235
|
+
isArray: Array.isArray(embedding),
|
|
236
|
+
length: embedding?.length,
|
|
237
|
+
embeddingsArrayLength: embeddings.length,
|
|
238
|
+
batchLength: batch.length
|
|
239
|
+
});
|
|
240
|
+
throw new Error(`Invalid embedding at index ${i}: type=${typeof embedding}, isArray=${Array.isArray(embedding)}, length=${embedding?.length}`);
|
|
241
|
+
}
|
|
242
|
+
return {
|
|
243
|
+
id: chunk.chunkId,
|
|
244
|
+
file_path: chunk.params.rel,
|
|
245
|
+
symbol: chunk.params.symbol,
|
|
246
|
+
sha: chunk.params.sha,
|
|
247
|
+
lang: chunk.params.lang,
|
|
248
|
+
chunk_type: chunk.params.chunkType,
|
|
249
|
+
embedding: embedding,
|
|
250
|
+
embedding_provider: this.embeddingProvider.getName(),
|
|
251
|
+
embedding_dimensions: this.embeddingProvider.getDimensions(),
|
|
252
|
+
codevault_tags: chunk.params.codevaultMetadata.tags,
|
|
253
|
+
codevault_intent: chunk.params.codevaultMetadata.intent,
|
|
254
|
+
codevault_description: chunk.params.codevaultMetadata.description,
|
|
255
|
+
doc_comments: chunk.params.docComments,
|
|
256
|
+
variables_used: chunk.params.importantVariables,
|
|
257
|
+
context_info: chunk.params.contextInfo
|
|
258
|
+
};
|
|
259
|
+
});
|
|
260
|
+
this.db.insertChunks(dbParams);
|
|
261
|
+
// Notify listeners that chunks are fully embedded and stored
|
|
262
|
+
if (this.onChunkEmbedded) {
|
|
263
|
+
for (const chunk of batch) {
|
|
264
|
+
this.onChunkEmbedded({ file: chunk.params.rel, chunkId: chunk.chunkId });
|
|
265
|
+
}
|
|
266
|
+
}
|
|
138
267
|
}
|
|
139
268
|
/**
|
|
140
269
|
* Fall back to processing chunks individually
|
|
@@ -187,4 +316,20 @@ export class BatchEmbeddingProcessor {
|
|
|
187
316
|
return this.batch.length;
|
|
188
317
|
}
|
|
189
318
|
}
|
|
319
|
+
/**
|
|
320
|
+
* Treat responses that return an error without data as fatal (deterministic) so we don't waste
|
|
321
|
+
* transient retries on them.
|
|
322
|
+
*/
|
|
323
|
+
function isFatalApiResponse(error) {
|
|
324
|
+
if (!error)
|
|
325
|
+
return false;
|
|
326
|
+
const msg = error?.message || '';
|
|
327
|
+
const status = error?.status || error?.statusCode;
|
|
328
|
+
const hasErrorKey = Array.isArray(error?.topLevelKeys) && error.topLevelKeys.includes('error');
|
|
329
|
+
const responseData = error?.response?.data ?? error?.error?.data;
|
|
330
|
+
const invalidApi = msg.includes('Invalid API response');
|
|
331
|
+
const clientError = status === 400 || status === 422;
|
|
332
|
+
const noProvider = msg.includes('No successful provider responses') || status === 404;
|
|
333
|
+
return invalidApi || hasErrorKey || clientError || noProvider || !!responseData;
|
|
334
|
+
}
|
|
190
335
|
//# sourceMappingURL=batch-indexer.js.map
|