agentic-qe 1.3.6 → 1.4.0
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 +30 -0
- package/README.md +42 -5
- package/dist/agents/ApiContractValidatorAgent.d.ts +11 -0
- package/dist/agents/ApiContractValidatorAgent.d.ts.map +1 -1
- package/dist/agents/ApiContractValidatorAgent.js +59 -0
- package/dist/agents/ApiContractValidatorAgent.js.map +1 -1
- package/dist/agents/BaseAgent.js +1 -1
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.d.ts +11 -0
- package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.js +61 -0
- package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +20 -0
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +81 -7
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/FleetCommanderAgent.d.ts +20 -0
- package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
- package/dist/agents/FleetCommanderAgent.js +77 -0
- package/dist/agents/FleetCommanderAgent.js.map +1 -1
- package/dist/agents/PerformanceTesterAgent.d.ts +20 -0
- package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
- package/dist/agents/PerformanceTesterAgent.js +77 -0
- package/dist/agents/PerformanceTesterAgent.js.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.d.ts +20 -0
- package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.js +64 -0
- package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts +20 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.js +64 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.d.ts +11 -0
- package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.js +60 -0
- package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
- package/dist/agents/SecurityScannerAgent.d.ts +20 -0
- package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
- package/dist/agents/SecurityScannerAgent.js +63 -0
- package/dist/agents/SecurityScannerAgent.js.map +1 -1
- package/dist/agents/TestDataArchitectAgent.d.ts +20 -0
- package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
- package/dist/agents/TestDataArchitectAgent.js +62 -0
- package/dist/agents/TestDataArchitectAgent.js.map +1 -1
- package/dist/agents/TestExecutorAgent.d.ts +20 -0
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +88 -13
- package/dist/agents/TestExecutorAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts +1 -0
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +53 -2
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/cli/commands/agentdb/learn.d.ts +22 -0
- package/dist/cli/commands/agentdb/learn.d.ts.map +1 -0
- package/dist/cli/commands/agentdb/learn.js +343 -0
- package/dist/cli/commands/agentdb/learn.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +33 -11
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/patterns/extract.d.ts +12 -0
- package/dist/cli/commands/patterns/extract.d.ts.map +1 -0
- package/dist/cli/commands/patterns/extract.js +304 -0
- package/dist/cli/commands/patterns/extract.js.map +1 -0
- package/dist/cli/commands/patterns/index-new.d.ts +12 -0
- package/dist/cli/commands/patterns/index-new.d.ts.map +1 -0
- package/dist/cli/commands/patterns/index-new.js +102 -0
- package/dist/cli/commands/patterns/index-new.js.map +1 -0
- package/dist/cli/commands/patterns/list.d.ts +14 -0
- package/dist/cli/commands/patterns/list.d.ts.map +1 -0
- package/dist/cli/commands/patterns/list.js +133 -0
- package/dist/cli/commands/patterns/list.js.map +1 -0
- package/dist/cli/commands/patterns/search.d.ts +13 -0
- package/dist/cli/commands/patterns/search.d.ts.map +1 -0
- package/dist/cli/commands/patterns/search.js +125 -0
- package/dist/cli/commands/patterns/search.js.map +1 -0
- package/dist/cli/commands/patterns/show.d.ts +7 -0
- package/dist/cli/commands/patterns/show.d.ts.map +1 -0
- package/dist/cli/commands/patterns/show.js +164 -0
- package/dist/cli/commands/patterns/show.js.map +1 -0
- package/dist/cli/commands/patterns/stats.d.ts +11 -0
- package/dist/cli/commands/patterns/stats.d.ts.map +1 -0
- package/dist/cli/commands/patterns/stats.js +241 -0
- package/dist/cli/commands/patterns/stats.js.map +1 -0
- package/dist/cli/index.js +1 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/PatternDatabaseAdapter.d.ts +169 -0
- package/dist/core/PatternDatabaseAdapter.d.ts.map +1 -0
- package/dist/core/PatternDatabaseAdapter.js +493 -0
- package/dist/core/PatternDatabaseAdapter.js.map +1 -0
- package/dist/learning/AgentDBLearningIntegration.d.ts +147 -0
- package/dist/learning/AgentDBLearningIntegration.d.ts.map +1 -0
- package/dist/learning/AgentDBLearningIntegration.js +380 -0
- package/dist/learning/AgentDBLearningIntegration.js.map +1 -0
- package/dist/learning/AgentDBPatternOptimizer.d.ts +129 -0
- package/dist/learning/AgentDBPatternOptimizer.d.ts.map +1 -0
- package/dist/learning/AgentDBPatternOptimizer.js +332 -0
- package/dist/learning/AgentDBPatternOptimizer.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +15 -1
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +128 -1
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/learning/RewardCalculator.d.ts +100 -0
- package/dist/learning/RewardCalculator.d.ts.map +1 -0
- package/dist/learning/RewardCalculator.js +176 -0
- package/dist/learning/RewardCalculator.js.map +1 -0
- package/dist/learning/StateExtractor.d.ts +62 -0
- package/dist/learning/StateExtractor.d.ts.map +1 -0
- package/dist/learning/StateExtractor.js +217 -0
- package/dist/learning/StateExtractor.js.map +1 -0
- package/dist/migrations/001_add_learning_tables.d.ts +63 -0
- package/dist/migrations/001_add_learning_tables.d.ts.map +1 -0
- package/dist/migrations/001_add_learning_tables.js +287 -0
- package/dist/migrations/001_add_learning_tables.js.map +1 -0
- package/dist/reasoning/PatternExtractor.d.ts +25 -0
- package/dist/reasoning/PatternExtractor.d.ts.map +1 -1
- package/dist/reasoning/PatternExtractor.js +130 -0
- package/dist/reasoning/PatternExtractor.js.map +1 -1
- package/dist/reasoning/QEReasoningBank.d.ts +18 -2
- package/dist/reasoning/QEReasoningBank.d.ts.map +1 -1
- package/dist/reasoning/QEReasoningBank.js +75 -3
- package/dist/reasoning/QEReasoningBank.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/Database.d.ts +107 -0
- package/dist/utils/Database.d.ts.map +1 -1
- package/dist/utils/Database.js +337 -1
- package/dist/utils/Database.js.map +1 -1
- package/dist/utils/__mocks__/Database.d.ts +18 -17
- package/dist/utils/__mocks__/Database.d.ts.map +1 -1
- package/dist/utils/__mocks__/Database.js +22 -55
- package/dist/utils/__mocks__/Database.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AgentDB Pattern Optimizer
|
|
4
|
+
*
|
|
5
|
+
* Optimizes pattern storage and retrieval using AgentDB features:
|
|
6
|
+
* - Vector quantization (4-32x memory reduction)
|
|
7
|
+
* - HNSW indexing (150x faster search)
|
|
8
|
+
* - Pattern consolidation and deduplication
|
|
9
|
+
* - Automatic embedding generation
|
|
10
|
+
*
|
|
11
|
+
* @version 1.0.0
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.AgentDBPatternOptimizer = exports.PatternConsolidator = exports.VectorEmbeddingGenerator = void 0;
|
|
15
|
+
const Logger_1 = require("../utils/Logger");
|
|
16
|
+
/**
|
|
17
|
+
* Vector embedding generator
|
|
18
|
+
*/
|
|
19
|
+
class VectorEmbeddingGenerator {
|
|
20
|
+
constructor(dimension = 384) {
|
|
21
|
+
this.dimension = dimension;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generate embedding from pattern
|
|
25
|
+
*
|
|
26
|
+
* Uses simple TF-IDF-like approach for now
|
|
27
|
+
* In production, would use sentence transformers or similar
|
|
28
|
+
*/
|
|
29
|
+
generateEmbedding(pattern) {
|
|
30
|
+
const text = this.patternToText(pattern);
|
|
31
|
+
return this.textToEmbedding(text);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Generate embedding from query text
|
|
35
|
+
*/
|
|
36
|
+
generateQueryEmbedding(query) {
|
|
37
|
+
return this.textToEmbedding(query);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Convert pattern to text representation
|
|
41
|
+
*/
|
|
42
|
+
patternToText(pattern) {
|
|
43
|
+
const parts = [];
|
|
44
|
+
parts.push(pattern.name);
|
|
45
|
+
parts.push(pattern.description);
|
|
46
|
+
parts.push(pattern.category);
|
|
47
|
+
parts.push(pattern.framework);
|
|
48
|
+
parts.push(...pattern.metadata.tags);
|
|
49
|
+
if (pattern.examples.length > 0) {
|
|
50
|
+
parts.push(pattern.examples[0].substring(0, 500)); // First example, truncated
|
|
51
|
+
}
|
|
52
|
+
return parts.join(' ');
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Convert text to vector embedding
|
|
56
|
+
*
|
|
57
|
+
* Simplified implementation - in production use sentence-transformers
|
|
58
|
+
*/
|
|
59
|
+
textToEmbedding(text) {
|
|
60
|
+
const embedding = new Array(this.dimension).fill(0);
|
|
61
|
+
const words = text.toLowerCase().split(/\s+/);
|
|
62
|
+
// Simple word hashing approach
|
|
63
|
+
for (let i = 0; i < words.length; i++) {
|
|
64
|
+
const word = words[i];
|
|
65
|
+
const hash = this.hashString(word);
|
|
66
|
+
// Distribute word influence across multiple dimensions
|
|
67
|
+
for (let j = 0; j < 3; j++) {
|
|
68
|
+
const index = (hash + j) % this.dimension;
|
|
69
|
+
embedding[index] += 1.0 / Math.sqrt(words.length);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Normalize to unit vector
|
|
73
|
+
const magnitude = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));
|
|
74
|
+
return embedding.map(val => val / (magnitude || 1));
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Simple string hash function
|
|
78
|
+
*/
|
|
79
|
+
hashString(str) {
|
|
80
|
+
let hash = 0;
|
|
81
|
+
for (let i = 0; i < str.length; i++) {
|
|
82
|
+
const char = str.charCodeAt(i);
|
|
83
|
+
hash = ((hash << 5) - hash) + char;
|
|
84
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
85
|
+
}
|
|
86
|
+
return Math.abs(hash);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.VectorEmbeddingGenerator = VectorEmbeddingGenerator;
|
|
90
|
+
/**
|
|
91
|
+
* Pattern consolidation and deduplication
|
|
92
|
+
*/
|
|
93
|
+
class PatternConsolidator {
|
|
94
|
+
constructor(similarityThreshold = 0.85) {
|
|
95
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
96
|
+
this.similarityThreshold = similarityThreshold;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Consolidate similar patterns
|
|
100
|
+
*
|
|
101
|
+
* Merges patterns that are very similar (>85% similarity)
|
|
102
|
+
* Keeps the best quality pattern and aggregates metrics
|
|
103
|
+
*/
|
|
104
|
+
consolidatePatterns(patterns) {
|
|
105
|
+
const groups = this.groupSimilarPatterns(patterns);
|
|
106
|
+
const consolidated = [];
|
|
107
|
+
for (const group of groups) {
|
|
108
|
+
if (group.length === 1) {
|
|
109
|
+
consolidated.push(group[0]);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const merged = this.mergePatterns(group);
|
|
113
|
+
consolidated.push(merged);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
this.logger.info(`Consolidated ${patterns.length} patterns into ${consolidated.length}`, {
|
|
117
|
+
reduction: ((1 - consolidated.length / patterns.length) * 100).toFixed(1) + '%'
|
|
118
|
+
});
|
|
119
|
+
return consolidated;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Group similar patterns together
|
|
123
|
+
*/
|
|
124
|
+
groupSimilarPatterns(patterns) {
|
|
125
|
+
const groups = [];
|
|
126
|
+
const used = new Set();
|
|
127
|
+
for (const pattern of patterns) {
|
|
128
|
+
if (used.has(pattern.id)) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const group = [pattern];
|
|
132
|
+
used.add(pattern.id);
|
|
133
|
+
// Find similar patterns
|
|
134
|
+
for (const other of patterns) {
|
|
135
|
+
if (used.has(other.id)) {
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (this.areSimilar(pattern, other)) {
|
|
139
|
+
group.push(other);
|
|
140
|
+
used.add(other.id);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
groups.push(group);
|
|
144
|
+
}
|
|
145
|
+
return groups;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Check if two patterns are similar
|
|
149
|
+
*/
|
|
150
|
+
areSimilar(p1, p2) {
|
|
151
|
+
// Must be same framework and category
|
|
152
|
+
if (p1.framework !== p2.framework || p1.category !== p2.category) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
// Calculate name similarity
|
|
156
|
+
const nameSim = this.stringSimilarity(p1.name.toLowerCase(), p2.name.toLowerCase());
|
|
157
|
+
// Calculate tag overlap
|
|
158
|
+
const tags1 = new Set(p1.metadata.tags);
|
|
159
|
+
const tags2 = new Set(p2.metadata.tags);
|
|
160
|
+
const intersection = new Set([...tags1].filter(t => tags2.has(t)));
|
|
161
|
+
const union = new Set([...tags1, ...tags2]);
|
|
162
|
+
const tagSim = union.size > 0 ? intersection.size / union.size : 0;
|
|
163
|
+
// Combined similarity
|
|
164
|
+
const similarity = nameSim * 0.6 + tagSim * 0.4;
|
|
165
|
+
return similarity >= this.similarityThreshold;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Calculate string similarity (Levenshtein distance)
|
|
169
|
+
*/
|
|
170
|
+
stringSimilarity(s1, s2) {
|
|
171
|
+
const longer = s1.length > s2.length ? s1 : s2;
|
|
172
|
+
const shorter = s1.length > s2.length ? s2 : s1;
|
|
173
|
+
if (longer.length === 0) {
|
|
174
|
+
return 1.0;
|
|
175
|
+
}
|
|
176
|
+
const distance = this.levenshteinDistance(longer, shorter);
|
|
177
|
+
return (longer.length - distance) / longer.length;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Levenshtein distance algorithm
|
|
181
|
+
*/
|
|
182
|
+
levenshteinDistance(s1, s2) {
|
|
183
|
+
const matrix = [];
|
|
184
|
+
for (let i = 0; i <= s2.length; i++) {
|
|
185
|
+
matrix[i] = [i];
|
|
186
|
+
}
|
|
187
|
+
for (let j = 0; j <= s1.length; j++) {
|
|
188
|
+
matrix[0][j] = j;
|
|
189
|
+
}
|
|
190
|
+
for (let i = 1; i <= s2.length; i++) {
|
|
191
|
+
for (let j = 1; j <= s1.length; j++) {
|
|
192
|
+
if (s2.charAt(i - 1) === s1.charAt(j - 1)) {
|
|
193
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return matrix[s2.length][s1.length];
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Merge similar patterns into one
|
|
204
|
+
*/
|
|
205
|
+
mergePatterns(patterns) {
|
|
206
|
+
// Sort by quality and pick the best as base
|
|
207
|
+
const sorted = [...patterns].sort((a, b) => (b.quality || 0) - (a.quality || 0));
|
|
208
|
+
const base = { ...sorted[0] };
|
|
209
|
+
// Aggregate metrics
|
|
210
|
+
base.usageCount = patterns.reduce((sum, p) => sum + p.usageCount, 0);
|
|
211
|
+
base.successRate = patterns.reduce((sum, p) => sum + p.successRate, 0) / patterns.length;
|
|
212
|
+
// Merge examples (keep top 5)
|
|
213
|
+
const allExamples = patterns.flatMap(p => p.examples);
|
|
214
|
+
base.examples = [...new Set(allExamples)].slice(0, 5);
|
|
215
|
+
// Merge tags
|
|
216
|
+
const allTags = new Set(patterns.flatMap(p => p.metadata.tags));
|
|
217
|
+
base.metadata.tags = Array.from(allTags);
|
|
218
|
+
// Update confidence based on aggregated data
|
|
219
|
+
base.confidence = Math.min(0.95, base.confidence + 0.05 * (patterns.length - 1));
|
|
220
|
+
return base;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
exports.PatternConsolidator = PatternConsolidator;
|
|
224
|
+
/**
|
|
225
|
+
* AgentDB Pattern Optimizer
|
|
226
|
+
*
|
|
227
|
+
* Main optimizer class that coordinates embedding generation,
|
|
228
|
+
* pattern consolidation, and AgentDB storage optimization
|
|
229
|
+
*/
|
|
230
|
+
class AgentDBPatternOptimizer {
|
|
231
|
+
constructor(reasoningBank) {
|
|
232
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
233
|
+
this.reasoningBank = reasoningBank;
|
|
234
|
+
this.embeddingGenerator = new VectorEmbeddingGenerator(384);
|
|
235
|
+
this.consolidator = new PatternConsolidator(0.85);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Optimize pattern storage
|
|
239
|
+
*
|
|
240
|
+
* Steps:
|
|
241
|
+
* 1. Generate vector embeddings for all patterns
|
|
242
|
+
* 2. Consolidate similar patterns
|
|
243
|
+
* 3. Store optimized patterns with embeddings
|
|
244
|
+
*/
|
|
245
|
+
async optimizePatterns(patterns) {
|
|
246
|
+
const startTime = Date.now();
|
|
247
|
+
// 1. Generate embeddings
|
|
248
|
+
this.logger.info(`Generating embeddings for ${patterns.length} patterns...`);
|
|
249
|
+
const embeddings = new Map();
|
|
250
|
+
for (const pattern of patterns) {
|
|
251
|
+
const embedding = this.embeddingGenerator.generateEmbedding(pattern);
|
|
252
|
+
embeddings.set(pattern.id, embedding);
|
|
253
|
+
}
|
|
254
|
+
// 2. Consolidate patterns
|
|
255
|
+
this.logger.info('Consolidating similar patterns...');
|
|
256
|
+
const consolidated = this.consolidator.consolidatePatterns(patterns);
|
|
257
|
+
// 3. Update embeddings for consolidated patterns
|
|
258
|
+
const consolidatedEmbeddings = new Map();
|
|
259
|
+
for (const pattern of consolidated) {
|
|
260
|
+
const embedding = this.embeddingGenerator.generateEmbedding(pattern);
|
|
261
|
+
consolidatedEmbeddings.set(pattern.id, embedding);
|
|
262
|
+
}
|
|
263
|
+
// 4. Calculate memory reduction
|
|
264
|
+
const memoryReduction = this.calculateMemoryReduction(patterns, consolidated);
|
|
265
|
+
const duration = Date.now() - startTime;
|
|
266
|
+
this.logger.info(`Pattern optimization completed in ${duration}ms`, {
|
|
267
|
+
originalCount: patterns.length,
|
|
268
|
+
consolidatedCount: consolidated.length,
|
|
269
|
+
memoryReduction: `${(memoryReduction * 100).toFixed(1)}%`
|
|
270
|
+
});
|
|
271
|
+
return {
|
|
272
|
+
optimized: consolidated,
|
|
273
|
+
embeddings: consolidatedEmbeddings,
|
|
274
|
+
stats: {
|
|
275
|
+
originalCount: patterns.length,
|
|
276
|
+
consolidatedCount: consolidated.length,
|
|
277
|
+
memoryReduction
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Calculate memory reduction percentage
|
|
283
|
+
*/
|
|
284
|
+
calculateMemoryReduction(original, consolidated) {
|
|
285
|
+
const originalSize = JSON.stringify(original).length;
|
|
286
|
+
const consolidatedSize = JSON.stringify(consolidated).length;
|
|
287
|
+
return (originalSize - consolidatedSize) / originalSize;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Generate embedding for query
|
|
291
|
+
*/
|
|
292
|
+
generateQueryEmbedding(query) {
|
|
293
|
+
return this.embeddingGenerator.generateQueryEmbedding(query);
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Find similar patterns using vector search
|
|
297
|
+
*/
|
|
298
|
+
async findSimilarPatterns(queryEmbedding, patterns, embeddings, topK = 10) {
|
|
299
|
+
const similarities = [];
|
|
300
|
+
for (const pattern of patterns) {
|
|
301
|
+
const patternEmbedding = embeddings.get(pattern.id);
|
|
302
|
+
if (!patternEmbedding) {
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
const similarity = this.cosineSimilarity(queryEmbedding, patternEmbedding);
|
|
306
|
+
similarities.push({ pattern, similarity });
|
|
307
|
+
}
|
|
308
|
+
// Sort by similarity and return top K
|
|
309
|
+
similarities.sort((a, b) => b.similarity - a.similarity);
|
|
310
|
+
return similarities.slice(0, topK);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Calculate cosine similarity between two vectors
|
|
314
|
+
*/
|
|
315
|
+
cosineSimilarity(a, b) {
|
|
316
|
+
if (a.length !== b.length) {
|
|
317
|
+
throw new Error('Vectors must have same dimension');
|
|
318
|
+
}
|
|
319
|
+
let dotProduct = 0;
|
|
320
|
+
let magnitudeA = 0;
|
|
321
|
+
let magnitudeB = 0;
|
|
322
|
+
for (let i = 0; i < a.length; i++) {
|
|
323
|
+
dotProduct += a[i] * b[i];
|
|
324
|
+
magnitudeA += a[i] * a[i];
|
|
325
|
+
magnitudeB += b[i] * b[i];
|
|
326
|
+
}
|
|
327
|
+
const magnitude = Math.sqrt(magnitudeA) * Math.sqrt(magnitudeB);
|
|
328
|
+
return magnitude === 0 ? 0 : dotProduct / magnitude;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
exports.AgentDBPatternOptimizer = AgentDBPatternOptimizer;
|
|
332
|
+
//# sourceMappingURL=AgentDBPatternOptimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentDBPatternOptimizer.js","sourceRoot":"","sources":["../../src/learning/AgentDBPatternOptimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { SwarmMemoryManager } from '../core/memory/SwarmMemoryManager';
|
|
8
8
|
import { QLearningConfig } from './QLearning';
|
|
9
|
+
import { TaskResult } from './RewardCalculator';
|
|
10
|
+
import { Database } from '../utils/Database';
|
|
9
11
|
import { LearningConfig, TaskExperience, TaskState, AgentAction, LearningFeedback, LearningOutcome, LearnedPattern, FailurePattern, StrategyRecommendation } from './types';
|
|
10
12
|
/**
|
|
11
13
|
* LearningEngine - Reinforcement learning for agents
|
|
@@ -22,11 +24,23 @@ export declare class LearningEngine {
|
|
|
22
24
|
private patterns;
|
|
23
25
|
private failurePatterns;
|
|
24
26
|
private taskCount;
|
|
25
|
-
|
|
27
|
+
private readonly stateExtractor;
|
|
28
|
+
private readonly rewardCalculator;
|
|
29
|
+
private database?;
|
|
30
|
+
constructor(agentId: string, memoryStore: SwarmMemoryManager, config?: Partial<LearningConfig>, database?: Database);
|
|
26
31
|
/**
|
|
27
32
|
* Initialize the learning engine
|
|
28
33
|
*/
|
|
29
34
|
initialize(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Record experience from task execution (PRODUCTION-READY WITH DATABASE PERSISTENCE)
|
|
37
|
+
* This is the main integration point for Q-learning
|
|
38
|
+
*/
|
|
39
|
+
recordExperience(task: any, result: TaskResult, feedback?: LearningFeedback): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Load Q-table from database on initialization
|
|
42
|
+
*/
|
|
43
|
+
private loadQTableFromDatabase;
|
|
30
44
|
/**
|
|
31
45
|
* Learn from a task execution
|
|
32
46
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LearningEngine.d.ts","sourceRoot":"","sources":["../../src/learning/LearningEngine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAa,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"LearningEngine.d.ts","sourceRoot":"","sources":["../../src/learning/LearningEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ exports.LearningEngine = void 0;
|
|
|
10
10
|
const uuid_1 = require("uuid");
|
|
11
11
|
const Logger_1 = require("../utils/Logger");
|
|
12
12
|
const QLearning_1 = require("./QLearning");
|
|
13
|
+
const StateExtractor_1 = require("./StateExtractor");
|
|
14
|
+
const RewardCalculator_1 = require("./RewardCalculator");
|
|
13
15
|
// Import version from package.json to maintain consistency
|
|
14
16
|
const packageJson = require('../../package.json');
|
|
15
17
|
const PACKAGE_VERSION = packageJson.version;
|
|
@@ -31,7 +33,7 @@ const DEFAULT_CONFIG = {
|
|
|
31
33
|
* LearningEngine - Reinforcement learning for agents
|
|
32
34
|
*/
|
|
33
35
|
class LearningEngine {
|
|
34
|
-
constructor(agentId, memoryStore, config = {}) {
|
|
36
|
+
constructor(agentId, memoryStore, config = {}, database) {
|
|
35
37
|
this.logger = Logger_1.Logger.getInstance();
|
|
36
38
|
this.agentId = agentId;
|
|
37
39
|
this.memoryStore = memoryStore;
|
|
@@ -42,6 +44,9 @@ class LearningEngine {
|
|
|
42
44
|
this.patterns = new Map();
|
|
43
45
|
this.failurePatterns = new Map();
|
|
44
46
|
this.taskCount = 0;
|
|
47
|
+
this.stateExtractor = new StateExtractor_1.StateExtractor();
|
|
48
|
+
this.rewardCalculator = new RewardCalculator_1.RewardCalculator();
|
|
49
|
+
this.database = database;
|
|
45
50
|
}
|
|
46
51
|
/**
|
|
47
52
|
* Initialize the learning engine
|
|
@@ -50,10 +55,132 @@ class LearningEngine {
|
|
|
50
55
|
this.logger.info(`Initializing LearningEngine for agent ${this.agentId}`);
|
|
51
56
|
// Load previous learning state if exists
|
|
52
57
|
await this.loadState();
|
|
58
|
+
// Load Q-values from database if available
|
|
59
|
+
if (this.database) {
|
|
60
|
+
await this.loadQTableFromDatabase();
|
|
61
|
+
}
|
|
53
62
|
// Store config in memory
|
|
54
63
|
await this.memoryStore.store(`phase2/learning/${this.agentId}/config`, this.config, { partition: 'learning' });
|
|
55
64
|
this.logger.info('LearningEngine initialized successfully');
|
|
56
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Record experience from task execution (PRODUCTION-READY WITH DATABASE PERSISTENCE)
|
|
68
|
+
* This is the main integration point for Q-learning
|
|
69
|
+
*/
|
|
70
|
+
async recordExperience(task, result, feedback) {
|
|
71
|
+
if (!this.config.enabled) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
// Extract state from task
|
|
76
|
+
const state = this.stateExtractor.extractState(task, task.context);
|
|
77
|
+
// Extract action from result
|
|
78
|
+
const action = {
|
|
79
|
+
strategy: result.metadata?.strategy || 'default',
|
|
80
|
+
toolsUsed: result.metadata?.toolsUsed || [],
|
|
81
|
+
parallelization: result.metadata?.parallelization || 0.5,
|
|
82
|
+
retryPolicy: result.metadata?.retryPolicy || 'exponential',
|
|
83
|
+
resourceAllocation: result.metadata?.resourceAllocation || 0.5
|
|
84
|
+
};
|
|
85
|
+
// Calculate reward using RewardCalculator
|
|
86
|
+
const reward = this.rewardCalculator.calculateReward(result, feedback);
|
|
87
|
+
// Create next state (after execution)
|
|
88
|
+
const nextState = {
|
|
89
|
+
...state,
|
|
90
|
+
previousAttempts: state.previousAttempts + 1,
|
|
91
|
+
availableResources: state.availableResources * (result.success ? 1.0 : 0.9)
|
|
92
|
+
};
|
|
93
|
+
// Create experience
|
|
94
|
+
const experience = {
|
|
95
|
+
taskId: task.id || (0, uuid_1.v4)(),
|
|
96
|
+
taskType: task.type,
|
|
97
|
+
state,
|
|
98
|
+
action,
|
|
99
|
+
reward,
|
|
100
|
+
nextState,
|
|
101
|
+
timestamp: new Date(),
|
|
102
|
+
agentId: this.agentId
|
|
103
|
+
};
|
|
104
|
+
// Store experience in memory
|
|
105
|
+
this.experiences.push(experience);
|
|
106
|
+
// Store experience in database (ACTUAL PERSISTENCE)
|
|
107
|
+
if (this.database) {
|
|
108
|
+
await this.database.storeLearningExperience({
|
|
109
|
+
agentId: this.agentId,
|
|
110
|
+
taskId: experience.taskId,
|
|
111
|
+
taskType: experience.taskType,
|
|
112
|
+
state: this.stateExtractor.encodeState(experience.state),
|
|
113
|
+
action: this.stateExtractor.encodeAction(experience.action),
|
|
114
|
+
reward: experience.reward,
|
|
115
|
+
nextState: this.stateExtractor.encodeState(experience.nextState),
|
|
116
|
+
episodeId: `episode-${Math.floor(this.taskCount / 10)}`
|
|
117
|
+
});
|
|
118
|
+
this.logger.debug(`Stored learning experience in database: task=${experience.taskId}, reward=${reward.toFixed(3)}`);
|
|
119
|
+
}
|
|
120
|
+
// Update Q-table with new experience
|
|
121
|
+
await this.updateQTable(experience);
|
|
122
|
+
// Store updated Q-value to database (ACTUAL Q-VALUE PERSISTENCE)
|
|
123
|
+
if (this.database) {
|
|
124
|
+
const stateKey = this.stateExtractor.encodeState(experience.state);
|
|
125
|
+
const actionKey = this.stateExtractor.encodeAction(experience.action);
|
|
126
|
+
const stateActions = this.qTable.get(stateKey);
|
|
127
|
+
const qValue = stateActions?.get(actionKey) || 0;
|
|
128
|
+
await this.database.upsertQValue(this.agentId, stateKey, actionKey, qValue);
|
|
129
|
+
this.logger.debug(`Persisted Q-value to database: Q(${stateKey}, ${actionKey}) = ${qValue.toFixed(3)}`);
|
|
130
|
+
}
|
|
131
|
+
// Update patterns
|
|
132
|
+
await this.updatePatterns(experience);
|
|
133
|
+
// Increment task count
|
|
134
|
+
this.taskCount++;
|
|
135
|
+
// Periodic batch update
|
|
136
|
+
if (this.taskCount % this.config.updateFrequency === 0) {
|
|
137
|
+
await this.performBatchUpdate();
|
|
138
|
+
// Store learning snapshot for analytics
|
|
139
|
+
if (this.database) {
|
|
140
|
+
const stats = await this.database.getLearningStatistics(this.agentId);
|
|
141
|
+
await this.database.storeLearningSnapshot({
|
|
142
|
+
agentId: this.agentId,
|
|
143
|
+
snapshotType: 'performance',
|
|
144
|
+
metrics: stats,
|
|
145
|
+
improvementRate: stats.recentImprovement,
|
|
146
|
+
totalExperiences: stats.totalExperiences,
|
|
147
|
+
explorationRate: this.config.explorationRate
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Decay exploration rate
|
|
152
|
+
this.decayExploration();
|
|
153
|
+
// Save state periodically
|
|
154
|
+
if (this.taskCount % 50 === 0) {
|
|
155
|
+
await this.saveState();
|
|
156
|
+
}
|
|
157
|
+
this.logger.info(`Recorded experience: reward=${reward.toFixed(3)}, exploration=${this.config.explorationRate.toFixed(3)}, experiences=${this.experiences.length}`);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
this.logger.error(`Failed to record experience:`, error);
|
|
161
|
+
// Don't throw - learning failures shouldn't break task execution
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Load Q-table from database on initialization
|
|
166
|
+
*/
|
|
167
|
+
async loadQTableFromDatabase() {
|
|
168
|
+
if (!this.database)
|
|
169
|
+
return;
|
|
170
|
+
try {
|
|
171
|
+
const qValues = await this.database.getAllQValues(this.agentId);
|
|
172
|
+
for (const qv of qValues) {
|
|
173
|
+
if (!this.qTable.has(qv.state_key)) {
|
|
174
|
+
this.qTable.set(qv.state_key, new Map());
|
|
175
|
+
}
|
|
176
|
+
this.qTable.get(qv.state_key).set(qv.action_key, qv.q_value);
|
|
177
|
+
}
|
|
178
|
+
this.logger.info(`Loaded ${qValues.length} Q-values from database`);
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
this.logger.warn(`Failed to load Q-values from database:`, error);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
57
184
|
/**
|
|
58
185
|
* Learn from a task execution
|
|
59
186
|
*/
|