@seanhogg/builderforce-memory-engine 2026.6.39 → 2026.7.12
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/dist/codec/evermind_video.d.ts +35 -0
- package/dist/codec/evermind_video.d.ts.map +1 -0
- package/dist/codec/evermind_video.js +37 -0
- package/dist/codec/evermind_video.js.map +1 -0
- package/dist/codec/image_rvq.d.ts +28 -0
- package/dist/codec/image_rvq.d.ts.map +1 -0
- package/dist/codec/image_rvq.js +39 -0
- package/dist/codec/image_rvq.js.map +1 -0
- package/dist/codec/index.d.ts +13 -0
- package/dist/codec/index.d.ts.map +1 -0
- package/dist/codec/index.js +11 -0
- package/dist/codec/index.js.map +1 -0
- package/dist/codec/multimodal_vocab.d.ts +79 -0
- package/dist/codec/multimodal_vocab.d.ts.map +1 -0
- package/dist/codec/multimodal_vocab.js +96 -0
- package/dist/codec/multimodal_vocab.js.map +1 -0
- package/dist/codec/video_rvq.d.ts +116 -0
- package/dist/codec/video_rvq.d.ts.map +1 -0
- package/dist/codec/video_rvq.js +450 -0
- package/dist/codec/video_rvq.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/kernels/selective_scan.d.ts.map +1 -1
- package/dist/kernels/selective_scan.js +9 -3
- package/dist/kernels/selective_scan.js.map +1 -1
- package/dist/kernels/ssd.d.ts.map +1 -1
- package/dist/kernels/ssd.js +8 -2
- package/dist/kernels/ssd.js.map +1 -1
- package/dist/kernels/weight_update.d.ts.map +1 -1
- package/dist/kernels/weight_update.js +22 -3
- package/dist/kernels/weight_update.js.map +1 -1
- package/dist/limbic/limbic_trainer.d.ts +5 -1
- package/dist/limbic/limbic_trainer.d.ts.map +1 -1
- package/dist/limbic/limbic_trainer.js +4 -2
- package/dist/limbic/limbic_trainer.js.map +1 -1
- package/dist/model/mamba_model.d.ts +17 -0
- package/dist/model/mamba_model.d.ts.map +1 -1
- package/dist/model/mamba_model.js +27 -0
- package/dist/model/mamba_model.js.map +1 -1
- package/dist/moe/index.d.ts +1 -1
- package/dist/moe/index.d.ts.map +1 -1
- package/dist/moe/moe_package.d.ts +40 -2
- package/dist/moe/moe_package.d.ts.map +1 -1
- package/dist/moe/moe_package.js +90 -7
- package/dist/moe/moe_package.js.map +1 -1
- package/dist/training/trainer.d.ts +34 -2
- package/dist/training/trainer.d.ts.map +1 -1
- package/dist/training/trainer.js +76 -26
- package/dist/training/trainer.js.map +1 -1
- package/package.json +1 -1
- package/src/codec/evermind_video.ts +55 -0
- package/src/codec/image_rvq.ts +50 -0
- package/src/codec/index.ts +16 -0
- package/src/codec/multimodal_vocab.ts +115 -0
- package/src/codec/video_rvq.ts +496 -0
- package/src/index.ts +22 -0
- package/src/kernels/selective_scan.ts +9 -3
- package/src/kernels/ssd.ts +8 -2
- package/src/kernels/weight_update.ts +22 -3
- package/src/limbic/limbic_trainer.ts +9 -4
- package/src/model/mamba_model.ts +27 -0
- package/src/moe/index.ts +1 -0
- package/src/moe/moe_package.ts +107 -6
- package/src/training/trainer.ts +92 -28
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* video_rvq.ts — VideoRVQCodec: the pixels ⇄ tokens bottleneck that lets Evermind
|
|
3
|
+
* generate video without changing the generator.
|
|
4
|
+
*
|
|
5
|
+
* Evermind is a discrete-token autoregressive SSM. To make it a video model you
|
|
6
|
+
* do NOT touch the model — you give it a codec that maps a clip to a stream of
|
|
7
|
+
* discrete tokens and back. This is the visual analogue of the BPE tokenizer:
|
|
8
|
+
* where BPE turns text ⇄ ids, VideoRVQCodec turns frames ⇄ ids.
|
|
9
|
+
*
|
|
10
|
+
* Design — TEMPORAL residual vector quantization (the "video-from-the-start"
|
|
11
|
+
* choice):
|
|
12
|
+
*
|
|
13
|
+
* • Each frame is cut into non-overlapping p×p patches; each patch is a vector
|
|
14
|
+
* of length p·p·C (the "latent").
|
|
15
|
+
* • KEYFRAMES (frame 0 and every `keyframeInterval`-th frame) are quantized
|
|
16
|
+
* directly against the INTRA codebook bank.
|
|
17
|
+
* • Every other frame is INTER: we quantize the *residual against the previous
|
|
18
|
+
* RECONSTRUCTED frame* against the INTER bank. Video is mostly temporally
|
|
19
|
+
* redundant, so these deltas are small and cheap — this is exactly why an
|
|
20
|
+
* SSM (linear-time in sequence length) is the right generator for the long
|
|
21
|
+
* token streams video produces.
|
|
22
|
+
* • Quantization at each bank is RESIDUAL VQ over `levels` codebooks: level 0
|
|
23
|
+
* picks the nearest entry, level 1 quantizes what level 0 missed, and so on.
|
|
24
|
+
* More levels ⇒ finer reconstruction ⇒ more tokens per patch.
|
|
25
|
+
*
|
|
26
|
+
* The encoder runs closed-loop (it references its own reconstruction, never the
|
|
27
|
+
* ground-truth previous frame) so the decoder — which only ever has
|
|
28
|
+
* reconstructions — stays exactly in sync.
|
|
29
|
+
*
|
|
30
|
+
* Codebooks start random (a cold codec is lossy, like any untrained neural
|
|
31
|
+
* codec) and are learned by {@link VideoRVQCodec.fit} (greedy per-level k-means).
|
|
32
|
+
* Reaching photoreal fidelity needs training on a real corpus with real compute
|
|
33
|
+
* — that is the one genuine blocker on shipping generated video, not the wiring.
|
|
34
|
+
*
|
|
35
|
+
* Pure CPU, zero deps, deterministic under a seed — same conventions as the rest
|
|
36
|
+
* of the engine. A WGSL/WebGPU acceleration is a future drop-in with these shapes.
|
|
37
|
+
*/
|
|
38
|
+
import { SeededRng } from "../utils/rng.js";
|
|
39
|
+
import { MultimodalVocab, VIDEO_BANK_INTRA, VIDEO_BANK_INTER } from "./multimodal_vocab.js";
|
|
40
|
+
const VRQ_MAGIC = 0x56525130; // "VRQ0"
|
|
41
|
+
const DEFAULTS = {
|
|
42
|
+
channels: 3,
|
|
43
|
+
patch: 4,
|
|
44
|
+
levels: 2,
|
|
45
|
+
codebookSize: 16,
|
|
46
|
+
keyframeInterval: 12,
|
|
47
|
+
textVocabSize: 0,
|
|
48
|
+
seed: 0x56524651, // "VRFQ"
|
|
49
|
+
};
|
|
50
|
+
export class VideoRVQCodec {
|
|
51
|
+
height;
|
|
52
|
+
width;
|
|
53
|
+
channels;
|
|
54
|
+
patch;
|
|
55
|
+
levels;
|
|
56
|
+
codebookSize;
|
|
57
|
+
keyframeInterval;
|
|
58
|
+
/** Patch latent dimension = patch·patch·channels. */
|
|
59
|
+
latentDim;
|
|
60
|
+
/** Patches per frame = (H/patch)·(W/patch). */
|
|
61
|
+
patchesPerFrame;
|
|
62
|
+
/** Code tokens emitted per frame = patchesPerFrame·levels. */
|
|
63
|
+
tokensPerFrame;
|
|
64
|
+
/** The unified text+video vocabulary; feed `.vocab.size` to EvermindLM. */
|
|
65
|
+
vocab;
|
|
66
|
+
/** Two banks × levels codebooks; each codebook is `codebookSize × latentDim` row-major. */
|
|
67
|
+
banks;
|
|
68
|
+
constructor(config) {
|
|
69
|
+
const channels = config.channels ?? DEFAULTS.channels;
|
|
70
|
+
const patch = config.patch ?? DEFAULTS.patch;
|
|
71
|
+
if (config.height <= 0 || config.width <= 0)
|
|
72
|
+
throw new Error("VideoRVQCodec: height/width must be > 0");
|
|
73
|
+
if (config.height % patch !== 0 || config.width % patch !== 0) {
|
|
74
|
+
throw new Error(`VideoRVQCodec: height/width must be divisible by patch (${patch})`);
|
|
75
|
+
}
|
|
76
|
+
this.height = config.height;
|
|
77
|
+
this.width = config.width;
|
|
78
|
+
this.channels = channels;
|
|
79
|
+
this.patch = patch;
|
|
80
|
+
this.levels = config.levels ?? DEFAULTS.levels;
|
|
81
|
+
this.codebookSize = config.codebookSize ?? DEFAULTS.codebookSize;
|
|
82
|
+
this.keyframeInterval = Math.max(1, config.keyframeInterval ?? DEFAULTS.keyframeInterval);
|
|
83
|
+
this.latentDim = patch * patch * channels;
|
|
84
|
+
this.patchesPerFrame = (this.height / patch) * (this.width / patch);
|
|
85
|
+
this.tokensPerFrame = this.patchesPerFrame * this.levels;
|
|
86
|
+
this.vocab = new MultimodalVocab({
|
|
87
|
+
textVocabSize: config.textVocabSize ?? DEFAULTS.textVocabSize,
|
|
88
|
+
levels: this.levels,
|
|
89
|
+
codebookSize: this.codebookSize,
|
|
90
|
+
});
|
|
91
|
+
const rng = new SeededRng((config.seed ?? DEFAULTS.seed) >>> 0 || 1);
|
|
92
|
+
const mkBank = () => Array.from({ length: this.levels }, () => {
|
|
93
|
+
const cb = new Float32Array(this.codebookSize * this.latentDim);
|
|
94
|
+
// Small-magnitude init: intra entries hover near mid-grey, inter (delta) near 0.
|
|
95
|
+
for (let i = 0; i < cb.length; i++)
|
|
96
|
+
cb[i] = (rng.next() - 0.5) * 0.1;
|
|
97
|
+
return cb;
|
|
98
|
+
});
|
|
99
|
+
this.banks = [mkBank(), mkBank()];
|
|
100
|
+
// Bias the intra bank toward the [0,1] pixel range so a cold codec is not black.
|
|
101
|
+
for (const cb of this.banks[VIDEO_BANK_INTRA])
|
|
102
|
+
for (let i = 0; i < cb.length; i++)
|
|
103
|
+
cb[i] += 0.5;
|
|
104
|
+
}
|
|
105
|
+
/** Total vocabulary size for this codec's model. */
|
|
106
|
+
get vocabSize() {
|
|
107
|
+
return this.vocab.size;
|
|
108
|
+
}
|
|
109
|
+
// ── Serialize (so a trained codec ships alongside the model artifact) ───────────
|
|
110
|
+
/**
|
|
111
|
+
* Serialize config + learned codebooks to a compact "VRQ0" binary. A generated
|
|
112
|
+
* video model is only servable if its codec travels with it (the decoder needs
|
|
113
|
+
* these codebooks), so this is the video analogue of EvermindLM.exportWeights.
|
|
114
|
+
*/
|
|
115
|
+
serialize() {
|
|
116
|
+
const headerEls = 9; // magic, h, w, channels, patch, levels, codebookSize, keyframeInterval, textVocabSize
|
|
117
|
+
const total = 2 * this.levels * this.codebookSize * this.latentDim;
|
|
118
|
+
const buf = new ArrayBuffer(headerEls * 4 + total * 4);
|
|
119
|
+
const head = new Uint32Array(buf, 0, headerEls);
|
|
120
|
+
head[0] = VRQ_MAGIC;
|
|
121
|
+
head[1] = this.height;
|
|
122
|
+
head[2] = this.width;
|
|
123
|
+
head[3] = this.channels;
|
|
124
|
+
head[4] = this.patch;
|
|
125
|
+
head[5] = this.levels;
|
|
126
|
+
head[6] = this.codebookSize;
|
|
127
|
+
head[7] = this.keyframeInterval;
|
|
128
|
+
head[8] = this.vocab.textVocabSize;
|
|
129
|
+
const body = new Float32Array(buf, headerEls * 4, total);
|
|
130
|
+
let o = 0;
|
|
131
|
+
for (const bank of this.banks) {
|
|
132
|
+
for (const cb of bank) {
|
|
133
|
+
body.set(cb, o);
|
|
134
|
+
o += cb.length;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return buf;
|
|
138
|
+
}
|
|
139
|
+
/** Reconstruct a codec (config + codebooks) from a "VRQ0" binary. */
|
|
140
|
+
static deserialize(buffer) {
|
|
141
|
+
const head = new Uint32Array(buffer, 0, 9);
|
|
142
|
+
if (head[0] !== VRQ_MAGIC)
|
|
143
|
+
throw new Error("VideoRVQCodec.deserialize: bad magic (not a VRQ0 blob)");
|
|
144
|
+
const codec = new VideoRVQCodec({
|
|
145
|
+
height: head[1],
|
|
146
|
+
width: head[2],
|
|
147
|
+
channels: head[3],
|
|
148
|
+
patch: head[4],
|
|
149
|
+
levels: head[5],
|
|
150
|
+
codebookSize: head[6],
|
|
151
|
+
keyframeInterval: head[7],
|
|
152
|
+
textVocabSize: head[8],
|
|
153
|
+
});
|
|
154
|
+
const total = 2 * codec.levels * codec.codebookSize * codec.latentDim;
|
|
155
|
+
const body = new Float32Array(buffer.slice(36, 36 + total * 4));
|
|
156
|
+
let o = 0;
|
|
157
|
+
for (const bank of codec.banks) {
|
|
158
|
+
for (const cb of bank) {
|
|
159
|
+
cb.set(body.subarray(o, o + cb.length));
|
|
160
|
+
o += cb.length;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return codec;
|
|
164
|
+
}
|
|
165
|
+
// ── Encode ───────────────────────────────────────────────────────────────────
|
|
166
|
+
/** Encode a clip to a self-delimiting token stream: `<vid> (marker codes…)… </vid>`. */
|
|
167
|
+
encode(video) {
|
|
168
|
+
this.assertShape(video);
|
|
169
|
+
const out = [this.vocab.bosVideo];
|
|
170
|
+
let prevRecon = null;
|
|
171
|
+
for (let t = 0; t < video.length; t++) {
|
|
172
|
+
const patches = this.toPatches(video[t]);
|
|
173
|
+
const isKey = prevRecon === null || t % this.keyframeInterval === 0;
|
|
174
|
+
const bankId = isKey ? VIDEO_BANK_INTRA : VIDEO_BANK_INTER;
|
|
175
|
+
out.push(isKey ? this.vocab.frameKey : this.vocab.frameDelta);
|
|
176
|
+
const reconPatches = [];
|
|
177
|
+
for (let p = 0; p < this.patchesPerFrame; p++) {
|
|
178
|
+
const target = isKey ? patches[p] : sub(patches[p], prevRecon[p]);
|
|
179
|
+
const { codes, recon } = this.rvqEncode(bankId, target);
|
|
180
|
+
for (let l = 0; l < this.levels; l++)
|
|
181
|
+
out.push(this.vocab.codeToken(bankId, l, codes[l]));
|
|
182
|
+
reconPatches.push(isKey ? recon : add(prevRecon[p], recon));
|
|
183
|
+
}
|
|
184
|
+
prevRecon = reconPatches;
|
|
185
|
+
}
|
|
186
|
+
out.push(this.vocab.eosVideo);
|
|
187
|
+
return out;
|
|
188
|
+
}
|
|
189
|
+
// ── Decode ───────────────────────────────────────────────────────────────────
|
|
190
|
+
/**
|
|
191
|
+
* Decode a token stream back to frames. Tolerant by design: it skips text /
|
|
192
|
+
* stray tokens, treats a frame whose codes run short as zero-padded, and stops
|
|
193
|
+
* at `</vid>` or end-of-stream — so a stream sampled from an under-trained
|
|
194
|
+
* generator still yields a valid (if noisy) clip instead of throwing.
|
|
195
|
+
*/
|
|
196
|
+
decode(tokens) {
|
|
197
|
+
const frames = [];
|
|
198
|
+
let prevRecon = null;
|
|
199
|
+
let i = 0;
|
|
200
|
+
// Advance to the first frame marker (tolerate a leading prompt / <vid>).
|
|
201
|
+
while (i < tokens.length && !this.vocab.isVideoMarker(tokens[i])) {
|
|
202
|
+
if (tokens[i] === this.vocab.eosVideo)
|
|
203
|
+
return frames;
|
|
204
|
+
i++;
|
|
205
|
+
}
|
|
206
|
+
while (i < tokens.length) {
|
|
207
|
+
const marker = tokens[i];
|
|
208
|
+
if (!this.vocab.isVideoMarker(marker))
|
|
209
|
+
break; // </vid>, text, or garbage → end
|
|
210
|
+
i++;
|
|
211
|
+
const isKey = marker === this.vocab.frameKey || prevRecon === null;
|
|
212
|
+
const bankId = isKey ? VIDEO_BANK_INTRA : VIDEO_BANK_INTER;
|
|
213
|
+
// Pull up to tokensPerFrame code tokens; stop early on the next marker/EOS.
|
|
214
|
+
const codes = [];
|
|
215
|
+
while (codes.length < this.tokensPerFrame && i < tokens.length && this.vocab.isCode(tokens[i])) {
|
|
216
|
+
codes.push(tokens[i]);
|
|
217
|
+
i++;
|
|
218
|
+
}
|
|
219
|
+
const reconPatches = [];
|
|
220
|
+
for (let p = 0; p < this.patchesPerFrame; p++) {
|
|
221
|
+
const recon = new Float32Array(this.latentDim);
|
|
222
|
+
for (let l = 0; l < this.levels; l++) {
|
|
223
|
+
const slot = p * this.levels + l;
|
|
224
|
+
const tok = slot < codes.length ? codes[slot] : -1;
|
|
225
|
+
if (tok < 0)
|
|
226
|
+
continue; // missing → contribute zero (graceful degradation)
|
|
227
|
+
const { level, code } = this.vocab.decodeCode(tok);
|
|
228
|
+
addRowInto(recon, this.banks[bankId][level], code, this.latentDim);
|
|
229
|
+
}
|
|
230
|
+
reconPatches.push(isKey ? recon : add(prevRecon[p], recon));
|
|
231
|
+
}
|
|
232
|
+
frames.push(this.fromPatches(reconPatches));
|
|
233
|
+
prevRecon = reconPatches;
|
|
234
|
+
}
|
|
235
|
+
return frames;
|
|
236
|
+
}
|
|
237
|
+
// ── Learn codebooks ────────────────────────────────────────────────────────────
|
|
238
|
+
/**
|
|
239
|
+
* Learn both codebook banks from a set of clips (greedy per-level k-means over
|
|
240
|
+
* residuals — the standard way to train residual VQ). Returns the mean
|
|
241
|
+
* reconstruction MSE over the training clips after fitting. This is the codec's
|
|
242
|
+
* "training"; the generator is trained separately on the resulting token streams.
|
|
243
|
+
*/
|
|
244
|
+
fit(videos, opts = {}) {
|
|
245
|
+
const iterations = opts.iterations ?? 8;
|
|
246
|
+
const rng = new SeededRng((opts.seed ?? 0x66697421) >>> 0 || 1); // "fit!"
|
|
247
|
+
for (const v of videos)
|
|
248
|
+
this.assertShape(v);
|
|
249
|
+
// Gather intra patches and inter deltas (open-loop deltas are a fine proxy for fitting).
|
|
250
|
+
const intra = [];
|
|
251
|
+
const inter = [];
|
|
252
|
+
for (const video of videos) {
|
|
253
|
+
let prev = null;
|
|
254
|
+
for (let t = 0; t < video.length; t++) {
|
|
255
|
+
const patches = this.toPatches(video[t]);
|
|
256
|
+
const isKey = prev === null || t % this.keyframeInterval === 0;
|
|
257
|
+
if (isKey)
|
|
258
|
+
for (const p of patches)
|
|
259
|
+
intra.push(p);
|
|
260
|
+
else
|
|
261
|
+
for (let p = 0; p < patches.length; p++)
|
|
262
|
+
inter.push(sub(patches[p], prev[p]));
|
|
263
|
+
prev = patches;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
this.fitBank(VIDEO_BANK_INTRA, intra, iterations, rng);
|
|
267
|
+
this.fitBank(VIDEO_BANK_INTER, inter, iterations, rng);
|
|
268
|
+
// Report closed-loop reconstruction error over the corpus.
|
|
269
|
+
let se = 0;
|
|
270
|
+
let n = 0;
|
|
271
|
+
for (const video of videos) {
|
|
272
|
+
const recon = this.decode(this.encode(video));
|
|
273
|
+
for (let t = 0; t < video.length; t++) {
|
|
274
|
+
const a = video[t];
|
|
275
|
+
const b = recon[t];
|
|
276
|
+
for (let k = 0; k < a.length; k++) {
|
|
277
|
+
const d = a[k] - b[k];
|
|
278
|
+
se += d * d;
|
|
279
|
+
}
|
|
280
|
+
n += a.length;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return n > 0 ? se / n : 0;
|
|
284
|
+
}
|
|
285
|
+
/** Fit one bank's `levels` codebooks greedily over residuals. */
|
|
286
|
+
fitBank(bankId, vectors, iterations, rng) {
|
|
287
|
+
if (vectors.length === 0)
|
|
288
|
+
return;
|
|
289
|
+
let residuals = vectors.map((v) => Float32Array.from(v));
|
|
290
|
+
for (let l = 0; l < this.levels; l++) {
|
|
291
|
+
const centroids = kmeans(residuals, this.codebookSize, this.latentDim, iterations, rng);
|
|
292
|
+
this.banks[bankId][l] = centroids;
|
|
293
|
+
residuals = residuals.map((r) => {
|
|
294
|
+
const idx = nearestRow(centroids, r, this.codebookSize, this.latentDim);
|
|
295
|
+
const out = Float32Array.from(r);
|
|
296
|
+
const off = idx * this.latentDim;
|
|
297
|
+
for (let d = 0; d < this.latentDim; d++)
|
|
298
|
+
out[d] = out[d] - centroids[off + d];
|
|
299
|
+
return out;
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// ── Residual VQ over one bank ───────────────────────────────────────────────────
|
|
304
|
+
rvqEncode(bankId, vector) {
|
|
305
|
+
const residual = Float32Array.from(vector);
|
|
306
|
+
const recon = new Float32Array(this.latentDim);
|
|
307
|
+
const codes = [];
|
|
308
|
+
for (let l = 0; l < this.levels; l++) {
|
|
309
|
+
const cb = this.banks[bankId][l];
|
|
310
|
+
const idx = nearestRow(cb, residual, this.codebookSize, this.latentDim);
|
|
311
|
+
codes.push(idx);
|
|
312
|
+
const off = idx * this.latentDim;
|
|
313
|
+
for (let d = 0; d < this.latentDim; d++) {
|
|
314
|
+
recon[d] = recon[d] + cb[off + d];
|
|
315
|
+
residual[d] = residual[d] - cb[off + d];
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return { codes, recon };
|
|
319
|
+
}
|
|
320
|
+
// ── Patch <-> frame ─────────────────────────────────────────────────────────────
|
|
321
|
+
toPatches(frame) {
|
|
322
|
+
const { patch, channels, width } = this;
|
|
323
|
+
const pw = this.width / patch;
|
|
324
|
+
const ph = this.height / patch;
|
|
325
|
+
const out = [];
|
|
326
|
+
for (let py = 0; py < ph; py++) {
|
|
327
|
+
for (let px = 0; px < pw; px++) {
|
|
328
|
+
const vec = new Float32Array(this.latentDim);
|
|
329
|
+
for (let dy = 0; dy < patch; dy++) {
|
|
330
|
+
for (let dx = 0; dx < patch; dx++) {
|
|
331
|
+
const y = py * patch + dy;
|
|
332
|
+
const x = px * patch + dx;
|
|
333
|
+
const src = ((y * width) + x) * channels;
|
|
334
|
+
const dst = ((dy * patch) + dx) * channels;
|
|
335
|
+
for (let c = 0; c < channels; c++)
|
|
336
|
+
vec[dst + c] = frame[src + c];
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
out.push(vec);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return out;
|
|
343
|
+
}
|
|
344
|
+
fromPatches(patches) {
|
|
345
|
+
const { patch, channels, width } = this;
|
|
346
|
+
const pw = this.width / patch;
|
|
347
|
+
const frame = new Float32Array(this.height * this.width * channels);
|
|
348
|
+
for (let p = 0; p < patches.length; p++) {
|
|
349
|
+
const py = Math.floor(p / pw);
|
|
350
|
+
const px = p - py * pw;
|
|
351
|
+
const vec = patches[p];
|
|
352
|
+
for (let dy = 0; dy < patch; dy++) {
|
|
353
|
+
for (let dx = 0; dx < patch; dx++) {
|
|
354
|
+
const y = py * patch + dy;
|
|
355
|
+
const x = px * patch + dx;
|
|
356
|
+
const dst = ((y * width) + x) * channels;
|
|
357
|
+
const src = ((dy * patch) + dx) * channels;
|
|
358
|
+
for (let c = 0; c < channels; c++)
|
|
359
|
+
frame[dst + c] = clamp01(vec[src + c]);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return frame;
|
|
364
|
+
}
|
|
365
|
+
assertShape(video) {
|
|
366
|
+
const expect = this.height * this.width * this.channels;
|
|
367
|
+
for (let t = 0; t < video.length; t++) {
|
|
368
|
+
if (video[t].length !== expect) {
|
|
369
|
+
throw new Error(`VideoRVQCodec: frame ${t} has length ${video[t].length}, expected ${expect}`);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
// ── free helpers ─────────────────────────────────────────────────────────────────
|
|
375
|
+
function sub(a, b) {
|
|
376
|
+
const out = new Float32Array(a.length);
|
|
377
|
+
for (let i = 0; i < a.length; i++)
|
|
378
|
+
out[i] = a[i] - b[i];
|
|
379
|
+
return out;
|
|
380
|
+
}
|
|
381
|
+
function add(a, b) {
|
|
382
|
+
const out = new Float32Array(a.length);
|
|
383
|
+
for (let i = 0; i < a.length; i++)
|
|
384
|
+
out[i] = a[i] + b[i];
|
|
385
|
+
return out;
|
|
386
|
+
}
|
|
387
|
+
function addRowInto(acc, codebook, row, dim) {
|
|
388
|
+
const off = row * dim;
|
|
389
|
+
for (let d = 0; d < dim; d++)
|
|
390
|
+
acc[d] = acc[d] + codebook[off + d];
|
|
391
|
+
}
|
|
392
|
+
function clamp01(v) {
|
|
393
|
+
return v < 0 ? 0 : v > 1 ? 1 : v;
|
|
394
|
+
}
|
|
395
|
+
/** Nearest codebook row to `v` by squared L2. `codebook` is `count × dim` row-major. */
|
|
396
|
+
function nearestRow(codebook, v, count, dim) {
|
|
397
|
+
let best = 0;
|
|
398
|
+
let bestD = Infinity;
|
|
399
|
+
for (let r = 0; r < count; r++) {
|
|
400
|
+
const off = r * dim;
|
|
401
|
+
let d = 0;
|
|
402
|
+
for (let k = 0; k < dim; k++) {
|
|
403
|
+
const diff = v[k] - codebook[off + k];
|
|
404
|
+
d += diff * diff;
|
|
405
|
+
if (d >= bestD)
|
|
406
|
+
break;
|
|
407
|
+
}
|
|
408
|
+
if (d < bestD) {
|
|
409
|
+
bestD = d;
|
|
410
|
+
best = r;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
return best;
|
|
414
|
+
}
|
|
415
|
+
/** Lloyd's k-means → `count × dim` centroids. Empty clusters reseed to a random sample. */
|
|
416
|
+
function kmeans(vectors, count, dim, iterations, rng) {
|
|
417
|
+
const centroids = new Float32Array(count * dim);
|
|
418
|
+
// Init: distinct random samples.
|
|
419
|
+
for (let r = 0; r < count; r++) {
|
|
420
|
+
const src = vectors[Math.floor(rng.next() * vectors.length) % vectors.length];
|
|
421
|
+
centroids.set(src, r * dim);
|
|
422
|
+
}
|
|
423
|
+
const sums = new Float32Array(count * dim);
|
|
424
|
+
const counts = new Int32Array(count);
|
|
425
|
+
for (let it = 0; it < iterations; it++) {
|
|
426
|
+
sums.fill(0);
|
|
427
|
+
counts.fill(0);
|
|
428
|
+
for (const v of vectors) {
|
|
429
|
+
const r = nearestRow(centroids, v, count, dim);
|
|
430
|
+
counts[r] = counts[r] + 1;
|
|
431
|
+
const off = r * dim;
|
|
432
|
+
for (let d = 0; d < dim; d++)
|
|
433
|
+
sums[off + d] = sums[off + d] + v[d];
|
|
434
|
+
}
|
|
435
|
+
for (let r = 0; r < count; r++) {
|
|
436
|
+
const off = r * dim;
|
|
437
|
+
if (counts[r] === 0) {
|
|
438
|
+
// Reseed the dead centroid onto a random sample so it can win points next round.
|
|
439
|
+
const src = vectors[Math.floor(rng.next() * vectors.length) % vectors.length];
|
|
440
|
+
centroids.set(src, off);
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
443
|
+
const inv = 1 / counts[r];
|
|
444
|
+
for (let d = 0; d < dim; d++)
|
|
445
|
+
centroids[off + d] = sums[off + d] * inv;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
return centroids;
|
|
449
|
+
}
|
|
450
|
+
//# sourceMappingURL=video_rvq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video_rvq.js","sourceRoot":"","sources":["../../src/codec/video_rvq.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,7 +8,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
10
|
export { SharedExpertMoE, LoadBalanceAccumulator, DEFAULT_MOE_CONFIG, DEFAULT_MOE_SEED, MoETrainer, EvermindModelPackage, } from './moe/index.js';
|
|
11
|
-
export type { MoEConfig, MoEParam, RouteResult, MoESample, MoETrainOptions, MoEEpochResult, EvermindModelManifest, EvermindModelCard, PackageMeta, ValidationResult, } from './moe/index.js';
|
|
11
|
+
export type { MoEConfig, MoEParam, RouteResult, MoESample, MoETrainOptions, MoEEpochResult, EvermindModelManifest, EvermindModelCard, EvermindModelType, EvermindModality, PackageMeta, ValidationResult, } from './moe/index.js';
|
|
12
12
|
export { EvermindLM, EvermindLMTrainer, DEFAULT_LM_CONFIG, DEFAULT_LM_SEED } from './lm/index.js';
|
|
13
13
|
export type { EvermindLMConfig, LMGenerateOptions, TextCodec } from './lm/index.js';
|
|
14
14
|
export { AdamW } from './optim/adamw.js';
|
|
@@ -17,6 +17,8 @@ export { MambaTrainer } from './training/trainer.js';
|
|
|
17
17
|
export { Tensor, backward, enableGrad, noGrad, clearTape, recordOperation, crossEntropyLoss, crossEntropyGrad, } from './training/autograd.js';
|
|
18
18
|
export { BPETokenizer } from './tokenizer/bpe.js';
|
|
19
19
|
export type { BPEEncodeOptions, PadSide, HuggingFaceTokenizerSpec, SpecialTokenOverrides } from './tokenizer/bpe.js';
|
|
20
|
+
export { MultimodalVocab, VIDEO_BANK_INTRA, VIDEO_BANK_INTER, VideoRVQCodec, ImageRVQCodec, buildVideoSequence, generateVideo, generateImage, } from './codec/index.js';
|
|
21
|
+
export type { MultimodalVocabConfig, TokenKind, VideoRVQConfig, Frame, Video, } from './codec/index.js';
|
|
20
22
|
export { exportEvermind, EXPORT_FORMATS, exportSafetensors, tensorsToSafetensors, exportOnnx, exportGguf, configJson, generationConfigJson, tokenizerJson, modelCardMarkdown, namedTensors, evermindTensorSpec, archOf, paramCount, } from './export/index.js';
|
|
21
23
|
export type { ExportFormat, ExportFile, ExportResult, ExportOptions, HfMeta, NamedTensor, EvermindArch, TensorSpec, } from './export/index.js';
|
|
22
24
|
export { safetensorsToTensors, importEvermind, importEvermindTensors, inferArchFromTensors, } from './import/index.js';
|
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,EACV,oBAAoB,GACvB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,SAAS,EACT,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAClG,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EACH,MAAM,EACN,QAAQ,EACR,UAAU,EACV,MAAM,EACN,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACnB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAIrH,OAAO,EACH,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACN,UAAU,GACb,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACR,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,MAAM,EACN,WAAW,EACX,YAAY,EACZ,UAAU,GACb,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EACH,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD,OAAO,EACH,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,IAAI,WAAW,EACrB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,GAAG,GACN,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACR,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,GAC1B,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAChG,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACH,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAI9E,YAAY,EACR,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,SAAS,GACZ,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC1G,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC/H,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9E,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAO,yBAAyB,CAAC;AAC/E,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAIvF,OAAO,EACH,UAAU,EACV,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,UAAU,EACV,YAAY,EACZ,IAAI,EACJ,UAAU,GACb,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EACH,YAAY,EACZ,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,cAAc,GACjB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,MAC3D,6BAA6B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAC3C,qBAAqB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAC3C,gCAAgC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MACpC,4BAA4B,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAC1F,0BAA0B,CAAC;AAGpC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MACrC,kBAAkB,CAAC;AAG5B,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MACrD,0BAA0B,CAAC;AAGpC,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAC/D,wBAAwB,CAAC;AAIlC,OAAO,EACH,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACR,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,kBAAkB,GACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAIhE,eAAO,MAAM,OAAO,UAAc,CAAC;AACnC,eAAO,MAAM,WAAW,wFAAwF,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,8 @@ export { MambaTrainer } from './training/trainer.js';
|
|
|
20
20
|
export { Tensor, backward, enableGrad, noGrad, clearTape, recordOperation, crossEntropyLoss, crossEntropyGrad, } from './training/autograd.js';
|
|
21
21
|
// ── Tokenizer ─────────────────────────────────────────────────────────────────
|
|
22
22
|
export { BPETokenizer } from './tokenizer/bpe.js';
|
|
23
|
+
// ── Modality codecs (media ⇄ tokens; lets EvermindLM generate video) ────────────
|
|
24
|
+
export { MultimodalVocab, VIDEO_BANK_INTRA, VIDEO_BANK_INTER, VideoRVQCodec, ImageRVQCodec, buildVideoSequence, generateVideo, generateImage, } from './codec/index.js';
|
|
23
25
|
// ── Model export (the publishing step: ONNX / safetensors / GGUF / HF repo) ─────
|
|
24
26
|
export { exportEvermind, EXPORT_FORMATS, exportSafetensors, tensorsToSafetensors, exportOnnx, exportGguf, configJson, generationConfigJson, tokenizerJson, modelCardMarkdown, namedTensors, evermindTensorSpec, archOf, paramCount, } from './export/index.js';
|
|
25
27
|
// ── Model import (warm-start / weight-port: safetensors → EvermindLM) ────────────
|
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,EACV,oBAAoB,GACvB,MAAM,gBAAgB,CAAC;
|
|
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,MA2NzC,CAAC;AAKF,eAAO,MAAM,4BAA4B,EAAE,MA6H1C,CAAC"}
|
|
@@ -59,12 +59,15 @@ fn softplus(x: f32) -> f32 {
|
|
|
59
59
|
// B_bar = (A_bar - 1) / A * B ≈ Δ * B (first-order for simplicity)
|
|
60
60
|
fn discretise_A(delta_val: f32, a_log: f32) -> f32 {
|
|
61
61
|
// A is stored as -exp(a_log) to ensure A_bar < 1 (stable)
|
|
62
|
-
|
|
62
|
+
// Clamp log-decay so -exp(a_log) can't overflow to -Inf (A_bar→0, state
|
|
63
|
+
// death) nor collapse toward 0 (A_bar→1, no decay). Keeps A_bar strictly in
|
|
64
|
+
// (0,1) across repeated adapts. Belt-and-suspenders: WSLA also freezes A_log.
|
|
65
|
+
let a_cont = -exp(clamp(a_log, -10.0, 5.0));
|
|
63
66
|
return exp(delta_val * a_cont);
|
|
64
67
|
}
|
|
65
68
|
|
|
66
69
|
fn discretise_B(delta_val: f32, a_log: f32, b_val: f32) -> f32 {
|
|
67
|
-
let a_cont = -exp(a_log);
|
|
70
|
+
let a_cont = -exp(clamp(a_log, -10.0, 5.0));
|
|
68
71
|
let a_bar = exp(delta_val * a_cont);
|
|
69
72
|
// (A_bar - 1) / A_cont * B
|
|
70
73
|
let b_bar = (a_bar - 1.0) / a_cont * b_val;
|
|
@@ -261,7 +264,10 @@ fn softplus_grad(x: f32) -> f32 {
|
|
|
261
264
|
}
|
|
262
265
|
|
|
263
266
|
fn discretise_A(delta_val: f32, a_log: f32) -> f32 {
|
|
264
|
-
|
|
267
|
+
// Clamp log-decay so -exp(a_log) can't overflow to -Inf (A_bar→0, state
|
|
268
|
+
// death) nor collapse toward 0 (A_bar→1, no decay). Keeps A_bar strictly in
|
|
269
|
+
// (0,1) across repeated adapts. Belt-and-suspenders: WSLA also freezes A_log.
|
|
270
|
+
let a_cont = -exp(clamp(a_log, -10.0, 5.0));
|
|
265
271
|
return exp(delta_val * a_cont);
|
|
266
272
|
}
|
|
267
273
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selective_scan.js","sourceRoot":"","sources":["../../src/kernels/selective_scan.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,qEAAqE;AACrE,4EAA4E;AAC5E,EAAE;AACF,2BAA2B;AAC3B,oCAAoC;AACpC,8BAA8B;AAC9B,EAAE;AACF,qEAAqE;AAErE,MAAM,CAAC,MAAM,2BAA2B,GAAW,UAAU,CAAA
|
|
1
|
+
{"version":3,"file":"selective_scan.js","sourceRoot":"","sources":["../../src/kernels/selective_scan.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,qEAAqE;AACrE,4EAA4E;AAC5E,EAAE;AACF,2BAA2B;AAC3B,oCAAoC;AACpC,8BAA8B;AAC9B,EAAE;AACF,qEAAqE;AAErE,MAAM,CAAC,MAAM,2BAA2B,GAAW,UAAU,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2N5D,CAAC;AAEF,gDAAgD;AAChD,uEAAuE;AAEvE,MAAM,CAAC,MAAM,4BAA4B,GAAW,UAAU,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6H7D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssd.d.ts","sourceRoot":"","sources":["../../src/kernels/ssd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,eAAO,MAAM,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"ssd.d.ts","sourceRoot":"","sources":["../../src/kernels/ssd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,eAAO,MAAM,gBAAgB,EAAE,MAkI9B,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,MA0H/B,CAAC"}
|
package/dist/kernels/ssd.js
CHANGED
|
@@ -49,7 +49,10 @@ struct SsdParams {
|
|
|
49
49
|
@group(0) @binding(9) var<storage, read_write> state_carry : array<f32>; // [n_chunks+1,B,H,N,d_head]
|
|
50
50
|
|
|
51
51
|
fn softplus(x: f32) -> f32 {
|
|
52
|
-
|
|
52
|
+
// Numerically stable: max(x,0) + log1p(exp(-|x|)). The naive log(1+exp(x))
|
|
53
|
+
// overflows to +Inf for x ≳ 88 (f32 exp range) — and a downstream
|
|
54
|
+
// exp(-Inf*0) then yields NaN, poisoning the state. This form never overflows.
|
|
55
|
+
return max(x, 0.0) + log(1.0 + exp(-abs(x)));
|
|
53
56
|
}
|
|
54
57
|
|
|
55
58
|
// Workgroup: one chunk × one head × one batch item
|
|
@@ -183,7 +186,10 @@ struct SsdParams {
|
|
|
183
186
|
@group(0) @binding(14) var<storage, read_write> dD_vec : array<f32>;
|
|
184
187
|
|
|
185
188
|
fn softplus(x: f32) -> f32 {
|
|
186
|
-
|
|
189
|
+
// Numerically stable: max(x,0) + log1p(exp(-|x|)). The naive log(1+exp(x))
|
|
190
|
+
// overflows to +Inf for x ≳ 88 (f32 exp range) — and a downstream
|
|
191
|
+
// exp(-Inf*0) then yields NaN, poisoning the state. This form never overflows.
|
|
192
|
+
return max(x, 0.0) + log(1.0 + exp(-abs(x)));
|
|
187
193
|
}
|
|
188
194
|
fn d_softplus(x: f32) -> f32 {
|
|
189
195
|
return 1.0 / (1.0 + exp(-x));
|
package/dist/kernels/ssd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssd.js","sourceRoot":"","sources":["../../src/kernels/ssd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAW,UAAU,CAAA
|
|
1
|
+
{"version":3,"file":"ssd.js","sourceRoot":"","sources":["../../src/kernels/ssd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAW,UAAU,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkIjD,CAAC;AAEF,iFAAiF;AAEjF,MAAM,CAAC,MAAM,iBAAiB,GAAW,UAAU,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0HlD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weight_update.d.ts","sourceRoot":"","sources":["../../src/kernels/weight_update.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"weight_update.d.ts","sourceRoot":"","sources":["../../src/kernels/weight_update.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,kBAAkB,EAAE,MAmEhC,CAAC;AAIF,eAAO,MAAM,cAAc,EAAE,MAyD5B,CAAC"}
|