mambacode.js 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +198 -76
  2. package/dist/index.d.ts +18 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +18 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/kernels/activations.d.ts +3 -0
  7. package/dist/kernels/activations.d.ts.map +1 -0
  8. package/dist/kernels/activations.js +87 -0
  9. package/dist/kernels/activations.js.map +1 -0
  10. package/dist/kernels/conv1d.d.ts +3 -0
  11. package/dist/kernels/conv1d.d.ts.map +1 -0
  12. package/dist/kernels/conv1d.js +152 -0
  13. package/dist/kernels/conv1d.js.map +1 -0
  14. package/dist/kernels/linear_projection.d.ts +3 -0
  15. package/dist/kernels/linear_projection.d.ts.map +1 -0
  16. package/dist/kernels/linear_projection.js +219 -0
  17. package/dist/kernels/linear_projection.js.map +1 -0
  18. package/dist/kernels/selective_scan.d.ts +3 -0
  19. package/dist/kernels/selective_scan.d.ts.map +1 -0
  20. package/dist/kernels/selective_scan.js +348 -0
  21. package/dist/kernels/selective_scan.js.map +1 -0
  22. package/dist/kernels/weight_update.d.ts +3 -0
  23. package/dist/kernels/weight_update.d.ts.map +1 -0
  24. package/dist/kernels/weight_update.js +119 -0
  25. package/dist/kernels/weight_update.js.map +1 -0
  26. package/dist/model/mamba_block.d.ts +64 -0
  27. package/dist/model/mamba_block.d.ts.map +1 -0
  28. package/dist/model/mamba_block.js +309 -0
  29. package/dist/model/mamba_block.js.map +1 -0
  30. package/dist/model/mamba_model.d.ts +66 -0
  31. package/dist/model/mamba_model.d.ts.map +1 -0
  32. package/dist/model/mamba_model.js +289 -0
  33. package/dist/model/mamba_model.js.map +1 -0
  34. package/dist/tokenizer/bpe.d.ts +29 -0
  35. package/dist/tokenizer/bpe.d.ts.map +1 -0
  36. package/dist/tokenizer/bpe.js +164 -0
  37. package/dist/tokenizer/bpe.js.map +1 -0
  38. package/dist/training/autograd.d.ts +27 -0
  39. package/dist/training/autograd.d.ts.map +1 -0
  40. package/dist/training/autograd.js +120 -0
  41. package/dist/training/autograd.js.map +1 -0
  42. package/dist/training/trainer.d.ts +37 -0
  43. package/dist/training/trainer.d.ts.map +1 -0
  44. package/dist/training/trainer.js +183 -0
  45. package/dist/training/trainer.js.map +1 -0
  46. package/dist/utils/gpu_utils.d.ts +21 -0
  47. package/dist/utils/gpu_utils.d.ts.map +1 -0
  48. package/dist/utils/gpu_utils.js +111 -0
  49. package/dist/utils/gpu_utils.js.map +1 -0
  50. package/dist/utils/quantization.d.ts +26 -0
  51. package/dist/utils/quantization.d.ts.map +1 -0
  52. package/dist/utils/quantization.js +116 -0
  53. package/dist/utils/quantization.js.map +1 -0
  54. package/package.json +43 -18
  55. package/src/index.ts +59 -0
  56. package/src/kernels/{activations.js → activations.ts} +2 -2
  57. package/src/kernels/{linear_projection.js → linear_projection.ts} +2 -2
  58. package/src/kernels/{selective_scan.js → selective_scan.ts} +2 -2
  59. package/src/kernels/{weight_update.js → weight_update.ts} +2 -2
  60. package/src/model/{mamba_block.js → mamba_block.ts} +139 -175
  61. package/src/model/{mamba_model.js → mamba_model.ts} +168 -124
  62. package/src/tokenizer/bpe.ts +186 -0
  63. package/src/training/autograd.ts +135 -0
  64. package/src/training/trainer.ts +312 -0
  65. package/src/utils/gpu_utils.ts +147 -0
  66. package/src/utils/quantization.ts +154 -0
  67. package/src/index.js +0 -89
  68. package/src/tokenizer/bpe.js +0 -256
  69. package/src/training/autograd.js +0 -221
  70. package/src/training/trainer.js +0 -394
  71. package/src/utils/gpu_utils.js +0 -217
  72. package/src/utils/quantization.js +0 -215
  73. /package/src/kernels/{conv1d.js → conv1d.ts} +0 -0
