agentic-qe 2.6.1 → 2.6.2
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 +71 -0
- package/README.md +222 -159
- package/dist/agents/BaseAgent.d.ts +19 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +41 -1
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CodeIntelligenceAgent.d.ts +14 -0
- package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -1
- package/dist/agents/CodeIntelligenceAgent.js +66 -0
- package/dist/agents/CodeIntelligenceAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +8 -0
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +65 -1
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts +2 -2
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +16 -6
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/adapters/AgentLLMAdapter.d.ts +127 -0
- package/dist/agents/adapters/AgentLLMAdapter.d.ts.map +1 -0
- package/dist/agents/adapters/AgentLLMAdapter.js +366 -0
- package/dist/agents/adapters/AgentLLMAdapter.js.map +1 -0
- package/dist/agents/adapters/index.d.ts +1 -0
- package/dist/agents/adapters/index.d.ts.map +1 -1
- package/dist/agents/adapters/index.js +5 -1
- package/dist/agents/adapters/index.js.map +1 -1
- package/dist/agents/interfaces/IAgentLLM.d.ts +257 -0
- package/dist/agents/interfaces/IAgentLLM.d.ts.map +1 -0
- package/dist/agents/interfaces/IAgentLLM.js +39 -0
- package/dist/agents/interfaces/IAgentLLM.js.map +1 -0
- package/dist/agents/interfaces/index.d.ts +10 -0
- package/dist/agents/interfaces/index.d.ts.map +1 -0
- package/dist/agents/interfaces/index.js +14 -0
- package/dist/agents/interfaces/index.js.map +1 -0
- package/dist/agents/n8n/N8nBaseAgent.d.ts +18 -0
- package/dist/agents/n8n/N8nBaseAgent.d.ts.map +1 -1
- package/dist/agents/n8n/N8nBaseAgent.js +80 -0
- package/dist/agents/n8n/N8nBaseAgent.js.map +1 -1
- package/dist/cli/commands/providers.d.ts +50 -0
- package/dist/cli/commands/providers.d.ts.map +1 -0
- package/dist/cli/commands/providers.js +403 -0
- package/dist/cli/commands/providers.js.map +1 -0
- package/dist/cli/index.js +62 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/code-intelligence/indexing/FileWatcher.d.ts.map +1 -1
- package/dist/code-intelligence/indexing/FileWatcher.js +11 -8
- package/dist/code-intelligence/indexing/FileWatcher.js.map +1 -1
- package/dist/config/ConfigLoader.d.ts +85 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +420 -0
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/config/ProviderConfig.d.ts +153 -0
- package/dist/config/ProviderConfig.d.ts.map +1 -0
- package/dist/config/ProviderConfig.js +155 -0
- package/dist/config/ProviderConfig.js.map +1 -0
- package/dist/config/index.d.ts +35 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +45 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/memory/HNSWPatternStore.d.ts.map +1 -1
- package/dist/memory/HNSWPatternStore.js +23 -0
- package/dist/memory/HNSWPatternStore.js.map +1 -1
- package/dist/memory/RuVectorPatternStore.d.ts +5 -0
- package/dist/memory/RuVectorPatternStore.d.ts.map +1 -1
- package/dist/memory/RuVectorPatternStore.js +11 -0
- package/dist/memory/RuVectorPatternStore.js.map +1 -1
- package/dist/providers/CostOptimizationStrategies.d.ts +297 -0
- package/dist/providers/CostOptimizationStrategies.d.ts.map +1 -0
- package/dist/providers/CostOptimizationStrategies.js +831 -0
- package/dist/providers/CostOptimizationStrategies.js.map +1 -0
- package/dist/providers/HybridRouter.d.ts +142 -5
- package/dist/providers/HybridRouter.d.ts.map +1 -1
- package/dist/providers/HybridRouter.js +472 -6
- package/dist/providers/HybridRouter.js.map +1 -1
- package/dist/providers/HybridRouterComplexityIntegration.d.ts +169 -0
- package/dist/providers/HybridRouterComplexityIntegration.d.ts.map +1 -0
- package/dist/providers/HybridRouterComplexityIntegration.js +319 -0
- package/dist/providers/HybridRouterComplexityIntegration.js.map +1 -0
- package/dist/providers/HybridRouterModelSelection.d.ts +106 -0
- package/dist/providers/HybridRouterModelSelection.d.ts.map +1 -0
- package/dist/providers/HybridRouterModelSelection.js +420 -0
- package/dist/providers/HybridRouterModelSelection.js.map +1 -0
- package/dist/providers/LLMProviderFactory.d.ts +23 -9
- package/dist/providers/LLMProviderFactory.d.ts.map +1 -1
- package/dist/providers/LLMProviderFactory.js +54 -11
- package/dist/providers/LLMProviderFactory.js.map +1 -1
- package/dist/providers/OllamaProvider.d.ts +122 -0
- package/dist/providers/OllamaProvider.d.ts.map +1 -0
- package/dist/providers/OllamaProvider.js +425 -0
- package/dist/providers/OllamaProvider.js.map +1 -0
- package/dist/providers/index.d.ts +6 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +17 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/routing/ComplexityClassifier.d.ts +266 -0
- package/dist/routing/ComplexityClassifier.d.ts.map +1 -0
- package/dist/routing/ComplexityClassifier.js +567 -0
- package/dist/routing/ComplexityClassifier.js.map +1 -0
- package/dist/routing/ModelCapabilityRegistry.d.ts +98 -0
- package/dist/routing/ModelCapabilityRegistry.d.ts.map +1 -0
- package/dist/routing/ModelCapabilityRegistry.js +216 -0
- package/dist/routing/ModelCapabilityRegistry.js.map +1 -0
- package/dist/routing/index.d.ts +13 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +24 -0
- package/dist/routing/index.js.map +1 -0
- package/docs/reference/model-capability-registry.md +402 -0
- package/docs/reference/provider-config-schema.md +608 -0
- package/package.json +19 -4
|
@@ -0,0 +1,608 @@
|
|
|
1
|
+
# LLM Provider Configuration Schema
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This reference documents all configuration options for the multi-provider LLM system in Agentic QE Fleet v2.6+.
|
|
6
|
+
|
|
7
|
+
## Factory Configuration
|
|
8
|
+
|
|
9
|
+
### LLMProviderFactory
|
|
10
|
+
|
|
11
|
+
Main factory for creating and managing LLM providers.
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
interface LLMProviderFactoryConfig {
|
|
15
|
+
// Provider-specific configurations
|
|
16
|
+
claude?: ClaudeProviderConfig;
|
|
17
|
+
ruvllm?: RuvllmProviderConfig;
|
|
18
|
+
openrouter?: OpenRouterConfig;
|
|
19
|
+
|
|
20
|
+
// Global settings
|
|
21
|
+
defaultProvider?: ProviderType;
|
|
22
|
+
enableFallback?: boolean;
|
|
23
|
+
healthCheckInterval?: number;
|
|
24
|
+
maxConsecutiveFailures?: number;
|
|
25
|
+
enableSmartDetection?: boolean;
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Global Settings
|
|
30
|
+
|
|
31
|
+
| Property | Type | Default | Description |
|
|
32
|
+
|----------|------|---------|-------------|
|
|
33
|
+
| `defaultProvider` | `'claude' \| 'ruvllm' \| 'openrouter' \| 'auto'` | `'auto'` | Default provider to use |
|
|
34
|
+
| `enableFallback` | `boolean` | `true` | Enable automatic fallback on failure |
|
|
35
|
+
| `healthCheckInterval` | `number` | `60000` | Health check interval in ms |
|
|
36
|
+
| `maxConsecutiveFailures` | `number` | `3` | Max failures before marking unhealthy |
|
|
37
|
+
| `enableSmartDetection` | `boolean` | `true` | Auto-detect best provider |
|
|
38
|
+
|
|
39
|
+
### Provider Types
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
type ProviderType = 'claude' | 'ruvllm' | 'openrouter' | 'auto';
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
- **claude**: Direct Anthropic Claude API
|
|
46
|
+
- **ruvllm**: Local inference via Ollama/RuvLLM
|
|
47
|
+
- **openrouter**: OpenRouter (300+ models)
|
|
48
|
+
- **auto**: Automatic provider selection
|
|
49
|
+
|
|
50
|
+
## Claude Provider Configuration
|
|
51
|
+
|
|
52
|
+
### ClaudeProviderConfig
|
|
53
|
+
|
|
54
|
+
Configuration for Anthropic Claude API.
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
interface ClaudeProviderConfig extends LLMProviderConfig {
|
|
58
|
+
apiKey?: string;
|
|
59
|
+
defaultModel?: string;
|
|
60
|
+
enableCaching?: boolean;
|
|
61
|
+
baseUrl?: string;
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Properties
|
|
66
|
+
|
|
67
|
+
| Property | Type | Default | Description |
|
|
68
|
+
|----------|------|---------|-------------|
|
|
69
|
+
| `apiKey` | `string` | `process.env.ANTHROPIC_API_KEY` | Anthropic API key |
|
|
70
|
+
| `defaultModel` | `string` | `'claude-sonnet-4-20250514'` | Default model to use |
|
|
71
|
+
| `enableCaching` | `boolean` | `true` | Enable prompt caching |
|
|
72
|
+
| `baseUrl` | `string` | `undefined` | Custom API base URL |
|
|
73
|
+
| `name` | `string` | `'claude'` | Provider name |
|
|
74
|
+
| `debug` | `boolean` | `false` | Enable debug logging |
|
|
75
|
+
| `timeout` | `number` | `60000` | Request timeout (ms) |
|
|
76
|
+
| `maxRetries` | `number` | `3` | Maximum retry attempts |
|
|
77
|
+
|
|
78
|
+
### Available Models
|
|
79
|
+
|
|
80
|
+
| Model | Input Cost | Output Cost | Context | Best For |
|
|
81
|
+
|-------|-----------|-------------|---------|----------|
|
|
82
|
+
| `claude-sonnet-4-20250514` | $3/M | $15/M | 200K | General purpose |
|
|
83
|
+
| `claude-opus-4-20250514` | $15/M | $75/M | 200K | Complex reasoning |
|
|
84
|
+
| `claude-3-5-haiku-20241022` | $0.8/M | $4/M | 200K | Fast, cost-effective |
|
|
85
|
+
|
|
86
|
+
### Example
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
const factory = new LLMProviderFactory({
|
|
90
|
+
claude: {
|
|
91
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
92
|
+
defaultModel: 'claude-sonnet-4-20250514',
|
|
93
|
+
enableCaching: true,
|
|
94
|
+
timeout: 120000,
|
|
95
|
+
maxRetries: 5
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## OpenRouter Configuration
|
|
101
|
+
|
|
102
|
+
### OpenRouterConfig
|
|
103
|
+
|
|
104
|
+
Configuration for OpenRouter API.
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
interface OpenRouterConfig extends LLMProviderConfig {
|
|
108
|
+
apiKey?: string;
|
|
109
|
+
defaultModel?: string;
|
|
110
|
+
siteUrl?: string;
|
|
111
|
+
siteName?: string;
|
|
112
|
+
fallbackModels?: string[];
|
|
113
|
+
enableModelDiscovery?: boolean;
|
|
114
|
+
baseUrl?: string;
|
|
115
|
+
enableAutoRoute?: boolean;
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Properties
|
|
120
|
+
|
|
121
|
+
| Property | Type | Default | Description |
|
|
122
|
+
|----------|------|---------|-------------|
|
|
123
|
+
| `apiKey` | `string` | `process.env.OPENROUTER_API_KEY` | OpenRouter API key |
|
|
124
|
+
| `defaultModel` | `string` | `'mistralai/devstral-2512:free'` | Default model |
|
|
125
|
+
| `siteUrl` | `string` | `process.env.OPENROUTER_SITE_URL` | Your site URL |
|
|
126
|
+
| `siteName` | `string` | `'Agentic-QE-Fleet'` | Your site name |
|
|
127
|
+
| `fallbackModels` | `string[]` | See below | Fallback model chain |
|
|
128
|
+
| `enableModelDiscovery` | `boolean` | `true` | Fetch available models |
|
|
129
|
+
| `baseUrl` | `string` | `'https://openrouter.ai/api/v1'` | API base URL |
|
|
130
|
+
| `enableAutoRoute` | `boolean` | `true` | Enable auto-routing |
|
|
131
|
+
| `name` | `string` | `'openrouter'` | Provider name |
|
|
132
|
+
| `debug` | `boolean` | `false` | Enable debug logging |
|
|
133
|
+
| `timeout` | `number` | `60000` | Request timeout (ms) |
|
|
134
|
+
| `maxRetries` | `number` | `3` | Maximum retry attempts |
|
|
135
|
+
|
|
136
|
+
### Default Fallback Chain
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
fallbackModels: [
|
|
140
|
+
'mistralai/devstral-small-2505', // $0.06/$0.12 per M
|
|
141
|
+
'mistralai/devstral-small', // $0.07/$0.28 per M
|
|
142
|
+
'mistralai/devstral-medium', // $0.40/$2.00 per M
|
|
143
|
+
'openai/gpt-4o-mini', // $0.15/$0.60 per M
|
|
144
|
+
]
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Recommended Models
|
|
148
|
+
|
|
149
|
+
| Constant | Model ID | Cost | Description |
|
|
150
|
+
|----------|----------|------|-------------|
|
|
151
|
+
| `AGENTIC_CODING_FREE` | `mistralai/devstral-2512:free` | FREE | Best free agentic coding (123B) |
|
|
152
|
+
| `CHEAPEST_PAID` | `mistralai/devstral-small-2505` | $0.06/$0.12 | Cheapest paid option |
|
|
153
|
+
| `LIGHTWEIGHT_CODING` | `mistralai/devstral-small` | $0.07/$0.28 | 24B, good balance |
|
|
154
|
+
| `COMPLEX_REASONING` | `mistralai/devstral-medium` | $0.40/$2.00 | Complex tasks |
|
|
155
|
+
| `QWEN_CODER` | `qwen/qwen-2.5-coder-32b-instruct` | $0.18/$0.18 | Well-tested coder |
|
|
156
|
+
| `HIGH_QUALITY` | `anthropic/claude-3.5-sonnet` | $3/$15 | Highest quality |
|
|
157
|
+
| `COST_EFFECTIVE` | `openai/gpt-4o-mini` | $0.15/$0.60 | Cost-effective vendor |
|
|
158
|
+
|
|
159
|
+
### Example
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
import { LLMProviderFactory, RECOMMENDED_MODELS } from 'agentic-qe';
|
|
163
|
+
|
|
164
|
+
const factory = new LLMProviderFactory({
|
|
165
|
+
openrouter: {
|
|
166
|
+
apiKey: process.env.OPENROUTER_API_KEY,
|
|
167
|
+
defaultModel: RECOMMENDED_MODELS.AGENTIC_CODING_FREE,
|
|
168
|
+
fallbackModels: [
|
|
169
|
+
RECOMMENDED_MODELS.CHEAPEST_PAID,
|
|
170
|
+
RECOMMENDED_MODELS.QWEN_CODER,
|
|
171
|
+
RECOMMENDED_MODELS.HIGH_QUALITY
|
|
172
|
+
],
|
|
173
|
+
enableAutoRoute: true,
|
|
174
|
+
siteUrl: 'https://my-project.com',
|
|
175
|
+
siteName: 'My Testing Project'
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## RuvLLM/Ollama Configuration
|
|
181
|
+
|
|
182
|
+
### RuvllmProviderConfig
|
|
183
|
+
|
|
184
|
+
Configuration for local LLM inference.
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
interface RuvllmProviderConfig extends LLMProviderConfig {
|
|
188
|
+
ruvllmPath?: string;
|
|
189
|
+
port?: number;
|
|
190
|
+
defaultModel?: string;
|
|
191
|
+
gpuLayers?: number;
|
|
192
|
+
contextSize?: number;
|
|
193
|
+
threads?: number;
|
|
194
|
+
defaultTemperature?: number;
|
|
195
|
+
enableEmbeddings?: boolean;
|
|
196
|
+
enableTRM?: boolean;
|
|
197
|
+
enableSONA?: boolean;
|
|
198
|
+
maxTRMIterations?: number;
|
|
199
|
+
convergenceThreshold?: number;
|
|
200
|
+
sonaConfig?: SONAConfig;
|
|
201
|
+
enableSessions?: boolean;
|
|
202
|
+
sessionTimeout?: number;
|
|
203
|
+
maxSessions?: number;
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Properties
|
|
208
|
+
|
|
209
|
+
| Property | Type | Default | Description |
|
|
210
|
+
|----------|------|---------|-------------|
|
|
211
|
+
| `ruvllmPath` | `string` | `'npx'` | Path to ruvllm executable |
|
|
212
|
+
| `port` | `number` | `8080` | Local server port |
|
|
213
|
+
| `defaultModel` | `string` | `'llama-3.2-3b-instruct'` | Default model |
|
|
214
|
+
| `gpuLayers` | `number` | `-1` | GPU layers to offload (-1 = all) |
|
|
215
|
+
| `contextSize` | `number` | `4096` | Context window size |
|
|
216
|
+
| `threads` | `number` | `4` | Number of threads |
|
|
217
|
+
| `defaultTemperature` | `number` | `0.7` | Default temperature |
|
|
218
|
+
| `enableEmbeddings` | `boolean` | `false` | Enable embeddings model |
|
|
219
|
+
| `enableTRM` | `boolean` | `true` | Enable test-time reasoning |
|
|
220
|
+
| `enableSONA` | `boolean` | `true` | Enable self-learning |
|
|
221
|
+
| `maxTRMIterations` | `number` | `7` | Max TRM iterations |
|
|
222
|
+
| `convergenceThreshold` | `number` | `0.95` | TRM convergence threshold |
|
|
223
|
+
| `sonaConfig` | `SONAConfig` | See below | SONA configuration |
|
|
224
|
+
| `enableSessions` | `boolean` | `true` | Enable session management |
|
|
225
|
+
| `sessionTimeout` | `number` | `1800000` | Session timeout (30 min) |
|
|
226
|
+
| `maxSessions` | `number` | `100` | Max concurrent sessions |
|
|
227
|
+
|
|
228
|
+
### SONAConfig
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
interface SONAConfig {
|
|
232
|
+
loraRank?: number; // LoRA rank (default: 8)
|
|
233
|
+
loraAlpha?: number; // LoRA alpha (default: 16)
|
|
234
|
+
ewcLambda?: number; // EWC lambda (default: 2000)
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### TRMConfig
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
interface TRMConfig {
|
|
242
|
+
maxIterations?: number; // Default: 7
|
|
243
|
+
convergenceThreshold?: number; // Default: 0.95
|
|
244
|
+
qualityMetric?: 'coherence' | 'coverage' | 'diversity';
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Available Models
|
|
249
|
+
|
|
250
|
+
| Model | Size | Context | Best For |
|
|
251
|
+
|-------|------|---------|----------|
|
|
252
|
+
| `qwen3-coder:30b` | 30B | 32K | Primary coding |
|
|
253
|
+
| `llama3.3:70b` | 70B | 128K | Large general-purpose |
|
|
254
|
+
| `devstral-small:24b` | 24B | 128K | Efficient coding |
|
|
255
|
+
| `rnj-1:8b` | 8B | 128K | Edge deployment |
|
|
256
|
+
| `deepseek-coder-v2:16b` | 16B | 128K | Code-specific |
|
|
257
|
+
|
|
258
|
+
### Example
|
|
259
|
+
|
|
260
|
+
```typescript
|
|
261
|
+
const factory = new LLMProviderFactory({
|
|
262
|
+
ruvllm: {
|
|
263
|
+
defaultModel: 'qwen3-coder:30b',
|
|
264
|
+
gpuLayers: -1, // Offload all to GPU
|
|
265
|
+
contextSize: 8192,
|
|
266
|
+
threads: 8,
|
|
267
|
+
enableTRM: true, // Test-time reasoning
|
|
268
|
+
maxTRMIterations: 5,
|
|
269
|
+
enableSONA: true, // Self-learning
|
|
270
|
+
sonaConfig: {
|
|
271
|
+
loraRank: 8,
|
|
272
|
+
loraAlpha: 16,
|
|
273
|
+
ewcLambda: 2000
|
|
274
|
+
},
|
|
275
|
+
enableSessions: true,
|
|
276
|
+
sessionTimeout: 1800000, // 30 minutes
|
|
277
|
+
maxSessions: 50
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
## Ollama Provider Configuration
|
|
283
|
+
|
|
284
|
+
### OllamaProviderConfig
|
|
285
|
+
|
|
286
|
+
Configuration for Ollama server.
|
|
287
|
+
|
|
288
|
+
```typescript
|
|
289
|
+
interface OllamaProviderConfig extends LLMProviderConfig {
|
|
290
|
+
baseUrl?: string;
|
|
291
|
+
defaultModel?: string;
|
|
292
|
+
keepAlive?: boolean;
|
|
293
|
+
keepAliveDuration?: number;
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Properties
|
|
298
|
+
|
|
299
|
+
| Property | Type | Default | Description |
|
|
300
|
+
|----------|------|---------|-------------|
|
|
301
|
+
| `baseUrl` | `string` | `'http://localhost:11434'` | Ollama server URL |
|
|
302
|
+
| `defaultModel` | `string` | `'qwen3-coder:30b'` | Default model |
|
|
303
|
+
| `keepAlive` | `boolean` | `true` | Keep model in memory |
|
|
304
|
+
| `keepAliveDuration` | `number` | `300` | Keep alive duration (seconds) |
|
|
305
|
+
| `timeout` | `number` | `120000` | Request timeout (ms) |
|
|
306
|
+
| `maxRetries` | `number` | `2` | Maximum retry attempts |
|
|
307
|
+
|
|
308
|
+
### Example
|
|
309
|
+
|
|
310
|
+
```typescript
|
|
311
|
+
const provider = new OllamaProvider({
|
|
312
|
+
baseUrl: 'http://localhost:11434',
|
|
313
|
+
defaultModel: 'qwen3-coder:30b',
|
|
314
|
+
keepAlive: true,
|
|
315
|
+
keepAliveDuration: 600, // 10 minutes
|
|
316
|
+
timeout: 180000, // 3 minutes
|
|
317
|
+
debug: false
|
|
318
|
+
});
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
## Environment Variables
|
|
322
|
+
|
|
323
|
+
### Provider Keys
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
# Claude API
|
|
327
|
+
export ANTHROPIC_API_KEY="sk-ant-..."
|
|
328
|
+
|
|
329
|
+
# OpenRouter
|
|
330
|
+
export OPENROUTER_API_KEY="sk-or-v1-..."
|
|
331
|
+
export OPENROUTER_SITE_URL="https://my-project.com"
|
|
332
|
+
export OPENROUTER_SITE_NAME="My Project"
|
|
333
|
+
|
|
334
|
+
# Groq (via OpenRouter)
|
|
335
|
+
export GROQ_API_KEY="gsk_..."
|
|
336
|
+
|
|
337
|
+
# Google AI Studio
|
|
338
|
+
export GOOGLE_AI_API_KEY="..."
|
|
339
|
+
|
|
340
|
+
# Together.ai
|
|
341
|
+
export TOGETHER_API_KEY="..."
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Provider Selection
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
# Override automatic provider selection
|
|
348
|
+
export LLM_PROVIDER="claude" # Force Claude
|
|
349
|
+
export LLM_PROVIDER="openrouter" # Force OpenRouter
|
|
350
|
+
export LLM_PROVIDER="ruvllm" # Force local
|
|
351
|
+
export LLM_PROVIDER="auto" # Auto-detect (default)
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### Ollama Configuration
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
# Ollama server URL
|
|
358
|
+
export OLLAMA_HOST="http://localhost:11434"
|
|
359
|
+
|
|
360
|
+
# Ollama models directory
|
|
361
|
+
export OLLAMA_MODELS="/path/to/models"
|
|
362
|
+
|
|
363
|
+
# GPU configuration
|
|
364
|
+
export CUDA_VISIBLE_DEVICES="0,1" # Use GPUs 0 and 1
|
|
365
|
+
|
|
366
|
+
# Debug mode
|
|
367
|
+
export OLLAMA_DEBUG="1"
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
## Configuration File
|
|
371
|
+
|
|
372
|
+
### YAML Configuration
|
|
373
|
+
|
|
374
|
+
```yaml
|
|
375
|
+
# ~/.agentic-qe/llm-config.yaml
|
|
376
|
+
|
|
377
|
+
defaultProvider: auto
|
|
378
|
+
enableFallback: true
|
|
379
|
+
enableSmartDetection: true
|
|
380
|
+
healthCheckInterval: 60000
|
|
381
|
+
maxConsecutiveFailures: 3
|
|
382
|
+
|
|
383
|
+
claude:
|
|
384
|
+
defaultModel: claude-sonnet-4-20250514
|
|
385
|
+
enableCaching: true
|
|
386
|
+
timeout: 120000
|
|
387
|
+
maxRetries: 5
|
|
388
|
+
|
|
389
|
+
openrouter:
|
|
390
|
+
defaultModel: mistralai/devstral-2512:free
|
|
391
|
+
fallbackModels:
|
|
392
|
+
- mistralai/devstral-small-2505
|
|
393
|
+
- qwen/qwen-2.5-coder-32b-instruct
|
|
394
|
+
- anthropic/claude-3.5-sonnet
|
|
395
|
+
enableAutoRoute: true
|
|
396
|
+
siteUrl: https://my-project.com
|
|
397
|
+
siteName: My Testing Project
|
|
398
|
+
|
|
399
|
+
ruvllm:
|
|
400
|
+
defaultModel: qwen3-coder:30b
|
|
401
|
+
gpuLayers: -1
|
|
402
|
+
contextSize: 8192
|
|
403
|
+
threads: 8
|
|
404
|
+
enableTRM: true
|
|
405
|
+
maxTRMIterations: 7
|
|
406
|
+
enableSONA: true
|
|
407
|
+
sonaConfig:
|
|
408
|
+
loraRank: 8
|
|
409
|
+
loraAlpha: 16
|
|
410
|
+
ewcLambda: 2000
|
|
411
|
+
enableSessions: true
|
|
412
|
+
sessionTimeout: 1800000
|
|
413
|
+
maxSessions: 100
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### JSON Configuration
|
|
417
|
+
|
|
418
|
+
```json
|
|
419
|
+
{
|
|
420
|
+
"defaultProvider": "auto",
|
|
421
|
+
"enableFallback": true,
|
|
422
|
+
"enableSmartDetection": true,
|
|
423
|
+
|
|
424
|
+
"claude": {
|
|
425
|
+
"defaultModel": "claude-sonnet-4-20250514",
|
|
426
|
+
"enableCaching": true
|
|
427
|
+
},
|
|
428
|
+
|
|
429
|
+
"openrouter": {
|
|
430
|
+
"defaultModel": "mistralai/devstral-2512:free",
|
|
431
|
+
"fallbackModels": [
|
|
432
|
+
"mistralai/devstral-small-2505",
|
|
433
|
+
"qwen/qwen-2.5-coder-32b-instruct"
|
|
434
|
+
],
|
|
435
|
+
"enableAutoRoute": true
|
|
436
|
+
},
|
|
437
|
+
|
|
438
|
+
"ruvllm": {
|
|
439
|
+
"defaultModel": "qwen3-coder:30b",
|
|
440
|
+
"enableTRM": true,
|
|
441
|
+
"enableSONA": true
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
## Programmatic Configuration
|
|
447
|
+
|
|
448
|
+
### TypeScript
|
|
449
|
+
|
|
450
|
+
```typescript
|
|
451
|
+
import { LLMProviderFactory, RECOMMENDED_MODELS } from 'agentic-qe';
|
|
452
|
+
|
|
453
|
+
const factory = new LLMProviderFactory({
|
|
454
|
+
// Global settings
|
|
455
|
+
defaultProvider: 'auto',
|
|
456
|
+
enableFallback: true,
|
|
457
|
+
healthCheckInterval: 60000,
|
|
458
|
+
maxConsecutiveFailures: 3,
|
|
459
|
+
enableSmartDetection: true,
|
|
460
|
+
|
|
461
|
+
// Claude configuration
|
|
462
|
+
claude: {
|
|
463
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
464
|
+
defaultModel: 'claude-sonnet-4-20250514',
|
|
465
|
+
enableCaching: true,
|
|
466
|
+
timeout: 120000,
|
|
467
|
+
maxRetries: 5
|
|
468
|
+
},
|
|
469
|
+
|
|
470
|
+
// OpenRouter configuration
|
|
471
|
+
openrouter: {
|
|
472
|
+
apiKey: process.env.OPENROUTER_API_KEY,
|
|
473
|
+
defaultModel: RECOMMENDED_MODELS.AGENTIC_CODING_FREE,
|
|
474
|
+
fallbackModels: [
|
|
475
|
+
RECOMMENDED_MODELS.CHEAPEST_PAID,
|
|
476
|
+
RECOMMENDED_MODELS.QWEN_CODER,
|
|
477
|
+
RECOMMENDED_MODELS.HIGH_QUALITY
|
|
478
|
+
],
|
|
479
|
+
enableAutoRoute: true,
|
|
480
|
+
siteUrl: 'https://my-project.com',
|
|
481
|
+
siteName: 'My Testing Project'
|
|
482
|
+
},
|
|
483
|
+
|
|
484
|
+
// RuvLLM configuration
|
|
485
|
+
ruvllm: {
|
|
486
|
+
defaultModel: 'qwen3-coder:30b',
|
|
487
|
+
gpuLayers: -1,
|
|
488
|
+
contextSize: 8192,
|
|
489
|
+
threads: 8,
|
|
490
|
+
enableTRM: true,
|
|
491
|
+
maxTRMIterations: 7,
|
|
492
|
+
enableSONA: true,
|
|
493
|
+
sonaConfig: {
|
|
494
|
+
loraRank: 8,
|
|
495
|
+
loraAlpha: 16,
|
|
496
|
+
ewcLambda: 2000
|
|
497
|
+
},
|
|
498
|
+
enableSessions: true,
|
|
499
|
+
sessionTimeout: 1800000,
|
|
500
|
+
maxSessions: 100
|
|
501
|
+
}
|
|
502
|
+
});
|
|
503
|
+
|
|
504
|
+
await factory.initialize();
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
### JavaScript (ES6)
|
|
508
|
+
|
|
509
|
+
```javascript
|
|
510
|
+
const { LLMProviderFactory } = require('agentic-qe');
|
|
511
|
+
|
|
512
|
+
const factory = new LLMProviderFactory({
|
|
513
|
+
defaultProvider: 'auto',
|
|
514
|
+
enableFallback: true,
|
|
515
|
+
|
|
516
|
+
openrouter: {
|
|
517
|
+
apiKey: process.env.OPENROUTER_API_KEY,
|
|
518
|
+
defaultModel: 'mistralai/devstral-2512:free'
|
|
519
|
+
}
|
|
520
|
+
});
|
|
521
|
+
|
|
522
|
+
await factory.initialize();
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
## Provider Selection Criteria
|
|
526
|
+
|
|
527
|
+
### ProviderSelectionCriteria
|
|
528
|
+
|
|
529
|
+
```typescript
|
|
530
|
+
interface ProviderSelectionCriteria {
|
|
531
|
+
preferLocal?: boolean;
|
|
532
|
+
preferLowCost?: boolean;
|
|
533
|
+
requiredCapabilities?: Array<keyof LLMProviderMetadata['capabilities']>;
|
|
534
|
+
maxCostPerMillion?: number;
|
|
535
|
+
requiredModels?: string[];
|
|
536
|
+
}
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
### Example Usage
|
|
540
|
+
|
|
541
|
+
```typescript
|
|
542
|
+
// Select cheapest provider
|
|
543
|
+
const cheapProvider = factory.selectBestProvider({
|
|
544
|
+
preferLowCost: true,
|
|
545
|
+
maxCostPerMillion: 1.0
|
|
546
|
+
});
|
|
547
|
+
|
|
548
|
+
// Select local provider
|
|
549
|
+
const localProvider = factory.selectBestProvider({
|
|
550
|
+
preferLocal: true
|
|
551
|
+
});
|
|
552
|
+
|
|
553
|
+
// Select by capabilities
|
|
554
|
+
const streamingProvider = factory.selectBestProvider({
|
|
555
|
+
requiredCapabilities: ['streaming', 'vision']
|
|
556
|
+
});
|
|
557
|
+
|
|
558
|
+
// Select by model
|
|
559
|
+
const claudeProvider = factory.selectBestProvider({
|
|
560
|
+
requiredModels: ['claude-sonnet-4-20250514']
|
|
561
|
+
});
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
## Default Values
|
|
565
|
+
|
|
566
|
+
### Provider Defaults
|
|
567
|
+
|
|
568
|
+
| Provider | Default Model | Default Cost | Location |
|
|
569
|
+
|----------|--------------|--------------|----------|
|
|
570
|
+
| Claude | `claude-sonnet-4-20250514` | $3/$15 per M | Cloud |
|
|
571
|
+
| OpenRouter | `mistralai/devstral-2512:free` | FREE | Cloud |
|
|
572
|
+
| RuvLLM | `llama-3.2-3b-instruct` | FREE | Local |
|
|
573
|
+
| Ollama | `qwen3-coder:30b` | FREE | Local |
|
|
574
|
+
|
|
575
|
+
### Global Defaults
|
|
576
|
+
|
|
577
|
+
| Setting | Default | Description |
|
|
578
|
+
|---------|---------|-------------|
|
|
579
|
+
| `defaultProvider` | `'auto'` | Auto-detect best provider |
|
|
580
|
+
| `enableFallback` | `true` | Enable automatic fallback |
|
|
581
|
+
| `healthCheckInterval` | `60000` | Health check every 1 minute |
|
|
582
|
+
| `maxConsecutiveFailures` | `3` | Mark unhealthy after 3 failures |
|
|
583
|
+
| `enableSmartDetection` | `true` | Auto-detect environment |
|
|
584
|
+
|
|
585
|
+
## Validation
|
|
586
|
+
|
|
587
|
+
The configuration is validated at initialization:
|
|
588
|
+
|
|
589
|
+
```typescript
|
|
590
|
+
// Invalid configuration will throw error
|
|
591
|
+
try {
|
|
592
|
+
const factory = new LLMProviderFactory({
|
|
593
|
+
claude: {
|
|
594
|
+
defaultModel: 'invalid-model' // ❌ Error
|
|
595
|
+
}
|
|
596
|
+
});
|
|
597
|
+
await factory.initialize();
|
|
598
|
+
} catch (error) {
|
|
599
|
+
console.error('Configuration error:', error.message);
|
|
600
|
+
}
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
## See Also
|
|
604
|
+
|
|
605
|
+
- [LLM Providers Guide](../guides/llm-providers-guide.md)
|
|
606
|
+
- [Ollama Setup Guide](../guides/ollama-setup.md)
|
|
607
|
+
- [Free Tier Guide](../guides/free-tier-guide.md)
|
|
608
|
+
- [API Reference](../API.md#llm-providers)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-qe",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.2",
|
|
4
4
|
"description": "Agentic Quality Engineering Fleet System - AI-driven quality management platform with 46 QE skills, n8n workflow testing agents, learning, pattern reuse, ML-based flaky detection, Multi-Model Router (70-81% cost savings), streaming progress updates, 91 MCP tools with lazy loading (87% context reduction), and native TypeScript hooks",
|
|
5
5
|
"main": "dist/cli/index.js",
|
|
6
6
|
"types": "dist/cli/index.d.ts",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"aqe-mcp": "./bin/aqe-mcp"
|
|
11
11
|
},
|
|
12
12
|
"scripts": {
|
|
13
|
-
"build": "tsc",
|
|
13
|
+
"build": "tsc && node scripts/copy-json-files.js",
|
|
14
14
|
"dev": "ts-node src/cli/index.ts",
|
|
15
15
|
"start": "node dist/cli/index.js",
|
|
16
16
|
"pretest": "node scripts/check-memory-before-test.js",
|
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
"tree-sitter-javascript": "^0.23.0",
|
|
166
166
|
"tree-sitter-python": "^0.23.5",
|
|
167
167
|
"tree-sitter-rust": "^0.24.0",
|
|
168
|
-
"tree-sitter-typescript": "^0.
|
|
168
|
+
"tree-sitter-typescript": "^0.23.2",
|
|
169
169
|
"uuid": "^11.0.5",
|
|
170
170
|
"winston": "^3.18.3",
|
|
171
171
|
"ws": "^8.18.3",
|
|
@@ -182,7 +182,21 @@
|
|
|
182
182
|
"stack-utils": "^2.0.6"
|
|
183
183
|
},
|
|
184
184
|
"overrides": {
|
|
185
|
-
"tree-sitter":
|
|
185
|
+
"tree-sitter-go": {
|
|
186
|
+
"tree-sitter": "$tree-sitter"
|
|
187
|
+
},
|
|
188
|
+
"tree-sitter-javascript": {
|
|
189
|
+
"tree-sitter": "$tree-sitter"
|
|
190
|
+
},
|
|
191
|
+
"tree-sitter-typescript": {
|
|
192
|
+
"tree-sitter": "$tree-sitter"
|
|
193
|
+
},
|
|
194
|
+
"tree-sitter-python": {
|
|
195
|
+
"tree-sitter": "$tree-sitter"
|
|
196
|
+
},
|
|
197
|
+
"tree-sitter-rust": {
|
|
198
|
+
"tree-sitter": "$tree-sitter"
|
|
199
|
+
}
|
|
186
200
|
},
|
|
187
201
|
"devDependencies": {
|
|
188
202
|
"@axe-core/playwright": "^4.11.0",
|
|
@@ -214,6 +228,7 @@
|
|
|
214
228
|
"jest": "^30.2.0",
|
|
215
229
|
"jest-extended": "^6.0.0",
|
|
216
230
|
"jest-junit": "^16.0.0",
|
|
231
|
+
"jose": "^5.10.0",
|
|
217
232
|
"nodemon": "^3.0.2",
|
|
218
233
|
"react": "^18.3.1",
|
|
219
234
|
"rimraf": "^6.0.1",
|