@sparkleideas/neural 3.5.2-patch.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.
Files changed (122) hide show
  1. package/README.md +260 -0
  2. package/__tests__/README.md +235 -0
  3. package/__tests__/algorithms.test.ts +582 -0
  4. package/__tests__/patterns.test.ts +549 -0
  5. package/__tests__/sona.test.ts +445 -0
  6. package/docs/SONA_INTEGRATION.md +460 -0
  7. package/docs/SONA_QUICKSTART.md +168 -0
  8. package/examples/sona-usage.ts +318 -0
  9. package/package.json +23 -0
  10. package/src/algorithms/a2c.d.ts +86 -0
  11. package/src/algorithms/a2c.d.ts.map +1 -0
  12. package/src/algorithms/a2c.js +361 -0
  13. package/src/algorithms/a2c.js.map +1 -0
  14. package/src/algorithms/a2c.ts +478 -0
  15. package/src/algorithms/curiosity.d.ts +82 -0
  16. package/src/algorithms/curiosity.d.ts.map +1 -0
  17. package/src/algorithms/curiosity.js +392 -0
  18. package/src/algorithms/curiosity.js.map +1 -0
  19. package/src/algorithms/curiosity.ts +509 -0
  20. package/src/algorithms/decision-transformer.d.ts +82 -0
  21. package/src/algorithms/decision-transformer.d.ts.map +1 -0
  22. package/src/algorithms/decision-transformer.js +415 -0
  23. package/src/algorithms/decision-transformer.js.map +1 -0
  24. package/src/algorithms/decision-transformer.ts +521 -0
  25. package/src/algorithms/dqn.d.ts +72 -0
  26. package/src/algorithms/dqn.d.ts.map +1 -0
  27. package/src/algorithms/dqn.js +303 -0
  28. package/src/algorithms/dqn.js.map +1 -0
  29. package/src/algorithms/dqn.ts +382 -0
  30. package/src/algorithms/index.d.ts +32 -0
  31. package/src/algorithms/index.d.ts.map +1 -0
  32. package/src/algorithms/index.js +74 -0
  33. package/src/algorithms/index.js.map +1 -0
  34. package/src/algorithms/index.ts +122 -0
  35. package/src/algorithms/ppo.d.ts +72 -0
  36. package/src/algorithms/ppo.d.ts.map +1 -0
  37. package/src/algorithms/ppo.js +331 -0
  38. package/src/algorithms/ppo.js.map +1 -0
  39. package/src/algorithms/ppo.ts +429 -0
  40. package/src/algorithms/q-learning.d.ts +77 -0
  41. package/src/algorithms/q-learning.d.ts.map +1 -0
  42. package/src/algorithms/q-learning.js +259 -0
  43. package/src/algorithms/q-learning.js.map +1 -0
  44. package/src/algorithms/q-learning.ts +333 -0
  45. package/src/algorithms/sarsa.d.ts +82 -0
  46. package/src/algorithms/sarsa.d.ts.map +1 -0
  47. package/src/algorithms/sarsa.js +297 -0
  48. package/src/algorithms/sarsa.js.map +1 -0
  49. package/src/algorithms/sarsa.ts +383 -0
  50. package/src/algorithms/tmp.json +0 -0
  51. package/src/application/index.ts +11 -0
  52. package/src/application/services/neural-application-service.ts +217 -0
  53. package/src/domain/entities/pattern.ts +169 -0
  54. package/src/domain/index.ts +18 -0
  55. package/src/domain/services/learning-service.ts +256 -0
  56. package/src/index.d.ts +118 -0
  57. package/src/index.d.ts.map +1 -0
  58. package/src/index.js +201 -0
  59. package/src/index.js.map +1 -0
  60. package/src/index.ts +363 -0
  61. package/src/modes/balanced.d.ts +60 -0
  62. package/src/modes/balanced.d.ts.map +1 -0
  63. package/src/modes/balanced.js +234 -0
  64. package/src/modes/balanced.js.map +1 -0
  65. package/src/modes/balanced.ts +299 -0
  66. package/src/modes/base.ts +163 -0
  67. package/src/modes/batch.d.ts +82 -0
  68. package/src/modes/batch.d.ts.map +1 -0
  69. package/src/modes/batch.js +316 -0
  70. package/src/modes/batch.js.map +1 -0
  71. package/src/modes/batch.ts +434 -0
  72. package/src/modes/edge.d.ts +85 -0
  73. package/src/modes/edge.d.ts.map +1 -0
  74. package/src/modes/edge.js +310 -0
  75. package/src/modes/edge.js.map +1 -0
  76. package/src/modes/edge.ts +409 -0
  77. package/src/modes/index.d.ts +55 -0
  78. package/src/modes/index.d.ts.map +1 -0
  79. package/src/modes/index.js +83 -0
  80. package/src/modes/index.js.map +1 -0
  81. package/src/modes/index.ts +16 -0
  82. package/src/modes/real-time.d.ts +58 -0
  83. package/src/modes/real-time.d.ts.map +1 -0
  84. package/src/modes/real-time.js +196 -0
  85. package/src/modes/real-time.js.map +1 -0
  86. package/src/modes/real-time.ts +257 -0
  87. package/src/modes/research.d.ts +79 -0
  88. package/src/modes/research.d.ts.map +1 -0
  89. package/src/modes/research.js +389 -0
  90. package/src/modes/research.js.map +1 -0
  91. package/src/modes/research.ts +486 -0
  92. package/src/modes/tmp.json +0 -0
  93. package/src/pattern-learner.d.ts +117 -0
  94. package/src/pattern-learner.d.ts.map +1 -0
  95. package/src/pattern-learner.js +603 -0
  96. package/src/pattern-learner.js.map +1 -0
  97. package/src/pattern-learner.ts +757 -0
  98. package/src/reasoning-bank.d.ts +259 -0
  99. package/src/reasoning-bank.d.ts.map +1 -0
  100. package/src/reasoning-bank.js +993 -0
  101. package/src/reasoning-bank.js.map +1 -0
  102. package/src/reasoning-bank.ts +1279 -0
  103. package/src/reasoningbank-adapter.ts +697 -0
  104. package/src/sona-integration.d.ts +168 -0
  105. package/src/sona-integration.d.ts.map +1 -0
  106. package/src/sona-integration.js +316 -0
  107. package/src/sona-integration.js.map +1 -0
  108. package/src/sona-integration.ts +432 -0
  109. package/src/sona-manager.d.ts +147 -0
  110. package/src/sona-manager.d.ts.map +1 -0
  111. package/src/sona-manager.js +695 -0
  112. package/src/sona-manager.js.map +1 -0
  113. package/src/sona-manager.ts +835 -0
  114. package/src/tmp.json +0 -0
  115. package/src/types.d.ts +431 -0
  116. package/src/types.d.ts.map +1 -0
  117. package/src/types.js +11 -0
  118. package/src/types.js.map +1 -0
  119. package/src/types.ts +590 -0
  120. package/tmp.json +0 -0
  121. package/tsconfig.json +9 -0
  122. package/vitest.config.ts +19 -0
