agentic-qe 2.5.7 → 2.5.8

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.
Files changed (82) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +1 -1
  3. package/dist/agents/BaseAgent.d.ts +142 -0
  4. package/dist/agents/BaseAgent.d.ts.map +1 -1
  5. package/dist/agents/BaseAgent.js +372 -2
  6. package/dist/agents/BaseAgent.js.map +1 -1
  7. package/dist/agents/TestGeneratorAgent.d.ts +5 -0
  8. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
  9. package/dist/agents/TestGeneratorAgent.js +38 -0
  10. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  11. package/dist/agents/index.d.ts +1 -1
  12. package/dist/agents/index.d.ts.map +1 -1
  13. package/dist/agents/index.js.map +1 -1
  14. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  15. package/dist/core/memory/RuVectorPatternStore.d.ts +90 -0
  16. package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -1
  17. package/dist/core/memory/RuVectorPatternStore.js +209 -0
  18. package/dist/core/memory/RuVectorPatternStore.js.map +1 -1
  19. package/dist/learning/FederatedManager.d.ts +232 -0
  20. package/dist/learning/FederatedManager.d.ts.map +1 -0
  21. package/dist/learning/FederatedManager.js +489 -0
  22. package/dist/learning/FederatedManager.js.map +1 -0
  23. package/dist/learning/HNSWPatternAdapter.d.ts +117 -0
  24. package/dist/learning/HNSWPatternAdapter.d.ts.map +1 -0
  25. package/dist/learning/HNSWPatternAdapter.js +262 -0
  26. package/dist/learning/HNSWPatternAdapter.js.map +1 -0
  27. package/dist/learning/LearningEngine.d.ts +27 -0
  28. package/dist/learning/LearningEngine.d.ts.map +1 -1
  29. package/dist/learning/LearningEngine.js +75 -1
  30. package/dist/learning/LearningEngine.js.map +1 -1
  31. package/dist/learning/PatternCurator.d.ts +217 -0
  32. package/dist/learning/PatternCurator.d.ts.map +1 -0
  33. package/dist/learning/PatternCurator.js +393 -0
  34. package/dist/learning/PatternCurator.js.map +1 -0
  35. package/dist/learning/index.d.ts +6 -0
  36. package/dist/learning/index.d.ts.map +1 -1
  37. package/dist/learning/index.js +16 -1
  38. package/dist/learning/index.js.map +1 -1
  39. package/dist/learning/types.d.ts +4 -0
  40. package/dist/learning/types.d.ts.map +1 -1
  41. package/dist/mcp/server-instructions.d.ts +1 -1
  42. package/dist/mcp/server-instructions.js +1 -1
  43. package/dist/memory/HNSWPatternStore.d.ts +176 -0
  44. package/dist/memory/HNSWPatternStore.d.ts.map +1 -0
  45. package/dist/memory/HNSWPatternStore.js +392 -0
  46. package/dist/memory/HNSWPatternStore.js.map +1 -0
  47. package/dist/memory/index.d.ts +8 -0
  48. package/dist/memory/index.d.ts.map +1 -0
  49. package/dist/memory/index.js +13 -0
  50. package/dist/memory/index.js.map +1 -0
  51. package/dist/providers/HybridRouter.d.ts +85 -4
  52. package/dist/providers/HybridRouter.d.ts.map +1 -1
  53. package/dist/providers/HybridRouter.js +332 -10
  54. package/dist/providers/HybridRouter.js.map +1 -1
  55. package/dist/providers/LLMBaselineTracker.d.ts +120 -0
  56. package/dist/providers/LLMBaselineTracker.d.ts.map +1 -0
  57. package/dist/providers/LLMBaselineTracker.js +305 -0
  58. package/dist/providers/LLMBaselineTracker.js.map +1 -0
  59. package/dist/providers/OpenRouterProvider.d.ts +26 -0
  60. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  61. package/dist/providers/OpenRouterProvider.js +75 -6
  62. package/dist/providers/OpenRouterProvider.js.map +1 -1
  63. package/dist/providers/RuVectorClient.d.ts +259 -0
  64. package/dist/providers/RuVectorClient.d.ts.map +1 -0
  65. package/dist/providers/RuVectorClient.js +416 -0
  66. package/dist/providers/RuVectorClient.js.map +1 -0
  67. package/dist/providers/RuvllmPatternCurator.d.ts +116 -0
  68. package/dist/providers/RuvllmPatternCurator.d.ts.map +1 -0
  69. package/dist/providers/RuvllmPatternCurator.js +323 -0
  70. package/dist/providers/RuvllmPatternCurator.js.map +1 -0
  71. package/dist/providers/RuvllmProvider.d.ts +233 -1
  72. package/dist/providers/RuvllmProvider.d.ts.map +1 -1
  73. package/dist/providers/RuvllmProvider.js +781 -11
  74. package/dist/providers/RuvllmProvider.js.map +1 -1
  75. package/dist/providers/index.d.ts +5 -1
  76. package/dist/providers/index.d.ts.map +1 -1
  77. package/dist/providers/index.js +12 -2
  78. package/dist/providers/index.js.map +1 -1
  79. package/dist/utils/ruvllm-loader.d.ts +98 -1
  80. package/dist/utils/ruvllm-loader.d.ts.map +1 -1
  81. package/dist/utils/ruvllm-loader.js.map +1 -1
  82. package/package.json +1 -1
