@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,409 @@
1
+ /**
2
+ * Edge Mode Implementation
3
+ *
4
+ * Optimized for resource-constrained environments with:
5
+ * - <5MB memory footprint
6
+ * - Minimal latency (<1ms)
7
+ * - Micro-LoRA (rank-1)
8
+ * - Aggressive pruning
9
+ * - Async updates
10
+ */
11
+
12
+ import type {
13
+ SONAModeConfig,
14
+ ModeOptimizations,
15
+ Trajectory,
16
+ Pattern,
17
+ PatternMatch,
18
+ LoRAWeights,
19
+ EWCState,
20
+ } from '../types.js';
21
+ import { BaseModeImplementation } from './base.js';
22
+
23
+ /**
24
+ * Edge mode for resource-constrained devices
25
+ */
26
+ export class EdgeMode extends BaseModeImplementation {
27
+ readonly mode = 'edge';
28
+
29
+ // Minimal pattern storage (compressed)
30
+ private compressedPatterns: Map<string, CompressedPattern> = new Map();
31
+
32
+ // Quantized LoRA weights (int8)
33
+ private quantizedWeights: Map<string, Int8Array> = new Map();
34
+ private quantizationScale: number = 1.0;
35
+
36
+ // Pending async updates
37
+ private pendingUpdates: Array<() => Promise<void>> = [];
38
+ private updateTimer: ReturnType<typeof setTimeout> | null = null;
39
+
40
+ // Stats
41
+ private totalOps = 0;
42
+ private totalTime = 0;
43
+
44
+ async initialize(): Promise<void> {
45
+ await super.initialize();
46
+ this.compressedPatterns.clear();
47
+ this.quantizedWeights.clear();
48
+ this.pendingUpdates = [];
49
+ }
50
+
51
+ async cleanup(): Promise<void> {
52
+ if (this.updateTimer) {
53
+ clearTimeout(this.updateTimer);
54
+ }
55
+ this.compressedPatterns.clear();
56
+ this.quantizedWeights.clear();
57
+ this.pendingUpdates = [];
58
+ await super.cleanup();
59
+ }
60
+
61
+ /**
62
+ * Find patterns using compressed embeddings
63
+ */
64
+ async findPatterns(
65
+ embedding: Float32Array,
66
+ k: number,
67
+ patterns: Pattern[]
68
+ ): Promise<PatternMatch[]> {
69
+ const startTime = performance.now();
70
+
71
+ // Compress input embedding for comparison
72
+ const compressedInput = this.compressEmbedding(embedding);
73
+
74
+ // Fast similarity on compressed representations
75
+ const matches: Array<{ pattern: Pattern; score: number }> = [];
76
+
77
+ for (const pattern of patterns) {
78
+ let compressed = this.compressedPatterns.get(pattern.patternId);
79
+ if (!compressed) {
80
+ compressed = this.createCompressedPattern(pattern);
81
+ this.compressedPatterns.set(pattern.patternId, compressed);
82
+ }
83
+
84
+ // Use compressed similarity (faster but less accurate)
85
+ const score = this.compressedSimilarity(compressedInput, compressed.embedding);
86
+ matches.push({ pattern, score });
87
+ }
88
+
89
+ // Quick partial sort
90
+ matches.sort((a, b) => b.score - a.score);
91
+ const topK = matches.slice(0, k);
92
+
93
+ this.totalOps++;
94
+ this.totalTime += performance.now() - startTime;
95
+
96
+ return topK.map(m => ({
97
+ pattern: m.pattern,
98
+ similarity: m.score,
99
+ confidence: m.score * m.pattern.successRate,
100
+ latencyMs: 0,
101
+ }));
102
+ }
103
+
104
+ /**
105
+ * Lightweight learning with async updates
106
+ */
107
+ async learn(
108
+ trajectories: Trajectory[],
109
+ config: SONAModeConfig,
110
+ ewcState: EWCState
111
+ ): Promise<number> {
112
+ const startTime = performance.now();
113
+
114
+ if (trajectories.length === 0) return 0;
115
+
116
+ // Edge mode: only learn from high-quality trajectories
117
+ const threshold = config.qualityThreshold;
118
+ const good = trajectories.filter(t => t.qualityScore >= threshold);
119
+
120
+ if (good.length === 0) return 0;
121
+
122
+ const avgQuality = good.reduce((s, t) => s + t.qualityScore, 0) / good.length;
123
+
124
+ // Queue async update for later processing
125
+ this.queueAsyncUpdate(async () => {
126
+ await this.performLightweightUpdate(good, config.learningRate);
127
+ });
128
+
129
+ this.totalOps++;
130
+ this.totalTime += performance.now() - startTime;
131
+
132
+ return Math.max(0, avgQuality - 0.5);
133
+ }
134
+
135
+ /**
136
+ * Apply quantized LoRA
137
+ */
138
+ async applyLoRA(
139
+ input: Float32Array,
140
+ weights?: LoRAWeights
141
+ ): Promise<Float32Array> {
142
+ if (!weights) {
143
+ return input;
144
+ }
145
+
146
+ const output = new Float32Array(input.length);
147
+ output.set(input);
148
+
149
+ // Quantize weights if not already done
150
+ for (const module of ['q_proj', 'v_proj']) {
151
+ const A = weights.A.get(module);
152
+ const B = weights.B.get(module);
153
+
154
+ if (A && B) {
155
+ const qA = this.getOrQuantize(`A_${module}`, A);
156
+ const qB = this.getOrQuantize(`B_${module}`, B);
157
+
158
+ // Apply quantized LoRA
159
+ const adapted = this.applyQuantizedLoRA(input, qA, qB);
160
+ const alpha = 0.05; // Very small blending for edge
161
+ for (let i = 0; i < output.length; i++) {
162
+ output[i] = output[i] * (1 - alpha) + adapted[i] * alpha;
163
+ }
164
+ }
165
+ }
166
+
167
+ return output;
168
+ }
169
+
170
+ getStats(): Record<string, number> {
171
+ return {
172
+ avgLatencyMs: this.totalOps > 0 ? this.totalTime / this.totalOps : 0,
173
+ compressedPatterns: this.compressedPatterns.size,
174
+ quantizedWeights: this.quantizedWeights.size,
175
+ pendingUpdates: this.pendingUpdates.length,
176
+ memoryEstimateMb: this.estimateMemoryUsage(),
177
+ };
178
+ }
179
+
180
+ // ========================================================================
181
+ // Compression utilities
182
+ // ========================================================================
183
+
184
+ /**
185
+ * Compress embedding to 8-bit representation
186
+ */
187
+ private compressEmbedding(embedding: Float32Array): Int8Array {
188
+ const compressed = new Int8Array(embedding.length);
189
+ const max = Math.max(...embedding.map(Math.abs));
190
+ const scale = max > 0 ? 127 / max : 1;
191
+
192
+ for (let i = 0; i < embedding.length; i++) {
193
+ compressed[i] = Math.round(embedding[i] * scale);
194
+ }
195
+
196
+ return compressed;
197
+ }
198
+
199
+ /**
200
+ * Create compressed pattern representation
201
+ */
202
+ private createCompressedPattern(pattern: Pattern): CompressedPattern {
203
+ return {
204
+ id: pattern.patternId,
205
+ embedding: this.compressEmbedding(pattern.embedding),
206
+ successRate: Math.round(pattern.successRate * 255),
207
+ usageCount: Math.min(pattern.usageCount, 255),
208
+ };
209
+ }
210
+
211
+ /**
212
+ * Fast similarity on compressed embeddings
213
+ */
214
+ private compressedSimilarity(a: Int8Array, b: Int8Array): number {
215
+ if (a.length !== b.length) return 0;
216
+
217
+ let dot = 0;
218
+ let normA = 0;
219
+ let normB = 0;
220
+
221
+ // Process in chunks of 8 for better cache utilization
222
+ const len = a.length;
223
+ for (let i = 0; i < len; i++) {
224
+ dot += a[i] * b[i];
225
+ normA += a[i] * a[i];
226
+ normB += b[i] * b[i];
227
+ }
228
+
229
+ const denom = Math.sqrt(normA * normB);
230
+ return denom > 0 ? dot / denom : 0;
231
+ }
232
+
233
+ /**
234
+ * Get or create quantized weights
235
+ */
236
+ private getOrQuantize(key: string, weights: Float32Array): Int8Array {
237
+ let quantized = this.quantizedWeights.get(key);
238
+ if (!quantized) {
239
+ quantized = this.quantizeWeights(weights);
240
+ this.quantizedWeights.set(key, quantized);
241
+ }
242
+ return quantized;
243
+ }
244
+
245
+ /**
246
+ * Quantize float weights to int8
247
+ */
248
+ private quantizeWeights(weights: Float32Array): Int8Array {
249
+ const max = Math.max(...weights.map(Math.abs));
250
+ this.quantizationScale = max > 0 ? 127 / max : 1;
251
+
252
+ const quantized = new Int8Array(weights.length);
253
+ for (let i = 0; i < weights.length; i++) {
254
+ quantized[i] = Math.round(weights[i] * this.quantizationScale);
255
+ }
256
+
257
+ return quantized;
258
+ }
259
+
260
+ /**
261
+ * Apply LoRA with quantized weights
262
+ */
263
+ private applyQuantizedLoRA(
264
+ input: Float32Array,
265
+ qA: Int8Array,
266
+ qB: Int8Array
267
+ ): Float32Array {
268
+ const dim = input.length;
269
+ const rank = 1; // Edge mode uses rank-1
270
+
271
+ const output = new Float32Array(dim);
272
+ const dequantScale = 1 / this.quantizationScale;
273
+
274
+ // A * input -> intermediate (scalar for rank-1)
275
+ let intermediate = 0;
276
+ for (let d = 0; d < dim; d++) {
277
+ intermediate += (qA[d] * dequantScale) * input[d];
278
+ }
279
+
280
+ // B * intermediate -> output
281
+ for (let d = 0; d < dim; d++) {
282
+ output[d] = (qB[d] * dequantScale) * intermediate;
283
+ }
284
+
285
+ return output;
286
+ }
287
+
288
+ // ========================================================================
289
+ // Async updates
290
+ // ========================================================================
291
+
292
+ /**
293
+ * Queue an async update
294
+ */
295
+ private queueAsyncUpdate(update: () => Promise<void>): void {
296
+ this.pendingUpdates.push(update);
297
+
298
+ // Schedule processing if not already scheduled
299
+ if (!this.updateTimer) {
300
+ this.updateTimer = setTimeout(() => {
301
+ this.processAsyncUpdates();
302
+ }, 100); // Process updates every 100ms
303
+ }
304
+ }
305
+
306
+ /**
307
+ * Process pending async updates
308
+ */
309
+ private async processAsyncUpdates(): Promise<void> {
310
+ this.updateTimer = null;
311
+
312
+ const updates = this.pendingUpdates;
313
+ this.pendingUpdates = [];
314
+
315
+ // Process up to 5 updates at a time
316
+ for (const update of updates.slice(0, 5)) {
317
+ try {
318
+ await update();
319
+ } catch (error) {
320
+ console.error('Edge mode async update failed:', error);
321
+ }
322
+ }
323
+
324
+ // Re-queue remaining updates
325
+ if (updates.length > 5) {
326
+ this.pendingUpdates = updates.slice(5);
327
+ this.updateTimer = setTimeout(() => {
328
+ this.processAsyncUpdates();
329
+ }, 100);
330
+ }
331
+ }
332
+
333
+ /**
334
+ * Perform lightweight parameter update
335
+ */
336
+ private async performLightweightUpdate(
337
+ trajectories: Trajectory[],
338
+ learningRate: number
339
+ ): Promise<void> {
340
+ // Simple exponential moving average update
341
+ const alpha = learningRate;
342
+
343
+ for (const trajectory of trajectories) {
344
+ if (trajectory.steps.length === 0) continue;
345
+
346
+ // Update compressed patterns based on trajectory success
347
+ const lastStep = trajectory.steps[trajectory.steps.length - 1];
348
+ const pattern = this.findSimilarCompressedPattern(lastStep.stateAfter);
349
+
350
+ if (pattern) {
351
+ // Update success rate with EMA
352
+ const newRate = alpha * trajectory.qualityScore + (1 - alpha) * (pattern.successRate / 255);
353
+ pattern.successRate = Math.round(newRate * 255);
354
+ pattern.usageCount = Math.min(255, pattern.usageCount + 1);
355
+ }
356
+ }
357
+ }
358
+
359
+ /**
360
+ * Find most similar compressed pattern
361
+ */
362
+ private findSimilarCompressedPattern(embedding: Float32Array): CompressedPattern | null {
363
+ const compressed = this.compressEmbedding(embedding);
364
+ let best: CompressedPattern | null = null;
365
+ let bestSim = -1;
366
+
367
+ for (const pattern of this.compressedPatterns.values()) {
368
+ const sim = this.compressedSimilarity(compressed, pattern.embedding);
369
+ if (sim > bestSim) {
370
+ bestSim = sim;
371
+ best = pattern;
372
+ }
373
+ }
374
+
375
+ return best;
376
+ }
377
+
378
+ /**
379
+ * Estimate memory usage in MB
380
+ */
381
+ private estimateMemoryUsage(): number {
382
+ let bytes = 0;
383
+
384
+ // Compressed patterns
385
+ for (const pattern of this.compressedPatterns.values()) {
386
+ bytes += pattern.embedding.byteLength + 8; // embedding + overhead
387
+ }
388
+
389
+ // Quantized weights
390
+ for (const weights of this.quantizedWeights.values()) {
391
+ bytes += weights.byteLength;
392
+ }
393
+
394
+ // Pending updates (minimal)
395
+ bytes += this.pendingUpdates.length * 100;
396
+
397
+ return bytes / (1024 * 1024);
398
+ }
399
+ }
400
+
401
+ /**
402
+ * Compressed pattern representation
403
+ */
404
+ interface CompressedPattern {
405
+ id: string;
406
+ embedding: Int8Array;
407
+ successRate: number; // 0-255
408
+ usageCount: number; // 0-255
409
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * SONA Learning Modes Index
3
+ *
4
+ * Exports all learning mode implementations and the common interface.
5
+ */
6
+ import type { SONAModeConfig, ModeOptimizations, Trajectory, Pattern, PatternMatch, LoRAWeights, EWCState } from '../types.js';
7
+ /**
8
+ * Common interface for all mode implementations
9
+ */
10
+ export interface ModeImplementation {
11
+ /** Mode identifier */
12
+ readonly mode: string;
13
+ /** Initialize the mode */
14
+ initialize(): Promise<void>;
15
+ /** Cleanup resources */
16
+ cleanup(): Promise<void>;
17
+ /** Find similar patterns (k-nearest) */
18
+ findPatterns(embedding: Float32Array, k: number, patterns: Pattern[]): Promise<PatternMatch[]>;
19
+ /** Perform a learning step */
20
+ learn(trajectories: Trajectory[], config: SONAModeConfig, ewcState: EWCState): Promise<number>;
21
+ /** Apply LoRA adaptations */
22
+ applyLoRA(input: Float32Array, weights?: LoRAWeights): Promise<Float32Array>;
23
+ /** Get mode-specific stats */
24
+ getStats(): Record<string, number>;
25
+ }
26
+ /**
27
+ * Base class for mode implementations
28
+ */
29
+ export declare abstract class BaseModeImplementation implements ModeImplementation {
30
+ abstract readonly mode: string;
31
+ protected config: SONAModeConfig;
32
+ protected optimizations: ModeOptimizations;
33
+ protected isInitialized: boolean;
34
+ constructor(config: SONAModeConfig, optimizations: ModeOptimizations);
35
+ initialize(): Promise<void>;
36
+ cleanup(): Promise<void>;
37
+ /**
38
+ * Compute cosine similarity between two vectors (SIMD-optimized)
39
+ */
40
+ protected cosineSimilarity(a: Float32Array, b: Float32Array): number;
41
+ /**
42
+ * Apply LoRA: output = input + BA * input (simplified)
43
+ */
44
+ protected applyLoRATransform(input: Float32Array, A: Float32Array, B: Float32Array, rank: number): Float32Array;
45
+ abstract findPatterns(embedding: Float32Array, k: number, patterns: Pattern[]): Promise<PatternMatch[]>;
46
+ abstract learn(trajectories: Trajectory[], config: SONAModeConfig, ewcState: EWCState): Promise<number>;
47
+ abstract applyLoRA(input: Float32Array, weights?: LoRAWeights): Promise<Float32Array>;
48
+ abstract getStats(): Record<string, number>;
49
+ }
50
+ export { RealTimeMode } from './real-time.js';
51
+ export { BalancedMode } from './balanced.js';
52
+ export { ResearchMode } from './research.js';
53
+ export { EdgeMode } from './edge.js';
54
+ export { BatchMode } from './batch.js';
55
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,YAAY,EACZ,WAAW,EACX,QAAQ,EACT,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sBAAsB;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,0BAA0B;IAC1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,wBAAwB;IACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB,wCAAwC;IACxC,YAAY,CACV,SAAS,EAAE,YAAY,EACvB,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE3B,8BAA8B;IAC9B,KAAK,CACH,YAAY,EAAE,UAAU,EAAE,EAC1B,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB,6BAA6B;IAC7B,SAAS,CACP,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB,8BAA8B;IAC9B,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,8BAAsB,sBAAuB,YAAW,kBAAkB;IACxE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;IACjC,SAAS,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC3C,SAAS,CAAC,aAAa,UAAS;gBAEpB,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB;IAK9D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM;IA4BpE;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAC1B,KAAK,EAAE,YAAY,EACnB,CAAC,EAAE,YAAY,EACf,CAAC,EAAE,YAAY,EACf,IAAI,EAAE,MAAM,GACX,YAAY;IA6Bf,QAAQ,CAAC,YAAY,CACnB,SAAS,EAAE,YAAY,EACvB,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC,YAAY,EAAE,CAAC;IAE1B,QAAQ,CAAC,KAAK,CACZ,YAAY,EAAE,UAAU,EAAE,EAC1B,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,CAAC;IAElB,QAAQ,CAAC,SAAS,CAChB,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,YAAY,CAAC;IAExB,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAC5C;AAGD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * SONA Learning Modes Index
3
+ *
4
+ * Exports all learning mode implementations and the common interface.
5
+ */
6
+ /**
7
+ * Base class for mode implementations
8
+ */
9
+ export class BaseModeImplementation {
10
+ config;
11
+ optimizations;
12
+ isInitialized = false;
13
+ constructor(config, optimizations) {
14
+ this.config = config;
15
+ this.optimizations = optimizations;
16
+ }
17
+ async initialize() {
18
+ this.isInitialized = true;
19
+ }
20
+ async cleanup() {
21
+ this.isInitialized = false;
22
+ }
23
+ /**
24
+ * Compute cosine similarity between two vectors (SIMD-optimized)
25
+ */
26
+ cosineSimilarity(a, b) {
27
+ if (a.length !== b.length)
28
+ return 0;
29
+ let dotProduct = 0;
30
+ let normA = 0;
31
+ let normB = 0;
32
+ // Process 4 elements at a time for SIMD-like behavior
33
+ const len = a.length;
34
+ const simdLen = len - (len % 4);
35
+ for (let i = 0; i < simdLen; i += 4) {
36
+ dotProduct += a[i] * b[i] + a[i + 1] * b[i + 1] + a[i + 2] * b[i + 2] + a[i + 3] * b[i + 3];
37
+ normA += a[i] * a[i] + a[i + 1] * a[i + 1] + a[i + 2] * a[i + 2] + a[i + 3] * a[i + 3];
38
+ normB += b[i] * b[i] + b[i + 1] * b[i + 1] + b[i + 2] * b[i + 2] + b[i + 3] * b[i + 3];
39
+ }
40
+ // Handle remaining elements
41
+ for (let i = simdLen; i < len; i++) {
42
+ dotProduct += a[i] * b[i];
43
+ normA += a[i] * a[i];
44
+ normB += b[i] * b[i];
45
+ }
46
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
47
+ return denom > 0 ? dotProduct / denom : 0;
48
+ }
49
+ /**
50
+ * Apply LoRA: output = input + BA * input (simplified)
51
+ */
52
+ applyLoRATransform(input, A, B, rank) {
53
+ const dim = input.length;
54
+ const output = new Float32Array(dim);
55
+ // Copy input to output
56
+ output.set(input);
57
+ // Compute A * input -> intermediate (rank dimensions)
58
+ const intermediate = new Float32Array(rank);
59
+ for (let r = 0; r < rank; r++) {
60
+ let sum = 0;
61
+ for (let d = 0; d < dim; d++) {
62
+ sum += A[d * rank + r] * input[d];
63
+ }
64
+ intermediate[r] = sum;
65
+ }
66
+ // Compute B * intermediate -> delta (dim dimensions)
67
+ for (let d = 0; d < dim; d++) {
68
+ let sum = 0;
69
+ for (let r = 0; r < rank; r++) {
70
+ sum += B[r * dim + d] * intermediate[r];
71
+ }
72
+ output[d] += sum;
73
+ }
74
+ return output;
75
+ }
76
+ }
77
+ // Export mode implementations
78
+ export { RealTimeMode } from './real-time.js';
79
+ export { BalancedMode } from './balanced.js';
80
+ export { ResearchMode } from './research.js';
81
+ export { EdgeMode } from './edge.js';
82
+ export { BatchMode } from './batch.js';
83
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * SONA Learning Modes Index
3
+ *
4
+ * Exports all learning mode implementations and the common interface.
5
+ */
6
+
7
+ // Re-export base types and class (defined separately to avoid circular deps)
8
+ export type { ModeImplementation } from './base.js';
9
+ export { BaseModeImplementation } from './base.js';
10
+
11
+ // Export mode implementations
12
+ export { RealTimeMode } from './real-time.js';
13
+ export { BalancedMode } from './balanced.js';
14
+ export { ResearchMode } from './research.js';
15
+ export { EdgeMode } from './edge.js';
16
+ export { BatchMode } from './batch.js';
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Real-Time Mode Implementation
3
+ *
4
+ * Optimized for sub-millisecond adaptation with:
5
+ * - 2200 ops/sec target
6
+ * - <0.5ms latency
7
+ * - Micro-LoRA (rank-2)
8
+ * - SIMD vectorization
9
+ * - Aggressive caching
10
+ */
11
+ import type { SONAModeConfig, Trajectory, Pattern, PatternMatch, LoRAWeights, EWCState } from '../types.js';
12
+ import { BaseModeImplementation } from './index.js';
13
+ /**
14
+ * Real-Time mode for sub-millisecond adaptation
15
+ */
16
+ export declare class RealTimeMode extends BaseModeImplementation {
17
+ readonly mode = "real-time";
18
+ private patternCache;
19
+ private cacheHits;
20
+ private cacheMisses;
21
+ private patternEmbeddings;
22
+ private patternIds;
23
+ private totalPatternMatches;
24
+ private totalPatternTime;
25
+ private totalLearnTime;
26
+ private learnIterations;
27
+ initialize(): Promise<void>;
28
+ cleanup(): Promise<void>;
29
+ /**
30
+ * Find patterns using cached similarity search
31
+ * Target: <1ms for k=3
32
+ */
33
+ findPatterns(embedding: Float32Array, k: number, patterns: Pattern[]): Promise<PatternMatch[]>;
34
+ /**
35
+ * Fast learning using Micro-LoRA updates
36
+ * Target: <10ms per batch
37
+ */
38
+ learn(trajectories: Trajectory[], config: SONAModeConfig, ewcState: EWCState): Promise<number>;
39
+ /**
40
+ * Apply LoRA with minimal overhead
41
+ * Target: <0.05ms
42
+ */
43
+ applyLoRA(input: Float32Array, weights?: LoRAWeights): Promise<Float32Array>;
44
+ getStats(): Record<string, number>;
45
+ /**
46
+ * Compute cache key from embedding
47
+ */
48
+ private computeCacheKey;
49
+ /**
50
+ * Update pattern index for fast similarity search
51
+ */
52
+ private updatePatternIndex;
53
+ /**
54
+ * Partial sort to get top-k elements (faster than full sort)
55
+ */
56
+ private partialSort;
57
+ }
58
+ //# sourceMappingURL=real-time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"real-time.d.ts","sourceRoot":"","sources":["real-time.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,cAAc,EAEd,UAAU,EACV,OAAO,EACP,YAAY,EACZ,WAAW,EACX,QAAQ,EACT,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD;;GAEG;AACH,qBAAa,YAAa,SAAQ,sBAAsB;IACtD,QAAQ,CAAC,IAAI,eAAe;IAG5B,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAK;IAGxB,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,UAAU,CAAgB;IAGlC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,eAAe,CAAK;IAEtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B;;;OAGG;IACG,YAAY,CAChB,SAAS,EAAE,YAAY,EACvB,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC,YAAY,EAAE,CAAC;IAqD1B;;;OAGG;IACG,KAAK,CACT,YAAY,EAAE,UAAU,EAAE,EAC1B,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,MAAM,CAAC;IAyBlB;;;OAGG;IACG,SAAS,CACb,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,YAAY,CAAC;IA8BxB,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAgBlC;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,WAAW;CA4BpB"}