agentic-qe 2.1.2 → 2.2.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/.claude/skills/agentic-quality-engineering/SKILL.md +4 -4
- package/.claude/skills/cicd-pipeline-qe-orchestrator/README.md +14 -11
- package/.claude/skills/skills-manifest.json +2 -2
- package/CHANGELOG.md +138 -0
- package/README.md +92 -214
- package/dist/agents/BaseAgent.d.ts +5 -1
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +32 -17
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +5 -1
- package/dist/agents/index.js.map +1 -1
- package/dist/cli/commands/improve/index.d.ts +8 -1
- package/dist/cli/commands/improve/index.d.ts.map +1 -1
- package/dist/cli/commands/improve/index.js +18 -16
- package/dist/cli/commands/improve/index.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts +10 -2
- package/dist/cli/commands/learn/index.d.ts.map +1 -1
- package/dist/cli/commands/learn/index.js +99 -63
- package/dist/cli/commands/learn/index.js.map +1 -1
- package/dist/cli/commands/patterns/index.d.ts +8 -1
- package/dist/cli/commands/patterns/index.d.ts.map +1 -1
- package/dist/cli/commands/patterns/index.js +79 -45
- package/dist/cli/commands/patterns/index.js.map +1 -1
- package/dist/cli/commands/routing/index.d.ts +5 -0
- package/dist/cli/commands/routing/index.d.ts.map +1 -1
- package/dist/cli/commands/routing/index.js +11 -10
- package/dist/cli/commands/routing/index.js.map +1 -1
- package/dist/cli/init/agents.d.ts +1 -1
- package/dist/cli/init/agents.js +2 -2
- package/dist/cli/init/database-init.d.ts +7 -0
- package/dist/cli/init/database-init.d.ts.map +1 -1
- package/dist/cli/init/database-init.js +29 -48
- package/dist/cli/init/database-init.js.map +1 -1
- package/dist/core/di/AgentDependencies.d.ts +127 -0
- package/dist/core/di/AgentDependencies.d.ts.map +1 -0
- package/dist/core/di/AgentDependencies.js +251 -0
- package/dist/core/di/AgentDependencies.js.map +1 -0
- package/dist/core/di/DIContainer.d.ts +149 -0
- package/dist/core/di/DIContainer.d.ts.map +1 -0
- package/dist/core/di/DIContainer.js +333 -0
- package/dist/core/di/DIContainer.js.map +1 -0
- package/dist/core/di/index.d.ts +11 -0
- package/dist/core/di/index.d.ts.map +1 -0
- package/dist/core/di/index.js +22 -0
- package/dist/core/di/index.js.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +11 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.d.ts +261 -0
- package/dist/core/memory/HNSWVectorMemory.d.ts.map +1 -0
- package/dist/core/memory/HNSWVectorMemory.js +647 -0
- package/dist/core/memory/HNSWVectorMemory.js.map +1 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts +7 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +9 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/index.d.ts +2 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +11 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/learning/ExperienceSharingProtocol.d.ts +243 -0
- package/dist/learning/ExperienceSharingProtocol.d.ts.map +1 -0
- package/dist/learning/ExperienceSharingProtocol.js +538 -0
- package/dist/learning/ExperienceSharingProtocol.js.map +1 -0
- package/dist/learning/ExplainableLearning.d.ts +191 -0
- package/dist/learning/ExplainableLearning.d.ts.map +1 -0
- package/dist/learning/ExplainableLearning.js +441 -0
- package/dist/learning/ExplainableLearning.js.map +1 -0
- package/dist/learning/GossipPatternSharingProtocol.d.ts +228 -0
- package/dist/learning/GossipPatternSharingProtocol.d.ts.map +1 -0
- package/dist/learning/GossipPatternSharingProtocol.js +590 -0
- package/dist/learning/GossipPatternSharingProtocol.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +104 -4
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +350 -16
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/learning/PerformanceOptimizer.d.ts +268 -0
- package/dist/learning/PerformanceOptimizer.d.ts.map +1 -0
- package/dist/learning/PerformanceOptimizer.js +552 -0
- package/dist/learning/PerformanceOptimizer.js.map +1 -0
- package/dist/learning/PrivacyManager.d.ts +197 -0
- package/dist/learning/PrivacyManager.d.ts.map +1 -0
- package/dist/learning/PrivacyManager.js +551 -0
- package/dist/learning/PrivacyManager.js.map +1 -0
- package/dist/learning/QLearning.d.ts +38 -125
- package/dist/learning/QLearning.d.ts.map +1 -1
- package/dist/learning/QLearning.js +46 -267
- package/dist/learning/QLearning.js.map +1 -1
- package/dist/learning/QLearningLegacy.d.ts +154 -0
- package/dist/learning/QLearningLegacy.d.ts.map +1 -0
- package/dist/learning/QLearningLegacy.js +337 -0
- package/dist/learning/QLearningLegacy.js.map +1 -0
- package/dist/learning/TransferLearningManager.d.ts +212 -0
- package/dist/learning/TransferLearningManager.d.ts.map +1 -0
- package/dist/learning/TransferLearningManager.js +497 -0
- package/dist/learning/TransferLearningManager.js.map +1 -0
- package/dist/learning/algorithms/AbstractRLLearner.d.ts +162 -0
- package/dist/learning/algorithms/AbstractRLLearner.d.ts.map +1 -0
- package/dist/learning/algorithms/AbstractRLLearner.js +300 -0
- package/dist/learning/algorithms/AbstractRLLearner.js.map +1 -0
- package/dist/learning/algorithms/ActorCriticLearner.d.ts +201 -0
- package/dist/learning/algorithms/ActorCriticLearner.d.ts.map +1 -0
- package/dist/learning/algorithms/ActorCriticLearner.js +447 -0
- package/dist/learning/algorithms/ActorCriticLearner.js.map +1 -0
- package/dist/learning/algorithms/MAMLMetaLearner.d.ts +218 -0
- package/dist/learning/algorithms/MAMLMetaLearner.d.ts.map +1 -0
- package/dist/learning/algorithms/MAMLMetaLearner.js +532 -0
- package/dist/learning/algorithms/MAMLMetaLearner.js.map +1 -0
- package/dist/learning/algorithms/PPOLearner.d.ts +207 -0
- package/dist/learning/algorithms/PPOLearner.d.ts.map +1 -0
- package/dist/learning/algorithms/PPOLearner.js +490 -0
- package/dist/learning/algorithms/PPOLearner.js.map +1 -0
- package/dist/learning/algorithms/QLearning.d.ts +68 -0
- package/dist/learning/algorithms/QLearning.d.ts.map +1 -0
- package/dist/learning/algorithms/QLearning.js +116 -0
- package/dist/learning/algorithms/QLearning.js.map +1 -0
- package/dist/learning/algorithms/SARSALearner.d.ts +107 -0
- package/dist/learning/algorithms/SARSALearner.d.ts.map +1 -0
- package/dist/learning/algorithms/SARSALearner.js +252 -0
- package/dist/learning/algorithms/SARSALearner.js.map +1 -0
- package/dist/learning/algorithms/index.d.ts +32 -0
- package/dist/learning/algorithms/index.d.ts.map +1 -0
- package/dist/learning/algorithms/index.js +50 -0
- package/dist/learning/algorithms/index.js.map +1 -0
- package/dist/learning/index.d.ts +11 -0
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +31 -1
- package/dist/learning/index.js.map +1 -1
- package/dist/learning/types.d.ts +2 -0
- package/dist/learning/types.d.ts.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/memory/DistributedPatternLibrary.d.ts +159 -0
- package/dist/memory/DistributedPatternLibrary.d.ts.map +1 -0
- package/dist/memory/DistributedPatternLibrary.js +370 -0
- package/dist/memory/DistributedPatternLibrary.js.map +1 -0
- package/dist/memory/PatternQualityScorer.d.ts +169 -0
- package/dist/memory/PatternQualityScorer.d.ts.map +1 -0
- package/dist/memory/PatternQualityScorer.js +327 -0
- package/dist/memory/PatternQualityScorer.js.map +1 -0
- package/dist/memory/PatternReplicationService.d.ts +187 -0
- package/dist/memory/PatternReplicationService.d.ts.map +1 -0
- package/dist/memory/PatternReplicationService.js +392 -0
- package/dist/memory/PatternReplicationService.js.map +1 -0
- package/dist/providers/ClaudeProvider.d.ts +98 -0
- package/dist/providers/ClaudeProvider.d.ts.map +1 -0
- package/dist/providers/ClaudeProvider.js +418 -0
- package/dist/providers/ClaudeProvider.js.map +1 -0
- package/dist/providers/HybridRouter.d.ts +217 -0
- package/dist/providers/HybridRouter.d.ts.map +1 -0
- package/dist/providers/HybridRouter.js +679 -0
- package/dist/providers/HybridRouter.js.map +1 -0
- package/dist/providers/ILLMProvider.d.ts +287 -0
- package/dist/providers/ILLMProvider.d.ts.map +1 -0
- package/dist/providers/ILLMProvider.js +33 -0
- package/dist/providers/ILLMProvider.js.map +1 -0
- package/dist/providers/LLMProviderFactory.d.ts +154 -0
- package/dist/providers/LLMProviderFactory.d.ts.map +1 -0
- package/dist/providers/LLMProviderFactory.js +426 -0
- package/dist/providers/LLMProviderFactory.js.map +1 -0
- package/dist/providers/RuvllmProvider.d.ts +107 -0
- package/dist/providers/RuvllmProvider.d.ts.map +1 -0
- package/dist/providers/RuvllmProvider.js +417 -0
- package/dist/providers/RuvllmProvider.js.map +1 -0
- package/dist/providers/index.d.ts +32 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +75 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/telemetry/LearningTelemetry.d.ts +190 -0
- package/dist/telemetry/LearningTelemetry.d.ts.map +1 -0
- package/dist/telemetry/LearningTelemetry.js +403 -0
- package/dist/telemetry/LearningTelemetry.js.map +1 -0
- package/dist/telemetry/index.d.ts +1 -0
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +20 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/instrumentation/agent.d.ts +1 -1
- package/dist/telemetry/instrumentation/agent.js +1 -1
- package/dist/telemetry/instrumentation/index.d.ts +1 -1
- package/dist/telemetry/instrumentation/index.js +1 -1
- package/dist/utils/math.d.ts +11 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +16 -0
- package/dist/utils/math.js.map +1 -0
- package/docs/reference/agents.md +1 -1
- package/docs/reference/skills.md +3 -3
- package/docs/reference/usage.md +4 -4
- package/package.json +1 -1
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ClaudeProvider - Anthropic Claude API Implementation
|
|
4
|
+
*
|
|
5
|
+
* Provides LLM capabilities through Anthropic's Claude API with support for:
|
|
6
|
+
* - Prompt caching for cost optimization
|
|
7
|
+
* - Streaming responses
|
|
8
|
+
* - Token counting
|
|
9
|
+
* - Health checks
|
|
10
|
+
*
|
|
11
|
+
* @module providers/ClaudeProvider
|
|
12
|
+
* @version 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.ClaudeProvider = void 0;
|
|
19
|
+
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
20
|
+
const ILLMProvider_1 = require("./ILLMProvider");
|
|
21
|
+
const Logger_1 = require("../utils/Logger");
|
|
22
|
+
/**
|
|
23
|
+
* Claude model pricing (per million tokens)
|
|
24
|
+
*/
|
|
25
|
+
const CLAUDE_PRICING = {
|
|
26
|
+
'claude-sonnet-4-20250514': { input: 3.0, output: 15.0 },
|
|
27
|
+
'claude-opus-4-20250514': { input: 15.0, output: 75.0 },
|
|
28
|
+
'claude-3-5-sonnet-20241022': { input: 3.0, output: 15.0 },
|
|
29
|
+
'claude-3-5-haiku-20241022': { input: 0.8, output: 4.0 },
|
|
30
|
+
'claude-3-opus-20240229': { input: 15.0, output: 75.0 },
|
|
31
|
+
'claude-3-sonnet-20240229': { input: 3.0, output: 15.0 },
|
|
32
|
+
'claude-3-haiku-20240307': { input: 0.25, output: 1.25 },
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* ClaudeProvider - Anthropic Claude API implementation of ILLMProvider
|
|
36
|
+
*
|
|
37
|
+
* This provider enables access to Claude models through the Anthropic API
|
|
38
|
+
* with full support for caching, streaming, and cost tracking.
|
|
39
|
+
*/
|
|
40
|
+
class ClaudeProvider {
|
|
41
|
+
constructor(config = {}) {
|
|
42
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
43
|
+
this.config = {
|
|
44
|
+
name: config.name || 'claude',
|
|
45
|
+
debug: config.debug ?? false,
|
|
46
|
+
timeout: config.timeout ?? 60000,
|
|
47
|
+
maxRetries: config.maxRetries ?? 3,
|
|
48
|
+
apiKey: config.apiKey,
|
|
49
|
+
defaultModel: config.defaultModel || 'claude-sonnet-4-20250514',
|
|
50
|
+
enableCaching: config.enableCaching ?? true,
|
|
51
|
+
baseUrl: config.baseUrl
|
|
52
|
+
};
|
|
53
|
+
this.isInitialized = false;
|
|
54
|
+
this.totalCost = 0;
|
|
55
|
+
this.requestCount = 0;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Initialize the Claude provider
|
|
59
|
+
*/
|
|
60
|
+
async initialize() {
|
|
61
|
+
if (this.isInitialized) {
|
|
62
|
+
this.logger.warn('ClaudeProvider already initialized');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const apiKey = this.config.apiKey || process.env.ANTHROPIC_API_KEY;
|
|
66
|
+
if (!apiKey) {
|
|
67
|
+
throw new ILLMProvider_1.LLMProviderError('Anthropic API key not provided', 'claude', 'AUTH_ERROR', false);
|
|
68
|
+
}
|
|
69
|
+
this.client = new sdk_1.default({
|
|
70
|
+
apiKey,
|
|
71
|
+
timeout: this.config.timeout,
|
|
72
|
+
maxRetries: this.config.maxRetries,
|
|
73
|
+
...(this.config.baseUrl ? { baseURL: this.config.baseUrl } : {})
|
|
74
|
+
});
|
|
75
|
+
this.isInitialized = true;
|
|
76
|
+
this.logger.info('ClaudeProvider initialized', {
|
|
77
|
+
model: this.config.defaultModel,
|
|
78
|
+
caching: this.config.enableCaching
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Complete a prompt
|
|
83
|
+
*/
|
|
84
|
+
async complete(options) {
|
|
85
|
+
this.ensureInitialized();
|
|
86
|
+
const model = options.model || this.config.defaultModel;
|
|
87
|
+
const startTime = Date.now();
|
|
88
|
+
try {
|
|
89
|
+
// Build messages array
|
|
90
|
+
const messages = options.messages.map(m => {
|
|
91
|
+
// Handle string content directly
|
|
92
|
+
if (typeof m.content === 'string') {
|
|
93
|
+
return {
|
|
94
|
+
role: m.role,
|
|
95
|
+
content: m.content
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// Handle array content - convert to string
|
|
99
|
+
const textContent = m.content
|
|
100
|
+
.filter(c => c.type === 'text')
|
|
101
|
+
.map(c => c.text || '')
|
|
102
|
+
.join('');
|
|
103
|
+
return {
|
|
104
|
+
role: m.role,
|
|
105
|
+
content: textContent
|
|
106
|
+
};
|
|
107
|
+
});
|
|
108
|
+
// Build system message if provided
|
|
109
|
+
let systemMessage;
|
|
110
|
+
if (options.system && options.system.length > 0) {
|
|
111
|
+
systemMessage = options.system.map(s => s.text).join('\n\n');
|
|
112
|
+
}
|
|
113
|
+
const response = await this.client.messages.create({
|
|
114
|
+
model,
|
|
115
|
+
messages,
|
|
116
|
+
max_tokens: options.maxTokens || 4096,
|
|
117
|
+
...(systemMessage ? { system: systemMessage } : {}),
|
|
118
|
+
...(options.temperature !== undefined ? { temperature: options.temperature } : {})
|
|
119
|
+
});
|
|
120
|
+
this.requestCount++;
|
|
121
|
+
// Extract text content from response
|
|
122
|
+
const content = response.content.map((block) => ({
|
|
123
|
+
type: 'text',
|
|
124
|
+
text: block.type === 'text' ? block.text : ''
|
|
125
|
+
}));
|
|
126
|
+
// Calculate cost
|
|
127
|
+
const cost = this.trackCost({
|
|
128
|
+
input_tokens: response.usage.input_tokens,
|
|
129
|
+
output_tokens: response.usage.output_tokens,
|
|
130
|
+
cache_creation_input_tokens: response.usage.cache_creation_input_tokens,
|
|
131
|
+
cache_read_input_tokens: response.usage.cache_read_input_tokens
|
|
132
|
+
});
|
|
133
|
+
const result = {
|
|
134
|
+
content,
|
|
135
|
+
usage: {
|
|
136
|
+
input_tokens: response.usage.input_tokens,
|
|
137
|
+
output_tokens: response.usage.output_tokens,
|
|
138
|
+
cache_creation_input_tokens: response.usage.cache_creation_input_tokens,
|
|
139
|
+
cache_read_input_tokens: response.usage.cache_read_input_tokens
|
|
140
|
+
},
|
|
141
|
+
model: response.model,
|
|
142
|
+
stop_reason: response.stop_reason,
|
|
143
|
+
id: response.id,
|
|
144
|
+
metadata: {
|
|
145
|
+
latency: Date.now() - startTime,
|
|
146
|
+
cost
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
this.logger.debug('Claude completion successful', {
|
|
150
|
+
model,
|
|
151
|
+
inputTokens: response.usage.input_tokens,
|
|
152
|
+
outputTokens: response.usage.output_tokens,
|
|
153
|
+
latency: result.metadata?.latency
|
|
154
|
+
});
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
const err = error;
|
|
159
|
+
throw new ILLMProvider_1.LLMProviderError(`Claude completion failed: ${err.message}`, 'claude', this.getErrorCode(error), this.isRetryableError(error), err);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Stream a completion
|
|
164
|
+
*/
|
|
165
|
+
async *streamComplete(options) {
|
|
166
|
+
this.ensureInitialized();
|
|
167
|
+
const model = options.model || this.config.defaultModel;
|
|
168
|
+
try {
|
|
169
|
+
// Build messages array
|
|
170
|
+
const messages = options.messages.map(m => {
|
|
171
|
+
if (typeof m.content === 'string') {
|
|
172
|
+
return {
|
|
173
|
+
role: m.role,
|
|
174
|
+
content: m.content
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
const textContent = m.content
|
|
178
|
+
.filter(c => c.type === 'text')
|
|
179
|
+
.map(c => c.text || '')
|
|
180
|
+
.join('');
|
|
181
|
+
return {
|
|
182
|
+
role: m.role,
|
|
183
|
+
content: textContent
|
|
184
|
+
};
|
|
185
|
+
});
|
|
186
|
+
let systemMessage;
|
|
187
|
+
if (options.system && options.system.length > 0) {
|
|
188
|
+
systemMessage = options.system.map(s => s.text).join('\n\n');
|
|
189
|
+
}
|
|
190
|
+
const stream = this.client.messages.stream({
|
|
191
|
+
model,
|
|
192
|
+
messages,
|
|
193
|
+
max_tokens: options.maxTokens || 4096,
|
|
194
|
+
...(systemMessage ? { system: systemMessage } : {}),
|
|
195
|
+
...(options.temperature !== undefined ? { temperature: options.temperature } : {})
|
|
196
|
+
});
|
|
197
|
+
for await (const event of stream) {
|
|
198
|
+
const streamEvent = this.mapStreamEvent(event);
|
|
199
|
+
if (streamEvent) {
|
|
200
|
+
yield streamEvent;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
this.requestCount++;
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
const err = error;
|
|
207
|
+
throw new ILLMProvider_1.LLMProviderError(`Claude stream failed: ${err.message}`, 'claude', this.getErrorCode(error), this.isRetryableError(error), err);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Generate embeddings (Claude doesn't natively support embeddings)
|
|
212
|
+
*/
|
|
213
|
+
async embed(options) {
|
|
214
|
+
throw new ILLMProvider_1.LLMProviderError('Claude does not support native embeddings. Use a dedicated embedding model.', 'claude', 'UNSUPPORTED', false);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Count tokens in text
|
|
218
|
+
*/
|
|
219
|
+
async countTokens(options) {
|
|
220
|
+
this.ensureInitialized();
|
|
221
|
+
try {
|
|
222
|
+
// Use Anthropic's token counting endpoint
|
|
223
|
+
const result = await this.client.messages.countTokens({
|
|
224
|
+
model: options.model || this.config.defaultModel,
|
|
225
|
+
messages: [{ role: 'user', content: options.text }]
|
|
226
|
+
});
|
|
227
|
+
return result.input_tokens;
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// Fallback: estimate ~4 chars per token
|
|
231
|
+
return Math.ceil(options.text.length / 4);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Health check
|
|
236
|
+
*/
|
|
237
|
+
async healthCheck() {
|
|
238
|
+
const startTime = Date.now();
|
|
239
|
+
try {
|
|
240
|
+
if (!this.isInitialized) {
|
|
241
|
+
await this.initialize();
|
|
242
|
+
}
|
|
243
|
+
// Simple health check with minimal tokens
|
|
244
|
+
await this.complete({
|
|
245
|
+
model: this.config.defaultModel,
|
|
246
|
+
messages: [{ role: 'user', content: 'ping' }],
|
|
247
|
+
maxTokens: 5
|
|
248
|
+
});
|
|
249
|
+
return {
|
|
250
|
+
healthy: true,
|
|
251
|
+
latency: Date.now() - startTime,
|
|
252
|
+
timestamp: new Date(),
|
|
253
|
+
metadata: {
|
|
254
|
+
model: this.config.defaultModel,
|
|
255
|
+
requestCount: this.requestCount,
|
|
256
|
+
totalCost: this.totalCost
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
return {
|
|
262
|
+
healthy: false,
|
|
263
|
+
error: error.message,
|
|
264
|
+
timestamp: new Date()
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Get provider metadata
|
|
270
|
+
*/
|
|
271
|
+
getMetadata() {
|
|
272
|
+
const pricing = CLAUDE_PRICING[this.config.defaultModel] || { input: 3.0, output: 15.0 };
|
|
273
|
+
return {
|
|
274
|
+
name: 'claude',
|
|
275
|
+
version: '1.0.0',
|
|
276
|
+
models: Object.keys(CLAUDE_PRICING),
|
|
277
|
+
capabilities: {
|
|
278
|
+
streaming: true,
|
|
279
|
+
caching: true,
|
|
280
|
+
embeddings: false,
|
|
281
|
+
vision: true
|
|
282
|
+
},
|
|
283
|
+
costs: {
|
|
284
|
+
inputPerMillion: pricing.input,
|
|
285
|
+
outputPerMillion: pricing.output,
|
|
286
|
+
cacheWriteMultiplier: 1.25,
|
|
287
|
+
cacheReadMultiplier: 0.1
|
|
288
|
+
},
|
|
289
|
+
location: 'cloud'
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Shutdown the provider
|
|
294
|
+
*/
|
|
295
|
+
async shutdown() {
|
|
296
|
+
this.client = undefined;
|
|
297
|
+
this.isInitialized = false;
|
|
298
|
+
this.logger.info('ClaudeProvider shutdown', {
|
|
299
|
+
totalCost: this.totalCost,
|
|
300
|
+
requestCount: this.requestCount
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Track cost for a request
|
|
305
|
+
*/
|
|
306
|
+
trackCost(usage) {
|
|
307
|
+
const model = this.config.defaultModel;
|
|
308
|
+
const pricing = CLAUDE_PRICING[model] || { input: 3.0, output: 15.0 };
|
|
309
|
+
let inputCost = (usage.input_tokens / 1000000) * pricing.input;
|
|
310
|
+
const outputCost = (usage.output_tokens / 1000000) * pricing.output;
|
|
311
|
+
// Adjust for cache pricing
|
|
312
|
+
if (usage.cache_creation_input_tokens) {
|
|
313
|
+
const cacheWriteCost = (usage.cache_creation_input_tokens / 1000000) * pricing.input * 1.25;
|
|
314
|
+
inputCost += cacheWriteCost;
|
|
315
|
+
}
|
|
316
|
+
if (usage.cache_read_input_tokens) {
|
|
317
|
+
const cacheReadCost = (usage.cache_read_input_tokens / 1000000) * pricing.input * 0.1;
|
|
318
|
+
inputCost += cacheReadCost;
|
|
319
|
+
}
|
|
320
|
+
const totalCost = inputCost + outputCost;
|
|
321
|
+
this.totalCost += totalCost;
|
|
322
|
+
return totalCost;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Get total cost incurred
|
|
326
|
+
*/
|
|
327
|
+
getTotalCost() {
|
|
328
|
+
return this.totalCost;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Ensure provider is initialized
|
|
332
|
+
*/
|
|
333
|
+
ensureInitialized() {
|
|
334
|
+
if (!this.isInitialized || !this.client) {
|
|
335
|
+
throw new ILLMProvider_1.LLMProviderError('ClaudeProvider not initialized. Call initialize() first.', 'claude', 'NOT_INITIALIZED', false);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Map Anthropic stream event to LLMStreamEvent
|
|
340
|
+
*/
|
|
341
|
+
mapStreamEvent(event) {
|
|
342
|
+
switch (event.type) {
|
|
343
|
+
case 'message_start':
|
|
344
|
+
return {
|
|
345
|
+
type: 'message_start',
|
|
346
|
+
message: {
|
|
347
|
+
id: event.message.id,
|
|
348
|
+
model: event.message.model,
|
|
349
|
+
stop_reason: (event.message.stop_reason ?? undefined),
|
|
350
|
+
usage: event.message.usage ? {
|
|
351
|
+
input_tokens: event.message.usage.input_tokens,
|
|
352
|
+
output_tokens: event.message.usage.output_tokens
|
|
353
|
+
} : undefined
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
case 'content_block_start':
|
|
357
|
+
// Only handle text blocks
|
|
358
|
+
if (event.content_block?.type === 'text') {
|
|
359
|
+
return {
|
|
360
|
+
type: 'content_block_start',
|
|
361
|
+
content_block: {
|
|
362
|
+
type: 'text',
|
|
363
|
+
text: event.content_block.text
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
return null;
|
|
368
|
+
case 'content_block_delta':
|
|
369
|
+
// Only handle text deltas
|
|
370
|
+
if ('delta' in event && event.delta?.type === 'text_delta') {
|
|
371
|
+
return {
|
|
372
|
+
type: 'content_block_delta',
|
|
373
|
+
delta: {
|
|
374
|
+
type: 'text_delta',
|
|
375
|
+
text: event.delta.text
|
|
376
|
+
}
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
return null;
|
|
380
|
+
case 'content_block_stop':
|
|
381
|
+
return { type: 'content_block_stop' };
|
|
382
|
+
case 'message_delta':
|
|
383
|
+
return {
|
|
384
|
+
type: 'message_delta',
|
|
385
|
+
message: {
|
|
386
|
+
usage: event.usage ? {
|
|
387
|
+
input_tokens: 0, // Not available in delta
|
|
388
|
+
output_tokens: event.usage.output_tokens
|
|
389
|
+
} : undefined
|
|
390
|
+
}
|
|
391
|
+
};
|
|
392
|
+
case 'message_stop':
|
|
393
|
+
return { type: 'message_stop' };
|
|
394
|
+
default:
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Get error code from exception
|
|
400
|
+
*/
|
|
401
|
+
getErrorCode(error) {
|
|
402
|
+
if (error instanceof sdk_1.default.APIError) {
|
|
403
|
+
return `API_${error.status}`;
|
|
404
|
+
}
|
|
405
|
+
return 'UNKNOWN';
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Check if error is retryable
|
|
409
|
+
*/
|
|
410
|
+
isRetryableError(error) {
|
|
411
|
+
if (error instanceof sdk_1.default.APIError) {
|
|
412
|
+
return [429, 500, 502, 503, 504].includes(error.status);
|
|
413
|
+
}
|
|
414
|
+
return false;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
exports.ClaudeProvider = ClaudeProvider;
|
|
418
|
+
//# sourceMappingURL=ClaudeProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeProvider.js","sourceRoot":"","sources":["../../src/providers/ClaudeProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HybridRouter - Intelligent LLM Provider Router
|
|
3
|
+
*
|
|
4
|
+
* Provides intelligent routing between local (ruvllm) and cloud (Claude, GPT) providers
|
|
5
|
+
* with circuit breakers, cost optimization, and adaptive learning.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Task complexity analysis for optimal routing
|
|
9
|
+
* - Latency-aware provider selection
|
|
10
|
+
* - Cost tracking and savings estimation
|
|
11
|
+
* - Circuit breaker pattern for failing providers
|
|
12
|
+
* - Priority queuing for urgent requests
|
|
13
|
+
* - Learning from routing outcomes
|
|
14
|
+
* - Privacy-first routing for sensitive data
|
|
15
|
+
*
|
|
16
|
+
* @module providers/HybridRouter
|
|
17
|
+
* @version 1.0.0
|
|
18
|
+
*/
|
|
19
|
+
import { ILLMProvider, LLMProviderConfig, LLMCompletionOptions, LLMCompletionResponse, LLMStreamEvent, LLMEmbeddingOptions, LLMEmbeddingResponse, LLMTokenCountOptions, LLMHealthStatus, LLMProviderMetadata } from './ILLMProvider';
|
|
20
|
+
import { ClaudeProviderConfig } from './ClaudeProvider';
|
|
21
|
+
import { RuvllmProviderConfig } from './RuvllmProvider';
|
|
22
|
+
/**
|
|
23
|
+
* Request priority levels
|
|
24
|
+
*/
|
|
25
|
+
export declare enum RequestPriority {
|
|
26
|
+
LOW = 0,
|
|
27
|
+
NORMAL = 1,
|
|
28
|
+
HIGH = 2,
|
|
29
|
+
URGENT = 3
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Task complexity classification
|
|
33
|
+
*/
|
|
34
|
+
export declare enum TaskComplexity {
|
|
35
|
+
SIMPLE = "simple",// Pattern matching, simple Q&A
|
|
36
|
+
MODERATE = "moderate",// Standard reasoning
|
|
37
|
+
COMPLEX = "complex",// Deep reasoning, code generation
|
|
38
|
+
VERY_COMPLEX = "very_complex"
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Routing strategy
|
|
42
|
+
*/
|
|
43
|
+
export declare enum RoutingStrategy {
|
|
44
|
+
COST_OPTIMIZED = "cost_optimized",// Minimize cost
|
|
45
|
+
LATENCY_OPTIMIZED = "latency_optimized",// Minimize latency
|
|
46
|
+
QUALITY_OPTIMIZED = "quality_optimized",// Maximize quality
|
|
47
|
+
BALANCED = "balanced",// Balance all factors
|
|
48
|
+
PRIVACY_FIRST = "privacy_first"
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Routing decision metadata
|
|
52
|
+
*/
|
|
53
|
+
export interface RoutingDecision {
|
|
54
|
+
provider: 'local' | 'cloud';
|
|
55
|
+
providerName: string;
|
|
56
|
+
reason: string;
|
|
57
|
+
estimatedCost: number;
|
|
58
|
+
estimatedLatency: number;
|
|
59
|
+
complexity: TaskComplexity;
|
|
60
|
+
priority: RequestPriority;
|
|
61
|
+
timestamp: Date;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Cost savings report
|
|
65
|
+
*/
|
|
66
|
+
export interface CostSavingsReport {
|
|
67
|
+
totalRequests: number;
|
|
68
|
+
localRequests: number;
|
|
69
|
+
cloudRequests: number;
|
|
70
|
+
totalCost: number;
|
|
71
|
+
estimatedCloudCost: number;
|
|
72
|
+
savings: number;
|
|
73
|
+
savingsPercentage: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Hybrid router configuration
|
|
77
|
+
*/
|
|
78
|
+
export interface HybridRouterConfig extends LLMProviderConfig {
|
|
79
|
+
/** Claude provider configuration */
|
|
80
|
+
claude?: ClaudeProviderConfig;
|
|
81
|
+
/** Ruvllm provider configuration */
|
|
82
|
+
ruvllm?: RuvllmProviderConfig;
|
|
83
|
+
/** Default routing strategy */
|
|
84
|
+
defaultStrategy?: RoutingStrategy;
|
|
85
|
+
/** Enable circuit breakers */
|
|
86
|
+
enableCircuitBreaker?: boolean;
|
|
87
|
+
/** Circuit breaker failure threshold */
|
|
88
|
+
circuitBreakerThreshold?: number;
|
|
89
|
+
/** Circuit breaker reset timeout (ms) */
|
|
90
|
+
circuitBreakerTimeout?: number;
|
|
91
|
+
/** Maximum latency for local provider (ms) */
|
|
92
|
+
maxLocalLatency?: number;
|
|
93
|
+
/** Enable learning from outcomes */
|
|
94
|
+
enableLearning?: boolean;
|
|
95
|
+
/** Privacy-sensitive keywords for automatic local routing */
|
|
96
|
+
privacyKeywords?: string[];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* HybridRouter - Intelligent provider routing implementation
|
|
100
|
+
*
|
|
101
|
+
* Routes LLM requests between local and cloud providers based on:
|
|
102
|
+
* - Task complexity and required capabilities
|
|
103
|
+
* - Latency and cost constraints
|
|
104
|
+
* - Provider health and circuit breaker state
|
|
105
|
+
* - Request priority
|
|
106
|
+
* - Privacy requirements
|
|
107
|
+
*/
|
|
108
|
+
export declare class HybridRouter implements ILLMProvider {
|
|
109
|
+
private readonly logger;
|
|
110
|
+
private config;
|
|
111
|
+
private localProvider?;
|
|
112
|
+
private cloudProvider?;
|
|
113
|
+
private circuitBreakers;
|
|
114
|
+
private routingHistory;
|
|
115
|
+
private isInitialized;
|
|
116
|
+
private totalCost;
|
|
117
|
+
private requestCount;
|
|
118
|
+
private localRequestCount;
|
|
119
|
+
private cloudRequestCount;
|
|
120
|
+
constructor(config?: HybridRouterConfig);
|
|
121
|
+
/**
|
|
122
|
+
* Initialize the hybrid router and its providers
|
|
123
|
+
*/
|
|
124
|
+
initialize(): Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Complete a prompt with intelligent routing
|
|
127
|
+
*/
|
|
128
|
+
complete(options: LLMCompletionOptions): Promise<LLMCompletionResponse>;
|
|
129
|
+
/**
|
|
130
|
+
* Stream completion with routing
|
|
131
|
+
*/
|
|
132
|
+
streamComplete(options: LLMCompletionOptions): AsyncIterableIterator<LLMStreamEvent>;
|
|
133
|
+
/**
|
|
134
|
+
* Generate embeddings (prefer local)
|
|
135
|
+
*/
|
|
136
|
+
embed(options: LLMEmbeddingOptions): Promise<LLMEmbeddingResponse>;
|
|
137
|
+
/**
|
|
138
|
+
* Count tokens
|
|
139
|
+
*/
|
|
140
|
+
countTokens(options: LLMTokenCountOptions): Promise<number>;
|
|
141
|
+
/**
|
|
142
|
+
* Health check all providers
|
|
143
|
+
*/
|
|
144
|
+
healthCheck(): Promise<LLMHealthStatus>;
|
|
145
|
+
/**
|
|
146
|
+
* Get metadata (aggregated from all providers)
|
|
147
|
+
*/
|
|
148
|
+
getMetadata(): LLMProviderMetadata;
|
|
149
|
+
/**
|
|
150
|
+
* Shutdown all providers
|
|
151
|
+
*/
|
|
152
|
+
shutdown(): Promise<void>;
|
|
153
|
+
/**
|
|
154
|
+
* Track cost (aggregated across providers)
|
|
155
|
+
*/
|
|
156
|
+
trackCost(usage: LLMCompletionResponse['usage']): number;
|
|
157
|
+
/**
|
|
158
|
+
* Get cost savings report
|
|
159
|
+
*/
|
|
160
|
+
getCostSavingsReport(): CostSavingsReport;
|
|
161
|
+
/**
|
|
162
|
+
* Get routing statistics
|
|
163
|
+
*/
|
|
164
|
+
getRoutingStats(): {
|
|
165
|
+
totalDecisions: number;
|
|
166
|
+
localDecisions: number;
|
|
167
|
+
cloudDecisions: number;
|
|
168
|
+
averageLocalLatency: number;
|
|
169
|
+
averageCloudLatency: number;
|
|
170
|
+
successRate: number;
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* Make intelligent routing decision
|
|
174
|
+
*/
|
|
175
|
+
private makeRoutingDecision;
|
|
176
|
+
/**
|
|
177
|
+
* Analyze task complexity
|
|
178
|
+
*/
|
|
179
|
+
private analyzeComplexity;
|
|
180
|
+
/**
|
|
181
|
+
* Check for privacy-sensitive data
|
|
182
|
+
*/
|
|
183
|
+
private containsPrivacySensitiveData;
|
|
184
|
+
/**
|
|
185
|
+
* Check if provider is available (circuit breaker check)
|
|
186
|
+
*/
|
|
187
|
+
private isProviderAvailable;
|
|
188
|
+
/**
|
|
189
|
+
* Execute with circuit breaker protection
|
|
190
|
+
*/
|
|
191
|
+
private executeWithCircuitBreaker;
|
|
192
|
+
/**
|
|
193
|
+
* Execute fallback to alternative provider
|
|
194
|
+
*/
|
|
195
|
+
private executeFallback;
|
|
196
|
+
/**
|
|
197
|
+
* Initialize circuit breaker for a provider
|
|
198
|
+
*/
|
|
199
|
+
private initCircuitBreaker;
|
|
200
|
+
/**
|
|
201
|
+
* Create routing decision object
|
|
202
|
+
*/
|
|
203
|
+
private createDecision;
|
|
204
|
+
/**
|
|
205
|
+
* Calculate actual cost from response
|
|
206
|
+
*/
|
|
207
|
+
private calculateCost;
|
|
208
|
+
/**
|
|
209
|
+
* Record routing outcome for learning
|
|
210
|
+
*/
|
|
211
|
+
private recordOutcome;
|
|
212
|
+
/**
|
|
213
|
+
* Ensure router is initialized
|
|
214
|
+
*/
|
|
215
|
+
private ensureInitialized;
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=HybridRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HybridRouter.d.ts","sourceRoot":"","sources":["../../src/providers/HybridRouter.ts"],"names":[],"mappings":"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"}
|