@@ -0,0 +1,120 @@
1
+ /**
2
+ * LLMBaselineTracker - Track LLM provider performance baselines over time
3
+ *
4
+ * Phase 0 integration: Establishes real performance baselines for LLM providers
5
+ * to replace unverified claims with measured data.
6
+ *
7
+ * Integrates with existing observability infrastructure:
8
+ * - Uses BaselineCollector patterns
9
+ * - Stores data in SQLite for historical tracking
10
+ * - Provides improvement target calculations
11
+ *
12
+ * @version 1.0.0
13
+ * @module providers/LLMBaselineTracker
14
+ */
15
+ /**
16
+ * LLM performance measurement
17
+ */
18
+ export interface LLMPerformanceMeasurement {
19
+ id?: string;
20
+ provider: string;
21
+ model: string;
22
+ operation: string;
23
+ metrics: {
24
+ latencyP50: number;
25
+ latencyP95: number;
26
+ latencyP99: number;
27
+ tokensPerSecond: number;
28
+ inputTokens: number;
29
+ outputTokens: number;
30
+ cost: number;
31
+ errorRate: number;
32
+ };
33
+ sampleSize: number;
34
+ timestamp: Date;
35
+ environment?: {
36
+ node?: string;
37
+ platform?: string;
38
+ };
39
+ }
40
+ /**
41
+ * Baseline comparison result
42
+ */
43
+ export interface BaselineComparison {
44
+ provider: string;
45
+ model: string;
46
+ operation: string;
47
+ current: LLMPerformanceMeasurement;
48
+ baseline: LLMPerformanceMeasurement | null;
49
+ improvement: {
50
+ latencyP50Change: number;
51
+ throughputChange: number;
52
+ costChange: number;
53
+ } | null;
54
+ meetsTarget: boolean;
55
+ }
56
+ /**
57
+ * LLMBaselineTracker configuration
58
+ */
59
+ export interface LLMBaselineTrackerConfig {
60
+ /** Database path. Default: .agentic-qe/llm-baselines.db */
61
+ dbPath?: string;
62
+ /** Minimum improvement target (%). Default: 10 */
63
+ minImprovementTarget?: number;
64
+ /** Enable debug logging */
65
+ debug?: boolean;
66
+ }
67
+ /**
68
+ * Tracks LLM provider performance baselines over time
69
+ */
70
+ export declare class LLMBaselineTracker {
71
+ private db;
72
+ private readonly config;
73
+ private readonly logger;
74
+ private initialized;
75
+ constructor(config?: LLMBaselineTrackerConfig);
76
+ /**
77
+ * Initialize the tracker and create database schema
78
+ */
79
+ initialize(): Promise<void>;
80
+ /**
81
+ * Record a new performance measurement
82
+ */
83
+ recordMeasurement(measurement: Omit<LLMPerformanceMeasurement, 'id'>): LLMPerformanceMeasurement;
84
+ /**
85
+ * Set a measurement as the baseline for a provider/model/operation
86
+ */
87
+ setBaseline(provider: string, model: string, operation: string, measurementId: string): void;
88
+ /**
89
+ * Get the current baseline for a provider/model/operation
90
+ */
91
+ getBaseline(provider: string, model: string, operation: string): LLMPerformanceMeasurement | null;
92
+ /**
93
+ * Compare current measurement against baseline
94
+ */
95
+ compareToBaseline(current: LLMPerformanceMeasurement): BaselineComparison;
96
+ /**
97
+ * Get all measurements for a provider/model
98
+ */
99
+ getMeasurements(provider: string, model: string, operation?: string, limit?: number): LLMPerformanceMeasurement[];
100
+ /**
101
+ * Get summary statistics for a provider/model
102
+ */
103
+ getSummary(provider: string, model: string): {
104
+ totalMeasurements: number;
105
+ avgLatencyP50: number;
106
+ avgThroughput: number;
107
+ totalCost: number;
108
+ lastMeasurement: Date | null;
109
+ };
110
+ /**
111
+ * Close the database connection
112
+ */
113
+ close(): void;
114
+ private rowToMeasurement;
115
+ }
116
+ /**
117
+ * Create a tracker instance (convenience function)
118
+ */
119
+ export declare function createLLMBaselineTracker(config?: LLMBaselineTrackerConfig): LLMBaselineTracker;
120
+ //# sourceMappingURL=LLMBaselineTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMBaselineTracker.d.ts","sourceRoot":"","sources":["../../src/providers/LLMBaselineTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+ /**
3
+ * LLMBaselineTracker - Track LLM provider performance baselines over time
4
+ *
5
+ * Phase 0 integration: Establishes real performance baselines for LLM providers
6
+ * to replace unverified claims with measured data.
7
+ *
8
+ * Integrates with existing observability infrastructure:
9
+ * - Uses BaselineCollector patterns
10
+ * - Stores data in SQLite for historical tracking
11
+ * - Provides improvement target calculations
12
+ *
13
+ * @version 1.0.0
14
+ * @module providers/LLMBaselineTracker
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || (function () {
33
+ var ownKeys = function(o) {
34
+ ownKeys = Object.getOwnPropertyNames || function (o) {
35
+ var ar = [];
36
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
37
+ return ar;
38
+ };
39
+ return ownKeys(o);
40
+ };
41
+ return function (mod) {
42
+ if (mod && mod.__esModule) return mod;
43
+ var result = {};
44
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
45
+ __setModuleDefault(result, mod);
46
+ return result;
47
+ };
48
+ })();
49
+ var __importDefault = (this && this.__importDefault) || function (mod) {
50
+ return (mod && mod.__esModule) ? mod : { "default": mod };
51
+ };
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.LLMBaselineTracker = void 0;
54
+ exports.createLLMBaselineTracker = createLLMBaselineTracker;
55
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
56
+ const path = __importStar(require("path"));
57
+ const fs = __importStar(require("fs"));
58
+ const Logger_1 = require("../utils/Logger");
59
+ const SecureRandom_1 = require("../utils/SecureRandom");
60
+ /**
61
+ * Tracks LLM provider performance baselines over time
62
+ */
63
+ class LLMBaselineTracker {
64
+ constructor(config = {}) {
65
+ this.db = null;
66
+ this.initialized = false;
67
+ this.logger = Logger_1.Logger.getInstance();
68
+ this.config = {
69
+ dbPath: config.dbPath || path.join(process.cwd(), '.agentic-qe', 'llm-baselines.db'),
70
+ minImprovementTarget: config.minImprovementTarget ?? 10,
71
+ debug: config.debug ?? false,
72
+ };
73
+ }
74
+ /**
75
+ * Initialize the tracker and create database schema
76
+ */
77
+ async initialize() {
78
+ if (this.initialized)
79
+ return;
80
+ // Ensure directory exists
81
+ const dir = path.dirname(this.config.dbPath);
82
+ if (!fs.existsSync(dir)) {
83
+ fs.mkdirSync(dir, { recursive: true });
84
+ }
85
+ this.db = new better_sqlite3_1.default(this.config.dbPath);
86
+ // Create tables
87
+ this.db.exec(`
88
+ CREATE TABLE IF NOT EXISTS llm_measurements (
89
+ id TEXT PRIMARY KEY,
90
+ provider TEXT NOT NULL,
91
+ model TEXT NOT NULL,
92
+ operation TEXT NOT NULL,
93
+ latency_p50 REAL NOT NULL,
94
+ latency_p95 REAL NOT NULL,
95
+ latency_p99 REAL NOT NULL,
96
+ tokens_per_second REAL NOT NULL,
97
+ input_tokens INTEGER NOT NULL,
98
+ output_tokens INTEGER NOT NULL,
99
+ cost REAL NOT NULL,
100
+ error_rate REAL NOT NULL,
101
+ sample_size INTEGER NOT NULL,
102
+ timestamp TEXT NOT NULL,
103
+ environment TEXT,
104
+ created_at TEXT DEFAULT CURRENT_TIMESTAMP
105
+ );
106
+
107
+ CREATE INDEX IF NOT EXISTS idx_measurements_provider_model
108
+ ON llm_measurements(provider, model, operation);
109
+ CREATE INDEX IF NOT EXISTS idx_measurements_timestamp
110
+ ON llm_measurements(timestamp);
111
+
112
+ CREATE TABLE IF NOT EXISTS llm_baselines (
113
+ id TEXT PRIMARY KEY,
114
+ provider TEXT NOT NULL,
115
+ model TEXT NOT NULL,
116
+ operation TEXT NOT NULL,
117
+ measurement_id TEXT NOT NULL,
118
+ set_at TEXT NOT NULL,
119
+ UNIQUE(provider, model, operation),
120
+ FOREIGN KEY(measurement_id) REFERENCES llm_measurements(id)
121
+ );
122
+ `);
123
+ this.initialized = true;
124
+ if (this.config.debug) {
125
+ this.logger.debug('LLMBaselineTracker initialized', { dbPath: this.config.dbPath });
126
+ }
127
+ }
128
+ /**
129
+ * Record a new performance measurement
130
+ */
131
+ recordMeasurement(measurement) {
132
+ if (!this.db)
133
+ throw new Error('Tracker not initialized');
134
+ const id = `llm-${SecureRandom_1.SecureRandom.uuid().slice(0, 8)}`;
135
+ const record = { ...measurement, id };
136
+ const stmt = this.db.prepare(`
137
+ INSERT INTO llm_measurements (
138
+ id, provider, model, operation,
139
+ latency_p50, latency_p95, latency_p99,
140
+ tokens_per_second, input_tokens, output_tokens,
141
+ cost, error_rate, sample_size, timestamp, environment
142
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
143
+ `);
144
+ stmt.run(id, record.provider, record.model, record.operation, record.metrics.latencyP50, record.metrics.latencyP95, record.metrics.latencyP99, record.metrics.tokensPerSecond, record.metrics.inputTokens, record.metrics.outputTokens, record.metrics.cost, record.metrics.errorRate, record.sampleSize, record.timestamp.toISOString(), record.environment ? JSON.stringify(record.environment) : null);
145
+ if (this.config.debug) {
146
+ this.logger.debug('Recorded LLM measurement', {
147
+ id,
148
+ provider: record.provider,
149
+ model: record.model,
150
+ latencyP50: record.metrics.latencyP50,
151
+ });
152
+ }
153
+ return record;
154
+ }
155
+ /**
156
+ * Set a measurement as the baseline for a provider/model/operation
157
+ */
158
+ setBaseline(provider, model, operation, measurementId) {
159
+ if (!this.db)
160
+ throw new Error('Tracker not initialized');
161
+ const id = `baseline-${provider}-${model}-${operation}`.replace(/[^a-zA-Z0-9-]/g, '-');
162
+ const stmt = this.db.prepare(`
163
+ INSERT OR REPLACE INTO llm_baselines (id, provider, model, operation, measurement_id, set_at)
164
+ VALUES (?, ?, ?, ?, ?, ?)
165
+ `);
166
+ stmt.run(id, provider, model, operation, measurementId, new Date().toISOString());
167
+ this.logger.info('Set LLM baseline', { provider, model, operation, measurementId });
168
+ }
169
+ /**
170
+ * Get the current baseline for a provider/model/operation
171
+ */
172
+ getBaseline(provider, model, operation) {
173
+ if (!this.db)
174
+ throw new Error('Tracker not initialized');
175
+ const row = this.db.prepare(`
176
+ SELECT m.* FROM llm_measurements m
177
+ JOIN llm_baselines b ON m.id = b.measurement_id
178
+ WHERE b.provider = ? AND b.model = ? AND b.operation = ?
179
+ `).get(provider, model, operation);
180
+ if (!row)
181
+ return null;
182
+ return this.rowToMeasurement(row);
183
+ }
184
+ /**
185
+ * Compare current measurement against baseline
186
+ */
187
+ compareToBaseline(current) {
188
+ const baseline = this.getBaseline(current.provider, current.model, current.operation);
189
+ let improvement = null;
190
+ let meetsTarget = false;
191
+ if (baseline) {
192
+ const latencyChange = ((current.metrics.latencyP50 - baseline.metrics.latencyP50) / baseline.metrics.latencyP50) * 100;
193
+ const throughputChange = ((current.metrics.tokensPerSecond - baseline.metrics.tokensPerSecond) /
194
+ baseline.metrics.tokensPerSecond) *
195
+ 100;
196
+ const costChange = baseline.metrics.cost > 0
197
+ ? ((current.metrics.cost - baseline.metrics.cost) / baseline.metrics.cost) * 100
198
+ : 0;
199
+ improvement = {
200
+ latencyP50Change: latencyChange,
201
+ throughputChange,
202
+ costChange,
203
+ };
204
+ // Meets target if latency improved by at least minImprovementTarget%
205
+ // OR throughput improved by at least minImprovementTarget%
206
+ meetsTarget =
207
+ latencyChange <= -this.config.minImprovementTarget ||
208
+ throughputChange >= this.config.minImprovementTarget;
209
+ }
210
+ return {
211
+ provider: current.provider,
212
+ model: current.model,
213
+ operation: current.operation,
214
+ current,
215
+ baseline,
216
+ improvement,
217
+ meetsTarget,
218
+ };
219
+ }
220
+ /**
221
+ * Get all measurements for a provider/model
222
+ */
223
+ getMeasurements(provider, model, operation, limit = 100) {
224
+ if (!this.db)
225
+ throw new Error('Tracker not initialized');
226
+ let query = `
227
+ SELECT * FROM llm_measurements
228
+ WHERE provider = ? AND model = ?
229
+ `;
230
+ const params = [provider, model];
231
+ if (operation) {
232
+ query += ' AND operation = ?';
233
+ params.push(operation);
234
+ }
235
+ query += ' ORDER BY timestamp DESC LIMIT ?';
236
+ params.push(limit);
237
+ const rows = this.db.prepare(query).all(...params);
238
+ return rows.map((row) => this.rowToMeasurement(row));
239
+ }
240
+ /**
241
+ * Get summary statistics for a provider/model
242
+ */
243
+ getSummary(provider, model) {
244
+ if (!this.db)
245
+ throw new Error('Tracker not initialized');
246
+ const row = this.db
247
+ .prepare(`
248
+ SELECT
249
+ COUNT(*) as total,
250
+ AVG(latency_p50) as avg_latency,
251
+ AVG(tokens_per_second) as avg_throughput,
252
+ SUM(cost) as total_cost,
253
+ MAX(timestamp) as last_timestamp
254
+ FROM llm_measurements
255
+ WHERE provider = ? AND model = ?
256
+ `)
257
+ .get(provider, model);
258
+ return {
259
+ totalMeasurements: row.total || 0,
260
+ avgLatencyP50: row.avg_latency || 0,
261
+ avgThroughput: row.avg_throughput || 0,
262
+ totalCost: row.total_cost || 0,
263
+ lastMeasurement: row.last_timestamp ? new Date(row.last_timestamp) : null,
264
+ };
265
+ }
266
+ /**
267
+ * Close the database connection
268
+ */
269
+ close() {
270
+ if (this.db) {
271
+ this.db.close();
272
+ this.db = null;
273
+ this.initialized = false;
274
+ }
275
+ }
276
+ rowToMeasurement(row) {
277
+ return {
278
+ id: row.id,
279
+ provider: row.provider,
280
+ model: row.model,
281
+ operation: row.operation,
282
+ metrics: {
283
+ latencyP50: row.latency_p50,
284
+ latencyP95: row.latency_p95,
285
+ latencyP99: row.latency_p99,
286
+ tokensPerSecond: row.tokens_per_second,
287
+ inputTokens: row.input_tokens,
288
+ outputTokens: row.output_tokens,
289
+ cost: row.cost,
290
+ errorRate: row.error_rate,
291
+ },
292
+ sampleSize: row.sample_size,
293
+ timestamp: new Date(row.timestamp),
294
+ environment: row.environment ? JSON.parse(row.environment) : undefined,
295
+ };
296
+ }
297
+ }
298
+ exports.LLMBaselineTracker = LLMBaselineTracker;
299
+ /**
300
+ * Create a tracker instance (convenience function)
301
+ */
302
+ function createLLMBaselineTracker(config) {
303
+ return new LLMBaselineTracker(config);
304
+ }
305
+ //# sourceMappingURL=LLMBaselineTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMBaselineTracker.js","sourceRoot":"","sources":["../../src/providers/LLMBaselineTracker.ts"],"names":[],"mappings":"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"}
@@ -55,6 +55,32 @@ export interface OpenRouterConfig extends LLMProviderConfig {
55
55
  /** Enable auto-routing to cheapest model */
56
56
  enableAutoRoute?: boolean;
57
57
  }
