@seanhogg/builderforce-memory-engine 2026.7.12 → 2026.9.27
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 +29 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -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 +180 -4
- package/dist/lm/evermind_lm.d.ts.map +1 -1
- package/dist/lm/evermind_lm.js +433 -116
- package/dist/lm/evermind_lm.js.map +1 -1
- package/dist/lm/index.d.ts +8 -2
- package/dist/lm/index.d.ts.map +1 -1
- package/dist/lm/index.js +6 -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 +58 -1
- package/dist/optim/adamw.d.ts.map +1 -1
- package/dist/optim/adamw.js +69 -4
- 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/lora.d.ts +153 -0
- package/dist/training/lora.d.ts.map +1 -0
- package/dist/training/lora.js +324 -0
- package/dist/training/lora.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/mixed_precision.d.ts +67 -0
- package/dist/training/mixed_precision.d.ts.map +1 -0
- package/dist/training/mixed_precision.js +101 -0
- package/dist/training/mixed_precision.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 +33 -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 +104 -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 +470 -116
- package/src/lm/index.ts +12 -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 +115 -7
- package/src/tokenizer/bpe.ts +55 -0
- package/src/training/cpu_ops.ts +127 -0
- package/src/training/lora.ts +365 -0
- package/src/training/mamba1_cpu.ts +421 -0
- package/src/training/mixed_precision.ts +119 -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
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* import/foreign/plan.ts — the ONE executor for a foreign-checkpoint weight port.
|
|
3
|
+
*
|
|
4
|
+
* A port is expressed declaratively: every target parameter of this engine's
|
|
5
|
+
* {@link HybridMambaModel} gets exactly one {@link PortRule} saying which source
|
|
6
|
+
* tensor feeds it and how the bytes are reshaped. Architecture adapters
|
|
7
|
+
* (`falcon_mamba.ts`, `codestral_mamba.ts`) only *describe* their rules — the
|
|
8
|
+
* matching, validation and transform logic lives here once, so a new
|
|
9
|
+
* architecture never re-implements it.
|
|
10
|
+
*
|
|
11
|
+
* The contract that makes a port trustworthy: NOTHING is silently dropped.
|
|
12
|
+
* • a target with no source in the checkpoint is a `fill` rule and is reported
|
|
13
|
+
* in {@link PortedCheckpoint.synthesisedTargets};
|
|
14
|
+
* • a source tensor no rule consumed is reported in
|
|
15
|
+
* {@link PortedCheckpoint.unmappedSources};
|
|
16
|
+
* • a source tensor only PARTLY consumed (e.g. Mamba-2's gate rows, which this
|
|
17
|
+
* engine's block has no branch for) is declared as a {@link PortDiscard};
|
|
18
|
+
* • a shape that doesn't line up throws, naming the tensor and both shapes.
|
|
19
|
+
*/
|
|
20
|
+
// ── Source-name normalisation ────────────────────────────────────────────────
|
|
21
|
+
/**
|
|
22
|
+
* Mistral publishes the same Mamba-2 weights twice: the HF conversion
|
|
23
|
+
* (`backbone.…`) and its native `consolidated.safetensors`, whose names carry a
|
|
24
|
+
* `model.` prefix. Strip it so one rule table serves both. The
|
|
25
|
+
* `embedding`/`embeddings` spelling difference is handled by the rules' `from`
|
|
26
|
+
* alternatives, not here.
|
|
27
|
+
*/
|
|
28
|
+
export function normaliseSourceName(name) {
|
|
29
|
+
return name.startsWith("model.") ? name.slice("model.".length) : name;
|
|
30
|
+
}
|
|
31
|
+
// ── Execution ────────────────────────────────────────────────────────────────
|
|
32
|
+
/** Product of a shape's dimensions (`[]` ⇒ 1). */
|
|
33
|
+
function numel(shape) {
|
|
34
|
+
return shape.reduce((n, d) => n * d, 1);
|
|
35
|
+
}
|
|
36
|
+
/** Shape with size-1 axes removed — `[C, 1, K]` and `[C, K]` compare equal. */
|
|
37
|
+
function squeeze(shape) {
|
|
38
|
+
const kept = shape.filter((d) => d !== 1);
|
|
39
|
+
return kept.length > 0 ? kept : [1];
|
|
40
|
+
}
|
|
41
|
+
function sameShape(a, b) {
|
|
42
|
+
return a.length === b.length && a.every((d, i) => d === b[i]);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* `softplus⁻¹(y) = log(e^y − 1)`, evaluated so it neither overflows nor loses the
|
|
46
|
+
* small-`y` tail. Above ~30 `log(expm1(y))` and `y` agree to well inside f32
|
|
47
|
+
* precision, and `expm1` would have overflowed; below it, `expm1` keeps the
|
|
48
|
+
* precision `exp(y) - 1` would have thrown away.
|
|
49
|
+
*/
|
|
50
|
+
function softplusInverse(y) {
|
|
51
|
+
if (!(y > 0)) {
|
|
52
|
+
throw new Error(`import/foreign: softplus⁻¹ needs a positive input, got ${y}`);
|
|
53
|
+
}
|
|
54
|
+
if (y > 30)
|
|
55
|
+
return y;
|
|
56
|
+
return Math.log(Math.expm1(y));
|
|
57
|
+
}
|
|
58
|
+
/** Run one rule, returning the target buffer. Throws on any shape disagreement. */
|
|
59
|
+
function applyRule(rule, source) {
|
|
60
|
+
const want = numel(rule.shape);
|
|
61
|
+
if (rule.op.kind === "fill") {
|
|
62
|
+
return new Float32Array(want).fill(rule.op.value);
|
|
63
|
+
}
|
|
64
|
+
if (!source) {
|
|
65
|
+
// Unreachable via executePortPlan (which checks first) — kept so a direct
|
|
66
|
+
// caller gets a real message rather than a null dereference.
|
|
67
|
+
throw new Error(`import/foreign: rule for "${rule.target}" has no source tensor`);
|
|
68
|
+
}
|
|
69
|
+
const where = `"${source.name}" → "${rule.target}"`;
|
|
70
|
+
switch (rule.op.kind) {
|
|
71
|
+
case "copy":
|
|
72
|
+
case "negExpToSoftplusInv": {
|
|
73
|
+
if (!sameShape(squeeze(source.shape), squeeze(rule.shape))) {
|
|
74
|
+
throw new Error(`import/foreign: ${where} shape mismatch — checkpoint has [${source.shape.join(", ")}], ` +
|
|
75
|
+
`this model expects [${rule.shape.join(", ")}]`);
|
|
76
|
+
}
|
|
77
|
+
if (source.data.length !== want) {
|
|
78
|
+
throw new Error(`import/foreign: ${where} has ${source.data.length} elements, expected ${want}`);
|
|
79
|
+
}
|
|
80
|
+
if (rule.op.kind === "copy")
|
|
81
|
+
return Float32Array.from(source.data);
|
|
82
|
+
const out = new Float32Array(want);
|
|
83
|
+
for (let i = 0; i < want; i++)
|
|
84
|
+
out[i] = softplusInverse(Math.exp(source.data[i]));
|
|
85
|
+
return out;
|
|
86
|
+
}
|
|
87
|
+
case "convTaps": {
|
|
88
|
+
const [channels, kernel] = squeeze(rule.shape);
|
|
89
|
+
const src = squeeze(source.shape);
|
|
90
|
+
if (!sameShape(src, [channels, kernel])) {
|
|
91
|
+
throw new Error(`import/foreign: ${where} depthwise conv shape mismatch — checkpoint has ` +
|
|
92
|
+
`[${source.shape.join(", ")}], this model expects [${rule.shape.join(", ")}] ` +
|
|
93
|
+
`(a [channels, 1, kernel] PyTorch kernel squeezes to [channels, kernel])`);
|
|
94
|
+
}
|
|
95
|
+
const out = new Float32Array(want);
|
|
96
|
+
for (let c = 0; c < channels; c++) {
|
|
97
|
+
for (let k = 0; k < kernel; k++) {
|
|
98
|
+
// Reverse the tap axis — see PortOp.convTaps.
|
|
99
|
+
out[c * kernel + k] = source.data[c * kernel + (kernel - 1 - k)];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return out;
|
|
103
|
+
}
|
|
104
|
+
case "rowSlice": {
|
|
105
|
+
if (source.shape.length !== 2) {
|
|
106
|
+
throw new Error(`import/foreign: ${where} rowSlice needs a rank-2 source, got ` +
|
|
107
|
+
`[${source.shape.join(", ")}]`);
|
|
108
|
+
}
|
|
109
|
+
const [rows, cols] = source.shape;
|
|
110
|
+
const { start, count } = rule.op;
|
|
111
|
+
if (start < 0 || start + count > rows) {
|
|
112
|
+
throw new Error(`import/foreign: ${where} rowSlice [${start}, ${start + count}) is outside the ` +
|
|
113
|
+
`checkpoint tensor's ${rows} rows — the source layout is not what this adapter expects`);
|
|
114
|
+
}
|
|
115
|
+
if (!sameShape(squeeze(rule.shape), squeeze([count, cols]))) {
|
|
116
|
+
throw new Error(`import/foreign: ${where} rowSlice yields [${count}, ${cols}] but this model expects ` +
|
|
117
|
+
`[${rule.shape.join(", ")}]`);
|
|
118
|
+
}
|
|
119
|
+
return Float32Array.from(source.data.subarray(start * cols, (start + count) * cols));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Execute a plan against a checkpoint's tensors. Every rule must resolve; the
|
|
125
|
+
* first failure throws naming the offending tensor. Sources no rule touched are
|
|
126
|
+
* returned rather than ignored.
|
|
127
|
+
*/
|
|
128
|
+
export function executePortPlan(plan, tensors) {
|
|
129
|
+
const byName = new Map();
|
|
130
|
+
for (const t of tensors) {
|
|
131
|
+
const name = normaliseSourceName(t.name);
|
|
132
|
+
byName.set(name, { ...t, name });
|
|
133
|
+
}
|
|
134
|
+
const weights = new Map();
|
|
135
|
+
const synthesisedTargets = [];
|
|
136
|
+
const consumed = new Set();
|
|
137
|
+
for (const rule of plan.rules) {
|
|
138
|
+
if (weights.has(rule.target)) {
|
|
139
|
+
throw new Error(`import/foreign: plan "${plan.adapter}" defines "${rule.target}" twice`);
|
|
140
|
+
}
|
|
141
|
+
if (rule.from.length === 0) {
|
|
142
|
+
if (rule.op.kind !== "fill") {
|
|
143
|
+
throw new Error(`import/foreign: rule for "${rule.target}" names no source but is not a fill rule`);
|
|
144
|
+
}
|
|
145
|
+
weights.set(rule.target, applyRule(rule, null));
|
|
146
|
+
synthesisedTargets.push({
|
|
147
|
+
target: rule.target,
|
|
148
|
+
value: rule.op.value,
|
|
149
|
+
reason: rule.note ?? "this architecture has no corresponding tensor",
|
|
150
|
+
});
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
const source = rule.from.map((n) => byName.get(n)).find((t) => t != null);
|
|
154
|
+
if (!source) {
|
|
155
|
+
throw new Error(`import/foreign: checkpoint is missing "${rule.from[0]}" (needed for "${rule.target}", ` +
|
|
156
|
+
`expected shape [${rule.shape.join(", ")}])` +
|
|
157
|
+
(rule.from.length > 1 ? `; also tried ${rule.from.slice(1).map((n) => `"${n}"`).join(", ")}` : ""));
|
|
158
|
+
}
|
|
159
|
+
consumed.add(source.name);
|
|
160
|
+
weights.set(rule.target, applyRule(rule, source));
|
|
161
|
+
}
|
|
162
|
+
const unmappedSources = [...byName.keys()].filter((n) => !consumed.has(n)).sort();
|
|
163
|
+
return {
|
|
164
|
+
adapter: plan.adapter,
|
|
165
|
+
weights,
|
|
166
|
+
unmappedSources,
|
|
167
|
+
synthesisedTargets,
|
|
168
|
+
discardedSources: plan.discards,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/import/foreign/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* import/foreign/registry.ts — config-driven adapter selection and the public
|
|
3
|
+
* port entry points.
|
|
4
|
+
*
|
|
5
|
+
* Given a checkpoint's `config.json`, pick the adapter by `model_type` /
|
|
6
|
+
* `architectures` and run its plan. An architecture nobody claims fails loudly
|
|
7
|
+
* with the list of what IS supported — and, for a transformer checkpoint, says
|
|
8
|
+
* why no map could ever exist for it.
|
|
9
|
+
*/
|
|
10
|
+
import type { NamedTensor } from "../../export/tensors.js";
|
|
11
|
+
import type { HybridMambaModelConfig } from "../../model/mamba_model.js";
|
|
12
|
+
import { type PortDiscard, type PortedTensors, type SynthesisedTarget } from "./plan.js";
|
|
13
|
+
import type { ForeignConfig, ForeignMambaAdapter } from "./adapter.js";
|
|
14
|
+
/** Every foreign SSM architecture this engine can warm-start from. */
|
|
15
|
+
export declare const FOREIGN_MAMBA_ADAPTERS: readonly ForeignMambaAdapter[];
|
|
16
|
+
/** A completed port: the model to build, its weights, and what didn't line up. */
|
|
17
|
+
export interface PortedCheckpoint extends PortedTensors {
|
|
18
|
+
/** Construct a `HybridMambaModel` with this to receive {@link PortedTensors.weights}. */
|
|
19
|
+
modelConfig: HybridMambaModelConfig;
|
|
20
|
+
}
|
|
21
|
+
export type { PortDiscard, SynthesisedTarget };
|
|
22
|
+
/**
|
|
23
|
+
* The adapter that claims this checkpoint. Throws — never guesses — when no
|
|
24
|
+
* adapter matches, because a wrong map produces a model that loads and then
|
|
25
|
+
* generates noise.
|
|
26
|
+
*/
|
|
27
|
+
export declare function foreignMambaAdapterFor(config: ForeignConfig): ForeignMambaAdapter;
|
|
28
|
+
/**
|
|
29
|
+
* Port a foreign checkpoint's tensors onto this engine's parameters. The result
|
|
30
|
+
* is device-free — {@link applyPortedWeights} uploads it into a live model.
|
|
31
|
+
*/
|
|
32
|
+
export declare function portForeignMamba(config: ForeignConfig, tensors: NamedTensor[]): PortedCheckpoint;
|
|
33
|
+
/** Convenience: port straight from a `.safetensors` buffer. */
|
|
34
|
+
export declare function portForeignMambaSafetensors(config: ForeignConfig, bytes: Uint8Array): PortedCheckpoint;
|
|
35
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/import/foreign/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEzE,OAAO,EAAmB,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG1G,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEvE,sEAAsE;AACtE,eAAO,MAAM,sBAAsB,EAAE,SAAS,mBAAmB,EAGhE,CAAC;AAEF,kFAAkF;AAClF,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,yFAAyF;IACzF,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;AAkC/C;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,mBAAmB,CAoCjF;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,gBAAgB,CAIhG;AAED,+DAA+D;AAC/D,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,UAAU,GAChB,gBAAgB,CAElB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* import/foreign/registry.ts — config-driven adapter selection and the public
|
|
3
|
+
* port entry points.
|
|
4
|
+
*
|
|
5
|
+
* Given a checkpoint's `config.json`, pick the adapter by `model_type` /
|
|
6
|
+
* `architectures` and run its plan. An architecture nobody claims fails loudly
|
|
7
|
+
* with the list of what IS supported — and, for a transformer checkpoint, says
|
|
8
|
+
* why no map could ever exist for it.
|
|
9
|
+
*/
|
|
10
|
+
import { safetensorsToTensors } from "../safetensors.js";
|
|
11
|
+
import { executePortPlan } from "./plan.js";
|
|
12
|
+
import { falconMambaAdapter } from "./falcon_mamba.js";
|
|
13
|
+
import { codestralMambaAdapter } from "./codestral_mamba.js";
|
|
14
|
+
/** Every foreign SSM architecture this engine can warm-start from. */
|
|
15
|
+
export const FOREIGN_MAMBA_ADAPTERS = [
|
|
16
|
+
falconMambaAdapter,
|
|
17
|
+
codestralMambaAdapter,
|
|
18
|
+
];
|
|
19
|
+
// ── Detection ────────────────────────────────────────────────────────────────
|
|
20
|
+
function architecturesOf(config) {
|
|
21
|
+
const raw = config["architectures"];
|
|
22
|
+
return Array.isArray(raw) ? raw.filter((a) => typeof a === "string") : [];
|
|
23
|
+
}
|
|
24
|
+
function modelTypeOf(config) {
|
|
25
|
+
const raw = config["model_type"];
|
|
26
|
+
return typeof raw === "string" ? raw : undefined;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A checkpoint is a transformer when any declared architecture carries an
|
|
30
|
+
* attention-stack marker. Recognised only to give a better error: attention
|
|
31
|
+
* weights (Q/K/V/O, positional embeddings, per-token KV cache) have no
|
|
32
|
+
* counterpart in a state-space mixer, so no rename or reshape can port them.
|
|
33
|
+
*/
|
|
34
|
+
function looksLikeTransformer(architectures, modelType) {
|
|
35
|
+
const haystack = [...architectures, modelType ?? ""].join(" ").toLowerCase();
|
|
36
|
+
if (haystack.includes("mamba") || haystack.includes("ssm"))
|
|
37
|
+
return false;
|
|
38
|
+
return /llama|mistral|qwen|gpt|phi|gemma|falcon(?!_?mamba)|starcoder|deepseek|olmo|attention|forcausallm/.test(haystack);
|
|
39
|
+
}
|
|
40
|
+
function supportedList() {
|
|
41
|
+
return FOREIGN_MAMBA_ADAPTERS.map((a) => `${a.label} — architectures ${a.architectures.join(" / ")}, model_type ${a.modelTypes.join(" / ")}`).join("; ");
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The adapter that claims this checkpoint. Throws — never guesses — when no
|
|
45
|
+
* adapter matches, because a wrong map produces a model that loads and then
|
|
46
|
+
* generates noise.
|
|
47
|
+
*/
|
|
48
|
+
export function foreignMambaAdapterFor(config) {
|
|
49
|
+
const architectures = architecturesOf(config);
|
|
50
|
+
const modelType = modelTypeOf(config);
|
|
51
|
+
const byArch = FOREIGN_MAMBA_ADAPTERS.find((a) => architectures.some((name) => a.architectures.includes(name)));
|
|
52
|
+
if (byArch)
|
|
53
|
+
return byArch;
|
|
54
|
+
const byType = modelType
|
|
55
|
+
? FOREIGN_MAMBA_ADAPTERS.find((a) => a.modelTypes.includes(modelType))
|
|
56
|
+
: undefined;
|
|
57
|
+
if (byType)
|
|
58
|
+
return byType;
|
|
59
|
+
const seen = architectures.length > 0
|
|
60
|
+
? `architectures [${architectures.join(", ")}]`
|
|
61
|
+
: modelType
|
|
62
|
+
? `model_type "${modelType}"`
|
|
63
|
+
: "a config declaring neither `architectures` nor `model_type`";
|
|
64
|
+
if (looksLikeTransformer(architectures, modelType)) {
|
|
65
|
+
throw new Error(`import/foreign: ${seen} is a TRANSFORMER checkpoint — its attention weights ` +
|
|
66
|
+
`(q/k/v/o projections, positional embeddings) have no counterpart in a state-space ` +
|
|
67
|
+
`mixer, so no weight port can exist for it at any tensor naming. Transformer coders ` +
|
|
68
|
+
`(IQuest, NousCoder, Maincoder and the like) can only be brought across by ` +
|
|
69
|
+
`DISTILLATION — train this engine's SSM against the transformer's outputs. ` +
|
|
70
|
+
`Weight porting is supported only for: ${supportedList()}.`);
|
|
71
|
+
}
|
|
72
|
+
throw new Error(`import/foreign: unsupported checkpoint — ${seen}. Supported: ${supportedList()}. ` +
|
|
73
|
+
`A transformer checkpoint cannot be weight-ported at all; distillation is the only route.`);
|
|
74
|
+
}
|
|
75
|
+
// ── Porting ──────────────────────────────────────────────────────────────────
|
|
76
|
+
/**
|
|
77
|
+
* Port a foreign checkpoint's tensors onto this engine's parameters. The result
|
|
78
|
+
* is device-free — {@link applyPortedWeights} uploads it into a live model.
|
|
79
|
+
*/
|
|
80
|
+
export function portForeignMamba(config, tensors) {
|
|
81
|
+
const adapter = foreignMambaAdapterFor(config);
|
|
82
|
+
const { modelConfig, plan } = adapter.describe(config);
|
|
83
|
+
return { ...executePortPlan(plan, tensors), modelConfig };
|
|
84
|
+
}
|
|
85
|
+
/** Convenience: port straight from a `.safetensors` buffer. */
|
|
86
|
+
export function portForeignMambaSafetensors(config, bytes) {
|
|
87
|
+
return portForeignMamba(config, safetensorsToTensors(bytes));
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/import/foreign/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/import/index.d.ts
CHANGED
|
@@ -4,8 +4,15 @@
|
|
|
4
4
|
* The inverse of {@link ../export}: read a `.safetensors` checkpoint back into a
|
|
5
5
|
* live {@link ../lm/evermind_lm.EvermindLM}. Round-trips Evermind's own exports,
|
|
6
6
|
* and warm-starts a foreign SSM checkpoint via a `rename` map.
|
|
7
|
+
*
|
|
8
|
+
* `./foreign` is the same seam for checkpoints that were never ours: published
|
|
9
|
+
* Mamba-1/Mamba-2 models, whose tensor names, layouts and `A_log`/conv
|
|
10
|
+
* conventions are reconciled onto `HybridMambaModel`'s parameters by a
|
|
11
|
+
* config-selected adapter.
|
|
7
12
|
*/
|
|
8
13
|
export { safetensorsToTensors } from "./safetensors.js";
|
|
9
14
|
export { importEvermind, importEvermindTensors, inferArchFromTensors } from "./evermind.js";
|
|
10
15
|
export type { ImportOptions } from "./evermind.js";
|
|
16
|
+
export { FOREIGN_MAMBA_ADAPTERS, foreignMambaAdapterFor, portForeignMamba, portForeignMambaSafetensors, applyPortedWeights, executePortPlan, normaliseSourceName, falconMambaAdapter, codestralMambaAdapter, } from "./foreign/index.js";
|
|
17
|
+
export type { ForeignConfig, ForeignMambaAdapter, PortTarget, PortDiscard, PortOp, PortPlan, PortRule, PortedCheckpoint, PortedTensors, SynthesisedTarget, } from "./foreign/index.js";
|
|
11
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/import/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/import/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC5F,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,2BAA2B,EAC3B,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,WAAW,EACX,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
|
package/dist/import/index.js
CHANGED
|
@@ -4,7 +4,14 @@
|
|
|
4
4
|
* The inverse of {@link ../export}: read a `.safetensors` checkpoint back into a
|
|
5
5
|
* live {@link ../lm/evermind_lm.EvermindLM}. Round-trips Evermind's own exports,
|
|
6
6
|
* and warm-starts a foreign SSM checkpoint via a `rename` map.
|
|
7
|
+
*
|
|
8
|
+
* `./foreign` is the same seam for checkpoints that were never ours: published
|
|
9
|
+
* Mamba-1/Mamba-2 models, whose tensor names, layouts and `A_log`/conv
|
|
10
|
+
* conventions are reconciled onto `HybridMambaModel`'s parameters by a
|
|
11
|
+
* config-selected adapter.
|
|
7
12
|
*/
|
|
8
13
|
export { safetensorsToTensors } from "./safetensors.js";
|
|
9
14
|
export { importEvermind, importEvermindTensors, inferArchFromTensors } from "./evermind.js";
|
|
15
|
+
// ── Foreign checkpoints (Falcon-Mamba / Codestral-Mamba → HybridMambaModel) ────
|
|
16
|
+
export { FOREIGN_MAMBA_ADAPTERS, foreignMambaAdapterFor, portForeignMamba, portForeignMambaSafetensors, applyPortedWeights, executePortPlan, normaliseSourceName, falconMambaAdapter, codestralMambaAdapter, } from "./foreign/index.js";
|
|
10
17
|
//# sourceMappingURL=index.js.map
|
package/dist/import/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/import/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/import/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAG5F,kFAAkF;AAClF,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,2BAA2B,EAC3B,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* @seanhogg/builderforce-memory-engine – entry point
|
|
3
3
|
*/
|
|
4
4
|
export { HybridMambaModel, MambaModel } from './model/mamba_model.js';
|
|
5
5
|
export { Mamba1Block } from './model/mamba1_block.js';
|
|
@@ -7,15 +7,30 @@ export { Mamba2Block } from './model/mamba2_block.js';
|
|
|
7
7
|
export { Mamba3Block } from './model/mamba3_block.js';
|
|
8
8
|
export { AttentionBlock } from './model/attention_block.js';
|
|
9
9
|
export { MambaBlock } from './model/mamba1_block.js';
|
|
10
|
-
export { SharedExpertMoE, LoadBalanceAccumulator, DEFAULT_MOE_CONFIG, DEFAULT_MOE_SEED, MoETrainer,
|
|
11
|
-
export type { MoEConfig, MoEParam, RouteResult, MoESample, MoETrainOptions, MoEEpochResult,
|
|
12
|
-
export {
|
|
13
|
-
export type {
|
|
14
|
-
export {
|
|
15
|
-
export
|
|
16
|
-
export {
|
|
10
|
+
export { SharedExpertMoE, LoadBalanceAccumulator, DEFAULT_MOE_CONFIG, DEFAULT_MOE_SEED, MoETrainer, } from './moe/index.js';
|
|
11
|
+
export type { MoEConfig, MoEParam, RouteResult, MoESample, MoETrainOptions, MoEEpochResult, } from './moe/index.js';
|
|
12
|
+
export { EvermindModelPackage, adaptAndDiff, EVERMIND_ADAPT_MAX_CHARS, EVERMIND_ADAPT_WINDOW_TOKENS, parseDeltaLearnPayload, buildDeltaLearnPayload, decodeDeltaPayload, deltaUnusableReason, MAX_DELTA_B64_CHARS, DELTA_LABEL_MAX_CHARS, mergeCheckpointDiffs, meanEvalLoss, sequenceLoss, EVAL_MAX_TOKENS, } from './evermind/index.js';
|
|
13
|
+
export type { EvermindModelManifest, EvermindModelCard, EvermindModelType, EvermindModality, PackageMeta, ValidationResult, AdaptResult, AdaptOptions, AdaptTokenizer, DeltaLearnPayload, DeltaParseResult, MergeResult, EvalExample, EvalTokenizer, } from './evermind/index.js';
|
|
14
|
+
export { EvermindLM, EvermindLMTrainer, DEFAULT_LM_CONFIG, DEFAULT_LM_SEED, logProbOfToken } from './lm/index.js';
|
|
15
|
+
export { EvermindTextEmbedder } from './lm/index.js';
|
|
16
|
+
export type { EvermindLMConfig, LMGenerateOptions, TextCodec, EvermindLMTrainOptions, EvermindLMDecodeState } from './lm/index.js';
|
|
17
|
+
export type { TextEmbedder, EmbedderCodec } from './lm/index.js';
|
|
18
|
+
export { AdamW, adamwUpdateInPlace } from './optim/adamw.js';
|
|
19
|
+
export type { AdamWOptions, OptimTarget, OptimParam, ShardSpec, AdamWKernelStep } from './optim/adamw.js';
|
|
20
|
+
export { LoRAAdapter, EvermindLMLoRA, quantizeBase } from './training/lora.js';
|
|
21
|
+
export type { LoRAConfig, LoRAFitOptions, BaseQuant } from './training/lora.js';
|
|
22
|
+
export { DynamicLossScaler, roundFp16, fp16View } from './training/mixed_precision.js';
|
|
23
|
+
export type { LossScalerOptions } from './training/mixed_precision.js';
|
|
24
|
+
export { MambaTrainer, cpuDimsFor, buildChunks, buildBatches, WSLA_MAX_DELTA } from './training/trainer.js';
|
|
25
|
+
export type { TrainOptions } from './training/trainer.js';
|
|
26
|
+
export { cpuModelForward, cpuModelLoss, cpuModelBackward, zeroCpuModelGrads, toNamedGrads, namedWeights, cpuWeightsFromNamed, paramMatrixShape, DEFAULT_LORA_TARGETS, CPU_GRADIENT_LAYER_TYPES, } from './training/model_cpu.js';
|
|
27
|
+
export type { CpuModelDims, CpuModelWeights, CpuModelGrads, CpuBackwardResult, CpuBackwardOptions, CpuGradientLayerType, } from './training/model_cpu.js';
|
|
28
|
+
export { mamba1CpuForward, mamba1CpuBackward, zeroMamba1Grads, MAMBA1_PARAM_NAMES, A_LOG_CLAMP_LO, A_LOG_CLAMP_HI, } from './training/mamba1_cpu.js';
|
|
29
|
+
export type { Mamba1CpuWeights, Mamba1CpuDims, Mamba1CpuCache, Mamba1CpuGrads, Mamba1CpuForwardResult, } from './training/mamba1_cpu.js';
|
|
30
|
+
export { linearForward, linearBackward, rmsNormForward, rmsNormBackward, silu, siluGrad, softplus, sigmoid, RMSNORM_EPS, } from './training/cpu_ops.js';
|
|
17
31
|
export { Tensor, backward, enableGrad, noGrad, clearTape, recordOperation, crossEntropyLoss, crossEntropyGrad, } from './training/autograd.js';
|
|
18
32
|
export { BPETokenizer } from './tokenizer/bpe.js';
|
|
33
|
+
export type { BPETokenizerSpec } from './tokenizer/bpe.js';
|
|
19
34
|
export type { BPEEncodeOptions, PadSide, HuggingFaceTokenizerSpec, SpecialTokenOverrides } from './tokenizer/bpe.js';
|
|
20
35
|
export { MultimodalVocab, VIDEO_BANK_INTRA, VIDEO_BANK_INTER, VideoRVQCodec, ImageRVQCodec, buildVideoSequence, generateVideo, generateImage, } from './codec/index.js';
|
|
21
36
|
export type { MultimodalVocabConfig, TokenKind, VideoRVQConfig, Frame, Video, } from './codec/index.js';
|
|
@@ -23,12 +38,15 @@ export { exportEvermind, EXPORT_FORMATS, exportSafetensors, tensorsToSafetensors
|
|
|
23
38
|
export type { ExportFormat, ExportFile, ExportResult, ExportOptions, HfMeta, NamedTensor, EvermindArch, TensorSpec, } from './export/index.js';
|
|
24
39
|
export { safetensorsToTensors, importEvermind, importEvermindTensors, inferArchFromTensors, } from './import/index.js';
|
|
25
40
|
export type { ImportOptions } from './import/index.js';
|
|
26
|
-
export {
|
|
27
|
-
export type {
|
|
41
|
+
export { FOREIGN_MAMBA_ADAPTERS, foreignMambaAdapterFor, portForeignMamba, portForeignMambaSafetensors, applyPortedWeights, executePortPlan, normaliseSourceName, falconMambaAdapter, codestralMambaAdapter, } from './import/index.js';
|
|
42
|
+
export type { ForeignConfig, ForeignMambaAdapter, PortTarget, PortDiscard, PortOp, PortPlan, PortRule, PortedCheckpoint, PortedTensors, SynthesisedTarget, } from './import/index.js';
|
|
43
|
+
export { benchmarkModel, benchmarkModelAsync, benchmarkText, compareModels, compareReports, corpusToSequences, trainAndBenchmark, benchmarkAdaptationCost, formatAdaptationCostReport, tokenWindows, adaptationsAfterSkip, argmax as benchArgmax, topKIndices, perplexity, bitsPerToken, LN2, } from './bench/index.js';
|
|
44
|
+
export type { LogitsModel, AsyncLogitsModel, BenchmarkOptions, BenchmarkReport, ComparisonReport, TrainAndBenchmarkOptions, TrainAndBenchmarkResult, AdaptationCostOptions, AdaptationCostPoint, AdaptationCostReport, } from './bench/index.js';
|
|
28
45
|
export { crc32, appendCrcTrailer, verifyCrcTrailer, CRC_TRAILER_MAGIC } from './utils/crc32.js';
|
|
29
46
|
export type { CrcCheck } from './utils/crc32.js';
|
|
30
47
|
export { computeRowDelta, applyRowDelta, serializeRowDelta, deserializeRowDelta, diffCheckpoints, applyCheckpointDiff, } from './utils/delta.js';
|
|
31
48
|
export type { RowDelta } from './utils/delta.js';
|
|
49
|
+
export { bytesToBase64, base64ToBytes } from './utils/base64.js';
|
|
32
50
|
export { SeededRng, setInitSeed, randn, gaussianArray } from './utils/rng.js';
|
|
33
51
|
export type { HybridMambaModelConfig, MambaModelConfig, ModelForwardResult, SamplingOptions, LayerSpec, } from './model/mamba_model.js';
|
|
34
52
|
export type { SequenceLayer, LayerParam, LayerType, LayerForwardResult } from './model/sequence_layer.js';
|
|
@@ -41,6 +59,7 @@ export { quantizeFp16, dequantizeFp16, floatToFp16, fp16ToFloat, quantizeInt8, d
|
|
|
41
59
|
export { SELECTIVE_SCAN_FORWARD_WGSL, SELECTIVE_SCAN_BACKWARD_WGSL } from './kernels/selective_scan.js';
|
|
42
60
|
export { CONV1D_FORWARD_WGSL, CONV1D_BACKWARD_WGSL } from './kernels/conv1d.js';
|
|
43
61
|
export { LINEAR_FORWARD_WGSL, LINEAR_BACKWARD_WGSL } from './kernels/linear_projection.js';
|
|
62
|
+
export { COL_SLICE_WGSL, COL_SLICE_ENTRY, dispatchColumnSlice } from './kernels/slice.js';
|
|
44
63
|
export { WEIGHT_UPDATE_WGSL, GRAD_CLIP_WGSL } from './kernels/weight_update.js';
|
|
45
64
|
export { ACTIVATIONS_WGSL, ACTIVATIONS_BACKWARD_WGSL, SOFTMAX_FORWARD_WGSL, SOFTMAX_BACKWARD_WGSL } from './kernels/activations.js';
|
|
46
65
|
export { SSD_FORWARD_WGSL, SSD_BACKWARD_WGSL } from './kernels/ssd.js';
|
|
@@ -49,6 +68,4 @@ export { ATTENTION_FORWARD_WGSL, ATTENTION_BACKWARD_WGSL, SOFTMAX_WGSL } from '.
|
|
|
49
68
|
export { REGION, LIMBIC_DIM, LIMBIC_DIM_NAMES, LIMBIC_STATE_DIM, LIMBIC_BOUNDS, NEUTRAL_STATE, clampDim, clampState, neutralState, stateToRecord, recordToState, personalitySetpoint, LimbicModel, DEFAULT_LIMBIC_CONFIG, DEFAULT_LIMBIC_SEED, LimbicTrainer, } from './limbic/index.js';
|
|
50
69
|
export type { Region, LimbicDimName, PersonalityTraits, LimbicModelConfig, LimbicForward, LimbicParam, LimbicSample, LimbicTrainOptions, } from './limbic/index.js';
|
|
51
70
|
export { LIMBIC_AFFECT_WGSL } from './kernels/limbic_affect.js';
|
|
52
|
-
export declare const VERSION = "2.0.0";
|
|
53
|
-
export declare const DESCRIPTION = "MambaCode.js: WebGPU-accelerated Mamba-1/2/3 and Hybrid SSM for browser code models";
|
|
54
71
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGtE,OAAO,EAAE,WAAW,EAAE,MAAQ,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAQ,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAQ,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EACH,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* @seanhogg/builderforce-memory-engine – entry point
|
|
3
3
|
*/
|
|
4
4
|
// ── Model classes ─────────────────────────────────────────────────────────────
|
|
5
5
|
export { HybridMambaModel, MambaModel } from './model/mamba_model.js';
|
|
@@ -11,12 +11,24 @@ export { AttentionBlock } from './model/attention_block.js';
|
|
|
11
11
|
// Deprecated alias — kept until 3.0.0
|
|
12
12
|
export { MambaBlock } from './model/mamba1_block.js';
|
|
13
13
|
// ── Mixture-of-Experts (shared-expert hybrid sparsity) ─────────────────────────
|
|
14
|
-
export { SharedExpertMoE, LoadBalanceAccumulator, DEFAULT_MOE_CONFIG, DEFAULT_MOE_SEED, MoETrainer,
|
|
14
|
+
export { SharedExpertMoE, LoadBalanceAccumulator, DEFAULT_MOE_CONFIG, DEFAULT_MOE_SEED, MoETrainer, } from './moe/index.js';
|
|
15
|
+
// ── Evermind (the .evermind artifact + the shared learning pipeline) ───────────
|
|
16
|
+
export { EvermindModelPackage, adaptAndDiff, EVERMIND_ADAPT_MAX_CHARS, EVERMIND_ADAPT_WINDOW_TOKENS, parseDeltaLearnPayload, buildDeltaLearnPayload, decodeDeltaPayload, deltaUnusableReason, MAX_DELTA_B64_CHARS, DELTA_LABEL_MAX_CHARS, mergeCheckpointDiffs, meanEvalLoss, sequenceLoss, EVAL_MAX_TOKENS, } from './evermind/index.js';
|
|
15
17
|
// ── EvermindLM (the generative model) + AdamW ──────────────────────────────────
|
|
16
|
-
export { EvermindLM, EvermindLMTrainer, DEFAULT_LM_CONFIG, DEFAULT_LM_SEED } from './lm/index.js';
|
|
17
|
-
|
|
18
|
+
export { EvermindLM, EvermindLMTrainer, DEFAULT_LM_CONFIG, DEFAULT_LM_SEED, logProbOfToken } from './lm/index.js';
|
|
19
|
+
// CPU text→vector embedder — SSM-embedding recall with no GPU.
|
|
20
|
+
export { EvermindTextEmbedder } from './lm/index.js';
|
|
21
|
+
export { AdamW, adamwUpdateInPlace } from './optim/adamw.js';
|
|
22
|
+
// PEFT / efficient-training toolkit (LoRA, QLoRA, mixed precision, checkpointing).
|
|
23
|
+
export { LoRAAdapter, EvermindLMLoRA, quantizeBase } from './training/lora.js';
|
|
24
|
+
export { DynamicLossScaler, roundFp16, fp16View } from './training/mixed_precision.js';
|
|
18
25
|
// ── Training ──────────────────────────────────────────────────────────────────
|
|
19
|
-
export { MambaTrainer } from './training/trainer.js';
|
|
26
|
+
export { MambaTrainer, cpuDimsFor, buildChunks, buildBatches, WSLA_MAX_DELTA } from './training/trainer.js';
|
|
27
|
+
// The exact CPU forward + backward the trainer differentiates with. Exported so a
|
|
28
|
+
// host can compute gradients (or gradient-check the model) without a GPU.
|
|
29
|
+
export { cpuModelForward, cpuModelLoss, cpuModelBackward, zeroCpuModelGrads, toNamedGrads, namedWeights, cpuWeightsFromNamed, paramMatrixShape, DEFAULT_LORA_TARGETS, CPU_GRADIENT_LAYER_TYPES, } from './training/model_cpu.js';
|
|
30
|
+
export { mamba1CpuForward, mamba1CpuBackward, zeroMamba1Grads, MAMBA1_PARAM_NAMES, A_LOG_CLAMP_LO, A_LOG_CLAMP_HI, } from './training/mamba1_cpu.js';
|
|
31
|
+
export { linearForward, linearBackward, rmsNormForward, rmsNormBackward, silu, siluGrad, softplus, sigmoid, RMSNORM_EPS, } from './training/cpu_ops.js';
|
|
20
32
|
export { Tensor, backward, enableGrad, noGrad, clearTape, recordOperation, crossEntropyLoss, crossEntropyGrad, } from './training/autograd.js';
|
|
21
33
|
// ── Tokenizer ─────────────────────────────────────────────────────────────────
|
|
22
34
|
export { BPETokenizer } from './tokenizer/bpe.js';
|
|
@@ -26,11 +38,16 @@ export { MultimodalVocab, VIDEO_BANK_INTRA, VIDEO_BANK_INTER, VideoRVQCodec, Ima
|
|
|
26
38
|
export { exportEvermind, EXPORT_FORMATS, exportSafetensors, tensorsToSafetensors, exportOnnx, exportGguf, configJson, generationConfigJson, tokenizerJson, modelCardMarkdown, namedTensors, evermindTensorSpec, archOf, paramCount, } from './export/index.js';
|
|
27
39
|
// ── Model import (warm-start / weight-port: safetensors → EvermindLM) ────────────
|
|
28
40
|
export { safetensorsToTensors, importEvermind, importEvermindTensors, inferArchFromTensors, } from './import/index.js';
|
|
41
|
+
// ── Foreign weight port (Falcon-Mamba / Codestral-Mamba → HybridMambaModel) ────
|
|
42
|
+
// Transformer checkpoints are NOT portable — distillation is the only route, and
|
|
43
|
+
// `foreignMambaAdapterFor` rejects them saying so.
|
|
44
|
+
export { FOREIGN_MAMBA_ADAPTERS, foreignMambaAdapterFor, portForeignMamba, portForeignMambaSafetensors, applyPortedWeights, executePortPlan, normaliseSourceName, falconMambaAdapter, codestralMambaAdapter, } from './import/index.js';
|
|
29
45
|
// ── Benchmarking (held-out perplexity / accuracy / throughput + A/B) ──────────
|
|
30
|
-
export { benchmarkModel, benchmarkModelAsync, benchmarkText, compareModels, compareReports, corpusToSequences, trainAndBenchmark, argmax as benchArgmax, topKIndices, perplexity, bitsPerToken, LN2, } from './bench/index.js';
|
|
46
|
+
export { benchmarkModel, benchmarkModelAsync, benchmarkText, compareModels, compareReports, corpusToSequences, trainAndBenchmark, benchmarkAdaptationCost, formatAdaptationCostReport, tokenWindows, adaptationsAfterSkip, argmax as benchArgmax, topKIndices, perplexity, bitsPerToken, LN2, } from './bench/index.js';
|
|
31
47
|
// ── Checkpoint integrity (CRC-32 + trailer) ───────────────────────────────────
|
|
32
48
|
export { crc32, appendCrcTrailer, verifyCrcTrailer, CRC_TRAILER_MAGIC } from './utils/crc32.js';
|
|
33
49
|
export { computeRowDelta, applyRowDelta, serializeRowDelta, deserializeRowDelta, diffCheckpoints, applyCheckpointDiff, } from './utils/delta.js';
|
|
50
|
+
export { bytesToBase64, base64ToBytes } from './utils/base64.js';
|
|
34
51
|
// ── Seeded RNG (reproducible weight init) ─────────────────────────────────────
|
|
35
52
|
export { SeededRng, setInitSeed, randn, gaussianArray } from './utils/rng.js';
|
|
36
53
|
// ── GPU utilities ─────────────────────────────────────────────────────────────
|
|
@@ -42,6 +59,7 @@ export { quantizeFp16, dequantizeFp16, floatToFp16, fp16ToFloat, quantizeInt8, d
|
|
|
42
59
|
export { SELECTIVE_SCAN_FORWARD_WGSL, SELECTIVE_SCAN_BACKWARD_WGSL } from './kernels/selective_scan.js';
|
|
43
60
|
export { CONV1D_FORWARD_WGSL, CONV1D_BACKWARD_WGSL } from './kernels/conv1d.js';
|
|
44
61
|
export { LINEAR_FORWARD_WGSL, LINEAR_BACKWARD_WGSL } from './kernels/linear_projection.js';
|
|
62
|
+
export { COL_SLICE_WGSL, COL_SLICE_ENTRY, dispatchColumnSlice } from './kernels/slice.js';
|
|
45
63
|
export { WEIGHT_UPDATE_WGSL, GRAD_CLIP_WGSL } from './kernels/weight_update.js';
|
|
46
64
|
export { ACTIVATIONS_WGSL, ACTIVATIONS_BACKWARD_WGSL, SOFTMAX_FORWARD_WGSL, SOFTMAX_BACKWARD_WGSL } from './kernels/activations.js';
|
|
47
65
|
// Mamba-2 SSD kernels
|
|
@@ -53,7 +71,4 @@ export { ATTENTION_FORWARD_WGSL, ATTENTION_BACKWARD_WGSL, SOFTMAX_WGSL } from '.
|
|
|
53
71
|
// ── Limbic system (trainable affective dynamics) ──────────────────────────────
|
|
54
72
|
export { REGION, LIMBIC_DIM, LIMBIC_DIM_NAMES, LIMBIC_STATE_DIM, LIMBIC_BOUNDS, NEUTRAL_STATE, clampDim, clampState, neutralState, stateToRecord, recordToState, personalitySetpoint, LimbicModel, DEFAULT_LIMBIC_CONFIG, DEFAULT_LIMBIC_SEED, LimbicTrainer, } from './limbic/index.js';
|
|
55
73
|
export { LIMBIC_AFFECT_WGSL } from './kernels/limbic_affect.js';
|
|
56
|
-
// ── Version ───────────────────────────────────────────────────────────────────
|
|
57
|
-
export const VERSION = '2.0.0';
|
|
58
|
-
export const DESCRIPTION = 'MambaCode.js: WebGPU-accelerated Mamba-1/2/3 and Hybrid SSM for browser code models';
|
|
59
74
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iFAAiF;AAEjF,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEtE,oBAAoB;AACpB,OAAO,EAAE,WAAW,EAAE,MAAQ,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAQ,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAQ,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,sCAAsC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,kFAAkF;AAClF,OAAO,EACH,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selective_scan.d.ts","sourceRoot":"","sources":["../../src/kernels/selective_scan.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,2BAA2B,EAAE,
|
|
1
|
+
{"version":3,"file":"selective_scan.d.ts","sourceRoot":"","sources":["../../src/kernels/selective_scan.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,2BAA2B,EAAE,MAiOzC,CAAC;AAKF,eAAO,MAAM,4BAA4B,EAAE,MA6H1C,CAAC"}
|
|
@@ -131,21 +131,27 @@ fn forward_scan(
|
|
|
131
131
|
// ---- Kogge-Stone inclusive prefix scan within tile ----
|
|
132
132
|
// Associative operator: (a1, b1) ∘ (a2, b2) = (a1*a2, a1*b2 + b1)
|
|
133
133
|
// This computes cumulative state recurrence in log2(TILE) steps.
|
|
134
|
+
// NOTE the barrier placement. Both barriers MUST sit in uniform control
|
|
135
|
+
// flow — every invocation in the workgroup has to reach them. The earlier
|
|
136
|
+
// version put the first workgroupBarrier() INSIDE the if (lid >= stride)
|
|
137
|
+
// branch, which is a WGSL uniformity violation: shader creation fails on a
|
|
138
|
+
// conformant implementation. Computing into locals first, then writing
|
|
139
|
+
// back after a uniform barrier, is the correct read-then-write split.
|
|
134
140
|
var stride: u32 = 1u;
|
|
135
141
|
loop {
|
|
136
142
|
if (stride >= TILE) { break; }
|
|
143
|
+
var new_a = wg_a[lid];
|
|
144
|
+
var new_bu = wg_bu[lid];
|
|
137
145
|
if (lid >= stride) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
let new_a = prev_a * wg_a[lid];
|
|
143
|
-
let new_bu = prev_a * wg_bu[lid] + prev_bu;
|
|
144
|
-
workgroupBarrier();
|
|
145
|
-
wg_a[lid] = new_a;
|
|
146
|
-
wg_bu[lid] = new_bu;
|
|
146
|
+
// Combine: new_a = prev_a * cur_a (product of A_bars)
|
|
147
|
+
// new_bu = prev_a * cur_bu + prev_bu
|
|
148
|
+
new_a = wg_a[lid - stride] * new_a;
|
|
149
|
+
new_bu = wg_a[lid - stride] * new_bu + wg_bu[lid - stride];
|
|
147
150
|
}
|
|
148
151
|
workgroupBarrier();
|
|
152
|
+
wg_a[lid] = new_a;
|
|
153
|
+
wg_bu[lid] = new_bu;
|
|
154
|
+
workgroupBarrier();
|
|
149
155
|
stride = stride << 1u;
|
|
150
156
|
}
|
|
151
157
|
|