@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,51 +1,70 @@
1
+ import { AnomalyCompositeModel } from "../classical/anomaly_composite.js";
1
2
  import { fitEwma } from "../classical/ewma.js";
2
- import { anomalyConfidence, fitRobustZ } from "../classical/robust_z.js";
3
+ import { fitRobustZ } from "../classical/robust_z.js";
3
4
  import { logScale } from "../features.js";
4
5
  export const RUN_ANOMALY_METRICS = ["cost", "duration", "toolFailures"];
6
+ /** The fixed log references: cost in cents ($10), duration in ms (one hour), tool failures (50). */
7
+ const COST_REF_CENTS = 1000;
8
+ const DURATION_REF_MS = 3_600_000;
9
+ const FAILURES_REF = 50;
5
10
  /** Fixed log scales (a $10 run, a one-hour run, 50 failures map to 1). */
6
11
  export function runAnomalyFeatures(m) {
7
- return [logScale(m.costUsd * 100, 1000), logScale(m.durationMs, 3_600_000), logScale(m.toolFailures, 50)];
12
+ return [
13
+ logScale(m.costUsd * 100, COST_REF_CENTS),
14
+ logScale(m.durationMs, DURATION_REF_MS),
15
+ logScale(m.toolFailures, FAILURES_REF),
16
+ ];
8
17
  }
