agentic-qe 2.6.4 → 2.6.6
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/CHANGELOG.md +95 -0
- package/README.md +26 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +31 -0
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +159 -0
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/FleetCommanderAgent.d.ts +36 -0
- package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
- package/dist/agents/FleetCommanderAgent.js +226 -0
- package/dist/agents/FleetCommanderAgent.js.map +1 -1
- package/dist/cli/commands/kg/mincut.d.ts +50 -0
- package/dist/cli/commands/kg/mincut.d.ts.map +1 -0
- package/dist/cli/commands/kg/mincut.js +372 -0
- package/dist/cli/commands/kg/mincut.js.map +1 -0
- package/dist/cli/commands/providers/index.d.ts +20 -0
- package/dist/cli/commands/providers/index.d.ts.map +1 -0
- package/dist/cli/commands/providers/index.js +143 -0
- package/dist/cli/commands/providers/index.js.map +1 -0
- package/dist/cli/commands/providers/status.d.ts +117 -0
- package/dist/cli/commands/providers/status.d.ts.map +1 -0
- package/dist/cli/commands/providers/status.js +368 -0
- package/dist/cli/commands/providers/status.js.map +1 -0
- package/dist/cli/index.js +99 -62
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/claude-config.js +2 -2
- package/dist/code-intelligence/analysis/mincut/CircularDependencyDetector.d.ts +148 -0
- package/dist/code-intelligence/analysis/mincut/CircularDependencyDetector.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/CircularDependencyDetector.js +393 -0
- package/dist/code-intelligence/analysis/mincut/CircularDependencyDetector.js.map +1 -0
- package/dist/code-intelligence/analysis/mincut/GraphAdapter.d.ts +169 -0
- package/dist/code-intelligence/analysis/mincut/GraphAdapter.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/GraphAdapter.js +335 -0
- package/dist/code-intelligence/analysis/mincut/GraphAdapter.js.map +1 -0
- package/dist/code-intelligence/analysis/mincut/JsMinCut.d.ts +55 -0
- package/dist/code-intelligence/analysis/mincut/JsMinCut.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/JsMinCut.js +265 -0
- package/dist/code-intelligence/analysis/mincut/JsMinCut.js.map +1 -0
- package/dist/code-intelligence/analysis/mincut/MinCutAnalyzer.d.ts +92 -0
- package/dist/code-intelligence/analysis/mincut/MinCutAnalyzer.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/MinCutAnalyzer.js +200 -0
- package/dist/code-intelligence/analysis/mincut/MinCutAnalyzer.js.map +1 -0
- package/dist/code-intelligence/analysis/mincut/ModuleCouplingAnalyzer.d.ts +157 -0
- package/dist/code-intelligence/analysis/mincut/ModuleCouplingAnalyzer.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/ModuleCouplingAnalyzer.js +434 -0
- package/dist/code-intelligence/analysis/mincut/ModuleCouplingAnalyzer.js.map +1 -0
- package/dist/code-intelligence/analysis/mincut/index.d.ts +12 -0
- package/dist/code-intelligence/analysis/mincut/index.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/index.js +20 -0
- package/dist/code-intelligence/analysis/mincut/index.js.map +1 -0
- package/dist/code-intelligence/analysis/mincut/types.d.ts +145 -0
- package/dist/code-intelligence/analysis/mincut/types.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/types.js +16 -0
- package/dist/code-intelligence/analysis/mincut/types.js.map +1 -0
- package/dist/code-intelligence/chunking/ASTChunker.d.ts +1 -1
- package/dist/code-intelligence/chunking/ASTChunker.d.ts.map +1 -1
- package/dist/code-intelligence/chunking/ASTChunker.js +4 -4
- package/dist/code-intelligence/chunking/ASTChunker.js.map +1 -1
- package/dist/code-intelligence/graph/GraphBuilder.d.ts +120 -0
- package/dist/code-intelligence/graph/GraphBuilder.d.ts.map +1 -1
- package/dist/code-intelligence/graph/GraphBuilder.js +517 -0
- package/dist/code-intelligence/graph/GraphBuilder.js.map +1 -1
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts.map +1 -1
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js +3 -3
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js.map +1 -1
- package/dist/code-intelligence/parser/{TreeSitterParser.d.ts → WebTreeSitterParser.d.ts} +45 -10
- package/dist/code-intelligence/parser/WebTreeSitterParser.d.ts.map +1 -0
- package/dist/code-intelligence/parser/{TreeSitterParser.js → WebTreeSitterParser.js} +147 -54
- package/dist/code-intelligence/parser/WebTreeSitterParser.js.map +1 -0
- package/dist/code-intelligence/parser/extractors/BaseExtractor.d.ts +12 -10
- package/dist/code-intelligence/parser/extractors/BaseExtractor.d.ts.map +1 -1
- package/dist/code-intelligence/parser/extractors/BaseExtractor.js +7 -3
- package/dist/code-intelligence/parser/extractors/BaseExtractor.js.map +1 -1
- package/dist/code-intelligence/parser/extractors/GoExtractor.d.ts +7 -5
- package/dist/code-intelligence/parser/extractors/GoExtractor.d.ts.map +1 -1
- package/dist/code-intelligence/parser/extractors/GoExtractor.js +2 -2
- package/dist/code-intelligence/parser/extractors/GoExtractor.js.map +1 -1
- package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.d.ts +7 -5
- package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.d.ts.map +1 -1
- package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.js +2 -2
- package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.js.map +1 -1
- package/dist/code-intelligence/parser/extractors/PythonExtractor.d.ts +7 -5
- package/dist/code-intelligence/parser/extractors/PythonExtractor.d.ts.map +1 -1
- package/dist/code-intelligence/parser/extractors/PythonExtractor.js +2 -2
- package/dist/code-intelligence/parser/extractors/PythonExtractor.js.map +1 -1
- package/dist/code-intelligence/parser/extractors/RustExtractor.d.ts +7 -5
- package/dist/code-intelligence/parser/extractors/RustExtractor.d.ts.map +1 -1
- package/dist/code-intelligence/parser/extractors/RustExtractor.js +2 -2
- package/dist/code-intelligence/parser/extractors/RustExtractor.js.map +1 -1
- package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.d.ts +7 -5
- package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.d.ts.map +1 -1
- package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.js +2 -2
- package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.js.map +1 -1
- package/dist/code-intelligence/parser/index.d.ts +7 -1
- package/dist/code-intelligence/parser/index.d.ts.map +1 -1
- package/dist/code-intelligence/parser/index.js +11 -3
- package/dist/code-intelligence/parser/index.js.map +1 -1
- package/dist/code-intelligence/service/CodeIntelligenceService.d.ts.map +1 -1
- package/dist/code-intelligence/service/CodeIntelligenceService.js +7 -5
- package/dist/code-intelligence/service/CodeIntelligenceService.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/coverage/CriticalPathDetector.d.ts +240 -0
- package/dist/coverage/CriticalPathDetector.d.ts.map +1 -0
- package/dist/coverage/CriticalPathDetector.js +388 -0
- package/dist/coverage/CriticalPathDetector.js.map +1 -0
- package/dist/coverage/index.d.ts +13 -0
- package/dist/coverage/index.d.ts.map +1 -0
- package/dist/coverage/index.js +16 -0
- package/dist/coverage/index.js.map +1 -0
- package/dist/fleet/topology/SPOFMonitor.d.ts +181 -0
- package/dist/fleet/topology/SPOFMonitor.d.ts.map +1 -0
- package/dist/fleet/topology/SPOFMonitor.js +286 -0
- package/dist/fleet/topology/SPOFMonitor.js.map +1 -0
- package/dist/fleet/topology/TopologyMinCutAnalyzer.d.ts +87 -0
- package/dist/fleet/topology/TopologyMinCutAnalyzer.d.ts.map +1 -0
- package/dist/fleet/topology/TopologyMinCutAnalyzer.js +472 -0
- package/dist/fleet/topology/TopologyMinCutAnalyzer.js.map +1 -0
- package/dist/fleet/topology/index.d.ts +13 -0
- package/dist/fleet/topology/index.d.ts.map +1 -0
- package/dist/fleet/topology/index.js +20 -0
- package/dist/fleet/topology/index.js.map +1 -0
- package/dist/fleet/topology/types.d.ts +139 -0
- package/dist/fleet/topology/types.d.ts.map +1 -0
- package/dist/fleet/topology/types.js +19 -0
- package/dist/fleet/topology/types.js.map +1 -0
- package/dist/mcp/handlers/test/test-execute-parallel.d.ts +34 -3
- package/dist/mcp/handlers/test/test-execute-parallel.d.ts.map +1 -1
- package/dist/mcp/handlers/test/test-execute-parallel.js +120 -5
- package/dist/mcp/handlers/test/test-execute-parallel.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +2 -2
- package/dist/mcp/server-instructions.d.ts.map +1 -1
- package/dist/mcp/server-instructions.js +2 -2
- package/dist/monitoring/ProviderHealthMonitor.d.ts +195 -0
- package/dist/monitoring/ProviderHealthMonitor.d.ts.map +1 -0
- package/dist/monitoring/ProviderHealthMonitor.js +431 -0
- package/dist/monitoring/ProviderHealthMonitor.js.map +1 -0
- package/dist/monitoring/QuotaManager.d.ts +122 -0
- package/dist/monitoring/QuotaManager.d.ts.map +1 -0
- package/dist/monitoring/QuotaManager.js +351 -0
- package/dist/monitoring/QuotaManager.js.map +1 -0
- package/dist/providers/GitHubModelsProvider.d.ts +117 -0
- package/dist/providers/GitHubModelsProvider.d.ts.map +1 -0
- package/dist/providers/GitHubModelsProvider.js +464 -0
- package/dist/providers/GitHubModelsProvider.js.map +1 -0
- package/dist/providers/GroqProvider.d.ts +115 -0
- package/dist/providers/GroqProvider.d.ts.map +1 -0
- package/dist/providers/GroqProvider.js +443 -0
- package/dist/providers/GroqProvider.js.map +1 -0
- package/dist/providers/HybridRouterHealthIntegration.d.ts +191 -0
- package/dist/providers/HybridRouterHealthIntegration.d.ts.map +1 -0
- package/dist/providers/HybridRouterHealthIntegration.js +439 -0
- package/dist/providers/HybridRouterHealthIntegration.js.map +1 -0
- package/dist/providers/index.d.ts +6 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +12 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/test/partition/MinCutPartitioner.d.ts +97 -0
- package/dist/test/partition/MinCutPartitioner.d.ts.map +1 -0
- package/dist/test/partition/MinCutPartitioner.js +459 -0
- package/dist/test/partition/MinCutPartitioner.js.map +1 -0
- package/dist/test/partition/RealTestExecutor.d.ts +86 -0
- package/dist/test/partition/RealTestExecutor.d.ts.map +1 -0
- package/dist/test/partition/RealTestExecutor.js +279 -0
- package/dist/test/partition/RealTestExecutor.js.map +1 -0
- package/dist/test/partition/TestDependencyAnalyzer.d.ts +75 -0
- package/dist/test/partition/TestDependencyAnalyzer.d.ts.map +1 -0
- package/dist/test/partition/TestDependencyAnalyzer.js +297 -0
- package/dist/test/partition/TestDependencyAnalyzer.js.map +1 -0
- package/dist/test/partition/index.d.ts +10 -0
- package/dist/test/partition/index.d.ts.map +1 -0
- package/dist/test/partition/index.js +26 -0
- package/dist/test/partition/index.js.map +1 -0
- package/dist/test/partition/types.d.ts +120 -0
- package/dist/test/partition/types.d.ts.map +1 -0
- package/dist/test/partition/types.js +21 -0
- package/dist/test/partition/types.js.map +1 -0
- package/package.json +5 -8
- package/dist/cli/commands/providers.d.ts +0 -50
- package/dist/cli/commands/providers.d.ts.map +0 -1
- package/dist/cli/commands/providers.js +0 -403
- package/dist/cli/commands/providers.js.map +0 -1
- package/dist/code-intelligence/parser/TreeSitterParser.d.ts.map +0 -1
- package/dist/code-intelligence/parser/TreeSitterParser.js.map +0 -1
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* HybridRouterHealthIntegration - Health-aware routing integration for HybridRouter
|
|
4
|
+
*
|
|
5
|
+
* Integrates ProviderHealthMonitor with HybridRouter for:
|
|
6
|
+
* - Real-time health status-based routing decisions
|
|
7
|
+
* - Automatic fallback chain when primary provider is unhealthy
|
|
8
|
+
* - Circuit breaker coordination
|
|
9
|
+
* - Provider ranking by health score
|
|
10
|
+
*
|
|
11
|
+
* @module providers/HybridRouterHealthIntegration
|
|
12
|
+
* @version 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.HybridRouterHealthIntegration = void 0;
|
|
16
|
+
exports.createHealthAwareRouter = createHealthAwareRouter;
|
|
17
|
+
const events_1 = require("events");
|
|
18
|
+
const Logger_1 = require("../utils/Logger");
|
|
19
|
+
const ProviderHealthMonitor_1 = require("../monitoring/ProviderHealthMonitor");
|
|
20
|
+
/**
|
|
21
|
+
* Default fallback configuration
|
|
22
|
+
*/
|
|
23
|
+
const DEFAULT_FALLBACK_CONFIG = {
|
|
24
|
+
enabled: true,
|
|
25
|
+
maxAttempts: 3,
|
|
26
|
+
retryDelay: 100,
|
|
27
|
+
preferLowLatency: true,
|
|
28
|
+
preferHighAvailability: true,
|
|
29
|
+
minHealthScore: 0.3
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* HybridRouterHealthIntegration - Coordinates health monitoring with routing
|
|
33
|
+
*
|
|
34
|
+
* This class sits between HybridRouter and ProviderHealthMonitor to provide:
|
|
35
|
+
* 1. Health-aware provider selection
|
|
36
|
+
* 2. Intelligent fallback chain based on health metrics
|
|
37
|
+
* 3. Event coordination for health/routing decisions
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const healthMonitor = new ProviderHealthMonitor();
|
|
42
|
+
* const integration = new HybridRouterHealthIntegration(healthMonitor);
|
|
43
|
+
*
|
|
44
|
+
* // Register providers
|
|
45
|
+
* integration.registerProvider('claude', claudeProvider);
|
|
46
|
+
* integration.registerProvider('groq', groqProvider);
|
|
47
|
+
* integration.registerProvider('github-models', githubModelsProvider);
|
|
48
|
+
*
|
|
49
|
+
* // Get ranked providers for routing
|
|
50
|
+
* const ranked = integration.getRankedProviders();
|
|
51
|
+
*
|
|
52
|
+
* // Execute with automatic fallback
|
|
53
|
+
* const result = await integration.executeWithFallback(options);
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
class HybridRouterHealthIntegration extends events_1.EventEmitter {
|
|
57
|
+
constructor(healthMonitor, fallbackConfig) {
|
|
58
|
+
super();
|
|
59
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
60
|
+
this.healthMonitor = healthMonitor;
|
|
61
|
+
this.fallbackConfig = { ...DEFAULT_FALLBACK_CONFIG, ...fallbackConfig };
|
|
62
|
+
this.providers = new Map();
|
|
63
|
+
// Listen to health monitor events
|
|
64
|
+
this.setupHealthEventListeners();
|
|
65
|
+
this.logger.debug('HybridRouterHealthIntegration initialized', {
|
|
66
|
+
fallbackConfig: this.fallbackConfig
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Register a provider for health-aware routing
|
|
71
|
+
*
|
|
72
|
+
* @param providerId - Unique identifier for the provider
|
|
73
|
+
* @param provider - LLM provider instance
|
|
74
|
+
*/
|
|
75
|
+
registerProvider(providerId, provider) {
|
|
76
|
+
this.providers.set(providerId, provider);
|
|
77
|
+
// Register with health monitor
|
|
78
|
+
this.healthMonitor.registerProvider(providerId, () => provider.healthCheck());
|
|
79
|
+
this.logger.info(`Provider ${providerId} registered for health-aware routing`);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Unregister a provider
|
|
83
|
+
*
|
|
84
|
+
* @param providerId - Provider to unregister
|
|
85
|
+
*/
|
|
86
|
+
unregisterProvider(providerId) {
|
|
87
|
+
this.providers.delete(providerId);
|
|
88
|
+
this.healthMonitor.unregisterProvider(providerId);
|
|
89
|
+
this.logger.info(`Provider ${providerId} unregistered`);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get all providers ranked by health score
|
|
93
|
+
*
|
|
94
|
+
* Providers are ranked considering:
|
|
95
|
+
* - Current health status
|
|
96
|
+
* - Circuit breaker state
|
|
97
|
+
* - Latency (if preferLowLatency enabled)
|
|
98
|
+
* - Availability (if preferHighAvailability enabled)
|
|
99
|
+
*
|
|
100
|
+
* @returns Array of providers sorted by priority (best first)
|
|
101
|
+
*/
|
|
102
|
+
getRankedProviders() {
|
|
103
|
+
const ranked = [];
|
|
104
|
+
for (const [providerId, provider] of this.providers.entries()) {
|
|
105
|
+
const healthState = this.healthMonitor.getProviderHealth(providerId);
|
|
106
|
+
if (!healthState) {
|
|
107
|
+
// Provider not monitored, add with default values
|
|
108
|
+
ranked.push({
|
|
109
|
+
providerId,
|
|
110
|
+
provider,
|
|
111
|
+
healthScore: 0.5,
|
|
112
|
+
latency: 1000,
|
|
113
|
+
availability: 0.5,
|
|
114
|
+
isHealthy: true,
|
|
115
|
+
circuitState: 'closed'
|
|
116
|
+
});
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
// Calculate composite health score
|
|
120
|
+
const healthScore = this.calculateHealthScore(healthState);
|
|
121
|
+
ranked.push({
|
|
122
|
+
providerId,
|
|
123
|
+
provider,
|
|
124
|
+
healthScore,
|
|
125
|
+
latency: healthState.latency,
|
|
126
|
+
availability: healthState.availability,
|
|
127
|
+
isHealthy: healthState.healthy,
|
|
128
|
+
circuitState: healthState.circuitState
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
// Sort by health score (descending)
|
|
132
|
+
return ranked.sort((a, b) => b.healthScore - a.healthScore);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get the best available provider based on health
|
|
136
|
+
*
|
|
137
|
+
* @returns Best provider or undefined if none available
|
|
138
|
+
*/
|
|
139
|
+
getBestProvider() {
|
|
140
|
+
const ranked = this.getRankedProviders();
|
|
141
|
+
// Find first healthy provider with closed circuit
|
|
142
|
+
const healthy = ranked.find(p => p.isHealthy &&
|
|
143
|
+
p.circuitState === 'closed' &&
|
|
144
|
+
p.healthScore >= this.fallbackConfig.minHealthScore);
|
|
145
|
+
if (healthy) {
|
|
146
|
+
return healthy;
|
|
147
|
+
}
|
|
148
|
+
// Fallback: find first provider with half-open circuit (recovery attempt)
|
|
149
|
+
const recovering = ranked.find(p => p.circuitState === 'half-open');
|
|
150
|
+
if (recovering) {
|
|
151
|
+
this.logger.debug('Using recovering provider for best selection', {
|
|
152
|
+
providerId: recovering.providerId
|
|
153
|
+
});
|
|
154
|
+
return recovering;
|
|
155
|
+
}
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Build fallback chain for a primary provider
|
|
160
|
+
*
|
|
161
|
+
* @param excludeProviderId - Provider ID to exclude (primary)
|
|
162
|
+
* @returns Array of provider IDs in fallback order
|
|
163
|
+
*/
|
|
164
|
+
buildFallbackChain(excludeProviderId) {
|
|
165
|
+
const ranked = this.getRankedProviders()
|
|
166
|
+
.filter(p => p.providerId !== excludeProviderId)
|
|
167
|
+
.filter(p => p.healthScore >= this.fallbackConfig.minHealthScore)
|
|
168
|
+
.filter(p => p.circuitState !== 'open');
|
|
169
|
+
return ranked.map(p => p.providerId);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Execute a completion request with automatic fallback
|
|
173
|
+
*
|
|
174
|
+
* Attempts to execute with the best provider, falling back to
|
|
175
|
+
* alternatives if the primary fails.
|
|
176
|
+
*
|
|
177
|
+
* @param options - Completion options
|
|
178
|
+
* @param preferredProviderId - Optional preferred provider to try first
|
|
179
|
+
* @returns Fallback result with response or error
|
|
180
|
+
*/
|
|
181
|
+
async executeWithFallback(options, preferredProviderId) {
|
|
182
|
+
if (!this.fallbackConfig.enabled) {
|
|
183
|
+
// Fallback disabled, just try the preferred or best provider
|
|
184
|
+
const provider = preferredProviderId
|
|
185
|
+
? this.providers.get(preferredProviderId)
|
|
186
|
+
: this.getBestProvider()?.provider;
|
|
187
|
+
if (!provider) {
|
|
188
|
+
return {
|
|
189
|
+
success: false,
|
|
190
|
+
providerId: 'none',
|
|
191
|
+
attemptCount: 0,
|
|
192
|
+
error: 'No provider available',
|
|
193
|
+
fallbackChain: []
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
try {
|
|
197
|
+
const response = await provider.complete(options);
|
|
198
|
+
return {
|
|
199
|
+
success: true,
|
|
200
|
+
providerId: preferredProviderId || 'best',
|
|
201
|
+
attemptCount: 1,
|
|
202
|
+
response,
|
|
203
|
+
fallbackChain: []
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
return {
|
|
208
|
+
success: false,
|
|
209
|
+
providerId: preferredProviderId || 'best',
|
|
210
|
+
attemptCount: 1,
|
|
211
|
+
error: error.message,
|
|
212
|
+
fallbackChain: []
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Build execution chain
|
|
217
|
+
let chain = [];
|
|
218
|
+
if (preferredProviderId && this.isProviderAvailable(preferredProviderId)) {
|
|
219
|
+
chain = [preferredProviderId, ...this.buildFallbackChain(preferredProviderId)];
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
chain = this.buildFallbackChain();
|
|
223
|
+
}
|
|
224
|
+
if (chain.length === 0) {
|
|
225
|
+
return {
|
|
226
|
+
success: false,
|
|
227
|
+
providerId: 'none',
|
|
228
|
+
attemptCount: 0,
|
|
229
|
+
error: 'No healthy providers available',
|
|
230
|
+
fallbackChain: []
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
// Track the decision
|
|
234
|
+
this.lastRoutingDecision = {
|
|
235
|
+
primaryProvider: chain[0],
|
|
236
|
+
fallbackChain: chain.slice(1),
|
|
237
|
+
timestamp: new Date()
|
|
238
|
+
};
|
|
239
|
+
// Execute with fallback
|
|
240
|
+
const attemptedChain = [];
|
|
241
|
+
let lastError;
|
|
242
|
+
for (let i = 0; i < Math.min(chain.length, this.fallbackConfig.maxAttempts); i++) {
|
|
243
|
+
const providerId = chain[i];
|
|
244
|
+
const provider = this.providers.get(providerId);
|
|
245
|
+
if (!provider) {
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
attemptedChain.push(providerId);
|
|
249
|
+
try {
|
|
250
|
+
this.logger.debug(`Attempting provider ${providerId}`, {
|
|
251
|
+
attemptNumber: i + 1,
|
|
252
|
+
totalInChain: chain.length
|
|
253
|
+
});
|
|
254
|
+
const response = await provider.complete(options);
|
|
255
|
+
// Success - emit event
|
|
256
|
+
this.emit('fallback-success', {
|
|
257
|
+
providerId,
|
|
258
|
+
attemptNumber: i + 1,
|
|
259
|
+
fallbackChain: attemptedChain,
|
|
260
|
+
timestamp: new Date()
|
|
261
|
+
});
|
|
262
|
+
return {
|
|
263
|
+
success: true,
|
|
264
|
+
providerId,
|
|
265
|
+
attemptCount: i + 1,
|
|
266
|
+
response,
|
|
267
|
+
fallbackChain: attemptedChain
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
lastError = error.message;
|
|
272
|
+
this.logger.warn(`Provider ${providerId} failed, attempting fallback`, {
|
|
273
|
+
error: lastError,
|
|
274
|
+
attemptNumber: i + 1,
|
|
275
|
+
remainingProviders: chain.length - i - 1
|
|
276
|
+
});
|
|
277
|
+
// Emit failure event
|
|
278
|
+
this.emit('provider-failed', {
|
|
279
|
+
providerId,
|
|
280
|
+
error: lastError,
|
|
281
|
+
attemptNumber: i + 1,
|
|
282
|
+
timestamp: new Date()
|
|
283
|
+
});
|
|
284
|
+
// Wait before retry (except for last attempt)
|
|
285
|
+
if (i < chain.length - 1 && this.fallbackConfig.retryDelay > 0) {
|
|
286
|
+
await this.delay(this.fallbackConfig.retryDelay);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// All attempts failed
|
|
291
|
+
this.emit('fallback-exhausted', {
|
|
292
|
+
attemptedProviders: attemptedChain,
|
|
293
|
+
lastError,
|
|
294
|
+
timestamp: new Date()
|
|
295
|
+
});
|
|
296
|
+
return {
|
|
297
|
+
success: false,
|
|
298
|
+
providerId: attemptedChain[attemptedChain.length - 1] || 'none',
|
|
299
|
+
attemptCount: attemptedChain.length,
|
|
300
|
+
error: lastError || 'All providers failed',
|
|
301
|
+
fallbackChain: attemptedChain
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Check if a specific provider is available for use
|
|
306
|
+
*
|
|
307
|
+
* @param providerId - Provider to check
|
|
308
|
+
* @returns True if provider can be used
|
|
309
|
+
*/
|
|
310
|
+
isProviderAvailable(providerId) {
|
|
311
|
+
if (!this.providers.has(providerId)) {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
const health = this.healthMonitor.getProviderHealth(providerId);
|
|
315
|
+
if (!health) {
|
|
316
|
+
return true; // Not monitored, assume available
|
|
317
|
+
}
|
|
318
|
+
// Provider is available if:
|
|
319
|
+
// 1. Circuit is closed and it's healthy
|
|
320
|
+
// 2. Circuit is half-open (recovery attempt)
|
|
321
|
+
return ((health.circuitState === 'closed' && health.healthy) ||
|
|
322
|
+
health.circuitState === 'half-open');
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Get health summary for all providers
|
|
326
|
+
*
|
|
327
|
+
* @returns Map of provider IDs to health status
|
|
328
|
+
*/
|
|
329
|
+
getHealthSummary() {
|
|
330
|
+
const summary = new Map();
|
|
331
|
+
for (const providerId of this.providers.keys()) {
|
|
332
|
+
const health = this.healthMonitor.getProviderHealth(providerId);
|
|
333
|
+
if (health) {
|
|
334
|
+
summary.set(providerId, {
|
|
335
|
+
healthy: health.healthy,
|
|
336
|
+
circuitState: health.circuitState,
|
|
337
|
+
healthScore: this.calculateHealthScore(health),
|
|
338
|
+
lastCheck: health.lastCheck
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
summary.set(providerId, {
|
|
343
|
+
healthy: true,
|
|
344
|
+
circuitState: 'unknown',
|
|
345
|
+
healthScore: 0.5,
|
|
346
|
+
lastCheck: new Date()
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return summary;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Force health check on all providers
|
|
354
|
+
*
|
|
355
|
+
* @returns Array of health check results
|
|
356
|
+
*/
|
|
357
|
+
async forceHealthCheck() {
|
|
358
|
+
return this.healthMonitor.checkAllProviders();
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Get the last routing decision
|
|
362
|
+
*/
|
|
363
|
+
getLastRoutingDecision() {
|
|
364
|
+
return this.lastRoutingDecision;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Calculate composite health score
|
|
368
|
+
*
|
|
369
|
+
* Score is based on:
|
|
370
|
+
* - Base health status (40%)
|
|
371
|
+
* - Availability (30%)
|
|
372
|
+
* - Latency score (20%)
|
|
373
|
+
* - Circuit state (10%)
|
|
374
|
+
*/
|
|
375
|
+
calculateHealthScore(health) {
|
|
376
|
+
let score = 0;
|
|
377
|
+
// Base health (40%)
|
|
378
|
+
if (health.healthy) {
|
|
379
|
+
score += 0.4;
|
|
380
|
+
}
|
|
381
|
+
// Availability (30%)
|
|
382
|
+
score += health.availability * 0.3;
|
|
383
|
+
// Latency score (20%) - lower is better, max 5000ms
|
|
384
|
+
const latencyScore = Math.max(0, 1 - health.latency / 5000);
|
|
385
|
+
score += latencyScore * 0.2;
|
|
386
|
+
// Circuit state (10%)
|
|
387
|
+
switch (health.circuitState) {
|
|
388
|
+
case 'closed':
|
|
389
|
+
score += 0.1;
|
|
390
|
+
break;
|
|
391
|
+
case 'half-open':
|
|
392
|
+
score += 0.05;
|
|
393
|
+
break;
|
|
394
|
+
case 'open':
|
|
395
|
+
score += 0;
|
|
396
|
+
break;
|
|
397
|
+
}
|
|
398
|
+
return Math.min(1, Math.max(0, score));
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Setup listeners for health monitor events
|
|
402
|
+
*/
|
|
403
|
+
setupHealthEventListeners() {
|
|
404
|
+
this.healthMonitor.on('health-change', (data) => {
|
|
405
|
+
this.logger.debug('Provider health changed', {
|
|
406
|
+
providerId: data.providerId,
|
|
407
|
+
healthy: data.healthy,
|
|
408
|
+
errorRate: data.errorRate
|
|
409
|
+
});
|
|
410
|
+
// Re-emit for consumers
|
|
411
|
+
this.emit('health-change', data);
|
|
412
|
+
});
|
|
413
|
+
this.healthMonitor.on('circuit-change', (data) => {
|
|
414
|
+
this.logger.info('Circuit state changed', {
|
|
415
|
+
providerId: data.providerId,
|
|
416
|
+
state: data.circuitState,
|
|
417
|
+
previousState: data.previousState
|
|
418
|
+
});
|
|
419
|
+
// Re-emit for consumers
|
|
420
|
+
this.emit('circuit-change', data);
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Delay helper
|
|
425
|
+
*/
|
|
426
|
+
delay(ms) {
|
|
427
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
exports.HybridRouterHealthIntegration = HybridRouterHealthIntegration;
|
|
431
|
+
/**
|
|
432
|
+
* Factory function to create integration with default config
|
|
433
|
+
*/
|
|
434
|
+
function createHealthAwareRouter(healthConfig, fallbackConfig) {
|
|
435
|
+
const healthMonitor = new ProviderHealthMonitor_1.ProviderHealthMonitor(healthConfig);
|
|
436
|
+
const integration = new HybridRouterHealthIntegration(healthMonitor, fallbackConfig);
|
|
437
|
+
return { healthMonitor, integration };
|
|
438
|
+
}
|
|
439
|
+
//# sourceMappingURL=HybridRouterHealthIntegration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HybridRouterHealthIntegration.js","sourceRoot":"","sources":["../../src/providers/HybridRouterHealthIntegration.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
* This module provides a unified interface for multiple LLM providers:
|
|
5
5
|
* - ClaudeProvider: Anthropic Claude API
|
|
6
6
|
* - RuvllmProvider: Local LLM inference via ruvllm
|
|
7
|
+
* - OllamaProvider: Local LLM inference via Ollama
|
|
8
|
+
* - GroqProvider: Ultra-fast cloud inference via Groq LPU (FREE tier: 14,400 req/day)
|
|
7
9
|
* - OpenRouterProvider: 300+ models with auto-routing and hot-swap
|
|
10
|
+
* - GitHubModelsProvider: GitHub Models API (FREE in Codespaces)
|
|
8
11
|
* - LLMProviderFactory: Factory for provider creation and hybrid routing
|
|
9
12
|
*
|
|
10
13
|
* @module providers
|
|
@@ -14,10 +17,13 @@ export { ILLMProvider, LLMProviderConfig, LLMCompletionOptions, LLMCompletionRes
|
|
|
14
17
|
export { ClaudeProvider, ClaudeProviderConfig } from './ClaudeProvider';
|
|
15
18
|
export { RuvllmProvider, RuvllmProviderConfig } from './RuvllmProvider';
|
|
16
19
|
export { OllamaProvider, OllamaProviderConfig } from './OllamaProvider';
|
|
20
|
+
export { GroqProvider, GroqProviderConfig } from './GroqProvider';
|
|
17
21
|
export { OpenRouterProvider, OpenRouterConfig, OpenRouterModel, createOpenRouterProvider } from './OpenRouterProvider';
|
|
22
|
+
export { GitHubModelsProvider, GitHubModelsProviderConfig } from './GitHubModelsProvider';
|
|
18
23
|
export { HybridRouter, HybridRouterConfig, RuVectorCacheConfig, RequestPriority, TaskComplexity, RoutingStrategy, RoutingDecision, CostSavingsReport, BudgetConfig, BudgetStatus } from './HybridRouter';
|
|
19
24
|
export { HybridRouterWithComplexity, HybridRouterWithComplexityConfig, ClassifierStatistics } from './HybridRouterComplexityIntegration';
|
|
20
25
|
export { HybridRouterModelSelection, ModelSelectionResult, createModelSelection } from './HybridRouterModelSelection';
|
|
26
|
+
export { HybridRouterHealthIntegration, FallbackConfig, RankedProvider, FallbackResult, createHealthAwareRouter } from './HybridRouterHealthIntegration';
|
|
21
27
|
export { PromptCompressor, RequestBatcher, SmartCacheStrategy, ModelRightSizer, CostOptimizationManager } from './CostOptimizationStrategies';
|
|
22
28
|
export type { CompressionResult, RequestGroup, BatchExecutionResult, CacheStrategy, ModelRightSizingResult, CostOptimizationConfig } from './CostOptimizationStrategies';
|
|
23
29
|
export { RuVectorClient, RuVectorConfig, RuVectorError, createRuVectorClient, RUVECTOR_CLIENT_VERSION } from './RuVectorClient';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"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"}
|
package/dist/providers/index.js
CHANGED
|
@@ -5,14 +5,17 @@
|
|
|
5
5
|
* This module provides a unified interface for multiple LLM providers:
|
|
6
6
|
* - ClaudeProvider: Anthropic Claude API
|
|
7
7
|
* - RuvllmProvider: Local LLM inference via ruvllm
|
|
8
|
+
* - OllamaProvider: Local LLM inference via Ollama
|
|
9
|
+
* - GroqProvider: Ultra-fast cloud inference via Groq LPU (FREE tier: 14,400 req/day)
|
|
8
10
|
* - OpenRouterProvider: 300+ models with auto-routing and hot-swap
|
|
11
|
+
* - GitHubModelsProvider: GitHub Models API (FREE in Codespaces)
|
|
9
12
|
* - LLMProviderFactory: Factory for provider creation and hybrid routing
|
|
10
13
|
*
|
|
11
14
|
* @module providers
|
|
12
15
|
* @version 2.0.0
|
|
13
16
|
*/
|
|
14
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.setGlobalLLMFactory = exports.getGlobalLLMFactory = exports.LLMProviderFactory = exports.createRuvllmPatternCurator = exports.RuvllmPatternCurator = exports.RUVECTOR_POSTGRES_ADAPTER_VERSION = exports.createDockerRuVectorAdapter = exports.createRuVectorPostgresAdapter = exports.RuVectorPostgresAdapter = exports.RUVECTOR_CLIENT_VERSION = exports.createRuVectorClient = exports.RuVectorError = exports.RuVectorClient = exports.CostOptimizationManager = exports.ModelRightSizer = exports.SmartCacheStrategy = exports.RequestBatcher = exports.PromptCompressor = exports.createModelSelection = exports.HybridRouterModelSelection = exports.HybridRouterWithComplexity = exports.RoutingStrategy = exports.TaskComplexity = exports.RequestPriority = exports.HybridRouter = exports.createOpenRouterProvider = exports.OpenRouterProvider = exports.OllamaProvider = exports.RuvllmProvider = exports.ClaudeProvider = exports.isLLMProviderError = exports.LLMProviderError = void 0;
|
|
18
|
+
exports.setGlobalLLMFactory = exports.getGlobalLLMFactory = exports.LLMProviderFactory = exports.createRuvllmPatternCurator = exports.RuvllmPatternCurator = exports.RUVECTOR_POSTGRES_ADAPTER_VERSION = exports.createDockerRuVectorAdapter = exports.createRuVectorPostgresAdapter = exports.RuVectorPostgresAdapter = exports.RUVECTOR_CLIENT_VERSION = exports.createRuVectorClient = exports.RuVectorError = exports.RuVectorClient = exports.CostOptimizationManager = exports.ModelRightSizer = exports.SmartCacheStrategy = exports.RequestBatcher = exports.PromptCompressor = exports.createHealthAwareRouter = exports.HybridRouterHealthIntegration = exports.createModelSelection = exports.HybridRouterModelSelection = exports.HybridRouterWithComplexity = exports.RoutingStrategy = exports.TaskComplexity = exports.RequestPriority = exports.HybridRouter = exports.GitHubModelsProvider = exports.createOpenRouterProvider = exports.OpenRouterProvider = exports.GroqProvider = exports.OllamaProvider = exports.RuvllmProvider = exports.ClaudeProvider = exports.isLLMProviderError = exports.LLMProviderError = void 0;
|
|
16
19
|
exports.createDefaultProvider = createDefaultProvider;
|
|
17
20
|
exports.createHybridProvider = createHybridProvider;
|
|
18
21
|
exports.createOpenRouterWithAutoRoute = createOpenRouterWithAutoRoute;
|
|
@@ -30,9 +33,13 @@ var RuvllmProvider_1 = require("./RuvllmProvider");
|
|
|
30
33
|
Object.defineProperty(exports, "RuvllmProvider", { enumerable: true, get: function () { return RuvllmProvider_1.RuvllmProvider; } });
|
|
31
34
|
var OllamaProvider_1 = require("./OllamaProvider");
|
|
32
35
|
Object.defineProperty(exports, "OllamaProvider", { enumerable: true, get: function () { return OllamaProvider_1.OllamaProvider; } });
|
|
36
|
+
var GroqProvider_1 = require("./GroqProvider");
|
|
37
|
+
Object.defineProperty(exports, "GroqProvider", { enumerable: true, get: function () { return GroqProvider_1.GroqProvider; } });
|
|
33
38
|
var OpenRouterProvider_1 = require("./OpenRouterProvider");
|
|
34
39
|
Object.defineProperty(exports, "OpenRouterProvider", { enumerable: true, get: function () { return OpenRouterProvider_1.OpenRouterProvider; } });
|
|
35
40
|
Object.defineProperty(exports, "createOpenRouterProvider", { enumerable: true, get: function () { return OpenRouterProvider_1.createOpenRouterProvider; } });
|
|
41
|
+
var GitHubModelsProvider_1 = require("./GitHubModelsProvider");
|
|
42
|
+
Object.defineProperty(exports, "GitHubModelsProvider", { enumerable: true, get: function () { return GitHubModelsProvider_1.GitHubModelsProvider; } });
|
|
36
43
|
// Hybrid router with RuVector cache integration (Phase 0.5)
|
|
37
44
|
var HybridRouter_1 = require("./HybridRouter");
|
|
38
45
|
Object.defineProperty(exports, "HybridRouter", { enumerable: true, get: function () { return HybridRouter_1.HybridRouter; } });
|
|
@@ -46,6 +53,10 @@ Object.defineProperty(exports, "HybridRouterWithComplexity", { enumerable: true,
|
|
|
46
53
|
var HybridRouterModelSelection_1 = require("./HybridRouterModelSelection");
|
|
47
54
|
Object.defineProperty(exports, "HybridRouterModelSelection", { enumerable: true, get: function () { return HybridRouterModelSelection_1.HybridRouterModelSelection; } });
|
|
48
55
|
Object.defineProperty(exports, "createModelSelection", { enumerable: true, get: function () { return HybridRouterModelSelection_1.createModelSelection; } });
|
|
56
|
+
// Phase 3.2.2: Health-Aware Routing Integration
|
|
57
|
+
var HybridRouterHealthIntegration_1 = require("./HybridRouterHealthIntegration");
|
|
58
|
+
Object.defineProperty(exports, "HybridRouterHealthIntegration", { enumerable: true, get: function () { return HybridRouterHealthIntegration_1.HybridRouterHealthIntegration; } });
|
|
59
|
+
Object.defineProperty(exports, "createHealthAwareRouter", { enumerable: true, get: function () { return HybridRouterHealthIntegration_1.createHealthAwareRouter; } });
|
|
49
60
|
// Phase 2.x.2: Cost Optimization Strategies
|
|
50
61
|
var CostOptimizationStrategies_1 = require("./CostOptimizationStrategies");
|
|
51
62
|
Object.defineProperty(exports, "PromptCompressor", { enumerable: true, get: function () { return CostOptimizationStrategies_1.PromptCompressor; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MinCut-Based Test Suite Partitioner
|
|
3
|
+
*
|
|
4
|
+
* Uses the Stoer-Wagner minimum cut algorithm to optimally partition
|
|
5
|
+
* test suites for parallel execution, minimizing cross-partition
|
|
6
|
+
* dependencies and balancing execution time across workers.
|
|
7
|
+
*
|
|
8
|
+
* Expected improvement: 30-50% faster parallel execution compared
|
|
9
|
+
* to naive round-robin or random distribution.
|
|
10
|
+
*/
|
|
11
|
+
import { TestFile, PartitionResult, PartitionConfig } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Partitions test suites using MinCut algorithm to minimize
|
|
14
|
+
* cross-partition dependencies and balance execution time.
|
|
15
|
+
*/
|
|
16
|
+
export declare class MinCutPartitioner {
|
|
17
|
+
private config;
|
|
18
|
+
private minCutAnalyzer;
|
|
19
|
+
constructor(config?: Partial<PartitionConfig>);
|
|
20
|
+
/**
|
|
21
|
+
* Partition test files for optimal parallel execution
|
|
22
|
+
*
|
|
23
|
+
* @param tests - Array of test files with metadata
|
|
24
|
+
* @returns PartitionResult with optimized test distribution
|
|
25
|
+
*/
|
|
26
|
+
partition(tests: TestFile[]): Promise<PartitionResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Build a dependency graph from test files
|
|
29
|
+
*/
|
|
30
|
+
private buildTestGraph;
|
|
31
|
+
/**
|
|
32
|
+
* Calculate edge weight based on dependency characteristics
|
|
33
|
+
* Higher weight = stronger coupling = should stay together
|
|
34
|
+
*/
|
|
35
|
+
private calculateEdgeWeight;
|
|
36
|
+
/**
|
|
37
|
+
* Recursively bisect graph to create k partitions
|
|
38
|
+
*/
|
|
39
|
+
private recursiveBisection;
|
|
40
|
+
/**
|
|
41
|
+
* Create a subgraph containing only specified nodes
|
|
42
|
+
*/
|
|
43
|
+
private createSubgraph;
|
|
44
|
+
/**
|
|
45
|
+
* Balance partitions to ensure exactly k partitions
|
|
46
|
+
*/
|
|
47
|
+
private balancePartitions;
|
|
48
|
+
/**
|
|
49
|
+
* Simple duration-balanced partitioning (fallback)
|
|
50
|
+
*/
|
|
51
|
+
private durationBalancedPartition;
|
|
52
|
+
/**
|
|
53
|
+
* Build result from MinCut output (2 partitions)
|
|
54
|
+
*/
|
|
55
|
+
private buildResult;
|
|
56
|
+
/**
|
|
57
|
+
* Build result from recursive bisection partitions
|
|
58
|
+
*/
|
|
59
|
+
private buildResultFromPartitions;
|
|
60
|
+
/**
|
|
61
|
+
* Count cross-partition dependencies for a single partition
|
|
62
|
+
*/
|
|
63
|
+
private countCrossPartitionDepsForPartition;
|
|
64
|
+
/**
|
|
65
|
+
* Count cross-partition dependencies
|
|
66
|
+
*/
|
|
67
|
+
private countCrossPartitionDeps;
|
|
68
|
+
/**
|
|
69
|
+
* Calculate partition quality statistics
|
|
70
|
+
*/
|
|
71
|
+
private calculateStats;
|
|
72
|
+
/**
|
|
73
|
+
* Estimate variance for naive round-robin
|
|
74
|
+
*/
|
|
75
|
+
private estimateNaiveVariance;
|
|
76
|
+
/**
|
|
77
|
+
* Estimate speedup compared to sequential execution
|
|
78
|
+
*/
|
|
79
|
+
private estimateSpeedup;
|
|
80
|
+
/**
|
|
81
|
+
* Empty result for no tests
|
|
82
|
+
*/
|
|
83
|
+
private emptyResult;
|
|
84
|
+
/**
|
|
85
|
+
* Trivial partition when tests <= partition count
|
|
86
|
+
*/
|
|
87
|
+
private trivialPartition;
|
|
88
|
+
/**
|
|
89
|
+
* Get current configuration
|
|
90
|
+
*/
|
|
91
|
+
getConfig(): Readonly<PartitionConfig>;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Convenience function for one-off partitioning
|
|
95
|
+
*/
|
|
96
|
+
export declare function partitionTests(tests: TestFile[], config?: Partial<PartitionConfig>): Promise<PartitionResult>;
|
|
97
|
+
//# sourceMappingURL=MinCutPartitioner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MinCutPartitioner.d.ts","sourceRoot":"","sources":["../../../src/test/partition/MinCutPartitioner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,QAAQ,EAER,eAAe,EACf,eAAe,EAKhB,MAAM,YAAY,CAAC;AAOpB;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,cAAc,CAAiB;gBAE3B,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAQjD;;;;;OAKG;IACU,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IAmDnE;;OAEG;IACH,OAAO,CAAC,cAAc;IAqDtB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAyB3B;;OAEG;YACW,kBAAkB;IAkDhC;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2BzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAsCjC;;OAEG;IACH,OAAO,CAAC,WAAW;IAsCnB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA2BjC;;OAEG;IACH,OAAO,CAAC,mCAAmC;IAmB3C;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAgCtB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;OAEG;IACI,SAAS,IAAI,QAAQ,CAAC,eAAe,CAAC;CAG9C;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,QAAQ,EAAE,EACjB,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,OAAO,CAAC,eAAe,CAAC,CAG1B"}
|