@seanhogg/builderforce-memory-engine 2026.7.14 → 2026.9.28
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.
- package/README.md +14 -0
- package/dist/bench/adaptation.d.ts +57 -0
- package/dist/bench/adaptation.d.ts.map +1 -0
- package/dist/bench/adaptation.js +167 -0
- package/dist/bench/adaptation.js.map +1 -0
- package/dist/bench/harness.d.ts +2 -0
- package/dist/bench/harness.d.ts.map +1 -1
- package/dist/bench/harness.js +1 -1
- package/dist/bench/harness.js.map +1 -1
- package/dist/bench/index.d.ts +5 -3
- package/dist/bench/index.d.ts.map +1 -1
- package/dist/bench/index.js +4 -2
- package/dist/bench/index.js.map +1 -1
- package/dist/bench/types.d.ts +88 -0
- package/dist/bench/types.d.ts.map +1 -1
- package/dist/evermind/adapt.d.ts +40 -0
- package/dist/evermind/adapt.d.ts.map +1 -0
- package/dist/evermind/adapt.js +25 -0
- package/dist/evermind/adapt.js.map +1 -0
- package/dist/evermind/delta_wire.d.ts +43 -0
- package/dist/evermind/delta_wire.d.ts.map +1 -0
- package/dist/evermind/delta_wire.js +94 -0
- package/dist/evermind/delta_wire.js.map +1 -0
- package/dist/evermind/eval.d.ts +31 -0
- package/dist/evermind/eval.d.ts.map +1 -0
- package/dist/evermind/eval.js +36 -0
- package/dist/evermind/eval.js.map +1 -0
- package/dist/evermind/index.d.ts +16 -0
- package/dist/evermind/index.d.ts.map +1 -0
- package/dist/evermind/index.js +11 -0
- package/dist/evermind/index.js.map +1 -0
- package/dist/evermind/merge.d.ts +21 -0
- package/dist/evermind/merge.d.ts.map +1 -0
- package/dist/evermind/merge.js +79 -0
- package/dist/evermind/merge.js.map +1 -0
- package/dist/{moe/moe_package.d.ts → evermind/package.d.ts} +55 -5
- package/dist/evermind/package.d.ts.map +1 -0
- package/dist/{moe/moe_package.js → evermind/package.js} +118 -19
- package/dist/evermind/package.js.map +1 -0
- package/dist/import/foreign/adapter.d.ts +59 -0
- package/dist/import/foreign/adapter.d.ts.map +1 -0
- package/dist/import/foreign/adapter.js +76 -0
- package/dist/import/foreign/adapter.js.map +1 -0
- package/dist/import/foreign/apply.d.ts +23 -0
- package/dist/import/foreign/apply.d.ts.map +1 -0
- package/dist/import/foreign/apply.js +43 -0
- package/dist/import/foreign/apply.js.map +1 -0
- package/dist/import/foreign/codestral_mamba.d.ts +57 -0
- package/dist/import/foreign/codestral_mamba.d.ts.map +1 -0
- package/dist/import/foreign/codestral_mamba.js +174 -0
- package/dist/import/foreign/codestral_mamba.js.map +1 -0
- package/dist/import/foreign/falcon_mamba.d.ts +51 -0
- package/dist/import/foreign/falcon_mamba.d.ts.map +1 -0
- package/dist/import/foreign/falcon_mamba.js +131 -0
- package/dist/import/foreign/falcon_mamba.js.map +1 -0
- package/dist/import/foreign/index.d.ts +21 -0
- package/dist/import/foreign/index.d.ts.map +1 -0
- package/dist/import/foreign/index.js +18 -0
- package/dist/import/foreign/index.js.map +1 -0
- package/dist/import/foreign/plan.d.ts +122 -0
- package/dist/import/foreign/plan.d.ts.map +1 -0
- package/dist/import/foreign/plan.js +171 -0
- package/dist/import/foreign/plan.js.map +1 -0
- package/dist/import/foreign/registry.d.ts +35 -0
- package/dist/import/foreign/registry.d.ts.map +1 -0
- package/dist/import/foreign/registry.js +89 -0
- package/dist/import/foreign/registry.js.map +1 -0
- package/dist/import/index.d.ts +7 -0
- package/dist/import/index.d.ts.map +1 -1
- package/dist/import/index.js +7 -0
- package/dist/import/index.js.map +1 -1
- package/dist/index.d.ts +25 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -9
- package/dist/index.js.map +1 -1
- package/dist/kernels/selective_scan.d.ts.map +1 -1
- package/dist/kernels/selective_scan.js +15 -9
- package/dist/kernels/selective_scan.js.map +1 -1
- package/dist/kernels/slice.d.ts +26 -0
- package/dist/kernels/slice.d.ts.map +1 -0
- package/dist/kernels/slice.js +52 -0
- package/dist/kernels/slice.js.map +1 -0
- package/dist/kernels/weight_update.d.ts.map +1 -1
- package/dist/kernels/weight_update.js +30 -4
- package/dist/kernels/weight_update.js.map +1 -1
- package/dist/lm/evermind_lm.d.ts +110 -1
- package/dist/lm/evermind_lm.d.ts.map +1 -1
- package/dist/lm/evermind_lm.js +220 -35
- package/dist/lm/evermind_lm.js.map +1 -1
- package/dist/lm/index.d.ts +4 -2
- package/dist/lm/index.d.ts.map +1 -1
- package/dist/lm/index.js +3 -1
- package/dist/lm/index.js.map +1 -1
- package/dist/lm/text_embedder.d.ts +55 -0
- package/dist/lm/text_embedder.d.ts.map +1 -0
- package/dist/lm/text_embedder.js +62 -0
- package/dist/lm/text_embedder.js.map +1 -0
- package/dist/model/attention_block.d.ts.map +1 -1
- package/dist/model/attention_block.js +9 -5
- package/dist/model/attention_block.js.map +1 -1
- package/dist/model/mamba1_block.d.ts.map +1 -1
- package/dist/model/mamba1_block.js +28 -12
- package/dist/model/mamba1_block.js.map +1 -1
- package/dist/model/mamba2_block.d.ts.map +1 -1
- package/dist/model/mamba2_block.js +14 -9
- package/dist/model/mamba2_block.js.map +1 -1
- package/dist/model/mamba3_block.d.ts.map +1 -1
- package/dist/model/mamba3_block.js +14 -9
- package/dist/model/mamba3_block.js.map +1 -1
- package/dist/moe/index.d.ts +0 -2
- package/dist/moe/index.d.ts.map +1 -1
- package/dist/moe/index.js +0 -1
- package/dist/moe/index.js.map +1 -1
- package/dist/optim/adamw.d.ts +32 -0
- package/dist/optim/adamw.d.ts.map +1 -1
- package/dist/optim/adamw.js +34 -0
- package/dist/optim/adamw.js.map +1 -1
- package/dist/tokenizer/bpe.d.ts +28 -0
- package/dist/tokenizer/bpe.d.ts.map +1 -1
- package/dist/tokenizer/bpe.js +47 -0
- package/dist/tokenizer/bpe.js.map +1 -1
- package/dist/training/cpu_ops.d.ts +44 -0
- package/dist/training/cpu_ops.d.ts.map +1 -0
- package/dist/training/cpu_ops.js +111 -0
- package/dist/training/cpu_ops.js.map +1 -0
- package/dist/training/mamba1_cpu.d.ts +109 -0
- package/dist/training/mamba1_cpu.d.ts.map +1 -0
- package/dist/training/mamba1_cpu.js +316 -0
- package/dist/training/mamba1_cpu.js.map +1 -0
- package/dist/training/model_cpu.d.ts +100 -0
- package/dist/training/model_cpu.d.ts.map +1 -0
- package/dist/training/model_cpu.js +252 -0
- package/dist/training/model_cpu.js.map +1 -0
- package/dist/training/trainer.d.ts +156 -16
- package/dist/training/trainer.d.ts.map +1 -1
- package/dist/training/trainer.js +327 -101
- package/dist/training/trainer.js.map +1 -1
- package/dist/utils/base64.d.ts +12 -0
- package/dist/utils/base64.d.ts.map +1 -0
- package/dist/utils/base64.js +27 -0
- package/dist/utils/base64.js.map +1 -0
- package/package.json +3 -1
- package/src/bench/adaptation.ts +180 -0
- package/src/bench/harness.ts +1 -1
- package/src/bench/index.ts +13 -2
- package/src/bench/types.ts +93 -0
- package/src/evermind/adapt.ts +61 -0
- package/src/evermind/delta_wire.ts +114 -0
- package/src/evermind/eval.ts +62 -0
- package/src/evermind/index.ts +32 -0
- package/src/evermind/merge.ts +106 -0
- package/src/{moe/moe_package.ts → evermind/package.ts} +148 -17
- package/src/import/foreign/adapter.ts +106 -0
- package/src/import/foreign/apply.ts +54 -0
- package/src/import/foreign/codestral_mamba.ts +224 -0
- package/src/import/foreign/falcon_mamba.ts +173 -0
- package/src/import/foreign/index.ts +37 -0
- package/src/import/foreign/plan.ts +294 -0
- package/src/import/foreign/registry.ts +126 -0
- package/src/import/index.ts +30 -0
- package/src/index.ts +94 -13
- package/src/kernels/selective_scan.ts +15 -9
- package/src/kernels/slice.ts +64 -0
- package/src/kernels/weight_update.ts +30 -4
- package/src/lm/evermind_lm.ts +244 -34
- package/src/lm/index.ts +6 -2
- package/src/lm/text_embedder.ts +84 -0
- package/src/model/attention_block.ts +9 -5
- package/src/model/mamba1_block.ts +28 -12
- package/src/model/mamba2_block.ts +14 -9
- package/src/model/mamba3_block.ts +14 -9
- package/src/moe/index.ts +0 -9
- package/src/optim/adamw.ts +60 -0
- package/src/tokenizer/bpe.ts +55 -0
- package/src/training/cpu_ops.ts +127 -0
- package/src/training/mamba1_cpu.ts +421 -0
- package/src/training/model_cpu.ts +360 -0
- package/src/training/trainer.ts +397 -154
- package/src/utils/base64.ts +28 -0
- package/dist/model/mamba_block.d.ts +0 -64
- package/dist/model/mamba_block.d.ts.map +0 -1
- package/dist/model/mamba_block.js +0 -303
- package/dist/model/mamba_block.js.map +0 -1
- package/dist/moe/moe_package.d.ts.map +0 -1
- package/dist/moe/moe_package.js.map +0 -1
- package/src/model/mamba_block.ts +0 -401
package/README.md
CHANGED
|
@@ -65,6 +65,20 @@ Metrics: held-out perplexity, bits-per-token, top-1/top-k next-token accuracy, a
|
|
|
65
65
|
|
|
66
66
|
---
|
|
67
67
|
|
|
68
|
+
## Evermind learning pipeline
|
|
69
|
+
|
|
70
|
+
`src/evermind/` is the engine half of the Evermind module. Every learner that contributes to a shared Evermind runs the same code:
|
|
71
|
+
|
|
72
|
+
| Export | What it does |
|
|
73
|
+
|---|---|
|
|
74
|
+
| `EvermindModelPackage` | The portable `.evermind` artifact (manifest, checkpoint, integrity, optional tokenizer and codec). |
|
|
75
|
+
| `adaptAndDiff(pkg, tokenizer, text)` | Fits a private copy of a version on some text and returns the sparse diff, final loss and window count. |
|
|
76
|
+
| `parseDeltaLearnPayload` / `buildDeltaLearnPayload` / `decodeDeltaPayload` | The wire contract of a pushed weight delta, including the `MAX_DELTA_B64_CHARS` cap. |
|
|
77
|
+
| `deltaUnusableReason(delta, base)` | Structural check a delta must pass before it may join a merge batch. |
|
|
78
|
+
| `mergeCheckpointDiffs(base, diffs, weights?)` | FedAvg-over-contributors merge of element-granular deltas. |
|
|
79
|
+
| `meanEvalLoss` | Forward-only pre/post-merge regression check. |
|
|
80
|
+
| `bytesToBase64` / `base64ToBytes` | Isomorphic binary codec used by the wire contract. |
|
|
81
|
+
|
|
68
82
|
## Installation
|
|
69
83
|
|
|
70
84
|
```bash
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bench/adaptation.ts — what does ON-PREM ADAPTATION COST?
|
|
3
|
+
*
|
|
4
|
+
* The rest of the harness measures how GOOD a model is. This measures how much
|
|
5
|
+
* one write-through adaptation COSTS, which is the number an on-prem operator
|
|
6
|
+
* needs before turning learning on: every run the host adapts on is CPU it is not
|
|
7
|
+
* spending on the agent.
|
|
8
|
+
*
|
|
9
|
+
* It became measurable only once the gradient path was real. Before that a "fit"
|
|
10
|
+
* was a forward pass plus an inert optimiser step, so any timing was a timing of
|
|
11
|
+
* the wrong thing.
|
|
12
|
+
*
|
|
13
|
+
* The three knobs are the ones the host actually exposes
|
|
14
|
+
* (`agent-runtime/src/infra/project-evermind-delta.ts`, and the cloud
|
|
15
|
+
* coordinator's identical constants):
|
|
16
|
+
*
|
|
17
|
+
* • WINDOW — `ADAPT_WINDOW_TOKENS = 64`, the length of each training sequence
|
|
18
|
+
* the run text is chunked into;
|
|
19
|
+
* • EPOCHS — `new EvermindLMTrainer(lm, { epochs: 1 })`, passes per contribution;
|
|
20
|
+
* • SKIP — `MIN_TEXT_CHARS = 20`, the floor below which a contribution is
|
|
21
|
+
* dropped before any work happens; expressed here as how OFTEN the
|
|
22
|
+
* floor fires.
|
|
23
|
+
*
|
|
24
|
+
* Two quantities are reported, and the difference matters. `positionsEvaluated`
|
|
25
|
+
* comes from the model's own counter: exact, integer, hardware-independent — the
|
|
26
|
+
* thing a curve should be asserted on. `elapsedMs` is what those positions cost on
|
|
27
|
+
* THIS machine, which is what an operator budgets with and what no assertion
|
|
28
|
+
* should depend on.
|
|
29
|
+
*/
|
|
30
|
+
import type { AdaptationCostOptions, AdaptationCostReport } from "./types.js";
|
|
31
|
+
/**
|
|
32
|
+
* Chunk token ids into fixed-length training windows, dropping any tail too short
|
|
33
|
+
* to have a next-token target.
|
|
34
|
+
*
|
|
35
|
+
* A byte-for-byte mirror of the host's own `windows()` helper, so a benchmarked
|
|
36
|
+
* fit sees exactly the batches a production adaptation would.
|
|
37
|
+
*/
|
|
38
|
+
export declare function tokenWindows(ids: number[], size: number): number[][];
|
|
39
|
+
/**
|
|
40
|
+
* How many of `requests` actually adapt at a given skip rate.
|
|
41
|
+
*
|
|
42
|
+
* Deterministic rather than sampled: a benchmark whose cost curve moved with an
|
|
43
|
+
* RNG would be measuring the RNG.
|
|
44
|
+
*/
|
|
45
|
+
export declare function adaptationsAfterSkip(requests: number, skipRate: number): number;
|
|
46
|
+
/**
|
|
47
|
+
* Measure adaptation cost across a grid of (window, epochs, skip rate).
|
|
48
|
+
*
|
|
49
|
+
* Each grid point starts from a FRESH model, so the points are independent
|
|
50
|
+
* measurements rather than a single model drifting through the grid (a diverged
|
|
51
|
+
* checkpoint would otherwise make later points look different for reasons that
|
|
52
|
+
* have nothing to do with cost).
|
|
53
|
+
*/
|
|
54
|
+
export declare function benchmarkAdaptationCost(opts?: AdaptationCostOptions): AdaptationCostReport;
|
|
55
|
+
/** Render an {@link AdaptationCostReport} as a fixed-width table. */
|
|
56
|
+
export declare function formatAdaptationCostReport(report: AdaptationCostReport): string;
|
|
57
|
+
//# sourceMappingURL=adaptation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptation.d.ts","sourceRoot":"","sources":["../../src/bench/adaptation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH,OAAO,KAAK,EAAE,qBAAqB,EAAuB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEnG;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAQpE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG/E;AAqBD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,GAAE,qBAA0B,GAAG,oBAAoB,CAiE9F;AAED,qEAAqE;AACrE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAqB/E"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bench/adaptation.ts — what does ON-PREM ADAPTATION COST?
|
|
3
|
+
*
|
|
4
|
+
* The rest of the harness measures how GOOD a model is. This measures how much
|
|
5
|
+
* one write-through adaptation COSTS, which is the number an on-prem operator
|
|
6
|
+
* needs before turning learning on: every run the host adapts on is CPU it is not
|
|
7
|
+
* spending on the agent.
|
|
8
|
+
*
|
|
9
|
+
* It became measurable only once the gradient path was real. Before that a "fit"
|
|
10
|
+
* was a forward pass plus an inert optimiser step, so any timing was a timing of
|
|
11
|
+
* the wrong thing.
|
|
12
|
+
*
|
|
13
|
+
* The three knobs are the ones the host actually exposes
|
|
14
|
+
* (`agent-runtime/src/infra/project-evermind-delta.ts`, and the cloud
|
|
15
|
+
* coordinator's identical constants):
|
|
16
|
+
*
|
|
17
|
+
* • WINDOW — `ADAPT_WINDOW_TOKENS = 64`, the length of each training sequence
|
|
18
|
+
* the run text is chunked into;
|
|
19
|
+
* • EPOCHS — `new EvermindLMTrainer(lm, { epochs: 1 })`, passes per contribution;
|
|
20
|
+
* • SKIP — `MIN_TEXT_CHARS = 20`, the floor below which a contribution is
|
|
21
|
+
* dropped before any work happens; expressed here as how OFTEN the
|
|
22
|
+
* floor fires.
|
|
23
|
+
*
|
|
24
|
+
* Two quantities are reported, and the difference matters. `positionsEvaluated`
|
|
25
|
+
* comes from the model's own counter: exact, integer, hardware-independent — the
|
|
26
|
+
* thing a curve should be asserted on. `elapsedMs` is what those positions cost on
|
|
27
|
+
* THIS machine, which is what an operator budgets with and what no assertion
|
|
28
|
+
* should depend on.
|
|
29
|
+
*/
|
|
30
|
+
import { EvermindLM, EvermindLMTrainer } from "../lm/evermind_lm.js";
|
|
31
|
+
import { BPETokenizer } from "../tokenizer/bpe.js";
|
|
32
|
+
import { defaultNow } from "./harness.js";
|
|
33
|
+
/**
|
|
34
|
+
* Chunk token ids into fixed-length training windows, dropping any tail too short
|
|
35
|
+
* to have a next-token target.
|
|
36
|
+
*
|
|
37
|
+
* A byte-for-byte mirror of the host's own `windows()` helper, so a benchmarked
|
|
38
|
+
* fit sees exactly the batches a production adaptation would.
|
|
39
|
+
*/
|
|
40
|
+
export function tokenWindows(ids, size) {
|
|
41
|
+
const out = [];
|
|
42
|
+
const step = Math.max(1, Math.floor(size));
|
|
43
|
+
for (let i = 0; i + 1 < ids.length; i += step) {
|
|
44
|
+
const seq = ids.slice(i, i + step);
|
|
45
|
+
if (seq.length >= 2)
|
|
46
|
+
out.push(seq);
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* How many of `requests` actually adapt at a given skip rate.
|
|
52
|
+
*
|
|
53
|
+
* Deterministic rather than sampled: a benchmark whose cost curve moved with an
|
|
54
|
+
* RNG would be measuring the RNG.
|
|
55
|
+
*/
|
|
56
|
+
export function adaptationsAfterSkip(requests, skipRate) {
|
|
57
|
+
const rate = Math.min(1, Math.max(0, skipRate));
|
|
58
|
+
return Math.round(requests * (1 - rate));
|
|
59
|
+
}
|
|
60
|
+
/** Default corpus — prose of roughly the shape a run-text contribution has. */
|
|
61
|
+
const DEFAULT_TEXT = [
|
|
62
|
+
"The planning loop retrieves context before generating a response.",
|
|
63
|
+
"Agents recall facts from the memory layer and act on them.",
|
|
64
|
+
"Deployment runs on Cloudflare Workers and Durable Objects.",
|
|
65
|
+
"Tools are gated by a capability registry and a policy pack.",
|
|
66
|
+
"The coordinator merges weight deltas from every contributing host.",
|
|
67
|
+
"A ticket moves through triage, execution, review and merge.",
|
|
68
|
+
"Recall is ranked by embedding cosine fused with lexical scoring.",
|
|
69
|
+
"The trainer adapts a private copy of the base checkpoint locally.",
|
|
70
|
+
].join(" ");
|
|
71
|
+
/** Total trainable scalars — what one optimiser step touches. */
|
|
72
|
+
function paramCountOf(model) {
|
|
73
|
+
let n = 0;
|
|
74
|
+
for (const p of model.parameters())
|
|
75
|
+
n += p.data.length;
|
|
76
|
+
return n;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Measure adaptation cost across a grid of (window, epochs, skip rate).
|
|
80
|
+
*
|
|
81
|
+
* Each grid point starts from a FRESH model, so the points are independent
|
|
82
|
+
* measurements rather than a single model drifting through the grid (a diverged
|
|
83
|
+
* checkpoint would otherwise make later points look different for reasons that
|
|
84
|
+
* have nothing to do with cost).
|
|
85
|
+
*/
|
|
86
|
+
export function benchmarkAdaptationCost(opts = {}) {
|
|
87
|
+
const text = opts.text ?? DEFAULT_TEXT;
|
|
88
|
+
const windowTokens = opts.windowTokens ?? [32, 64, 128];
|
|
89
|
+
const epochsGrid = opts.epochs ?? [1, 2, 4];
|
|
90
|
+
const skipRates = opts.skipRates ?? [0, 0.5];
|
|
91
|
+
const requests = Math.max(1, opts.requests ?? 4);
|
|
92
|
+
const dModel = opts.dModel ?? 32;
|
|
93
|
+
const numLayers = opts.numLayers ?? 2;
|
|
94
|
+
const hiddenDim = opts.hiddenDim ?? 48;
|
|
95
|
+
const seed = opts.seed ?? 7;
|
|
96
|
+
const lr = opts.lr ?? 0.01;
|
|
97
|
+
const now = opts.now ?? defaultNow;
|
|
98
|
+
const tok = new BPETokenizer();
|
|
99
|
+
tok.train(text, { numMerges: opts.numMerges ?? 120 });
|
|
100
|
+
const ids = tok.encode(text);
|
|
101
|
+
const newModel = () => new EvermindLM({ vocabSize: tok.vocabSize, dModel, numLayers, hiddenDim, seed });
|
|
102
|
+
const points = [];
|
|
103
|
+
for (const w of windowTokens) {
|
|
104
|
+
const windows = tokenWindows(ids, w);
|
|
105
|
+
for (const epochs of epochsGrid) {
|
|
106
|
+
for (const skipRate of skipRates) {
|
|
107
|
+
const adapted = adaptationsAfterSkip(requests, skipRate);
|
|
108
|
+
const model = newModel();
|
|
109
|
+
model.resetStats();
|
|
110
|
+
const t0 = now();
|
|
111
|
+
for (let r = 0; r < adapted; r++) {
|
|
112
|
+
// One contribution = one fit over the run text's windows, exactly as the
|
|
113
|
+
// host does. accumSteps pinned to 1 so `optimizerSteps` is exact.
|
|
114
|
+
new EvermindLMTrainer(model, { lr, epochs, accumSteps: 1 }).fit(windows);
|
|
115
|
+
}
|
|
116
|
+
const elapsedMs = now() - t0;
|
|
117
|
+
const positionsEvaluated = model.positionsEvaluated;
|
|
118
|
+
const sequences = windows.length * adapted;
|
|
119
|
+
points.push({
|
|
120
|
+
windowTokens: w,
|
|
121
|
+
epochs,
|
|
122
|
+
skipRate,
|
|
123
|
+
requests,
|
|
124
|
+
adapted,
|
|
125
|
+
sequences,
|
|
126
|
+
optimizerSteps: sequences * epochs,
|
|
127
|
+
positionsEvaluated,
|
|
128
|
+
elapsedMs,
|
|
129
|
+
msPerKPosition: positionsEvaluated > 0 ? (elapsedMs / positionsEvaluated) * 1000 : 0,
|
|
130
|
+
msPerAdaptation: adapted > 0 ? elapsedMs / adapted : 0,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
points,
|
|
137
|
+
textTokens: ids.length,
|
|
138
|
+
vocabSize: tok.vocabSize,
|
|
139
|
+
dModel,
|
|
140
|
+
numLayers,
|
|
141
|
+
hiddenDim,
|
|
142
|
+
paramCount: paramCountOf(newModel()),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/** Render an {@link AdaptationCostReport} as a fixed-width table. */
|
|
146
|
+
export function formatAdaptationCostReport(report) {
|
|
147
|
+
const head = `Evermind adaptation cost — dModel=${report.dModel} layers=${report.numLayers} ` +
|
|
148
|
+
`hidden=${report.hiddenDim} params=${report.paramCount.toLocaleString()} ` +
|
|
149
|
+
`vocab=${report.vocabSize} textTokens=${report.textTokens}`;
|
|
150
|
+
const cols = ["window", "epochs", "skip", "adapts", "seqs", "steps", "positions", "ms", "ms/adapt", "ms/1k pos"];
|
|
151
|
+
const rows = report.points.map((p) => [
|
|
152
|
+
String(p.windowTokens),
|
|
153
|
+
String(p.epochs),
|
|
154
|
+
p.skipRate.toFixed(2),
|
|
155
|
+
`${p.adapted}/${p.requests}`,
|
|
156
|
+
String(p.sequences),
|
|
157
|
+
String(p.optimizerSteps),
|
|
158
|
+
String(p.positionsEvaluated),
|
|
159
|
+
p.elapsedMs.toFixed(1),
|
|
160
|
+
p.msPerAdaptation.toFixed(1),
|
|
161
|
+
p.msPerKPosition.toFixed(3),
|
|
162
|
+
]);
|
|
163
|
+
const widths = cols.map((c, i) => Math.max(c.length, ...rows.map((r) => r[i].length)));
|
|
164
|
+
const line = (cells) => cells.map((c, i) => c.padStart(widths[i])).join(" ");
|
|
165
|
+
return [head, "", line(cols), line(widths.map((w) => "-".repeat(w))), ...rows.map(line)].join("\n");
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=adaptation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptation.js","sourceRoot":"","sources":["../../src/bench/adaptation.ts"],"names":[],"mappings":"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"}
|
package/dist/bench/harness.d.ts
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
* — the path the Studio uses to benchmark a model in the browser.
|
|
9
9
|
*/
|
|
10
10
|
import type { AsyncLogitsModel, BenchmarkOptions, BenchmarkReport, ComparisonReport, LogitsModel, TrainAndBenchmarkOptions, TrainAndBenchmarkResult } from "./types.js";
|
|
11
|
+
/** A monotonic clock, preferring `performance.now()` when present. */
|
|
12
|
+
export declare function defaultNow(): number;
|
|
11
13
|
/**
|
|
12
14
|
* Benchmark a model (synchronous forward) over held-out token sequences.
|
|
13
15
|
* Sequences shorter than 2 tokens have no prediction target and are skipped.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/bench/harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/bench/harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,sEAAsE;AACtE,wBAAgB,UAAU,IAAI,MAAM,CAGnC;AA+BD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,EAAE,EAAE,EACrB,IAAI,GAAE,gBAAqB,GAC1B,eAAe,CAgBjB;AAED,oFAAoF;AACpF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,gBAAgB,EACvB,SAAS,EAAE,MAAM,EAAE,EAAE,EACrB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAgB1B;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAC3B,SAAS,EAAE,WAAW,EACtB,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,MAAM,EAAE,EAAE,EACrB,IAAI,GAAE,gBAAqB,GAC1B,gBAAgB,CAElB;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,GAAG,gBAAgB,CAiBtG;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,EAAE,EAAE,CAKvG;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAC3B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE;IAAE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,EACzC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,gBAAqB,GAC1B,eAAe,CAEjB;AAaD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,wBAA6B,GAClC,uBAAuB,CA0CzB"}
|
package/dist/bench/harness.js
CHANGED
|
@@ -12,7 +12,7 @@ import { BPETokenizer } from "../tokenizer/bpe.js";
|
|
|
12
12
|
import { SeededRng } from "../utils/rng.js";
|
|
13
13
|
import { newAccumulator, scoreInto, perplexity, bitsPerToken } from "./metrics.js";
|
|
14
14
|
/** A monotonic clock, preferring `performance.now()` when present. */
|
|
15
|
-
function defaultNow() {
|
|
15
|
+
export function defaultNow() {
|
|
16
16
|
const g = globalThis;
|
|
17
17
|
return typeof g.performance?.now === "function" ? g.performance.now() : Date.now();
|
|
18
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/bench/harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAWnF,sEAAsE;AACtE,
|
|
1
|
+
{"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/bench/harness.ts"],"names":[],"mappings":"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"}
|
package/dist/bench/index.d.ts
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
* bench — the Evermind benchmarking harness.
|
|
3
3
|
*
|
|
4
4
|
* Measures a trained model on held-out data (perplexity, bits-per-token,
|
|
5
|
-
* next-token accuracy, throughput), A/Bs two models,
|
|
6
|
-
* train-and-score path the Studio drives in the browser
|
|
5
|
+
* next-token accuracy, throughput), A/Bs two models, offers a one-call
|
|
6
|
+
* train-and-score path the Studio drives in the browser, and measures what one
|
|
7
|
+
* on-prem ADAPTATION costs across the host's own window/epoch/skip knobs.
|
|
7
8
|
*/
|
|
8
9
|
export { benchmarkModel, benchmarkModelAsync, benchmarkText, compareModels, compareReports, corpusToSequences, trainAndBenchmark, } from "./harness.js";
|
|
10
|
+
export { benchmarkAdaptationCost, formatAdaptationCostReport, tokenWindows, adaptationsAfterSkip, } from "./adaptation.js";
|
|
9
11
|
export { argmax, topKIndices, perplexity, bitsPerToken, newAccumulator, scoreInto, LN2, } from "./metrics.js";
|
|
10
|
-
export type { LogitsModel, AsyncLogitsModel, BenchmarkOptions, BenchmarkReport, ComparisonReport, TrainAndBenchmarkOptions, TrainAndBenchmarkResult, } from "./types.js";
|
|
12
|
+
export type { LogitsModel, AsyncLogitsModel, BenchmarkOptions, BenchmarkReport, ComparisonReport, TrainAndBenchmarkOptions, TrainAndBenchmarkResult, AdaptationCostOptions, AdaptationCostPoint, AdaptationCostReport, } from "./types.js";
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bench/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bench/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,YAAY,EACZ,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,MAAM,EACN,WAAW,EACX,UAAU,EACV,YAAY,EACZ,cAAc,EACd,SAAS,EACT,GAAG,GACJ,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
|
package/dist/bench/index.js
CHANGED
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
* bench — the Evermind benchmarking harness.
|
|
3
3
|
*
|
|
4
4
|
* Measures a trained model on held-out data (perplexity, bits-per-token,
|
|
5
|
-
* next-token accuracy, throughput), A/Bs two models,
|
|
6
|
-
* train-and-score path the Studio drives in the browser
|
|
5
|
+
* next-token accuracy, throughput), A/Bs two models, offers a one-call
|
|
6
|
+
* train-and-score path the Studio drives in the browser, and measures what one
|
|
7
|
+
* on-prem ADAPTATION costs across the host's own window/epoch/skip knobs.
|
|
7
8
|
*/
|
|
8
9
|
export { benchmarkModel, benchmarkModelAsync, benchmarkText, compareModels, compareReports, corpusToSequences, trainAndBenchmark, } from "./harness.js";
|
|
10
|
+
export { benchmarkAdaptationCost, formatAdaptationCostReport, tokenWindows, adaptationsAfterSkip, } from "./adaptation.js";
|
|
9
11
|
export { argmax, topKIndices, perplexity, bitsPerToken, newAccumulator, scoreInto, LN2, } from "./metrics.js";
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
package/dist/bench/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bench/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bench/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,YAAY,EACZ,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,MAAM,EACN,WAAW,EACX,UAAU,EACV,YAAY,EACZ,cAAc,EACd,SAAS,EACT,GAAG,GACJ,MAAM,cAAc,CAAC"}
|
package/dist/bench/types.d.ts
CHANGED
|
@@ -116,4 +116,92 @@ export interface TrainAndBenchmarkResult extends BenchmarkReport {
|
|
|
116
116
|
/** A short greedy generation from {@link TrainAndBenchmarkOptions.prompt}. */
|
|
117
117
|
sample: string;
|
|
118
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Knobs for {@link benchmarkAdaptationCost} — the measured COST of on-prem
|
|
121
|
+
* adaptation, as opposed to the quality metrics above.
|
|
122
|
+
*
|
|
123
|
+
* The defaults bracket what the on-prem host actually runs today
|
|
124
|
+
* (`agent-runtime/src/infra/project-evermind-delta.ts`, mirrored by the cloud
|
|
125
|
+
* coordinator): 64-token training windows, ONE epoch per contribution, over at
|
|
126
|
+
* most 4000 characters of run text, with contributions under 20 characters
|
|
127
|
+
* skipped before any work happens.
|
|
128
|
+
*/
|
|
129
|
+
export interface AdaptationCostOptions {
|
|
130
|
+
/** Corpus the tokenizer is learned from and the adaptation trains on. */
|
|
131
|
+
text?: string;
|
|
132
|
+
/** Tokens per training window. Default `[32, 64, 128]` (production: 64). */
|
|
133
|
+
windowTokens?: number[];
|
|
134
|
+
/** Epochs per adaptation. Default `[1, 2, 4]` (production: 1). */
|
|
135
|
+
epochs?: number[];
|
|
136
|
+
/**
|
|
137
|
+
* Fraction of incoming contributions skipped before any work, 0..1. The
|
|
138
|
+
* on-prem skip is a floor on contribution length (`MIN_TEXT_CHARS`), so this is
|
|
139
|
+
* that floor expressed as how often it fires. Default `[0, 0.5]`.
|
|
140
|
+
*/
|
|
141
|
+
skipRates?: number[];
|
|
142
|
+
/** Adaptation requests issued per grid point. Default 4. */
|
|
143
|
+
requests?: number;
|
|
144
|
+
/** BPE merges learned for the tokenizer. Default 120. */
|
|
145
|
+
numMerges?: number;
|
|
146
|
+
/** Model channel dimension. Default 32. */
|
|
147
|
+
dModel?: number;
|
|
148
|
+
/** Number of (conv + MoE) blocks. Default 2. */
|
|
149
|
+
numLayers?: number;
|
|
150
|
+
/** MoE expert FFN hidden width. Default 48. */
|
|
151
|
+
hiddenDim?: number;
|
|
152
|
+
/** AdamW learning rate for the adaptation fits. Default 0.01. */
|
|
153
|
+
lr?: number;
|
|
154
|
+
/** Deterministic seed for model init. Default 7. */
|
|
155
|
+
seed?: number;
|
|
156
|
+
/** Monotonic clock in ms, injectable for deterministic tests. */
|
|
157
|
+
now?: () => number;
|
|
158
|
+
}
|
|
159
|
+
/** Measured cost at one (window, epochs, skipRate) point of the grid. */
|
|
160
|
+
export interface AdaptationCostPoint {
|
|
161
|
+
/** Tokens per training window. */
|
|
162
|
+
windowTokens: number;
|
|
163
|
+
/** Epochs run per adaptation. */
|
|
164
|
+
epochs: number;
|
|
165
|
+
/** Fraction of requests skipped before any work. */
|
|
166
|
+
skipRate: number;
|
|
167
|
+
/** Adaptation requests issued at this point. */
|
|
168
|
+
requests: number;
|
|
169
|
+
/** Requests that actually ran a fit (the rest were skipped). */
|
|
170
|
+
adapted: number;
|
|
171
|
+
/** Training windows fitted, summed over the adaptations that ran. */
|
|
172
|
+
sequences: number;
|
|
173
|
+
/**
|
|
174
|
+
* AdamW steps issued: one per window per epoch (the trainer's default, with
|
|
175
|
+
* gradient accumulation pinned to 1 so the count is exact).
|
|
176
|
+
*/
|
|
177
|
+
optimizerSteps: number;
|
|
178
|
+
/**
|
|
179
|
+
* Block positions pushed through the model, read from
|
|
180
|
+
* `EvermindLM.positionsEvaluated`. Hardware-independent and exact — this is the
|
|
181
|
+
* quantity a cost curve should be asserted on; wall time is what it costs HERE.
|
|
182
|
+
*/
|
|
183
|
+
positionsEvaluated: number;
|
|
184
|
+
/** Wall-clock milliseconds spent inside the fits. */
|
|
185
|
+
elapsedMs: number;
|
|
186
|
+
/** Milliseconds per 1000 evaluated positions — the machine's unit cost. */
|
|
187
|
+
msPerKPosition: number;
|
|
188
|
+
/** Wall-clock milliseconds per adaptation that actually ran (0 when all skipped). */
|
|
189
|
+
msPerAdaptation: number;
|
|
190
|
+
}
|
|
191
|
+
/** The adaptation-cost scorecard: one point per (window, epochs, skipRate). */
|
|
192
|
+
export interface AdaptationCostReport {
|
|
193
|
+
points: AdaptationCostPoint[];
|
|
194
|
+
/** Tokens the source text produced (the adaptation's input size). */
|
|
195
|
+
textTokens: number;
|
|
196
|
+
/** Learned tokenizer vocabulary size. */
|
|
197
|
+
vocabSize: number;
|
|
198
|
+
/** Model channel dimension the grid was measured on. */
|
|
199
|
+
dModel: number;
|
|
200
|
+
/** Number of blocks the grid was measured on. */
|
|
201
|
+
numLayers: number;
|
|
202
|
+
/** MoE expert hidden width the grid was measured on. */
|
|
203
|
+
hiddenDim: number;
|
|
204
|
+
/** Trainable scalar parameters — what one optimiser step touches. */
|
|
205
|
+
paramCount: number;
|
|
206
|
+
}
|
|
119
207
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bench/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,sFAAsF;AACtF,MAAM,WAAW,WAAW;IAC1B,kFAAkF;IAClF,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG;QAAE,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC;CACvD;AAED,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,iCAAiC;AACjC,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,eAAe,CAAC;IAC1B,gFAAgF;IAChF,eAAe,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,KAAK,CAAC;IACzC,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sFAAsF;AACtF,MAAM,WAAW,wBAAwB;IACvC,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,sFAAsF;AACtF,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC9D,mCAAmC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,gBAAgB,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bench/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evermind/adapt.ts — ONE adaptation recipe: fit a private copy of a model version
|
|
3
|
+
* on some text, then diff it against that version.
|
|
4
|
+
*
|
|
5
|
+
* Every learner that contributes to a shared Evermind (an on-prem host pushing a
|
|
6
|
+
* delta, or the single writer fitting queued text itself) must run the SAME recipe,
|
|
7
|
+
* so a locally-produced delta is the same size of update the writer would have
|
|
8
|
+
* produced from the same text. That recipe lives here and nowhere else.
|
|
9
|
+
*/
|
|
10
|
+
import type { EvermindModelPackage } from "./package.js";
|
|
11
|
+
/** Chars of text fed to one adaptation pass. */
|
|
12
|
+
export declare const EVERMIND_ADAPT_MAX_CHARS = 4000;
|
|
13
|
+
/** Token window length of the adaptation training sequences. */
|
|
14
|
+
export declare const EVERMIND_ADAPT_WINDOW_TOKENS = 64;
|
|
15
|
+
/** The tokenizer surface adaptation needs (the engine's `BPETokenizer` satisfies it). */
|
|
16
|
+
export interface AdaptTokenizer {
|
|
17
|
+
encode(text: string): number[];
|
|
18
|
+
}
|
|
19
|
+
/** The outcome of one adaptation. */
|
|
20
|
+
export interface AdaptResult {
|
|
21
|
+
/** Sparse serialized RowDelta of adapted vs base. */
|
|
22
|
+
diff: ArrayBuffer;
|
|
23
|
+
/** The trainer's final-epoch mean loss. */
|
|
24
|
+
loss: number;
|
|
25
|
+
/** How many training windows the text produced. */
|
|
26
|
+
sequences: number;
|
|
27
|
+
}
|
|
28
|
+
export interface AdaptOptions {
|
|
29
|
+
maxChars?: number;
|
|
30
|
+
windowTokens?: number;
|
|
31
|
+
epochs?: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Adapt a freshly-loaded copy of `pkg` on `text` and return the diff, or null when
|
|
35
|
+
* the text yields no trainable window. The package's own checkpoint is never
|
|
36
|
+
* mutated, so the diff is exactly "this text's update", never an accumulation.
|
|
37
|
+
* Throws when `pkg` is not an `evermind-lm` (as `loadLM` does).
|
|
38
|
+
*/
|
|
39
|
+
export declare function adaptAndDiff(pkg: EvermindModelPackage, tokenizer: AdaptTokenizer, text: string, opts?: AdaptOptions): AdaptResult | null;
|
|
40
|
+
//# sourceMappingURL=adapt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapt.d.ts","sourceRoot":"","sources":["../../src/evermind/adapt.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAKzD,gDAAgD;AAChD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,gEAAgE;AAChE,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAE/C,yFAAyF;AACzF,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAChC;AAED,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,IAAI,EAAE,WAAW,CAAC;IAClB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,oBAAoB,EACzB,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,YAAiB,GACtB,WAAW,GAAG,IAAI,CASpB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { EvermindLMTrainer } from "../lm/evermind_lm.js";
|
|
2
|
+
import { diffCheckpoints } from "../utils/delta.js";
|
|
3
|
+
import { tokenWindows } from "../bench/adaptation.js";
|
|
4
|
+
/** Chars of text fed to one adaptation pass. */
|
|
5
|
+
export const EVERMIND_ADAPT_MAX_CHARS = 4000;
|
|
6
|
+
/** Token window length of the adaptation training sequences. */
|
|
7
|
+
export const EVERMIND_ADAPT_WINDOW_TOKENS = 64;
|
|
8
|
+
/**
|
|
9
|
+
* Adapt a freshly-loaded copy of `pkg` on `text` and return the diff, or null when
|
|
10
|
+
* the text yields no trainable window. The package's own checkpoint is never
|
|
11
|
+
* mutated, so the diff is exactly "this text's update", never an accumulation.
|
|
12
|
+
* Throws when `pkg` is not an `evermind-lm` (as `loadLM` does).
|
|
13
|
+
*/
|
|
14
|
+
export function adaptAndDiff(pkg, tokenizer, text, opts = {}) {
|
|
15
|
+
const maxChars = opts.maxChars ?? EVERMIND_ADAPT_MAX_CHARS;
|
|
16
|
+
const windowTokens = opts.windowTokens ?? EVERMIND_ADAPT_WINDOW_TOKENS;
|
|
17
|
+
const seqs = tokenWindows(tokenizer.encode(text.slice(0, maxChars)), windowTokens);
|
|
18
|
+
if (seqs.length === 0)
|
|
19
|
+
return null;
|
|
20
|
+
const lm = pkg.loadLM();
|
|
21
|
+
const history = new EvermindLMTrainer(lm, { epochs: opts.epochs ?? 1 }).fit(seqs);
|
|
22
|
+
const loss = history.length > 0 ? history[history.length - 1] : 0;
|
|
23
|
+
return { diff: diffCheckpoints(pkg.checkpoint, lm.exportWeights()), loss, sequences: seqs.length };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=adapt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapt.js","sourceRoot":"","sources":["../../src/evermind/adapt.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,gDAAgD;AAChD,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAC7C,gEAAgE;AAChE,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAuB/C;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAyB,EACzB,SAAyB,EACzB,IAAY,EACZ,OAAqB,EAAE;IAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,wBAAwB,CAAC;IAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,4BAA4B,CAAC;IACvE,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IACnF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACrG,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Max accepted base64 delta, in characters (~8 MiB). */
|
|
2
|
+
export declare const MAX_DELTA_B64_CHARS: number;
|
|
3
|
+
/** Chars of provenance label kept — a diff carries no text, so the label is its only description. */
|
|
4
|
+
export declare const DELTA_LABEL_MAX_CHARS = 800;
|
|
5
|
+
/** A validated delta contribution — the exact body a producer sends. */
|
|
6
|
+
export interface DeltaLearnPayload {
|
|
7
|
+
/** base64 serialized RowDelta (`diffCheckpoints(base, adapted)`). */
|
|
8
|
+
diff: string;
|
|
9
|
+
/** The model version the delta was diffed against. */
|
|
10
|
+
baseVersion: number;
|
|
11
|
+
/** FedAvg sample weight (> 0). Absent means the writer's default (1). */
|
|
12
|
+
weight?: number;
|
|
13
|
+
/** Provenance for the merged row (e.g. the run's task). */
|
|
14
|
+
label?: string;
|
|
15
|
+
}
|
|
16
|
+
/** Why a body was refused: `invalid` (malformed) or `too-large` (over {@link MAX_DELTA_B64_CHARS}). */
|
|
17
|
+
export type DeltaParseResult = {
|
|
18
|
+
ok: true;
|
|
19
|
+
payload: DeltaLearnPayload;
|
|
20
|
+
} | {
|
|
21
|
+
ok: false;
|
|
22
|
+
reason: "invalid" | "too-large";
|
|
23
|
+
error: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Parse + validate a delta body. Pure — a front door calls it to refuse a bad body
|
|
27
|
+
* early, and the single writer calls it again because it trusts no caller.
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseDeltaLearnPayload(raw: unknown): DeltaParseResult;
|
|
30
|
+
/**
|
|
31
|
+
* Build the payload for one computed diff. The caller owns the size guard (compare
|
|
32
|
+
* `payload.diff.length` with {@link MAX_DELTA_B64_CHARS}) so it can choose a fallback.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildDeltaLearnPayload(diff: ArrayBuffer, baseVersion: number, weight?: number, label?: string): DeltaLearnPayload;
|
|
35
|
+
/** Decode a payload's base64 `diff` to the serialized RowDelta bytes. Throws on malformed base64. */
|
|
36
|
+
export declare function decodeDeltaPayload(payload: Pick<DeltaLearnPayload, "diff">): ArrayBuffer;
|
|
37
|
+
/**
|
|
38
|
+
* Structural check of ONE delta against the base it claims to diff: it must
|
|
39
|
+
* deserialize, be element-granular, index only elements the base has, and carry
|
|
40
|
+
* finite values. Returns why it is unusable, or null when it can join a merge.
|
|
41
|
+
*/
|
|
42
|
+
export declare function deltaUnusableReason(delta: ArrayBuffer, baseCheckpoint: ArrayBuffer): string | null;
|
|
43
|
+
//# sourceMappingURL=delta_wire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delta_wire.d.ts","sourceRoot":"","sources":["../../src/evermind/delta_wire.ts"],"names":[],"mappings":"AAkBA,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,QAAkB,CAAC;AAEnD,qGAAqG;AACrG,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAKzC,wEAAwE;AACxE,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uGAAuG;AACvG,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GACxC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAuBrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAQjI;AAED,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,WAAW,CAExF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAgBlG"}
|