@seanhogg/builderforce-memory-engine 2026.10.2 → 2026.10.22

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 (68) 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/experience/index.d.ts +2 -2
  6. package/dist/experience/index.d.ts.map +1 -1
  7. package/dist/experience/index.js.map +1 -1
  8. package/dist/experience/store.d.ts +19 -1
  9. package/dist/experience/store.d.ts.map +1 -1
  10. package/dist/experience/store.js +14 -2
  11. package/dist/experience/store.js.map +1 -1
  12. package/dist/experience/types.d.ts +18 -0
  13. package/dist/experience/types.d.ts.map +1 -1
  14. package/dist/experience/types.js.map +1 -1
  15. package/dist/kernels/weight_update.d.ts.map +1 -1
  16. package/dist/kernels/weight_update.js +12 -0
  17. package/dist/kernels/weight_update.js.map +1 -1
  18. package/dist/ml/classical/ewma.d.ts +5 -4
  19. package/dist/ml/classical/ewma.d.ts.map +1 -1
  20. package/dist/ml/classical/ewma.js +2 -2
  21. package/dist/ml/classical/ewma.js.map +1 -1
  22. package/dist/ml/classical/index.d.ts +2 -2
  23. package/dist/ml/classical/index.d.ts.map +1 -1
  24. package/dist/ml/classical/index.js +1 -1
  25. package/dist/ml/classical/index.js.map +1 -1
  26. package/dist/ml/classical/knn.d.ts +11 -4
  27. package/dist/ml/classical/knn.d.ts.map +1 -1
  28. package/dist/ml/classical/knn.js +26 -6
  29. package/dist/ml/classical/knn.js.map +1 -1
  30. package/dist/ml/classical/robust_z.d.ts +9 -3
  31. package/dist/ml/classical/robust_z.d.ts.map +1 -1
  32. package/dist/ml/classical/robust_z.js +5 -1
  33. package/dist/ml/classical/robust_z.js.map +1 -1
  34. package/dist/ml/head_trainer.d.ts +13 -1
  35. package/dist/ml/head_trainer.d.ts.map +1 -1
  36. package/dist/ml/head_trainer.js +47 -10
  37. package/dist/ml/head_trainer.js.map +1 -1
  38. package/dist/ml/tasks/experience.d.ts +61 -16
  39. package/dist/ml/tasks/experience.d.ts.map +1 -1
  40. package/dist/ml/tasks/experience.js +119 -24
  41. package/dist/ml/tasks/experience.js.map +1 -1
  42. package/dist/ml/tasks/run_anomaly.d.ts +26 -9
  43. package/dist/ml/tasks/run_anomaly.d.ts.map +1 -1
  44. package/dist/ml/tasks/run_anomaly.js +39 -10
  45. package/dist/ml/tasks/run_anomaly.js.map +1 -1
  46. package/dist/ml/train.d.ts +6 -0
  47. package/dist/ml/train.d.ts.map +1 -1
  48. package/dist/ml/train.js +19 -11
  49. package/dist/ml/train.js.map +1 -1
  50. package/dist/optim/adamw.d.ts +11 -5
  51. package/dist/optim/adamw.d.ts.map +1 -1
  52. package/dist/optim/adamw.js +19 -4
  53. package/dist/optim/adamw.js.map +1 -1
  54. package/package.json +1 -1
  55. package/src/evermind/adapt.ts +8 -2
  56. package/src/experience/index.ts +2 -1
  57. package/src/experience/store.ts +35 -3
  58. package/src/experience/types.ts +19 -0
  59. package/src/kernels/weight_update.ts +12 -0
  60. package/src/ml/classical/ewma.ts +5 -5
  61. package/src/ml/classical/index.ts +2 -2
  62. package/src/ml/classical/knn.ts +25 -6
  63. package/src/ml/classical/robust_z.ts +15 -5
  64. package/src/ml/head_trainer.ts +47 -8
  65. package/src/ml/tasks/experience.ts +148 -28
  66. package/src/ml/tasks/run_anomaly.ts +41 -10
  67. package/src/ml/train.ts +31 -12
  68. package/src/optim/adamw.ts +21 -5
@@ -3,6 +3,10 @@ import { featureDim, median } from "./math.js";
3
3
  const MAD_TO_SD = 1.4826;
4
4
  /** Mean absolute deviation → standard deviation for normally-distributed data. */
5
5
  const MEANAD_TO_SD = 1.2533;
