@seanhogg/builderforce-memory-engine 2026.7.14 → 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.
Files changed (186) hide show
  1. package/README.md +14 -0
  2. package/dist/bench/adaptation.d.ts +57 -0
  3. package/dist/bench/adaptation.d.ts.map +1 -0
  4. package/dist/bench/adaptation.js +167 -0
  5. package/dist/bench/adaptation.js.map +1 -0
  6. package/dist/bench/harness.d.ts +2 -0
  7. package/dist/bench/harness.d.ts.map +1 -1
  8. package/dist/bench/harness.js +1 -1
  9. package/dist/bench/harness.js.map +1 -1
  10. package/dist/bench/index.d.ts +5 -3
  11. package/dist/bench/index.d.ts.map +1 -1
  12. package/dist/bench/index.js +4 -2
  13. package/dist/bench/index.js.map +1 -1
  14. package/dist/bench/types.d.ts +88 -0
  15. package/dist/bench/types.d.ts.map +1 -1
  16. package/dist/evermind/adapt.d.ts +40 -0
  17. package/dist/evermind/adapt.d.ts.map +1 -0
  18. package/dist/evermind/adapt.js +25 -0
  19. package/dist/evermind/adapt.js.map +1 -0
  20. package/dist/evermind/delta_wire.d.ts +43 -0
  21. package/dist/evermind/delta_wire.d.ts.map +1 -0
  22. package/dist/evermind/delta_wire.js +94 -0
  23. package/dist/evermind/delta_wire.js.map +1 -0
  24. package/dist/evermind/eval.d.ts +31 -0
  25. package/dist/evermind/eval.d.ts.map +1 -0
  26. package/dist/evermind/eval.js +36 -0
  27. package/dist/evermind/eval.js.map +1 -0
  28. package/dist/evermind/index.d.ts +16 -0
  29. package/dist/evermind/index.d.ts.map +1 -0
  30. package/dist/evermind/index.js +11 -0
  31. package/dist/evermind/index.js.map +1 -0
  32. package/dist/evermind/merge.d.ts +21 -0
  33. package/dist/evermind/merge.d.ts.map +1 -0
  34. package/dist/evermind/merge.js +79 -0
  35. package/dist/evermind/merge.js.map +1 -0
  36. package/dist/{moe/moe_package.d.ts → evermind/package.d.ts} +55 -5
  37. package/dist/evermind/package.d.ts.map +1 -0
  38. package/dist/{moe/moe_package.js → evermind/package.js} +118 -19
  39. package/dist/evermind/package.js.map +1 -0
  40. package/dist/import/foreign/adapter.d.ts +59 -0
  41. package/dist/import/foreign/adapter.d.ts.map +1 -0
  42. package/dist/import/foreign/adapter.js +76 -0
  43. package/dist/import/foreign/adapter.js.map +1 -0
  44. package/dist/import/foreign/apply.d.ts +23 -0
  45. package/dist/import/foreign/apply.d.ts.map +1 -0
  46. package/dist/import/foreign/apply.js +43 -0
  47. package/dist/import/foreign/apply.js.map +1 -0
  48. package/dist/import/foreign/codestral_mamba.d.ts +57 -0
  49. package/dist/import/foreign/codestral_mamba.d.ts.map +1 -0
  50. package/dist/import/foreign/codestral_mamba.js +174 -0
  51. package/dist/import/foreign/codestral_mamba.js.map +1 -0
  52. package/dist/import/foreign/falcon_mamba.d.ts +51 -0
  53. package/dist/import/foreign/falcon_mamba.d.ts.map +1 -0
  54. package/dist/import/foreign/falcon_mamba.js +131 -0
  55. package/dist/import/foreign/falcon_mamba.js.map +1 -0
  56. package/dist/import/foreign/index.d.ts +21 -0
  57. package/dist/import/foreign/index.d.ts.map +1 -0
  58. package/dist/import/foreign/index.js +18 -0
  59. package/dist/import/foreign/index.js.map +1 -0
  60. package/dist/import/foreign/plan.d.ts +122 -0
  61. package/dist/import/foreign/plan.d.ts.map +1 -0
  62. package/dist/import/foreign/plan.js +171 -0
  63. package/dist/import/foreign/plan.js.map +1 -0
  64. package/dist/import/foreign/registry.d.ts +35 -0
  65. package/dist/import/foreign/registry.d.ts.map +1 -0
  66. package/dist/import/foreign/registry.js +89 -0
  67. package/dist/import/foreign/registry.js.map +1 -0
  68. package/dist/import/index.d.ts +7 -0
  69. package/dist/import/index.d.ts.map +1 -1
  70. package/dist/import/index.js +7 -0
  71. package/dist/import/index.js.map +1 -1
  72. package/dist/index.d.ts +25 -12
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +21 -9
  75. package/dist/index.js.map +1 -1
  76. package/dist/kernels/selective_scan.d.ts.map +1 -1
  77. package/dist/kernels/selective_scan.js +15 -9
  78. package/dist/kernels/selective_scan.js.map +1 -1
  79. package/dist/kernels/slice.d.ts +26 -0
  80. package/dist/kernels/slice.d.ts.map +1 -0
  81. package/dist/kernels/slice.js +52 -0
  82. package/dist/kernels/slice.js.map +1 -0
  83. package/dist/kernels/weight_update.d.ts.map +1 -1
  84. package/dist/kernels/weight_update.js +30 -4
  85. package/dist/kernels/weight_update.js.map +1 -1
  86. package/dist/lm/evermind_lm.d.ts +110 -1
  87. package/dist/lm/evermind_lm.d.ts.map +1 -1
  88. package/dist/lm/evermind_lm.js +220 -35
  89. package/dist/lm/evermind_lm.js.map +1 -1
  90. package/dist/lm/index.d.ts +4 -2
  91. package/dist/lm/index.d.ts.map +1 -1
  92. package/dist/lm/index.js +3 -1
  93. package/dist/lm/index.js.map +1 -1
  94. package/dist/lm/text_embedder.d.ts +55 -0
  95. package/dist/lm/text_embedder.d.ts.map +1 -0
  96. package/dist/lm/text_embedder.js +62 -0
  97. package/dist/lm/text_embedder.js.map +1 -0
  98. package/dist/model/attention_block.d.ts.map +1 -1
  99. package/dist/model/attention_block.js +9 -5
  100. package/dist/model/attention_block.js.map +1 -1
  101. package/dist/model/mamba1_block.d.ts.map +1 -1
  102. package/dist/model/mamba1_block.js +28 -12
  103. package/dist/model/mamba1_block.js.map +1 -1
  104. package/dist/model/mamba2_block.d.ts.map +1 -1
  105. package/dist/model/mamba2_block.js +14 -9
  106. package/dist/model/mamba2_block.js.map +1 -1
  107. package/dist/model/mamba3_block.d.ts.map +1 -1
  108. package/dist/model/mamba3_block.js +14 -9
  109. package/dist/model/mamba3_block.js.map +1 -1
  110. package/dist/moe/index.d.ts +0 -2
  111. package/dist/moe/index.d.ts.map +1 -1
  112. package/dist/moe/index.js +0 -1
  113. package/dist/moe/index.js.map +1 -1
  114. package/dist/optim/adamw.d.ts +32 -0
  115. package/dist/optim/adamw.d.ts.map +1 -1
  116. package/dist/optim/adamw.js +34 -0
  117. package/dist/optim/adamw.js.map +1 -1
  118. package/dist/tokenizer/bpe.d.ts +28 -0
  119. package/dist/tokenizer/bpe.d.ts.map +1 -1
  120. package/dist/tokenizer/bpe.js +47 -0
  121. package/dist/tokenizer/bpe.js.map +1 -1
  122. package/dist/training/cpu_ops.d.ts +44 -0
  123. package/dist/training/cpu_ops.d.ts.map +1 -0
  124. package/dist/training/cpu_ops.js +111 -0
  125. package/dist/training/cpu_ops.js.map +1 -0
  126. package/dist/training/mamba1_cpu.d.ts +109 -0
  127. package/dist/training/mamba1_cpu.d.ts.map +1 -0
  128. package/dist/training/mamba1_cpu.js +316 -0
  129. package/dist/training/mamba1_cpu.js.map +1 -0
  130. package/dist/training/model_cpu.d.ts +100 -0
  131. package/dist/training/model_cpu.d.ts.map +1 -0
  132. package/dist/training/model_cpu.js +252 -0
  133. package/dist/training/model_cpu.js.map +1 -0
  134. package/dist/training/trainer.d.ts +156 -16
  135. package/dist/training/trainer.d.ts.map +1 -1
  136. package/dist/training/trainer.js +327 -101
  137. package/dist/training/trainer.js.map +1 -1
  138. package/dist/utils/base64.d.ts +12 -0
  139. package/dist/utils/base64.d.ts.map +1 -0
  140. package/dist/utils/base64.js +27 -0
  141. package/dist/utils/base64.js.map +1 -0
  142. package/package.json +3 -1
  143. package/src/bench/adaptation.ts +180 -0
  144. package/src/bench/harness.ts +1 -1
  145. package/src/bench/index.ts +13 -2
  146. package/src/bench/types.ts +93 -0
  147. package/src/evermind/adapt.ts +61 -0
  148. package/src/evermind/delta_wire.ts +114 -0
  149. package/src/evermind/eval.ts +62 -0
  150. package/src/evermind/index.ts +33 -0
  151. package/src/evermind/merge.ts +106 -0
  152. package/src/{moe/moe_package.ts → evermind/package.ts} +148 -17
  153. package/src/import/foreign/adapter.ts +106 -0
  154. package/src/import/foreign/apply.ts +54 -0
  155. package/src/import/foreign/codestral_mamba.ts +224 -0
  156. package/src/import/foreign/falcon_mamba.ts +173 -0
  157. package/src/import/foreign/index.ts +37 -0
  158. package/src/import/foreign/plan.ts +294 -0
  159. package/src/import/foreign/registry.ts +126 -0
  160. package/src/import/index.ts +30 -0
  161. package/src/index.ts +98 -13
  162. package/src/kernels/selective_scan.ts +15 -9
  163. package/src/kernels/slice.ts +64 -0
  164. package/src/kernels/weight_update.ts +30 -4
  165. package/src/lm/evermind_lm.ts +244 -34
  166. package/src/lm/index.ts +6 -2
  167. package/src/lm/text_embedder.ts +84 -0
  168. package/src/model/attention_block.ts +9 -5
  169. package/src/model/mamba1_block.ts +28 -12
  170. package/src/model/mamba2_block.ts +14 -9
  171. package/src/model/mamba3_block.ts +14 -9
  172. package/src/moe/index.ts +0 -9
  173. package/src/optim/adamw.ts +60 -0
  174. package/src/tokenizer/bpe.ts +55 -0
  175. package/src/training/cpu_ops.ts +127 -0
  176. package/src/training/mamba1_cpu.ts +421 -0
  177. package/src/training/model_cpu.ts +360 -0
  178. package/src/training/trainer.ts +397 -154
  179. package/src/utils/base64.ts +28 -0
  180. package/dist/model/mamba_block.d.ts +0 -64
  181. package/dist/model/mamba_block.d.ts.map +0 -1
  182. package/dist/model/mamba_block.js +0 -303
  183. package/dist/model/mamba_block.js.map +0 -1
  184. package/dist/moe/moe_package.d.ts.map +0 -1
  185. package/dist/moe/moe_package.js.map +0 -1
  186. package/src/model/mamba_block.ts +0 -401
