@seanhogg/builderforce-memory-engine 2026.10.1 → 2026.10.3

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 (149) hide show
  1. package/dist/evermind/adapt.d.ts +7 -0
  2. package/dist/evermind/adapt.d.ts.map +1 -1
  3. package/dist/evermind/adapt.js +1 -1
  4. package/dist/evermind/adapt.js.map +1 -1
  5. package/dist/evermind/delta_wire.d.ts +16 -1
  6. package/dist/evermind/delta_wire.d.ts.map +1 -1
  7. package/dist/evermind/delta_wire.js +22 -2
  8. package/dist/evermind/delta_wire.js.map +1 -1
  9. package/dist/evermind/index.d.ts +2 -2
  10. package/dist/evermind/index.d.ts.map +1 -1
  11. package/dist/evermind/index.js +1 -1
  12. package/dist/evermind/index.js.map +1 -1
  13. package/dist/evermind/merge.d.ts +5 -2
  14. package/dist/evermind/merge.d.ts.map +1 -1
  15. package/dist/evermind/merge.js +5 -2
  16. package/dist/evermind/merge.js.map +1 -1
  17. package/dist/evermind/ml_head.d.ts +28 -0
  18. package/dist/evermind/ml_head.d.ts.map +1 -0
  19. package/dist/evermind/ml_head.js +47 -0
  20. package/dist/evermind/ml_head.js.map +1 -0
  21. package/dist/evermind/package.d.ts +2 -2
  22. package/dist/evermind/package.d.ts.map +1 -1
  23. package/dist/evermind/package.js +1 -1
  24. package/dist/evermind/package.js.map +1 -1
  25. package/dist/experience/index.d.ts +2 -2
  26. package/dist/experience/index.d.ts.map +1 -1
  27. package/dist/experience/index.js.map +1 -1
  28. package/dist/experience/store.d.ts +19 -1
  29. package/dist/experience/store.d.ts.map +1 -1
  30. package/dist/experience/store.js +14 -2
  31. package/dist/experience/store.js.map +1 -1
  32. package/dist/experience/types.d.ts +18 -0
  33. package/dist/experience/types.d.ts.map +1 -1
  34. package/dist/experience/types.js.map +1 -1
  35. package/dist/index.d.ts +2 -2
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +1 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/kernels/weight_update.d.ts.map +1 -1
  40. package/dist/kernels/weight_update.js +12 -0
  41. package/dist/kernels/weight_update.js.map +1 -1
  42. package/dist/limbic/limbic_model.d.ts.map +1 -1
  43. package/dist/limbic/limbic_model.js +1 -3
  44. package/dist/limbic/limbic_model.js.map +1 -1
  45. package/dist/ml/classical/anomaly_composite.d.ts +32 -0
  46. package/dist/ml/classical/anomaly_composite.d.ts.map +1 -0
  47. package/dist/ml/classical/anomaly_composite.js +29 -0
  48. package/dist/ml/classical/anomaly_composite.js.map +1 -0
  49. package/dist/ml/classical/ewma.d.ts +7 -1
  50. package/dist/ml/classical/ewma.d.ts.map +1 -1
  51. package/dist/ml/classical/ewma.js +6 -4
  52. package/dist/ml/classical/ewma.js.map +1 -1
  53. package/dist/ml/classical/gbm.d.ts.map +1 -1
  54. package/dist/ml/classical/gbm.js +2 -1
  55. package/dist/ml/classical/gbm.js.map +1 -1
  56. package/dist/ml/classical/index.d.ts +6 -2
  57. package/dist/ml/classical/index.d.ts.map +1 -1
  58. package/dist/ml/classical/index.js +5 -1
  59. package/dist/ml/classical/index.js.map +1 -1
  60. package/dist/ml/classical/kmeans.d.ts.map +1 -1
  61. package/dist/ml/classical/kmeans.js +23 -4
  62. package/dist/ml/classical/kmeans.js.map +1 -1
  63. package/dist/ml/classical/knn.d.ts +15 -5
  64. package/dist/ml/classical/knn.d.ts.map +1 -1
  65. package/dist/ml/classical/knn.js +28 -7
  66. package/dist/ml/classical/knn.js.map +1 -1
  67. package/dist/ml/classical/logistic.d.ts +1 -9
  68. package/dist/ml/classical/logistic.d.ts.map +1 -1
  69. package/dist/ml/classical/logistic.js +17 -9
  70. package/dist/ml/classical/logistic.js.map +1 -1
  71. package/dist/ml/classical/naive_bayes.d.ts +5 -1
  72. package/dist/ml/classical/naive_bayes.d.ts.map +1 -1
  73. package/dist/ml/classical/naive_bayes.js +8 -3
  74. package/dist/ml/classical/naive_bayes.js.map +1 -1
  75. package/dist/ml/classical/robust_z.d.ts +15 -1
  76. package/dist/ml/classical/robust_z.d.ts.map +1 -1
  77. package/dist/ml/classical/robust_z.js +6 -1
  78. package/dist/ml/classical/robust_z.js.map +1 -1
  79. package/dist/ml/eval_loss.d.ts +15 -0
  80. package/dist/ml/eval_loss.d.ts.map +1 -0
  81. package/dist/ml/eval_loss.js +20 -0
  82. package/dist/ml/eval_loss.js.map +1 -0
  83. package/dist/ml/federate.d.ts +11 -25
  84. package/dist/ml/federate.d.ts.map +1 -1
  85. package/dist/ml/federate.js +15 -38
  86. package/dist/ml/federate.js.map +1 -1
  87. package/dist/ml/head_trainer.d.ts +16 -2
  88. package/dist/ml/head_trainer.d.ts.map +1 -1
  89. package/dist/ml/head_trainer.js +64 -27
  90. package/dist/ml/head_trainer.js.map +1 -1
  91. package/dist/ml/run.d.ts +11 -2
  92. package/dist/ml/run.d.ts.map +1 -1
  93. package/dist/ml/run.js +56 -17
  94. package/dist/ml/run.js.map +1 -1
  95. package/dist/ml/tasks/experience.d.ts +95 -13
  96. package/dist/ml/tasks/experience.d.ts.map +1 -1
  97. package/dist/ml/tasks/experience.js +172 -20
  98. package/dist/ml/tasks/experience.js.map +1 -1
  99. package/dist/ml/tasks/run_anomaly.d.ts +37 -19
  100. package/dist/ml/tasks/run_anomaly.d.ts.map +1 -1
  101. package/dist/ml/tasks/run_anomaly.js +50 -31
  102. package/dist/ml/tasks/run_anomaly.js.map +1 -1
  103. package/dist/ml/train.d.ts +8 -7
  104. package/dist/ml/train.d.ts.map +1 -1
  105. package/dist/ml/train.js +21 -30
  106. package/dist/ml/train.js.map +1 -1
  107. package/dist/ml/types.d.ts +6 -3
  108. package/dist/ml/types.d.ts.map +1 -1
  109. package/dist/ml/types.js +3 -2
  110. package/dist/ml/types.js.map +1 -1
  111. package/dist/optim/adamw.d.ts +11 -5
  112. package/dist/optim/adamw.d.ts.map +1 -1
  113. package/dist/optim/adamw.js +19 -4
  114. package/dist/optim/adamw.js.map +1 -1
  115. package/package.json +1 -1
  116. package/src/evermind/adapt.ts +8 -2
  117. package/src/evermind/delta_wire.ts +173 -148
  118. package/src/evermind/index.ts +36 -35
  119. package/src/evermind/merge.ts +10 -4
  120. package/src/evermind/ml_head.ts +63 -0
  121. package/src/evermind/package.ts +488 -488
  122. package/src/experience/index.ts +2 -1
  123. package/src/experience/store.ts +35 -3
  124. package/src/experience/types.ts +19 -0
  125. package/src/index.ts +2 -0
  126. package/src/kernels/weight_update.ts +12 -0
  127. package/src/limbic/limbic_model.ts +1 -4
  128. package/src/limbic/limbic_trainer.ts +91 -91
  129. package/src/ml/classical/anomaly_composite.ts +46 -0
  130. package/src/ml/classical/ewma.ts +8 -2
  131. package/src/ml/classical/gbm.ts +144 -143
  132. package/src/ml/classical/index.ts +8 -2
  133. package/src/ml/classical/kmeans.ts +22 -4
  134. package/src/ml/classical/knn.ts +31 -8
  135. package/src/ml/classical/logistic.ts +9 -9
  136. package/src/ml/classical/math.ts +93 -93
  137. package/src/ml/classical/naive_bayes.ts +10 -3
  138. package/src/ml/classical/robust_z.ts +21 -2
  139. package/src/ml/eval_loss.ts +27 -0
  140. package/src/ml/federate.ts +22 -52
  141. package/src/ml/head_trainer.ts +66 -48
  142. package/src/ml/registry.ts +44 -44
  143. package/src/ml/run.ts +57 -13
  144. package/src/ml/tasks/experience.ts +222 -23
  145. package/src/ml/tasks/run_anomaly.ts +62 -37
  146. package/src/ml/train.ts +34 -31
  147. package/src/ml/types.ts +135 -132
  148. package/src/optim/adamw.ts +21 -5
  149. package/src/training/cpu_ops.ts +141 -141
