@seanhogg/builderforce-memory 2026.9.29 → 2026.9.31

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 (118) hide show
  1. package/dist/bridges/AnthropicBridge.d.ts.map +1 -1
  2. package/dist/bridges/AnthropicBridge.js +24 -65
  3. package/dist/bridges/AnthropicBridge.js.map +1 -1
  4. package/dist/bridges/FetchBridge.d.ts +12 -5
  5. package/dist/bridges/FetchBridge.d.ts.map +1 -1
  6. package/dist/bridges/FetchBridge.js +6 -4
  7. package/dist/bridges/FetchBridge.js.map +1 -1
  8. package/dist/bridges/OpenAIBridge.d.ts +17 -4
  9. package/dist/bridges/OpenAIBridge.d.ts.map +1 -1
  10. package/dist/bridges/OpenAIBridge.js +71 -94
  11. package/dist/bridges/OpenAIBridge.js.map +1 -1
  12. package/dist/bridges/TransformerBridge.d.ts +6 -0
  13. package/dist/bridges/TransformerBridge.d.ts.map +1 -1
  14. package/dist/bridges/VertexAIBridge.d.ts.map +1 -1
  15. package/dist/bridges/VertexAIBridge.js +3 -34
  16. package/dist/bridges/VertexAIBridge.js.map +1 -1
  17. package/dist/distillation/DistillationEngine.d.ts +71 -54
  18. package/dist/distillation/DistillationEngine.d.ts.map +1 -1
  19. package/dist/distillation/DistillationEngine.js +112 -95
  20. package/dist/distillation/DistillationEngine.js.map +1 -1
  21. package/dist/distillation/index.d.ts +7 -1
  22. package/dist/distillation/index.d.ts.map +1 -1
  23. package/dist/distillation/index.js +5 -0
  24. package/dist/distillation/index.js.map +1 -1
  25. package/dist/distillation/ports.d.ts +43 -0
  26. package/dist/distillation/ports.d.ts.map +1 -0
  27. package/dist/distillation/ports.js +29 -0
  28. package/dist/distillation/ports.js.map +1 -0
  29. package/dist/eval/EvalHarness.d.ts +2 -1
  30. package/dist/eval/EvalHarness.d.ts.map +1 -1
  31. package/dist/eval/EvalHarness.js +13 -1
  32. package/dist/eval/EvalHarness.js.map +1 -1
  33. package/dist/eval/baseline.d.ts +33 -0
  34. package/dist/eval/baseline.d.ts.map +1 -0
  35. package/dist/eval/baseline.js +41 -0
  36. package/dist/eval/baseline.js.map +1 -0
  37. package/dist/eval/index.d.ts +1 -0
  38. package/dist/eval/index.d.ts.map +1 -1
  39. package/dist/eval/index.js +1 -0
  40. package/dist/eval/index.js.map +1 -1
  41. package/dist/eval/types.d.ts +7 -0
  42. package/dist/eval/types.d.ts.map +1 -1
  43. package/dist/index.d.ts +2 -2
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +1 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/rag/EnterpriseRetriever.d.ts.map +1 -1
  48. package/dist/rag/EnterpriseRetriever.js +2 -1
  49. package/dist/rag/EnterpriseRetriever.js.map +1 -1
  50. package/dist/retrieval/HybridRetriever.d.ts.map +1 -1
  51. package/dist/retrieval/HybridRetriever.js +2 -1
  52. package/dist/retrieval/HybridRetriever.js.map +1 -1
  53. package/dist/retrieval/decay.d.ts +24 -0
  54. package/dist/retrieval/decay.d.ts.map +1 -0
  55. package/dist/retrieval/decay.js +29 -0
  56. package/dist/retrieval/decay.js.map +1 -0
  57. package/dist/retrieval/fusion.d.ts +13 -19
  58. package/dist/retrieval/fusion.d.ts.map +1 -1
  59. package/dist/retrieval/fusion.js +17 -44
  60. package/dist/retrieval/fusion.js.map +1 -1
  61. package/dist/retrieval/index.d.ts +13 -6
  62. package/dist/retrieval/index.d.ts.map +1 -1
  63. package/dist/retrieval/index.js +10 -5
  64. package/dist/retrieval/index.js.map +1 -1
  65. package/dist/retrieval/mmr.d.ts +60 -0
  66. package/dist/retrieval/mmr.d.ts.map +1 -0
  67. package/dist/retrieval/mmr.js +94 -0
  68. package/dist/retrieval/mmr.js.map +1 -0
  69. package/dist/retrieval/weightedFusion.d.ts +64 -0
  70. package/dist/retrieval/weightedFusion.d.ts.map +1 -0
  71. package/dist/retrieval/weightedFusion.js +80 -0
  72. package/dist/retrieval/weightedFusion.js.map +1 -0
  73. package/dist/similarity/index.d.ts +6 -4
  74. package/dist/similarity/index.d.ts.map +1 -1
  75. package/dist/similarity/index.js +5 -3
  76. package/dist/similarity/index.js.map +1 -1
  77. package/dist/wire/chatClient.d.ts +100 -0
  78. package/dist/wire/chatClient.d.ts.map +1 -0
  79. package/dist/wire/chatClient.js +123 -0
  80. package/dist/wire/chatClient.js.map +1 -0
  81. package/dist/wire/index.d.ts +20 -0
  82. package/dist/wire/index.d.ts.map +1 -0
  83. package/dist/wire/index.js +18 -0
  84. package/dist/wire/index.js.map +1 -0
  85. package/dist/wire/sse.d.ts +37 -0
  86. package/dist/wire/sse.d.ts.map +1 -0
  87. package/dist/wire/sse.js +104 -0
  88. package/dist/wire/sse.js.map +1 -0
  89. package/dist/wire/usage.d.ts +46 -0
  90. package/dist/wire/usage.d.ts.map +1 -0
  91. package/dist/wire/usage.js +78 -0
  92. package/dist/wire/usage.js.map +1 -0
  93. package/package.json +11 -3
  94. package/src/bridges/AnthropicBridge.ts +24 -68
  95. package/src/bridges/FetchBridge.ts +15 -6
  96. package/src/bridges/OpenAIBridge.ts +84 -113
  97. package/src/bridges/TransformerBridge.ts +6 -0
  98. package/src/bridges/VertexAIBridge.ts +3 -32
  99. package/src/distillation/DistillationEngine.ts +176 -141
  100. package/src/distillation/index.ts +15 -1
  101. package/src/distillation/ports.ts +55 -0
  102. package/src/eval/EvalHarness.ts +12 -1
  103. package/src/eval/baseline.ts +51 -0
  104. package/src/eval/index.ts +1 -0
  105. package/src/eval/types.ts +7 -0
  106. package/src/index.ts +5 -2
  107. package/src/rag/EnterpriseRetriever.ts +2 -1
  108. package/src/retrieval/HybridRetriever.ts +2 -1
  109. package/src/retrieval/decay.ts +29 -0
  110. package/src/retrieval/fusion.ts +19 -52
  111. package/src/retrieval/index.ts +24 -6
  112. package/src/retrieval/mmr.ts +126 -0
  113. package/src/retrieval/weightedFusion.ts +101 -0
  114. package/src/similarity/index.ts +6 -4
  115. package/src/wire/chatClient.ts +196 -0
  116. package/src/wire/index.ts +20 -0
  117. package/src/wire/sse.ts +96 -0
  118. package/src/wire/usage.ts +95 -0
