@ruvector/ruvllm 4.0.1 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/README.md +446 -160
  2. package/bin/cli.js +1066 -0
  3. package/bin/gpu-delegate.js +67 -0
  4. package/bin/ruvllm-adapters.js +5 -0
  5. package/bin/ruvllm-gpu-loop.js +5 -0
  6. package/bin/serve.js +265 -0
  7. package/dist/cjs/benchmarks/embedding-benchmark.d.ts +102 -0
  8. package/dist/cjs/benchmarks/embedding-benchmark.d.ts.map +1 -0
  9. package/dist/cjs/benchmarks/embedding-benchmark.js +436 -0
  10. package/dist/cjs/benchmarks/index.d.ts +34 -0
  11. package/dist/cjs/benchmarks/index.d.ts.map +1 -0
  12. package/dist/cjs/benchmarks/index.js +132 -0
  13. package/dist/cjs/benchmarks/model-comparison.d.ts +71 -0
  14. package/dist/cjs/benchmarks/model-comparison.d.ts.map +1 -0
  15. package/dist/cjs/benchmarks/model-comparison.js +476 -0
  16. package/dist/cjs/benchmarks/routing-benchmark.d.ts +70 -0
  17. package/dist/cjs/benchmarks/routing-benchmark.d.ts.map +1 -0
  18. package/dist/cjs/benchmarks/routing-benchmark.js +289 -0
  19. package/dist/cjs/contrastive.d.ts +229 -0
  20. package/dist/cjs/contrastive.d.ts.map +1 -0
  21. package/dist/cjs/contrastive.js +589 -0
  22. package/dist/cjs/engine.d.ts +160 -0
  23. package/dist/cjs/engine.d.ts.map +1 -0
  24. package/dist/cjs/engine.js +552 -0
  25. package/dist/cjs/export.d.ts +182 -0
  26. package/dist/cjs/export.d.ts.map +1 -0
  27. package/dist/cjs/export.js +422 -0
  28. package/dist/cjs/federated.d.ts +233 -0
  29. package/dist/cjs/federated.d.ts.map +1 -0
  30. package/dist/cjs/federated.js +525 -0
  31. package/dist/cjs/index.d.ts +68 -0
  32. package/dist/cjs/index.d.ts.map +1 -0
  33. package/dist/cjs/index.js +104 -0
  34. package/dist/cjs/intelligence.d.ts +136 -0
  35. package/dist/cjs/intelligence.d.ts.map +1 -0
  36. package/dist/cjs/intelligence.js +226 -0
  37. package/dist/cjs/lora.d.ts +251 -0
  38. package/dist/cjs/lora.d.ts.map +1 -0
  39. package/dist/cjs/lora.js +509 -0
  40. package/dist/cjs/models.d.ts +129 -0
  41. package/dist/cjs/models.d.ts.map +1 -0
  42. package/dist/cjs/models.js +323 -0
  43. package/dist/cjs/native.d.ts +140 -0
  44. package/dist/cjs/native.d.ts.map +1 -0
  45. package/dist/cjs/native.js +98 -0
  46. package/dist/cjs/session.d.ts +80 -0
  47. package/dist/cjs/session.d.ts.map +1 -0
  48. package/dist/cjs/session.js +203 -0
  49. package/dist/cjs/simd.d.ts +90 -0
  50. package/dist/cjs/simd.d.ts.map +1 -0
  51. package/dist/cjs/simd.js +209 -0
  52. package/dist/cjs/sona.d.ts +223 -0
  53. package/dist/cjs/sona.d.ts.map +1 -0
  54. package/dist/cjs/sona.js +562 -0
  55. package/dist/cjs/streaming.d.ts +55 -0
  56. package/dist/cjs/streaming.d.ts.map +1 -0
  57. package/dist/cjs/streaming.js +131 -0
  58. package/dist/cjs/training.d.ts +312 -0
  59. package/dist/cjs/training.d.ts.map +1 -0
  60. package/dist/cjs/training.js +610 -0
  61. package/dist/cjs/types.d.ts +696 -0
  62. package/dist/cjs/types.d.ts.map +1 -0
  63. package/dist/cjs/types.js +6 -0
  64. package/dist/esm/benchmarks/embedding-benchmark.d.ts +102 -0
  65. package/dist/esm/benchmarks/embedding-benchmark.d.ts.map +1 -0
  66. package/dist/esm/benchmarks/embedding-benchmark.js +427 -0
  67. package/dist/esm/benchmarks/index.d.ts +34 -0
  68. package/dist/esm/benchmarks/index.d.ts.map +1 -0
  69. package/dist/esm/benchmarks/index.js +110 -0
  70. package/dist/esm/benchmarks/model-comparison.d.ts +71 -0
  71. package/dist/esm/benchmarks/model-comparison.d.ts.map +1 -0
  72. package/dist/esm/benchmarks/model-comparison.js +434 -0
  73. package/dist/esm/benchmarks/routing-benchmark.d.ts +70 -0
  74. package/dist/esm/benchmarks/routing-benchmark.d.ts.map +1 -0
  75. package/dist/esm/benchmarks/routing-benchmark.js +283 -0
  76. package/dist/esm/contrastive.d.ts +229 -0
  77. package/dist/esm/contrastive.d.ts.map +1 -0
  78. package/dist/esm/contrastive.js +578 -0
  79. package/dist/esm/engine.d.ts +160 -0
  80. package/dist/esm/engine.d.ts.map +1 -0
  81. package/dist/esm/engine.js +548 -0
  82. package/dist/esm/export.d.ts +182 -0
  83. package/dist/esm/export.d.ts.map +1 -0
  84. package/dist/esm/export.js +414 -0
  85. package/dist/esm/federated.d.ts +233 -0
  86. package/dist/esm/federated.d.ts.map +1 -0
  87. package/dist/esm/federated.js +520 -0
  88. package/dist/esm/index.d.ts +68 -0
  89. package/dist/esm/index.d.ts.map +1 -0
  90. package/dist/esm/index.js +84 -0
  91. package/dist/esm/intelligence.d.ts +136 -0
  92. package/dist/esm/intelligence.d.ts.map +1 -0
  93. package/dist/esm/intelligence.js +188 -0
  94. package/dist/esm/lora.d.ts +251 -0
  95. package/dist/esm/lora.d.ts.map +1 -0
  96. package/dist/esm/lora.js +504 -0
  97. package/dist/esm/models.d.ts +129 -0
  98. package/dist/esm/models.d.ts.map +1 -0
  99. package/dist/esm/models.js +282 -0
  100. package/dist/esm/native.d.ts +140 -0
  101. package/dist/esm/native.d.ts.map +1 -0
  102. package/dist/esm/native.js +100 -0
  103. package/dist/esm/session.d.ts +80 -0
  104. package/dist/esm/session.d.ts.map +1 -0
  105. package/dist/esm/session.js +199 -0
  106. package/dist/esm/simd.d.ts +90 -0
  107. package/dist/esm/simd.d.ts.map +1 -0
  108. package/dist/esm/simd.js +205 -0
  109. package/dist/esm/sona.d.ts +223 -0
  110. package/dist/esm/sona.d.ts.map +1 -0
  111. package/dist/esm/sona.js +556 -0
  112. package/dist/esm/streaming.d.ts +55 -0
  113. package/dist/esm/streaming.d.ts.map +1 -0
  114. package/dist/esm/streaming.js +126 -0
  115. package/dist/esm/training.d.ts +312 -0
  116. package/dist/esm/training.d.ts.map +1 -0
  117. package/dist/esm/training.js +603 -0
  118. package/dist/esm/types.d.ts +696 -0
  119. package/dist/esm/types.d.ts.map +1 -0
  120. package/dist/esm/types.js +5 -0
  121. package/gpu/_load.cjs +38 -0
  122. package/gpu/_load.mjs +33 -0
  123. package/gpu/adapters.cjs +3 -0
  124. package/gpu/adapters.mjs +5 -0
  125. package/gpu/engine.cjs +3 -0
  126. package/gpu/engine.mjs +5 -0
  127. package/gpu/fixture.cjs +3 -0
  128. package/gpu/fixture.mjs +5 -0
  129. package/gpu/gpu-host.cjs +3 -0
  130. package/gpu/gpu-host.mjs +5 -0
  131. package/gpu/gpu-loop.cjs +3 -0
  132. package/gpu/gpu-loop.mjs +5 -0
  133. package/gpu/gpu-spool-adapter.cjs +3 -0
  134. package/gpu/gpu-spool-adapter.mjs +5 -0
  135. package/gpu/vast-host-adapter.cjs +3 -0
  136. package/gpu/vast-host-adapter.mjs +5 -0
  137. package/package.json +159 -49
  138. package/scripts/ensemble-model-compare.js +287 -0
  139. package/scripts/fix-esm-extensions.mjs +220 -0
  140. package/scripts/huggingface/README.md +537 -0
  141. package/scripts/huggingface/publish.sh +112 -0
  142. package/scripts/hybrid-model-compare.js +373 -0
  143. package/scripts/improved-model-compare.js +288 -0
  144. package/scripts/optimized-model-compare.js +364 -0
  145. package/scripts/real-model-compare.js +280 -0
  146. package/scripts/smoke-esm.mjs +82 -0
  147. package/scripts/training/agentic-flow-capabilities.json +329 -0
  148. package/scripts/training/claude-code-synth.js +505 -0
  149. package/scripts/training/claude-flow-capabilities.json +1322 -0
  150. package/scripts/training/claude-hard-negatives.js +222 -0
  151. package/scripts/training/contrastive-finetune.js +517 -0
  152. package/scripts/training/ecosystem-triplets.jsonl +1467 -0
  153. package/scripts/training/generate-ecosystem-triplets.js +1324 -0
  154. package/scripts/training/routing-dataset.js +634 -0
  155. package/scripts/training/ruvector-capabilities.json +798 -0
  156. package/scripts/training/validate-ecosystem.js +381 -0
  157. package/scripts/training/validation-results.json +23 -0
  158. package/GPU-LOOP.md +0 -229
  159. package/LICENSE +0 -201
  160. package/NOTICE +0 -9
  161. package/examples/gpu-loop.example.json +0 -26
  162. package/src/adapters-cli.mjs +0 -23
  163. package/src/adapters.mjs +0 -91
  164. package/src/cli.mjs +0 -30
  165. package/src/engine.mjs +0 -238
  166. package/src/fixture.mjs +0 -38
  167. package/src/gpu-host.mjs +0 -47
  168. package/src/gpu-loop-cli.mjs +0 -67
  169. package/src/gpu-loop.mjs +0 -184
  170. package/src/gpu-spool-adapter.mjs +0 -80
  171. package/src/vast-host-adapter.mjs +0 -274