58
+ /**
59
+ * Recommended models for different use cases
60
+ * Aligned with issue #142 LLM Independence roadmap
61
+ *
62
+ * @see https://github.com/proffesor-for-testing/agentic-qe/issues/142
63
+ */
64
+ export declare const RECOMMENDED_MODELS: {
65
+ /** Devstral 2 2512 FREE - 123B, 256K context, FREE, best agentic coding */
66
+ readonly AGENTIC_CODING_FREE: "mistralai/devstral-2512:free";
67
+ /** Devstral Small 2505 - CHEAPEST ($0.06/$0.12 per M) */
68
+ readonly CHEAPEST_PAID: "mistralai/devstral-small-2505";
69
+ /** Devstral Small - 24B, 128K, good balance */
70
+ readonly LIGHTWEIGHT_CODING: "mistralai/devstral-small";
71
+ /** Devstral Medium - complex reasoning ($0.40/$2.00 per M) */
72
+ readonly COMPLEX_REASONING: "mistralai/devstral-medium";
73
+ /** Qwen 2.5 Coder 32B - well-tested, complex tasks */
74
+ readonly QWEN_CODER: "qwen/qwen-2.5-coder-32b-instruct";
75
+ /** Claude 3.5 Sonnet - highest quality */
76
+ readonly HIGH_QUALITY: "anthropic/claude-3.5-sonnet";
77
+ /** GPT-4o Mini - cost-effective vendor */
78
+ readonly COST_EFFECTIVE: "openai/gpt-4o-mini";
79
+ /** Primary FREE model for development */
80
+ readonly FREE: "mistralai/devstral-2512:free";
81
+ /** Alias for agentic coding */
82
+ readonly AGENTIC_CODING: "mistralai/devstral-2512:free";
83
+ };
58
84
  /**
59
85
  * OpenRouterProvider - OpenRouter API implementation of ILLMProvider
60
86
  *
@@ -1 +1 @@
1
- {"version":3,"file":"OpenRouterProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenRouterProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenRouterProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenRouterProvider.ts"],"names":[],"mappings":"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"}
@@ -13,22 +13,88 @@
13
13
  * @version 1.0.0
14
14
  */
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.OpenRouterProvider = void 0;
16
+ exports.OpenRouterProvider = exports.RECOMMENDED_MODELS = void 0;
17
17
  exports.createOpenRouterProvider = createOpenRouterProvider;