6
+ /** The floor for feature `i` (a per-feature array's missing entry is 0). */
7
+ export function minScaleAt(minScale, i) {
8
+ return typeof minScale === "number" ? minScale : (minScale[i] ?? 0);
9
+ }
6
10
  export class RobustZModel {
7
11
  center;
8
12
  scale;
@@ -40,7 +44,7 @@ export function fitRobustZ(samples, opts = {}) {
40
44
  if (!(s > 0))
41
45
  s = MEANAD_TO_SD * (dev.reduce((a, b) => a + b, 0) / dev.length);
42
46
  center[i] = med;
43
- scale[i] = Math.max(s, minFrac * Math.abs(med) + 1e-9, minAbs);
47
+ scale[i] = Math.max(s, minFrac * Math.abs(med) + 1e-9, minScaleAt(minAbs, i));
44
48
  }
45
49
  return new RobustZModel(center, scale, opts.threshold ?? 3.5);
46
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"robust_z.js","sourceRoot":"","sources":["../../../src/ml/classical/robust_z.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"robust_z.js","sourceRoot":"","sources":["../../../src/ml/classical/robust_z.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,10 @@
9
9
  * NaN/Inf guard included), so training works everywhere (CI, Node without
10
10
  * @webgpu/node, a laptop with no GPU). Neither path bounds the step (maxDelta 0).
11
11
  *
12
+ * A non-finite gradient element is skipped by both paths — its moments and weight
13
+ * are left as they were, so the next finite step trains it again — and counted in
14
+ * {@link HeadTrainer.skippedNonFinite}, so a caller can see a run that diverged.
15
+ *
12
16
  * The head owns its forward/backward and its loss (MSE for regression, BCE /
13
17
  * softmax cross-entropy for classification); this file owns only the loop:
14
18
  * zero → accumulate per sample → average → clip → AdamW step.
@@ -51,10 +55,18 @@ export declare class HeadTrainer<S> {
51
55
  readonly device: GPUDevice | null;
52
56
  private _moments;
53
57
  private _step;
58
+ private _skippedNonFinite;
54
59
  private readonly _adamwPipeline;
55
60
  constructor(head: TrainableHead<S>, device?: GPUDevice | null,
56
61
  /** Name used in error messages (the registration that owns this trainer). */
57
62
  label?: string);
63
+ /**
64
+ * Parameter elements whose gradient was non-finite (NaN/±Inf) and whose update was
65
+ * therefore skipped, summed over every step this trainer has taken. 0 on a healthy run.
66
+ */
67
+ get skippedNonFinite(): number;
68
+ /** Whether any step had to skip a non-finite gradient element. */
69
+ get diverged(): boolean;
58
70
  /** Whether the optimiser step runs on the GPU. */
59
71
  get gpuTraining(): boolean;
60
72
  private _initMoments;
@@ -66,7 +78,7 @@ export declare class HeadTrainer<S> {
66
78
  train(samples: S[], opts?: HeadTrainOptions): Promise<number[]>;
67
79
  /** Mean loss over samples (no weight update). 0 for an empty set. */
68
80
  evaluate(samples: S[]): number;
69
- /** AdamW on the CPU via the kernel's shared mirror (`adamwUpdateInPlace`). */
81
+ /** AdamW on the CPU via the kernel's shared mirror (`adamwUpdateInPlace`), which counts its skips. */
70
82
  private _adamwStepCpu;
71
83
  /** AdamW on the GPU via the shared WEIGHT_UPDATE_WGSL kernel. Awaited per step. */
72
84
  private _adamwStepGpu;
@@ -1 +1 @@
1
- {"version":3,"file":"head_trainer.d.ts","sourceRoot":"","sources":["../../src/ml/head_trainer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAcH,8DAA8D;AAC9D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oEAAoE;AACpE,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,+CAA+C;IAC/C,UAAU,IAAI,SAAS,EAAE,CAAC;IAC1B,+DAA+D;IAC/D,SAAS,IAAI,SAAS,EAAE,CAAC;IACzB,QAAQ,IAAI,IAAI,CAAC;IACjB,oFAAoF;IACpF,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;IAC9B,uCAAuC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;mFAC+E;IAC/E,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CAChF;AAuBD,qBAAa,WAAW,CAAC,CAAC;IAUtB,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,KAAK;IAVxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;gBAGzD,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,MAAM,GAAE,SAAS,GAAG,IAAW;IAC/B,6EAA6E;IAC5D,KAAK,GAAE,MAAsB;IAShD,kDAAkD;IAClD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,OAAO,CAAC,YAAY;IAQpB;;;;OAIG;IACG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA8CzE,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,MAAM;IAO9B,8EAA8E;IAC9E,OAAO,CAAC,aAAa;IAQrB,mFAAmF;YACrE,aAAa;CA2B5B;AAcD,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,YAAY,CAQxE;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAQxF"}
1
+ {"version":3,"file":"head_trainer.d.ts","sourceRoot":"","sources":["../../src/ml/head_trainer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAcH,8DAA8D;AAC9D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oEAAoE;AACpE,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,+CAA+C;IAC/C,UAAU,IAAI,SAAS,EAAE,CAAC;IAC1B,+DAA+D;IAC/D,SAAS,IAAI,SAAS,EAAE,CAAC;IACzB,QAAQ,IAAI,IAAI,CAAC;IACjB,oFAAoF;IACpF,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;IAC9B,uCAAuC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;mFAC+E;IAC/E,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CAChF;AAuBD,qBAAa,WAAW,CAAC,CAAC;IAWtB,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,KAAK;IAXxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IAClC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;gBAGzD,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,MAAM,GAAE,SAAS,GAAG,IAAW;IAC/B,6EAA6E;IAC5D,KAAK,GAAE,MAAsB;IAShD;;;OAGG;IACH,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,kEAAkE;IAClE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,kDAAkD;IAClD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,OAAO,CAAC,YAAY;IAQpB;;;;OAIG;IACG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA8CzE,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,MAAM;IAO9B,sGAAsG;IACtG,OAAO,CAAC,aAAa;IAQrB,mFAAmF;YACrE,aAAa;CA6B5B;AAiCD,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,YAAY,CAQxE;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAQxF"}
@@ -9,6 +9,10 @@
9
9
  * NaN/Inf guard included), so training works everywhere (CI, Node without
10
10
  * @webgpu/node, a laptop with no GPU). Neither path bounds the step (maxDelta 0).
11
11
  *
12
+ * A non-finite gradient element is skipped by both paths — its moments and weight
13
+ * are left as they were, so the next finite step trains it again — and counted in
14
+ * {@link HeadTrainer.skippedNonFinite}, so a caller can see a run that diverged.
15
+ *
12
16
  * The head owns its forward/backward and its loss (MSE for regression, BCE /
13
17
  * softmax cross-entropy for classification); this file owns only the loop:
14
18
  * zero → accumulate per sample → average → clip → AdamW step.
@@ -36,6 +40,7 @@ export class HeadTrainer {
36
40
  device;
37
41
  _moments = null;
38
42
  _step = 0;
43
+ _skippedNonFinite = 0;
39
44
  _adamwPipeline;
40
45
  constructor(head, device = null,
41
46
  /** Name used in error messages (the registration that owns this trainer). */
@@ -47,6 +52,17 @@ export class HeadTrainer {
47
52
  ? createComputePipeline(device, WEIGHT_UPDATE_WGSL, "adamw_update")
48
53
  : null;
49
54
  }
55
+ /**
56
+ * Parameter elements whose gradient was non-finite (NaN/±Inf) and whose update was
57
+ * therefore skipped, summed over every step this trainer has taken. 0 on a healthy run.
58
+ */
59
+ get skippedNonFinite() {
60
+ return this._skippedNonFinite;
61
+ }
62
+ /** Whether any step had to skip a non-finite gradient element. */
63
+ get diverged() {
64
+ return this._skippedNonFinite > 0;
65
+ }
50
66
  /** Whether the optimiser step runs on the GPU. */
51
67
  get gpuTraining() {
52
68
  return this.device != null && this._adamwPipeline != null;
@@ -108,12 +124,12 @@ export class HeadTrainer {
108
124
  total += this.head.loss(s);
109
125
  return total / samples.length;
110
126
  }
111
- /** AdamW on the CPU via the kernel's shared mirror (`adamwUpdateInPlace`). */
127
+ /** AdamW on the CPU via the kernel's shared mirror (`adamwUpdateInPlace`), which counts its skips. */
112
128
  _adamwStepCpu(grads, hp) {
113
129
  const params = this.head.parameters();
114
130
  for (let pi = 0; pi < params.length; pi++) {
115
131
  const mom = this._moments[pi];
116
- adamwUpdateInPlace(params[pi].data, grads[pi].data, mom.m, mom.v, hp);
132
+ this._skippedNonFinite += adamwUpdateInPlace(params[pi].data, grads[pi].data, mom.m, mom.v, hp);
117
133
  }
118
134
  }
119
135
  /** AdamW on the GPU via the shared WEIGHT_UPDATE_WGSL kernel. Awaited per step. */
@@ -124,6 +140,8 @@ export class HeadTrainer {
124
140
  for (let pi = 0; pi < params.length; pi++) {
125
141
  const p = params[pi];
126
142
  const mom = this._moments[pi];
143
+ // The kernel skips these elements too; it cannot count, so count them here.
144
+ this._skippedNonFinite += countNonFinite(grads[pi].data);
127
145
  const paramBuf = createStorageBuffer(device, p.data, true);
128
146
  const gradBuf = createStorageBuffer(device, grads[pi].data, false);
129
147
  const mBuf = createStorageBuffer(device, mom.m, true);
@@ -142,20 +160,39 @@ export class HeadTrainer {
142
160
  }
143
161
  }
144
162
  }
145
- /** Clip grads to `maxNorm` in place; returns the PRE-clip L2 norm (the signal). */
163
+ /** Elements of `a` that are NaN or ±Inf. */
164
+ function countNonFinite(a) {
165
+ let n = 0;
166
+ for (let i = 0; i < a.length; i++)
167
+ if (!Number.isFinite(a[i]))
168
+ n++;
169
+ return n;
170
+ }
171
+ /**
172
+ * Clip grads to `maxNorm` in place; returns the PRE-clip L2 norm (the signal — NaN
173
+ * or Inf when any element is). The clip itself uses the norm of the FINITE elements:
174
+ * those are skipped by the optimiser anyway, and one NaN must not exempt the rest
175
+ * from clipping.
176
+ */
146
177
  function clipGradients(grads, maxNorm) {
147
178
  let normSq = 0;
148
- for (const g of grads)
149
- for (let i = 0; i < g.data.length; i++)
150
- normSq += g.data[i] * g.data[i];
151
- const norm = Math.sqrt(normSq);
152
- if (norm > maxNorm && norm > 0) {
153
- const scale = maxNorm / norm;
179
+ let finiteSq = 0;
180
+ for (const g of grads) {
181
+ for (let i = 0; i < g.data.length; i++) {
182
+ const sq = g.data[i] * g.data[i];
183
+ normSq += sq;
184
+ if (Number.isFinite(sq))
185
+ finiteSq += sq;
186
+ }
187
+ }
188
+ const finiteNorm = Math.sqrt(finiteSq);
189
+ if (finiteNorm > maxNorm && finiteNorm > 0) {
190
+ const scale = maxNorm / finiteNorm;
154
191
  for (const g of grads)
155
192
  for (let i = 0; i < g.data.length; i++)
156
193
  g.data[i] *= scale;
157
194
  }
158
- return norm;
195
+ return Math.sqrt(normSq);
159
196
  }
160
197
  /** Concatenate a head's parameters into one flat vector (the federation unit). */
161
198
  export function flattenParams(params) {
@@ -1 +1 @@
1
- {"version":3,"file":"head_trainer.js","sourceRoot":"","sources":["../../src/ml/head_trainer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,UAAU,EACV,IAAI,GACL,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAwB,MAAM,mBAAmB,CAAC;AAyC7E,8FAA8F;AAC9F,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B;;;;GAIG;AACH,SAAS,cAAc,CAAC,WAAmB,EAAE,EAAmB;IAC9D,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAC/C,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9C,mCAAmC;IACnC,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1H,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,OAAO,WAAW;IAWH;IAVV,IAAI,CAAmB;IACvB,MAAM,CAAmB;IAC1B,QAAQ,GAAwB,IAAI,CAAC;IACrC,KAAK,GAAG,CAAC,CAAC;IACD,cAAc,CAA4B;IAE3D,YACE,IAAsB,EACtB,SAA2B,IAAI;IAC/B,6EAA6E;IAC5D,QAAgB,aAAa;QAA7B,UAAK,GAAL,KAAK,CAAwB;QAE9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,MAAM;YAC1B,CAAC,CAAC,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,EAAE,cAAc,CAAC;YACnE,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED,kDAAkD;IAClD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;IAC5D,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,CAAC,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;YAC5B,CAAC,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;SAC7B,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,OAAY,EAAE,OAAyB,EAAE;QACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,oBAAoB,CAAC,CAAC;QAC7E,MAAM,EACJ,YAAY,GAAG,IAAI,EACnB,MAAM,GAAG,EAAE,EACX,WAAW,GAAG,GAAG,EACjB,KAAK,GAAG,GAAG,EACX,KAAK,GAAG,KAAK,EACb,GAAG,GAAG,IAAI,EACV,WAAW,GAAG,GAAG,EACjB,UAAU,GAAG,IAAI,GAClB,GAAG,IAAI,CAAC;QAET,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,KAAK,MAAM,CAAC,IAAI,OAAO;gBAAE,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAE9D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YAChC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;oBAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,IAAI,IAAI,CAAC;YAC7D,CAAC;YAED,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAEnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,EAAE,GAAoB,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAChH,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChC,CAAC;YAED,MAAM,GAAG,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,IAAI,UAAU;gBAAE,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qEAAqE;IACrE,QAAQ,CAAC,OAAY;QACnB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpD,OAAO,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,8EAA8E;IACtE,aAAa,CAAC,KAAkB,EAAE,EAAmB;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAS,CAAC,EAAE,CAAE,CAAC;YAChC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,mFAAmF;IAC3E,KAAK,CAAC,aAAa,CAAC,KAAkB,EAAE,EAAmB;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAO,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAe,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAEtC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAE,CAAC;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAS,CAAC,EAAE,CAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACpE,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;YACrE,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACnF,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAEjE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACnF,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9E,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAE9E,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;CACF;AAED,mFAAmF;AACnF,SAAS,aAAa,CAAC,KAAkB,EAAE,OAAe;IACxD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;IACjG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,IAAI,GAAG,OAAO,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,IAAI,KAAK,CAAC;IACrF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAAC,MAA4B;IACxD,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,YAAY,CAAC,MAA4B,EAAE,IAAuB;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,gBAAgB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACzG,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;YAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QAC3D,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"head_trainer.js","sourceRoot":"","sources":["../../src/ml/head_trainer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,UAAU,EACV,IAAI,GACL,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAwB,MAAM,mBAAmB,CAAC;AAyC7E,8FAA8F;AAC9F,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B;;;;GAIG;AACH,SAAS,cAAc,CAAC,WAAmB,EAAE,EAAmB;IAC9D,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAC/C,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9C,mCAAmC;IACnC,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1H,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,OAAO,WAAW;IAYH;IAXV,IAAI,CAAmB;IACvB,MAAM,CAAmB;IAC1B,QAAQ,GAAwB,IAAI,CAAC;IACrC,KAAK,GAAG,CAAC,CAAC;IACV,iBAAiB,GAAG,CAAC,CAAC;IACb,cAAc,CAA4B;IAE3D,YACE,IAAsB,EACtB,SAA2B,IAAI;IAC/B,6EAA6E;IAC5D,QAAgB,aAAa;QAA7B,UAAK,GAAL,KAAK,CAAwB;QAE9C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,MAAM;YAC1B,CAAC,CAAC,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,EAAE,cAAc,CAAC;YACnE,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED;;;OAGG;IACH,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,kEAAkE;IAClE,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,kDAAkD;IAClD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;IAC5D,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,CAAC,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;YAC5B,CAAC,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;SAC7B,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,OAAY,EAAE,OAAyB,EAAE;QACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,oBAAoB,CAAC,CAAC;QAC7E,MAAM,EACJ,YAAY,GAAG,IAAI,EACnB,MAAM,GAAG,EAAE,EACX,WAAW,GAAG,GAAG,EACjB,KAAK,GAAG,GAAG,EACX,KAAK,GAAG,KAAK,EACb,GAAG,GAAG,IAAI,EACV,WAAW,GAAG,GAAG,EACjB,UAAU,GAAG,IAAI,GAClB,GAAG,IAAI,CAAC;QAET,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,KAAK,MAAM,CAAC,IAAI,OAAO;gBAAE,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAE9D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YAChC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;oBAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,IAAI,IAAI,CAAC;YAC7D,CAAC;YAED,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAEnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,EAAE,GAAoB,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAChH,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChC,CAAC;YAED,MAAM,GAAG,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,IAAI,UAAU;gBAAE,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qEAAqE;IACrE,QAAQ,CAAC,OAAY;QACnB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpD,OAAO,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAChC,CAAC;IAED,sGAAsG;IAC9F,aAAa,CAAC,KAAkB,EAAE,EAAmB;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAS,CAAC,EAAE,CAAE,CAAC;YAChC,IAAI,CAAC,iBAAiB,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;IAED,mFAAmF;IAC3E,KAAK,CAAC,aAAa,CAAC,KAAkB,EAAE,EAAmB;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAO,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAe,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAEtC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAE,CAAC;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAS,CAAC,EAAE,CAAE,CAAC;YAChC,4EAA4E;YAC5E,IAAI,CAAC,iBAAiB,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAE,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACpE,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;YACrE,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACnF,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAEjE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACnF,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9E,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAE9E,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;CACF;AAED,4CAA4C;AAC5C,SAAS,cAAc,CAAC,CAAe;IACrC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;YAAE,CAAC,EAAE,CAAC;IACpE,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,KAAkB,EAAE,OAAe;IACxD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;YACnC,MAAM,IAAI,EAAE,CAAC;YACb,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAAE,QAAQ,IAAI,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,UAAU,GAAG,OAAO,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,IAAI,KAAK,CAAC;IACrF,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,aAAa,CAAC,MAA4B;IACxD,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,YAAY,CAAC,MAA4B,EAAE,IAAuB;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,gBAAgB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACzG,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;YAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QAC3D,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -5,7 +5,8 @@
5
5
  * instead of every transcript. Curation only drops documents; it never rewrites one.
6
6
  */
7
7
  import { type ExperienceDocument } from "../../experience/corpus.js";
8
- import type { Episode, Run, Skill } from "../../experience/types.js";
8
+ import type { CurationRecord } from "../../experience/store.js";
9
+ import type { CuratedOut, Episode, Run, Skill } from "../../experience/types.js";
9
10
  import { type TextEmbedder } from "../features.js";
10
11
  import { type MlRunContext } from "../run.js";
11
12
  import { type MlTrainExample } from "../train.js";
@@ -30,6 +31,13 @@ export declare const EXPERIENCE_QUALITY_TASK: MlTask<ExperienceQualityInput, Exp
30
31
  export declare function experienceQualityInputs(episodes: Episode[], skills: Skill[], runs?: readonly Run[]): ExperienceQualityInput[];
31
32
  /** The training label of a quality input: 1 (high) when most finished runs succeeded, 0 when not, null with no runs. */
32
33
  export declare function experienceQualityLabel(i: ExperienceQualityInput): number | null;
34
+ /**
35
+ * From this many finished runs, curation judges a procedure by its OBSERVED success
36
+ * rate (`succeeded / runs`) instead of the model: the label is then known, and better
37
+ * than any guess from neighbours. The model only scores procedures with 1–4 runs;
38
+ * never-run ones (0) are kept.
39
+ */
40
+ export declare const QUALITY_OBSERVED_MIN_RUNS = 5;
33
41
  /** Labelled examples for `experience.quality` — only the inputs that have run outcomes. */
34
42
  export declare function experienceQualityExamples(inputs: readonly ExperienceQualityInput[]): MlTrainExample<ExperienceQualityInput>[];
35
43
  export interface ExperienceDuplicate {
@@ -59,14 +67,23 @@ export interface CurationOptions {
59
67
  /** Cosine similarity at or above which a document duplicates a kept one. Default {@link DEFAULT_DEDUPE_THRESHOLD}. */
60
68
  dedupeThreshold?: number;
61
69
  /**
62
- * Quality filter through the runner. A document whose P(high) is below `minPHigh`
63
- * (default 0.5) is dropped; one the runner cannot score (no trained engine) is kept,
64
- * and so is an UNSCORED one (`runs === 0` — never run is unknown, not bad).
70
+ * Quality filter. A document whose P(high) is below `minPHigh` (default 0.5) is
71
+ * dropped. P(high) is the OBSERVED success rate once it has
72
+ * {@link QUALITY_OBSERVED_MIN_RUNS} finished runs; with 1–4 it is the runner's
73
+ * answer, and one the runner cannot score (no trained engine) is kept. An UNSCORED
74
+ * document (`runs === 0` — never run is unknown, not bad) is always kept.
65
75
  */
66
76
  quality?: {
67
77
  ctx: MlRunContext;
68
78
  input: (doc: ExperienceDocument) => ExperienceQualityInput;
69
79
  minPHigh?: number;
80
+ /**
81
+ * The ids of the documents the quality model was trained on, in training order. A
82
+ * document among them is scored LEAVE-ONE-OUT — its own example does not vote, or
83
+ * a kNN would count it at similarity 1. Exact for the kNN engine (the one
84
+ * {@link curatePendingExperience} trains); another engine answers as fitted.
85
+ */
86
+ trainedIds?: readonly string[];
70
87
  };
71
88
  /** Document ids to leave out (e.g. those whose runs `run.anomaly` flagged). */
72
89
  exclude?: ReadonlySet<string>;
@@ -86,14 +103,22 @@ export interface CurationOptions {
86
103
  * trade — 200 embeds of a small Evermind take seconds on a laptop CPU.
87
104
  */
88
105
  export declare const CURATION_KNOWN_LIMIT = 200;
106
+ /** One document curation left out, and why. */
107
+ export interface CurationDrop {
108
+ id: string;
109
+ reason: CuratedOut["reason"];
110
+ of?: string;
111
+ score?: number;
112
+ }
89
113
  export interface CurationResult {
90
114
  kept: ExperienceDocument[];
91
- dropped: {
92
- id: string;
93
- reason: "duplicate" | "low-quality" | "excluded";
94
- of?: string;
95
- score?: number;
96
- }[];
115
+ dropped: CurationDrop[];
116
+ /**
117
+ * Documents an EARLIER curation left out whose verdict still stands (see
118
+ * {@link CuratedOut}) — skipped without being embedded or judged again. Only
119
+ * {@link curatePendingExperience} fills it, from the snapshot's `curated` records.
120
+ */
121
+ alreadyDropped?: CurationDrop[];
97
122
  }
98
123
  /**
99
124
  * Curate documents before they are packed into adaptation passes: drop excluded
@@ -108,15 +133,29 @@ export interface ExperienceCurationSource {
108
133
  episodes: Episode[];
109
134
  skills: Skill[];
110
135
  runs: readonly Run[];
136
+ /** Earlier curations' verdicts (the snapshot's `curated`); a standing one is skipped. */
137
+ curated?: Readonly<Record<string, CuratedOut>>;
111
138
  }
139
+ /**
140
+ * Whether an earlier `curated_out` verdict still stands (see {@link CuratedOut}): a
141
+ * duplicate while what it repeats is learned (in `learnedIds`), a low-quality one
142
+ * while its finished-run count is unchanged. An exclusion is always reconsidered.
143
+ */
144
+ export declare function curationStands(verdict: CuratedOut | undefined, finishedRuns: number, learnedIds: ReadonlySet<string>): boolean;
112
145
  /**
113
146
  * The whole curation step a host runs in front of the adaptation passes, so every
114
- * host wires it the same way: train `experience.quality` on the run outcomes there
115
- * are (it stays untrained below its `minSamples`, and then nothing is dropped for
116
- * quality), then {@link curateExperience} the pending documents with it,
117
- * de-duplicating against each other and against `known` — the already-learned
118
- * documents, MOST RECENTLY LEARNED FIRST; only the first {@link CURATION_KNOWN_LIMIT}
119
- * are embedded, so a host can pass its whole ledger.
147
+ * host wires it the same way:
148
+ *
149
+ * 1. skip each pending document whose earlier `curated_out` verdict still stands
150
+ * ({@link curationStands}) — reported in `alreadyDropped`, never re-embedded;
151
+ * 2. train `experience.quality` on the run outcomes of at most
152
+ * {@link CURATION_KNOWN_LIMIT} scored procedures — the pending ones, then the
153
+ * learned ones most recently learned first (it stays untrained below its
154
+ * `minSamples`, and then only the observed-rate rule drops for quality);
155
+ * 3. {@link curateExperience} the rest with it — leave-one-out for a document in
156
+ * that training set — de-duplicating against each other and against `known`:
157
+ * the already-learned documents, MOST RECENTLY LEARNED FIRST; only the first
158
+ * {@link CURATION_KNOWN_LIMIT} are embedded, so a host can pass its whole ledger.
120
159
  */
121
160
  export declare function curatePendingExperience(pending: readonly ExperienceDocument[], source: ExperienceCurationSource, opts: {
122
161
  embedder: TextEmbedder;
@@ -124,4 +163,10 @@ export declare function curatePendingExperience(pending: readonly ExperienceDocu
124
163
  dedupeThreshold?: number;
125
164
  minPHigh?: number;
126
165
  }): Promise<CurationResult>;
166
+ /**
167
+ * The `curated_out` records a host persists (`ExperienceStore.recordCuration`) for one
168
+ * curation result: each dropped document with its verdict and finished-run count, and
169
+ * the kept ids (whose earlier verdicts clear).
170
+ */
171
+ export declare function curationRecords(result: CurationResult, source: Pick<ExperienceCurationSource, "runs">, at: number): CurationRecord;
127
172
  //# sourceMappingURL=experience.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"experience.d.ts","sourceRoot":"","sources":["../../../src/ml/tasks/experience.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"experience.d.ts","sourceRoot":"","sources":["../../../src/ml/tasks/experience.ts"],"names":[],"mappings":"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"}
@@ -62,6 +62,13 @@ export function experienceQualityLabel(i) {
62
62
  return null;
63
63
  return i.succeeded / i.runs >= 0.5 ? 1 : 0;
64
64
  }
65
+ /**
66
+ * From this many finished runs, curation judges a procedure by its OBSERVED success
67
+ * rate (`succeeded / runs`) instead of the model: the label is then known, and better
68
+ * than any guess from neighbours. The model only scores procedures with 1–4 runs;
69
+ * never-run ones (0) are kept.
70
+ */
71
+ export const QUALITY_OBSERVED_MIN_RUNS = 5;
65
72
  /** Labelled examples for `experience.quality` — only the inputs that have run outcomes. */
66
73
  export function experienceQualityExamples(inputs) {
67
74
  return inputs.flatMap((input) => {
@@ -112,6 +119,16 @@ export class DedupeIndex {
112
119
  * trade — 200 embeds of a small Evermind take seconds on a laptop CPU.
113
120
  */
114
121
  export const CURATION_KNOWN_LIMIT = 200;
122
+ /** A model store whose kNN for `taskId` leaves the point at `index` out of every vote. */
123
+ function leaveOneOut(models, taskId, index) {
124
+ return {
125
+ get: (t, e) => {
126
+ const p = models.get(t, e);
127
+ return t === taskId && p instanceof KnnModel && index < p.size ? p.excluding(index) : p;
128
+ },
129
+ set: (t, e, p) => models.set(t, e, p),
130
+ };
131
+ }
115
132
  /** Memoise an embedder for one call, so curation embeds each text once. */
116
133
  function memoEmbedder(e) {
117
134
  const cache = new Map();
@@ -126,6 +143,28 @@ function memoEmbedder(e) {
126
143
  },
127
144
  };
128
145
  }
146
+ /**
147
+ * P(high) of one quality input, or null when it cannot be judged (never run, or no
148
+ * trained engine). Observed rate from {@link QUALITY_OBSERVED_MIN_RUNS} runs; the
149
+ * runner's answer below that, leave-one-out when the document is training example
150
+ * `trainedIndex`.
151
+ */
152
+ async function qualityScore(input, ctx, trainedIndex) {
153
+ // Never run ⇒ no outcome to judge it by: keep it rather than let a guess drop it.
154
+ if (input.runs <= 0)
155
+ return null;
156
+ if (input.runs >= QUALITY_OBSERVED_MIN_RUNS)
157
+ return input.succeeded / input.runs;
158
+ const runCtx = trainedIndex == null || !ctx.models ? ctx : { ...ctx, models: leaveOneOut(ctx.models, EXPERIENCE_QUALITY_TASK.id, trainedIndex) };
159
+ try {
160
+ return (await runMlTask(EXPERIENCE_QUALITY_TASK.id, input, runCtx)).output.pHigh;
161
+ }
162
+ catch (error) {
163
+ if (!(error instanceof MlEngineUnavailableError))
164
+ throw error;
165
+ return null;
166
+ }
167
+ }
129
168
  /**
130
169
  * Curate documents before they are packed into adaptation passes: drop excluded
131
170
  * ones, low-quality ones (when a quality filter is given), then near-duplicates of
@@ -141,6 +180,7 @@ export async function curateExperience(docs, opts) {
141
180
  const kept = [];
142
181
  const dropped = [];
143
182
  const qctx = opts.quality ? { ...opts.quality.ctx, embedder } : null;
183
+ const trainedAt = new Map((opts.quality?.trainedIds ?? []).map((id, i) => [id, i]));
144
184
  const embedDoc = (doc) => embedder.embed(EXPERIENCE_DEDUPE_TASK.features.text(doc));
145
185
  for (const doc of opts.known ?? []) {
146
186
  index.add(await embedDoc(doc));
@@ -152,20 +192,10 @@ export async function curateExperience(docs, opts) {
152
192
  continue;
153
193
  }
154
194
  if (opts.quality && qctx) {
155
- const input = opts.quality.input(doc);
156
- // Never run ⇒ no outcome to judge it by: keep it rather than let a guess drop it.
157
- if (input.runs > 0) {
158
- try {
159
- const r = await runMlTask(EXPERIENCE_QUALITY_TASK.id, input, qctx);
160
- if (r.output.pHigh < (opts.quality.minPHigh ?? 0.5)) {
161
- dropped.push({ id: doc.id, reason: "low-quality", score: r.output.pHigh });
162
- continue;
163
- }
164
- }
165
- catch (error) {
166
- if (!(error instanceof MlEngineUnavailableError))
167
- throw error;
168
- }
195
+ const pHigh = await qualityScore(opts.quality.input(doc), qctx, trainedAt.get(doc.id));
196
+ if (pHigh != null && pHigh < (opts.quality.minPHigh ?? 0.5)) {
197
+ dropped.push({ id: doc.id, reason: "low-quality", score: pHigh });
198
+ continue;
169
199
  }
170
200
  }
171
201
  const x = await embedDoc(doc);
@@ -180,34 +210,99 @@ export async function curateExperience(docs, opts) {
180
210
  }
181
211
  return { kept, dropped };
182
212
  }
213
+ /**
214
+ * Whether an earlier `curated_out` verdict still stands (see {@link CuratedOut}): a
215
+ * duplicate while what it repeats is learned (in `learnedIds`), a low-quality one
216
+ * while its finished-run count is unchanged. An exclusion is always reconsidered.
217
+ */
218
+ export function curationStands(verdict, finishedRuns, learnedIds) {
219
+ if (!verdict || verdict.status !== "curated_out")
220
+ return false;
221
+ if (verdict.reason === "duplicate")
222
+ return verdict.of != null && learnedIds.has(verdict.of);
223
+ if (verdict.reason === "low-quality")
224
+ return verdict.runs === finishedRuns;
225
+ return false;
226
+ }
183
227
  /**
184
228
  * The whole curation step a host runs in front of the adaptation passes, so every
185
- * host wires it the same way: train `experience.quality` on the run outcomes there
186
- * are (it stays untrained below its `minSamples`, and then nothing is dropped for
187
- * quality), then {@link curateExperience} the pending documents with it,
188
- * de-duplicating against each other and against `known` — the already-learned
189
- * documents, MOST RECENTLY LEARNED FIRST; only the first {@link CURATION_KNOWN_LIMIT}
190
- * are embedded, so a host can pass its whole ledger.
229
+ * host wires it the same way:
230
+ *
231
+ * 1. skip each pending document whose earlier `curated_out` verdict still stands
232
+ * ({@link curationStands}) — reported in `alreadyDropped`, never re-embedded;
233
+ * 2. train `experience.quality` on the run outcomes of at most
234
+ * {@link CURATION_KNOWN_LIMIT} scored procedures — the pending ones, then the
235
+ * learned ones most recently learned first (it stays untrained below its
236
+ * `minSamples`, and then only the observed-rate rule drops for quality);
237
+ * 3. {@link curateExperience} the rest with it — leave-one-out for a document in
238
+ * that training set — de-duplicating against each other and against `known`:
239
+ * the already-learned documents, MOST RECENTLY LEARNED FIRST; only the first
240
+ * {@link CURATION_KNOWN_LIMIT} are embedded, so a host can pass its whole ledger.
191
241
  */
192
242
  export async function curatePendingExperience(pending, source, opts) {
193
243
  const known = opts.known?.slice(0, CURATION_KNOWN_LIMIT);
194
244
  const embedder = memoEmbedder(opts.embedder);
195
245
  const inputs = experienceQualityInputs(source.episodes, source.skills, source.runs);
196
246
  const byId = new Map(inputs.map((i) => [i.doc.id, i]));
247
+ // A document with no joined input (not in the snapshot) counts as never run.
248
+ const inputOf = (doc) => byId.get(doc.id) ?? { doc, steps: 0, runs: 0, succeeded: 0, failed: 0 };
249
+ const learnedIds = new Set((opts.known ?? []).map((d) => d.id));
250
+ const alreadyDropped = [];
251
+ const toCurate = [];
252
+ for (const doc of pending) {
253
+ const verdict = source.curated?.[doc.id];
254
+ if (verdict && curationStands(verdict, inputOf(doc).runs, learnedIds)) {
255
+ alreadyDropped.push({ id: doc.id, reason: verdict.reason, ...(verdict.of != null ? { of: verdict.of } : {}), ...(verdict.score != null ? { score: verdict.score } : {}) });
256
+ }
257
+ else
258
+ toCurate.push(doc);
259
+ }
260
+ // The bounded training set: newest first (pending, then most recently learned),
261
+ // scored only, then reversed — trainMlTask holds out the chronological tail.
262
+ const recentFirst = [...pending, ...(opts.known ?? [])]
263
+ .map((d) => byId.get(d.id))
264
+ .filter((i) => i != null && experienceQualityLabel(i) != null)
265
+ .slice(0, CURATION_KNOWN_LIMIT);
266
+ const train = experienceQualityExamples(recentFirst.reverse());
197
267
  const registry = new MlTaskRegistry();
198
268
  registry.register(EXPERIENCE_QUALITY_TASK);
199
269
  const models = new InMemoryMlModels();
200
- await trainMlTask(EXPERIENCE_QUALITY_TASK, experienceQualityExamples(inputs), { embedder, models });
201
- return curateExperience(pending, {
270
+ const fitted = await trainMlTask(EXPERIENCE_QUALITY_TASK, train, { embedder, models });
271
+ const r = await curateExperience(toCurate, {
202
272
  embedder,
203
273
  ...(known ? { known } : {}),
204
274
  ...(opts.dedupeThreshold != null ? { dedupeThreshold: opts.dedupeThreshold } : {}),
205
275
  quality: {
206
276
  ctx: { registry, mode: "local-only", models },
207
- // A document with no joined input (not in the snapshot) counts as never run.
208
- input: (doc) => byId.get(doc.id) ?? { doc, steps: 0, runs: 0, succeeded: 0, failed: 0 },
277
+ input: inputOf,
209
278
  ...(opts.minPHigh != null ? { minPHigh: opts.minPHigh } : {}),
279
+ // The refit on all examples keeps their order, so kNN point i is train[i].
280
+ ...(fitted ? { trainedIds: train.map((e) => e.input.doc.id) } : {}),
210
281
  },
211
282
  });
283
+ return { ...r, alreadyDropped };
284
+ }
285
+ /**
286
+ * The `curated_out` records a host persists (`ExperienceStore.recordCuration`) for one
287
+ * curation result: each dropped document with its verdict and finished-run count, and
288
+ * the kept ids (whose earlier verdicts clear).
289
+ */
290
+ export function curationRecords(result, source, at) {
291
+ const finished = new Map();
292
+ for (const run of source.runs)
293
+ if (run.status !== "running")
294
+ finished.set(run.skillId, (finished.get(run.skillId) ?? 0) + 1);
295
+ const dropped = {};
296
+ for (const d of result.dropped) {
297
+ dropped[d.id] = {
298
+ status: "curated_out",
299
+ reason: d.reason,
300
+ ...(d.of != null ? { of: d.of } : {}),
301
+ ...(d.score != null ? { score: d.score } : {}),
302
+ runs: finished.get(d.id) ?? 0,
303
+ at,
304
+ };
305
+ }
306
+ return { dropped, kept: result.kept.map((d) => d.id) };
212
307
  }
213
308
  //# sourceMappingURL=experience.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"experience.js","sourceRoot":"","sources":["../../../src/ml/tasks/experience.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"experience.js","sourceRoot":"","sources":["../../../src/ml/tasks/experience.ts"],"names":[],"mappings":"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"}