9
- /** Robust z over the history, combined with EWMA over its recent trend. */
10
- export class RunAnomalyDetector {
11
- population;
12
- trend;
13
- constructor(population, trend) {
14
- this.population = population;
15
- this.trend = trend;
16
- }
18
+ /**
19
+ * The multiplicative jump in cost or duration that flags against a constant history.
20
+ * A constant history has MAD = mean-AD = 0 and EWMA σ = 0, so the floor below IS the
21
+ * scale both detectors divide by.
22
+ */
23
+ export const RUN_ANOMALY_FLAG_RATIO = 3;
24
+ /**
25
+ * The smallest per-metric scale (σ) both detectors use, in the fixed log units above —
26
+ * ONE PER METRIC, because each metric is divided by a different reference: a feature
27
+ * unit is log1p(ref) nats, i.e. log1p(1000) ≈ 6.909 nats for cost but log1p(3.6e6) ≈
28
+ * 15.096 nats for duration. One scalar floor (it was 0.1) therefore meant ~0.69 nats
29
+ * (2×) on cost but ~1.51 nats (4.5×) on duration, and a 10 s → 15 min run (4.5 nats,
30
+ * z ≈ 3.0) slipped under EWMA's 3.
31
+ *
32
+ * Derivation, cost and duration: for values well above 1, a k× jump moves log1p by
33
+ * ≈ ln k nats = ln k / log1p(ref) feature units. The composite flags at the smaller of
34
+ * the two thresholds (EWMA 3; robust z is 3.5), so the floor that flags a 3× jump is
35
+ * floor = ln 3 / (3 · log1p(ref))
36
+ * cost: 1.0986 / (3 · 6.9088) ≈ 0.0530 (robust z alone flags from ≈ 3.6×)
37
+ * duration: 1.0986 / (3 · 15.0964) ≈ 0.0243 (robust z alone flags from ≈ 3.6×)
38
+ * A 1.5× wobble (0.405 nats) scores z ≈ 1.1 on either — normal.
39
+ *
40
+ * Tool failures keep the absolute 0.1: from a clean history one or two failures
41
+ * (log1p(1|2)/log1p(50) ≈ 0.18 | 0.28) stay normal (z ≈ 1.8 / 2.8) and three or more
42
+ * (≈ 0.35) flag. (0.05 was too tight: it flagged a single failure.)
43
+ */
44
+ export const RUN_ANOMALY_MIN_SCALE = [
45
+ Math.log(RUN_ANOMALY_FLAG_RATIO) / (3 * Math.log1p(COST_REF_CENTS)),
46
+ Math.log(RUN_ANOMALY_FLAG_RATIO) / (3 * Math.log1p(DURATION_REF_MS)),
47
+ 0.1,
48
+ ];
49
+ /** The composite detector with `run.anomaly`'s metric names on its explanation. */
50
+ export class RunAnomalyDetector extends AnomalyCompositeModel {
17
51
  /** Which metrics are out of range, per detector (z / threshold, ≥ 1 = out of range). */
18
52
  explain(x) {
19
- const pz = this.population.zScores(x);
20
- const tz = this.trend.zScores(x);
21
- return RUN_ANOMALY_METRICS.map((metric, i) => ({
22
- metric,
23
- population: pz[i] / this.population.threshold,
24
- trend: tz[i] / this.trend.threshold,
25
- }));
26
- }
27
- /** Fold a finished, non-anomalous run into the trend. */
28
- observe(x) {
29
- this.trend.update(x);
30
- }
31
- predict(x) {
32
- const score = Math.max(this.population.predict(x).scores[0], this.trend.predict(x).scores[0]);
33
- return { scores: [score], confidence: anomalyConfidence(score) };
53
+ const per = this.featureScores(x);
54
+ return RUN_ANOMALY_METRICS.map((metric, i) => ({ metric, ...per[i] }));
34
55
  }
35
56
  }
36
- /** Fit both detectors on a chronological history of runs (as feature vectors). */
57
+ /** Fit both detectors on a chronological history of runs (as feature vectors), floored per metric at {@link RUN_ANOMALY_MIN_SCALE}. */
37
58
  export function fitRunAnomaly(samples, opts = {}) {
38
- return new RunAnomalyDetector(fitRobustZ(samples, opts.robustZ), fitEwma(samples, opts.ewma));
59
+ return new RunAnomalyDetector(fitRobustZ(samples, { ...opts.robustZ, minScale: opts.robustZ?.minScale ?? RUN_ANOMALY_MIN_SCALE }), fitEwma(samples, { ...opts.ewma, minScale: opts.ewma?.minScale ?? RUN_ANOMALY_MIN_SCALE }));
39
60
  }
40
61
  export const RUN_ANOMALY_TASK = {
41
62
  kind: "anomaly",
42
63
  id: "run.anomaly",
43
64
  description: "Did this run cost, take or fail far outside its normal range?",
44
65
  features: { numeric: runAnomalyFeatures, numericNames: RUN_ANOMALY_METRICS },
45
- engines: [
46
- { tier: "local", engine: "classical", algorithm: "robust-z" },
47
- { tier: "local", engine: "classical", algorithm: "ewma" },
48
- ],
66
+ engines: [{ tier: "local", engine: "classical", algorithm: "anomaly-composite" }],
67
+ // The task's own fit: the same composite, with the metric floor and named explanation.
49
68
  train: { minSamples: 5, fit: (samples) => fitRunAnomaly(samples) },
50
69
  output: { decode: (p) => ({ anomalous: (p.scores[0] ?? 0) >= 1, score: p.scores[0] ?? 0 }) },
51
70
  };
@@ -1 +1 @@
1
- {"version":3,"file":"run_anomaly.js","sourceRoot":"","sources":["../../../src/ml/tasks/run_anomaly.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run_anomaly.js","sourceRoot":"","sources":["../../../src/ml/tasks/run_anomaly.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ import { type ClassicalOptions } from "./classical/index.js";
14
14
  import { type TextEmbedder } from "./features.js";
15
15
  import { type HeadTrainOptions } from "./head_trainer.js";
16
16
  import type { MlModelStore } from "./run.js";
17
- import { type MlEngineRef, type MlPredictor, type MlSample, type MlTask, type MlTaskKind } from "./types.js";
17
+ import { type MlEngineRef, type MlPredictor, type MlTask } from "./types.js";
18
18
  /** One labelled example in input space. */
19
19
  export interface MlTrainExample<I> {
20
20
  input: I;
@@ -48,13 +48,14 @@ export interface MlTrainResult {
48
48
  /** Size of the held-out tail, and the model's loss on it (null when none was held out). */
49
49
  holdout: number;
50
50
  holdoutLoss: number | null;
51
+ /**
52
+ * Head engines: parameter elements the final fit skipped for a non-finite gradient
53
+ * ({@link HeadTrainer.skippedNonFinite}) — above 0, the fit diverged somewhere. 0
54
+ * for classical engines and task-owned fits.
55
+ */
56
+ skippedNonFinite: number;
51
57
  }
52
- /**
53
- * Mean loss of `predictor` on `samples` for a task of `kind` — classify: weighted
54
- * cross-entropy of the true class; regress: weighted ½·squared error. Null for
55
- * kinds without a supervised loss, or an empty set.
56
- */
57
- export declare function mlEvalLoss(kind: MlTaskKind, predictor: MlPredictor, samples: readonly MlSample[]): number | null;
58
+ export { mlEvalLoss } from "./eval_loss.js";
58
59
  /**
59
60
  * Fit task `task` on labelled examples. Returns null when there are fewer than
60
61
  * the task's `minSamples` (it stays untrained). Throws for a task with no train
@@ -1 +1 @@
1
- {"version":3,"file":"train.d.ts","sourceRoot":"","sources":["../../src/ml/train.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE3E,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAa,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAExH,2CAA2C;AAC3C,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC;IACT,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;IACvE,mFAAmF;IACnF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mEAAmE;IACnE,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,2FAA2F;IAC3F,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,GAAG,IAAI,CAYhH;AA4BD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,EACpB,QAAQ,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,EACtC,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA6B/B"}
1
+ {"version":3,"file":"train.d.ts","sourceRoot":"","sources":["../../src/ml/train.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG3E,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAa,KAAK,WAAW,EAAE,KAAK,WAAW,EAAiB,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAEvG,2CAA2C;AAC3C,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC;IACT,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;IACvE,mFAAmF;IACnF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mEAAmE;IACnE,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,2FAA2F;IAC3F,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkC5C;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,EACpB,QAAQ,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,EACtC,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAoC/B"}
package/dist/ml/train.js CHANGED
@@ -12,28 +12,11 @@
12
12
  */
13
13
  import { fitClassical } from "./classical/index.js";
14
14
  import { DenseHead } from "./dense_head.js";
15
+ import { mlEvalLoss } from "./eval_loss.js";
15
16
  import { extractFeatureMatrix } from "./features.js";
16
17
  import { HeadTrainer } from "./head_trainer.js";
17
18
  import { engineKey } from "./types.js";
18
- /**
19
- * Mean loss of `predictor` on `samples` for a task of `kind` — classify: weighted
20
- * cross-entropy of the true class; regress: weighted ½·squared error. Null for
21
- * kinds without a supervised loss, or an empty set.
22
- */
23
- export function mlEvalLoss(kind, predictor, samples) {
24
- if (samples.length === 0 || (kind !== "classify" && kind !== "regress"))
25
- return null;
26
- let sum = 0;
27
- let wSum = 0;
28
- for (const s of samples) {
29
- const w = s.weight ?? 1;
30
- const p = predictor.predict(s.x);
31
- const loss = kind === "classify" ? -Math.log(Math.max(p.scores[s.y] ?? 0, 1e-12)) : 0.5 * (p.scores[0] - s.y) ** 2;
32
- sum += w * loss;
33
- wSum += w;
34
- }
35
- return wSum > 0 ? sum / wSum : null;
36
- }
19
+ export { mlEvalLoss } from "./eval_loss.js";
37
20
  /** The task's first local engine the seam can train. */
38
21
  function defaultEngine(task) {
39
22
  const e = task.engines.find((r) => r.tier === "local" && (r.engine === "classical" || r.engine === "head"));
@@ -43,9 +26,9 @@ function defaultEngine(task) {
43
26
  }
44
27
  async function fitEngine(task, ref, samples, opts) {
45
28
  if (task.train?.fit)
46
- return task.train.fit(samples, ref);
29
+ return { predictor: await task.train.fit(samples, ref), skippedNonFinite: 0 };
47
30
  if (ref.engine === "classical")
48
- return fitClassical(ref.algorithm, samples, opts.classical);
31
+ return { predictor: fitClassical(ref.algorithm, samples, opts.classical), skippedNonFinite: 0 };
49
32
  if (ref.engine === "head") {
50
33
  const objective = task.kind === "classify" ? "softmax" : task.kind === "regress" ? "mse" : null;
51
34
  if (!objective)
@@ -57,8 +40,9 @@ async function fitEngine(task, ref, samples, opts) {
57
40
  objective,
58
41
  ...(opts.head?.seed != null ? { seed: opts.head.seed } : {}),
59
42
  });
60
- await new HeadTrainer(head, opts.device ?? null, `trainMlTask(${task.id})`).train(samples, opts.head?.train);
61
- return head;
43
+ const trainer = new HeadTrainer(head, opts.device ?? null, `trainMlTask(${task.id})`);
44
+ await trainer.train(samples, opts.head?.train);
45
+ return { predictor: head, skippedNonFinite: trainer.skippedNonFinite };
62
46
  }
63
47
  throw new Error(`trainMlTask(${task.id}): engine '${engineKey(ref)}' is not trained here`);
64
48
  }
@@ -87,15 +71,22 @@ export async function trainMlTask(task, examples, opts = {}) {
87
71
  if (nHold >= 1 && samples.length - nHold >= 1) {
88
72
  const train = samples.slice(0, samples.length - nHold);
89
73
  const hold = samples.slice(samples.length - nHold);
90
- const predictor = await fitEngine(task, ref, train, opts);
91
- holdoutLoss = mlEvalLoss(task.kind, predictor, hold);
74
+ const fit = await fitEngine(task, ref, train, opts);
75
+ holdoutLoss = mlEvalLoss(task.kind, fit.predictor, hold);
92
76
  if (opts.refitOnAll === false) {
93
- opts.models?.set(task.id, engineKey(ref), predictor);
94
- return { predictor, engine: ref, samples: train.length, holdout: nHold, holdoutLoss };
77
+ opts.models?.set(task.id, engineKey(ref), fit.predictor);
78
+ return { predictor: fit.predictor, engine: ref, samples: train.length, holdout: nHold, holdoutLoss, skippedNonFinite: fit.skippedNonFinite };
95
79
  }
96
80
  }
97
- const predictor = await fitEngine(task, ref, samples, opts);
98
- opts.models?.set(task.id, engineKey(ref), predictor);
99
- return { predictor, engine: ref, samples: samples.length, holdout: nHold >= 1 ? nHold : 0, holdoutLoss };
81
+ const fit = await fitEngine(task, ref, samples, opts);
82
+ opts.models?.set(task.id, engineKey(ref), fit.predictor);
83
+ return {
84
+ predictor: fit.predictor,
85
+ engine: ref,
86
+ samples: samples.length,
87
+ holdout: nHold >= 1 ? nHold : 0,
88
+ holdoutLoss,
89
+ skippedNonFinite: fit.skippedNonFinite,
90
+ };
100
91
  }
101
92
  //# sourceMappingURL=train.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"train.js","sourceRoot":"","sources":["../../src/ml/train.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"train.js","sourceRoot":"","sources":["../../src/ml/train.ts"],"names":[],"mappings":"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"}
@@ -4,11 +4,14 @@
4
4
  * One bounded question Evermind answers without an LLM is ONE data row: how its
5
5
  * input becomes a vector, which engines may answer it (in preference order), how
6
6
  * it trains, and what its output means. Pure types — no vscode, no DOM, no network.
7
+ * (Imports only the leaf `evermind/ml_head.ts`; evermind/ never imports ml/.)
7
8
  */
8
9
  /** The shape of the question. */
9
10
  export type MlTaskKind = "classify" | "regress" | "cluster" | "anomaly" | "rank";
10
11
  /** Pure-TypeScript algorithms that run everywhere (`ml/classical/`). */
11
- export type ClassicalAlgorithm = "knn" | "naive-bayes" | "logistic" | "linear" | "kmeans" | "robust-z" | "ewma" | "isolation-forest" | "gbm-small";
12
+ export type ClassicalAlgorithm = "knn" | "naive-bayes" | "logistic" | "linear" | "kmeans" | "robust-z" | "ewma"
13
+ /** robust z + EWMA as one fitted engine (`classical/anomaly_composite.ts`). */
14
+ | "anomaly-composite" | "isolation-forest" | "gbm-small";
12
15
  /** An engine that can answer a task. Cloud engines are a port the HOST supplies. */
13
16
  export type MlEngineRef = {
14
17
  tier: "local";
@@ -105,8 +108,8 @@ export interface MlTask<I = unknown, O = unknown> {
105
108
  train?: TrainSpec;
106
109
  output: OutputSpec<O>;
107
110
  }
108
- /** Task ids: lowercase dotted segments, e.g. `run.local-success`. */
109
- export declare const ML_TASK_ID_RE: RegExp;
111
+ /** Task ids: lowercase dotted segments — defined once with the artifact's head contract. */
112
+ export { ML_TASK_ID_RE } from "../evermind/ml_head.js";
110
113
  /** A stable string key for an engine ref, e.g. `local:classical:logistic`. */
111
114
  export declare function engineKey(ref: MlEngineRef): string;
112
115
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ml/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,iCAAiC;AACjC,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjF,wEAAwE;AACxE,MAAM,MAAM,kBAAkB,GAC1B,KAAK,GACL,aAAa,GACb,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,MAAM,GACN,kBAAkB,GAClB,WAAW,CAAC;AAEhB,oFAAoF;AACpF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,kBAAkB,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEjE,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,uDAAuD;AACvD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC;IACvC,4EAA4E;IAC5E,YAAY,CAAC,IAAI,YAAY,CAAC;IAC9B,gFAAgF;IAChF,YAAY,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CAChD;AAED,qFAAqF;AACrF,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;IAC5B,uGAAuG;IACvG,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;IACjC,sFAAsF;IACtF,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,sDAAsD;AACtD,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,YAAY,CAAC;IAChB,8EAA8E;IAC9E,CAAC,EAAE,MAAM,CAAC;IACV,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,EAAE,MAAM,EAAE,WAAW,KAAK,WAAW,CAAC;IACzE,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,+EAA+E;IAC/E,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,0DAA0D;IAC1D,MAAM,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC;CAC5B;AAED,uFAAuF;AACvF,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IAC9C,IAAI,EAAE,UAAU,CAAC;IACjB,4CAA4C;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACzB,2DAA2D;IAC3D,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;CACvB;AAED,qEAAqE;AACrE,eAAO,MAAM,aAAa,QAA0C,CAAC;AAErE,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAWlD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ml/types.ts"],"names":[],"mappings":"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"}
package/dist/ml/types.js CHANGED
@@ -4,9 +4,10 @@
4
4
  * One bounded question Evermind answers without an LLM is ONE data row: how its
5
5
  * input becomes a vector, which engines may answer it (in preference order), how
6
6
  * it trains, and what its output means. Pure types — no vscode, no DOM, no network.
7
+ * (Imports only the leaf `evermind/ml_head.ts`; evermind/ never imports ml/.)
7
8
  */
8
- /** Task ids: lowercase dotted segments, e.g. `run.local-success`. */
9
- export const ML_TASK_ID_RE = /^[a-z][a-z0-9-]*(\.[a-z][a-z0-9-]*)+$/;
9
+ /** Task ids: lowercase dotted segments — defined once with the artifact's head contract. */
10
+ export { ML_TASK_ID_RE } from "../evermind/ml_head.js";
10
11
  /** A stable string key for an engine ref, e.g. `local:classical:logistic`. */
11
12
  export function engineKey(ref) {
12
13
  switch (ref.engine) {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ml/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8GH,qEAAqE;AACrE,MAAM,CAAC,MAAM,aAAa,GAAG,uCAAuC,CAAC;AAErE,8EAA8E;AAC9E,MAAM,UAAU,SAAS,CAAC,GAAgB;IACxC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,WAAW;YACd,OAAO,mBAAmB,GAAG,CAAC,SAAS,EAAE,CAAC;QAC5C,KAAK,MAAM;YACT,OAAO,cAAc,GAAG,CAAC,IAAI,EAAE,CAAC;QAClC,KAAK,MAAM;YACT,OAAO,cAAc,GAAG,CAAC,KAAK,EAAE,CAAC;QACnC,KAAK,YAAY;YACf,OAAO,oBAAoB,GAAG,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ml/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgHH,4FAA4F;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,8EAA8E;AAC9E,MAAM,UAAU,SAAS,CAAC,GAAgB;IACxC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,WAAW;YACd,OAAO,mBAAmB,GAAG,CAAC,SAAS,EAAE,CAAC;QAC5C,KAAK,MAAM;YACT,OAAO,cAAc,GAAG,CAAC,IAAI,EAAE,CAAC;QAClC,KAAK,MAAM;YACT,OAAO,cAAc,GAAG,CAAC,KAAK,EAAE,CAAC;QACnC,KAAK,YAAY;YACf,OAAO,oBAAoB,GAAG,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC"}
@@ -72,18 +72,24 @@ export interface AdamWKernelStep {
72
72
  }
73
73
  /**
74
74
  * One AdamW step over a single parameter tensor — the exact CPU mirror of the
75
- * `adamw_update` entry point in `WEIGHT_UPDATE_WGSL`, including its two safety
75
+ * `adamw_update` entry point in `WEIGHT_UPDATE_WGSL`, including its safety
76
76
  * properties:
77
77
  *
78
- * • the **NaN/Inf guard** — a non-finite step is dropped rather than written
79
- * into a weight, so one bad gradient cannot permanently poison the model;
78
+ * • the **non-finite gradient skip** — an element whose gradient is NaN/±Inf
79
+ * (or whose new moments would overflow f32) is skipped ENTIRELY: m, v and the
80
+ * weight keep their values (no decay either). Writing the moment first and
81
+ * dropping only the step stored NaN in m/v, and every later step of that
82
+ * element was then NaN too — silently dropped, so the weight froze forever;
83
+ * • the **NaN/Inf step guard** — a non-finite step from finite moments is
84
+ * dropped rather than written into a weight;
80
85
  * • the **trust region** — `maxDelta` bounds how far a single step can move a
81
86
  * weight, which is what keeps repeated write-through adapts reversible.
82
87
  *
83
88
  * Decoupled weight decay (`θ * (1 - lr·wd)`), matching the kernel — deliberately
84
89
  * NOT the coupled form {@link AdamW} uses for the MoE/EvermindLM trainers.
85
90
  *
86
- * `param`, `m` and `v` are updated in place.
91
+ * `param`, `m` and `v` are updated in place. Returns how many elements were skipped
92
+ * for a non-finite gradient (0 on a healthy step).
87
93
  */
88
- export declare function adamwUpdateInPlace(param: Float32Array, grad: Float32Array, m: Float32Array, v: Float32Array, hp: AdamWKernelStep): void;
94
+ export declare function adamwUpdateInPlace(param: Float32Array, grad: Float32Array, m: Float32Array, v: Float32Array, hp: AdamWKernelStep): number;
89
95
  //# sourceMappingURL=adamw.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adamw.d.ts","sourceRoot":"","sources":["../../src/optim/adamw.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,IAAI,UAAU,EAAE,CAAC;IAC3B,SAAS,IAAI,UAAU,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,qBAAa,KAAK;IASd,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAA+B;IACjD,OAAO,CAAC,QAAQ,CAAC,CAAC,CAA+B;IACjD,OAAO,CAAC,CAAC,CAAK;IACd,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwC;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;gBAGtB,MAAM,EAAE,WAAW,EACpC,OAAO,GAAE,YAAiB;IA0B5B,kEAAkE;IAClE,OAAO,CAAC,KAAK;IAIb,wFAAwF;IACxF,IAAI,IAAI,IAAI;IAwBZ,qFAAqF;IACrF,UAAU,IAAI,MAAM;CAMrB;AAID,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,YAAY,EAClB,CAAC,EAAE,YAAY,EACf,CAAC,EAAE,YAAY,EACf,EAAE,EAAE,eAAe,GAClB,IAAI,CAkBN"}
1
+ {"version":3,"file":"adamw.d.ts","sourceRoot":"","sources":["../../src/optim/adamw.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,IAAI,UAAU,EAAE,CAAC;IAC3B,SAAS,IAAI,UAAU,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,qBAAa,KAAK;IASd,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAA+B;IACjD,OAAO,CAAC,QAAQ,CAAC,CAAC,CAA+B;IACjD,OAAO,CAAC,CAAC,CAAK;IACd,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwC;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;gBAGtB,MAAM,EAAE,WAAW,EACpC,OAAO,GAAE,YAAiB;IA0B5B,kEAAkE;IAClE,OAAO,CAAC,KAAK;IAIb,wFAAwF;IACxF,IAAI,IAAI,IAAI;IAwBZ,qFAAqF;IACrF,UAAU,IAAI,MAAM;CAMrB;AAID,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,YAAY,EAClB,CAAC,EAAE,YAAY,EACf,CAAC,EAAE,YAAY,EACf,EAAE,EAAE,eAAe,GAClB,MAAM,CAyBR"}
@@ -80,30 +80,44 @@ export class AdamW {
80
80
  return n;
81
81
  }
82
82
  }
83
+ /** Largest finite f32 — a moment above it would be stored as ±Inf. */
84
+ const F32_MAX = 3.4028234663852886e38;
83
85
  /**
84
86
  * One AdamW step over a single parameter tensor — the exact CPU mirror of the
85
- * `adamw_update` entry point in `WEIGHT_UPDATE_WGSL`, including its two safety
87
+ * `adamw_update` entry point in `WEIGHT_UPDATE_WGSL`, including its safety
86
88
  * properties:
87
89
  *
88
- * • the **NaN/Inf guard** — a non-finite step is dropped rather than written
89
- * into a weight, so one bad gradient cannot permanently poison the model;
90
+ * • the **non-finite gradient skip** — an element whose gradient is NaN/±Inf
91
+ * (or whose new moments would overflow f32) is skipped ENTIRELY: m, v and the
92
+ * weight keep their values (no decay either). Writing the moment first and
93
+ * dropping only the step stored NaN in m/v, and every later step of that
94
+ * element was then NaN too — silently dropped, so the weight froze forever;
95
+ * • the **NaN/Inf step guard** — a non-finite step from finite moments is
96
+ * dropped rather than written into a weight;
90
97
  * • the **trust region** — `maxDelta` bounds how far a single step can move a
91
98
  * weight, which is what keeps repeated write-through adapts reversible.
92
99
  *
93
100
  * Decoupled weight decay (`θ * (1 - lr·wd)`), matching the kernel — deliberately
94
101
  * NOT the coupled form {@link AdamW} uses for the MoE/EvermindLM trainers.
95
102
  *
96
- * `param`, `m` and `v` are updated in place.
103
+ * `param`, `m` and `v` are updated in place. Returns how many elements were skipped
104
+ * for a non-finite gradient (0 on a healthy step).
97
105
  */
98
106
  export function adamwUpdateInPlace(param, grad, m, v, hp) {
99
107
  const { lr, beta1, beta2, eps, weightDecay, beta1_t, beta2_t, maxDelta } = hp;
100
108
  const gradScale = hp.gradScale ?? 1;
101
109
  const bc1 = 1 - beta1_t;
102
110
  const bc2 = 1 - beta2_t;
111
+ let skipped = 0;
103
112
  for (let i = 0; i < param.length; i++) {
104
113
  const g = grad[i] * gradScale;
105
114
  const mNew = beta1 * m[i] + (1 - beta1) * g;
106
115
  const vNew = beta2 * v[i] + (1 - beta2) * g * g;
116
+ // NaN fails every comparison, so this also catches a NaN gradient.
117
+ if (!(Math.abs(mNew) <= F32_MAX && vNew <= F32_MAX)) {
118
+ skipped++;
119
+ continue;
120
+ }
107
121
  m[i] = mNew;
108
122
  v[i] = vNew;
109
123
  let step = (lr * (mNew / bc1)) / (Math.sqrt(vNew / bc2) + eps);
@@ -113,5 +127,6 @@ export function adamwUpdateInPlace(param, grad, m, v, hp) {
113
127
  step = Math.min(maxDelta, Math.max(-maxDelta, step));
114
128
  param[i] = param[i] * (1 - lr * weightDecay) - step;
115
129
  }
130
+ return skipped;
116
131
  }
117
132
  //# sourceMappingURL=adamw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adamw.js","sourceRoot":"","sources":["../../src/optim/adamw.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adamw.js","sourceRoot":"","sources":["../../src/optim/adamw.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seanhogg/builderforce-memory-engine",
3
- "version": "2026.10.1",
3
+ "version": "2026.10.3",
4
4
  "description": "BuilderForce Agent Memory — engine layer. TypeScript/WGSL Mamba SSM kernels, model blocks, autograd, training, and BPE tokenizer (zero runtime deps, WebGPU-native).",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -8,7 +8,7 @@
8
8
  * produced from the same text. That recipe lives here and nowhere else.
9
9
  */
10
10
  import type { EvermindModelPackage } from "./package.js";
11
- import { EvermindLMTrainer } from "../lm/evermind_lm.js";
11
+ import { EvermindLMTrainer, type EvermindLM } from "../lm/evermind_lm.js";
12
12
  import { applyCheckpointDiff, diffCheckpoints } from "../utils/delta.js";
13
13
  import { tokenWindows } from "../bench/adaptation.js";
14
14
 
@@ -36,6 +36,12 @@ export interface AdaptOptions {
36
36
  maxChars?: number;
37
37
  windowTokens?: number;
38
38
  epochs?: number;
39
+ /**
40
+ * An LM the caller ALREADY loaded from exactly this `pkg` (`pkg.loadLM()`) and has
41
+ * not trained — e.g. the one it embedded with for curation — to adapt instead of
42
+ * loading a second copy. It is trained in place, so it is spent afterwards.
43
+ */
44
+ lm?: EvermindLM;
39
45
  }
40
46
 
41
47
  /**
@@ -54,7 +60,7 @@ export function adaptAndDiff(
54
60
  const windowTokens = opts.windowTokens ?? EVERMIND_ADAPT_WINDOW_TOKENS;
55
61
  const seqs = tokenWindows(tokenizer.encode(text.slice(0, maxChars)), windowTokens);
56
62
  if (seqs.length === 0) return null;
57
- const lm = pkg.loadLM();
63
+ const lm = opts.lm ?? pkg.loadLM();
58
64
  const history = new EvermindLMTrainer(lm, { epochs: opts.epochs ?? 1 }).fit(seqs);
59
65
  const loss = history.length > 0 ? history[history.length - 1]! : 0;
60
66
  return { diff: diffCheckpoints(pkg.checkpoint, lm.exportWeights()), loss, sequences: seqs.length };