@@ -0,0 +1,603 @@
1
+ /**
2
+ * Pattern Learner
3
+ *
4
+ * Implements pattern extraction, matching, and evolution for
5
+ * continuous learning from agent experiences.
6
+ *
7
+ * Performance Targets:
8
+ * - Pattern matching: <1ms
9
+ * - Pattern extraction: <5ms
10
+ * - Evolution step: <2ms
11
+ */
12
+ /**
13
+ * Default Pattern Learner configuration
14
+ */
15
+ const DEFAULT_CONFIG = {
16
+ maxPatterns: 1000,
17
+ matchThreshold: 0.7,
18
+ minUsagesForStable: 5,
19
+ qualityThreshold: 0.5,
20
+ enableClustering: true,
21
+ numClusters: 50,
22
+ evolutionLearningRate: 0.1,
23
+ };
24
+ /**
25
+ * Pattern Learner - Manages pattern extraction, matching, and evolution
26
+ */
27
+ export class PatternLearner {
28
+ config;
29
+ patterns = new Map();
30
+ clusters = [];
31
+ patternToCluster = new Map();
32
+ // Performance tracking
33
+ matchCount = 0;
34
+ totalMatchTime = 0;
35
+ extractionCount = 0;
36
+ totalExtractionTime = 0;
37
+ evolutionCount = 0;
38
+ totalEvolutionTime = 0;
39
+ // Event listeners
40
+ eventListeners = new Set();
41
+ constructor(config = {}) {
42
+ this.config = { ...DEFAULT_CONFIG, ...config };
43
+ }
44
+ // ==========================================================================
45
+ // Pattern Matching
46
+ // ==========================================================================
47
+ /**
48
+ * Find matching patterns for a query embedding
49
+ * Target: <1ms
50
+ */
51
+ findMatches(queryEmbedding, k = 3) {
52
+ const startTime = performance.now();
53
+ if (this.patterns.size === 0) {
54
+ return [];
55
+ }
56
+ let candidates;
57
+ // Use clustering for faster search if enabled and clusters exist
58
+ if (this.config.enableClustering && this.clusters.length > 0) {
59
+ candidates = this.getCandidatesFromClusters(queryEmbedding);
60
+ }
61
+ else {
62
+ candidates = Array.from(this.patterns.values());
63
+ }
64
+ // Compute similarities
65
+ const matches = [];
66
+ for (const pattern of candidates) {
67
+ const similarity = this.cosineSimilarity(queryEmbedding, pattern.embedding);
68
+ if (similarity >= this.config.matchThreshold) {
69
+ matches.push({
70
+ pattern,
71
+ similarity,
72
+ confidence: this.computeMatchConfidence(pattern, similarity),
73
+ latencyMs: 0,
74
+ });
75
+ }
76
+ }
77
+ // Sort by similarity
78
+ matches.sort((a, b) => b.similarity - a.similarity);
79
+ const result = matches.slice(0, k);
80
+ // Track performance
81
+ const elapsed = performance.now() - startTime;
82
+ this.matchCount++;
83
+ this.totalMatchTime += elapsed;
84
+ // Warn if over target
85
+ if (elapsed > 1) {
86
+ console.warn(`Pattern matching exceeded target: ${elapsed.toFixed(2)}ms > 1ms`);
87
+ }
88
+ return result;
89
+ }
90
+ /**
91
+ * Find best single match
92
+ */
93
+ findBestMatch(queryEmbedding) {
94
+ const matches = this.findMatches(queryEmbedding, 1);
95
+ return matches.length > 0 ? matches[0] : null;
96
+ }
97
+ // ==========================================================================
98
+ // Pattern Extraction
99
+ // ==========================================================================
100
+ /**
101
+ * Extract a pattern from a trajectory
102
+ * Target: <5ms
103
+ */
104
+ extractPattern(trajectory, memory) {
105
+ const startTime = performance.now();
106
+ // Validate trajectory
107
+ if (!trajectory.isComplete || trajectory.qualityScore < this.config.qualityThreshold) {
108
+ return null;
109
+ }
110
+ // Check for duplicates
111
+ const embedding = this.computePatternEmbedding(trajectory);
112
+ const existing = this.findSimilarPattern(embedding, 0.95);
113
+ if (existing) {
114
+ // Update existing pattern instead
115
+ this.updatePatternFromTrajectory(existing, trajectory);
116
+ return existing;
117
+ }
118
+ // Create new pattern
119
+ const pattern = {
120
+ patternId: `pat_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`,
121
+ name: this.generatePatternName(trajectory),
122
+ domain: trajectory.domain,
123
+ embedding,
124
+ strategy: this.extractStrategy(trajectory),
125
+ successRate: trajectory.qualityScore,
126
+ usageCount: 1,
127
+ qualityHistory: [trajectory.qualityScore],
128
+ evolutionHistory: [],
129
+ createdAt: Date.now(),
130
+ updatedAt: Date.now(),
131
+ };
132
+ // Store pattern
133
+ this.patterns.set(pattern.patternId, pattern);
134
+ // Update clusters if enabled
135
+ if (this.config.enableClustering) {
136
+ this.assignToCluster(pattern);
137
+ }
138
+ // Prune if over capacity
139
+ if (this.patterns.size > this.config.maxPatterns) {
140
+ this.prunePatterns();
141
+ }
142
+ // Track performance
143
+ const elapsed = performance.now() - startTime;
144
+ this.extractionCount++;
145
+ this.totalExtractionTime += elapsed;
146
+ return pattern;
147
+ }
148
+ /**
149
+ * Extract patterns from multiple trajectories in batch
150
+ */
151
+ extractPatternsBatch(trajectories) {
152
+ const patterns = [];
153
+ for (const trajectory of trajectories) {
154
+ const pattern = this.extractPattern(trajectory);
155
+ if (pattern) {
156
+ patterns.push(pattern);
157
+ }
158
+ }
159
+ // Rebuild clusters after batch extraction
160
+ if (this.config.enableClustering && patterns.length > 10) {
161
+ this.rebuildClusters();
162
+ }
163
+ return patterns;
164
+ }
165
+ // ==========================================================================
166
+ // Pattern Evolution
167
+ // ==========================================================================
168
+ /**
169
+ * Evolve a pattern based on new experience
170
+ * Target: <2ms
171
+ */
172
+ evolvePattern(patternId, quality, context) {
173
+ const startTime = performance.now();
174
+ const pattern = this.patterns.get(patternId);
175
+ if (!pattern)
176
+ return;
177
+ const previousQuality = pattern.successRate;
178
+ const lr = this.config.evolutionLearningRate;
179
+ // Update quality history
180
+ pattern.qualityHistory.push(quality);
181
+ if (pattern.qualityHistory.length > 100) {
182
+ pattern.qualityHistory = pattern.qualityHistory.slice(-100);
183
+ }
184
+ // Exponential moving average for success rate
185
+ pattern.successRate = pattern.successRate * (1 - lr) + quality * lr;
186
+ pattern.usageCount++;
187
+ pattern.updatedAt = Date.now();
188
+ // Record evolution
189
+ const evolutionType = this.determineEvolutionType(previousQuality, pattern.successRate);
190
+ pattern.evolutionHistory.push({
191
+ timestamp: Date.now(),
192
+ type: evolutionType,
193
+ previousQuality,
194
+ newQuality: pattern.successRate,
195
+ description: context || 'Updated from new experience',
196
+ });
197
+ // Keep evolution history bounded
198
+ if (pattern.evolutionHistory.length > 50) {
199
+ pattern.evolutionHistory = pattern.evolutionHistory.slice(-50);
200
+ }
201
+ // Emit event
202
+ this.emitEvent({
203
+ type: 'pattern_evolved',
204
+ patternId,
205
+ evolutionType,
206
+ });
207
+ // Track performance
208
+ const elapsed = performance.now() - startTime;
209
+ this.evolutionCount++;
210
+ this.totalEvolutionTime += elapsed;
211
+ }
212
+ /**
213
+ * Merge two similar patterns
214
+ */
215
+ mergePatterns(patternId1, patternId2) {
216
+ const p1 = this.patterns.get(patternId1);
217
+ const p2 = this.patterns.get(patternId2);
218
+ if (!p1 || !p2)
219
+ return null;
220
+ // Keep the higher quality pattern as base
221
+ const [keep, remove] = p1.successRate >= p2.successRate ? [p1, p2] : [p2, p1];
222
+ // Merge embeddings (weighted average)
223
+ const totalUsage = keep.usageCount + remove.usageCount;
224
+ const w1 = keep.usageCount / totalUsage;
225
+ const w2 = remove.usageCount / totalUsage;
226
+ for (let i = 0; i < keep.embedding.length; i++) {
227
+ keep.embedding[i] = keep.embedding[i] * w1 + remove.embedding[i] * w2;
228
+ }
229
+ // Merge statistics
230
+ keep.usageCount += remove.usageCount;
231
+ keep.qualityHistory.push(...remove.qualityHistory);
232
+ keep.successRate = keep.qualityHistory.reduce((a, b) => a + b, 0) / keep.qualityHistory.length;
233
+ // Record merge
234
+ keep.evolutionHistory.push({
235
+ timestamp: Date.now(),
236
+ type: 'merge',
237
+ previousQuality: p1.successRate,
238
+ newQuality: keep.successRate,
239
+ description: `Merged with pattern ${remove.patternId}`,
240
+ });
241
+ // Remove the merged pattern
242
+ this.patterns.delete(remove.patternId);
243
+ this.patternToCluster.delete(remove.patternId);
244
+ return keep;
245
+ }
246
+ /**
247
+ * Split a pattern into more specific sub-patterns
248
+ */
249
+ splitPattern(patternId, numSplits = 2) {
250
+ const pattern = this.patterns.get(patternId);
251
+ if (!pattern || numSplits < 2)
252
+ return [];
253
+ const splits = [];
254
+ for (let i = 0; i < numSplits; i++) {
255
+ // Create variation of embedding with noise
256
+ const newEmbedding = new Float32Array(pattern.embedding.length);
257
+ for (let j = 0; j < newEmbedding.length; j++) {
258
+ const noise = (Math.random() - 0.5) * 0.1;
259
+ newEmbedding[j] = pattern.embedding[j] + noise;
260
+ }
261
+ const newPattern = {
262
+ patternId: `pat_${Date.now()}_${i}_${Math.random().toString(36).slice(2, 6)}`,
263
+ name: `${pattern.name}_split_${i}`,
264
+ domain: pattern.domain,
265
+ embedding: newEmbedding,
266
+ strategy: pattern.strategy,
267
+ successRate: pattern.successRate * 0.9, // Slight penalty for uncertainty
268
+ usageCount: 0,
269
+ qualityHistory: [],
270
+ evolutionHistory: [{
271
+ timestamp: Date.now(),
272
+ type: 'split',
273
+ previousQuality: pattern.successRate,
274
+ newQuality: pattern.successRate * 0.9,
275
+ description: `Split from pattern ${patternId}`,
276
+ }],
277
+ createdAt: Date.now(),
278
+ updatedAt: Date.now(),
279
+ };
280
+ this.patterns.set(newPattern.patternId, newPattern);
281
+ splits.push(newPattern);
282
+ }
283
+ // Remove original pattern
284
+ this.patterns.delete(patternId);
285
+ this.patternToCluster.delete(patternId);
286
+ // Rebuild clusters
287
+ if (this.config.enableClustering) {
288
+ this.rebuildClusters();
289
+ }
290
+ return splits;
291
+ }
292
+ // ==========================================================================
293
+ // Pattern Access
294
+ // ==========================================================================
295
+ /**
296
+ * Get all patterns
297
+ */
298
+ getPatterns() {
299
+ return Array.from(this.patterns.values());
300
+ }
301
+ /**
302
+ * Get pattern by ID
303
+ */
304
+ getPattern(patternId) {
305
+ return this.patterns.get(patternId);
306
+ }
307
+ /**
308
+ * Get patterns by domain
309
+ */
310
+ getPatternsByDomain(domain) {
311
+ return Array.from(this.patterns.values()).filter(p => p.domain === domain);
312
+ }
313
+ /**
314
+ * Get stable patterns (sufficient usage)
315
+ */
316
+ getStablePatterns() {
317
+ return Array.from(this.patterns.values())
318
+ .filter(p => p.usageCount >= this.config.minUsagesForStable);
319
+ }
320
+ // ==========================================================================
321
+ // Statistics
322
+ // ==========================================================================
323
+ getStats() {
324
+ const patterns = Array.from(this.patterns.values());
325
+ return {
326
+ totalPatterns: this.patterns.size,
327
+ stablePatterns: patterns.filter(p => p.usageCount >= this.config.minUsagesForStable).length,
328
+ avgSuccessRate: patterns.length > 0
329
+ ? patterns.reduce((s, p) => s + p.successRate, 0) / patterns.length
330
+ : 0,
331
+ avgUsageCount: patterns.length > 0
332
+ ? patterns.reduce((s, p) => s + p.usageCount, 0) / patterns.length
333
+ : 0,
334
+ numClusters: this.clusters.length,
335
+ avgMatchTimeMs: this.matchCount > 0 ? this.totalMatchTime / this.matchCount : 0,
336
+ avgExtractionTimeMs: this.extractionCount > 0 ? this.totalExtractionTime / this.extractionCount : 0,
337
+ avgEvolutionTimeMs: this.evolutionCount > 0 ? this.totalEvolutionTime / this.evolutionCount : 0,
338
+ };
339
+ }
340
+ // ==========================================================================
341
+ // Event System
342
+ // ==========================================================================
343
+ addEventListener(listener) {
344
+ this.eventListeners.add(listener);
345
+ }
346
+ removeEventListener(listener) {
347
+ this.eventListeners.delete(listener);
348
+ }
349
+ emitEvent(event) {
350
+ for (const listener of this.eventListeners) {
351
+ try {
352
+ listener(event);
353
+ }
354
+ catch (error) {
355
+ console.error('Error in PatternLearner event listener:', error);
356
+ }
357
+ }
358
+ }
359
+ // ==========================================================================
360
+ // Private Helper Methods
361
+ // ==========================================================================
362
+ cosineSimilarity(a, b) {
363
+ if (a.length !== b.length)
364
+ return 0;
365
+ let dot = 0, normA = 0, normB = 0;
366
+ for (let i = 0; i < a.length; i++) {
367
+ dot += a[i] * b[i];
368
+ normA += a[i] * a[i];
369
+ normB += b[i] * b[i];
370
+ }
371
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
372
+ return denom > 0 ? dot / denom : 0;
373
+ }
374
+ computeMatchConfidence(pattern, similarity) {
375
+ // Combine similarity with pattern reliability
376
+ const usageWeight = Math.min(pattern.usageCount / 10, 1);
377
+ const qualityWeight = pattern.successRate;
378
+ return similarity * (1 - usageWeight * 0.2 - qualityWeight * 0.2) +
379
+ usageWeight * 0.1 +
380
+ qualityWeight * 0.1;
381
+ }
382
+ getCandidatesFromClusters(queryEmbedding) {
383
+ // Find nearest clusters
384
+ const clusterScores = [];
385
+ for (const cluster of this.clusters) {
386
+ const score = this.cosineSimilarity(queryEmbedding, cluster.centroid);
387
+ clusterScores.push({ cluster, score });
388
+ }
389
+ clusterScores.sort((a, b) => b.score - a.score);
390
+ // Get patterns from top 3 clusters
391
+ const candidates = [];
392
+ for (const { cluster } of clusterScores.slice(0, 3)) {
393
+ for (const patternId of cluster.patternIds) {
394
+ const pattern = this.patterns.get(patternId);
395
+ if (pattern) {
396
+ candidates.push(pattern);
397
+ }
398
+ }
399
+ }
400
+ return candidates;
401
+ }
402
+ findSimilarPattern(embedding, threshold) {
403
+ for (const pattern of this.patterns.values()) {
404
+ const sim = this.cosineSimilarity(embedding, pattern.embedding);
405
+ if (sim >= threshold) {
406
+ return pattern;
407
+ }
408
+ }
409
+ return null;
410
+ }
411
+ updatePatternFromTrajectory(pattern, trajectory) {
412
+ // Update quality
413
+ pattern.qualityHistory.push(trajectory.qualityScore);
414
+ if (pattern.qualityHistory.length > 100) {
415
+ pattern.qualityHistory = pattern.qualityHistory.slice(-100);
416
+ }
417
+ // EMA for success rate
418
+ const lr = this.config.evolutionLearningRate;
419
+ pattern.successRate = pattern.successRate * (1 - lr) + trajectory.qualityScore * lr;
420
+ pattern.usageCount++;
421
+ pattern.updatedAt = Date.now();
422
+ }
423
+ computePatternEmbedding(trajectory) {
424
+ if (trajectory.steps.length === 0) {
425
+ return new Float32Array(768);
426
+ }
427
+ const dim = trajectory.steps[0].stateAfter.length;
428
+ const embedding = new Float32Array(dim);
429
+ // Weighted average (higher weight for later steps)
430
+ let totalWeight = 0;
431
+ for (let i = 0; i < trajectory.steps.length; i++) {
432
+ const weight = (i + 1) / trajectory.steps.length;
433
+ totalWeight += weight;
434
+ for (let j = 0; j < dim; j++) {
435
+ embedding[j] += trajectory.steps[i].stateAfter[j] * weight;
436
+ }
437
+ }
438
+ for (let j = 0; j < dim; j++) {
439
+ embedding[j] /= totalWeight;
440
+ }
441
+ return embedding;
442
+ }
443
+ generatePatternName(trajectory) {
444
+ const domain = trajectory.domain;
445
+ const quality = trajectory.qualityScore > 0.7 ? 'high' : 'mid';
446
+ const steps = trajectory.steps.length > 5 ? 'complex' : 'simple';
447
+ return `${domain}_${quality}_${steps}_${Date.now() % 10000}`;
448
+ }
449
+ extractStrategy(trajectory) {
450
+ const actions = trajectory.steps.map(s => s.action);
451
+ if (actions.length === 0)
452
+ return 'empty';
453
+ if (actions.length <= 3)
454
+ return actions.join(' -> ');
455
+ return `${actions.slice(0, 2).join(' -> ')} ... ${actions[actions.length - 1]}`;
456
+ }
457
+ assignToCluster(pattern) {
458
+ if (this.clusters.length === 0) {
459
+ // Create first cluster
460
+ this.clusters.push({
461
+ clusterId: 0,
462
+ centroid: new Float32Array(pattern.embedding),
463
+ patternIds: new Set([pattern.patternId]),
464
+ });
465
+ this.patternToCluster.set(pattern.patternId, 0);
466
+ return;
467
+ }
468
+ // Find nearest cluster
469
+ let bestCluster = 0;
470
+ let bestSim = -1;
471
+ for (let i = 0; i < this.clusters.length; i++) {
472
+ const sim = this.cosineSimilarity(pattern.embedding, this.clusters[i].centroid);
473
+ if (sim > bestSim) {
474
+ bestSim = sim;
475
+ bestCluster = i;
476
+ }
477
+ }
478
+ // Create new cluster if not similar enough and under limit
479
+ if (bestSim < 0.7 && this.clusters.length < this.config.numClusters) {
480
+ const newId = this.clusters.length;
481
+ this.clusters.push({
482
+ clusterId: newId,
483
+ centroid: new Float32Array(pattern.embedding),
484
+ patternIds: new Set([pattern.patternId]),
485
+ });
486
+ this.patternToCluster.set(pattern.patternId, newId);
487
+ }
488
+ else {
489
+ // Add to existing cluster and update centroid
490
+ const cluster = this.clusters[bestCluster];
491
+ cluster.patternIds.add(pattern.patternId);
492
+ this.patternToCluster.set(pattern.patternId, bestCluster);
493
+ this.updateClusterCentroid(cluster);
494
+ }
495
+ }
496
+ updateClusterCentroid(cluster) {
497
+ const dim = cluster.centroid.length;
498
+ const newCentroid = new Float32Array(dim);
499
+ let count = 0;
500
+ for (const patternId of cluster.patternIds) {
501
+ const pattern = this.patterns.get(patternId);
502
+ if (pattern) {
503
+ for (let i = 0; i < dim; i++) {
504
+ newCentroid[i] += pattern.embedding[i];
505
+ }
506
+ count++;
507
+ }
508
+ }
509
+ if (count > 0) {
510
+ for (let i = 0; i < dim; i++) {
511
+ newCentroid[i] /= count;
512
+ }
513
+ cluster.centroid = newCentroid;
514
+ }
515
+ }
516
+ rebuildClusters() {
517
+ if (this.patterns.size === 0) {
518
+ this.clusters = [];
519
+ this.patternToCluster.clear();
520
+ return;
521
+ }
522
+ const patterns = Array.from(this.patterns.values());
523
+ const k = Math.min(this.config.numClusters, Math.ceil(patterns.length / 5));
524
+ const dim = patterns[0].embedding.length;
525
+ // Initialize clusters with random patterns
526
+ this.clusters = [];
527
+ this.patternToCluster.clear();
528
+ const indices = new Set();
529
+ while (indices.size < k && indices.size < patterns.length) {
530
+ indices.add(Math.floor(Math.random() * patterns.length));
531
+ }
532
+ let clusterId = 0;
533
+ for (const idx of indices) {
534
+ this.clusters.push({
535
+ clusterId: clusterId++,
536
+ centroid: new Float32Array(patterns[idx].embedding),
537
+ patternIds: new Set(),
538
+ });
539
+ }
540
+ // K-means iterations
541
+ for (let iter = 0; iter < 10; iter++) {
542
+ // Clear assignments
543
+ for (const cluster of this.clusters) {
544
+ cluster.patternIds.clear();
545
+ }
546
+ // Assign patterns to nearest cluster
547
+ for (const pattern of patterns) {
548
+ let bestCluster = 0;
549
+ let bestSim = -1;
550
+ for (let c = 0; c < this.clusters.length; c++) {
551
+ const sim = this.cosineSimilarity(pattern.embedding, this.clusters[c].centroid);
552
+ if (sim > bestSim) {
553
+ bestSim = sim;
554
+ bestCluster = c;
555
+ }
556
+ }
557
+ this.clusters[bestCluster].patternIds.add(pattern.patternId);
558
+ this.patternToCluster.set(pattern.patternId, bestCluster);
559
+ }
560
+ // Update centroids
561
+ for (const cluster of this.clusters) {
562
+ this.updateClusterCentroid(cluster);
563
+ }
564
+ }
565
+ // Remove empty clusters
566
+ this.clusters = this.clusters.filter(c => c.patternIds.size > 0);
567
+ }
568
+ prunePatterns() {
569
+ // Sort by score (quality * log(usage))
570
+ const scored = Array.from(this.patterns.entries())
571
+ .map(([id, pattern]) => ({
572
+ id,
573
+ pattern,
574
+ score: pattern.successRate * Math.log(pattern.usageCount + 1),
575
+ }))
576
+ .sort((a, b) => a.score - b.score);
577
+ // Remove lowest scoring patterns
578
+ const toRemove = scored.length - Math.floor(this.config.maxPatterns * 0.8);
579
+ for (let i = 0; i < toRemove && i < scored.length; i++) {
580
+ this.patterns.delete(scored[i].id);
581
+ this.patternToCluster.delete(scored[i].id);
582
+ }
583
+ // Rebuild clusters
584
+ if (this.config.enableClustering) {
585
+ this.rebuildClusters();
586
+ }
587
+ }
588
+ determineEvolutionType(prev, curr) {
589
+ const delta = curr - prev;
590
+ if (delta > 0.05)
591
+ return 'improvement';
592
+ if (delta < -0.15)
593
+ return 'prune';
594
+ return 'improvement';
595
+ }
596
+ }
597
+ /**
598
+ * Factory function for creating PatternLearner
599
+ */
600
+ export function createPatternLearner(config) {
601
+ return new PatternLearner(config);
602
+ }
603
+ //# sourceMappingURL=pattern-learner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-learner.js","sourceRoot":"","sources":["pattern-learner.ts"],"names":[],"mappings":"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"}