@sparkleideas/neural 3.0.0-alpha.7-patch.16 → 3.0.0-alpha.7-patch.18

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 (110) hide show
  1. package/package.json +3 -3
  2. package/dist/algorithms/a2c.d.ts +0 -86
  3. package/dist/algorithms/a2c.d.ts.map +0 -1
  4. package/dist/algorithms/a2c.js +0 -361
  5. package/dist/algorithms/a2c.js.map +0 -1
  6. package/dist/algorithms/curiosity.d.ts +0 -82
  7. package/dist/algorithms/curiosity.d.ts.map +0 -1
  8. package/dist/algorithms/curiosity.js +0 -392
  9. package/dist/algorithms/curiosity.js.map +0 -1
  10. package/dist/algorithms/decision-transformer.d.ts +0 -82
  11. package/dist/algorithms/decision-transformer.d.ts.map +0 -1
  12. package/dist/algorithms/decision-transformer.js +0 -415
  13. package/dist/algorithms/decision-transformer.js.map +0 -1
  14. package/dist/algorithms/dqn.d.ts +0 -72
  15. package/dist/algorithms/dqn.d.ts.map +0 -1
  16. package/dist/algorithms/dqn.js +0 -303
  17. package/dist/algorithms/dqn.js.map +0 -1
  18. package/dist/algorithms/index.d.ts +0 -32
  19. package/dist/algorithms/index.d.ts.map +0 -1
  20. package/dist/algorithms/index.js +0 -74
  21. package/dist/algorithms/index.js.map +0 -1
  22. package/dist/algorithms/ppo.d.ts +0 -72
  23. package/dist/algorithms/ppo.d.ts.map +0 -1
  24. package/dist/algorithms/ppo.js +0 -331
  25. package/dist/algorithms/ppo.js.map +0 -1
  26. package/dist/algorithms/q-learning.d.ts +0 -77
  27. package/dist/algorithms/q-learning.d.ts.map +0 -1
  28. package/dist/algorithms/q-learning.js +0 -259
  29. package/dist/algorithms/q-learning.js.map +0 -1
  30. package/dist/algorithms/sarsa.d.ts +0 -82
  31. package/dist/algorithms/sarsa.d.ts.map +0 -1
  32. package/dist/algorithms/sarsa.js +0 -297
  33. package/dist/algorithms/sarsa.js.map +0 -1
  34. package/dist/application/index.d.ts +0 -7
  35. package/dist/application/index.d.ts.map +0 -1
  36. package/dist/application/index.js +0 -7
  37. package/dist/application/index.js.map +0 -1
  38. package/dist/application/services/neural-application-service.d.ts +0 -92
  39. package/dist/application/services/neural-application-service.d.ts.map +0 -1
  40. package/dist/application/services/neural-application-service.js +0 -161
  41. package/dist/application/services/neural-application-service.js.map +0 -1
  42. package/dist/domain/entities/pattern.d.ts +0 -89
  43. package/dist/domain/entities/pattern.d.ts.map +0 -1
  44. package/dist/domain/entities/pattern.js +0 -134
  45. package/dist/domain/entities/pattern.js.map +0 -1
  46. package/dist/domain/index.d.ts +0 -8
  47. package/dist/domain/index.d.ts.map +0 -1
  48. package/dist/domain/index.js +0 -8
  49. package/dist/domain/index.js.map +0 -1
  50. package/dist/domain/services/learning-service.d.ts +0 -90
  51. package/dist/domain/services/learning-service.d.ts.map +0 -1
  52. package/dist/domain/services/learning-service.js +0 -195
  53. package/dist/domain/services/learning-service.js.map +0 -1
  54. package/dist/index.d.ts +0 -118
  55. package/dist/index.d.ts.map +0 -1
  56. package/dist/index.js +0 -201
  57. package/dist/index.js.map +0 -1
  58. package/dist/modes/balanced.d.ts +0 -60
  59. package/dist/modes/balanced.d.ts.map +0 -1
  60. package/dist/modes/balanced.js +0 -234
  61. package/dist/modes/balanced.js.map +0 -1
  62. package/dist/modes/base.d.ts +0 -50
  63. package/dist/modes/base.d.ts.map +0 -1
  64. package/dist/modes/base.js +0 -77
  65. package/dist/modes/base.js.map +0 -1
  66. package/dist/modes/batch.d.ts +0 -82
  67. package/dist/modes/batch.d.ts.map +0 -1
  68. package/dist/modes/batch.js +0 -316
  69. package/dist/modes/batch.js.map +0 -1
  70. package/dist/modes/edge.d.ts +0 -85
  71. package/dist/modes/edge.d.ts.map +0 -1
  72. package/dist/modes/edge.js +0 -310
  73. package/dist/modes/edge.js.map +0 -1
  74. package/dist/modes/index.d.ts +0 -13
  75. package/dist/modes/index.d.ts.map +0 -1
  76. package/dist/modes/index.js +0 -13
  77. package/dist/modes/index.js.map +0 -1
  78. package/dist/modes/real-time.d.ts +0 -58
  79. package/dist/modes/real-time.d.ts.map +0 -1
  80. package/dist/modes/real-time.js +0 -196
  81. package/dist/modes/real-time.js.map +0 -1
  82. package/dist/modes/research.d.ts +0 -79
  83. package/dist/modes/research.d.ts.map +0 -1
  84. package/dist/modes/research.js +0 -389
  85. package/dist/modes/research.js.map +0 -1
  86. package/dist/pattern-learner.d.ts +0 -117
  87. package/dist/pattern-learner.d.ts.map +0 -1
  88. package/dist/pattern-learner.js +0 -603
  89. package/dist/pattern-learner.js.map +0 -1
  90. package/dist/reasoning-bank.d.ts +0 -259
  91. package/dist/reasoning-bank.d.ts.map +0 -1
  92. package/dist/reasoning-bank.js +0 -993
  93. package/dist/reasoning-bank.js.map +0 -1
  94. package/dist/reasoningbank-adapter.d.ts +0 -168
  95. package/dist/reasoningbank-adapter.d.ts.map +0 -1
  96. package/dist/reasoningbank-adapter.js +0 -463
  97. package/dist/reasoningbank-adapter.js.map +0 -1
  98. package/dist/sona-integration.d.ts +0 -168
  99. package/dist/sona-integration.d.ts.map +0 -1
  100. package/dist/sona-integration.js +0 -316
  101. package/dist/sona-integration.js.map +0 -1
  102. package/dist/sona-manager.d.ts +0 -147
  103. package/dist/sona-manager.d.ts.map +0 -1
  104. package/dist/sona-manager.js +0 -695
  105. package/dist/sona-manager.js.map +0 -1
  106. package/dist/types.d.ts +0 -431
  107. package/dist/types.d.ts.map +0 -1
  108. package/dist/types.js +0 -11
  109. package/dist/types.js.map +0 -1
  110. package/tsconfig.build.tsbuildinfo +0 -1
@@ -1,603 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"pattern-learner.js","sourceRoot":"","sources":["../src/pattern-learner.ts"],"names":[],"mappings":"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"}