agentic-qe 2.2.0 → 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 +15 -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.js +3 -3
- 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/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/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 +4 -4
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +20 -13
- 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/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/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/index.d.ts +4 -1
- package/dist/learning/algorithms/index.d.ts.map +1 -1
- package/dist/learning/algorithms/index.js +7 -1
- package/dist/learning/algorithms/index.js.map +1 -1
- package/dist/learning/index.d.ts +8 -0
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +17 -1
- package/dist/learning/index.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- 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/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +7 -1
- package/dist/providers/index.js.map +1 -1
- 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,552 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PerformanceOptimizer - Performance optimizations for learning algorithms
|
|
4
|
+
*
|
|
5
|
+
* Implements performance optimizations for production use with many agents:
|
|
6
|
+
* - Batched Q-value updates for efficiency
|
|
7
|
+
* - Lazy evaluation for rarely-accessed Q-values
|
|
8
|
+
* - Caching layer for frequently-accessed states
|
|
9
|
+
* - Optimized vector operations with typed arrays
|
|
10
|
+
* - Experience prioritization for faster convergence
|
|
11
|
+
* - Memory pooling for experience objects
|
|
12
|
+
*
|
|
13
|
+
* Target Performance:
|
|
14
|
+
* - Q-value lookups: < 1ms
|
|
15
|
+
* - Experience storage: < 5ms
|
|
16
|
+
* - Pattern matching: < 10ms for 10k patterns
|
|
17
|
+
* - Memory usage: < 100MB for 100k experiences
|
|
18
|
+
*
|
|
19
|
+
* @module learning/PerformanceOptimizer
|
|
20
|
+
* @version 1.0.0
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.VectorOps = exports.PerformanceOptimizer = void 0;
|
|
24
|
+
const Logger_1 = require("../utils/Logger");
|
|
25
|
+
/**
|
|
26
|
+
* Default optimizer configuration
|
|
27
|
+
*/
|
|
28
|
+
const DEFAULT_CONFIG = {
|
|
29
|
+
enableCaching: true,
|
|
30
|
+
cacheSize: 1000,
|
|
31
|
+
enableLazyEval: true,
|
|
32
|
+
lazyAccessThreshold: 2,
|
|
33
|
+
enableBatchUpdates: true,
|
|
34
|
+
batchUpdateSize: 32,
|
|
35
|
+
enableMemoryPooling: true,
|
|
36
|
+
memoryPoolSize: 500,
|
|
37
|
+
enablePrioritization: true,
|
|
38
|
+
priorityDecay: 0.95
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* LRU Cache for Q-values
|
|
42
|
+
* Optimized for fast lookups using Map with LRU eviction
|
|
43
|
+
*/
|
|
44
|
+
class LRUCache {
|
|
45
|
+
constructor(maxSize) {
|
|
46
|
+
this.maxSize = maxSize;
|
|
47
|
+
this.cache = new Map();
|
|
48
|
+
this.accessOrder = [];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get value from cache (< 1ms target)
|
|
52
|
+
*/
|
|
53
|
+
get(stateKey, actionKey) {
|
|
54
|
+
const key = `${stateKey}:${actionKey}`;
|
|
55
|
+
const entry = this.cache.get(key);
|
|
56
|
+
if (!entry) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
// Update access tracking
|
|
60
|
+
entry.accessCount++;
|
|
61
|
+
entry.lastAccessed = Date.now();
|
|
62
|
+
// Move to front of access order (LRU)
|
|
63
|
+
const index = this.accessOrder.indexOf(key);
|
|
64
|
+
if (index > -1) {
|
|
65
|
+
this.accessOrder.splice(index, 1);
|
|
66
|
+
}
|
|
67
|
+
this.accessOrder.push(key);
|
|
68
|
+
return entry.value;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Set value in cache with LRU eviction
|
|
72
|
+
*/
|
|
73
|
+
set(stateKey, actionKey, value) {
|
|
74
|
+
const key = `${stateKey}:${actionKey}`;
|
|
75
|
+
// Evict LRU entry if at capacity
|
|
76
|
+
if (this.cache.size >= this.maxSize && !this.cache.has(key)) {
|
|
77
|
+
const lruKey = this.accessOrder.shift();
|
|
78
|
+
if (lruKey) {
|
|
79
|
+
this.cache.delete(lruKey);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const entry = {
|
|
83
|
+
stateKey,
|
|
84
|
+
actionKey,
|
|
85
|
+
value,
|
|
86
|
+
accessCount: 1,
|
|
87
|
+
lastAccessed: Date.now(),
|
|
88
|
+
dirty: false
|
|
89
|
+
};
|
|
90
|
+
this.cache.set(key, entry);
|
|
91
|
+
this.accessOrder.push(key);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Mark entry as dirty (needs persistence)
|
|
95
|
+
*/
|
|
96
|
+
markDirty(stateKey, actionKey) {
|
|
97
|
+
const key = `${stateKey}:${actionKey}`;
|
|
98
|
+
const entry = this.cache.get(key);
|
|
99
|
+
if (entry) {
|
|
100
|
+
entry.dirty = true;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get all dirty entries
|
|
105
|
+
*/
|
|
106
|
+
getDirtyEntries() {
|
|
107
|
+
return Array.from(this.cache.values()).filter(e => e.dirty);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Clear dirty flags
|
|
111
|
+
*/
|
|
112
|
+
clearDirtyFlags() {
|
|
113
|
+
for (const entry of this.cache.values()) {
|
|
114
|
+
entry.dirty = false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get cache statistics
|
|
119
|
+
*/
|
|
120
|
+
getStats() {
|
|
121
|
+
const entries = Array.from(this.cache.values());
|
|
122
|
+
const totalAccess = entries.reduce((sum, e) => sum + e.accessCount, 0);
|
|
123
|
+
const avgAccess = entries.length > 0 ? totalAccess / entries.length : 0;
|
|
124
|
+
return {
|
|
125
|
+
size: this.cache.size,
|
|
126
|
+
hitRate: 0, // Would need to track misses
|
|
127
|
+
avgAccessCount: avgAccess
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Clear cache
|
|
132
|
+
*/
|
|
133
|
+
clear() {
|
|
134
|
+
this.cache.clear();
|
|
135
|
+
this.accessOrder = [];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Optimized vector operations using Float64Array
|
|
140
|
+
* Faster than standard array operations for numerical computations
|
|
141
|
+
*/
|
|
142
|
+
class VectorOps {
|
|
143
|
+
/**
|
|
144
|
+
* Encode state features to typed array (faster than regular arrays)
|
|
145
|
+
*/
|
|
146
|
+
static encodeStateToTypedArray(state) {
|
|
147
|
+
const features = new Float64Array(6);
|
|
148
|
+
features[0] = state.taskComplexity;
|
|
149
|
+
features[1] = state.requiredCapabilities.length / 10; // normalized
|
|
150
|
+
features[2] = state.previousAttempts / 5; // normalized
|
|
151
|
+
features[3] = state.availableResources;
|
|
152
|
+
features[4] = state.timeConstraint ? Math.min(state.timeConstraint / 300000, 1) : 1;
|
|
153
|
+
features[5] = Object.keys(state.contextFeatures).length / 10; // context complexity
|
|
154
|
+
return features;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Fast dot product using typed arrays
|
|
158
|
+
*/
|
|
159
|
+
static dotProduct(a, b) {
|
|
160
|
+
let result = 0;
|
|
161
|
+
const len = Math.min(a.length, b.length);
|
|
162
|
+
for (let i = 0; i < len; i++) {
|
|
163
|
+
result += a[i] * b[i];
|
|
164
|
+
}
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Fast euclidean distance
|
|
169
|
+
*/
|
|
170
|
+
static euclideanDistance(a, b) {
|
|
171
|
+
let sum = 0;
|
|
172
|
+
const len = Math.min(a.length, b.length);
|
|
173
|
+
for (let i = 0; i < len; i++) {
|
|
174
|
+
const diff = a[i] - b[i];
|
|
175
|
+
sum += diff * diff;
|
|
176
|
+
}
|
|
177
|
+
return Math.sqrt(sum);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Normalize vector in-place
|
|
181
|
+
*/
|
|
182
|
+
static normalize(vec) {
|
|
183
|
+
let sum = 0;
|
|
184
|
+
for (let i = 0; i < vec.length; i++) {
|
|
185
|
+
sum += vec[i] * vec[i];
|
|
186
|
+
}
|
|
187
|
+
const magnitude = Math.sqrt(sum);
|
|
188
|
+
if (magnitude > 0) {
|
|
189
|
+
for (let i = 0; i < vec.length; i++) {
|
|
190
|
+
vec[i] /= magnitude;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
exports.VectorOps = VectorOps;
|
|
196
|
+
/**
|
|
197
|
+
* Memory pool for experience objects
|
|
198
|
+
* Reduces GC pressure by reusing objects
|
|
199
|
+
*/
|
|
200
|
+
class ExperiencePool {
|
|
201
|
+
constructor(maxSize) {
|
|
202
|
+
this.maxSize = maxSize;
|
|
203
|
+
this.pool = [];
|
|
204
|
+
this.preallocate();
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Preallocate pool entries
|
|
208
|
+
*/
|
|
209
|
+
preallocate() {
|
|
210
|
+
for (let i = 0; i < this.maxSize; i++) {
|
|
211
|
+
this.pool.push({
|
|
212
|
+
experience: null,
|
|
213
|
+
inUse: false,
|
|
214
|
+
lastUsed: 0
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Acquire experience object from pool
|
|
220
|
+
*/
|
|
221
|
+
acquire() {
|
|
222
|
+
for (const entry of this.pool) {
|
|
223
|
+
if (!entry.inUse) {
|
|
224
|
+
entry.inUse = true;
|
|
225
|
+
entry.lastUsed = Date.now();
|
|
226
|
+
return entry;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return null; // Pool exhausted
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Release experience object back to pool
|
|
233
|
+
*/
|
|
234
|
+
release(pooled) {
|
|
235
|
+
pooled.inUse = false;
|
|
236
|
+
pooled.experience = null;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get pool statistics
|
|
240
|
+
*/
|
|
241
|
+
getStats() {
|
|
242
|
+
const inUse = this.pool.filter(e => e.inUse).length;
|
|
243
|
+
return {
|
|
244
|
+
total: this.pool.length,
|
|
245
|
+
inUse,
|
|
246
|
+
available: this.pool.length - inUse,
|
|
247
|
+
utilization: inUse / this.pool.length
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* PerformanceOptimizer - Main optimizer class
|
|
253
|
+
*
|
|
254
|
+
* Optimizes learning algorithm performance through:
|
|
255
|
+
* 1. Caching frequently-accessed Q-values
|
|
256
|
+
* 2. Lazy evaluation of rarely-used values
|
|
257
|
+
* 3. Batched updates to reduce overhead
|
|
258
|
+
* 4. Memory pooling to reduce GC pressure
|
|
259
|
+
* 5. Optimized vector operations with typed arrays
|
|
260
|
+
*/
|
|
261
|
+
class PerformanceOptimizer {
|
|
262
|
+
constructor(config = {}) {
|
|
263
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
264
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
265
|
+
// Initialize cache
|
|
266
|
+
this.cache = new LRUCache(this.config.cacheSize);
|
|
267
|
+
// Initialize lazy evaluation tracking
|
|
268
|
+
this.lazyValues = new Map();
|
|
269
|
+
// Initialize batch queue
|
|
270
|
+
this.batchQueue = [];
|
|
271
|
+
// Initialize experience pool
|
|
272
|
+
this.experiencePool = new ExperiencePool(this.config.memoryPoolSize);
|
|
273
|
+
// Initialize statistics
|
|
274
|
+
this.stats = {
|
|
275
|
+
cacheHits: 0,
|
|
276
|
+
cacheMisses: 0,
|
|
277
|
+
batchUpdates: 0,
|
|
278
|
+
poolAcquisitions: 0,
|
|
279
|
+
poolExhausted: 0
|
|
280
|
+
};
|
|
281
|
+
this.logger.info('PerformanceOptimizer initialized', { config: this.config });
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Get Q-value with caching (< 1ms target)
|
|
285
|
+
*/
|
|
286
|
+
getQValue(stateKey, actionKey, loadCallback) {
|
|
287
|
+
// Try cache first
|
|
288
|
+
if (this.config.enableCaching) {
|
|
289
|
+
const cached = this.cache.get(stateKey, actionKey);
|
|
290
|
+
if (cached !== undefined) {
|
|
291
|
+
this.stats.cacheHits++;
|
|
292
|
+
return cached;
|
|
293
|
+
}
|
|
294
|
+
this.stats.cacheMisses++;
|
|
295
|
+
}
|
|
296
|
+
// Check lazy evaluation
|
|
297
|
+
if (this.config.enableLazyEval) {
|
|
298
|
+
const key = `${stateKey}:${actionKey}`;
|
|
299
|
+
const lazy = this.lazyValues.get(key);
|
|
300
|
+
if (lazy && !lazy.loaded) {
|
|
301
|
+
lazy.accessCount++;
|
|
302
|
+
// Load if accessed frequently enough
|
|
303
|
+
if (lazy.accessCount >= this.config.lazyAccessThreshold) {
|
|
304
|
+
const value = loadCallback();
|
|
305
|
+
lazy.loaded = true;
|
|
306
|
+
// Add to cache
|
|
307
|
+
if (this.config.enableCaching) {
|
|
308
|
+
this.cache.set(stateKey, actionKey, value);
|
|
309
|
+
}
|
|
310
|
+
return value;
|
|
311
|
+
}
|
|
312
|
+
return 0; // Default value for rarely-accessed
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
// Load value
|
|
316
|
+
const value = loadCallback();
|
|
317
|
+
// Add to cache
|
|
318
|
+
if (this.config.enableCaching) {
|
|
319
|
+
this.cache.set(stateKey, actionKey, value);
|
|
320
|
+
}
|
|
321
|
+
return value;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Queue Q-value update for batching
|
|
325
|
+
*/
|
|
326
|
+
queueUpdate(stateKey, actionKey, oldValue, newValue) {
|
|
327
|
+
if (!this.config.enableBatchUpdates) {
|
|
328
|
+
// Apply immediately if batching disabled
|
|
329
|
+
this.applyUpdate(stateKey, actionKey, newValue);
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
// Add to batch queue
|
|
333
|
+
this.batchQueue.push({
|
|
334
|
+
stateKey,
|
|
335
|
+
actionKey,
|
|
336
|
+
oldValue,
|
|
337
|
+
newValue,
|
|
338
|
+
timestamp: Date.now()
|
|
339
|
+
});
|
|
340
|
+
// Process batch if threshold reached
|
|
341
|
+
if (this.batchQueue.length >= this.config.batchUpdateSize) {
|
|
342
|
+
this.processBatchUpdates();
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Process batched updates (< 5ms target for 32 updates)
|
|
347
|
+
*/
|
|
348
|
+
processBatchUpdates() {
|
|
349
|
+
if (this.batchQueue.length === 0) {
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
const startTime = performance.now();
|
|
353
|
+
// Group updates by state for efficiency
|
|
354
|
+
const updatesByState = new Map();
|
|
355
|
+
for (const update of this.batchQueue) {
|
|
356
|
+
if (!updatesByState.has(update.stateKey)) {
|
|
357
|
+
updatesByState.set(update.stateKey, new Map());
|
|
358
|
+
}
|
|
359
|
+
updatesByState.get(update.stateKey).set(update.actionKey, update.newValue);
|
|
360
|
+
}
|
|
361
|
+
// Apply grouped updates
|
|
362
|
+
for (const [stateKey, actions] of updatesByState.entries()) {
|
|
363
|
+
for (const [actionKey, value] of actions.entries()) {
|
|
364
|
+
this.applyUpdate(stateKey, actionKey, value);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
const duration = performance.now() - startTime;
|
|
368
|
+
this.stats.batchUpdates++;
|
|
369
|
+
this.logger.debug(`Processed ${this.batchQueue.length} batched updates in ${duration.toFixed(2)}ms`);
|
|
370
|
+
// Clear queue
|
|
371
|
+
this.batchQueue = [];
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Apply single update to cache and storage
|
|
375
|
+
*/
|
|
376
|
+
applyUpdate(stateKey, actionKey, value) {
|
|
377
|
+
// Update cache
|
|
378
|
+
if (this.config.enableCaching) {
|
|
379
|
+
this.cache.set(stateKey, actionKey, value);
|
|
380
|
+
this.cache.markDirty(stateKey, actionKey);
|
|
381
|
+
}
|
|
382
|
+
// Mark as loaded in lazy evaluation
|
|
383
|
+
if (this.config.enableLazyEval) {
|
|
384
|
+
const key = `${stateKey}:${actionKey}`;
|
|
385
|
+
const lazy = this.lazyValues.get(key);
|
|
386
|
+
if (lazy) {
|
|
387
|
+
lazy.loaded = true;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Register lazy Q-value
|
|
393
|
+
*/
|
|
394
|
+
registerLazyValue(stateKey, actionKey) {
|
|
395
|
+
if (!this.config.enableLazyEval) {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
const key = `${stateKey}:${actionKey}`;
|
|
399
|
+
if (!this.lazyValues.has(key)) {
|
|
400
|
+
this.lazyValues.set(key, {
|
|
401
|
+
stateKey,
|
|
402
|
+
actionKey,
|
|
403
|
+
loaded: false,
|
|
404
|
+
accessCount: 0
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Acquire experience from pool (reduces GC pressure)
|
|
410
|
+
*/
|
|
411
|
+
acquireExperience() {
|
|
412
|
+
if (!this.config.enableMemoryPooling) {
|
|
413
|
+
return null;
|
|
414
|
+
}
|
|
415
|
+
const pooled = this.experiencePool.acquire();
|
|
416
|
+
if (pooled) {
|
|
417
|
+
this.stats.poolAcquisitions++;
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
this.stats.poolExhausted++;
|
|
421
|
+
}
|
|
422
|
+
return pooled;
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Release experience back to pool
|
|
426
|
+
*/
|
|
427
|
+
releaseExperience(pooled) {
|
|
428
|
+
if (!this.config.enableMemoryPooling) {
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
this.experiencePool.release(pooled);
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Encode state using optimized vector operations
|
|
435
|
+
*/
|
|
436
|
+
encodeState(state) {
|
|
437
|
+
const features = VectorOps.encodeStateToTypedArray(state);
|
|
438
|
+
// Round to reduce state space
|
|
439
|
+
const rounded = Array.from(features).map(f => Math.round(f * 10) / 10);
|
|
440
|
+
return rounded.join(',');
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Calculate state similarity using optimized operations
|
|
444
|
+
*/
|
|
445
|
+
calculateStateSimilarity(state1, state2) {
|
|
446
|
+
const vec1 = VectorOps.encodeStateToTypedArray(state1);
|
|
447
|
+
const vec2 = VectorOps.encodeStateToTypedArray(state2);
|
|
448
|
+
// Normalize vectors
|
|
449
|
+
VectorOps.normalize(vec1);
|
|
450
|
+
VectorOps.normalize(vec2);
|
|
451
|
+
// Calculate cosine similarity
|
|
452
|
+
return VectorOps.dotProduct(vec1, vec2);
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Find similar states using optimized operations (< 10ms for 1000 states)
|
|
456
|
+
*/
|
|
457
|
+
findSimilarStates(targetState, candidateStates, topK = 5, threshold = 0.8) {
|
|
458
|
+
const startTime = performance.now();
|
|
459
|
+
const targetVec = VectorOps.encodeStateToTypedArray(targetState);
|
|
460
|
+
VectorOps.normalize(targetVec);
|
|
461
|
+
const similarities = [];
|
|
462
|
+
for (const candidate of candidateStates) {
|
|
463
|
+
const candidateVec = VectorOps.encodeStateToTypedArray(candidate);
|
|
464
|
+
VectorOps.normalize(candidateVec);
|
|
465
|
+
const similarity = VectorOps.dotProduct(targetVec, candidateVec);
|
|
466
|
+
if (similarity >= threshold) {
|
|
467
|
+
similarities.push({ state: candidate, similarity });
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
// Sort by similarity and take top K
|
|
471
|
+
similarities.sort((a, b) => b.similarity - a.similarity);
|
|
472
|
+
const result = similarities.slice(0, topK);
|
|
473
|
+
const duration = performance.now() - startTime;
|
|
474
|
+
this.logger.debug(`Found ${result.length} similar states from ${candidateStates.length} candidates in ${duration.toFixed(2)}ms`);
|
|
475
|
+
return result;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Flush pending updates
|
|
479
|
+
*/
|
|
480
|
+
flush() {
|
|
481
|
+
if (this.batchQueue.length > 0) {
|
|
482
|
+
this.processBatchUpdates();
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Get dirty cache entries for persistence
|
|
487
|
+
*/
|
|
488
|
+
getDirtyEntries() {
|
|
489
|
+
return this.cache.getDirtyEntries();
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Clear dirty flags after persistence
|
|
493
|
+
*/
|
|
494
|
+
clearDirtyFlags() {
|
|
495
|
+
this.cache.clearDirtyFlags();
|
|
496
|
+
}
|
|
497
|
+
/**
|
|
498
|
+
* Get optimizer statistics
|
|
499
|
+
*/
|
|
500
|
+
getStatistics() {
|
|
501
|
+
const totalCacheAccess = this.stats.cacheHits + this.stats.cacheMisses;
|
|
502
|
+
const cacheHitRate = totalCacheAccess > 0 ? this.stats.cacheHits / totalCacheAccess : 0;
|
|
503
|
+
const lazyLoaded = Array.from(this.lazyValues.values()).filter(v => v.loaded).length;
|
|
504
|
+
return {
|
|
505
|
+
cache: this.cache.getStats(),
|
|
506
|
+
lazyValues: {
|
|
507
|
+
total: this.lazyValues.size,
|
|
508
|
+
loaded: lazyLoaded,
|
|
509
|
+
unloaded: this.lazyValues.size - lazyLoaded
|
|
510
|
+
},
|
|
511
|
+
batch: {
|
|
512
|
+
queueSize: this.batchQueue.length,
|
|
513
|
+
totalBatches: this.stats.batchUpdates,
|
|
514
|
+
avgBatchSize: this.stats.batchUpdates > 0
|
|
515
|
+
? this.batchQueue.length / this.stats.batchUpdates
|
|
516
|
+
: 0
|
|
517
|
+
},
|
|
518
|
+
pool: this.experiencePool.getStats(),
|
|
519
|
+
performance: {
|
|
520
|
+
cacheHitRate,
|
|
521
|
+
poolUtilization: this.experiencePool.getStats().utilization
|
|
522
|
+
}
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* Reset optimizer state
|
|
527
|
+
*/
|
|
528
|
+
reset() {
|
|
529
|
+
this.cache.clear();
|
|
530
|
+
this.lazyValues.clear();
|
|
531
|
+
this.batchQueue = [];
|
|
532
|
+
this.stats = {
|
|
533
|
+
cacheHits: 0,
|
|
534
|
+
cacheMisses: 0,
|
|
535
|
+
batchUpdates: 0,
|
|
536
|
+
poolAcquisitions: 0,
|
|
537
|
+
poolExhausted: 0
|
|
538
|
+
};
|
|
539
|
+
this.logger.info('PerformanceOptimizer reset');
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Get memory usage estimate
|
|
543
|
+
*/
|
|
544
|
+
getMemoryUsage() {
|
|
545
|
+
const cacheSize = JSON.stringify(Array.from(this.cache['cache'].values())).length;
|
|
546
|
+
const lazySize = JSON.stringify(Array.from(this.lazyValues.values())).length;
|
|
547
|
+
const batchSize = JSON.stringify(this.batchQueue).length;
|
|
548
|
+
return cacheSize + lazySize + batchSize;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
exports.PerformanceOptimizer = PerformanceOptimizer;
|
|
552
|
+
//# sourceMappingURL=PerformanceOptimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerformanceOptimizer.js","sourceRoot":"","sources":["../../src/learning/PerformanceOptimizer.ts"],"names":[],"mappings":"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"}
|