@@ -22,6 +22,7 @@
22
22
  * that differ from the first-party API, so supply a matching `PriceBook`.
23
23
  */
24
24
  import { SSMError } from '../errors/SSMError.js';
25
+ import { readSseDataFrames } from '../wire/index.js';
25
26
  export class VertexAIBridge {
26
27
  supportsStreaming = true;
27
28
  _projectId;
@@ -64,7 +65,8 @@ export class VertexAIBridge {
64
65
  throw new SSMError('BRIDGE_RESPONSE_INVALID', 'Vertex AI streaming response has no body.');
65
66
  }
66
67
  let usage;
67
- for await (const event of parseSseJson(res.body)) {
68
+ for await (const frame of readSseDataFrames(res.body)) {
69
+ const event = frame;
68
70
  const text = readCandidateText(event);
69
71
  if (text)
70
72
  yield text;
@@ -188,37 +190,4 @@ function readVertexUsage(usage, model) {
188
190
  cachedInputTokens: cached,
189
191
  };
190
192
  }
191
- /** Parses an `alt=sse` stream into JSON events. */
192
- async function* parseSseJson(body) {
193
- const reader = body.getReader();
194
- const decoder = new TextDecoder();
195
- let buffer = '';
196
- try {
197
- while (true) {
198
- const { done, value } = await reader.read();
199
- if (done)
200
- break;
201
- buffer += decoder.decode(value, { stream: true });
202
- const lines = buffer.split('\n');
203
- buffer = lines.pop();
204
- for (const line of lines) {
205
- const trimmed = line.trim();
206
- if (!trimmed.startsWith('data:'))
207
- continue;
208
- const payload = trimmed.slice(5).trim();
209
- if (!payload || payload === '[DONE]')
210
- continue;
211
- try {
212
- yield JSON.parse(payload);
213
- }
214
- catch {
215
- // Skip malformed SSE frames rather than failing the stream.
216
- }
217
- }
218
- }
219
- }
220
- finally {
221
- reader.releaseLock();
222
- }
223
- }
224
193
  //# sourceMappingURL=VertexAIBridge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VertexAIBridge.js","sourceRoot":"","sources":["../../src/bridges/VertexAIBridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VertexAIBridge.js","sourceRoot":"","sources":["../../src/bridges/VertexAIBridge.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,22 @@
1
1
  /**
2
- * DistillationEngine – JS-only online knowledge distillation.
2
+ * DistillationEngine – online knowledge distillation.
3
3
  *
4
- * The core insight: use a transformer as a *teacher* to generate high-quality
5
- * responses, then adapt the SSM *student* on those responses using WSLA.
6
- * This runs entirely in the browser with no Python or full-retraining required.
4
+ * A *teacher* (a frontier model) writes the ideal response; the *student* is adapted
5
+ * on it. Runs with no Python and no full retraining.
7
6
  *
8
7
  * Distillation flow:
9
- * 1. bridge.generate(input) → teacher output
10
- * 2. runtime.adapt(teacherOutput, opts.adapt) → SSM trains on it
11
- * 3. Return both results for inspection
8
+ * 1. teacher.generate(input) → exemplar
9
+ * 2. quality gate (length / already-learned) → skip, or fall back to the caller's text
10
+ * 3. student.adapt(input + exemplar, + rehearsed past exemplars)
11
+ * 4. log the outcome
12
+ *
13
+ * Teacher and student are ports ({@link ./ports}). Passing an `SSMRuntime` and a
14
+ * `TransformerBridge` — the original pairing — still works unchanged.
12
15
  */
13
16
  import type { AdaptOptions, AdaptResult } from '../session/index.js';
14
17
  import type { SSMRuntime } from '../runtime/SSMRuntime.js';
15
- import type { TransformerBridge, BridgeGenerateOptions } from '../bridges/TransformerBridge.js';
18
+ import type { BridgeGenerateOptions } from '../bridges/TransformerBridge.js';
19
+ import { type DistillationStudent, type DistillationTeacher } from './ports.js';
16
20
  export interface QualityGate {
17
21
  /**
18
22
  * Minimum character length of the teacher output.
@@ -20,36 +24,40 @@ export interface QualityGate {
20
24
  */
21
25
  minLength?: number;
22
26
  /**
23
- * Maximum SSM perplexity threshold.
24
- * When the SSM already achieves perplexity below this value on the teacher
27
+ * Maximum student perplexity threshold (needs a student with `evaluate`).
28
+ * When the student already achieves perplexity below this value on the teacher
25
29
  * output, the content is considered already learned and adaptation is skipped.
26
30
  */
27
31
  maxPerplexity?: number;
28
32
  }
29
- export interface DistillOptions {
30
- /**
31
- * Options forwarded to `runtime.adapt()`.
32
- * Default: { wsla: true, epochs: 3 }
33
- * WSLA is preferred because it is fast and targets the selective
34
- * projection rows — exactly the parameters that encode token routing.
35
- */
36
- adapt?: AdaptOptions;
37
- /**
38
- * Options forwarded to `bridge.generate()`.
39
- */
33
+ export interface DistillOptions<O = AdaptOptions> {
34
+ /** Options forwarded to the student's `adapt()`. */
35
+ adapt?: O;
36
+ /** Options forwarded to the teacher's `generate()` (system prompt, max tokens, …). */
40
37
  generate?: BridgeGenerateOptions;
41
38
  /**
42
39
  * Quality gate filters that can skip adaptation for low-quality or
43
40
  * already-learned inputs.
44
41
  */
45
42
  qualityGate?: QualityGate;
43
+ /**
44
+ * What to learn when the teacher yields nothing usable — it threw, or its output
45
+ * failed the `minLength` gate. Without it such an input is skipped (a teacher
46
+ * error is thrown); with it the student learns this text instead, so the
47
+ * contribution is never lost, and the result says it was not distilled.
48
+ */
49
+ fallbackText?: string;
50
+ /**
51
+ * Cap on the characters of `input` that prefix the exemplar in the training text,
52
+ * so a long input can never crowd the exemplar out of the student's window.
53
+ */
54
+ contextChars?: number;
46
55
  }
47
56
  /**
48
- * Catastrophic-forgetting guard (EVM-5). Online WSLA adapts a narrow set of
49
- * weights toward the newest exemplar, which can erode previously-learned
50
- * knowledge. A rehearsal (experience-replay) buffer mitigates this: each adapt
51
- * also trains on a sample of past exemplars, so old knowledge is continually
52
- * reinforced instead of overwritten.
57
+ * Catastrophic-forgetting guard (EVM-5). Online adaptation moves a narrow set of
58
+ * weights toward the newest exemplar, which can erode previously-learned knowledge.
59
+ * A rehearsal (experience-replay) buffer mitigates this: each adapt also trains on a
60
+ * sample of past exemplars, so old knowledge is continually reinforced.
53
61
  */
54
62
  export interface RehearsalOptions {
55
63
  /** Ring-buffer capacity of past exemplars. 0 disables rehearsal. Default 0. */
@@ -59,26 +67,31 @@ export interface RehearsalOptions {
59
67
  /** Deterministic sampling seed. Default 1. */
60
68
  seed?: number;
61
69
  }
62
- export interface DistillResult {
70
+ /** Why an input was not learned from a teacher exemplar. */
71
+ export type DistillSkipReason = 'low_quality' | 'already_learned' | 'teacher_failed';
72
+ export interface DistillResult<R = AdaptResult> {
63
73
  /** The input prompt that was distilled. */
64
74
  input: string;
65
- /** The teacher's (transformer bridge) response to the input. */
75
+ /** The teacher's response to the input ('' when the teacher failed). */
66
76
  teacherOutput: string;
67
- /** The adapt() result from training the SSM on the teacher output. */
68
- adaptResult: AdaptResult;
69
- /** Whether adaptation was skipped by the quality gate. */
77
+ /** The student's result — its skipped result when nothing was adapted. */
78
+ adaptResult: R;
79
+ /** True when nothing was adapted at all. */
70
80
  skipped?: boolean;
71
- /** Reason adaptation was skipped, if applicable. */
72
- skipReason?: string;
81
+ /** True when the student learned the teacher's exemplar (not a fallback). */
82
+ distilled: boolean;
83
+ /** Why the exemplar was not learned, when it was not. */
84
+ skipReason?: DistillSkipReason;
85
+ /** What the teacher threw, when `skipReason` is `teacher_failed`. */
86
+ teacherError?: unknown;
73
87
  /** Number of past exemplars rehearsed alongside this one (EVM-5). */
74
88
  rehearsed?: number;
75
89
  /** Student's pre-adapt perplexity on the teacher output, when the quality gate
76
- * measured it — a "how novel was this exemplar" signal. Kept even when the
77
- * exemplar was NOT skipped (previously discarded on the trained path). */
90
+ * measured it — a "how novel was this exemplar" signal. */
78
91
  gatePerplexity?: number;
79
92
  }
80
- export interface DistillBatchResult {
81
- results: DistillResult[];
93
+ export interface DistillBatchResult<R = AdaptResult> {
94
+ results: DistillResult<R>[];
82
95
  /** Total number of adapt epochs run across all inputs. */
83
96
  totalEpochs: number;
84
97
  /** Wall-clock time for the entire batch in milliseconds. */
@@ -89,29 +102,29 @@ export interface DistillationLog {
89
102
  input: string;
90
103
  teacherOutputLength: number;
91
104
  skipped: boolean;
92
- skipReason?: string;
105
+ /** True when the exemplar (not a fallback) was learned. */
106
+ distilled: boolean;
107
+ skipReason?: DistillSkipReason;
93
108
  finalLoss?: number;
94
109
  epochs: number;
95
110
  /** Pre-adapt perplexity on the teacher output (when the quality gate measured it). */
96
111
  gatePerplexity?: number;
97
112
  }
98
- export declare class DistillationEngine {
99
- private readonly _runtime;
100
- private readonly _bridge;
113
+ export declare class DistillationEngine<R = AdaptResult, O = AdaptOptions> {
114
+ private readonly _student;
115
+ private readonly _teacher;
101
116
  private readonly _log;
102
117
  private readonly _rehearsalSize;
103
118
  private readonly _rehearsalK;
104
119
  private readonly _rehearsal;
105
120
  private _rehearsalState;
106
121
  /**
107
- * @param runtime The SSMRuntime whose SSM will be trained as the student.
108
- * @param bridge The transformer bridge acting as teacher.
109
- * A bridge must be provided — distillation requires one.
110
- * @param rehearsal Optional experience-replay config (EVM-5). When
111
- * `bufferSize > 0`, each adapt also trains on a sample of past
112
- * exemplars to guard against catastrophic forgetting.
122
+ * @param student What learns: an `SSMRuntime`, or any {@link DistillationStudent}.
123
+ * @param teacher What teaches: any `TransformerBridge`, or any {@link DistillationTeacher}.
124
+ * @param rehearsal Optional experience-replay config (EVM-5). When `bufferSize > 0`,
125
+ * each adapt also trains on a sample of past exemplars.
113
126
  */
114
- constructor(runtime: SSMRuntime, bridge: TransformerBridge, rehearsal?: RehearsalOptions);
127
+ constructor(student: SSMRuntime | DistillationStudent<R, O>, teacher: DistillationTeacher, rehearsal?: RehearsalOptions);
115
128
  /** Current number of exemplars held in the rehearsal buffer (EVM-5). */
116
129
  getRehearsalBufferSize(): number;
117
130
  /** Deterministic [0,1) draw for reproducible rehearsal sampling. */
@@ -123,22 +136,26 @@ export declare class DistillationEngine {
123
136
  * Runs a single distillation pass:
124
137
  * 1. Teacher generates a response for `input`
125
138
  * 2. Quality gate is evaluated (if configured)
126
- * 3. SSM is adapted on the teacher's output (WSLA by default)
139
+ * 3. Student is adapted on `input` + the teacher's output
127
140
  *
128
- * The training signal is the teacher's full response — this teaches the
129
- * SSM what a good response to that prompt looks like, without requiring
130
- * labelled data or a loss function beyond the standard LM objective.
141
+ * The training signal is the teacher's full response — this teaches the student
142
+ * what a good response to that prompt looks like, without labelled data.
131
143
  */
132
- distill(input: string, opts?: DistillOptions): Promise<DistillResult>;
144
+ distill(input: string, opts?: DistillOptions<O>): Promise<DistillResult<R>>;
133
145
  /**
134
146
  * Runs distillation for each input in sequence.
135
147
  * Aggregate statistics are returned alongside individual results.
136
148
  */
137
- distillBatch(inputs: string[], opts?: DistillOptions): Promise<DistillBatchResult>;
149
+ distillBatch(inputs: string[], opts?: DistillOptions<O>): Promise<DistillBatchResult<R>>;
138
150
  /**
139
151
  * Returns a copy of the in-memory distillation log (last 200 entries).
140
152
  */
141
153
  getLog(): DistillationLog[];
154
+ private _adapt;
155
+ /** No exemplar worth learning: learn the caller's fallback text instead. */
156
+ private _learnFallback;
157
+ /** Nothing adapted. */
158
+ private _skip;
142
159
  private _appendLog;
143
160
  }
144
161
  //# sourceMappingURL=DistillationEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DistillationEngine.d.ts","sourceRoot":"","sources":["../../src/distillation/DistillationEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DistillationEngine.d.ts","sourceRoot":"","sources":["../../src/distillation/DistillationEngine.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,26 @@
1
1
  /**
2
- * DistillationEngine – JS-only online knowledge distillation.
2
+ * DistillationEngine – online knowledge distillation.
3
3
  *
4
- * The core insight: use a transformer as a *teacher* to generate high-quality
5
- * responses, then adapt the SSM *student* on those responses using WSLA.
6
- * This runs entirely in the browser with no Python or full-retraining required.
4
+ * A *teacher* (a frontier model) writes the ideal response; the *student* is adapted
5
+ * on it. Runs with no Python and no full retraining.
7
6
  *
8
7
  * Distillation flow:
9
- * 1. bridge.generate(input) → teacher output
10
- * 2. runtime.adapt(teacherOutput, opts.adapt) → SSM trains on it
11
- * 3. Return both results for inspection
8
+ * 1. teacher.generate(input) → exemplar
9
+ * 2. quality gate (length / already-learned) → skip, or fall back to the caller's text
10
+ * 3. student.adapt(input + exemplar, + rehearsed past exemplars)
11
+ * 4. log the outcome
12
+ *
13
+ * Teacher and student are ports ({@link ./ports}). Passing an `SSMRuntime` and a
14
+ * `TransformerBridge` — the original pairing — still works unchanged.
12
15
  */
13
16
  import { SSMError } from '../errors/SSMError.js';
17
+ import { isDistillationStudent, ssmRuntimeStudent } from './ports.js';
14
18
  /** Maximum number of distillation log entries to retain in memory. */
15
19
  const MAX_LOG_ENTRIES = 200;
16
20
  // ── DistillationEngine ────────────────────────────────────────────────────────
17
21
  export class DistillationEngine {
18
- _runtime;
19
- _bridge;
22
+ _student;
23
+ _teacher;
20
24
  _log = [];
21
25
  // ── Rehearsal buffer (EVM-5 catastrophic-forgetting guard) ─────────────────
22
26
  _rehearsalSize;
@@ -24,16 +28,16 @@ export class DistillationEngine {
24
28
  _rehearsal = [];
25
29
  _rehearsalState;
26
30
  /**
27
- * @param runtime The SSMRuntime whose SSM will be trained as the student.
28
- * @param bridge The transformer bridge acting as teacher.
29
- * A bridge must be provided — distillation requires one.
30
- * @param rehearsal Optional experience-replay config (EVM-5). When
31
- * `bufferSize > 0`, each adapt also trains on a sample of past
32
- * exemplars to guard against catastrophic forgetting.
31
+ * @param student What learns: an `SSMRuntime`, or any {@link DistillationStudent}.
32
+ * @param teacher What teaches: any `TransformerBridge`, or any {@link DistillationTeacher}.
33
+ * @param rehearsal Optional experience-replay config (EVM-5). When `bufferSize > 0`,
34
+ * each adapt also trains on a sample of past exemplars.
33
35
  */
34
- constructor(runtime, bridge, rehearsal = {}) {
35
- this._runtime = runtime;
36
- this._bridge = bridge;
36
+ constructor(student, teacher, rehearsal = {}) {
37
+ this._student = isDistillationStudent(student)
38
+ ? student
39
+ : ssmRuntimeStudent(student);
40
+ this._teacher = teacher;
37
41
  this._rehearsalSize = Math.max(0, rehearsal.bufferSize ?? 0);
38
42
  this._rehearsalK = Math.max(0, rehearsal.sampleK ?? 2);
39
43
  this._rehearsalState = (rehearsal.seed ?? 1) >>> 0 || 1;
@@ -73,102 +77,65 @@ export class DistillationEngine {
73
77
  * Runs a single distillation pass:
74
78
  * 1. Teacher generates a response for `input`
75
79
  * 2. Quality gate is evaluated (if configured)
76
- * 3. SSM is adapted on the teacher's output (WSLA by default)
80
+ * 3. Student is adapted on `input` + the teacher's output
77
81
  *
78
- * The training signal is the teacher's full response — this teaches the
79
- * SSM what a good response to that prompt looks like, without requiring
80
- * labelled data or a loss function beyond the standard LM objective.
82
+ * The training signal is the teacher's full response — this teaches the student
83
+ * what a good response to that prompt looks like, without labelled data.
81
84
  */
82
85
  async distill(input, opts = {}) {
83
- const adaptOpts = {
84
- wsla: true,
85
- epochs: 3,
86
- ...opts.adapt,
87
- };
88
- let teacherOutput;
86
+ let teacherOutput = '';
87
+ let teacherError;
89
88
  try {
90
- teacherOutput = await this._bridge.generate(input, opts.generate);
89
+ teacherOutput = await this._teacher.generate(input, opts.generate);
91
90
  }
92
91
  catch (err) {
93
- throw new SSMError('DISTILL_FAILED', `Teacher bridge failed to generate for distillation: ${err instanceof Error ? err.message : String(err)}`, err);
92
+ if (opts.fallbackText === undefined) {
93
+ throw new SSMError('DISTILL_FAILED', `Teacher bridge failed to generate for distillation: ${err instanceof Error ? err.message : String(err)}`, err);
94
+ }
95
+ teacherError = err;
96
+ }
97
+ if (teacherError !== undefined) {
98
+ return this._learnFallback(input, '', 'teacher_failed', opts, teacherError);
94
99
  }
95
100
  // ── Quality gate ──────────────────────────────────────────────────────
96
- // Pre-adapt novelty of this exemplar (student perplexity on the teacher output).
97
- // Measured by the gate below; hoisted so it survives to the TRAINED path instead
98
- // of being dropped for exactly the exemplars we go on to learn from.
101
+ // Pre-adapt novelty of this exemplar, hoisted so it survives to the TRAINED path.
99
102
  let gatePerplexity;
100
- if (opts.qualityGate) {
101
- const gate = opts.qualityGate;
102
- if (gate.minLength != null && teacherOutput.length < gate.minLength) {
103
- const result = {
104
- input,
105
- teacherOutput,
106
- adaptResult: { losses: [], epochCount: 0, durationMs: 0 },
107
- skipped: true,
108
- skipReason: 'low_quality',
109
- };
110
- this._appendLog({
111
- input,
112
- teacherOutputLength: teacherOutput.length,
113
- skipped: true,
114
- skipReason: 'low_quality',
115
- epochs: 0,
116
- });
117
- return result;
103
+ const gate = opts.qualityGate;
104
+ if (gate?.minLength != null && teacherOutput.length < gate.minLength) {
105
+ if (opts.fallbackText !== undefined)
106
+ return this._learnFallback(input, teacherOutput, 'low_quality', opts);
107
+ return this._skip(input, teacherOutput, 'low_quality');
108
+ }
109
+ if (gate?.maxPerplexity != null && this._student.evaluate) {
110
+ try {
111
+ gatePerplexity = await this._student.evaluate(teacherOutput);
118
112
  }
119
- if (gate.maxPerplexity != null) {
120
- try {
121
- gatePerplexity = await this._runtime.evaluate(teacherOutput);
122
- }
123
- catch {
124
- // Evaluation failure is non-fatal — proceed with adaptation
125
- }
126
- if (gatePerplexity != null && gatePerplexity < gate.maxPerplexity) {
127
- const result = {
128
- input,
129
- teacherOutput,
130
- adaptResult: { losses: [], epochCount: 0, durationMs: 0 },
131
- skipped: true,
132
- skipReason: 'already_learned',
133
- gatePerplexity,
134
- };
135
- this._appendLog({
136
- input,
137
- teacherOutputLength: teacherOutput.length,
138
- skipped: true,
139
- skipReason: 'already_learned',
140
- epochs: 0,
141
- gatePerplexity,
142
- });
143
- return result;
144
- }
113
+ catch {
114
+ // Evaluation failure is non-fatal — proceed with adaptation
115
+ }
116
+ if (gatePerplexity != null && gatePerplexity < gate.maxPerplexity) {
117
+ return this._skip(input, teacherOutput, 'already_learned', gatePerplexity);
145
118
  }
146
119
  }
147
- // Train the SSM on the teacher's output, prepending the input so the model
148
- // learns the (prompt → response) mapping. EVM-5: interleave a sample of
149
- // past exemplars (experience replay) so this adapt reinforces prior
150
- // knowledge instead of overwriting it (catastrophic-forgetting guard).
120
+ // Train on the (prompt → response) mapping. EVM-5: interleave a sample of past
121
+ // exemplars (experience replay) so this adapt reinforces prior knowledge
122
+ // instead of overwriting it.
151
123
  const rehearsed = this._sampleRehearsal();
152
- const pairs = [...rehearsed, { input, teacherOutput }].map((p) => `${p.input}\n${p.teacherOutput}`);
153
- const trainingText = pairs.join('\n\n');
154
- let adaptResult;
155
- try {
156
- adaptResult = await this._runtime.adapt(trainingText, adaptOpts);
157
- }
158
- catch (err) {
159
- throw new SSMError('DISTILL_FAILED', `SSM adaptation failed during distillation: ${err instanceof Error ? err.message : String(err)}`, err);
160
- }
161
- // Record the new exemplar for future rehearsal.
124
+ const context = (i) => (opts.contextChars != null ? i.trim().slice(0, opts.contextChars) : i);
125
+ const trainingText = [...rehearsed, { input, teacherOutput }]
126
+ .map((p) => `${context(p.input)}\n${p.teacherOutput}`)
127
+ .join('\n\n');
128
+ const adaptResult = await this._adapt(trainingText, opts);
162
129
  this._pushRehearsal(input, teacherOutput);
163
130
  this._appendLog({
164
131
  input,
165
132
  teacherOutputLength: teacherOutput.length,
166
133
  skipped: false,
167
- finalLoss: adaptResult.losses.at(-1),
168
- epochs: adaptResult.epochCount,
134
+ distilled: true,
135
+ ...this._student.describe(adaptResult),
169
136
  gatePerplexity,
170
137
  });
171
- return { input, teacherOutput, adaptResult, skipped: false, rehearsed: rehearsed.length, gatePerplexity };
138
+ return { input, teacherOutput, adaptResult, skipped: false, distilled: true, rehearsed: rehearsed.length, gatePerplexity };
172
139
  }
173
140
  /**
174
141
  * Runs distillation for each input in sequence.
@@ -181,7 +148,7 @@ export class DistillationEngine {
181
148
  for (const input of inputs) {
182
149
  const result = await this.distill(input, opts);
183
150
  results.push(result);
184
- totalEpochs += result.adaptResult.epochCount;
151
+ totalEpochs += this._student.describe(result.adaptResult).epochs;
185
152
  }
186
153
  return {
187
154
  results,
@@ -196,6 +163,56 @@ export class DistillationEngine {
196
163
  return this._log.slice();
197
164
  }
198
165
  // ── Private helpers ───────────────────────────────────────────────────────
166
+ async _adapt(trainingText, opts) {
167
+ try {
168
+ return await this._student.adapt(trainingText, opts.adapt);
169
+ }
170
+ catch (err) {
171
+ throw new SSMError('DISTILL_FAILED', `SSM adaptation failed during distillation: ${err instanceof Error ? err.message : String(err)}`, err);
172
+ }
173
+ }
174
+ /** No exemplar worth learning: learn the caller's fallback text instead. */
175
+ async _learnFallback(input, teacherOutput, skipReason, opts, teacherError) {
176
+ const adaptResult = await this._adapt(opts.fallbackText, opts);
177
+ this._appendLog({
178
+ input,
179
+ teacherOutputLength: teacherOutput.length,
180
+ skipped: false,
181
+ distilled: false,
182
+ skipReason,
183
+ ...this._student.describe(adaptResult),
184
+ });
185
+ return {
186
+ input,
187
+ teacherOutput,
188
+ adaptResult,
189
+ skipped: false,
190
+ distilled: false,
191
+ skipReason,
192
+ ...(teacherError !== undefined ? { teacherError } : {}),
193
+ };
194
+ }
195
+ /** Nothing adapted. */
196
+ _skip(input, teacherOutput, skipReason, gatePerplexity) {
197
+ this._appendLog({
198
+ input,
199
+ teacherOutputLength: teacherOutput.length,
200
+ skipped: true,
201
+ distilled: false,
202
+ skipReason,
203
+ epochs: 0,
204
+ gatePerplexity,
205
+ });
206
+ return {
207
+ input,
208
+ teacherOutput,
209
+ adaptResult: this._student.skippedResult(),
210
+ skipped: true,
211
+ distilled: false,
212
+ skipReason,
213
+ ...(gatePerplexity !== undefined ? { gatePerplexity } : {}),
214
+ };
215
+ }
199
216
  _appendLog(entry) {
200
217
  this._log.push({ timestamp: Date.now(), ...entry });
201
218
  if (this._log.length > MAX_LOG_ENTRIES) {
@@ -1 +1 @@
1
- {"version":3,"file":"DistillationEngine.js","sourceRoot":"","sources":["../../src/distillation/DistillationEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DistillationEngine.js","sourceRoot":"","sources":["../../src/distillation/DistillationEngine.ts"],"names":[],"mappings":"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"}