@@ -0,0 +1,205 @@
1
+ /**
2
+ * SIMD Operations for vector computations
3
+ *
4
+ * Uses native SIMD instructions (AVX2/AVX512/SSE4.1/NEON) when available,
5
+ * falls back to JavaScript implementations otherwise.
6
+ */
7
+ import { getNativeModule } from './native.js';
8
+ /**
9
+ * SIMD Operations class
10
+ *
11
+ * Provides hardware-accelerated vector operations when native module is available.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { SimdOps } from '@ruvector/ruvllm';
16
+ *
17
+ * const simd = new SimdOps();
18
+ *
19
+ * // Compute dot product
20
+ * const result = simd.dotProduct([1, 2, 3], [4, 5, 6]);
21
+ * console.log(result); // 32
22
+ *
23
+ * // Check capabilities
24
+ * console.log(simd.capabilities()); // ['AVX2', 'FMA']
25
+ * ```
26
+ */
27
+ export class SimdOps {
28
+ constructor() {
29
+ this.native = null;
30
+ const mod = getNativeModule();
31
+ if (mod) {
32
+ try {
33
+ this.native = new mod.SimdOperations();
34
+ }
35
+ catch {
36
+ // Fall back to JS implementation
37
+ }
38
+ }
39
+ }
40
+ /**
41
+ * Compute dot product of two vectors
42
+ */
43
+ dotProduct(a, b) {
44
+ if (this.native) {
45
+ return this.native.dotProduct(a, b);
46
+ }
47
+ // JavaScript fallback
48
+ let sum = 0;
49
+ const len = Math.min(a.length, b.length);
50
+ for (let i = 0; i < len; i++) {
51
+ sum += a[i] * b[i];
52
+ }
53
+ return sum;
54
+ }
55
+ /**
56
+ * Compute cosine similarity between two vectors
57
+ */
58
+ cosineSimilarity(a, b) {
59
+ if (this.native) {
60
+ return this.native.cosineSimilarity(a, b);
61
+ }
62
+ // JavaScript fallback
63
+ let dot = 0;
64
+ let normA = 0;
65
+ let normB = 0;
66
+ const len = Math.min(a.length, b.length);
67
+ for (let i = 0; i < len; i++) {
68
+ dot += a[i] * b[i];
69
+ normA += a[i] * a[i];
70
+ normB += b[i] * b[i];
71
+ }
72
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
73
+ return denom > 0 ? dot / denom : 0;
74
+ }
75
+ /**
76
+ * Compute L2 (Euclidean) distance between two vectors
77
+ */
78
+ l2Distance(a, b) {
79
+ if (this.native) {
80
+ return this.native.l2Distance(a, b);
81
+ }
82
+ // JavaScript fallback
83
+ let sum = 0;
84
+ const len = Math.min(a.length, b.length);
85
+ for (let i = 0; i < len; i++) {
86
+ const diff = a[i] - b[i];
87
+ sum += diff * diff;
88
+ }
89
+ return Math.sqrt(sum);
90
+ }
91
+ /**
92
+ * Matrix-vector multiplication
93
+ */
94
+ matvec(matrix, vector) {
95
+ if (this.native) {
96
+ return this.native.matvec(matrix, vector);
97
+ }
98
+ // JavaScript fallback
99
+ return matrix.map(row => this.dotProduct(row, vector));
100
+ }
101
+ /**
102
+ * Softmax activation function
103
+ */
104
+ softmax(input) {
105
+ if (this.native) {
106
+ return this.native.softmax(input);
107
+ }
108
+ // JavaScript fallback
109
+ const max = Math.max(...input);
110
+ const exps = input.map(x => Math.exp(x - max));
111
+ const sum = exps.reduce((a, b) => a + b, 0);
112
+ return exps.map(x => x / sum);
113
+ }
114
+ /**
115
+ * Element-wise addition
116
+ */
117
+ add(a, b) {
118
+ const len = Math.min(a.length, b.length);
119
+ const result = new Array(len);
120
+ for (let i = 0; i < len; i++) {
121
+ result[i] = a[i] + b[i];
122
+ }
123
+ return result;
124
+ }
125
+ /**
126
+ * Element-wise multiplication
127
+ */
128
+ mul(a, b) {
129
+ const len = Math.min(a.length, b.length);
130
+ const result = new Array(len);
131
+ for (let i = 0; i < len; i++) {
132
+ result[i] = a[i] * b[i];
133
+ }
134
+ return result;
135
+ }
136
+ /**
137
+ * Scale vector by scalar
138
+ */
139
+ scale(a, scalar) {
140
+ return a.map(x => x * scalar);
141
+ }
142
+ /**
143
+ * Normalize vector to unit length
144
+ */
145
+ normalize(a) {
146
+ const norm = Math.sqrt(a.reduce((sum, x) => sum + x * x, 0));
147
+ return norm > 0 ? a.map(x => x / norm) : a;
148
+ }
149
+ /**
150
+ * ReLU activation
151
+ */
152
+ relu(input) {
153
+ return input.map(x => Math.max(0, x));
154
+ }
155
+ /**
156
+ * GELU activation (approximate)
157
+ */
158
+ gelu(input) {
159
+ return input.map(x => {
160
+ return 0.5 * x * (1 + Math.tanh(Math.sqrt(2 / Math.PI) * (x + 0.044715 * x * x * x)));
161
+ });
162
+ }
163
+ /**
164
+ * Sigmoid activation
165
+ */
166
+ sigmoid(input) {
167
+ return input.map(x => 1 / (1 + Math.exp(-x)));
168
+ }
169
+ /**
170
+ * Layer normalization
171
+ */
172
+ layerNorm(input, eps = 1e-5) {
173
+ const mean = input.reduce((a, b) => a + b, 0) / input.length;
174
+ const variance = input.reduce((sum, x) => sum + (x - mean) ** 2, 0) / input.length;
175
+ const std = Math.sqrt(variance + eps);
176
+ return input.map(x => (x - mean) / std);
177
+ }
178
+ /**
179
+ * Check if native SIMD is available
180
+ */
181
+ isNative() {
182
+ return this.native !== null;
183
+ }
184
+ /**
185
+ * Get available SIMD capabilities
186
+ */
187
+ capabilities() {
188
+ if (!this.native) {
189
+ return ['JavaScript (scalar)'];
190
+ }
191
+ // The native module will report actual capabilities
192
+ const mod = getNativeModule();
193
+ if (mod) {
194
+ try {
195
+ const engine = new mod.RuvLLMEngine();
196
+ return engine.simdCapabilities();
197
+ }
198
+ catch {
199
+ return ['Native (unknown)'];
200
+ }
201
+ }
202
+ return ['JavaScript (scalar)'];
203
+ }
204
+ }
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaW1kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBaUIsTUFBTSxVQUFVLENBQUM7QUFFMUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sT0FBTyxPQUFPO0lBR2xCO1FBRlEsV0FBTSxHQUF5QixJQUFJLENBQUM7UUFHMUMsTUFBTSxHQUFHLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFDOUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsaUNBQWlDO1lBQ25DLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLENBQVcsRUFBRSxDQUFXO1FBQ2pDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ1osTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2Is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QUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsb0RBQW9EO1FBQ3BELE1BQU0sR0FBRyxHQUFHLGVBQWUsRUFBRSxDQUFDO1FBQzlCLElBQUksR0FBRyxFQUFFLENBQUM7WUFDUixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RDLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDbkMsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU0lNRCBPcGVyYXRpb25zIGZvciB2ZWN0b3IgY29tcHV0YXRpb25zXG4gKlxuICogVXNlcyBuYXRpdmUgU0lNRCBpbnN0cnVjdGlvbnMgKEFWWDIvQVZYNTEyL1NTRTQuMS9ORU9OKSB3aGVuIGF2YWlsYWJsZSxcbiAqIGZhbGxzIGJhY2sgdG8gSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbnMgb3RoZXJ3aXNlLlxuICovXG5cbmltcG9ydCB7IGdldE5hdGl2ZU1vZHVsZSwgTmF0aXZlU2ltZE9wcyB9IGZyb20gJy4vbmF0aXZlJztcblxuLyoqXG4gKiBTSU1EIE9wZXJhdGlvbnMgY2xhc3NcbiAqXG4gKiBQcm92aWRlcyBoYXJkd2FyZS1hY2NlbGVyYXRlZCB2ZWN0b3Igb3BlcmF0aW9ucyB3aGVuIG5hdGl2ZSBtb2R1bGUgaXMgYXZhaWxhYmxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBTaW1kT3BzIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XG4gKlxuICogY29uc3Qgc2ltZCA9IG5ldyBTaW1kT3BzKCk7XG4gKlxuICogLy8gQ29tcHV0ZSBkb3QgcHJvZHVjdFxuICogY29uc3QgcmVzdWx0ID0gc2ltZC5kb3RQcm9kdWN0KFsxLCAyLCAzXSwgWzQsIDUsIDZdKTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdCk7IC8vIDMyXG4gKlxuICogLy8gQ2hlY2sgY2FwYWJpbGl0aWVzXG4gKiBjb25zb2xlLmxvZyhzaW1kLmNhcGFiaWxpdGllcygpKTsgLy8gWydBVlgyJywgJ0ZNQSddXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFNpbWRPcHMge1xuICBwcml2YXRlIG5hdGl2ZTogTmF0aXZlU2ltZE9wcyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG1vZCA9IGdldE5hdGl2ZU1vZHVsZSgpO1xuICAgIGlmIChtb2QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gbmV3IG1vZC5TaW1kT3BlcmF0aW9ucygpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byBKUyBpbXBsZW1lbnRhdGlvblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGRvdCBwcm9kdWN0IG9mIHR3byB2ZWN0b3JzXG4gICAqL1xuICBkb3RQcm9kdWN0KGE6IG51bWJlcltdLCBiOiBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMubmF0aXZlKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZG90UHJvZHVjdChhLCBiKTtcbiAgICB9XG5cbiAgICAvLyBKYXZhU2NyaXB0IGZhbGxiYWNrXG4gICAgbGV0IHN1bSA9IDA7XG4gICAgY29uc3QgbGVuID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBzdW0gKz0gYVtpXSAqIGJbaV07XG4gICAgfVxuICAgIHJldHVybiBzdW07XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBjb3NpbmUgc2ltaWxhcml0eSBiZXR3ZWVuIHR3byB2ZWN0b3JzXG4gICAqL1xuICBjb3NpbmVTaW1pbGFyaXR5KGE6IG51bWJlcltdLCBiOiBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMubmF0aXZlKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXRpdmUuY29zaW5lU2ltaWxhcml0eShhLCBiKTtcbiAgICB9XG5cbiAgICAvLyBKYXZhU2NyaXB0IGZhbGxiYWNrXG4gICAgbGV0IGRvdCA9IDA7XG4gICAgbGV0IG5vcm1BID0gMDtcbiAgICBsZXQgbm9ybUIgPSAwO1xuXG4gICAgY29uc3QgbGVuID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBkb3QgKz0gYVtpXSAqIGJbaV07XG4gICAgICBub3JtQSArPSBhW2ldICogYVtpXTtcbiAgICAgIG5vcm1CICs9IGJbaV0gKiBiW2ldO1xuICAgIH1cblxuICAgIGNvbnN0IGRlbm9tID0gTWF0aC5zcXJ0KG5vcm1BKSAqIE1hdGguc3FydChub3JtQik7XG4gICAgcmV0dXJuIGRlbm9tID4gMCA/IGRvdCAvIGRlbm9tIDogMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIEwyIChFdWNsaWRlYW4pIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlY3RvcnNcbiAgICovXG4gIGwyRGlzdGFuY2UoYTogbnVtYmVyW10sIGI6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5uYXRpdmUpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5sMkRpc3RhbmNlKGEsIGIpO1xuICAgIH1cblxuICAgIC8vIEphdmFTY3JpcHQgZmFsbGJhY2tcbiAgICBsZXQgc3VtID0gMDtcbiAgICBjb25zdCBsZW4gPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGRpZmYgPSBhW2ldIC0gYltpXTtcbiAgICAgIHN1bSArPSBkaWZmICogZGlmZjtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguc3FydChzdW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hdHJpeC12ZWN0b3IgbXVsdGlwbGljYXRpb25cbiAgICovXG4gIG1hdHZlYyhtYXRyaXg6IG51bWJlcltdW10sIHZlY3RvcjogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgaWYgKHRoaXMubmF0aXZlKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXRpdmUubWF0dmVjKG1hdHJpeCwgdmVjdG9yKTtcbiAgICB9XG5cbiAgICAvLyBKYXZhU2NyaXB0IGZhbGxiYWNrXG4gICAgcmV0dXJuIG1hdHJpeC5tYXAocm93ID0+IHRoaXMuZG90UHJvZHVjdChyb3csIHZlY3RvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvZnRtYXggYWN0aXZhdGlvbiBmdW5jdGlvblxuICAgKi9cbiAgc29mdG1heChpbnB1dDogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgaWYgKHRoaXMubmF0aXZlKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXRpdmUuc29mdG1heChpbnB1dCk7XG4gICAgfVxuXG4gICAgLy8gSmF2YVNjcmlwdCBmYWxsYmFja1xuICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmlucHV0KTtcbiAgICBjb25zdCBleHBzID0gaW5wdXQubWFwKHggPT4gTWF0aC5leHAoeCAtIG1heCkpO1xuICAgIGNvbnN0IHN1bSA9IGV4cHMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gICAgcmV0dXJuIGV4cHMubWFwKHggPT4geCAvIHN1bSk7XG4gIH1cblxuICAvKipcbiAgICogRWxlbWVudC13aXNlIGFkZGl0aW9uXG4gICAqL1xuICBhZGQoYTogbnVtYmVyW10sIGI6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGxlbiA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gYVtpXSArIGJbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRWxlbWVudC13aXNlIG11bHRpcGxpY2F0aW9uXG4gICAqL1xuICBtdWwoYTogbnVtYmVyW10sIGI6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGxlbiA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gYVtpXSAqIGJbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2NhbGUgdmVjdG9yIGJ5IHNjYWxhclxuICAgKi9cbiAgc2NhbGUoYTogbnVtYmVyW10sIHNjYWxhcjogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIHJldHVybiBhLm1hcCh4ID0+IHggKiBzY2FsYXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSB2ZWN0b3IgdG8gdW5pdCBsZW5ndGhcbiAgICovXG4gIG5vcm1hbGl6ZShhOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCBub3JtID0gTWF0aC5zcXJ0KGEucmVkdWNlKChzdW0sIHgpID0+IHN1bSArIHggKiB4LCAwKSk7XG4gICAgcmV0dXJuIG5vcm0gPiAwID8gYS5tYXAoeCA9PiB4IC8gbm9ybSkgOiBhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlTFUgYWN0aXZhdGlvblxuICAgKi9cbiAgcmVsdShpbnB1dDogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIGlucHV0Lm1hcCh4ID0+IE1hdGgubWF4KDAsIHgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHRUxVIGFjdGl2YXRpb24gKGFwcHJveGltYXRlKVxuICAgKi9cbiAgZ2VsdShpbnB1dDogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIGlucHV0Lm1hcCh4ID0+IHtcbiAgICAgIHJldHVybiAwLjUgKiB4ICogKDEgKyBNYXRoLnRhbmgoTWF0aC5zcXJ0KDIgLyBNYXRoLlBJKSAqICh4ICsgMC4wNDQ3MTUgKiB4ICogeCAqIHgpKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbW9pZCBhY3RpdmF0aW9uXG4gICAqL1xuICBzaWdtb2lkKGlucHV0OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gaW5wdXQubWFwKHggPT4gMSAvICgxICsgTWF0aC5leHAoLXgpKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5ZXIgbm9ybWFsaXphdGlvblxuICAgKi9cbiAgbGF5ZXJOb3JtKGlucHV0OiBudW1iZXJbXSwgZXBzID0gMWUtNSk6IG51bWJlcltdIHtcbiAgICBjb25zdCBtZWFuID0gaW5wdXQucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgLyBpbnB1dC5sZW5ndGg7XG4gICAgY29uc3QgdmFyaWFuY2UgPSBpbnB1dC5yZWR1Y2UoKHN1bSwgeCkgPT4gc3VtICsgKHggLSBtZWFuKSAqKiAyLCAwKSAvIGlucHV0Lmxlbmd0aDtcbiAgICBjb25zdCBzdGQgPSBNYXRoLnNxcnQodmFyaWFuY2UgKyBlcHMpO1xuICAgIHJldHVybiBpbnB1dC5tYXAoeCA9PiAoeCAtIG1lYW4pIC8gc3RkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBuYXRpdmUgU0lNRCBpcyBhdmFpbGFibGVcbiAgICovXG4gIGlzTmF0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm5hdGl2ZSAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYXZhaWxhYmxlIFNJTUQgY2FwYWJpbGl0aWVzXG4gICAqL1xuICBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5uYXRpdmUpIHtcbiAgICAgIHJldHVybiBbJ0phdmFTY3JpcHQgKHNjYWxhciknXTtcbiAgICB9XG5cbiAgICAvLyBUaGUgbmF0aXZlIG1vZHVsZSB3aWxsIHJlcG9ydCBhY3R1YWwgY2FwYWJpbGl0aWVzXG4gICAgY29uc3QgbW9kID0gZ2V0TmF0aXZlTW9kdWxlKCk7XG4gICAgaWYgKG1vZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZW5naW5lID0gbmV3IG1vZC5SdXZMTE1FbmdpbmUoKTtcbiAgICAgICAgcmV0dXJuIGVuZ2luZS5zaW1kQ2FwYWJpbGl0aWVzKCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFsnTmF0aXZlICh1bmtub3duKSddO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbJ0phdmFTY3JpcHQgKHNjYWxhciknXTtcbiAgfVxufVxuIl19
@@ -0,0 +1,223 @@
1
+ /**
2
+ * SONA (Self-Optimizing Neural Architecture) Learning System
3
+ *
4
+ * Provides adaptive learning capabilities with trajectory tracking,
5
+ * pattern recognition, and memory protection (EWC++).
6
+ */
7
+ import { SonaConfig, LearningSignal, QueryTrajectory, TrajectoryStep, TrajectoryOutcome, LearnedPattern, PatternType, EwcStats, Embedding } from './types.js';
8
+ /**
9
+ * Default SONA configuration
10
+ */
11
+ declare const DEFAULT_SONA_CONFIG: Required<SonaConfig>;
12
+ /**
13
+ * Trajectory Builder for tracking query execution paths
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const builder = new TrajectoryBuilder();
18
+ *
19
+ * builder.startStep('query', 'What is AI?');
20
+ * // ... processing ...
21
+ * builder.endStep('AI is artificial intelligence', 0.95);
22
+ *
23
+ * builder.startStep('memory', 'searching context');
24
+ * builder.endStep('found 3 relevant documents', 0.88);
25
+ *
26
+ * const trajectory = builder.complete('success');
27
+ * ```
28
+ */
29
+ export declare class TrajectoryBuilder {
30
+ private id;
31
+ private steps;
32
+ private currentStep;
33
+ private stepStart;
34
+ private startTime;
35
+ constructor();
36
+ /**
37
+ * Start a new step in the trajectory
38
+ */
39
+ startStep(type: TrajectoryStep['type'], input: string): this;
40
+ /**
41
+ * End current step with output
42
+ */
43
+ endStep(output: string, confidence: number): this;
44
+ /**
45
+ * Complete trajectory with final outcome
46
+ */
47
+ complete(outcome: TrajectoryOutcome): QueryTrajectory;
48
+ /**
49
+ * Get current trajectory ID
50
+ */
51
+ getId(): string;
52
+ }
53
+ /**
54
+ * ReasoningBank - Pattern storage and retrieval
55
+ *
56
+ * Stores learned patterns from successful interactions and
57
+ * enables pattern-based reasoning shortcuts.
58
+ *
59
+ * OPTIMIZED: Uses Float64Array for embeddings and partial sorting
60
+ */
61
+ export declare class ReasoningBank {
62
+ private patterns;
63
+ private embeddings;
64
+ private embeddingNorms;
65
+ private threshold;
66
+ private _similarityResults;
67
+ constructor(threshold?: number);
68
+ /**
69
+ * Store a new pattern
70
+ */
71
+ store(type: PatternType, embedding: Embedding, metadata?: Record<string, unknown>): string;
72
+ /**
73
+ * Find similar patterns
74
+ * OPTIMIZED: Uses typed arrays, pre-computed norms, and partial sorting
75
+ */
76
+ findSimilar(embedding: Embedding, k?: number): LearnedPattern[];
77
+ /**
78
+ * Partial sort to get top k elements (faster than full sort)
79
+ */
80
+ private partialSort;
81
+ /**
82
+ * Record pattern usage (success or failure)
83
+ */
84
+ recordUsage(patternId: string, success: boolean): void;
85
+ /**
86
+ * Get pattern by ID
87
+ */
88
+ get(patternId: string): LearnedPattern | undefined;
89
+ /**
90
+ * Get all patterns of a type
91
+ */
92
+ getByType(type: PatternType): LearnedPattern[];
93
+ /**
94
+ * Prune low-performing patterns
95
+ */
96
+ prune(minSuccessRate?: number, minUseCount?: number): number;
97
+ /**
98
+ * Get statistics
99
+ */
100
+ stats(): {
101
+ totalPatterns: number;
102
+ avgSuccessRate: number;
103
+ byType: Record<string, number>;
104
+ };
105
+ private cosineSimilarity;
106
+ }
107
+ /**
108
+ * EWC++ (Elastic Weight Consolidation) Manager
109
+ *
110
+ * Prevents catastrophic forgetting by protecting important weights.
111
+ * This is a simplified JS implementation of the concept.
112
+ *
113
+ * OPTIMIZED: Uses Float64Array for 5-10x faster penalty computation
114
+ */
115
+ export declare class EwcManager {
116
+ private lambda;
117
+ private tasksLearned;
118
+ private fisherDiagonal;
119
+ private optimalWeights;
120
+ private _penaltyBuffer;
121
+ constructor(lambda?: number);
122
+ /**
123
+ * Register a new task (after successful learning)
124
+ */
125
+ registerTask(taskId: string, weights: number[]): void;
126
+ /**
127
+ * Compute EWC penalty for weight update
128
+ * OPTIMIZED: Uses typed arrays and minimizes allocations
129
+ */
130
+ computePenalty(currentWeights: number[]): number;
131
+ /**
132
+ * Get EWC statistics
133
+ */
134
+ stats(): EwcStats;
135
+ private estimateForgettingRate;
136
+ }
137
+ /**
138
+ * SONA Learning Coordinator
139
+ *
140
+ * Orchestrates the learning loops and components.
141
+ */
142
+ export declare class SonaCoordinator {
143
+ private config;
144
+ private trajectoryBuffer;
145
+ private reasoningBank;
146
+ private ewcManager;
147
+ private signalBuffer;
148
+ private microLora;
149
+ private microLoraUpdates;
150
+ constructor(config?: SonaConfig);
151
+ /**
152
+ * Record a learning signal
153
+ *
154
+ * Every signal drives the instant loop: quality above 0.5 reinforces the
155
+ * signal's direction in the micro-LoRA, quality below 0.5 unlearns it
156
+ * (previously only quality >= 0.8 was processed, so negative feedback
157
+ * never adapted anything).
158
+ */
159
+ recordSignal(signal: LearningSignal): void;
160
+ /**
161
+ * Record a completed trajectory
162
+ */
163
+ recordTrajectory(trajectory: QueryTrajectory): void;
164
+ /**
165
+ * Run background learning loop
166
+ */
167
+ runBackgroundLoop(): {
168
+ patternsLearned: number;
169
+ trajectoriesProcessed: number;
170
+ };
171
+ /**
172
+ * Get reasoning bank for pattern queries
173
+ */
174
+ getReasoningBank(): ReasoningBank;
175
+ /**
176
+ * Get EWC manager
177
+ */
178
+ getEwcManager(): EwcManager;
179
+ /**
180
+ * Get statistics
181
+ */
182
+ stats(): {
183
+ signalsReceived: number;
184
+ trajectoriesBuffered: number;
185
+ patterns: ReturnType<ReasoningBank['stats']>;
186
+ ewc: EwcStats;
187
+ microLora: {
188
+ updates: number;
189
+ deltaNorm: number;
190
+ };
191
+ };
192
+ /**
193
+ * Apply the micro-LoRA transformation learned from feedback.
194
+ *
195
+ * Input is truncated/zero-padded to the adapter dimension; the residual
196
+ * connection means an untrained adapter returns the input unchanged.
197
+ */
198
+ applyMicroLora(input: number[]): number[];
199
+ /**
200
+ * Frobenius norm of the micro-LoRA weight delta (scaling * A @ B).
201
+ *
202
+ * 0 means no adaptation has occurred (LoRA B is zero-initialized, so the
203
+ * delta is exactly zero until the first feedback update). Consumers can
204
+ * surface this directly (e.g. a statusline "delta LoRA" field) — see #553.
205
+ */
206
+ microLoraDeltaNorm(): number;
207
+ /**
208
+ * Instant-loop learning: a single feedback signal produces a real
209
+ * micro-LoRA weight update (fixes #553 — this was a no-op stub, so
210
+ * learn-from-feedback never changed any weight).
211
+ *
212
+ * REINFORCE-style with a fixed 0.5 baseline: reward = quality - 0.5.
213
+ * The gradient pushes the adapter output toward the signal's embedding
214
+ * direction for positive reward and away from it for negative reward
215
+ * (backward() applies `weights -= lr * grad`, hence the negated sign).
216
+ */
217
+ private processInstantLearning;
218
+ private extractPatterns;
219
+ private stepTypeToPatternType;
220
+ private createEmbedding;
221
+ }
222
+ export { DEFAULT_SONA_CONFIG, };
223
+ //# sourceMappingURL=sona.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sona.d.ts","sourceRoot":"","sources":["../../src/sona.ts"],"names":[],"mappings":"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"}