@@ -1,141 +1,141 @@
1
- /**
2
- * cpu_ops.ts — the small set of exact CPU primitives the reference forward and
3
- * backward passes share (linear, RMSNorm, SiLU, softplus).
4
- *
5
- * Each one mirrors a WGSL kernel exactly, so a gradient computed here is the
6
- * gradient of the function the GPU actually evaluates. They are deliberately
7
- * plain loops over `Float32Array`: correctness first, and small enough that the
8
- * finite-difference check in `tests/backprop.test.ts` is meaningful.
9
- */
10
-
11
- /** Epsilon used by `rmsnorm_forward` in `ACTIVATIONS_WGSL`. */
12
- export const RMSNORM_EPS = 1e-6;
13
-
14
- export function sigmoid(x: number): number {
15
- return 1 / (1 + Math.exp(-x));
16
- }
17
-
18
- /** Numerically-stable softmax over a flat array. */
19
- export function softmax(logits: ArrayLike<number>): Float32Array {
20
- let max = -Infinity;
21
- for (let i = 0; i < logits.length; i++) if (logits[i]! > max) max = logits[i]!;
22
- const out = new Float32Array(logits.length);
23
- let sum = 0;
24
- for (let i = 0; i < logits.length; i++) {
25
- out[i] = Math.exp(logits[i]! - max);
26
- sum += out[i]!;
27
- }
28
- for (let i = 0; i < logits.length; i++) out[i] = out[i]! / sum;
29
- return out;
30
- }
31
-
32
- /** SiLU(x) = x * sigmoid(x) — mirrors `silu_forward`. */
33
- export function silu(x: number): number {
34
- return x / (1 + Math.exp(-x));
35
- }
36
-
37
- /** d/dx SiLU(x) = sigmoid(x) * (1 + x * (1 - sigmoid(x))). */
38
- export function siluGrad(x: number): number {
39
- const s = sigmoid(x);
40
- return s * (1 + x * (1 - s));
41
- }
42
-
43
- /** Numerically stable softplus — mirrors the kernel's `max(x,0) + log1p(exp(-|x|))`. */
44
- export function softplus(x: number): number {
45
- return Math.max(x, 0) + Math.log1p(Math.exp(-Math.abs(x)));
46
- }
47
-
48
- /**
49
- * Y = X @ W^T + b, mirroring `linear_forward`.
50
- *
51
- * @param X (M, K)
52
- * @param W (N, K) row-major
53
- * @param b (N,)
54
- * @param out (M, N) — written, not accumulated
55
- */
56
- export function linearForward(
57
- X: Float32Array, W: Float32Array, b: Float32Array,
58
- M: number, K: number, N: number, out: Float32Array,
59
- ): void {
60
- for (let r = 0; r < M; r++) {
61
- const xo = r * K;
62
- const yo = r * N;
63
- for (let n = 0; n < N; n++) {
64
- let acc = b[n]!;
65
- const wo = n * K;
66
- for (let k = 0; k < K; k++) acc += X[xo + k]! * W[wo + k]!;
67
- out[yo + n] = acc;
68
- }
69
- }
70
- }
71
-
72
- /**
73
- * Backward of {@link linearForward}. `dX` is written; `dW` and `db` are
74
- * ACCUMULATED into (so one parameter can collect gradient from several call
75
- * sites without a temporary).
76
- */
77
- export function linearBackward(
78
- dY: Float32Array, X: Float32Array, W: Float32Array,
79
- M: number, K: number, N: number,
80
- dX: Float32Array, dW: Float32Array, db: Float32Array,
81
- ): void {
82
- dX.fill(0);
83
- for (let r = 0; r < M; r++) {
84
- const xo = r * K;
85
- const yo = r * N;
86
- for (let n = 0; n < N; n++) {
87
- const g = dY[yo + n]!;
88
- if (g === 0) continue;
89
- db[n] = db[n]! + g;
90
- const wo = n * K;
91
- for (let k = 0; k < K; k++) {
92
- dX[xo + k] = dX[xo + k]! + g * W[wo + k]!;
93
- dW[wo + k] = dW[wo + k]! + g * X[xo + k]!;
94
- }
95
- }
96
- }
97
- }
98
-
99
- /**
100
- * RMSNorm forward — mirrors `rmsnorm_forward`:
101
- * inv[r] = 1 / sqrt(mean(x[r]²) + eps); y[r,i] = x[r,i] * inv[r] * w[i]
102
- */
103
- export function rmsNormForward(
104
- x: Float32Array, w: Float32Array, M: number, D: number,
105
- out: Float32Array, inv: Float32Array, eps: number = RMSNORM_EPS,
106
- ): void {
107
- for (let r = 0; r < M; r++) {
108
- const base = r * D;
109
- let sq = 0;
110
- for (let i = 0; i < D; i++) { const v = x[base + i]!; sq += v * v; }
111
- const iv = 1 / Math.sqrt(sq / D + eps);
112
- inv[r] = iv;
113
- for (let i = 0; i < D; i++) out[base + i] = x[base + i]! * iv * w[i]!;
114
- }
115
- }
116
-
117
- /**
118
- * RMSNorm backward. `dx` and `dw` are ACCUMULATED into — `dx` in particular is
119
- * usually the residual path, which already carries a gradient.
120
- */
121
- export function rmsNormBackward(
122
- dY: Float32Array, x: Float32Array, w: Float32Array, inv: Float32Array,
123
- M: number, D: number,
124
- dx: Float32Array, dw: Float32Array, _eps: number = RMSNORM_EPS,
125
- ): void {
126
- for (let r = 0; r < M; r++) {
127
- const base = r * D;
128
- const iv = inv[r]!;
129
- let dot = 0; // Σ_i (dY[r,i] * w[i]) * x[r,i]
130
- for (let i = 0; i < D; i++) {
131
- const g = dY[base + i]! * w[i]!;
132
- dot += g * x[base + i]!;
133
- dw[i] = dw[i]! + dY[base + i]! * x[base + i]! * iv;
134
- }
135
- const scale = (iv * iv * iv) / D;
136
- for (let i = 0; i < D; i++) {
137
- const g = dY[base + i]! * w[i]!;
138
- dx[base + i] = dx[base + i]! + g * iv - scale * dot * x[base + i]!;
139
- }
140
- }
141
- }
1
+ /**
2
+ * cpu_ops.ts — the small set of exact CPU primitives the reference forward and
3
+ * backward passes share (linear, RMSNorm, SiLU, softplus).
4
+ *
5
+ * Each one mirrors a WGSL kernel exactly, so a gradient computed here is the
6
+ * gradient of the function the GPU actually evaluates. They are deliberately
7
+ * plain loops over `Float32Array`: correctness first, and small enough that the
8
+ * finite-difference check in `tests/backprop.test.ts` is meaningful.
9
+ */
10
+
11
+ /** Epsilon used by `rmsnorm_forward` in `ACTIVATIONS_WGSL`. */
12
+ export const RMSNORM_EPS = 1e-6;
13
+
14
+ export function sigmoid(x: number): number {
15
+ return 1 / (1 + Math.exp(-x));
16
+ }
17
+
18
+ /** Numerically-stable softmax over a flat array. */
19
+ export function softmax(logits: ArrayLike<number>): Float32Array {
20
+ let max = -Infinity;
21
+ for (let i = 0; i < logits.length; i++) if (logits[i]! > max) max = logits[i]!;
22
+ const out = new Float32Array(logits.length);
23
+ let sum = 0;
24
+ for (let i = 0; i < logits.length; i++) {
25
+ out[i] = Math.exp(logits[i]! - max);
26
+ sum += out[i]!;
27
+ }
28
+ for (let i = 0; i < logits.length; i++) out[i] = out[i]! / sum;
29
+ return out;
30
+ }
31
+
32
+ /** SiLU(x) = x * sigmoid(x) — mirrors `silu_forward`. */
33
+ export function silu(x: number): number {
34
+ return x / (1 + Math.exp(-x));
35
+ }
36
+
37
+ /** d/dx SiLU(x) = sigmoid(x) * (1 + x * (1 - sigmoid(x))). */
38
+ export function siluGrad(x: number): number {
39
+ const s = sigmoid(x);
40
+ return s * (1 + x * (1 - s));
41
+ }
42
+
43
+ /** Numerically stable softplus — mirrors the kernel's `max(x,0) + log1p(exp(-|x|))`. */
44
+ export function softplus(x: number): number {
45
+ return Math.max(x, 0) + Math.log1p(Math.exp(-Math.abs(x)));
46
+ }
47
+
48
+ /**
49
+ * Y = X @ W^T + b, mirroring `linear_forward`.
50
+ *
51
+ * @param X (M, K)
52
+ * @param W (N, K) row-major
53
+ * @param b (N,)
54
+ * @param out (M, N) — written, not accumulated
55
+ */
56
+ export function linearForward(
57
+ X: Float32Array, W: Float32Array, b: Float32Array,
58
+ M: number, K: number, N: number, out: Float32Array,
59
+ ): void {
60
+ for (let r = 0; r < M; r++) {
61
+ const xo = r * K;
62
+ const yo = r * N;
63
+ for (let n = 0; n < N; n++) {
64
+ let acc = b[n]!;
65
+ const wo = n * K;
66
+ for (let k = 0; k < K; k++) acc += X[xo + k]! * W[wo + k]!;
67
+ out[yo + n] = acc;
68
+ }
69
+ }
70
+ }
71
+
72
+ /**
73
+ * Backward of {@link linearForward}. `dX` is written; `dW` and `db` are
74
+ * ACCUMULATED into (so one parameter can collect gradient from several call
75
+ * sites without a temporary).
76
+ */
77
+ export function linearBackward(
78
+ dY: Float32Array, X: Float32Array, W: Float32Array,
79
+ M: number, K: number, N: number,
80
+ dX: Float32Array, dW: Float32Array, db: Float32Array,
81
+ ): void {
82
+ dX.fill(0);
83
+ for (let r = 0; r < M; r++) {
84
+ const xo = r * K;
85
+ const yo = r * N;
86
+ for (let n = 0; n < N; n++) {
87
+ const g = dY[yo + n]!;
88
+ if (g === 0) continue;
89
+ db[n] = db[n]! + g;
90
+ const wo = n * K;
91
+ for (let k = 0; k < K; k++) {
92
+ dX[xo + k] = dX[xo + k]! + g * W[wo + k]!;
93
+ dW[wo + k] = dW[wo + k]! + g * X[xo + k]!;
94
+ }
95
+ }
96
+ }
97
+ }
98
+
99
+ /**
100
+ * RMSNorm forward — mirrors `rmsnorm_forward`:
101
+ * inv[r] = 1 / sqrt(mean(x[r]²) + eps); y[r,i] = x[r,i] * inv[r] * w[i]
102
+ */
103
+ export function rmsNormForward(
104
+ x: Float32Array, w: Float32Array, M: number, D: number,
105
+ out: Float32Array, inv: Float32Array, eps: number = RMSNORM_EPS,
106
+ ): void {
107
+ for (let r = 0; r < M; r++) {
108
+ const base = r * D;
109
+ let sq = 0;
110
+ for (let i = 0; i < D; i++) { const v = x[base + i]!; sq += v * v; }
111
+ const iv = 1 / Math.sqrt(sq / D + eps);
112
+ inv[r] = iv;
113
+ for (let i = 0; i < D; i++) out[base + i] = x[base + i]! * iv * w[i]!;
114
+ }
115
+ }
116
+
117
+ /**
118
+ * RMSNorm backward. `dx` and `dw` are ACCUMULATED into — `dx` in particular is
119
+ * usually the residual path, which already carries a gradient.
120
+ */
121
+ export function rmsNormBackward(
122
+ dY: Float32Array, x: Float32Array, w: Float32Array, inv: Float32Array,
123
+ M: number, D: number,
124
+ dx: Float32Array, dw: Float32Array, _eps: number = RMSNORM_EPS,
125
+ ): void {
126
+ for (let r = 0; r < M; r++) {
127
+ const base = r * D;
128
+ const iv = inv[r]!;
129
+ let dot = 0; // Σ_i (dY[r,i] * w[i]) * x[r,i]
130
+ for (let i = 0; i < D; i++) {
131
+ const g = dY[base + i]! * w[i]!;
132
+ dot += g * x[base + i]!;
133
+ dw[i] = dw[i]! + dY[base + i]! * x[base + i]! * iv;
134
+ }
135
+ const scale = (iv * iv * iv) / D;
136
+ for (let i = 0; i < D; i++) {
137
+ const g = dY[base + i]! * w[i]!;
138
+ dx[base + i] = dx[base + i]! + g * iv - scale * dot * x[base + i]!;
139
+ }
140
+ }
141
+ }