18
18
  const ILLMProvider_1 = require("./ILLMProvider");
19
19
  const Logger_1 = require("../utils/Logger");
20
20
  /**
21
21
  * Default OpenRouter pricing (per million tokens)
22
22
  * These are fallback values; actual prices come from the API
23
+ *
24
+ * Model selection aligned with issue #142 roadmap:
25
+ * - Local Dev: devstral-small (24B), qwen2.5-coder (32B)
26
+ * - Production: Devstral-2 (123B), Qwen3-Coder
23
27
  */
24
28
  const DEFAULT_PRICING = {
29
+ // ===========================================
30
+ // FREE TIER - Best for development/testing
31
+ // ===========================================
32
+ // Devstral 2 2512 FREE - 123B dense, 256K context, best for agentic coding
33
+ 'mistralai/devstral-2512:free': { input: 0, output: 0 },
34
+ // ===========================================
35
+ // PAID TIER - Devstral Models (cheapest to most expensive)
36
+ // ===========================================
37
+ // Devstral Small 2505 - CHEAPEST paid option ($0.06/$0.12 per M)
38
+ 'mistralai/devstral-small-2505': { input: 0.06, output: 0.12 },
39
+ // Devstral Small - 24B, 128K context ($0.07/$0.28 per M)
40
+ 'mistralai/devstral-small': { input: 0.07, output: 0.28 },
41
+ // Devstral 2512 paid - same model, paid tier ($0.15/$0.60 per M)
42
+ 'mistralai/devstral-2512': { input: 0.15, output: 0.60 },
43
+ // Devstral Medium - high-performance ($0.40/$2.00 per M)
44
+ 'mistralai/devstral-medium': { input: 0.40, output: 2.00 },
45
+ // ===========================================
46
+ // Qwen Coder Models (per issue #142 roadmap)
47
+ // ===========================================
48
+ 'qwen/qwen-2.5-coder-32b-instruct': { input: 0.18, output: 0.18 },
49
+ 'qwen/qwen3-coder-30b-a3b': { input: 0.10, output: 0.30 }, // MoE efficient
50
+ // ===========================================
51
+ // Vendor Models (fallback)
52
+ // ===========================================
25
53
  'anthropic/claude-3.5-sonnet': { input: 3.0, output: 15.0 },
26
54
  'anthropic/claude-3-haiku': { input: 0.25, output: 1.25 },
27
55
  'openai/gpt-4o': { input: 2.5, output: 10.0 },
28
56
  'openai/gpt-4o-mini': { input: 0.15, output: 0.6 },
29
57
  'google/gemini-pro-1.5': { input: 1.25, output: 5.0 },
30
58
  'meta-llama/llama-3.1-70b-instruct': { input: 0.52, output: 0.75 },
31
- 'auto': { input: 0.5, output: 2.0 }, // Average estimate for auto-routing
59
+ 'auto': { input: 0.5, output: 2.0 },
60
+ };
61
+ /**
62
+ * Recommended models for different use cases
63
+ * Aligned with issue #142 LLM Independence roadmap
64
+ *
65
+ * @see https://github.com/proffesor-for-testing/agentic-qe/issues/142
66
+ */
67
+ exports.RECOMMENDED_MODELS = {
68
+ // ===========================================
69
+ // FREE TIER - Development & Testing
70
+ // ===========================================
71
+ /** Devstral 2 2512 FREE - 123B, 256K context, FREE, best agentic coding */
72
+ AGENTIC_CODING_FREE: 'mistralai/devstral-2512:free',
73
+ // ===========================================
74
+ // PAID TIER - Cost-effective options
75
+ // ===========================================
76
+ /** Devstral Small 2505 - CHEAPEST ($0.06/$0.12 per M) */
77
+ CHEAPEST_PAID: 'mistralai/devstral-small-2505',
78
+ /** Devstral Small - 24B, 128K, good balance */
79
+ LIGHTWEIGHT_CODING: 'mistralai/devstral-small',
80
+ /** Devstral Medium - complex reasoning ($0.40/$2.00 per M) */
81
+ COMPLEX_REASONING: 'mistralai/devstral-medium',
82
+ /** Qwen 2.5 Coder 32B - well-tested, complex tasks */
83
+ QWEN_CODER: 'qwen/qwen-2.5-coder-32b-instruct',
84
+ // ===========================================
85
+ // Vendor Models (highest quality fallback)
86
+ // ===========================================
87
+ /** Claude 3.5 Sonnet - highest quality */
88
+ HIGH_QUALITY: 'anthropic/claude-3.5-sonnet',
89
+ /** GPT-4o Mini - cost-effective vendor */
90
+ COST_EFFECTIVE: 'openai/gpt-4o-mini',
91
+ // ===========================================
92
+ // Aliases for convenience
93
+ // ===========================================
94
+ /** Primary FREE model for development */
95
+ FREE: 'mistralai/devstral-2512:free',
96
+ /** Alias for agentic coding */
97
+ AGENTIC_CODING: 'mistralai/devstral-2512:free',
32
98
  };