@@ -0,0 +1,289 @@
1
+ /**
2
+ * mamba_model.ts – Full Mamba language model.
3
+ */
4
+ import { MambaBlock } from './mamba_block';
5
+ import { createStorageBuffer, createEmptyStorageBuffer, createUniformBuffer, createComputePipeline, createBindGroup, dispatchKernel, readBuffer, uploadBuffer, cdiv, } from '../utils/gpu_utils';
6
+ import { LINEAR_FORWARD_WGSL } from '../kernels/linear_projection';
7
+ import { ACTIVATIONS_WGSL } from '../kernels/activations';
8
+ export class MambaModel {
9
+ device;
10
+ config;
11
+ gpuEmbedding;
12
+ blocks;
13
+ gpuFinalNorm;
14
+ tiedEmbedding;
15
+ gpuLMHeadBias;
16
+ _lmHeadPipeline;
17
+ _rmsnormPipeline;
18
+ _embedPipeline;
19
+ _wslaMode = false;
20
+ constructor(device, config) {
21
+ this.device = device;
22
+ this.config = {
23
+ dState: 16,
24
+ dConv: 4,
25
+ expand: 2,
26
+ eosId: -1,
27
+ ...config,
28
+ };
29
+ const { vocabSize, dModel, numLayers } = this.config;
30
+ const embedData = new Float32Array(vocabSize * dModel);
31
+ const std = 1.0 / Math.sqrt(dModel);
32
+ for (let i = 0; i < embedData.length; i++) {
33
+ const u1 = Math.random(), u2 = Math.random();
34
+ embedData[i] = std * Math.sqrt(-2 * Math.log(u1 + 1e-12)) *
35
+ Math.cos(2 * Math.PI * u2);
36
+ }
37
+ this.gpuEmbedding = createStorageBuffer(device, embedData, true);
38
+ this.blocks = Array.from({ length: numLayers }, () => new MambaBlock(device, {
39
+ dModel,
40
+ dState: this.config.dState,
41
+ dConv: this.config.dConv,
42
+ expand: this.config.expand,
43
+ }));
44
+ const finalNormW = new Float32Array(dModel).fill(1.0);
45
+ this.gpuFinalNorm = createStorageBuffer(device, finalNormW, true);
46
+ this.tiedEmbedding = true;
47
+ this._lmHeadPipeline = createComputePipeline(device, LINEAR_FORWARD_WGSL, 'linear_forward');
48
+ this._rmsnormPipeline = createComputePipeline(device, ACTIVATIONS_WGSL, 'rmsnorm_forward');
49
+ this.gpuLMHeadBias = createStorageBuffer(device, new Float32Array(vocabSize), true);
50
+ this._embedPipeline = createComputePipeline(device, EMBED_LOOKUP_WGSL, 'embed_lookup');
51
+ }
52
+ embedTokens(tokenIds, batch, seqLen) {
53
+ const { dModel } = this.config;
54
+ const M = batch * seqLen;
55
+ const idsBuf = createStorageBuffer(this.device, tokenIds instanceof Uint32Array ? tokenIds : new Uint32Array(tokenIds), false);
56
+ const outBuf = createEmptyStorageBuffer(this.device, M * dModel * 4, true);
57
+ const params = new Uint32Array([M, dModel]).buffer;
58
+ const pBuf = createUniformBuffer(this.device, params);
59
+ const bg = createBindGroup(this.device, this._embedPipeline, [pBuf, idsBuf, this.gpuEmbedding, outBuf]);
60
+ dispatchKernel(this.device, this._embedPipeline, bg, [cdiv(M, 64), 1, 1]);
61
+ idsBuf.destroy();
62
+ pBuf.destroy();
63
+ return outBuf;
64
+ }
65
+ async forward(tokenIds, batch, seqLen) {
66
+ const { dModel, vocabSize } = this.config;
67
+ const M = batch * seqLen;
68
+ let hidden = this.embedTokens(tokenIds, batch, seqLen);
69
+ const caches = [];
70
+ for (const block of this.blocks) {
71
+ const { output, cache } = block.forward(hidden, batch, seqLen);
72
+ caches.push(cache);
73
+ hidden.destroy();
74
+ hidden = output;
75
+ }
76
+ const normOut = createEmptyStorageBuffer(this.device, M * dModel * 4, true);
77
+ const normInv = createEmptyStorageBuffer(this.device, M * 4, false);
78
+ {
79
+ const params = new ArrayBuffer(16);
80
+ new Uint32Array(params, 0, 2).set([M, dModel]);
81
+ new Float32Array(params, 8, 1).set([1e-6]);
82
+ const pBuf = createUniformBuffer(this.device, params);
83
+ const bg = createBindGroup(this.device, this._rmsnormPipeline, [pBuf, hidden, this.gpuFinalNorm, normOut, normInv]);
84
+ dispatchKernel(this.device, this._rmsnormPipeline, bg, [cdiv(M, 64), 1, 1]);
85
+ }
86
+ const gpuLogits = createEmptyStorageBuffer(this.device, M * vocabSize * 4, true);
87
+ {
88
+ const params = new Uint32Array([M, dModel, vocabSize]).buffer;
89
+ const pBuf = createUniformBuffer(this.device, params);
90
+ const weightBuf = this.tiedEmbedding ? this.gpuEmbedding : this.gpuLMHeadBias;
91
+ const bg = createBindGroup(this.device, this._lmHeadPipeline, [pBuf, normOut, weightBuf, this.gpuLMHeadBias, gpuLogits]);
92
+ dispatchKernel(this.device, this._lmHeadPipeline, bg, [cdiv(M, 16), cdiv(vocabSize, 16), 1]);
93
+ }
94
+ normOut.destroy();
95
+ normInv.destroy();
96
+ const logits = await readBuffer(this.device, gpuLogits, M * vocabSize * 4);
97
+ return { logits, gpuLogits, caches };
98
+ }
99
+ async generate(promptIds, maxNewTokens = 200, samplingOpts = {}) {
100
+ const { temperature = 1.0, topK = 50, topP = 0.9 } = samplingOpts;
101
+ const { vocabSize } = this.config;
102
+ let ids = [...promptIds];
103
+ for (let step = 0; step < maxNewTokens; step++) {
104
+ const { logits } = await this.forward(new Uint32Array(ids), 1, ids.length);
105
+ const lastLogits = logits.slice((ids.length - 1) * vocabSize, ids.length * vocabSize);
106
+ const nextId = sampleToken(lastLogits, { temperature, topK, topP });
107
+ ids.push(nextId);
108
+ if (nextId === this.config.eosId)
109
+ break;
110
+ }
111
+ return ids;
112
+ }
113
+ parameters() {
114
+ const params = [];
115
+ params.push({
116
+ buf: this.gpuEmbedding,
117
+ numel: this.config.vocabSize * this.config.dModel,
118
+ name: 'embedding',
119
+ });
120
+ for (let i = 0; i < this.blocks.length; i++) {
121
+ for (const p of this.blocks[i].parameters()) {
122
+ params.push({ ...p, name: `block${i}.${p.name}` });
123
+ }
124
+ }
125
+ params.push({
126
+ buf: this.gpuFinalNorm,
127
+ numel: this.config.dModel,
128
+ name: 'final_norm',
129
+ });
130
+ return params;
131
+ }
132
+ setWSLAMode(enabled) {
133
+ for (const block of this.blocks)
134
+ block.setWSLAMode(enabled);
135
+ this._wslaMode = enabled;
136
+ }
137
+ /**
138
+ * Serialise all model parameters to an ArrayBuffer.
139
+ *
140
+ * Binary format:
141
+ * [0..3] magic : uint32 = 0x4D424A53 ('MBJS')
142
+ * [4..7] version: uint32 = 1
143
+ * [8..11] nParams: uint32
144
+ * [12 .. 12+4*nParams-1] numel[i]: uint32 for each parameter i
145
+ * [12+4*nParams ..] float32 data for each parameter, concatenated
146
+ *
147
+ * Save the returned buffer to a file or IndexedDB and reload it with
148
+ * `loadWeights()` to resume from a checkpoint.
149
+ */
150
+ async exportWeights() {
151
+ const params = this.parameters();
152
+ const nParams = params.length;
153
+ // Read all GPU buffers into CPU Float32Arrays
154
+ const arrays = await Promise.all(params.map(p => readBuffer(this.device, p.buf, p.numel * 4)));
155
+ // Calculate total byte size: header + numel table + all float data
156
+ const headerBytes = 4 + 4 + 4 + nParams * 4; // magic + version + nParams + numel[]
157
+ const dataBytes = arrays.reduce((acc, a) => acc + a.byteLength, 0);
158
+ const out = new ArrayBuffer(headerBytes + dataBytes);
159
+ const view = new DataView(out);
160
+ let offset = 0;
161
+ view.setUint32(offset, 0x4D424A53, true);
162
+ offset += 4; // magic 'MBJS'
163
+ view.setUint32(offset, 1, true);
164
+ offset += 4; // version
165
+ view.setUint32(offset, nParams, true);
166
+ offset += 4; // nParams
167
+ for (const p of params) {
168
+ view.setUint32(offset, p.numel, true);
169
+ offset += 4;
170
+ }
171
+ for (const arr of arrays) {
172
+ new Float32Array(out, offset, arr.length).set(arr);
173
+ offset += arr.byteLength;
174
+ }
175
+ return out;
176
+ }
177
+ /**
178
+ * Load model parameters from an ArrayBuffer previously produced by
179
+ * `exportWeights()`. The parameter count and element counts must match
180
+ * the current model configuration exactly.
181
+ *
182
+ * @throws {Error} if the magic number, version, or parameter layout do
183
+ * not match the current model.
184
+ */
185
+ async loadWeights(buffer) {
186
+ const view = new DataView(buffer);
187
+ let offset = 0;
188
+ const magic = view.getUint32(offset, true);
189
+ offset += 4;
190
+ if (magic !== 0x4D424A53) {
191
+ throw new Error('Invalid weight file: bad magic number. ' +
192
+ 'Ensure the file was exported by MambaModel.exportWeights().');
193
+ }
194
+ const version = view.getUint32(offset, true);
195
+ offset += 4;
196
+ if (version !== 1) {
197
+ throw new Error(`Unsupported weight file version: ${version}. Expected version 1.`);
198
+ }
199
+ const nParams = view.getUint32(offset, true);
200
+ offset += 4;
201
+ const params = this.parameters();
202
+ if (nParams !== params.length) {
203
+ throw new Error(`Weight file has ${nParams} parameters but this model has ${params.length}. ` +
204
+ 'Ensure the model configuration matches the one used when exporting.');
205
+ }
206
+ const numels = [];
207
+ for (let i = 0; i < nParams; i++) {
208
+ numels.push(view.getUint32(offset, true));
209
+ offset += 4;
210
+ }
211
+ for (let i = 0; i < nParams; i++) {
212
+ // i is guaranteed in-bounds: nParams === params.length was verified above
213
+ const p = params[i];
214
+ const numel = numels[i];
215
+ if (numel !== p.numel) {
216
+ throw new Error(`Parameter ${i} ("${p.name}") size mismatch: ` +
217
+ `file has ${numel} elements, model expects ${p.numel}.`);
218
+ }
219
+ const slice = new Float32Array(buffer, offset, p.numel);
220
+ uploadBuffer(this.device, p.buf, slice);
221
+ offset += p.numel * 4;
222
+ }
223
+ }
224
+ }
225
+ const EMBED_LOOKUP_WGSL = /* wgsl */ `
226
+ struct EmbedParams {
227
+ num_tokens : u32,
228
+ d_model : u32,
229
+ };
230
+
231
+ @group(0) @binding(0) var<uniform> params : EmbedParams;
232
+ @group(0) @binding(1) var<storage, read> ids : array<u32>;
233
+ @group(0) @binding(2) var<storage, read> table : array<f32>;
234
+ @group(0) @binding(3) var<storage, read_write> out : array<f32>;
235
+
236
+ @compute @workgroup_size(64, 1, 1)
237
+ fn embed_lookup(@builtin(global_invocation_id) gid: vec3<u32>) {
238
+ let token_idx = gid.x;
239
+ if (token_idx >= params.num_tokens) { return; }
240
+
241
+ let D = params.d_model;
242
+ let tok = ids[token_idx];
243
+ let src = tok * D;
244
+ let dst = token_idx * D;
245
+
246
+ for (var i: u32 = 0u; i < D; i = i + 1u) {
247
+ out[dst + i] = table[src + i];
248
+ }
249
+ }
250
+ `;
251
+ function sampleToken(logits, { temperature = 1.0, topK = 50, topP = 0.9 } = {}) {
252
+ const n = logits.length;
253
+ const scaled = new Float32Array(n);
254
+ for (let i = 0; i < n; i++)
255
+ scaled[i] = logits[i] / Math.max(temperature, 1e-7);
256
+ let maxL = -Infinity;
257
+ for (let i = 0; i < n; i++)
258
+ if (scaled[i] > maxL)
259
+ maxL = scaled[i];
260
+ let sumE = 0;
261
+ const exps = new Float32Array(n);
262
+ for (let i = 0; i < n; i++) {
263
+ exps[i] = Math.exp(scaled[i] - maxL);
264
+ sumE += exps[i];
265
+ }
266
+ const indices = Array.from({ length: n }, (_, i) => i)
267
+ .sort((a, b) => exps[b] - exps[a]);
268
+ const topKIndices = indices.slice(0, topK);
269
+ let cumSum = 0;
270
+ const nucleus = [];
271
+ for (const idx of topKIndices) {
272
+ cumSum += exps[idx] / sumE;
273
+ nucleus.push(idx);
274
+ if (cumSum >= topP)
275
+ break;
276
+ }
277
+ let nucleusSum = 0;
278
+ for (const idx of nucleus)
279
+ nucleusSum += exps[idx];
280
+ const threshold = Math.random() * nucleusSum;
281
+ let acc = 0;
282
+ for (const idx of nucleus) {
283
+ acc += exps[idx];
284
+ if (acc >= threshold)
285
+ return idx;
286
+ }
287
+ return nucleus[nucleus.length - 1];
288
+ }
289
+ //# sourceMappingURL=mamba_model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mamba_model.js","sourceRoot":"","sources":["../../src/model/mamba_model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * bpe.ts – Browser-side Byte Pair Encoding (BPE) tokenizer.
3
+ */
4
+ export interface BPEEncodeOptions {
5
+ addBos?: boolean;
6
+ addEos?: boolean;
7
+ }
8
+ export type PadSide = 'right' | 'left';
9
+ export declare class BPETokenizer {
10
+ vocab: Map<string, number>;
11
+ idToToken: Map<number, string>;
12
+ merges: Map<string, number>;
13
+ bosToken: string;
14
+ eosToken: string;
15
+ padToken: string;
16
+ unkToken: string;
17
+ bosId: number | null;
18
+ eosId: number | null;
19
+ padId: number | null;
20
+ constructor();
21
+ load(vocab: string | Record<string, number>, merges: string | string[]): Promise<void>;
22
+ loadFromObjects(vocabObj: Record<string, number>, mergeArr: string[]): void;
23
+ encode(text: string, opts?: BPEEncodeOptions): number[];
24
+ decode(ids: number[]): string;
25
+ _bpe(word: string): string[];
26
+ padOrTruncate(ids: number[], maxLen: number, side?: PadSide): number[];
27
+ get vocabSize(): number;
28
+ }
29
+ //# sourceMappingURL=bpe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bpe.d.ts","sourceRoot":"","sources":["../../src/tokenizer/bpe.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AA8BvC,qBAAa,YAAY;IACrB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;;IAef,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B5F,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAS3E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,MAAM,EAAE;IA4B3D,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM;IAgB7B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IA+B5B,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,OAAiB,GAAG,MAAM,EAAE;IAO/E,IAAI,SAAS,IAAI,MAAM,CAA4B;CACtD"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * bpe.ts – Browser-side Byte Pair Encoding (BPE) tokenizer.
3
+ */
4
+ function buildByteEncoder() {
5
+ const enc = new Map();
6
+ const ranges = [
7
+ [0x21, 0x7E],
8
+ [0xA1, 0xAC],
9
+ [0xAE, 0xFF],
10
+ ];
11
+ let n = 0;
12
+ for (const [lo, hi] of ranges) {
13
+ for (let b = lo; b <= hi; b++) {
14
+ enc.set(b, String.fromCodePoint(b));
15
+ }
16
+ }
17
+ for (let b = 0; b < 256; b++) {
18
+ if (!enc.has(b)) {
19
+ enc.set(b, String.fromCodePoint(256 + n));
20
+ n++;
21
+ }
22
+ }
23
+ return enc;
24
+ }
25
+ const BYTE_ENCODER = buildByteEncoder();
26
+ const BYTE_DECODER = new Map([...BYTE_ENCODER].map(([k, v]) => [v, k]));
27
+ const PRE_TOKENIZE_RE = /(?:'s|'t|'re|'ve|'m|'ll|'d)|[^\r\n\p{L}\p{N}]?\p{L}+|\p{N}{1,3}| ?[^\s\p{L}\p{N}]+[\r\n]*|\s*[\r\n]+|\s+(?!\S)|\s+/gu;
28
+ export class BPETokenizer {
29
+ vocab;
30
+ idToToken;
31
+ merges;
32
+ bosToken;
33
+ eosToken;
34
+ padToken;
35
+ unkToken;
36
+ bosId;
37
+ eosId;
38
+ padId;
39
+ constructor() {
40
+ this.vocab = new Map();
41
+ this.idToToken = new Map();
42
+ this.merges = new Map();
43
+ this.bosToken = '<|im_start|>';
44
+ this.eosToken = '<|im_end|>';
45
+ this.padToken = '<|endoftext|>';
46
+ this.unkToken = '<unk>';
47
+ this.bosId = null;
48
+ this.eosId = null;
49
+ this.padId = null;
50
+ }
51
+ async load(vocab, merges) {
52
+ let vocabObj;
53
+ if (typeof vocab === 'string') {
54
+ const res = await fetch(vocab);
55
+ vocabObj = await res.json();
56
+ }
57
+ else {
58
+ vocabObj = vocab;
59
+ }
60
+ this.vocab = new Map(Object.entries(vocabObj).map(([k, v]) => [k, Number(v)]));
61
+ this.idToToken = new Map([...this.vocab].map(([k, v]) => [v, k]));
62
+ let mergeLines;
63
+ if (typeof merges === 'string') {
64
+ const res = await fetch(merges);
65
+ const txt = await res.text();
66
+ mergeLines = txt.split('\n').filter(l => l && !l.startsWith('#'));
67
+ }
68
+ else {
69
+ mergeLines = merges;
70
+ }
71
+ this.merges = new Map();
72
+ mergeLines.forEach((line, rank) => {
73
+ this.merges.set(line.trim(), rank);
74
+ });
75
+ this.bosId = this.vocab.get(this.bosToken) ?? null;
76
+ this.eosId = this.vocab.get(this.eosToken) ?? null;
77
+ this.padId = this.vocab.get(this.padToken) ?? null;
78
+ }
79
+ loadFromObjects(vocabObj, mergeArr) {
80
+ this.vocab = new Map(Object.entries(vocabObj).map(([k, v]) => [k, Number(v)]));
81
+ this.idToToken = new Map([...this.vocab].map(([k, v]) => [v, k]));
82
+ this.merges = new Map(mergeArr.map((m, i) => [m, i]));
83
+ this.bosId = this.vocab.get(this.bosToken) ?? null;
84
+ this.eosId = this.vocab.get(this.eosToken) ?? null;
85
+ this.padId = this.vocab.get(this.padToken) ?? null;
86
+ }
87
+ encode(text, opts = {}) {
88
+ const words = text.match(PRE_TOKENIZE_RE) ?? [];
89
+ const ids = [];
90
+ if (opts.addBos && this.bosId !== null)
91
+ ids.push(this.bosId);
92
+ for (const word of words) {
93
+ const bytes = new TextEncoder().encode(word);
94
+ const byteStr = Array.from(bytes).map(b => BYTE_ENCODER.get(b) ?? '?').join('');
95
+ const bpeTokens = this._bpe(byteStr);
96
+ for (const tok of bpeTokens) {
97
+ const id = this.vocab.get(tok);
98
+ if (id !== undefined) {
99
+ ids.push(id);
100
+ }
101
+ else {
102
+ for (const ch of tok) {
103
+ const cid = this.vocab.get(ch);
104
+ if (cid !== undefined)
105
+ ids.push(cid);
106
+ }
107
+ }
108
+ }
109
+ }
110
+ if (opts.addEos && this.eosId !== null)
111
+ ids.push(this.eosId);
112
+ return ids;
113
+ }
114
+ decode(ids) {
115
+ let byteStr = '';
116
+ for (const id of ids) {
117
+ const tok = this.idToToken.get(id);
118
+ if (tok !== undefined)
119
+ byteStr += tok;
120
+ }
121
+ const bytes = new Uint8Array([...byteStr].map(ch => BYTE_DECODER.get(ch) ?? ch.codePointAt(0) ?? 0));
122
+ try {
123
+ return new TextDecoder('utf-8').decode(bytes);
124
+ }
125
+ catch {
126
+ return byteStr;
127
+ }
128
+ }
129
+ _bpe(word) {
130
+ if (this.vocab.has(word))
131
+ return [word];
132
+ let symbols = [...word];
133
+ while (symbols.length > 1) {
134
+ let bestRank = Infinity;
135
+ let bestIdx = -1;
136
+ for (let i = 0; i < symbols.length - 1; i++) {
137
+ const pair = symbols[i] + ' ' + symbols[i + 1];
138
+ const rank = this.merges.get(pair);
139
+ if (rank !== undefined && rank < bestRank) {
140
+ bestRank = rank;
141
+ bestIdx = i;
142
+ }
143
+ }
144
+ if (bestIdx === -1)
145
+ break;
146
+ const merged = symbols[bestIdx] + symbols[bestIdx + 1];
147
+ symbols = [
148
+ ...symbols.slice(0, bestIdx),
149
+ merged,
150
+ ...symbols.slice(bestIdx + 2),
151
+ ];
152
+ }
153
+ return symbols;
154
+ }
155
+ padOrTruncate(ids, maxLen, side = 'right') {
156
+ if (ids.length >= maxLen)
157
+ return ids.slice(0, maxLen);
158
+ const padId = this.padId ?? 0;
159
+ const pad = new Array(maxLen - ids.length).fill(padId);
160
+ return side === 'right' ? [...ids, ...pad] : [...pad, ...ids];
161
+ }
162
+ get vocabSize() { return this.vocab.size; }
163
+ }
164
+ //# sourceMappingURL=bpe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bpe.js","sourceRoot":"","sources":["../../src/tokenizer/bpe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * autograd.ts – Lightweight tape-based automatic differentiation engine.
3
+ */
4
+ export declare class Tensor {
5
+ data: GPUBuffer | null;
6
+ shape: number[];
7
+ numel: number;
8
+ requiresGrad: boolean;
9
+ grad: GPUBuffer | null;
10
+ _gradFn: number | null;
11
+ constructor(data: GPUBuffer | null, shape: number[], requiresGrad?: boolean);
12
+ get byteSize(): number;
13
+ zeroGrad(device: GPUDevice): void;
14
+ destroy(): void;
15
+ }
16
+ export declare function enableGrad(): void;
17
+ export declare function noGrad(): void;
18
+ export declare function clearTape(): void;
19
+ export declare function recordOperation(backwardFn: () => void | Promise<void>): number;
20
+ export declare function backward(): Promise<void>;
21
+ export declare function ensureGradBuffer(device: GPUDevice, tensor: Tensor): void;
22
+ export declare function allocateGradients(device: GPUDevice, tensors: Tensor[]): void;
23
+ export declare function zeroGradients(device: GPUDevice, tensors: Tensor[]): void;
24
+ export declare function onesLikeScalar(device: GPUDevice): GPUBuffer;
25
+ export declare function crossEntropyLoss(logits: Float32Array, targetId: number): number;
26
+ export declare function crossEntropyGrad(logits: Float32Array, targetId: number): Float32Array;
27
+ //# sourceMappingURL=autograd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autograd.d.ts","sourceRoot":"","sources":["../../src/training/autograd.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,qBAAa,MAAM;IACf,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEX,IAAI,EAAE,SAAS,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,YAAY,UAAQ;IASzE,IAAI,QAAQ,IAAI,MAAM,CAA2B;IAEjD,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAMjC,OAAO,IAAI,IAAI;CAMlB;AAED,wBAAgB,UAAU,IAAI,IAAI,CAA2B;AAC7D,wBAAgB,MAAM,IAAI,IAAI,CAA+B;AAC7D,wBAAgB,SAAS,IAAI,IAAI,CAAkB;AAEnD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAI9E;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAK9C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAWxE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAI5E;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAMxE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAW3D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW/E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAiBrF"}