@@ -1,5 +1,5 @@
1
1
  /**
2
- * moe_package.ts — EvermindModelPackage: the portable, publishable AI artifact.
2
+ * evermind/package.ts — EvermindModelPackage: the portable, publishable AI artifact.
3
3
  *
4
4
  * This is the unit a creator publishes to the marketplace and a buyer downloads
5
5
  * and runs: a self-describing manifest (name, version, config, model card,
@@ -10,9 +10,10 @@
10
10
  * Zero-dep and isomorphic: serialises via TextEncoder/TextDecoder, runs in the
11
11
  * browser (where models are trained) and in Node/Workers (where they execute).
12
12
  */
13
- import { SharedExpertMoE } from "./moe_model.js";
13
+ import { SharedExpertMoE } from "../moe/moe_model.js";
14
14
  import { EvermindLM } from "../lm/evermind_lm.js";
15
15
  import { VideoRVQCodec } from "../codec/video_rvq.js";
16
+ import { BPETokenizer } from "../tokenizer/bpe.js";
16
17
  /** First 4 bytes of a serialised package: "EVM1". */
17
18
  const PKG_MAGIC = 0x45564d31;
18
19
  const PKG_VERSION = 1;
@@ -34,17 +35,47 @@ export class EvermindModelPackage {
34
35
  manifest;
35
36
  checkpoint;
36
37
  codec;
38
+ tokenizer;
37
39
  constructor(manifest, checkpoint,
38
40
  /** Serialized media codec ("VRQ0" blob), present for video/image packages. */
39
- codec) {
41
+ codec,
42
+ /** Serialized BPE tokenizer ("BPE0" blob) — present when the package embeds one. */
43
+ tokenizer) {
40
44
  this.manifest = manifest;
41
45
  this.checkpoint = checkpoint;
42
46
  this.codec = codec;
47
+ this.tokenizer = tokenizer;
48
+ }
49
+ /**
50
+ * Serialise `meta.tokenizer` and the manifest fields describing it, or `{}` when
51
+ * no tokenizer was supplied. Shared by every `from*` factory so the vocab-size
52
+ * cross-check exists in exactly one place.
53
+ */
54
+ static _tokenizerSection(meta, modelVocabSize) {
55
+ if (!meta.tokenizer)
56
+ return { fields: {} };
57
+ const vocabSize = meta.tokenizer.vocabSize;
58
+ if (modelVocabSize != null && vocabSize !== modelVocabSize) {
59
+ throw new Error(`EvermindModelPackage: tokenizer vocabSize (${vocabSize}) must equal the model's (${modelVocabSize}) — ` +
60
+ "a mismatched pair decodes to nonsense.");
61
+ }
62
+ const blob = meta.tokenizer.serialize();
63
+ return {
64
+ blob,
65
+ fields: {
66
+ tokenizerFormat: "BPE0",
67
+ tokenizerBytes: blob.byteLength,
68
+ tokenizerChecksum: fnv1a(new Uint8Array(blob)),
69
+ tokenizerVocabSize: vocabSize,
70
+ },
71
+ };
43
72
  }
44
73
  /** Package a trained model with its publishing metadata. */
45
74
  static fromModel(model, meta) {
46
75
  const fp16 = meta.fp16 ?? false;
47
76
  const checkpoint = model.exportWeights({ fp16 });
77
+ // A bare MoE layer has no vocabulary of its own, so there is nothing to cross-check.
78
+ const tokenizer = EvermindModelPackage._tokenizerSection(meta, undefined);
48
79
  const manifest = {
49
80
  schema: "evermind.model/1",
50
81
  name: meta.name,
@@ -54,16 +85,19 @@ export class EvermindModelPackage {
54
85
  paramCount: model.parameters().reduce((n, p) => n + p.numel, 0),
55
86
  checkpointFormat: "MoE0",
56
87
  checkpointFp16: fp16,
88
+ ...(tokenizer.blob ? { checkpointBytes: checkpoint.byteLength } : {}),
57
89
  checksum: fnv1a(new Uint8Array(checkpoint)),
90
+ ...tokenizer.fields,
58
91
  card: meta.card,
59
92
  ...(meta.createdAt ? { createdAt: meta.createdAt } : {}),
60
93
  };
61
- return new EvermindModelPackage(manifest, checkpoint);
94
+ return new EvermindModelPackage(manifest, checkpoint, undefined, tokenizer.blob);
62
95
  }
63
96
  /** Package a trained generative {@link EvermindLM} — the runnable marketplace AI. */
64
97
  static fromLM(lm, meta) {
65
98
  const fp16 = meta.fp16 ?? false;
66
99
  const checkpoint = lm.exportWeights({ fp16 });
100
+ const tokenizer = EvermindModelPackage._tokenizerSection(meta, lm.config.vocabSize);
67
101
  const manifest = {
68
102
  schema: "evermind.model/1",
69
103
  name: meta.name,
@@ -73,11 +107,13 @@ export class EvermindModelPackage {
73
107
  paramCount: lm.parameters().reduce((n, p) => n + p.data.length, 0),
74
108
  checkpointFormat: "EVL0",
75
109
  checkpointFp16: fp16,
110
+ ...(tokenizer.blob ? { checkpointBytes: checkpoint.byteLength } : {}),
76
111
  checksum: fnv1a(new Uint8Array(checkpoint)),
112
+ ...tokenizer.fields,
77
113
  card: meta.card,
78
114
  ...(meta.createdAt ? { createdAt: meta.createdAt } : {}),
79
115
  };
80
- return new EvermindModelPackage(manifest, checkpoint);
116
+ return new EvermindModelPackage(manifest, checkpoint, undefined, tokenizer.blob);
81
117
  }
82
118
  /**
83
119
  * Package a video/image generative model: its {@link EvermindLM} weights AND the
@@ -92,6 +128,7 @@ export class EvermindModelPackage {
92
128
  const fp16 = meta.fp16 ?? false;
93
129
  const checkpoint = lm.exportWeights({ fp16 });
94
130
  const codecBlob = codec.serialize();
131
+ const tokenizer = EvermindModelPackage._tokenizerSection(meta, lm.config.vocabSize);
95
132
  const manifest = {
96
133
  schema: "evermind.model/1",
97
134
  name: meta.name,
@@ -105,18 +142,25 @@ export class EvermindModelPackage {
105
142
  checkpointBytes: checkpoint.byteLength,
106
143
  checksum: fnv1a(new Uint8Array(checkpoint)),
107
144
  codecFormat: "VRQ0",
145
+ ...(tokenizer.blob ? { codecBytes: codecBlob.byteLength } : {}),
108
146
  codecChecksum: fnv1a(new Uint8Array(codecBlob)),
147
+ ...tokenizer.fields,
109
148
  card: meta.card,
110
149
  ...(meta.createdAt ? { createdAt: meta.createdAt } : {}),
111
150
  };
112
- return new EvermindModelPackage(manifest, checkpoint, codecBlob);
151
+ return new EvermindModelPackage(manifest, checkpoint, codecBlob, tokenizer.blob);
113
152
  }
114
- /** Serialise to a single `.evermind` blob: magic, version, manifest, checkpoint[, codec]. */
153
+ /**
154
+ * Serialise to a single `.evermind` blob: magic, version, manifest, checkpoint
155
+ * [, codec][, tokenizer]. Each section's length is fixed in the manifest whenever
156
+ * another section follows it, so the reader never has to guess where one ends.
157
+ */
115
158
  toBlob() {
116
159
  const manifestBytes = new TextEncoder().encode(JSON.stringify(this.manifest));
117
160
  const headerBytes = 12; // magic, version, manifestLen
118
161
  const codecBytes = this.codec?.byteLength ?? 0;
119
- const out = new ArrayBuffer(headerBytes + manifestBytes.byteLength + this.checkpoint.byteLength + codecBytes);
162
+ const tokBytes = this.tokenizer?.byteLength ?? 0;
163
+ const out = new ArrayBuffer(headerBytes + manifestBytes.byteLength + this.checkpoint.byteLength + codecBytes + tokBytes);
120
164
  const head = new Uint32Array(out, 0, 3);
121
165
  head[0] = PKG_MAGIC;
122
166
  head[1] = PKG_VERSION;
@@ -126,8 +170,12 @@ export class EvermindModelPackage {
126
170
  o += manifestBytes.byteLength;
127
171
  new Uint8Array(out, o, this.checkpoint.byteLength).set(new Uint8Array(this.checkpoint));
128
172
  o += this.checkpoint.byteLength;
129
- if (this.codec)
173
+ if (this.codec) {
130
174
  new Uint8Array(out, o, codecBytes).set(new Uint8Array(this.codec));
175
+ o += codecBytes;
176
+ }
177
+ if (this.tokenizer)
178
+ new Uint8Array(out, o, tokBytes).set(new Uint8Array(this.tokenizer));
131
179
  return out;
132
180
  }
133
181
  /** Parse a `.evermind` blob. Throws on bad magic / truncation. */
@@ -145,18 +193,34 @@ export class EvermindModelPackage {
145
193
  const manifestBytes = new Uint8Array(buffer, headerBytes, manifestLen);
146
194
  const manifest = JSON.parse(new TextDecoder().decode(manifestBytes));
147
195
  const bodyStart = headerBytes + manifestLen;
148
- // A codec section follows the checkpoint only when the manifest fixed the
149
- // checkpoint length; otherwise the checkpoint runs to end-of-blob (text layout).
196
+ // Sections run checkpoint -> codec -> tokenizer, each present only when the
197
+ // manifest says so. A section's length is explicit whenever another follows it;
198
+ // the last section runs to end-of-blob. That keeps every package written before
199
+ // the codec and tokenizer sections existed readable byte for byte.
150
200
  const cpBytes = manifest.checkpointBytes;
151
- if (cpBytes != null) {
152
- if (bodyStart + cpBytes > buffer.byteLength) {
153
- throw new Error("EvermindModelPackage.fromBlob: truncated (checkpointBytes exceeds blob)");
201
+ if (cpBytes == null)
202
+ return new EvermindModelPackage(manifest, buffer.slice(bodyStart));
203
+ if (bodyStart + cpBytes > buffer.byteLength) {
204
+ throw new Error("EvermindModelPackage.fromBlob: truncated (checkpointBytes exceeds blob)");
205
+ }
206
+ const checkpoint = buffer.slice(bodyStart, bodyStart + cpBytes);
207
+ let o = bodyStart + cpBytes;
208
+ const tokBytes = manifest.tokenizerBytes ?? 0;
209
+ if (o + tokBytes > buffer.byteLength) {
210
+ throw new Error("EvermindModelPackage.fromBlob: truncated (tokenizerBytes exceeds blob)");
211
+ }
212
+ const tokStart = buffer.byteLength - tokBytes;
213
+ let codec;
214
+ if (o < tokStart) {
215
+ const codecEnd = manifest.codecBytes != null ? o + manifest.codecBytes : tokStart;
216
+ if (codecEnd > tokStart) {
217
+ throw new Error("EvermindModelPackage.fromBlob: truncated (codecBytes overruns the tokenizer section)");
154
218
  }
155
- const checkpoint = buffer.slice(bodyStart, bodyStart + cpBytes);
156
- const codec = bodyStart + cpBytes < buffer.byteLength ? buffer.slice(bodyStart + cpBytes) : undefined;
157
- return new EvermindModelPackage(manifest, checkpoint, codec);
219
+ codec = buffer.slice(o, codecEnd);
220
+ o = codecEnd;
158
221
  }
159
- return new EvermindModelPackage(manifest, buffer.slice(bodyStart));
222
+ const tokenizer = tokBytes > 0 ? buffer.slice(tokStart) : undefined;
223
+ return new EvermindModelPackage(manifest, checkpoint, codec, tokenizer);
160
224
  }
161
225
  /** Verify integrity + structural sanity before trusting a downloaded package. */
162
226
  validate() {
@@ -195,8 +259,43 @@ export class EvermindModelPackage {
195
259
  }
196
260
  }
197
261
  }
262
+ // An embedded tokenizer must be intact AND agree with the model's vocabulary —
263
+ // a corrupt or mismatched one decodes confidently into nonsense.
264
+ if (this.manifest.tokenizerFormat) {
265
+ if (!this.tokenizer) {
266
+ errors.push("manifest declares an embedded tokenizer but the package has no tokenizer section");
267
+ }
268
+ else {
269
+ const tokActual = fnv1a(new Uint8Array(this.tokenizer));
270
+ if (tokActual !== this.manifest.tokenizerChecksum) {
271
+ errors.push(`tokenizer checksum mismatch (manifest ${this.manifest.tokenizerChecksum}, actual ${tokActual}) - corrupt tokenizer`);
272
+ }
273
+ const modelVocab = this.manifest.config?.['vocabSize'];
274
+ const tokVocab = this.manifest.tokenizerVocabSize;
275
+ if (modelVocab != null && tokVocab != null && modelVocab !== tokVocab) {
276
+ errors.push(`tokenizer vocabSize (${tokVocab}) does not match the model's (${modelVocab})`);
277
+ }
278
+ }
279
+ }
198
280
  return { ok: errors.length === 0, errors };
199
281
  }
282
+ /**
283
+ * The tokenizer embedded in this package, or `null` when it carries none.
284
+ *
285
+ * A package WITH one is self-contained: a consumer runs `loadLM()` +
286
+ * `loadTokenizer()` and can turn text into tokens and back with the exact
287
+ * vocabulary the model was trained on. A package without one still loads — every
288
+ * artifact published before this section existed is in that shape — but the
289
+ * consumer must supply the matching vocabulary itself.
290
+ */
291
+ loadTokenizer() {
292
+ if (!this.manifest.tokenizerFormat || !this.tokenizer)
293
+ return null;
294
+ const v = this.validate();
295
+ if (!v.ok)
296
+ throw new Error(`EvermindModelPackage.loadTokenizer: ${v.errors.join("; ")}`);
297
+ return BPETokenizer.deserialize(this.tokenizer);
298
+ }
200
299
  /** Reconstruct the bare MoE layer. Validates first; throws if invalid / wrong type. */
201
300
  loadModel() {
202
301
  const v = this.validate();
@@ -237,4 +336,4 @@ export class EvermindModelPackage {
237
336
  return { lm: this.loadLM(), codec: VideoRVQCodec.deserialize(this.codec), modality };
238
337
  }
239
338
  }
240
- //# sourceMappingURL=moe_package.js.map
339
+ //# sourceMappingURL=package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/evermind/package.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * import/foreign/adapter.ts — what every foreign-architecture adapter provides,
3
+ * plus the shared `config.json` readers so no adapter re-implements them.
4
+ *
5
+ * An adapter answers two questions about a published checkpoint:
6
+ * 1. what {@link HybridMambaModelConfig} do these weights fit? and
7
+ * 2. which {@link PortPlan} moves them onto this engine's parameters?
8
+ * Everything downstream (detection, execution, upload) is architecture-agnostic.
9
+ */
10
+ import type { HybridMambaModelConfig } from "../../model/mamba_model.js";
11
+ import type { PortPlan } from "./plan.js";
12
+ /** A checkpoint's parsed `config.json` (HF) or `params.json` (Mistral-native). */
13
+ export type ForeignConfig = Record<string, unknown>;
14
+ /** Everything a port needs to know about one checkpoint. */
15
+ export interface PortTarget {
16
+ /** Construct a `HybridMambaModel` with this to receive the ported weights. */
17
+ modelConfig: HybridMambaModelConfig;
18
+ plan: PortPlan;
19
+ }
20
+ export interface ForeignMambaAdapter {
21
+ /** Stable id, e.g. `falcon_mamba`. */
22
+ readonly id: string;
23
+ /** Human-readable label for errors and reports. */
24
+ readonly label: string;
25
+ /** `config.model_type` values this adapter claims. */
26
+ readonly modelTypes: readonly string[];
27
+ /** `config.architectures[]` entries this adapter claims. */
28
+ readonly architectures: readonly string[];
29
+ /** Read the checkpoint's geometry and build its port plan. */
30
+ describe(config: ForeignConfig): PortTarget;
31
+ }
32
+ /** A positive integer field, required. */
33
+ export declare function requireInt(config: ForeignConfig, key: string): number;
34
+ /** The first of `keys` present as a positive integer, else `undefined`. */
35
+ export declare function firstInt(config: ForeignConfig, keys: readonly string[]): number | undefined;
36
+ /**
37
+ * The mixer's inner width.
38
+ *
39
+ * `intermediate_size` is authoritative and `expand` is NOT trustworthy:
40
+ * `tiiuae/falcon-mamba-7b` ships `expand: 16` against `hidden_size: 4096` while
41
+ * its weights are `d_inner = 8192`. Transformers only tolerates it because the
42
+ * JSON's `intermediate_size` is re-applied over the derived value, so a port
43
+ * that trusted `expand` would build a model 8× too wide. Fall back to
44
+ * `expand * hidden_size` only when `intermediate_size` is absent.
45
+ */
46
+ export declare function readInnerSize(config: ForeignConfig, dModel: number): number;
47
+ /**
48
+ * `d_inner / d_model` as this engine's integer `expand` factor — the blocks size
49
+ * themselves from it, so a non-integer ratio cannot be represented and must fail
50
+ * loudly rather than silently truncate.
51
+ */
52
+ export declare function expandFactor(dInner: number, dModel: number, label: string): number;
53
+ /**
54
+ * `time_step_rank`, resolving HF's `"auto"` to `ceil(hidden_size / 16)` — the
55
+ * same default `Mamba1Block` applies, so an `"auto"` checkpoint and this engine
56
+ * agree without the caller doing anything.
57
+ */
58
+ export declare function readTimeStepRank(config: ForeignConfig, dModel: number): number;
59
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/import/foreign/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,4DAA4D;AAC5D,MAAM,WAAW,UAAU;IACzB,8EAA8E;IAC9E,WAAW,EAAE,sBAAsB,CAAC;IACpC,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC;CAC7C;AAQD,0CAA0C;AAC1C,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMrE;AAED,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAM3F;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAQ3E;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQlF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAK9E"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * import/foreign/adapter.ts — what every foreign-architecture adapter provides,
3
+ * plus the shared `config.json` readers so no adapter re-implements them.
4
+ *
5
+ * An adapter answers two questions about a published checkpoint:
6
+ * 1. what {@link HybridMambaModelConfig} do these weights fit? and
7
+ * 2. which {@link PortPlan} moves them onto this engine's parameters?
8
+ * Everything downstream (detection, execution, upload) is architecture-agnostic.
9
+ */
10
+ // ── config.json readers ──────────────────────────────────────────────────────
11
+ function fail(key, detail) {
12
+ throw new Error(`import/foreign: config field "${key}" ${detail}`);
13
+ }
14
+ /** A positive integer field, required. */
15
+ export function requireInt(config, key) {
16
+ const v = config[key];
17
+ if (typeof v !== "number" || !Number.isInteger(v) || v <= 0) {
18
+ fail(key, `must be a positive integer, got ${JSON.stringify(v)}`);
19
+ }
20
+ return v;
21
+ }
22
+ /** The first of `keys` present as a positive integer, else `undefined`. */
23
+ export function firstInt(config, keys) {
24
+ for (const key of keys) {
25
+ const v = config[key];
26
+ if (typeof v === "number" && Number.isInteger(v) && v > 0)
27
+ return v;
28
+ }
29
+ return undefined;
30
+ }
31
+ /**
32
+ * The mixer's inner width.
33
+ *
34
+ * `intermediate_size` is authoritative and `expand` is NOT trustworthy:
35
+ * `tiiuae/falcon-mamba-7b` ships `expand: 16` against `hidden_size: 4096` while
36
+ * its weights are `d_inner = 8192`. Transformers only tolerates it because the
37
+ * JSON's `intermediate_size` is re-applied over the derived value, so a port
38
+ * that trusted `expand` would build a model 8× too wide. Fall back to
39
+ * `expand * hidden_size` only when `intermediate_size` is absent.
40
+ */
41
+ export function readInnerSize(config, dModel) {
42
+ const stated = firstInt(config, ["intermediate_size"]);
43
+ if (stated !== undefined)
44
+ return stated;
45
+ const expand = firstInt(config, ["expand"]);
46
+ if (expand === undefined) {
47
+ fail("intermediate_size", "is absent and no usable \"expand\" was found");
48
+ }
49
+ return expand * dModel;
50
+ }
51
+ /**
52
+ * `d_inner / d_model` as this engine's integer `expand` factor — the blocks size
53
+ * themselves from it, so a non-integer ratio cannot be represented and must fail
54
+ * loudly rather than silently truncate.
55
+ */
56
+ export function expandFactor(dInner, dModel, label) {
57
+ if (dInner % dModel !== 0) {
58
+ throw new Error(`import/foreign: ${label} has d_inner ${dInner} which is not a whole multiple of ` +
59
+ `d_model ${dModel} — this engine's blocks are sized by an integer expand factor`);
60
+ }
61
+ return dInner / dModel;
62
+ }
63
+ /**
64
+ * `time_step_rank`, resolving HF's `"auto"` to `ceil(hidden_size / 16)` — the
65
+ * same default `Mamba1Block` applies, so an `"auto"` checkpoint and this engine
66
+ * agree without the caller doing anything.
67
+ */
68
+ export function readTimeStepRank(config, dModel) {
69
+ const v = config["time_step_rank"];
70
+ if (typeof v === "number" && Number.isInteger(v) && v > 0)
71
+ return v;
72
+ if (v === undefined || v === "auto")
73
+ return Math.ceil(dModel / 16);
74
+ fail("time_step_rank", `must be a positive integer or "auto", got ${JSON.stringify(v)}`);
75
+ }
76
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/import/foreign/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA4BH,gFAAgF;AAEhF,SAAS,IAAI,CAAC,GAAW,EAAE,MAAc;IACvC,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,KAAK,MAAM,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,UAAU,CAAC,MAAqB,EAAE,GAAW;IAC3D,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG,EAAE,mCAAmC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,QAAQ,CAAC,MAAqB,EAAE,IAAuB;IACrE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB,EAAE,MAAc;IACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACvD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,mBAAmB,EAAE,8CAA8C,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,MAAM,GAAG,MAAM,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,MAAc,EAAE,KAAa;IACxE,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,mBAAmB,KAAK,gBAAgB,MAAM,oCAAoC;YAChF,WAAW,MAAM,+DAA+D,CACnF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,GAAG,MAAM,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAqB,EAAE,MAAc;IACpE,MAAM,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACnC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,gBAAgB,EAAE,6CAA6C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3F,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * import/foreign/apply.ts — write ported weights into a live model.
3
+ *
4
+ * Kept separate from the port itself so the mapping stays device-free and
5
+ * testable: {@link portForeignMamba} produces plain `Float32Array`s, this is the
6
+ * only piece that needs a `GPUDevice`.
7
+ *
8
+ * Matching is by parameter NAME, never by position, so a change to
9
+ * `HybridMambaModel.parameters()` ordering can never silently mis-assign a
10
+ * buffer — an unexpected or missing name throws instead.
11
+ */
12
+ import type { HybridMambaModel } from "../../model/mamba_model.js";
13
+ import type { PortedTensors } from "./plan.js";
14
+ /**
15
+ * Upload every ported tensor into `model`'s parameter buffers.
16
+ *
17
+ * Throws when the model expects a parameter the port did not produce, when an
18
+ * element count disagrees, or when the port produced a name the model does not
19
+ * have — all three mean the model was built from a different config than
20
+ * {@link PortedCheckpoint.modelConfig}.
21
+ */
22
+ export declare function applyPortedWeights(model: HybridMambaModel, ported: PortedTensors): void;
23
+ //# sourceMappingURL=apply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/import/foreign/apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA6BvF"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * import/foreign/apply.ts — write ported weights into a live model.
3
+ *
4
+ * Kept separate from the port itself so the mapping stays device-free and
5
+ * testable: {@link portForeignMamba} produces plain `Float32Array`s, this is the
6
+ * only piece that needs a `GPUDevice`.
7
+ *
8
+ * Matching is by parameter NAME, never by position, so a change to
9
+ * `HybridMambaModel.parameters()` ordering can never silently mis-assign a
10
+ * buffer — an unexpected or missing name throws instead.
11
+ */
12
+ import { uploadBuffer } from "../../utils/gpu_utils.js";
13
+ /**
14
+ * Upload every ported tensor into `model`'s parameter buffers.
15
+ *
16
+ * Throws when the model expects a parameter the port did not produce, when an
17
+ * element count disagrees, or when the port produced a name the model does not
18
+ * have — all three mean the model was built from a different config than
19
+ * {@link PortedCheckpoint.modelConfig}.
20
+ */
21
+ export function applyPortedWeights(model, ported) {
22
+ const params = model.parameters();
23
+ const expected = new Set(params.map((p) => p.name));
24
+ const extra = [...ported.weights.keys()].filter((name) => !expected.has(name));
25
+ if (extra.length > 0) {
26
+ throw new Error(`import/foreign: ported tensors ${extra.slice(0, 5).map((n) => `"${n}"`).join(", ")}` +
27
+ `${extra.length > 5 ? ` (+${extra.length - 5} more)` : ""} have no parameter on this model — ` +
28
+ `build it from the port's modelConfig`);
29
+ }
30
+ for (const param of params) {
31
+ const data = ported.weights.get(param.name);
32
+ if (!data) {
33
+ throw new Error(`import/foreign: no ported tensor for parameter "${param.name}" — ` +
34
+ `the model was built from a different config than the port's modelConfig`);
35
+ }
36
+ if (data.length !== param.numel) {
37
+ throw new Error(`import/foreign: parameter "${param.name}" expects ${param.numel} elements, ` +
38
+ `the port produced ${data.length}`);
39
+ }
40
+ uploadBuffer(model.device, param.buf, data);
41
+ }
42
+ }
43
+ //# sourceMappingURL=apply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/import/foreign/apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGxD;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAuB,EAAE,MAAqB;IAC/E,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpD,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,kCAAkC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACnF,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,qCAAqC;YAC9F,sCAAsC,CACzC,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,mDAAmD,KAAK,CAAC,IAAI,MAAM;gBACjE,yEAAyE,CAC5E,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,8BAA8B,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,KAAK,aAAa;gBAC3E,qBAAqB,IAAI,CAAC,MAAM,EAAE,CACrC,CAAC;QACJ,CAAC;QACD,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * import/foreign/codestral_mamba.ts — weight port for Codestral-Mamba
3
+ * (`mistralai/Mamba-Codestral-7B-v0.1`, `Mamba2ForCausalLM`,
4
+ * `model_type: "mamba2"`, Mamba-2 / SSD).
5
+ *
6
+ * Source layout confirmed against the repo's published HF `config.json`, its
7
+ * `model.safetensors.index.json` (579 tensors = 9 per layer × 64 + 3 globals),
8
+ * the header of `consolidated.safetensors`, and
9
+ * `transformers/models/mamba2/modeling_mamba2.py`:
10
+ *
11
+ * backbone.embeddings.weight [vocab, d_model]
12
+ * backbone.layers.{N}.norm.weight [d_model]
13
+ * backbone.layers.{N}.mixer.in_proj.weight [2*d_inner + 2*n_groups*d_state + n_heads, d_model]
14
+ * backbone.layers.{N}.mixer.conv1d.weight [conv_dim, 1, d_conv]
15
+ * backbone.layers.{N}.mixer.conv1d.bias [conv_dim]
16
+ * backbone.layers.{N}.mixer.dt_bias [n_heads]
17
+ * backbone.layers.{N}.mixer.A_log [n_heads]
18
+ * backbone.layers.{N}.mixer.D [n_heads]
19
+ * backbone.layers.{N}.mixer.norm.weight [d_inner]
20
+ * backbone.layers.{N}.mixer.out_proj.weight [d_model, d_inner]
21
+ * backbone.norm_f.weight [d_model]
22
+ * lm_head.weight [vocab, d_model]
23
+ *
24
+ * where `conv_dim = d_inner + 2 * n_groups * d_state`. Mamba-2 has no `x_proj`
25
+ * and no `dt_proj`: B, C and dt all come out of the fused `in_proj`.
26
+ *
27
+ * Three reconciliations against `Mamba2Block`:
28
+ *
29
+ * 1. **`in_proj` row order.** Upstream splits
30
+ * `[gate (d_inner), x|B|C (conv_dim), dt (n_heads)]`; this engine's fused
31
+ * projection is `[x (d_inner), B (n_groups*d_state), C (n_groups*d_state),
32
+ * dt (n_heads)]` — the SAME tail, minus the leading gate rows. So the port
33
+ * is one contiguous row slice starting at `d_inner`, and the gate rows are
34
+ * declared as a discard (see 3).
35
+ * 2. **`A_log` convention.** Upstream uses `A = -exp(A_log)`; `ssd.ts` uses
36
+ * `A = -softplus(A_log)`. The port re-expresses the same `A` as
37
+ * `softplus⁻¹(exp(A_log))` so decay rates are preserved exactly, rather than
38
+ * copying the raw value and silently changing every head's decay.
39
+ * 3. **The gate branch.** `Mamba2Block` has no `z` gate: it RMS-norms the scan
40
+ * output and projects out, where upstream computes
41
+ * `norm(y * silu(z))`. The `d_inner × d_model` gate rows therefore have no
42
+ * target. That is a REAL loss of capability, not a formatting detail, and it
43
+ * is reported as a `PortDiscard` on every layer so a caller sees it.
44
+ *
45
+ * Also mapped without transform: `mixer.norm.weight` → the block's inner
46
+ * `normWeight` (applied ungated here, per 3), `backbone.layers.N.norm.weight` →
47
+ * `preNormWeight`, `conv1d.{weight,bias}` (depthwise, taps reversed) → the fused
48
+ * `[x, B, C]` conv, and `D` / `dt_bias` per head. Linear weights are
49
+ * `[out, in]` row-major on both sides, so no transposes.
50
+ *
51
+ * `tie_word_embeddings: false`, so `lm_head.weight` is a real stored tensor with
52
+ * no target here (`HybridMambaModel` ties its head to the embedding) — it is
53
+ * reported as unmapped.
54
+ */
55
+ import { type ForeignMambaAdapter } from "./adapter.js";
56
+ export declare const codestralMambaAdapter: ForeignMambaAdapter;
57
+ //# sourceMappingURL=codestral_mamba.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codestral_mamba.d.ts","sourceRoot":"","sources":["../../../src/import/foreign/codestral_mamba.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAIH,OAAO,EAML,KAAK,mBAAmB,EAEzB,MAAM,cAAc,CAAC;AA6FtB,eAAO,MAAM,qBAAqB,EAAE,mBAiEnC,CAAC"}