33
99
  /**
34
100
  * OpenRouterProvider - OpenRouter API implementation of ILLMProvider
@@ -45,13 +111,16 @@ class OpenRouterProvider {
45
111
  debug: config.debug ?? false,
46
112
  timeout: config.timeout ?? 60000,
47
113
  maxRetries: config.maxRetries ?? 3,
48
- defaultModel: config.defaultModel || 'auto',
114
+ // Default to FREE Devstral 2 (123B, 256K context, best agentic coding)
115
+ defaultModel: config.defaultModel || exports.RECOMMENDED_MODELS.AGENTIC_CODING,
49
116
  siteUrl: config.siteUrl || process.env.OPENROUTER_SITE_URL,
50
117
  siteName: config.siteName || process.env.OPENROUTER_SITE_NAME || 'Agentic-QE-Fleet',
118
+ // Fallback chain: FREE → cheapest paid → complex → vendor
51
119
  fallbackModels: config.fallbackModels || [
52
- 'anthropic/claude-3.5-sonnet',
53
- 'openai/gpt-4o-mini',
54
- 'meta-llama/llama-3.1-70b-instruct'
120
+ exports.RECOMMENDED_MODELS.CHEAPEST_PAID, // Devstral Small 2505 ($0.06/$0.12)
121
+ exports.RECOMMENDED_MODELS.LIGHTWEIGHT_CODING, // Devstral Small ($0.07/$0.28)
122
+ exports.RECOMMENDED_MODELS.COMPLEX_REASONING, // Devstral Medium ($0.40/$2.00)
123
+ exports.RECOMMENDED_MODELS.COST_EFFECTIVE, // GPT-4o Mini fallback
55
124
  ],
56
125
  enableModelDiscovery: config.enableModelDiscovery ?? true,
57
126
  baseUrl: config.baseUrl || 'https://openrouter.ai/api/v1',